行业资讯 / The information

家居建材行业资讯

专访李智勇:一个老程序员的哲学思考与勇猛精进的人生

  发布时间:2014/09/25    来源:云商科技官网   浏览次数:1213次

在开始这篇采访稿的时候,记者提笔半天也不知道如何开头,因此回头看李智勇在《畅言》栏目的投稿,于是上面的赞誉迎面而来。

当然李智勇的文章并非受到大家一致的热捧,有称有赞的同时,肯定也有骂声和各种吐槽。是的,有人赞他精辟入理、非常具有启发性,而也有人说他写的东西“假大空”、不容易明白、看一会就晕……那李智勇究竟是个什么样的人?都经历过什么?为什么读者评论他的文章会有如此大的分歧性?或许接着看下去,你能找到答案。

IT火热 让他从涡轮转行到IT

李智勇认为,做到超级程序员(Linus那种)可能比较难,但成为相对杰出的程序员只要方法对,大部分人都可以。

李智勇在一家比较传统的公司做部门级管理人员,平时喜欢读书和写文章,他很多文章在CSDN《畅言》栏目和新浪《创事记》栏目发表,并引起了很大的反响。他著有两本书《完美软件开发:方法与逻辑》和《程序员生存定律》,同时还发起了一个叫V众投的生活问答社区。

虽然一直知道李智勇是名老程序员,但不知道他居然是涡轮机专业毕业。为什么一个学涡轮的会和IT有交集?李智勇在微信采访时称,2001年毕业时正赶上IT火热,那时做IT和做传统行业收入差距太大,大概有5~6倍,再加上刚毕业也不太考虑别的,所以就跑到福州一个叫实达的公司做打印机驱动程序。

谈及过去,李智勇感慨到,打印机驱动程序比较偏门,很多人不太熟悉,但其实挺难搞的。要懂系统级知识,要懂图形图像,当然也还要语言知识。有个大家比较熟悉的老程序员叫袁峰,他在惠普的时候就是做打印机驱动的,后来他去了微软做GDI+、WPF等,还写过一本叫《Windows 图形编程》的书。所以这本书里覆盖的领域都是打印机驱动程序必会牵涉到的领域,包括坐标系、图形、图像、字体等。反过来看,如果学这个的话,只能一点点学,没捷径。

而最可怕的是当时没人带,于是就一路自己死磕,死磕C++、死磕Windows、死磕设计知识。不过好在走过来了,经过三年时间的努力,李智勇终于把自己的技术提高到一个还可以的地步。主要的技术基础在这三年里打下的,技术基础有编程语言(主要是C/C++),系统知识有:Windows平台的各种基础知识,比如线程、进程、内存管理、结构化异常、图形编程等。

他还分享到,纯以学习难度论,CMMI,敏捷,估算方法,开发模型这些东西加起来也没C++难学。但C++学会了就能用,这些东西则要结合情景才能用好,取得好的结果。聊到过去的经历,李智勇还透露到,那时候有个杂志叫开发高手,他还在上面发过一个完整的检测内存泄露的程序。

一个东西的难度和它的市场价值不一定成正比

后来,等到李智勇技术还可以的时候,就开始做项目管理,学估算、WBS这些东西,等这个学完开始负责一个团队。做项目、带团队最初主要是驱动程序,后来做过POD按需打印的应用、电子词典和项目管理类Web App。

这段经历,也让李智勇认识到两件事。一个事情是一个东西的难度和它的市场价值不一定成正比。打印机驱动非常难搞,但其实只面向非常狭窄且稳定增长的领域。从难度上讲打印驱动的开发难度会大于Web应用的开发,但如果回头看过去十年,从实现现金价值的角度看过去十年里实现程度最好的其实是互联网领域。这可以引出比较复杂的人生思考,他把这些东西放在了一本叫《程序员生存定律》的免费书里面,并建议刚入行的人一定要读读。

另外一个事情是协作的重要性。大家有时候看报道说一个人实现了一个程序,感觉特别爽,但其实很多事情根本不是一个人能搞定的。当一个人处在盲人盲人摸象状态时,最好的学习方式其实是交流。最开始会比较气盛,觉得这玩意自己搞定会很爽,但其实当你与人合作的时候才能搞的更快,搞得更快才不会浪费生命。

成为超级程序员比较难,但成为相对杰出的大部分人都可以

一方面李智勇非计算机专业毕业,另一方面当时又没人带他,但他死磕C++、Windows和设计知识后终于有所成就,那他在技术上有哪些认识?

李智勇认为,做到超级程序员(Linus那种)可能比较难,但成为相对比较杰出的程序员只要方法对头,大部分人都可以,具体来讲这需要做到下面几点:


  • 一是一定要精读一个有点规模的程序。精读是指每行都读懂,在白纸上能画出来这个程序的基本结构。比如:那时候他能比较清晰默写出MFC的基本类结构和背出它的基本机制。只要用心,大部分程序尤其是应用程序,半年绝对可以达到他说的这程度。假设谁用这方法搞定了WordPress,那这人PHP一定可以突飞猛进到一个超过许多人的程度。
  • 二是写代码要到一定量。这里的写代码不是指拷贝粘贴,而是指自己琢磨着写并优化它。一定量是指至少要2~3万行。现在开源软件比较多,拷贝粘贴也比较容易,上述两点可能好多人做不到,这对编程和设计能力其实是个伤害。
  • 最后一个就是扩大阅读量,并要精读几本书。精读的书现在来看,最好覆盖下面几个方面:计算机体系结构,算法和数据结构,设计原则和模式,软工。V众投上有个比较长的回复可以参照下:点击进入


管理向左,技术向右

另外,这段曾经的技术管理经历给李智勇带的感触同样也很深。他和记者总结到,学技术是比较辛苦才能学会,尤其是C++很难学,但如果下恒心抱着C++编程语言来啃,有一年也能啃出来,但做管理不是的,这东西需要点悟性。

是的,管理和技术的调调很不一样。管理首先不只是技术,或者说不主要是技术。编程里的技术有难度,有时候考验智商,管理上的技术没难度,但怎么用那些方法和技术有难度,考验人的情商和认知能力。

技术是往专业了走,越专业生存空间越大。而管理是往杂了走,比如:老板对项目不满要赶紧去说明,免得发酵成大问题;人力缺了要赶紧协调,一是要能要到人,关键还得能要到合适的人;工具缺了,要赶紧购买;兄弟们有情绪了,要赶紧安抚;PPQA了有抱怨了,要赶紧改正。如果工作进一步泛化,还要涉及到预算、评估、职业路径规划等。

很多人容易因为收入的问题而倾向于做管理,在技术路径短的地方也确实是这样,但李智勇比较相信随着各种互联网公司的崛起专业化才是增值的最佳途径,管理不是的。并且很多人性格上也不太适合做管理。李智勇称,这点展开太长,可以参照:他CSDN博客的内容

李智勇还顺道指出,他认为未来的趋势是管理的职责被专业人士分担,而不是出现越来越多的专职管理人员,所以成长的时候关注自己的专业(技术、产品等)更关键一些。

写了两本书:一本给资深程序员,另一本无私奉献给新手

李智勇还写了两本书,分别是《完美软件开发:方法与逻辑》和《程序员生存定律》,这两本书都是关于什么内容?

李智勇介绍到,第一本书试图探讨管理、估算、设计和编码这样领域间的关联。这就和打仗的时候要有猛将冲锋陷阵,也要有人居中策划一样。做软件的时候,要有很牛的程序员,要有人搞需求,也需要有人总揽全局。而总揽全局的人可以在解决某个Bug的时候不如现场人员,但要对本质有更深刻的认识,而要想把握本质,则要把软件相关的各领域作为一个整体进行思考。具体概括已在书的前言里阐述:

把软件作为一个整体考察是因为管理、流程、设计编码等都是影响最终成效的砝码,单纯某一个维度上(比如流程)效能最佳不等于整体效能最佳。
把精妙抽象和具体相结合则是因为虽然众象纷繁,但总有些规则凌驾于现象之上,不把握这些规则必然陷入杂多之中,进而明于微而昧于巨。反之,精妙的东西又只有通过具体的手段才能实现自身,并无法单独而存在。恰如下棋时每一步都机关算尽,但总是脱不开既定规则,只有有限的结局(或输、或赢、或和),而既定规则之力量又只能实现于每一步之中。 

这有点抽象,但确实是这意思。

第二本书出发点则比较简单,李智勇称,自己感觉走错了一些路,所以参照种种了解到的现实,系统的思考自己。后来就想把它写下来了,希望能让刚入行的少走点弯路。这书最大的好处应该是可以打开视角,刚入行的小兄弟不只是看到技术。从大家反馈来看,很多人还是认为挺有帮助的。写完后因为没时间精雕细琢了,就把它免费放出来了,都在CSDN上。

叁度软件版权所有 咨询热线:13823773466 地址:深圳市龙岗区龙岗街道龙平东路145号富德中心五楼A503室