程序员的小无相功

昔“大轮明王”鸠摩智少室山上以七十二绝技尽败少林诸僧,唯虚竹北冥神功方能相抗,至后由扫地老僧口中道出:“本寺七十二绝技,均分‘体’、‘用’两道,‘体’为内力本体,‘用’为运用法门。明王所练的,本是‘逍遥派’的‘小无相功’,精微渊深,以此为根基,本寺的七十二绝技,倒也皆可运使,只不过细微曲折之处,不免有点似是而非罢了。”

参看TIOBE编程语言排行榜,以2015年10月为例:
2015年10月TIOBE编程语言排行榜
  单指数超出1%的就有19种之多,连带因指数过低而未上榜的不下百种。作为IT码农,虽说不必样样精通,但要说终其一生只运使其中一门却也是难为。

这世间的公司就如同那武林中的门派,各有各的武学归属:

  • J2EE/Oracle 多见于银行、金融领域,钱不是问题、但求可靠。(武林盟主少林,入行早、规模大)
  • Linux C/C++ 以BAT为代表的一众互联网公司,用户基数庞大、看重低成本的横向扩展性。(泰斗武当,源出少林而后来居上)
  • .net 集中于各城市政府门户网站,不用考虑大并发的访问量,也没有可靠性需求,简简单单就好。(虽说规模不大,也可等同于三大门派中的峨眉,重在公关)
  • PHP/Python/Go 还有一些公司规模不大,没什么历史羁绊,技术选型多取决于创始人的偏好,倒也是自得其乐。(如同漕帮、唐门,不图争权夺势,只想安安心心的过日子)

  笔者从业9年,其前2年名为测试实则兼以VB.net维护内部系统、至后5年转战Linux C/C++、数月前又换至J2EE,个中曲折经历,逐渐领悟到了程序语言的‘体’、‘用’之道。

  武学中的‘体’说的是内功——运气法则,于程序语言可以对应到如下几点:

  • 流程控制,就是通常所说的if-else 这是任何一门语言所必须具备的基本要素,也是首先要熟练掌握的;
  • 算法/数据结构,高级算法和数据结构用到的概率并不大,只需阅读前面数章,然后在不断的过程使用中去熟练强化即可;
  • 设计模式,这是一项不学自来的技能,在实战多年后时不时回过头来阅读一下标题就能获益良多。

  高深的内力非一日之功,以上技能也并非靠短时间的集中阅读所能获取,必经长年累月的“实战-怀疑-重练”才能做到融会贯通,但跟所用语言并无关联,即使途中语言更换也并不影响修炼效果。

  ‘用’是外部招式、是最终的程序实体,当你已初具内力、来到一家新公司、面对一门新语言的时候,可以将以下步骤作为参考:

  • 语法,绝大多数语言都大同小异,用一天时间来熟悉足以;
  • 业务,是一个软件系统所要完成功能的描述,跟语言无关,要将自己去当作一个普通用户去了解这个软件系统能干什么;
  • 数据流,后台数据的运转方式,就是程序层面的业务;
  • IDE,不是那么紧迫,但熟练各种快捷键和编辑器的特性可以极大提高工作效率。