如何成为一个优秀的程序员?

一个优秀的程序员与一个优秀的码农,有着本质的区别。

优秀的程序员必须要有足够扎实的基本功,映射到武侠小说中,通常是说内力要足够深厚。

优秀的码农通常会说,数据机构、算法工作中根本不会用到,学了也没啥用,要实现什么什么,用PHP、Python就可以了,内置函数都给你写好了,直接用就行。成为高手有多种途径啊,学汇编干毛线啊。

在《能够让程序员高潮的书籍有哪些?》一文中的通用型书籍推荐中列举的这些书,苦李个人认为是一名优秀程序员必须修炼的内功心法。

这些书,初读时感觉并没有什么卵用,而且要反复阅读才能初窥门径,但是,要想成为一名优秀的程序员,而非做一名优秀的代码搬运工(俗称码农),我们必须把这些根基打牢,毕竟内功足够深厚了,才能练成上乘武功。

怎么判断你是不是一个优秀的程序员呢?

通常情况下,我们在现实生活中经常有人这么定义高手:

  • 在很多网民的眼里,熊猫烧香作者是高手
  • 在经验不足的程序员中,能够解决各种bug、告诉你用什么软件、有什么问题都能帮你解决的人是高手
  • 还有些非技术型的互联网人员,认为能够单兵徒手实现一个产品的全栈工程师是高手
  • 各种语言的作者是高手
  • ……

上面列举的这些的确都是高手,但是,他们的侧重点不同,方向也不同。那么,我们要成为怎么样的高手?首先,我们要选定一个方向,而不是被这些高手忽悠来忽悠去,一会研究研究这个,一会儿有研究研究哪个。

在选定方向这件事上,苦李的观点是,如果真不知道自己想往哪个方向发展,那就都试试,总会找到一个自己喜欢的。如果试了两年,所有的技术都过了一遍,还不知道自己将来何去何从,那么,放弃吧,咱不适合编程。

方向定下了,那就甩膀子开干吧,开干之前,年轻的程序员通常都会陷入一个误区,就是非得要搞明白那些个本来就搞不明的问题,例如:

  • PHP是最好的语言?
  • 程序员要先学数学吗?
  • 最好的C语言书是谭浩强写的吗?
  • Linux发行版那么多该选哪个?
  • 某大牛说IDE不如编辑器
  • 大牛都是用记事本写代码的
  • 放屁要先脱裤子吗?

这些个问题,我在初学编程的时候遇到过,而且在我带过的一些小弟中,无一例外,他们也都喜欢纠结这些个问题。所以说,在这里我要提醒各位年轻的 programer,不要被无关的东西弄偏了目标,要专注,坚持。求多不如求专,深度到了,再花少量的时间去扩展一下广度即可。

举个栗子,你看看武侠小说里,段誉就是一个傻逼,仗着有时发出有时发不出的脉冲波和绕圈圈就能快跑直线的bug技就加上一门佛学能独步武林最终迎娶了白富美,出任了CEO,走向了人生巅峰,乔峰永远是一招降龙十八掌,更夸张。而慕容复文武双才,基本精通天下武学,每天读书4时辰练功4时辰,论用功谁能和他比啊。。。可到了30多岁还是一事无成,pk连段誉这种新手都搞不过,最后被人抢了老婆,就是因为方向不对,而且太不专注了。

以上东西你都做好了,要花个2年时间的样子,对于学生来说,如果你有一个好的学校背景,人生可以就此扬帆起步了

但这不是终点,俗话说人靠衣装,美靠包装。包装是门学问,这里的包装不是让你西装领带亮皮鞋黑丝套裙白衬衫整一个营销狗hr的造型,是说专业技能上的包装。

为什么这是最重要的部分呢?因为别人一般不和你说这么多,尤其是懂得包装的人,更不会传你这些不传之秘啦。。。。。

包装自己的第一步是“提高实力”

没有实力的包装那是空中楼阁,只能靠每天日常搞外包的忽悠架构大数据云计算过活,明眼人也能看出来,所以纯属作秀,没有意义。

在某个领域(编译器、虚拟机、开发架构、前端。。。)成为专家(专家的定义嘛,,我的理解是能在简历里写精通)后,包装的实力就算具备了。

包装的第二步是“定位”

提到美国会有一大堆人跳出来说是人类的希望民主的大救星,提到google就是最纯的技术公司不作恶、软件业的翘楚开发界的标杆、心美人美白莲花。。。哪怕你列举google卖假药、恶意打压yelp、挟持web标准等等等等这些事,他们也会说百度更差(咦这不5角钱常用的语句吗怎么被民主进步人士盗取了?。。。),可我根本没提到百度好吗。。。

这全是包装造成的,所以包装的巨大威力,以此可窥之。

google是搜索引擎,百度难道也说自己是搜索引擎?不,百度说自己是最懂中文的搜索引擎。。。哈哈哈,你别笑,这的确很管用,就像google说自己不作恶是好女孩一样。

程序员的包装定位,无非稀缺和独特这两点。物以稀为贵,稀缺就是要做到不可替代,这很好理解,比如你知道世界第一高峰是珠穆朗玛峰,如果没看过禅师精选集你很难知道第二高峰是乔戈里峰,但文青特别偏好乞力马扎罗山,不爬不跟你结婚,为啥?独特性嘛。。。我不跟你比高,我和你比文化底蕴,于是就赢了。

由于你有实力,所以你应该尽量把自己的实力包装成稀缺属性,你是专家嘛。。然后你实力多,应该把独特的实力包装出来,避免和他人共同曝光,以免被人压在身下。

我说一个我朋友包装自己的故事,他进公司接手了一个项目,已经是被隔壁组开发了3,4个月的一个软件,其实这软件2个月也能做好的,但是隔壁人忙而且也不上心,不熟悉这个技术,加上又不是自己的老板,所以做事拖沓了那么久才做好。他接手后一刻没闲,晚上带回家也做,做到半夜,10天做成,然后整个公司的人都知道他的名字了,他也就立稳脚跟了。

这个包装的主题是,技术实力强,开发速度快。

包装的第三步是“推广”

推广就是让人知道你做得好,强化你的个人品牌,可以用博客、知乎、mailing-list、github等,通过写文章、参加线下聚会演讲、回答问题、帮助他人等方法。这个用好了是门学问,用不好就是装逼,不展开了。。。

记住不要匿名,匿名你基本啥也得不到。

有人明明技术实力强,但是由于没有包装好,或被埋没了才能,或被贴上了各种不应该有的标签,或被人偏见看待。比如 赵劼 的c#和 vczh 的微软标签

有人明明实力一般,但是善于鼓动小白,包装得好,所以有一批忠实粉丝,这种人我都不太敢说名字了,呵呵。。

所以优秀的程序员一定要善于包装自己。正所谓,酒香也怕巷子深。

推动力

上面说了那么多,但是坚持做来需要不少推动力,有人能考上清华,但是也能在大学堕落,有人能取得成绩,但是也会固步自封。。

要想优秀,得有巨大的推动力,你为啥想成为优秀的程序员?你的推动力是什么?

好比,我们说,嫖娼是有巨大道德压力、金钱压力和风险的事情,为啥那么多嫖客乐此不疲并努力给自己洗脑合理化这件事呢?因为在他们的眼中嫖娼是最有趣的事情、是不吃饭不睡觉也不能不做的事情、是不做就活着没劲的事,有了这种死也要死在床上的精神,还怕什么呢?这就是推动力。

程序员日常

一个没有日常的程序员日常