一件事情,有的人手工做花费半天,有的人写一个程序只要2个小时,有的人写个程序只要10分钟。你立马就知道谁需要加班谁不需要加班。不加班的人,不是因为他懒或没前途没志向,而是因为加班的人技术比较落后,只能用时间和精力上的勤奋弥补。大多数加班的根源在于技术、方法、手段、制度的落后。因此若要“加班”,一定确保加的是“学习先进技术”的班。
软件开发的特殊之处在于,它不是用熟练度来衡量的职业。但凡一件事,若涉及到人工操作,就有熟练度问题,而熟练度必有上限。一个程序的效率,可以是一倍的,可以是十倍的,甚至可以是千倍百万倍,取决于编写者的智力考量。程序效率的上限可以提升到相当高的地步。因此,程序员的衡量标准是创造性,而非熟练度。富有创造力的程序员,比高度编程熟练工的效率可能还要高出百倍。因此,程序员不要用熟练度来衡量自己的能力,而要用创造力来衡量。
创造力如何衡量呢?
* 一个给定的问题,可以制定出多少种目标?每个目标侧重解决问题的哪个方面?
* 一个具体工程技术问题,可以想出多少种方案? 每一种方案各有什么利弊?
* 一个具体业务场景,可以预测出哪些可能的错误? 对于每种错误,该如何避免?
* 一项新的业务,如何分解成各个功能模块? 每个功能模块该负责什么?如何组合和衔接?
* 一个程序的效率,能优化到多快的程度? 如何在优化的过程中确保程序的安全和可维护?
* 一个大数据量任务的处理,是否能够充分利用分布式并行计算的能力来实现?
* 一个现有程序,如果要给它加功能扩展,有多少种设计方案? 会做哪些权衡和折中?
* 一个产品需求,与现有设计规则冲突,如何确保系统整体设计不受破坏的情况下满足产品需求?
* 如何说服小伙伴接受你的方案设计和加入你的业余项目?
谁下的功夫深,谁就拥有恒久的技艺和收益。