极客时间已完结课程限时免费阅读

91 | 程序员练级攻略的正确打开方式

91 | 程序员练级攻略的正确打开方式-极客时间

91 | 程序员练级攻略的正确打开方式

讲述:杨超

时长10:39大小9.73M

你好,我是陈皓,网名左耳朵耗子。
到这里,我估计《程序员练级攻略》系列文章你都已经了解个大概了,不知道此时此刻你有什么样的感受?这份攻略其实是给了一个进阶的地图,也罗列了很多书籍和文档。但我可以确定地说,只是看这些列表,你肯定会抱怨说头都要大了,而且,你可能还会觉得纸上谈兵,不知道怎么把这些知识转变成自己的能力,尤其是你的工作中没有这些场景,你都可能不知道怎么实操。
所以,在这里,我把我个人相关的实践都写一下,这样会让你更好地掌握这份攻略。如果大家有更好的方法,也欢迎留言。
对于本攻略来说,你并不需要按顺序学习,你可以从自己喜欢的切入点,按自己喜欢的路线学习,通常来说,有如下的一些注意事项。
《入门篇》和《专业基础篇》中的那些书和文章,你肯定是得认真精读的,这是基础。但是也没有必要揪住细节不放,重要的是知道这个技术的“解题思路”,抓住其中的重点,一个技术的关键点就那么几个。
《高手成长篇》的相关书籍、文章和论文,你不一定全读,可以挑感兴趣的内容研究。
《修养篇》和《设计篇》里的内容,你可能要经常拿出来读,因为这些都是经验,随着你的成长,以及阅历的增加,你每次读都会收获更多新东西,正所谓常看常新。另外,你还可以顺着这些东西找到更多的“修养”和“设计”。
但是读这些资料,很多人都是记忆式的学习方式。但,你也知道,记忆学习是简单粗暴的,所以也很容易忘,如果你不实操一下,就不会有具体、真实的感觉。所以,一定要动手实践。
下面是一些配合程序员练级攻略中技术成长的相关的建议。
首先,你需要建一个自己的实验室。咱们讲了很多内容,看完之后,你要动起来,徒手把环境搭出来,写一些实验性的程序验证或感受一下相关的技术点,出了问题也要自己进行调试和修复。因为只有这样,你才可以获得一些感性认识。
《入门篇》和《专业基础篇》都有很多的编程语言要学,你并不需要一下全部都学,但是为了你可以一个人 solo,你需要至少学一个后端和一个前端语言,我给你的建议是 Java 和 JavaScript。
在《入门篇》和《专业基础篇》我都给了一些实践项目,如果你没有太多的工作经验,这些实践项目会对你的学习非常有帮助。因为在实现代码的时候,你会遇到很多细节问题,这些细节问题会倒逼你去看文档,去 Google,去提问,这相当于是把你扔到具体的问题场景里锻炼你、打磨你。
对于《数据结构》,其实都是在围绕增删改查的相关性能,在平衡时间和空间。对于《算法》则要么这些数据结构的操作,要么就是数学逻辑的推导,比如动态规划。这些东西可能在你的生活当中用不到,但是你可以把它作为一个脑筋体操来不断训练自己的数学思维。
对于《高手成长篇》中的很多东西,也是需要你自己先搭个环境,自己写一些 Hello World 式的程序先体会一下那些知识。比如内存分配、异步 I/O 模型、locker-free、JVM 和字节码操作,还有浏览器原理等等这些东西,写几个小程序就可以体会到了。而还有一些中间件的知识,你也是可以搭个环境自己玩玩,并且最好能够搭出一些比较高级的用法。
其次,把你的实验室升级成一个工作室。工作室和实验室不一样的地方是,实验室只是在做一些验证型的实验,以跑通一个小技术功能为主。而工作室则是要以完成一个比较完整的软件功能为主,也就是说,可以让别人 / 用户来用的东西(哪怕很丑很难用,但是可以让别人来用)。这个阶段,我给你如下的几个建议。
你得选用一个主流的开发框架,并且在写这个软件的时候,你需要有一定的修养,比如有不错的编程风格,追求代码的可读性,有一定的测试案例,等等这些我们在《修养篇》和《软件设计篇》里提到的东西。这个时候,你需要大量学习一些优秀项目的代码,因为你可以在开源软件中找到一些不错的代码实现(你可以做一些源码分析的事,但不是去整理其中的编程逻辑,而是要去学习代码组织的方法)。然后你需要照葫芦画瓢似的练习,无论你完成得好不好其实都没有关系,这就像画画一样,一开始总是画的很不好的,但是只要你坚持,并且多思考别人为什么要写成那样,那么,我相信你提高得也会很快。
你需要完成一个能用的项目,对于选择什么样的项目,这里,我也有几个建议。第一,从自己的痛点出发,写一个能解决自己问题的东西。第二,临摹别人的作品,复刻一个其它的成功产品。有人说,学好一门语言或是一个开源软件最好的方式,就是用想学 / 喜欢的编程语言翻译下这个开源软件,比如,你用 Go 语言翻译一下某个 Java 的组件。第三,深度参与一些你喜欢的开源项目。第四,在工作中找到风险可控的项目和需求。
你最好跟别人一起组队升级打怪。这里需要注意的是,一定要找好队友,要那种有热情,爱专研,能相互打气的队友,千万别找那些为自己的不努力找各种各样借口的人。
在这个工作室中,你还可以尝试使用各种前沿的或是你没有玩过的技术和中间件。这里,你需要注意的是你一定要使用一些高级技术,比如一些高级算法,或是分布式技术等。
当你的东西做好后,一定要做压力测试或 Benchmark,这样你才知道自己产品与其他软件的差距,然后还会逼着你对自己的系统或软件进行调优。
最后,把你的工作室升级成工厂。工作室与工厂最大的差别就是,工作室是比较自我比较随意的,而工厂是有相关的工业标准的,是有一整套的规范和标准的。对此,有如下的一些建议:
当有了“工作室”的能力后,一般来说,你就可以去头部的互联网公司或是一些技术公司了。但是你一定要在一些核心的项目或产品工作,也就是说,你要在那些有技术挑战的地方工作,并在那里收割更多的经验和技能。
你需要读各种各样的 RFC、论文、Specificaiton、标准化文档,还要使用工业级的工程能力要求自己,比如,CI/CD 这样的软件流程。你得不断告诉自己,把代码提高到可维护、可扩展,甚至可重用的级别。
你必须对技术有更深入的了解,对软件开发的套路和各种 trade-off 还有各种解决方案的优缺点都非常熟悉。这就需要你了解软件内部的设计和原理,并知道优缺点和使用场景。
你需要开始追求软件运行的 SLA,也就是能在什么样的性能下做到多少个 9。还要关注系统的可运维性,也就是你需要为你的软件做很多的配套设施。就像为了汽车,建加油站,建 4S 店,建公路,建交通管理部门……
你需要找那些有工业素养的工程师一起讨论或工作。这类的工程师有丰富的工作和项目经验,也见过大世面。他们通常来说会对外有输出(不是那些写微信公众号的人,或是在知乎上输出的人,而是那些在软件开发工作上有丰富工程经验的人)
这个时候,对于你要做的软件,你不仅仅只是为了完成,你追求的是一种技术高度,追求那种严谨和科学的态度。你已经把这个软件当成了自己作品,变成了自己的名片,你在等待接受别人的学习和膜拜。
好了,基本就是上面这些,你还要记住我的学习能力一文中的那个学习金字塔,在上面的过程中不断地输出你的认识和体会。
最后,我用下面的几个观点来结束这篇文章,希望对你有所帮助:
带着一些具体的问题来学习,能够让你更有感觉,也容易获得正反馈和成就感。
开拓视野,尽可能只读英文社区的一手文章,这样你会得到更有营养的知识。
多问为什么,为什么要设计成这样,为什么要有这个技术,到底解决了什么样的问题?这会让你对技术有更深的认识。
学会归纳总结,在不同的技术中找到相似或是相同的东西,更容易让你触及技术的本质。
把自己的理解用自己的语言表达出来,对外输出,这是最好的学习方式。
“动手”和“坚持”,这是一个动手能力很强的学科,不动手,你什么都不可能学精、学深。这是一个需要你不断坚持的事,在这条路上,你有很多很多的理由可以让你放弃,只有坚持才有可能有突破。
分享给需要的人,Ta购买本课程,你将得29
生成海报并分享

赞 181

提建议

上一篇
90 | 程序员练级攻略:技术资源集散地
下一篇
92 | 程序员面试攻略:面试前的准备
unpreview
 写留言

精选留言(23)

  • milley
    2020-05-31
    每次看到总能缓和一点焦虑感😄
    共 4 条评论
    39
  • weineel
    2020-05-31
    尽量看一手资料(不局限于中文还是英文),就像吴军老师说的那样,首先要看经典,即使部分观点有点过时,因为经典提供了基准线。
    共 2 条评论
    28
  • 业余爱好者
    2020-05-30
    实验室-工作室-工厂。写代码也可以写出搞科研的感觉!
    19
  • 待时而发
    2020-05-31
    我为什么每次看也会缓解一下焦虑情绪
    11
  • escray
    2020-10-31
    如果有时间的话,打算按照入门篇、专业基础篇中的线索,重读一遍经典,这个就当做我 2021 年的 resolution 吧,虽然原本可能是 2019 年的。 修养篇和设计篇的内容估计可以时常看看,作为一种调剂;高手成长的内容,除非是工作中遇到,否则暂时不打算去碰了。 目前自己还没有“实验室”呢,一步一步来吧。 留言里面很多同学说看这个系列可以缓解焦虑感,我反倒是觉得有点压力,可能是因为年龄的缘故,不过适度的压力应该是好事情。 比较励志的是,一位同学通过 ARTS 打卡,一年后加入了皓叔的团队。 虽不能至,心向往之。
    展开
    共 2 条评论
    10
  • 业余爱好者
    2020-05-30
    现在才认识到,自己还处于试验室的阶段。而之前一上来就要求自己的项目要如何设计文档,如何需求分析,如何建模等。显然是要求太高,以至于被自己吓怕了,于是就不再动手了。 还是不要期望太高,先写一些小程序。锻炼写代码的技能,以点带面的去学习期间遇到的各种问题与细节。编码能力上来了,一切多好说。 程序员要报一念想--可编程的东西都可以写到程序里。所以要时刻思考一个东西是怎么用程序实现的。网络是个程序,os也是个程序...... 动手,确实很重要。
    展开
    共 1 条评论
    9
  • 二的根比方
    2020-05-31
    现在大部分人还为了生活在努力,即便有很好的一块敲门砖,也需要面对社会的摩擦。浩叔的练级攻略更多是指明了处于程序员不同阶段的努力方向,是过来人的一种指引,不乏方法论的东西,都说方法比答案重要。特别对实验,动手这里有感受,谁不是囤了很多专栏,跟买了书枕着睡一个道理,只看书不去敲是学不会code,谢谢大佬一如既往的输出,请问后面还会出专栏吗?关注coolshell
    8
  • Sruby
    2020-06-05
    惊喜呀,再次来看还看到更新了。
    共 1 条评论
    3
  • Andy
    2020-07-17
    看完全篇,无论是学习方法,还是技术深度,又有了一个新的认识,整体而言,涉及的内容很多,而我又阅读和理解地不是很快,那就说明,我学习积累的东西还远远不够,实践动手和能力形成的功夫还不够。我一直认为,将知识转化为能力,这才是关键。加油,只要不停下来,自己就能够更好。愚公移山、精卫填海,这不就是古人早就告诉我们的真理嘛
    2
  • 牛仔裤🏖
    2020-06-19
    每次迷茫的时候,就来看一看耗子叔的文章
    3
  • yz
    2021-12-17
    2021年即将结束,现在回看,还好路没有走歪,前辈的经验真是使人警醒
    1
  • 张浩_house
    2020-09-16
    大道至简
    2
  • 程序员小跃
    2020-06-12
    这篇文章推送来的时候就看了一遍,今天又好好看了一遍,加上今年的行动是重学左耳听风,简直了。耗子叔的文章,多读几遍都不为过。加上自己的动手,我相信进步还能更多一点。
    2
  • 晓森
    2022-01-14
    都是非常中肯的建议,感谢
  • 子夜枯灯
    2021-12-19
    再次读了一遍这个系统,还是感觉读不完学不尽的感觉。
  • 槑·先生
    2021-08-31
    学到了。
  • 爱学习的大叔
    2021-08-10
    大部门公司都是写业务,真正纯粹的写技术的还是少之又少。
  • 晓峰Ontheway
    2021-02-19
    想要变成一名优秀的程序员,还有很长的路要走
  • 689
    2020-08-18
    第一次,良师益友!但愿我还来得及。
  • 一墨
    2020-06-16
    皓哥, 在你面前真是自惭形秽, 你才是博士👍