- UID
- 872339
|
近日,问答网站“知乎”上有个关于程序员能力的问题引来了截然不同的回答。提问人表示疑惑:大多数程序员是否有能力独立完成一个稍显复杂的桌面软件?
图片来自互联网,与本文无关
在此,我们挑选出两种观点中的代表性回答。
程序员谢旭阳表示:一个做桌面程序的程序员应该很容易做一个“稍显复杂的桌面软件”。这就好像一个做Web的程序员做一个“稍显复杂的网站”也是很容易的。当然这个“复杂”只是指功能等技术逻辑上的复杂,如在UI方面还有更高要求,那应该由专门的美工来负责,而在推广营销方面还应与市场人员配合。
而一位拥有十年开发经验的程序员给出了否定观点的回答。
程序猎人:程序员也有分工:桌面程序、网络程序、移动终端程序、大型机编程、小型机编程、单片机编程……即便同是做桌面程序开发,在不同操作系统下,代码写法也有很大不同。术业有专攻,一直钻研其他领域的人,哪怕是高手也可能对桌面程序的运行机制和构建方法不熟悉,从而无法独立完成这个任务。即使在一个专做桌面软件的公司里,也可能有大部分程序员无法独立编写一个稍显复杂的桌面软件。
“程序猎人”不仅给出了回答,还对背后的原因进行了深层次的分析。他认为,做事情兢兢业业、并且做事时肯主动动脑思考前因后果、愿意主动扩大自己工作责任范围的人总是很少,他称这类人为“主动哥”。大多数人都习惯于只做被分配的任务,并按照被吩咐的做法去做,对扩展自身工作范围和知识没有什么兴趣,仅在被分配了新的工作内容时才去学习,他称这类人为“被动哥”,并表示这个世界的大部分财富是“被动哥”创造的,大部分工作是他们完成的。他们中不乏好人、热心人,但因为求知欲的缺乏会导致他们长期保持在某一状态。而以Windows桌面编程为例,如果一个“被动哥”被分配只需编写一些函数调用其他人开发好的API,并通过其他人写好的框架来做测试,那么他很可能在完全胜任工作的前提下不了解任何Windows桌面程序从头建立的方法。自然就不可能独立完成一个桌面软件了。从大工业生产来看,这一点对公司是有利的,因为工作的成败将不仅仅取决于某几个员工,而且随时可以替换任何一个被动哥,也就意味着随时可以找到成本更低的人才。日本很多软件公司中的程序员都是这种状况。相对来说,中国的一些看似不太成熟的公司反而好些,里面的人什么都得做,哪怕是超级被动哥也什么都会了。另一方面,主动哥往往容易得到上级的赏识,很快便从程序员升级为设计者、架构师、管理者、顾问……长此以往沉淀在程序员阶层的大多是被动哥,那么大多数程序员无法独立做出一个像样的东西也就不足为奇。
另外,这位热心网友还介绍了目前软件公司普通程序员的工作情况,以下是他的文字摘录:
大部分情况下,普通程序员并不负责设计,仅负责编写代码并进行最小限度的单元测试,同时在被要求的情况下撰写相关文档。这类程序员常常是对着详细设计书进行代码翻译工作,对于一个有思想有抱负的人来说很枯燥乏味。我曾经见到过快要达到伪代码级别的设计书。如果拿在手里的不是打印出来的纸张,随便写个宏什么的,基本都能把代码生成出来的。但也不排除设计书做的不完整或者质量低下的情况,这时候就需要向设计者发问,并承担一部分设计工作,这种情况相对会有趣一些。但对知识不丰富且没有设计经验的人来说,这项工作是个噩梦。尤其跨国协作时,要用外语探讨时,有些外语不好的人就彻底缴械了,三天两头请外语好的人吃吃喝喝的……当然还有另外的一些高级程序员,进行着分工更高层一些的工作。比如:设计师、架构师、顾问等。作为设计师,相对接近程序员一些。要把架构师定下来的东西更进一步细化,设计成程序员能实现的东西。当然对于一些小公司和小项目,以上角色互有穿插,甚至一人全兼。
作为架构师,往往要做出很多艰难的抉择——是使用这种技术还是那种、是用这种平台还是那种平台、是牺牲功能还是牺牲性能?作为顾问,其实很多真正喜欢闷头搞技术的人一不小心当了顾问之后都大惊:我这跟搞推销的有啥区别?啥时候才能让我再次打开久违的IDE(集成开发环境)或者记事本(拽点的人用Vim),敲两行代码啊。因为顾问的主要工作是研究客户的业务,并提出一个可以满足客户业务需求的IT解决方案。他们对IT技术可以说无所不知但又对任何一种都不深入。(当然也有一些超人,在完成任务的基础上自行抽时间钻研某方面技术。遇到这种人,就膜拜吧。)让普通技术人员眼花缭乱的各种名词是他们忽悠客户最好的武器。然后就是去客户现场忍着各种不爽做讲演了。
对于程序员新手如何提高开发能力,这位拥有十年开发经验的热心网友建议“做个‘主动哥’而不要做‘被动哥’”。首先,大量的实践练习绝对是必须的。而实践之外重要的一点,是多动脑思考,哪怕工作本身不需要头脑,也不要停止思考。想一想做这件事的前因后果,有什么可以改进的地方或者提高效率的地方。长此以往,经过同样的时间,你会比“被动哥”多学会很多东西,并具备很多能力。简而言之,要提高开发能力,就要做到勤奋和善于思考。 |
|