血汗结晶:漫漫编程路上学到的宝贵经验

jopen 10年前

        英文原文:Top 20 Programming Lessons I've Learned in 20 Years

        不论你是刚毕业的大学生,还是入门级的程序员,亦或是高级程序员,希望此文都能给你一些启发。

        从我 11 岁初次进入编程领域,我就被她的魅力所倾倒,一直陷在她的石榴裙下不可自拔,我深深地爱上了编程。作为后来者,你可能没有我的这些经历,我现在将这些经验公之于众,希望能对大家有所帮助。我相信长江后浪推前浪,一代新人换旧人,后生可畏。

        其实不要说 20 条经验,哪怕 30 条、40 条,都是远远不止的,但是在我从业 20 年的时间里,我已经将所有的精华都已经归纳到这 20 条中了,当然如果以后有增加,我会补充更新的。

血汗结晶:漫漫编程路上学到的宝贵经验

        下面就是我目前为止最让我受益匪浅的 20 条。(这可都是我血与汗的结晶啊。)

        1. 规定完成任务所需时间

        好吧,对于这一点,我不得不承认,作为一个程序员我很惭愧。我曾经亲眼目睹一个牛人连续 8 小时坐在电脑前就为了解决某个程序问题,呵呵。给自己定个时间,1 小时、30 分钟都可以,甚至 15 分钟也行,如果在这段时间内你还是毫无头绪,那么为避免浪费时间,可以直接寻求帮助或者自行在网上搜索。不要牛逼哄哄地以为自己是个超级编码器——你只是 一个人,而不是计算机。

        2. 编程语言也是一种语言

        一旦了解了某种编程语言的工作原理,那么其他语言之间的共通之处就显而易见了。我们选择编程要参照这样的标准:用的得心顺手、生产的效率高、写出来的代码整洁,而最最关键的是,编程语言应该适合项目,反之亦然。

        3. 不要动不动就“设计模式”

        有时候,比起组合成一个像模像样的模式,还不如编写一个简单的算法来的省时省力。而且一般而言,用于写算法的代码还更整洁,更便于理解。

        4. 备份

        话说有一次我的一个硬盘突然彻底坏了,导致我写的许许多多代码通通丢失,要知道这些代码可是从我年轻的时候就开始存储起来的,意义非凡,是无价 之宝。你不明白丢失数据的可怕性只是因为你还未曾经历过。试想一下,要是明天就是最后的期限,而今天你却仅仅是因为没有备份而使得所做的一切努力化为流 水,不光是悲剧,还是人间惨剧。这一条也同样适用于源码和版本控制。

        5. 人外有人

        有时候我常常坐井观天地以为老子天下第一。后来慢慢发现,原来别人能比我做的更好。要谦虚谨慎地向他人学习。

        6. 学海无涯

        接上面第 5 条,我经常手不释卷,抱着杂志和书籍啃上面的计算机和编程的知识(不信可以问我的朋友,他们可以为我作证)。诚然,现在是个信息爆炸的时代,想要跟上技术 发展的脚步真心不是件易事。每一天都孜孜不倦地学习,就是我所谓的及时接收这些信息的好办法,这样,我们才不会被时代的大浪拍死在沙滩上。

        7. 事物总是在不断变化

        我们学习技术和编程方面的知识应该和我们买股票一样:要多样化。不要以为学会了一种技术就可以高枕无忧了。如果某种技术或者编程语言后继无力逐 渐被市场所淘汰,那么就得赶快更新简历,并且临时抱佛脚迅速练习新技术。我这么多年的经验告诉我,不要把所有鸡蛋都放在同一个篮子里,至少得掌握两三种语 言,以防有一种过时了,另外一种还能在你闭关修炼新技术的时候应急顶上。

        8. 提携新人

        给予和培训初级/入门级开发人员有关于编程的指导和技巧。温故而知新,要知道,在帮助他们进步的同时,我们自己可能也在进步,变得更自信,更有发展潜力。

        9. 简化算法

        写完代码之后,回过头去再好好进行优化。虽然这边改一点,那边变一点,显得很琐碎,但是从长远角度来看,以后维护起来那可就不是方便了这么一点两点的事了。

        10. 编写文档

        无论是 Web 服务的 API,还是一个简单的类,我们都应该尽量编写相应文档。曾经有人指责我注释泛滥,但是我却引以为豪。写代码的时候加个注释对我们而言只是举手而劳的事, 但是当遇上难以攻克的技术难题时,我想大多数构师、新来的程序员、维护人员都会因此而感激你的。

        11. 测试,测试,还是测试

        我是黑盒测试的铁杆粉丝哦。如果我们不能彻底地检查代码,不但会影响项目的进程,还会让你的信誉一落千丈、丧失大家的信任。

        12. 庆祝每一次成功

        很多程序员在好不容易历尽千辛万苦终于搞定那些令人头疼的难题之后,总是会情不自禁地和同伴庆祝一下:尖叫、击掌甚至是手舞足蹈。如果有个人兴 冲冲地跑来告诉你他写出了一段惊天地泣鬼神的代码,即使关于这个代码片段你已经看过 100 遍了,也值得你为他第 101 次的成功而喝彩。

        13. 经常做代码审查

        无论是项目的还是个人的。对于项目代码,一般而言经常会有人要求查阅,对于别人提出的批评不要当做是吹毛求疵、鸡蛋里面挑骨头,把它想成是建设 性意见以此来激励自己。对于个人代码,在坚持不断自检的同时,也要常常问问自己,“我怎么做代码才能写得更好?”这有助于你加快学习的步伐,让你迅速成长 为一枚优秀的程序员。

        14. 回顾曾经的代码

        当我们回顾以往的代码时,常常会有两种迥然不同的态度出现:看到差代码时“有没有搞错,这么烂的代码竟然是我写的?!”以及看到好代码时“哇 塞,这么棒的代码居然出自我手!”第一种的态度往往是厌恶的,然后好像有强迫症一样开始想着是否还能提高和改进。而第二种则带点惊奇和成就感了。开发人员 总会有那么一两个超棒的项目成果,引领大家膜拜。如果你对你的编程能力足够自信,那么也可以将这些成功的案例拿出来再次仔细雕琢,使之更好更棒愈加熠熠生 辉。

        15. 幽默很重要

        在这 20 年时间里,话说,我还从来没有遇到过一个没有幽默感的程序员。别说你遇到过,程序员的幽默外行人怎么会懂?事实上,如果想在这行发展,幽默是必须的。

        16. 远离那些自以为无所不知的程序员,不愿分享的程序员,以及经验不足的程序员

        当你不幸或者不得不和这些家伙合作的时候,不用给他们讲道理,自己胸有成竹、运筹帷幄就可以了,当然态度上要谦虚,毕竟谦虚是美德嘛。自以为无 所不知的程序员,时刻想着抢风头而不是作为团队一员好好协作。不愿分享的程序员,总是默默无闻自管自地写代码。而经验不足的程序员最烦人了,他们每隔个 10 分钟就跑过来问你一下,最后搞定代码的时候,呵呵,我不得不吐槽,这代码分明都是我写的了。

        17. 任何项目都不简单

        我的朋友、家人和同事都曾要求我“快点”搞定一些事情,比如做网站。可是要知道,心急吃不了热豆腐,做网站不是说说的,应该考虑全面,这样才能 做出令客户和自己都满意的作品。比方说,开始客户只是想要一个使用 Microsoft Access 的、只有 3 个页面的网站,但是最后很有可能会变成一个使用 SQL Server,有 15 个页面的网站,并且还要有一个论坛,有一个定制的 CMS(内容管理系统)。

        18. 不要想当然

        如果手头上有一个看上去特简单的项目,你或许会想当然地认为这肯定很容易搞定。千万不要有这样的想法。除非你有已经一个类和组件,或者一段已经写好的代码,并且在现有的项目上已经测试通过,万事俱备只欠东风,否则你没有理由也没有资格说“小菜一碟”。

        19. 软件永远是完不成的

        曾经有一位程序员告诉我,软件是永远完不成的,它最多只是“暂时完成”。这个忠告我一直铭记于心。如果客户还在使用你写的程序,并且经受了时间的考验,那么有机会的话,不妨保持更新,这对你的发展绝对有好处。

        20. 耐心是一种美德

        客户、朋友和家人在使用电脑的时候,常常会因为电脑坏掉了等各种原因变得烦躁、气得只想砸东西,最后自己搞不定只得怒气冲冲地离开。每次看到这 样的场景,我都会语重心长地说劝诫,“是我们人掌控电脑,而不是电脑掌控人”。一般人尚且会心情不好,更不要说整天对着电脑的程序员了。所以我们程序员更 加需要耐心。下次,要是我们的电脑和程序又出问题了,不要急着对自己发脾气,好好检查,最后,找出问题根源所在了,不妨自嘲地说一句,“众里寻他千百度, 蓦然回首,那人却在灯火阑珊处”。

        最后我希望,这 20 条能对大家有所裨益、有所启迪,能让各位会心一笑。

        译文链接:http://原网站已经失效/article/20-years-20-experiance.html

        翻译作者:码农网 – 小峰