2012-12-13 23:03:32
原文:http://www.programmer.com.cn/14241/
成功程序员的共同点是将软件开发视为一种需要精雕细琢并随时加以修炼的技艺,时刻以专业人士的标准要求自己,注重培养良好的职业素养。而这些职业素养究竟是怎样炼成的呢?
程序员是可以当作一生的职业。但首先,你需要热爱编程,而不是把它作为完成其他人生目标的工具,你要不断地反思自己在哪些方面的努力是更有效率的。我认为,无论在哪个子领域工作的程序员,都要在三个方面提高自己。
第一,保持对未知领域的好奇心,尽力开阔视野。如果你只精通一门编程语言,那么就赶快去学习另一门,最好和之前那门语言的亲缘关系越远越好。这可以让你从不同的视角去看待过去的问题。如果你只专注于一个领域,那么去深入地研究一下其他领域也会有很大帮助。
多数人都喜欢在熟悉的知识结构下解决问题,因为全新的东西总有学习门槛,需要了解很多基础知识才能展开实际的工作。能轻松地把相关信息组织起来调配,与借助 外部资料是很不一样的。后者要经历一个相当痛苦的过程。但一旦习惯经常地学习和积累新知识,你就可以逐步掌握一套自己的方法来减轻这种痛苦。而要做到这点 却很难,需要保持单纯的好奇心。
第二,把握各个层次上的细节。尽可能了解清楚系统每个层面的运行:硬件如何调度机器指令;数据在硬盘、内存、缓存、CPU间的流向;代码如何被编译链接,代码经历了何种过程被加载到内存,JIT怎样加速字节码的运行;操作系统怎样管理线程、处理I/O;软件 用到的第三方模块和工具如何处理数据;在网络环境中,数据流的通信协议;代码中每个模块逐个层次中的相互关系……
对细节掌握得越多,思路会越清晰。在每个层次上,你会看到不同层次的设备对上一层业务逻辑的抽象方式,直到最终你直接面对的业务。对业务的抽象能力,来自你对业务的熟悉程度,实际上这种能力更是随同对细节的把握能力同时具备的。
第三,提升对代码的直觉。优秀的程序员能很快地发现性能热点、找到系统崩溃的原因、找出不合理的代码……除此之外,准确的估算能力也非常重要,这要求程序员 能够快速心算出每个模块的开销和输入的数据量之间的关系。在写下每行代码时能够判断其对性能的影响,以简洁去挑战各个层次模块间的耦合复杂度。
要培养这种能力,除了不断地编写代码之外,别无良方。在写代码的同时,要时刻保持思考,要对不好的地方零容忍。要在最早的时刻动手,任何推倒重来的代价都不会太大;放任它们只会让局面演变到不可收拾的程度。
保持自己总有代码可写,不断地去发掘自己新的兴趣点,拓展新领域。要单纯一些,编程本身就是一件有趣的脑力活动,而不必仅仅为了解决一些问题而写程序。
作者云风,简悦创始人,程序员。自幼学习编程,从Apple II 时代开始从未停止。