Chinaunix首页 | 论坛 | 博客
  • 博客访问: 451003
  • 博文数量: 96
  • 博客积分: 4130
  • 博客等级: 上校
  • 技术积分: 1149
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-11 12:32
文章分类

全部博文(96)

文章存档

2011年(19)

2010年(75)

2009年(1)

2008年(1)

我的朋友

分类: 项目管理

2010-12-30 15:51:49

from:http://blog.chinaunix.net/u2/72491/showart_1019479.html
 
今年组里来了一个德国老外,是公司全球某重要项目的Tech Lead, 号称要在中国待一年(其实是因为老婆来中国学习陶艺,鬼子们日子high啊)。于是我们这帮毕业没几年的家伙就跟着他混了。转眼半年有余,真是体会到德国人的“死板”,其实是严谨,感触颇多。

Write design doc first!

敏捷开发的思想盛行,很多人就忽视了design && design doc的重要性,这是非常错误的。虽然我们公司不提倡设计具体到class级别,但是到component级别的设计还是必不可少的。我们以前比较懒,基本上都是code就是doc了(公司很多项目也这样:-)).此老外坚持所有的开发,只要还算有点工作量的,都必须有完整的design doc,而且必须有人review,或者team review,而且项目进行过程中要一直保持更新。确实效果明显,有什么不明白的,直接指到doc就好了。Design doc对于明确项目需求尤其重要。

Programming != Engineering

大家coding能力都很强,碰到问题第一个念头就是“这样搞就OK”了。这就是"programming",但是不是"Engineering"。我们好歹也都是Software Engineer, not programmer,还是搞清楚概念先。所以Engineering,一定是比较系统的解决问题,一般是如下几个步骤:
  • 分析问题:找出条件,需求
  • 提出解决方案:最好多找几个方案,方便进行权衡
  • 分析方案:找出最合适的方案
  • 解决问题:也就是implement啊
我们的问题就是太过于急切的想解决问题,而忽视了严格的分析过程,其结果是虽然问题能解决,但是有时候比较ugly,甚至是hack。老外强调implement的分析工作,这样才能找到最合适的办法。

公司不需要programmer,需要的是engineer。

Abstraction

这里说的是要抽象思考。老外特别喜欢搞framework,确实是有道理的,这种东西一般重用性都比较好,赞叹之余,我们能不能也设计出这样的东西呢?能!但是首先要学会抽象思考。那本著名的《Design Pattern》实际上就是将平时常用的开发模式进行抽象而形成的。抽象强调寻找不同事物的共同点,从而做出更具重用性的设计。平时怎么锻炼呢?做一个东西的时候,不要老想着把问题快点搞定,一定要思考能否有更好的办法,有没有和其他问题通用的地方,这样慢慢的就能提高设计和抽象能力。

You are junior if you only know one programming lanauge

只有多学几种变成语言,你才能体会到那些是语言无关,那些是语言相关的feature。而且不同类型的语言往往对于个人有很强的启发意义。会C/C++/Java这类 imperative languages 的,最好还去学学script language, 比如python,PHP,ruby之类的,体会一下动态语言的特性,甚至可以看看functional programming,这些对于扩宽思路大有裨益.

但是这里强调的不是记住语法,而且理解语言的特性,切记切记。


还有一些,以后慢慢写来,就算给自己提个醒吧。
其实归根结底,作为Software Engineer,还是靠思考吃饭,不是靠coding。能写code的人多了去了,但是能设计出优雅的系统的人少只有少。软件工程和其他的系统工程并无特别,只是implement阶段不同而已。为什么其他的行业是越老越吃香,而软件行业却被认为青春饭?我们都该想想,做coder当然只是青春饭,但是做Engineer那是一辈子的事业。
阅读(632) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~