Chinaunix首页 | 论坛 | 博客
  • 博客访问: 230930
  • 博文数量: 108
  • 博客积分: 3092
  • 博客等级: 中校
  • 技术积分: 1172
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-25 16:35
文章分类

全部博文(108)

文章存档

2011年(3)

2010年(43)

2009年(19)

2008年(43)

我的朋友

分类: 项目管理

2008-10-28 12:43:55

转自:fera.cublog.cn
 
作为一个IT技术人员,需要有什么样的素质是自己成为一个合格的工程师?

首先技术是必须的,然而只懂技术是万万不能的。还需要具有相当的soft skills。我把技术类和soft skills类中所包含的,任何一个工程师应当具备的几点归纳一下,并对于这些技能的重要程度做点评估。如下:

技术类
  1. 计算机体系结构基础:这是最基本的,但只需要对其有个总体的概念。如果一个se对计算机体系结构没有概念,那他就不是一个合格的engineer。对于硬件体系结构设计师,或者是OS内核及设备驱动工程师,那么需要更加深入的研究。
  2. 操作系统原理基础:OS原理可以帮助engineer更好地理解程序设计的含义。很多应用软件都借鉴了OS的思想。可以说理解OS原理能帮助engineer设计出更好的软件,或者其中的component。当然,对于OS内核及设备驱动工程师来说,需要更加深入的研究。
  3. 数据结构与算法基础:掌握一定的知识能够使工程师对于自己要解决的问题产生影响,并促使他们设计实现出更加高效、优美的程序。同样,对于应用程序开发者来说,根据问题领域的不同,所需要的掌握程度有差别。加/解密、图像处理、视频/音频处理对于算法的要求高一些。
  4. 汇编语言基础:现在汇编语言在程序设计中的比例越来越少,然而这并不能影响其地位。一个严肃的工程师应当了解一些汇编语言的知识。驱动、OS内核开发对于汇编要求高一些。而某些时候视频/音频、图像处理对于汇编要求也很高。
  5. C语言:不了解汇编?没关系,能够理解C就行,毕竟它比较贴近汇编语言——虽然是高级语言。任何一个严肃的工程师都应当了解C,并能使用其基本的功能集合设计程序。
  6. 能够在至少一种OS平台上开发应用程序:程序不能独立于操作环境而存在。虽然我们致力于开发portable程序,但至少应当对一种平台的特性比较了解。
  7. 软件工程知识:不懂工程知识还算的上工程师吗?比如软件开发过程。
  8. OO知识:必备。不必详述。
  9. 设计模式:不一定要知道所有模式,但至少要知道程序设计的原则:对接口编程。还要清楚使用他们的目的是什么,不能为了模式而模式。
  10. 流行的文档工具的使用:熟练使用文档工具能够让你更好地向大家表达自己的观点,并将其记录在案以供查证。
  11. IDE的使用:不是必须的。但掌握了一种IDE能够提高一些效率。
  12. tool chain的使用:相信大多数Linux平台的工程师都会至少一种:gcc + make + binutils。
  13. CM工具的使用:如clearcase,或者cvs。不仅要会使用,还要清楚使用他们的目的是什么。
  14. 正则表达式:很多时候工程师的日常工作包括处理大量的日志文件,等等。掌握正则表达式意味着效率的提高。
  15. 至少一种脚本语言:如perl、UNIX shell、python中某种等。日常工作中经常会用到的。
  16. 编译原理基础:无需多说。如果你连自己写的程序怎么从文本到可执行文件没有基本的概念,那就卖烤羊肉串去吧,比你当工程师有前途多了。
  17. 数学知识:无需太多太高级。但搞数学计算或算法研究等的工程师则需要高级的数学知识。
Soft skills
  1. 团队精神:无须强调。个人英雄主义的时代一去不复返了。团队合作才是生存之道。
  2. 沟通技巧:这包括最基本的——能够清晰地表达自己。任何人都不愿意和没有沟通技巧的人打交道。具有良好的沟通技巧的团队将会更高效。
  3. 抽象能力:如果不能从一个广义的、更高的层次来思考问题,那么你将永远停留在写代码阶段。
  4. 良好的文档能力:3和4其实也暗示了这一点。不必达到作家的水平,但应该能够熟练运用工作语言(比如母语),简明扼要并且清晰地表达问题。谁都不愿意看裹脚布式的文档。
  5. 分析解决问题的能力:与3有一定的关联。这就需要有大量的知识及足够的经验,这就得到了:
  6. 持续学习能力:不光要能学习新知识,还要能够善于总结经验教训。归纳起来,就是学习+总结。
  7. 谦虚谨慎:谁都不愿意与骄傲自大的人工作,不是吗?谦虚使人进步,不用我多说。
  8. 开放:乐于与人分享知识、和其他人沟通。不用担心你把知识分享给别人导致被别人超过或者替代。要记住:是你的特质(或者说个人魅力),而不是你所掌握的知识,使得你与别人不同。分享知识也能使你对知识的掌握更加牢固。
  9. 热爱生活:艺术源于生活,但高于生活。编程也是门艺术。
  10. 勤奋踏实:饭要一口一口吃,知识要一点一点学,工作要一项一项干。不要跟时髦,也不要看什么技术挣钱多就学什么——急功近利最要不得。搞软件跟搞学问一样。
  11. 善于偷懒:不是不做,而是要想方设法让计算机帮你做。
  12. 逻辑思维能力:这是任何一个人都应当具备的——软件工程师更应当具备较好的逻辑思维能力。
  13. 管理能力:就算不是领导,也需要——因为管理自己的工作、时间、知识库也是一种管理。
  14. 异想天开:创新源于此。
  15. 乐观:不要总抱怨别人差,别人的软件/文档差——没有人能够做到完美。
  16. 认真但不较真:认真对待每件事,每个决定。所有一切都是reasonable的。认真但不较真能够较好的将问题控制住,而不是陷入无休无止的讨论、扯皮。有时需要trade-off,但要有strong reason for trade-off。
逐项检查,发现自己根本不算一个合格的软件工程师。

目前只想到这些,若有遗漏或错误,请不吝赐教!

另外:作为男性se,你需要有一部漂亮的,修剪整齐的大胡子。:)

Copyleft (C) 2007, 2008 raof01. 本文可以用于除商业外的所有用途。此处“用途”包括(但不限于)拷贝/翻译(部分或全部),不包括根据本文描述来产生代码及思想。若用于非商业,请保留此权利声明,并标明文章原始地址和作者信息;若要用于商业,请与作者联系(raof01@gmail.com),否则作者将使用法律来保证权利。(高校学生可将其用于家庭作业、课程设计、毕业设计而不受约束:时间将代替作者惩罚这种行为。)
阅读(1114) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~