代码改变世界

我对程序员技能的一些认识

2013-03-24 15:50  麦舒  阅读(2609)  评论(13编辑  收藏  举报

看了这篇文章《优秀程序员无他-善假于物也》,我忍不住再次吐嘲。其实,这篇文章对于刚刚接触编程——也就是刚刚会写"Hello World"的人,还是有点参考价值,只是这篇文章说到的技能,应该是优秀程序员所应该具备的,但只会这些就称之为优秀的程序员,未免过于贬低优秀这个词了。

很多时候,我听到一些程序员很爱标榜自己很爱接受新技术,看了多少本书,很上进,相反,象哥哥这种老程序员,则之以鼻,认为不接受新事物,不爱学习,固步之封。对于这种井底之蛙,我是一笑置之,懒得跟他说,免得教聪明他。当然,如果能虚心点,我倒是很乐意和他们探讨的。

相反,我是个非常上进的程序员,非常热学习。能十几年如一日地编码,我想在中国里没几个人能做得到吧。十几年,听上去很遥远,可是当这一天到来了,也不过如此。为什么不爱跟着这些潮流走?因为昨天还是MVC3,EF4,今天就是MVC4、EF5。明天就是MVC5,EF6了。这些东西根本没有积累的价值,而只有使用的价值。什么叫积累的价值,什么是使用的价值,我打个比方说吧,家里有个老古董,皇家御用青花瓷的花瓶,就是具有收藏价值。而使用价值,就现在十几块钱的那种花瓶,用了一段时间,看着不顺眼,就扔了,再买一新的。哪些知识是具有积累价值的呢?在我看来,越靠近底层的,越有积累的价值。比如说,算法、编译原理等等。

作为程序员,不能仅仅满足于些看看书,写写代码这个阶段。在我看来,程序员大慨可以粗分为三个阶段。

第一阶段就是具有基本的编码能力。

在这个阶段里写一些代码了。主要能力包括:

1、能够看懂英文文档,照着文档上的API写些例子出来。

2、碰到问题,能够通过搜索引擎去搜索,去解决一些问题。

3、对源代码管理有一个基本的认识,能够使用 SVN 这些进源码的管理。

4、能够看懂一些代码片段。

另外吐嘈一下,我接触到的程序员,这个阶段往往最自以为是,很喜欢弄些名词来唬人。

第二阶段就是对代码有着很强的控制能力。

1、能够阅读一些框架的代码,并且对框架的设计有个整体的认识。

2、在使用框架的时候,能够发现,并且解决一些问题。

3、能够理解并且灵活应用一些设计模式到自己的代码里面。

4、能够写一些框架了。

第三阶段就是对产品的驾驭能力。

这个阶段应该具备产品的研发能力,把一个产品给你,通过对它把玩一番之后,能把它逆向出来。包括:

1、这个产品的基本原理是什么,都涉及到哪些技术。

2、技术的方向感。要解决某技术上的问题,应该往哪个大方向走,应该收集哪些资料。这里还有个命中率的问题,放向感好的,往往能命中90%。当然,沿着这个方向走不通了,还能够换个方向,继续尝试。

3、代码级别的逆向分析能力。很多时候,我们做的产品,存在这样或者那样的问题无法解决,但别人的产品却没有。往往是因为受到不公平的对待,某些API不对我们开发,当然,我假设做的产品是运行在 Windows 平台上,可以说,开源还是相对公平的。这时候,要突破这些限制,就需要对代码进行逆向分析,去寻找解决的办法。据说,一度灸手可热,受欢迎程度远超 VC++ 的 Borland C++ ,就是因为卡在 Windows 平台的某个 API 上,而渐渐不敌 VC++ 。

 

以前就是我对程序员技能的一些理解,欢迎拍砖。

我最近所写的一些文章链接:

被神化的架构和被夸大的CTRL+C、CTRL+V

一位软件作者的吐嘈——读《Google Reader猝死启示录:互联网无法永远免费》有感