现在很多人都会这样做,如果一个程序员的功底不错的话,我们就喜欢把他推到系统分析师、软件设计师或软件架构师的位置上。
其实我也时常在想,软件工程师和程序员有什么区别呢?做管理也有个把年头了,当初我们的团队需要一个能胜任软件架构师或设计师这样重要位置的人时。在我脑海里出现的第一个印象就是找一个好的程序员。但是领云的老总提醒我,不要这么做。这样的位置不是随意的找个不错的程序员就能胜任的。把你最资深的程序员晋升到这个位置也未必就合适。 我就有了疑问了,为何程序员就不可以做软件设计的工作呢?同样是设计程序的,没有什么分别的啊。后来我就明白了,设计软件相对于编写程序,它需要的是一套完全不同的技能。
那么就让我们一起来解密为何一个好的程序员就未必可以做一个好的软件设计师。首先一个优秀的程序员,要能把现实世界里最重要的软件通过编程来实现,并不是简简单单的写个文本编辑器就可以了。
一个软件工程师并不是什么语言都精通的,他只要在一种语言上下功夫就可以了,还要精心研究并熟练运用这种语言的各种特色,因为专一,才能专注,从而专业。
而像目前的很多程序员什么都懂,但是这样做并不能做到专业。一个好的程序员,只需从一个角度出发就可以了,如果你懂PHP,那所有的问题都基本上是跟Web开发相关。相同的道理,如果你全部的知识都集中的Java上,那你对所有问题的解决思路都会沿着面向对象的方向,即使是使用过程式编程对于解决你的问题会更优的情况下,你也会如此。
说了这么多,究竟什么才是一个优秀的软件工程师呢,我们应该如何选择呢?
那么,一个在某一两种编程语言里具有专长的程序员,在当他解决一个问题时,会存在一定的局限。他会局限于他使用的语言允许他做的事。因此,他不会成为一个好的软件设计师或分析师。

如果我们不用这些优秀的程序员,谁又能担当软件设计的任务呢?当然不会是那些完全不懂编程的人了。我们需要的是一种通才。一个优秀的软件设计者必须通晓过程式,面向对象式,函数式,以及逻辑式编程语言—还包括各种优秀的软件开发方法论。他不能只熟悉一种方法模式、像一个专业领域人员那样。当然,他自己并不能写出复杂的程序,因为他的知识太宽泛。尽管如此,他却能正确的判断出怎么样的设计才是一个正确的解决方案。如果问题是处理一个钉子,他会找来一个熟练使用锤子的人;如果问题是处理一个巨石,他会叫来爆破部队,而不是让你徒劳的用锤子白费力气。
其实我也时常在想,软件工程师和程序员有什么区别呢?做管理也有个把年头了,当初我们的团队需要一个能胜任软件架构师或设计师这样重要位置的人时。在我脑海里出现的第一个印象就是找一个好的程序员。但是领云的老总提醒我,不要这么做。这样的位置不是随意的找个不错的程序员就能胜任的。把你最资深的程序员晋升到这个位置也未必就合适。 我就有了疑问了,为何程序员就不可以做软件设计的工作呢?同样是设计程序的,没有什么分别的啊。后来我就明白了,设计软件相对于编写程序,它需要的是一套完全不同的技能。
那么就让我们一起来解密为何一个好的程序员就未必可以做一个好的软件设计师。首先一个优秀的程序员,要能把现实世界里最重要的软件通过编程来实现,并不是简简单单的写个文本编辑器就可以了。
一个软件工程师并不是什么语言都精通的,他只要在一种语言上下功夫就可以了,还要精心研究并熟练运用这种语言的各种特色,因为专一,才能专注,从而专业。
而像目前的很多程序员什么都懂,但是这样做并不能做到专业。一个好的程序员,只需从一个角度出发就可以了,如果你懂PHP,那所有的问题都基本上是跟Web开发相关。相同的道理,如果你全部的知识都集中的Java上,那你对所有问题的解决思路都会沿着面向对象的方向,即使是使用过程式编程对于解决你的问题会更优的情况下,你也会如此。
说了这么多,究竟什么才是一个优秀的软件工程师呢,我们应该如何选择呢?
那么,一个在某一两种编程语言里具有专长的程序员,在当他解决一个问题时,会存在一定的局限。他会局限于他使用的语言允许他做的事。因此,他不会成为一个好的软件设计师或分析师。

如果我们不用这些优秀的程序员,谁又能担当软件设计的任务呢?当然不会是那些完全不懂编程的人了。我们需要的是一种通才。一个优秀的软件设计者必须通晓过程式,面向对象式,函数式,以及逻辑式编程语言—还包括各种优秀的软件开发方法论。他不能只熟悉一种方法模式、像一个专业领域人员那样。当然,他自己并不能写出复杂的程序,因为他的知识太宽泛。尽管如此,他却能正确的判断出怎么样的设计才是一个正确的解决方案。如果问题是处理一个钉子,他会找来一个熟练使用锤子的人;如果问题是处理一个巨石,他会叫来爆破部队,而不是让你徒劳的用锤子白费力气。