112. 编程15年,如何才能成不了大牛?

因为我做了一个电台,如果没有平台给刷僵尸粉的话,加起来可能有1万多个人听过吧。所以,这1万多人之中,总是会有人问我这样一个问题,如何学习编程?我从来没有正面回答过这个问题。我都是会推荐他们去知乎或者百度贴吧去问一下,因为那里大牛的密度比较高。我不是大牛,所以,不好回答这个问题。

但是总有人不死心啊,总是问个不停,觉得我孬好做了这么多年程序员,总得有点经验吧,我想了一下,成功的经验真没有,失败的教训可以说一说。虽然说失败是成功之母BTW:我并不相信这句话,我认为这就是安慰失败者的话,毕竟人家都失败了,总不能伤口上撒盐,再补一刀,只好说个失败是成功之母),还有一句话是,成功总是相似,失败却各不相同。反正鸡汤的话,怎么说都有道理,我只是来说说我的一些不成功的教训吧。

技术高手的标准

我在这里只说编程这个技术上的标准,很主观的一个东西,只是我心目中技术高手的标准。有人如果反驳我说,我技术不好,但是家里是拆迁户,有的是钱; 或者有人说,我技术不好,但是,我泡到了老板的女儿,比如说,成了百度的女婿,阿里巴巴的女婿,或者腾讯的女婿,如果这几个创始人的后代是女儿的话,其实男的也无所谓,爱情是超越性别的; 或者是直接让这几个创始人离婚了,然后和你结婚;这种更成功,是广义上的成功,不在我的讨论范围之内,我讲的是狭义上的成功,作为一个程序员,在技术上取得的成功。我觉得标准只有一个:有拿得出手的产品。只要你说出你做的软件的名字,人家就给你起立鼓掌的那种。比如说Linus和Linux,stallman和GNU软件,Bill Gates和微软,只要说一个名字,我们就能联想到他的软件。以最低最低的标准,栋哥是个彻底的失败者,我没有一个可以拿得出手的软件,这也是我不敢回答大家提出的问题的主要原因,在软件开发行业,我是个失败者。我做的所有事情,没有留下任何痕迹。希望大家引以为戒,成就你们自己。我就总结一下我失败的教训。

不去拥抱开源软件

现在回想起来,在读书的时候,我错过了两次加入开源社区的机会。第一次是我的导师让我给一个机顶盒写一些东西。当时盛大公司正在弄盛大盒子,这个概念在当时还是比较前沿的,当时就有不少公司学盛大,我导师也从一个公司搞来了一个项目,当时有个技术是想通过p2p的技术来传输数据,我在电台第3期的时候,做了BTTorrent的专题,其实就是那个时候学会的。我的导师就把这个任务让我去做。当然了,我肯定是去找开源的代码去修改,因为这个是做Demo,看看方案行不行。我就找到了一个叫ctorrent的代码,当时还没有github这个社区,都是在sourceforge这个社区上,当时还不用git这个软件,大家都使用CVS这个东西。

当时ctorrent这个软件还处于非常初级的阶段,我记得当时我用的是Ubuntu 5.04,根本就运行不起来,但是当时有代码,我就硬着头皮看代码,一边参考bittorrent的python代码,一边看下载的C语言的代码。很痛苦,但是老师布置的任务,不干也不行。当时P2P是一个有法律风险的东西,反正我们是学校,也没打算指望这个成功,我当时还是挺用心的,反正搞了多半年,终于能在电脑上比较流畅的跑了,下载东西没什么问题。因为当时碰到了很多问题,我就抱着看见枣树,不管有枣没枣打一杆子的态度,给当时发布ctorrent的人写邮件问,结果搞了好久,他竟然回复我了。然后,一来二去,我给他的ctorrent修改了不少bug,但是,这个家伙也对这个项目不上心,可能是他写了这么个东西,他也没想到竟然有个SB天天来烦他,问东问西的,他后来还跟我说,要不这个项目转让给我维护算了。我当时就觉得,我就是为了完成导师的工作,我对这个东西也没有兴趣。这件事就这样过去了,后来,这个ctorrent我又用过几次,再后来,又出了一个叫Enhanced CTorrent,这是个基于Ctorrent的新项目,原来的CTorrent就消失了,现在这个叫Enhanced CTorret的软件现在还活着,我现在编译了一份在我家里的树莓派上,用来下载电影。

另外一个我可以参与但是我最后放弃了的项目是GIMP,一个在Linux上的开源项目。也是学校里的任务,做很多滤镜,大家到处copy了一些,就是对着Photoshop上的一些收费的滤镜copy,在GIMP上实现,学校里有很多这种扯蛋项目,从国家坑钱。比如做自主研发的OS,做什么会比较出成果呢,当然是图像处理软件了,能展示出来,反而内核,是没法展示的。我当时因为参与了这么一个项目,就有了一些做的还不错的滤镜,其实GIMP这个软件是支持脚本的,支持scheme这个编程语言,我当时不会,就去学习,还提交了几个改进,我本有机会把那些滤镜都拿出来开源的,因为,很多项目是展示完成,就算项目验收了,代码就死了。但是,我没有。

如果大家有机会接触开源社区的话,一定要热情的拥抱他。现在回想起来,我的C语言编程,都是在修改CTorrent那个软件时候学到的,我学了Scheme那个编程语言,是在给GIMP写脚本的时候学会的,一门非常古老的lisp语言,我觉得,C语言和Scheme这两门语言,是我读书时候学到的最好的东西,大部分的课我都忘记了,这两个,还记得。这已经快10年了,我非常后悔没有继续在开源软件中混下去。

参与了太多无谓的争论

感觉像宗教一样,以前我经常维护一些编程语言,比如C语言,经常维护一些操作系统,比如Linux。现在回想起来,非常的浪费时间,也没什么用处,纯粹就是发泄。当时是学生,对任何东西都是一知半解,除了精通如何在网上吵架以外,其实当时对C语言和C++并不懂,只是当时就会这几个语言,别人一说不好,就得去争论,其实没什么道理可言,就是增加了发贴的数量。因为我又喜欢打游戏,而且大一开始,我就有了女朋友,很少有时间来学习技术,结果有点时间就去论坛吵架了,非常的不划算。

如果时光能倒流,我就回去扇自己两个耳光。完全没有必要争论语言的优劣。学编程和考驾照差不多,学个C1的本,就会开各种小汽车了,只要有C1的本,不管是本田还是丰田,宝马还是宝骏,都差不多。和编程语言一样,汽车有一些东西是通用的。比如每个汽车都有方向盘,大部分方向盘都是圆的,每个汽车也都有刹车,都有转向灯… 主流的编程语言也有这些东西,比如都要有变量,有数学运算,有函数,有函数调用。这些东西,在主流的语言中,一个都不能少。这些都是语言的关键特征,只要理解了变量,函数,调用,递归这些关键特征,换一个编程语言,就像老司机换一个车开一开,难度不是特别大。

对初学者来说,不能追求那种新语言来学习,比如说,前两年特别火的Rust语言,这个语言号称能取代C++,至于行不行,暂时不讨论,但是,对菜鸟是非常不友好的。因为Rust也许很厉害,但是,那是以后厉害,现在这几年肯定不厉害,学这种语言,不如实在的学点C,Java,Python靠谱。万一以后Rust不厉害呢,就相当于你学开车的时候,学了一个油门在方向盘上的汽车,再开其它车会崩溃的。所以,不能学那种号称有100种新特征的语言做为入门之选。

还是要关注语言最核心的特征,就相当于开夏利车很稳的老司机,换个宝马也肯定很稳。如果是新手,开啥车都不行,这不是车的问题,是自己开车能力的问题。

过度依赖搜索引擎

大家应该都知道,唐朝有个诗人叫贾岛,他推敲两句诗,一句是“僧敲月下门”, 一句是“僧推月下门”,这两句诗里就差一个字。当时我就觉得,没啥区别。现在如果仔细体会一下,区别还是很大的。如果是“僧敲月下门”,可能就是一个老朋友来串门,敲敲门。如果是“僧推月下门”的话,这个意境可能是怕惊动这个门里的人,或者只是单纯的回家。如果是“僧踹月下门”,可能是有仇,来报仇的。如果是“僧拆月下门”,可能是城管,来弄违章建筑的。还有多,大家可以自己体会,比如“僧挂月下门”,这个是自杀了;“僧射月下门”,射门,可能这个僧是个足球爱好者,见门就射。

我觉得写软件也是如此,应该多推敲一下,如果不推敲,碰到问题就去stackoverflow上一通搜索,然后复制粘贴过来,当时能解决问题,但是过后可能自己也不明白了。我是这方面的典型,stackoverflow型程序员,一碰到问题,就想先去搜搜,结果一搜就搜了10来年,除了复制粘贴的速度快了一点,其它的能力没有随着时间进化。写完软件,半个月回头再看,就认为不可能是自己写的,因为读不懂了。

我想过这个事情,除了自己智商上的原因以外,还有就是工作上的原因。我在公司里是个螺丝钉的角色,无论我做什么,都不会影响公司的大局。就和1949年加入了共产党一样,战局已经稳定了,很难说一个在1949年加入共产党的人,对新中国的成立有多么巨大的帮助,只能说这个人是个成功人士,眼光很好,运气很好。就像今天考公务员加入组织的人,你很难说他做出了多少贡献,甚至有可能就是促进了消费。

现在很多的白领,工资其实是表演费。早上9点上班,然后在办公室里躺尸,下午5点下班回家,这样搞的办公室和停尸房没啥区别。知道为什么国内的IT大佬都搞人工智能么?深层次的原因,其实是他们发现了,找来的这些员工没啥用,整天在办公室里摸鱼,带薪上班,带薪上厕所,带薪午睡,带薪加班。所以这些大佬不想发钱给这些人了,极大的阻碍了公司的发展,留着没用,丢了也不可惜。我们可以看看哪个公司喊人工智能喊的最响,就说明这家公司上班摸鱼的人越多。目前卖药的公司喊的最响。

栋哥也是在公司拿表演费的,心里有点愧疚,所以我还是会给领导和同事收快递,按摩,倒水,拍马屁,哄他们开心,还有跳钢管舞来让自己显得有用一点。听电台的各位同学,一定不能成为一个stackoverflow型程序员,要让自己变的真正有用处。

如果你去的是皇家马德里这样的大球队,这种球队类似于今天Google,Microsoft这样的公司吧。一定不能在球队只担任修剪草皮这样的工作,然后还出来说你在皇马工作。这个世界上有很多这样的人,尤其是公关公司或者培训公司包装出来的人,他们满口的大话,又是这名牌大学的优秀毕业生,又是那名牌大学的毕业学生代表,又是在Google担任这个,又是在Microsoft担任那个,搞的头衔能打印一张A4纸,唬的我这种没有学历,没有能力的人一楞一楞的,但是,时间久了,也就这样了。后来我就有免疫力了,每次想看牛人的话,我就看每天7:30的新闻联播,前20分钟出场的人都很牛。

不够专注

我一直以来不能专注在一个领域,基本上这个也没什么好办法,公司里打工,有什么活就干什么活,有什么项目就干什么项目。如果接手一个项目是Java做的,只能接着用Java做,如果是PHP做的,也只能接着用PHP做。我没那么硬气,不喜欢的项目不干,也不可能说只做Python的项目,就这样,10来年,忙东忙西的,一眨眼就过去了。我唯一专注的一个小项目是我维护了一个Ruby On Rails做的报表软件,非常简单,可以给运营商里面的小伙伴使用,在运营商里做运营的,也很苦,有些人整天就是弄报表,这些报表还得给领导看。其实这些东西可以用SNMP协议读出来,然后软件自动生成就行了,我就做了一个给他们用,原来得1天时间生成的报表,现在,点几下鼠标就生成了,然后就打印出来给领导签字。功能很简单,但是这些苦逼孩子就可以省下不少时间来玩游戏或者上网了。这可能是我这几年来做的唯一一个让我觉得我还有点用处的软件。其他的,都是到处救火。

以上,就是我没有成为技术高手的原因,可能也不是什么主要原因,最主要的原因可能就是蠢。希望大家听听就好,多向成功的人学习经验,从我这里也学不到什么太多的经验。专注于一两个地方,不要一会儿做这个,一会儿做那个,也许几年以后,我再反思的时候,要多加上一条,在应该好好做产品的时候,竟然去做了一个SB电台。大家随意听听就好,也别太在乎别人说什么,路是自己走出来的。

刘延栋 wechat
欢迎扫一下关注我的公众号:软件那些事儿
欢迎收听我的电台,你的支持将鼓励我继续前进