http://blog.monkeypotion.net/reading/gameprogreading/top-ten-traits-of-a-rockstar-software-engineer

1. 真心喜爱程式(Loves to Code)

 

程式设计,是一种发自于内心、不求回报的付出(Labor of Love)。如同任何的职业一样,唯有具备满满的热情,才能完成真正伟大的事情。一般人的误解,常认为撰写程式是一种机械化,或者纯然科学化的行为。事实上,最棒的软体工程师是工匠(Craftman),能够将能量、巧思以及创造力注入每一行的程式码当中。优秀的工程师,知道程式码区块何时被琢磨至完美的程度,也知道在大型的系统中,这些区块何时会如同谜题般巧妙地拼凑组合起来。热爱撰写程式的工程师所获得的喜悦感,就像是作曲家完成一首交响乐所感受到的狂喜;而也正是这种兴奋感以及成就感,使优秀的程式设计者们真心热爱程式设计。

 

我个人非常、非常地喜欢以上整段的叙述。Labor of Love是一个非常棒的形容词,几 ​​乎将我内心最深层的感动,完整无缺地表达了出来。是否有时会觉得累、觉得倦,或是觉得不知所做为何?不妨回头找找自己最初的本心吧。


2. 把事情完成(Gets Things Done)

 

有些技术人喜欢只说不做,而优秀的工程师是会真正去做事的人。有些人为了找出最佳的方法解决问题,会花费数周的时间设计出复杂且多余的系统架构与函式库;真正优秀的程式设计者应该问自己:什么才是解决问题最容易的途径?

请记得我们身处现实世界中,而非传说中的理想境界,没有所谓的完美解决方案存在。做为程式设计者,我们所应当尽力去做的事情,就是利用手边既有的各种资源,以最有效率的方式完成交派的任务。如果不能够把事情完成,再神妙的构思与设计都只能活在白日梦,以及那些不着边际的大话里。


3. 持续地重构程式(Continuously Refactors Code)

 

撰写程式,与雕刻非常相像。就像艺术家会不断地改善自己的创作作品,程式设计者也会持续性地改造自己的程式码,只为了以最好的方法达到需求的目标。

不要变成老旧程式码的奴隶。当这些程式码是由其他人撰写的时候,你或许可以轻易地推卸责任或者怪罪于别人;但是在多数的情况下,当这些可恶的程式码,是由你自己所撰写的时候,才是最令自己捶胸顿足、欲哭无泪的时候。请拿出细心、耐心与爱心,勇敢地挑战那些残破不堪的老旧程式码吧。


4. 使用设计模式(Uses Design Patterns)

 

所谓的模式(Pattern),是不断重现在自然界与人类行为中的各种情境以及机制;而软体工程也不例外。优秀的工程师能够辨认出系统中所使用的设计模式,并且善加利用各种设计模式,同时也不受制于它们。

设计模式是前人智慧的结晶,帮助我们解决重复出现的类似设计难题,同时也成为程式设计者之间的沟通桥梁;但请记得,它们绝对不是程式设计中的万灵药:不要为了使用设计模式而使用设计模式;设计模式并不能使原来就很差劲的程式码变得比较高明。


5. 撰写测试(Writes Tests)

 

有经验的程式设计师,总是能够了解撰写测试程式码的价值所在。测试的存在,能够证明撰写完成的系统运作无误,并且确保过去曾经发生过的臭虫问题不会再次重现。

为了进行测试而撰写多余的、与功能无关的程式码?专案的进度怎么办?还有许多功能项目需要完成?所有的理由都是忽略撰写测试程式码的好理由。直到被臭虫痛咬一口之前都是。花费心力在关键的程式码区块中撰写测试,将能够为你节省下难以计数的除错时间;但很遗憾地,就我所知,目前台湾的业界并没有撰写测试程式码的风气,仍然亟待改进。


6. 善用既存程式码(Leverages Existing Code)

 

重新发明轮子一直都是软体产业中的大问题。优秀的工程师会专注于三种不可或缺的复用(Reuse)层面:第一,使用同侪已经撰写好并且经过测试的系统架构;第二,善用第三方团体所提供的函式库;最后,则是利用某些网路服务所提供的便利功能。正确地善用既存的程式码,才能使程式设计者专注于真正重要的任务上,也就是应用程式本身。

不要再写第一千零一个Linked List类别了!不使用其他人撰写的元件,坚持所有的功能都要由自己亲手完成,究竟是自大、自爽、自卫还是自慰?请搞清楚自己的目的、专案的目标,以及核心关键的任务。


7. 专注于可用性(Focuses on Usability)

 

好程式设计师专注于使用者。无论使用者是事业体或者个人,无论程式设计者为消费性软体公司或者投资银行工作,专注的焦点同样在于可用性。优秀的程式设计者会非常努力地工作,只为了使系统更加简单并且更为容易使用。他们无时无刻都会想到使用者,不会撰写出错综复杂只有怪咖能够理解的系统。

这是一项经常被忽略的重要特质。有时候,程式设计者写得太开心太入迷,往往会忘了撰写出来的程式,是需要交给其他使用者使用的东西。对于程式设计者来说,使用者的角色其实存在于许多不同的面向中,包括专案中的主程式企画设计者,以及游戏成品的玩家,都是开发过程中需要「常在我心」的使用者。


8. 撰写可维护的程式码(Writes Maintainable Code)

 

工程师界的小秘密:撰写好程式码或者坏程式码,所花费的时间一样多!纪律良好的工程师,会从第一行程式码就开始思考维护性以及程式码未来的演化。绝对没有任何理由写出丑恶的程式码、横跨数个页面的函式,或者带有稀奇古怪名称的变数。每一字、每一句、每一行的程式码,都应该恰如其份地展示出它们原先拥有的意涵。

不要总是认为以后、未来或者某一天,一定会有机会回头改写那些从前写不好的程式码,因而和自己做出妥协,写出只是暂时堪用的程式码。事实上,不遵守纪律的程式撰写方式,不仅难以节省开发的时程,更无法顺利推动专案的进度。重构的观念与程序并不是偷懒的借口,也不能拯救一个病入膏肓的系统架构。维持良好的写作风格、命名规则以及严谨的设计架构,都是非常重要的基本守则。


9. 能够以任何程式语言撰写程式(Can Code in Any Language)

 

优秀的程式设计师或许会有个人喜爱的程式语言,但从不固执迷信于其中。在很多的情境中,程式语言的重要性往往不如那些伴随程式语言而来的函式库。优秀的程式设计者能够体认这项事实,并且愿意去学习新的程式语言、新的函式库以及新的方法以建造出更好的程式系统。

对于知识,要求知若渴;对于自己,要能虚怀若谷。保持开放的心态,对新鲜的事物保持孩子般的好奇心;而不是像个「大人」般被冷漠的态度与嘲讽的言语占据内心,困守在象牙塔中而不自知。电脑科学与软体程式设计领域的进展飞快无比,不止要从书本中获取知识,更要尽可能地从网路、研讨会,甚至身边的同侪,学到那些经过真实历练的经验与智慧。


10. 了解基础的电脑科学(Knows Basic Computer Science)

 

优秀的工程师需要扎实的基础。也许你没有资讯科系的学位,但你不能不认识其中的基础知识:资料结构与演算法。明星级的程式设计师不但需要了解,更要能够内化这些基本知识,因为拥有这些知识基础,将能够帮助我们在软体系统中做出正确的设计决定。

在90%的状况中,我们不会需要使用复杂可怕的资料结构或令人畏惧的演算法,但是请至少先了解其中最基本首要的部分。什么时候该用vector?什么时候可以用list?如果使用deque的话有什么差别?应该优先考虑执行效能,或者优先考虑记忆体空间,甚至是未来扩充的弹性?不同的资料结构与演算法之间,有没有不同的取舍?招式是死的,用的人是活的,能够顺应局势见招拆招,才是好本事!

以上,就是为了成为超级星光大道的Super Star Programmer所需具备的十项基本特质。看完上述十点特质之后,是不是觉得好像还少了点什么?是不是有某个很重要的特质没有被列入其中?还有什么样的态度、能力或特征,是你认为做为一位优秀的程式设计者所不可或缺的呢?欢迎提出来讨论喔~ ^_^

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3