软件开发人员的领域修炼之路

软件开发人员的领域修炼之路

今天的我们所面对的是一个技术迭代速度越来越快,互联网加速膨胀,信息大爆炸的时代,与之相对的,这又是一个信息匮乏的时代,面对海量的互联网信息知识,个人的认知体系,认知速度都没有改变,仍需按部就班的进行知识体系的学习。

在信息技术领域这个问题尤为突出,如果在网络上搜索“如何成为的程序员,软件工程师或架构师”之类的问题,可以搜到超过百万条数据,可见这是一个很多人都碰到的困惑。刨除影响个体发展的非技术因素,软件技术研发人员的发展目标通常是应用方案专家,领域技术专家或工程管理专家。要实现这一目标离不开个体的自我修炼和领域知识体系的修炼。

透过现象看本质,信息爆炸时代的个人认知学习是一个 1 <–> ∞ 的快速处理问题。一种最常用的解决方案是PULL模式,个体从无穷多的知识海洋中拉取,清洗,处理,然后消化吸收。另一种方案是PUSH模式,理想情况是精准推送,需要推送方对个体的当前需求有精准的把握,当前发展比较快的是离散的信息资讯推送,但对于成体系的知识推送,还是一个空白。

个体的自我修炼离不开自我约束,工作、生活与学习的平衡,同时,移动互联网的发展导致个体必须面对的一个问题是碎片化时间,随着生活节奏越来越快,这些零碎的时间虽不起眼,但被重聚之后能够让个体对知识体系的学习产生巨大的效果。

再来看一下开发人员的修炼历程,概括为修炼准备,驾驭代码,驾驭模块,驾驭框架和驾驭体系五个阶段。

修炼准备阶段

在修炼准备阶段,开发人员需要了解计算机,网络,系统及编程的基本概念。

驾驭代码阶段

软件开发人员的领域修炼之路

代码的表现形式是机器语言,汇编语言和高级语言。高级语言与计算机的硬件结构及指令系统无关,它有更强的表达能力,可方便地表示数据的运算和程序的控制结构,能更好的描述各种算法,而且容易学习掌握。

在驾驭代码阶段,开发人员选择一门语言入手,要求但不限于:

  1. 学习这门语言的概念

  2. 理解这门语言的特性

  3. 明晰这门语言为建模领域业务问题提供的基本元素

  4. 掌握操纵这门语言提供的基本元素的理论、模式和最佳实践

  5. 熟练应用这门语言为上层业务应用建模所提供的开发基础

建模并实现各种具体的领域业务,结合具体领域问题对上述五个层面不断温故而知新,达到能够快速熟练开发出各种高质量的领域业务模块的目标。以JAVA语言为例,这门面向对象的语言为建模领域业务问题提供的基本元素是类和接口,通过类和接口对现实业务问题进行抽象和封装。在具体场景中我们可以应用各种设计模式和最佳实践。

上手步骤:

  1. 入手一本详细讲解这门语言的书籍,动手编写代码并理解代码背后的运行机理

  2. 阅读各种使用这门语言建模具体领域问题的模块级项目案例代码,学习别人的设计经验

  3. 通过书籍,文章等学习前辈总结的操纵这门语言提供的基本元素的理论、模式和最佳实践经验

  4. 在实际项目模块开发中应用学习的知识,理论,模式和最佳实践

驾驭模块阶段

软件开发人员的领域修炼之路

为解决一系列常见编程任务(包括诸如字符串管理、数据收集、数据库连接以及文件访问等任务)及多种专用开发任务(控制台,桌面,OpenGL等),各种编程语言通常都会提供对应的标准库及各种运行时库,在面向对象语言中通常称为类库,在函数式编程语言中通常称为函数库。这些高级编程语言及其提供的基础库极大的简化了上层应用的开发,但面对应用领域的复杂性,仍然捉襟见肘。

是否可以在基础库的基础上提供更高层次的封装?答案是可以又不可以。以日志功能为例,说其可以是指我们可以提供一种满足日志记录需求的封装实现;说其不可以是因为有的场景需要将日志记输出到控制台,有的需要记录到文件,有的需要存储到数据库,还有的需要通过网络传输,很难用一种实现涵盖所有需求场景形成一种标准。因此对于同一业务领域问题往往会存在多种不同的实现可供选择,这些为解决某一特定业务领域的特定实现即为模块。

模块,又称构件,是能够单独命名并独立地完成一定功能的程序语句的集合(即程序代码和数据结构的集合体)。它具有两个基本的特征:外部特征和内部特征。外部特征是指模块跟外部环境联系的接口(即其他模块或程序调用该模块的方式,包括有输入输出参数、引用的全局变量)和模块的功能;内部特征是指模块的内部环境具有的特点(即该模块的局部数据和程序代码)。

模块的好处在于重用,可以大大减少重复开发的成本。

在驾驭代码阶段,开发人员的最终目标是能够快速熟练开发出各种高质量的领域业务模块,因此,当开发人员能够熟练开发各种领域业务模块时,就会自然而然跃升到驾驭模块阶段。

进入驾驭模块阶段,开发人员精力投入,思维角度及关注点开始转移到模块层面。目标是能够将中小型应用快速切分为若干业务模块及辅助模块,能够较为准确的评估每个模块的复杂度,运行效率,可维护性,人月成本。

  1. 模块通常是一个开发人员能够控制的系统组成的最大粒度。

  2. 在这一阶段,开发人员开始思考应用的模块化,耦合性和重用,思考模块之间的关系,如何在同类辅助模块中进行抉择,以组建完整应用。

  3. 对一些常用的辅助模块内部机制深入研究,理解这些模块背后的理论,标准,对模块的优缺点及适应场景有充分的认识。

  4. 能够准确把握模块之间配合的各种问题,风险,时间耗用及成本。

  5. 构建并丰富自己的模块备选仓库,为以后的架构设计打下坚实的基础。

上手步骤:

  1. 以工作中当前正在进行的项目中当前正在负责的业务模块为切入点,尝试清晰把控模块的外部特征和内部特征,确认设计是否合理,是否支持扩展性,维护性,是否违反设计准则及最佳实践。

  2. 确认该业务模块是否有依赖的辅助模块,是否对所依赖的辅助模块有深入研究,是否理解辅助模块的实现机制,背后涉及的理论、标准、模块的优缺点及最佳设计实践,如果没有,一一掌握。

  3. 尝试从系统整体视角思考并确认该业务模块存在的合理性,是否遵循最佳设计实践,是否有其他可选设计方案等。

  4. 在不同的项目中反复执行上述实践并不断总结积累,面对中小型项目可以轻松评估并把握项目的复杂度,方案选型及模块切分。

驾驭框架阶段

软件开发人员的领域修炼之路

先来看一下定义,框架是整个或部分系统的可重用设计,表现为一组抽象模块及模块实例间交互的方法;另一种定义认为,框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义。

可以说,一个框架是一个可复用的设计模块,它规定了应用的体系结构,阐明了整个设计、协作模块之间的依赖关系、责任分配和控制流程,它为模块复用提供了上下文关系。因此模块库的大规模重用也需要框架。

从代码到模块,从模块到框架,每一次跃迁都是开发人员自我修炼的升华,一次量变引发质变的结果呈现。从框架的定义可以看出框架与模块的关系,框架相比于模块粒度更大,更宏观,更复杂,应对的业务领域也更具体。一个框架往往需要多人协作实现并经得起众多案例应用才能逐步成熟稳定。

到了框架层面,开发人员很难像驾驭模块那样洞察框架内部的每一个细节,但是,得益于对框架的整体设计,构成框架的模块,模块背后的理论、标准及其之间的协作关系的清晰认知,开发人员能够准确的把握框架的功能及其适用场景,并以此作为应用骨架在其上快速构建业务需求解决方案。

框架的抉择对于项目的成功至关重要。如果对框架了解不够深入,在实际应用过程中往往会碰到框架存在BUG不够稳定,在深入运用的过程中发现某些关键功能不适用,再或者框架本身耦合度过高,很难根据需求进行定制扩展等诸多问题,严重的时候可能导致项目失败无法按时交付。

因此,要运用框架首先要能够驾驭它。

  1. 确定框架的设计目标;

  2. 对其进行拆解,确定框架的模块组成;

  3. 通过分析模块的功能,模块之间的协作关系、责任分配和控制流程;

  4. 确定框架实现设计目标的运作机理;

重复这个过程深入列出多个备选框架,确定各自的优缺点,然后根据项目需求,团队水平,框架的可持续性和学习曲线等因素进行评估和选择。最后在实际场景中对选定的框架进行应用,通过运用的结果检验框架的适用性,并积累经验。

能够驾驭模块是一个开发人员迈入架构师行列的标志,而能够驾驭框架则是一个架构师成长的重要里程碑。

驾驭体系阶段

软件开发人员的领域修炼之路

软件体系结构着眼于软件系统的全局组织形式,在较高层次上把握系统各部分之间的内在联系,将软件开发的焦点定位到粒度较大的体系结构元素(模块、框架和之上的业务逻辑)及其交互的设计上。

如果模块是一座山,驾驭模块阶段是“横看成岭侧成峰,远近高低各不同”的山中体验,驾驭框架阶段是走到了山外可以一窥全貌,而驾驭体系阶段则是跃升到高空得以俯瞰,一揽全局。驾驭体系亦如弈棋,何时落子,落子何处,存乎一心。

以上简要分析了开发人员知识体系修炼的内外因及修炼历程,希望通过上述分析寻求一种能够帮助软件开发人员在移动生活中持续快速的修炼并实现自我发展目标的有效途径。

来源:知界

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年4月6日
下一篇 2017年4月6日

相关推荐