“码农”,互联网时代出现的一个“新工种”,主要工作是进行软件开发,我也是其中一员。他们当中的一些人经过跃迁,成为了大师,所创造的价值为这个时代所铭记,自身也获得了巨大的财富,创造了举世瞩目的IT大帝国;而“码农”这个年轻人占绝大多数的群体中,越来越多的人陷入了焦虑当中:技术发展日新月异,IT产品的生命周期越来越短,每天都面临着新知识要学习的压力,随着年龄增长,自己的职场竞争力又在何方?
这周阅读吴军老师在得到上的新专栏《吴军的谷歌方法》中的几篇文章深有感触。人工智能时代已经到来,计算机软件开发的需求也不断增大,“码农”们若是能够抓住这样一个时代机遇,将大有作为。然而,如果仅仅满足于编写的代码能够实现预期地功能,而不去进行更加深入的思考和改进,不对自己的代码质量进行严格要求的话,那么水平就永远会停留在“码农”的阶段,充其量是一个智能时代的代码“农民工”。那么,我们该如何行动,从“码农”到大师。
“带着镣铐狂舞”——在边界内尽最大努力
一个没有经验的“码农”常常会犯两种错误:1、在无法突破的边界上花费太多精力,最后徒劳无功;2、忽视了本可以大力优化,大有作为的细节,致使软件性能低下。
先来看第一点,吴军说,从表面上看,IT行业的技术发展在计算机诞生,尤其是个人电脑得到普及的几十年里得到了突飞猛进的发展。但是高速的发展不意味着无限制发展。事实上,在过去的几十年里和未来可见的几十年里,电脑架构一直是在图灵机的架构下进行不断优化晚上的,但图灵架构对计算机的底层框架限制却一直没有被动摇。作为软件开发者,我们就应当了解计算机的底层架构是什么,什么样的问题是计算机能够解决的问题,如果从逻辑上的推导一个问题不能抽象成计算机能够解决的问题,那么就不应当花费无用功去研究如何用程序去解决。
第二,在能解决的问题上一定要下足功夫,尽可能去优化每一个细节
人思考问题,有一个天生缺陷就是我们习惯于先解决眼前看得见的问题,喜欢先着眼与现在,再慢慢构筑未来。这种思维方式其实没有问题,也很符合在不确定环境中的生存策略。但是,如果在工程代码的实践中太过于只解决眼前的问题,而没有去考虑未来环境的变化和软件应用场景的变化可能带来的影响,那么未来可能要花很大的精力去弥补当初的考虑不周,而这些细节上的差距,可能就因为实现同样的功能,你的代码运行时间比对手慢了0.1s,整个项目产品就失去了市场先机,而作为开发者,忽视的每一个可以优化,可以提升却因为怕麻烦而不去更进一步的地方,都会让你丧失成为大师的机会。
他举了一个例子,我印象非常深刻。人们总是习惯于从小数量上总结出方法,殊不知这样的方法无法用到更高量级的问题上。他曾看到一个总监批评下面年轻的程序员,程序员很不服气,认为是总监故意挑刺。其实事情说大也不大,就是在一段排序代码中,那个程序员用了一个很笨的排序算法,效率很低。程序员说总共参加排序的数目不大只有个位数,采用什么排序方法时间都差不多。因为时间紧,任务重,所以就采用了最容易编写程序的方法。然而,这位程序员所不知道的是,随着以后程序应用场景复杂度的增加,可能在未来不长的时间里面需要进行排序的数目就成百上千倍的增加,而使用“笨算法”所造成的运算时间复杂度就会增加到一个更加恐怖的量级。就因为那个程序员图一时的方便,就会导致整个程序未来很快就会被淘汰。从这个故事中不难看出,在能解决的问题上如果怕麻烦而采用当下看起来简单易行的方法,无疑是给未来的自己“挖坑”,随着应用场景越来越复杂,大数据时代数据量的恐怖增加,用不了多久当下的“小问题”就会变成未来的“大麻烦”。
作为刚入职不久的程序员,我也经历过类似的问题。当初开发一个小功能的时候,没有想到以后这个功能会因为有新的需求而更加复杂,所以采用了最为简单的实现方式,没有预留一些结构和接口为以后的功能二次开发作准备。结果没过两天就遇上了新的需求,当时没有考虑周全的地方都需要重新修改,加班弄到很晚才解决这个问题。当时自己边加班就边想:早知如此,何必当初。如果当初能够不怕麻烦,用更加成熟的方式去写代码,那么就不会现在花大力气去解决问题。所以,在能解决的问题上一定要下足功夫,尽可能去优化每一个细节。
吴军老师的专栏后面还有很多内容值得我们学习,但他所提到的在深入了解计算机结构框架的基础上,尽可能去优化每一个代码细节的思维方式却给了我很深刻的启示。无论在哪个领域,入门都不会很困难,但是要成为真正的大师,就需要深入去思考,深入了解系统的限制,深入去优化细节。不要安于做现在的“码农”,想办法成为“大师”!