要想成长为一名优秀的程序员,其过程是艰巨的,其道路是漫长的。
不经过悉心栽培,花儿开不出鲜艳的花朵;不经过时间的历练,幼苗长不成参天大树。在软件行业更是如此。
程序员必须具备的性格特点
最基本的要求是能自主地编程。只有在经过多年的学习实践之后,我们才能超越写一些简短程序的基础水平。而仅靠上课或者看书是做不成能力卓群的程序员的,不断的练习和实践才是唯一的正途。学校中那些所谓的CS程序课其实并不涉及如何编程,它主要教授的是理论,这和很多外行人的想法相悖。
作为一个程序员,还得有执着钻研的精神,能做到不懈地排除故障、开发软件和修复bug。特别是某个阶段经常会有毫无进展的感觉,而这个时候唯有坚忍不拔的品质才能支持我们排除万难再接再厉。这也是一道门槛,将很多不具备这一品格的程序员拦之门外。
擅长数学,善于解决问题。编程就是解决问题的过程。
有很棒的短期(和长期)记忆能力。这样就能在大脑中同时处理多个事情,并且记得月前自己写过什么代码。
超强的理解能力。理解事物是如何相互作用的,理解为什么这么设计和架构的原因。
关注细节。在编程中真正演绎了什么叫做细节决定成败的真理。在某处忘写了一个分号?程序就不会编译!拼错了某个函数名?那你的程序的运行结果可能就会与你原先设想的大相径庭。
上述性格特点方面的要求就像大浪淘沙一样会淘汰掉很多人。
程序员必备的主要技能
深刻理解数据结构和类,知道什么情况下以及怎么运用它们。
熟悉已经开发完成的库,这样就可以站在巨人的肩膀上,不必重新浪费时间了。
熟悉各种基础和高级的算法,理由同上条。
了解硬件的原理,这样就能正确管理内存避免内存溢出,或者正确消除无关数据以加快处理进程。
当然还得会编程。最好知道数据包格式、TCP/ IP、HTML、CSS、用户界面设计和数据库等,因为程序不能孤立运行。
我们需要学习很多东西,但是还有一点,你必须谨记在心,事物是在不断变化发展的。我们只有专心致志竭尽全力地学习,才有可能在这一行出人头地大放光彩。三天打鱼两天晒网,是行不通的。
程序员的工作和生活环境
安静,不被打搅的环境。当我们在编程或者学习编程的时候,一旦中断,想要重拾思路并不是那么容易的。比方说,手机响了,然后你可能要花上15分钟才能继续沿着原先的思路走。但是很多工作和家庭环境都很难提供这样的条件。
能在忙碌中权衡轻重然后做决策。当然你也可以为每一种情况单独写一个程序,不过这不大现实,所以要有侧重点。再则,当落后于进度时,最好能快速实现程序并运行起来。
最最重要的一点,编程语言的流行时间是5年,5年之后,你看好的语言可能就没人用了。我们得与时俱进。
管理问题也是重中之重
很多管理人员将程序员当做工厂工人一样对待,很多并没有编程天赋和商业能力的人站在了项目责任人的位置上,在他们眼中,程序员就像机器上面的齿轮一样,干的事情毫无技术含量。一旦发现项目超出预算或者落后于计划进度,就要求程序员无偿加班,结果往往只能是出来设计拙劣测试不完全的产品。事实上,程序员是技术人员,要是你想得到关于项目的明智建议,那么请教专家级程序员才能得到最棒的结果。
由于某些管理层辨别不了程序员之间的优劣,所以有能力的人就会发现他们做的贡献更大但是得到的薪酬却没有更多——最重要的是,他们总是要做更多的工作以弥补拖后腿的那些家伙。而当伟大的程序员提出建议以望改进的时候,那些管理层则会觉得这是在对自己权威的挑战,而会选择“除之而后快”。
这种情况举不胜举。这也是为什么很多优秀人才不愿意待在这一行业的原因——特别是在有其他就业机会的情况下。而且做程序员很能锻炼人,哪怕是最普通的,转行之后也能干的风生水起。
真正优秀的程序员不喜欢随便跳槽
找程序员很容易,但要想发现优秀人才就很难了。劣质的程序员似乎总是在找工作,而优秀者,只要这家公司能发现他们,肯定会不惜一切代价留住他们,所以他们不会去频繁找工作。而当他们去找工作的时候,大多规划长远,所以会显得很挑剔——这就是为什么很多公司都会不约而同地表示“没有优秀程序员可用”的原因——因为找到的尽是些“普通货色”。
正如有句话说得好,优秀程序员的价值是普通程序员的几倍,而劣质程序员则是负值。要想将普通和劣质的程序员改造成优秀人才,其道路不可谓不艰辛,不可谓不险阻,甚至几乎是不可能的——自然也不值得任何初创公司在他们上面进行投资了。