加快现代建筑的速度

我在计算机科学方面没有任何正式的资格,而是在互联网热潮的日子里教我自己的经典ASP,并设法让自己做一份工作,从那里开始我的职业生涯。我有信心,而且我认为ASP 3中的程序员相当不错,但是与其他人一样,经典ASP的问题之一就是,它非常好地隐藏了http的肮脏,所以你可以变得相当有能力在一个程序员的基础上,对您正在使用的技术的了解相对较差。

当我更改为.NET时,我将其视为经典的ASP,将单独的应用程序作为个别网站开发,这是因为当时我不了解更好。在这一点上,我转移了工作,花费了未来几年的时间,在一个单一的站点工作,其架构严重依赖于自定义对象:换句话说,我获得了大量使用.NET作为中间层开发工具的经验,按照经典“汽车”课程,通常用于教OO的OO设计。将程序分解为功能块,并根据您的类和方法。虽然我们在Agile方法下工作,但是整个设置是经典的客户端/服务器端。这适合我和我逐渐掌握.NET,并开始使用它更多的应该是,我开始看到技术固有的力量,正是为什么它比旧的ASP 3好多了。

在我最新的工作中,我发现自己突然间被两位年轻,熟练和非常尖端的程序员深入人心。他们已经建立了一个网站架构,它是沿着很多东西进行建模,这对我来说是新的,实际上我有很多麻烦的理解。该应用程序基于具有多租户的云计算模型,并且使用大量接口,工厂等进行体系结构松散耦合。他们也使用nHibernate。加入后不久,这两个人离开了,我现在据说是一个系统的高级开发人员,他的技术和架构我不太明白,我没有人提问。

除了你,互联网。

坦白说,我觉得我已经深入到了深处,我正在沉没。我不知道这是不是因为我缺乏理解这些东西的教育背景,如果我根本没有数学上足够的现代计算能力(我的数学从来都不是很好 – 我的设计方法往往是简单地调试,直到它工作,然后重构,直到它看起来很整洁),或者我是否一次被简单地呈现太多太激进的性质。但是找出它是唯一的方法是尝试学习它。

任何人都可以提出一些好的开始的地方吗?好书,教程或博客?我发现很多互联网资料只是预先假设一个我没有的理解。

您的建议非常感激。帮助一个中年人,卡在泥土开发商中得到热情再次!

请!

最佳答案
坐在海滩上 – 准备

列出你不明白的一切。在最后阶段,这份清单是你的清单。
清除你的想法 – 让自己一个新的开始,“忘记”所有你已经知道你的架构的混乱的细节。
挖掘由原始建筑师创建的每个文件。
获取项目中使用的每种技术的文档。
做咖啡。

浮动 – 管理复杂性

要浮动,你需要管理复杂性。如果你没有正确处理复杂的问题,那么在绝对没有必要的时候,你将会深入细节,你不会知道如何和在哪里停下来,陷入底层,溺水。

“My approach to design is often to
simply debug until it works, then
refactor until it looks neat”

我以为我以前就像你一样。我从头开始开发解决方案,一次添加一块,最终包含一个复杂的结构。我没有计划架构,我没有分离设计和实现,我只是编码,调试,重构。它的工作:由于复杂性增长缓慢,我不了解出现的架构。

这种做法在“继承”他人计划的复杂架构时根本不够好,你不能一次吞下整个结构 – 因为细节太多,你不能随意吞下一点点 – 因为你不会明白他们是如何相互关联的,你永远不会看到大局。

软件是复杂性管理的难题。有非常大的部分,有时被称为“子系统”,构成大局。它们中的每一个都由较小的部分组成,而又由较小的部分组成。当你看代码,你看到的只是最小的部分。所以现在忘记代码本身,至少直到看到所有更大的部分。

游泳 – 映射建筑

漂浮的第一步是看到大块。要做到这一点,你需要地图。最大的地图是最高级的架构。如果原来的建筑师离开你没有这样的地图,你必须自己创建它。就像不可能从一个山谷内映射一个地区,您无法将您的架构与低级细节进行映射。您需要站在山顶,才能360度观看所有的山谷,丘陵和山路。您需要从顶部映射您的架构。

在您获得此顶级地图后,您应该获取构成零件的地图,就像您创建一个整个地区的不详细的地图,然后创建单独的详细的子区域地图。映射应描述不同的子系统。至少应该描述每个子系统的责任,其外部接口以及它与其他子系统的交互。

潜水 – 管理细节

在潜水中有这个原则,说你不应该因为压力的变化而在深度之间移动太快。这个原则成立。当您从处理一个子系统到处理其内部子系统之一时,请确保您只能深入下一级复杂性/抽象。让你的头脑一次处理一层。

分开的概念,模式,接口和实现。 nHibernate是一个对象关系映射(ORM)解决方案。因此,在处理nHibernate本身的细节之前,您需要确保了解ORM的一般概念及其在世界上的地位。工厂是一种设计模式,所以在处理工厂之前,您应该了解什么样的设计模式以及它们的作用。

技术升高和下降,但概念依然存在。一旦你得到这些概念,这真的不重要 – 在建筑层面 – 这些概念如何表现出来。

事实上,您的架构松散耦合实际上是一件好事,因为这意味着您可以了解一个子系统的作用,而无需了解其他子系统。您的架构使用接口的事实也是好的 – 这意味着您可以了解元素如何相互交互,而无需了解其内部工作。

Waterskiing – 获得蒸馏知识

有一本书,我认为是“必读”:由史蒂夫·麦康奈尔完成的代码。它改变了我的职业生涯。

我希望这篇文章能够以某种方式帮助你,而不是完全浪费你的时间。

转载注明原文:加快现代建筑的速度 - 代码日志