也谈优秀: 我们真的必须知道什么吗?

我向来喜欢跟风,首先帮dudu预先整理一下列表:

一个优秀.NET程序员的技能树

我心目中的优秀开发人员标准 兼谈OO和设计模式

.Net 方向的 Coder/Designer 应当掌握什么技能?

何必言精通——十年杂感 兼谈其它

我心中的优秀开发人员

再说一下我的看法,我以前就说过, 首先要搞清楚自己的角色, 分开来说, 主要是研究人员和工程人员两种。 但会有一些共同的要求。同时, 很多兄弟的角色是双重的, 那么就要根据不同的比重来调节掌握不同方向能力的深浅。 不过我个人提倡, 尽量把自己的身份单一化, 可能会比较有竞争力一些。

通用能力举例:

1. 数据结构和简单的算法常识不用说了。

2. 操作系统, 大多数人没必要精通任何一个具体的操作系统。这一部分, 还有一些和操作系统相似的东西, 比如面向对象是咋回事, .NET引擎下面是都有啥; 这些虽然不是操作系统, 但是是我们依赖的环境。 掌握的程度, 拿操作系统来说,应该知道一个合理的操作系统会提供什么, 它为了提供这些, 大概会怎么做, 但更具体的则没必要当作圣经。

3. 计算机组成原理, 这个还是应该有适当的了解的。

4. 非知识的能力, 包括KISS和分解事物的能力。

5. 收集资料的能力。

研究人员所需能力举例:

1. 根据工作, 对自己领域的概念与算法有高级的掌握。

2. 对IT行业技术方向的方方面面感兴趣、 有热情、 能坚持, 同时可以进行广泛的联想以启发自己。

3. 专注于学习能力的训练和根本性的东西的掌握。

什么是根本性的东西呢? 这个不太容易说什么是, 但可以很清楚的分辨什么不是: HTTP这样的东西不是, 因为它只是被实现成这样,甚至为什么实现成这样的原因也不是, 而如何考虑相关问题的思想方法是。 同样不重要的东西还有.NET知识和具体软件构建方法论方面的如OO这样的东西; 特别需要注意的是OO这样的小型且具体的, 它表面上具有解释事物的近乎本质的内容, 实际上只是通过创造一个假象来帮助我们工作罢了 。 这样具有迷惑性的东西尤其要小心对待, 不可过于升华, 哪怕它自有其道理。 因为它相当的有针对性: 既有直接要解决的问题, 又是很具体的解决方法。把这样的东西泛化, 对不是它针对的问题的理解、判断和解决方式, 很可能造成不良影响。

工程人员所需能力举例:

1. 责任心和个人的职业规划, 这个必须要有。

2. 工程方面的能力, 比如对解决方案的分析与判断、 流程管理相关的、 以及一直被忽略的如软件估算等方面。

3. 一定的预测能力: 当前和可以预估的未来, 我的工作可能会涉及哪方面知识和技能。(这个其实是通用的, 考虑到对研究人员是自发性的, 所以就在工程人员这里特别提一下)

4. 对知识和技能的评估能力, 比如需要掌握到什么水平可以应用于什么样的项目,带来什么样的好处, 达到这一水平花费多少时间。

5. 各种需要用到的工具与方法论的缺陷要有了解(大多数时候表面的了解已经足够, 但不能不了解), 不提优点, 是因为优点是自然而然的。

还有一些, 如合作、沟通、 表达, 这些上面有些老兄已经提到了, 不过并非普遍性的, 比如一个个人开发者就没有太高的要求, 在这里也不多说了, 大家也比我说的好得多。

至于其它的具体东西, 则都是停止与表面与使用就足够了,在不恰当的目标与时机深入,有害无益。 拿.NET来说, 其实大多数时候我们都没有什么必须知道的东西。 这么说似乎很奇怪, 需要说明的是, 表面是变化的。  比如,经过了上面说的3这个过程, 我们也许会发现我们的任务需要某某方面的知识, 那么这些知识以前是“深入”,而现在则仅仅是表面了, 而我们要做的仅仅是对这部分用到的知识进行表面性的了解, 其目的是使用。 在这里额外说一句, 如果长时间从事.NET领域,很多人不可避免的需要“深入”到一些表面, 王涛老兄的《你必须知道的.NET》是相当不错的。

要知道我们的工程时间, 和我们的生命都是有限的, 而一个工程人员有做不完的事情。 这也是为什么第4条相当重要的原因。 没有4, 就无法判断下一个表面是多深, 也无法分配学习所需的时间; 如果不停的学习, 大多数时候不过是从一个表面到另一个表面的浪费时间, 所谓的“深入”,就成了自我欺骗的屁话。

这里仍然要强调的是, 工程人员绝对不要期望自己像研究人员一样生活和工作, 一旦达不到就抱怨。 以工程人员的时间分配, 大多数人永远不可能够格, 而且我们需要意识到发挥价值的方式是根本不同的, 而没有一般人心里的高下之分。当然, 如果想转换角色到一个研究人员, 事先做好计划, 在一段时间内透支体力去加倍时间用于训练, 逐渐淡出工程人员的身份还是可能的。研究人员转换为工程人员则没有太好的方法, 因为很多东西必须进入项目中后才能实际的学习。

找一下骂,说说另外一个误区: 过多的搞什么哲学意义上的理解。 恕我直言, 很多人弄得那些玄乎的说法, 说实话既肤浅又可笑。 无论是工程人员还是研究人员, 大多数人平时进行的思考跟专职的哲学家、数学家比太少了,所得到的一些“感悟”、“真谛”, 对于人生态度也许会有积极的意义, 但是用在具体的学习、研究、 实践上,并不会有太多的指导作用。 当然, 必须承认的是: 有一种自己的理解, 对于某种方法论的使用, 是相当有好处的。 但是期望硬生生的拔高自己, 一通百通, 很多时候是赤裸裸的欺骗自己, 对于那些初出茅庐的听众而言, 则是不负责任的误导了。

最后再找一下骂, 表面知识都有哪些呢? 我个人认为的, 平时经常出现的: 各种技巧、 CLR内幕、 设计模式、 面向对象, 或者, 上面某几位老兄的帖子里能见到的大多数具体技术名词(汗)。 同时在强调一下, 表面不代表我们可以不了解, 而是在恰当的时候开始, 做恰当的了解的东西。 首先、 且最重要的, 是需求分析, 不是吗?

posted on 2008-06-24 18:24  怪怪  阅读(4453)  评论(51编辑  收藏  举报

导航