1.接口(Interfaces)软件工程中最重要的概念是接口。任何软件都是一个真实系统的模型。如何使用简单的用户接口进行模型化至关重要。很多软件系统走这样的极端,缺乏抽象的冗长代码,或者过分设计而导致无谓的复杂。
2.惯例与模板(ConventionsandTemplates)命名惯例和基础模板在编程模式中常被忽视,然而它可能是最强大的方法。命名惯例使软件自动化成为可能,如,JavaBeans框架在getter和setter方法中,使用简单的命名惯例。del.icio.us网站的URL命名也使用统一的格式,如http://del.icio.us/tag/software会将用户带到所有标签为software的页。
3.分层(Layering)用分层来讨论软件架构是最容易的。JohnLakos曾出版过一本关于大型C++系统的书。Lakos认为软件包含了层,书中介绍了层的概念,方法是,对每个软件组件,数一下它所依赖的组件数目就可以知道它的复杂程度。
4.算法的复杂性(AlgorithmicComplexity)关于算法的复杂性,软件工程师需要理解这样几件事。第一,大O标记法(bigOnotation);第二,你永远都不应该使用嵌套式循环(循环里面套循环),你应该使用Hash表,数组或单一循环;第三,如今优秀类库比比皆是,我们不必过分纠缠于这些库的效能的差别,我们以后还有机会进行细调;最后,不要忽视算法的优雅及性能,编写紧凑的,可读的代码可以让你的算法更简单,更干净。
5.散列法(Hashing)Hashing的目的是加速访问速度。如果数据是序列存储的,从中查询一个项的时间取决于数据列的大小。而散列法对每一个项计算一个数字作为索引,在一个好的Hashing算法下,数据查找的速度是一样的。
6.缓存(Caching)缓存对现代Web程序不可或缺,缓存是从数据库取回,并存放在内存中的数据。因为数据库直接存取的代价非常高,将数据从数据库取回并放在缓存中访问就变得十分必要。比如,你有一个网站,要显示上周的畅销书,你可以从数据将畅销书榜一次性取回放在缓存中,而不必在每次访问时都去数据库读数据。
7.并发(Concurrency)并发是软件工程师最容易犯错的地方,这可以理解,因为我们一直遵从线形思维,然而并发在现代系统中非常重要。
8.云计算(CloudComputing)RWW最近的关于云计算的文章ReachingForTheSkyThroughComputeClouds讲到了云计算如何改变大规模Web应用的发布。大规模的并行,低成本,与快速投入市场。
9.安全(Security)随着黑客的崛起与数据敏感性的上升,安全变得非常重要。安全是个广义的概念,涉及验证,授权与信息传输。
10.关系数据库(RelationalDatabases)关系数据库因为在大规模Web服务上缺乏可扩充性而颇受微词,然而,关系数据库仍然是近20年来计算机技术中最伟大的成就。关系数据库对处理订单,公司数据方面有着出色的表现。
欢迎光临 系统集成论坛 (http://bbs.xtjc.com/) | Powered by Discuz! X3.1 |