技术开发 频道

软件工程师必知的十个概念

【IT168 分析评论】

    出色的软件工程师善用设计模式,勤于代码重构,编写单元测试,并对简单有宗教般的追求。除了这些,优秀的软件工程师还要通晓10个概念,这10个概念超越了编程语言与设计模式,软件工程师应当从更广的范围内明白这些道理。

    1.接口(Interfaces)

    软件工程中最重要的概念是接口。任何软件都是一个真实系统的模型。如何使用简单的用户接口进行模型化至关重要。很多软件系统走这样的极端,缺乏抽象的冗长代码,或者过分设计而导致无谓的复杂。

    在众多软件工程师书籍中,RobertMartin写的《敏捷编程》值得一读。

    关于模型化,以下方法对你会有帮助。首先,去掉那些只有在将来才可能用得着的方法,代码越精练越好。第二,不要总认为以前的东西是对的,要善于改变。第三,要有耐心并享受过程。

    2.惯例与模板(ConventionsandTemplates)

    命名惯例和基础模板在编程模式中常被忽视,然而它可能是最强大的方法。命名惯例使软件自动化成为可能,如,JavaBeans框架在getter和setter方法中,使用简单的命名惯例。del.icio.us网站的URL命名也使用统一的格式,如http://del.icio.us/tag/software会将用户带到所有标签为software的页。

    很多社会网络均使用简单命名,如,你的名字是johnsmith,那你的头像可能命名为johnsmith.jpg,而你的rss聚合文件的命名很可能是johnsmith.xml。

    命名惯例还用于单元测试,如,JUnit单元测试工具会辨认所有以test开头的类。

    我们这里说的模板(templates)指的并不是C++或Java语言中的constructs,我们说的是一些包含变量的模板文件,用户可以替换变量并输出最终结果。

    ColdFusion是最先使用模板的程序之一,后来,Java使用JSP实现模板功能。Apache近来为Java开发了非常好用的通用模板,Velocity。PHP本身就是基于模板的,因为它支持eval函数。

    3.分层(Layering)

    用分层来讨论软件架构是最容易的。JohnLakos曾出版过一本关于大型C++系统的书。Lakos认为软件包含了层,书中介绍了层的概念,方法是,对每个软件组件,数一下它所依赖的组件数目就可以知道它的复杂程度。

    Lakos认为,一个好的软件拥有金字塔结构,就是说,软件组件拥有层层积累的复杂度,但每个组件本身必须简单,一个优秀的软件包含很多小的,可重复使用的模块,每个模块有自己的职责。一个好的系统中,组件之间的依赖性不可交叉,整个系统是各种各样的组件堆积起来,形成一个金字塔。

    Lakos在软件工程师的很多方面都是先驱,最著名的是Refactoring(代码重构)。代码重构指的是,在编程过程中需要不断地对代码进行改造以保证其结构的健壮与灵活。

    4.算法的复杂性(AlgorithmicComplexity)

    关于算法的复杂性,软件工程师需要理解这样几件事。第一,大O标记法(bigOnotation);第二,你永远都不应该使用嵌套式循环(循环里面套循环),你应该使用Hash表,数组或单一循环;第三,如今优秀类库比比皆是,我们不必过分纠缠于这些库的效能的差别,我们以后还有机会进行细调;最后,不要忽视算法的优雅及性能,编写紧凑的,可读的代码可以让你的算法更简单,更干净。

    5.散列法(Hashing)

    Hashing的目的是加速访问速度。如果数据是序列存储的,从中查询一个项的时间取决于数据列的大小。而散列法对每一个项计算一个数字作为索引,在一个好的Hashing算法下,数据查找的速度是一样的。

    除了存储数据,散列法对分布式系统也很重要。统一散列法(uniformhash)用来在云数据库环境下,在不同计算机之间分存数据。Google的索引服务就是这种方法的体现,每一个URL都被散列分布到特定计算机。

    散列函数非常复杂,但现代类库中都有现成的类,重要的是,如何对散列法进行细调以获得最好的性能。

0
相关文章