最近在看《程序员的自我修养》,作者陈逸鹤,一本写给程序员的思考书,其实市面上类似题材的书也不少,比如我看过的另外两本《内外兼修——程序员的成长之路》《程序员必读的职业规划书》,我只是后悔自己看的太晚,很多道理明白的太晚,要多看看此类书,给自己寻找点方向感和动力,我也一直在努力践行书中的一些方法和认识,本文是此书的第一部分内容的归纳,希望对你有帮助,感兴趣的朋友可以买来此书详细学习。

好了,正文开始~~~

当我成为一名IT管理者时,我从更多的程序员身上看到了他们身上的一些特质对其职业生涯所产生的影响;当我开始自学设计,我又从设计大师们那里得到很多极具启发性的观点,而它们对程序员们同样具有很大的价值;而当我开始写作,每一篇文章完成后与年轻的程序员读者们进行交流的过程中,我的想法和观点又能得到进一步的完善和提升。

写给年轻程序员的10点启示

1. 正确认识自己

相比码农、程序猿、软件工程师、张江男、屌丝程序员等等这些网络词汇,当你把自己看作是一个屌丝程序员的话,那你也可能就是那个衣食不愁,但整天浑浑噩噩、无所追求的屌丝。我更愿意用技匠这个词来形容程序员,就像我给自己起的花名一样。程序员应该是那些不断追求更高技术,并有着自己产品梦的工匠。当你通过对自己技术不断打磨,一次又一次做出那些优秀产品的时候,你会发现自己不再是他人口中的码农或是屌丝,而更多被称为了大师、大神,而受到大家的尊重。

2. 比一般人更加努力

优秀的程序员往往会被同天才或高智商的人联系在一起,但我想告诉你,你周围所看到的那些天才(身边的优秀程序员)只是在你没看到的时候花了更多时间工作或者学习而已,当你也坚持这么做时,你也会变得和他们一样优秀。

3. 适时建立个人权威

建立个人权威,这能让其他人看到你的不同之处,并为你在公司或团队内部构建起良好的影响力。当然,这一切的前提是你通过不断努力积累了自己的实力,并在恰当的时候去展现它。

4. 遵循最佳实践

技术更新太快,作为程序员,如何才能适应这种变化呢?其实,就像每年都会有新的流行设计趋势,然而设计的本质和原则却始终不变一样。这些最佳实践或由此衍生出来的框架、工具都是那些富有经验的程序员通过大量实践,总结出来的最优秀的软件开发思想。通过理解和对它们的有效实践,能够让你站到前人的肩膀之上,对软件开发本身获得更深入的理解和认识。

5. 保持好奇心并乐于探索新的事物

优秀的程序员们也往往非常乐于探索那些看似与工作无关的技术。比如,做后端的程序员去学习前端的技能,前端工程师则去学习UI设计,等等,这些虽不会让他们成为那一个领域的专家,但技术往往是相通的,当你在探索这些新鲜事物的同时,你会发现你原有的技能也得到了提升。

6. 抛开代码与人沟通

“紧盯着电脑屏幕,不断敲击键盘,目光有些呆滞。”这可能是程序员给人的印象。而我所看到的那些优秀的程序员却都不是这样的,他们往往兴趣广泛,并且都乐于与人沟通交流。程序员们很容易会忽视与人的沟通,这其实对他们的职业生涯发展是不利的。我很支持那些年轻的程序员们坚持去走技术路线,但这不应该成为你排斥与人沟通的理由。你需要与人沟通来获得他人的帮助;你需要与人沟通来建立良好的工作关系;当你的能力不断提升,被赋予更多职责时,你更需要与人沟通来管理好自己的团队,以及与老板或客户进行有效的沟通等。

7. 要为优秀的人工作

环境对一个人的影响是巨大的,而最可怕的是当你身处其中时,很难意识到你正在变得越来越糟。我之前带过一些不错的程序员,他们中的一些人去了一些整体氛围或环境不是太好的公司。过了一段时间后,再次与他们碰面聊天时,我发现他们的思维、观点相较之前并没有提升,有些甚至反而退步了。

8. 生活、睡眠、旅行

我希望每个程序员都能明白工作、技术、写代码这些并不是你存在的意义,而生活才是,你需要懂得生活,并且学会生活。

生活:尝试有节制和有规律的生活,程序员生涯绝不是一次冲刺,而更像一场马拉松。

睡眠:很多人觉得睡眠是弱者的表现,他们往往会长时间熬夜,其实我觉得这是这一种恶性循环,反而会使你的工作效率变的更低。

旅行:去任何一个新的地方都可以称之为旅行,让你发现和感受新的东西,而这些是从电脑屏幕上无法获得的。

9. 相信自己的天赋和创造力

每个人的身上都有属于他自己的天赋和创造力,但它们也绝不是与生俱来的,你需要在生活中不断地培养和发掘它们。下面是我觉得一些行之有效的方法。

阅读优秀的书籍:好的想法绝不是凭空产生的,尝试从书中寻找那些能激发你创意和灵感的优秀内容。

记录和收集:尝试用一个小本子,将你转瞬即逝的好想法记录下来,它们可能并不直接有效,但下一个更好的想法可能就是从这些你记录下来的想法中产生的。

尝试动手:光有好的想法是不够的,你需要成为一个有工匠精神的人,通过亲自动手去尝试和实践,你会不断从中得到新的创造力。

10. 如果上面提到的其他建议都对你无效,那么就请坚持第2点吧,因为它将成为你最大的竞争优势。

那些程序员们后知后觉的职涯经验

1. 你的薪酬与工作量无关

换句话说你是否容易被取代。公司很容易找到一个和你差不多的应届毕业生,而那些对公司产品非常熟悉,并且起到关键作用的老员工,要想替代他们,公司所需要付出的代价及需要承担的风险就会高得多。所以,不妨摆正心态,正确认识到自己在公司中的位置,努力修炼内功,让自己变得越来越重要,相信你的薪资也会随之提升的。

2. 尽可能持续做一件事

既然你对于公司的价值来自于你的不可替代性,那又该如何有效提升它呢?我的建议是尽可能持续做一件事。这既是指技术上的积累,也是指你能完整或较长时间参与同一个项目或开发一个产品。

技术深度及完整项目经验的重要性,如果你总是在跟随那些新出现的技术和框架,那你很难在某一项技术上达到理想的深度;同样,在一个公司里,如果你总是在更换项目,那你也很难提升自己的价值。参与10个项目,不如完整参与一个项目。持续做一件事是要你把每一件事做透、做好,而不是蜻蜓点水,浅尝辄止。

3. 唯一不变的就是变化本身

作为程序员,我们又应该如何应对这些变化呢?我想说,你很难去改变所处的环境,或是阻挡那些变化的大趋势。你所能做的恰恰是培养自己持续学习的能力。

4. 你的声誉非常重要

除了那些经常挂在嘴边的诚实守信、踏实肯干等之外,有一点特别重要,那便是严谨。因为它往往是判断一名程序员是否具备优秀潜质的重要因素。严谨的程序员对于分配给自己的任务会认真理解,对于自己的产出会仔细检查,这些都能大大减少工作中的出错概率,给团队或公司中的其他人留下良好的印象。

5. 理解沟通的意义

当我们没有对问题有深入理解的时候,我们很难写出正确的程序来,因此我们需要向用户虚心求教,去真正理解他们所希望解决的问题。

6. 你的右脑将是你成功的关键

谈到那些我们眼中非常成功的技术大牛、IT高管,都会出人意料地将一些非技术能力作为自己获得成功的关键。比如,编写文档或做PPT的能力、演讲的能力、说服他人的能力,等等。我虽然并不完全赞同最优秀的程序员不写代码这种观点,但我确信你的右脑将会是决定你能否成功的关键。

7. 不要轻易说简单和不可能

年轻程序员们不应该轻易做出那些过于绝对的判断,应尽可能去使用科学的方法进行分析和论证,然后用不易被人误解的方式进行有效的表达,这样你提出的观点才能让大家感到信服。

8. 你不应该总是单打独斗

如果你真的希望做出一些具有影响力的东西,那么光靠个人是很难实现的。你需要和团队中不同角色的人进行合作,有时候你需要说服别人,有时候你则会被别人说服。

9. 让你的能力显而易见

那些优秀的程序员无时无刻不在体现他们的能力,从轻松地解决技术难题,到会议上提出被一致认可的解决方案,以及他们写出的那些优雅且完善的代码,这些都让他们显得与众不同,仿佛是天生的优秀程序员。但我想说,他们其实都是那些努力并使用了正确方法的人。程序员的能力来自于大量的编码实践,以及持续学习的能力和勤于思考的习惯。任何自作聪明,不懂装懂,以及投机取巧在明眼人看来都只会是东施效颦,显得如此微不足道。

每个程序员都应该了解的一件事

我曾经接触过一些IT高管及行业的技术大牛,当私下聊起他们是如何变得如此出类拔萃时,他们大多会以自嘲但又略带得意的语气来讲述他们的那些独门秘籍。

  • 我的文档写得特别好。
  • 我的口才很好,总是能成功说服别人。
  • 我的PPT做得非常棒,是公司里数一数二的。
  • 我写过几篇很受欢迎的技术文章。
  • 我热爱开源文化,并在社区里很有名气。
  • ……

我发现,这些普通人眼中的大神们很少会提及自己的技术有多牛,反而更多地把功劳归于那些看似与技术毫无关系的能力。大家千万别误以为他们只是一群华而不实,靠着一些小伎俩往上爬的小人。完全不是,而且我敢向你保证,他们中的每一个人在担任程序员或负责其他技术工作时,同样都有着非常出色的技术能力和优秀的工作表现。但为什么在他们眼中这些还不足以使他们达到现在的高度,反而是那些不起眼的写文档、做PPT、演讲等这些技能使他们能够在一次次竞争中胜出,并成为了我们中的佼佼者呢?

其实在我看来,他们所谓的这些秘籍,都可以归纳为一种能力,那就是自我营销

一名程序员如果能够尽早意识到自我营销的重要性,并有意识地锻炼和运用这种能力,那将对你的事业产生有益的帮助。

那么对于程序员们来说,又有哪些能够提升自我营销能力的方法呢?下面便是我的一些建议。

1. 读与技术无关的书

我建议只买一些经典的技术书籍来帮你打基础,然后从网上去学习一切新的东西。我尤其鼓励大家去读那些与技术无关的书籍。程序员不善于自我营销,其中一个重要原因是他们自身所掌握的知识体系太过于单一,很难跳出技术范畴与人交流,并引起别人的兴趣和认同。你可以读任何历史、经济、人文、艺术类的书籍,它们都能够帮助你丰富自己的知识和思想,使你变得更加全面和完善,而这反过来,又能帮助你建立信心。

2. 会写文档

文档可能是你完成代码编写后一个最佳的展示机会。当代码实现了它的功能之后,就很少有人会再去看它,除非它出错了。但文档被阅读的概率却大得多。从一个文档中,我们可以看到关于作者的很多东西,思路是否缜密,逻辑性是否强,设计方案是否优秀,等等。可以说,文档质量的高低是衡量一名程序员是否优秀的重要标准之一。

3. 学会包装

说到包装,人们往往会产生一种不好的感觉,把它与虚伪、假的东西联系在一起。其实,我所说的包装应该包含两层意思:

  • 知道什么是美的(优秀的)。
  • 精心制作。

作者举例一个普华永道的高级经理通过一个长达114页的非常精美的PPT而赢得了保监会关于偿付能力改革的会议。

在日常工作中,我经常发现身边的程序员很难写出美观整洁的文档或PPT来。这一方面与我们从小缺乏美学教育有关,而更重要的往往是他们并没有真正用心去制作它。其实,我们可以通过寻找一些优秀的文档示例来学习如何制作优秀的文档,这其实并不困难。知道什么是优秀的,然后像写你的代码一样用心去制作就行了。

4. 尝试多讲

讲话一直是很多程序员的硬伤,当然这也曾是我的硬伤。根据我的经验,你需要跨过以下两个障碍:

  • 敢说。
  • 让说的和你想的一致。

5.建立社会化联系

一个完全封闭的程序员一定不是一个优秀的程序员。优秀的程序员往往愿意并善于与他人交流,分享自己的经验和想法,并在交流中获得有益的东西。这样做有很多好处:

  • 通过这些社会化的活动能够使你的想法和技能更加完善。
  • 能够使你建立权威,你的技术博客,在一些社区上的技术问题解答,以及你的开源项目等都会使人认为你是这方面的专家。
  • 同样,你也可以获得他人的帮助,来解决棘手的难题。
  • 你可以找到与你有相同兴趣的人,一起做有趣的事情。
  • 你的社交网络将因此扩大,这意味着你所获得的机会将会更多。

程序员的烦恼

1. 是否还应该留在一线城市

一切都能为你的生活赋予意义,并让你感到更加快乐的话,那你还是应该更坚定地留下,而非选择离开。

2. 小公司做的事情太繁杂了

时常会说“杂事不杂”,虽然看着被很多与技术无关的事务缠身,但它们对你来说同样具有意义。你从中可能获得沟通能力、管理能力、建立更广的人脉,在企业内部建立影响力,等等

3. 创业公司中的危机感

无论成功与否,经历一次完整的创业都将让你受益匪浅。你将学到很多在大公司仅仅做一颗螺丝钉所学不到的东西。虽然在此过程中,你一定会有挫败感、焦虑,但或许坚持一下就会看到曙光。

另外一点我想说的是,创业的过程将让你获得不同的眼光。创业大多是在一个新的领域中进行的,你不应仅仅专注于公司所使用的那些技术,而更需要通过深入理解这个新的领域,去获得不同的视角和眼光,因为它们也会在未来成为你的核心竞争力。

4. 技术单一,想学习更多

我总是很鼓励身边的程序员们去涉猎不同的技术甚至领域,但前提是你必须首先对某一门技术做到精通。技术是需要深耕的,深入学习一门主流的开发技术,并不断提升编程思维,比对很多技术栈都浅尝辄止要好很多。因此,如果精力有限不妨先学好一门技术,你会发现之后再去学习其他技术会变得容易许多,因为它们之间往往都是相通的。

5. 我想自学编程,应该学哪一门语言?

如果你真的没有任何思路,只是希望你学的这门编程语言能够有用,我的建议是JavaScript,因为它看起来是唯一可能在未来所有领域内得到应用的编程语言,从我们的移动设备,到传统的Web应用,再到服务器端开发甚至是硬件编程,它几乎无处不在。

6. 大专学历,能进大公司吗?

全日制本科几乎成了所有内部职位的最低要求,所以学历上的缺失确实会成为你进入大公司的障碍。当然还是有例外的情况:

  • 通过内部员工的推荐。
  • 通过外包公司进入后,再转为内部员工。
  • 努力成为某一领域的专家,或者建立个人影响力。

如果你还是一名大专在读学生,那么我希望你不要过早焦虑,尝试问问自己除了学历之外还有什么让你能够脱颖而出的东西?是否有自己的个人项目?是否为知名的开源项目贡献过代码,甚至只是参与编写文档?是否通过写博客阐述过自己的独到观点,并得到大家的认可?在哪家公司实习过?这些都可能抓住雇主的眼球,从而弥补你在学历上的不足。

给年轻程序员的职涯建议

1.尽早确定你想做的事情。尽早确定自己想做的事情——你的职业目标,意味着你可以获得比其他人更多的时间去努力。
2.一万小时定律
3.提高工作效率。有以下两点建议:

  • 加快工作节奏
  • 借助工具完成工作

4.简明的沟通方式
5.持续学习
6.学会控制情绪
7.让最优秀的人围绕在你身边
8.善于归纳与表达
9.掌握英语
10.睡眠是你更强大