ReadWriteWeb上看到了Top 10 Concepts That Every Software Engineer Should Know这篇文章,文中提到的概念未必就是真正的Top 10,但都仍然是必须的,对每条我也有自己的一些体会和看法。

10. Relational Databases
对关系数据库实际应用的把握应该至少包括三部分的知识。一是最基础的对关系理论的掌握。第二点则是对SQL语句的基本语法有所了解。第三点则是对关系数据库引擎需要有一定程度的认识,对于诸多厂家的数据库产品,其引擎和查询优化器的工作特性都有许多的不同,这部分在实际工作中会有许多tricks。

9. Security
这是很大的一个话题,想成为安全性专家并没有那么容易。最基本的要求应该是对一些安全性方面的原则理论有所了解,能够根据应用选择合适的安全性策略。OAuth协议对Web Services是一个非常有帮助的东西,值得关注一下。

8. Cloud Computing
这个东西原来已经写过一些简单的看法了,虽然目前这个领域还有许多去探索和改进的地方,但下一个比较有革命性的技术创新可能会在这个领域内产生。

7. Concurrency
这仍然是一个非常大的话题,而且很重要,尤其是多核技术已经成为主流的时候,很多编程的思路和习惯都会有很多可以挖掘的地方。这方面是仍然需要多多学习的。

6. Caching
缓存技术通常被大型网站应用于解决数据库的性能瓶颈。诚然,web应用最容易成为性能瓶颈的地方就是数据库,特别是现在许多巨型的Web Service也对此点有时候没办法。这也是为什么我说最大的技术创新可能来源于云计算平台的发展过程中。

5. Hashing
如果对这点完全不了解,那么必须赶快补上。哈希算法应用的非常广泛,比如说Google的索引服务就是将每一个URL通过哈希映射到特定的机器上。另外,Memcached其实也是在内存里维护了一张巨大的哈希表。

4. Algorithmic Complexity
这一点非常非常难,即便是那些大师级的程序员,也曾对算法的时间复杂度做出过错误的判断。虽然在学校里我算法的分数很高,但算法确实是最为深奥的内容。

3. Layering
这个概念其实不复杂,但也是实际应用中必须考虑和使用的。逻辑上分层的好处在于降低软件内在组件的耦合性,并避免最糟糕的循环依赖情况出现。

2. Conventions and Templates
对于Conventions,是最容易引发口水战的话题。遗憾的是许多人争论的焦点并不是最重要的关键点,大部分人紧紧抓住代码的可读性去争论。但其实Conventions带来的最大好处并不在于此,而是在于使软件自动化开发变得容易,这对于代码生成,自动测试,自动重构,甚至RESTful WebService都有非常重要的影响。

1. Interfaces
这一点不想多说了,而且这点上其实有非常非常多的内涵,并不仅限于软件工程技术。

————————— 分割线 以下是其它 ————————————

今年会有许多新版本的东西推出,比如10月份将正式发布的Python3000是我比较关心的。其它的比如很快会发布的SQL Server2008,增强的许多对BI的支持也许会是一个很好的卖点。另外,.NET的MVC Framework也是非常值得关注的东西,ASP.NET中WebForm的设计思想确实缺陷大于优点了,MVC也许是接下来.NET开发网络应用的一个主流框架,但是就目前我看到的内容来说,还是发现有许多无法忍受的恶心地方,且看正式发布的时候如何了。

也许利用Jabber做一些有趣的机器人会是在项目时间不太紧张的时候一个不错的练习?恩,还有什么值得关心的呢?记得原来在学校时借助OpenGL实现一个多面体区域阴影算法Demo的过程是非常愉快的,现在对这块已经很久没接触了。想找一个SLG的Game Engine研究一下,目前还没发现什么比较好的资源。

唉,什么时候才能再见到老朋友呢?好友已经答应下次见面的时候给我讲述当初咨询界四大天王的传奇故事,最近很喜欢听江湖的故事,这个世界纷纷扰扰,还是有些趣味。