-->

左耳听风_092_91_程序员练级攻略的正确打开方式

你好,我是神浩网名做耳朵耗子到这里啊,我估计程序员练接攻略系列文章,你都已经了解过一个大概了,不知道此时此刻你有什么样的感受呢?那这份功略啊其实是给了一个进阶的地图,也罗列了很多的书籍和文档。

但是呢我可以确定的说,只是看这些列表,你肯定会抱怨,说头都要大了。

而且呢你可能还会觉得只是纸上谈兵,不知道怎么把这些知识转变成自己的能力。

尤其是你在工作中没有这些场景,你都可能不知道怎么实操。

所以呢在这里啊我把我个人相关的实践都写一下,这样呢会让你更好的掌握这份攻略。

那如果大家有更好的方法,也欢迎留言。

对于这本攻略来说呢,你并不需要按顺序学习,你可以从自己喜欢的切入点,按自己喜欢的路线学习。

那通常来说呢有这样一些注意事项,第一,论文篇和专业基础篇里那些书和文章,你是肯定得认真精读的这是基础。

但是呢也没有必要揪住细节不放,最重要的是知道这个基础的解题思路,抓住其中的重点,嗯,一个技术的关键点就那么几个。

第二高手成长篇的相关书籍文章和论文。

你不一定要全读啊,可以挑感兴趣的内容研究。

第三就是修养篇和设计篇里的内容啊,你可能要经常拿出来读,因为这些啊都是经验。

那随着你的成长还有阅历的增加,你每次读呢都会收获更多的新东西。

正所谓常看常新。

另外呢你还可以顺着这些东西啊,找到更多的修养和设计。

但是呢读这些资料啊,很多人都是记忆式的学习方式。

但你也知道记忆学习是简单粗暴的,所以呢也很容易忘。

那如果你不实操一下,就不会有具体真实的感觉,所以呢一定要动手实践。

那接下来呢是一些配合程序的练习攻略中技术成长的相关建议。

首先呢你需要建一个自己的实验室,咱们呢讲了很多的内容,看完之后呢你要动起来,徒手的把环境搭出来,写一些实验性的程序验证和感受一下相关的技术点。

嗯,出了问题啊,也要自己进行调试和修复。

只有这样你才可以获得一些感性的认识。

在入门篇和专业基础篇啊,都有很多的编程语言要学,你并不需要一下全部都学。

但是为了你可以一个人solo,你需要至少学一个后端和一个前端语言。

那我给你的建议呢是java和javascript在入门篇和专业基础篇啊,我都给了一些实践项目。

那如果你没有太多的工作经验呢,这些实践项目啊会对你的学习非常有帮助。

因为在实现代码的时候呢,你会遇到很多的细节问题。

那这些细节问题呢会倒逼着你去看文档,去google去提问。

那这个呢就相当于是把你扔到具体的问题场景里去锻炼你,打磨你。

而对于数据结构呢,其实都是在围绕增删改查的相关性能在平衡时间和空间。

那对于算法呢,要么呢就是对这些数据结构的操作,要么就是数学逻辑的推导。

比如说动态规划。

那这些东西呢可能在你的生活当中用不到,但是呢你可以把它作为一个脑筋起操,来不断的训练自己的数学思维。

然后对于高手成长篇的很多东西啊,也是需要你自己先搭一个环境,自己写一些hello world式的程序。

先体会一下那些知识,比如说内存分配、异步IO模型、lock free JVM和字节码操作,还有浏览器原理等等。

这些东西写几个小程序呢就可以体会到了。

而还有一些中间件的知识呢,你也是可以搭个环境自己玩一玩,并且呢最好能够搭出一些比较高级的用法。

其次啊,就是要把你的实验室升级成一个工作室,那工作室和实验室有什么不一样的地方?实验室呢只是在做一些验证性的实验,以跑通一个小技术功能为主。

而工作室呢是要以完成一个比较完整的软件功能为主,也就是说呢可以让别人来用的东西。

那这个阶段呢我给你几个建议。

第一,你得选用一个主流的开发框架。

并且呢在写这个软件的时候啊,你需要有一定的修养。

比如说有不错的编程风格,追求代码的可读性,有一定的测试案例啊等等这些我们在修养篇和软件设计篇里提到的东西。

那这个时候呢你需要大量的学习一些优秀项目的代码。

因为你可以在开源软件当中啊找到一些不错的代码实现,你可以做一些源码分析的事儿,但不是去整理其中的编程逻辑,而是要去学习代码组织的方法。

然后呢,你需要照葫芦画瓢似的练习,无论你完成的好不好啊,其实都没有关系。

这个呢就像画画一样,一开始啊总是画的很不好的。

但是呢只要你坚持,并且多思考别人为什么要写成那个,那么我相信啊你提高的也会很快。

第二就是你需要完成一个能用的项目,那对于选择什么样的项目呢?这里啊我也有几个建议,一呢就是从自己的痛点出发,写一个能解决自己问题的东西。

二呢是临摹别人的作品,复刻一个其他的成功产品。

有人说啊学好一门语言或者一个开源软件最好的方式啊,就是用想学的编程语言翻一下这个开源软件。

比如说你用go语言翻一下某个java的组件。

第三呢就是深度参与一些你喜欢的开源项目。

四呢就是在工作中找到风险可控的项目和需求。

那接下来呢你最好啊和别人一起组队升级打怪。

那这里呢需要注意,一定啊要找好队友,要那种有热情爱钻研,能够相互打气的队友啊,千万别找那些为自己的不努力,找各种各样借口的人。

第四,在这个工作室里啊,你还可以尝试使用各种前沿能,或者说你没有玩过的技术和中间件。

那这里呢你需要注意,你一定要使用一些高级技术。

比如说一些高级算法或者分布式技术啊等等。

第五,当你的东西做好之后啊,一定要做压力测试或者benchmark.那这样呢你才知道自己的产品与其他软件的差距,然后呢还会逼着你对自己的系统或者软件进行调优。

那把你的实验室升级成一个工作室之后呢,最后就是把你的工作室升级成工厂。

工作室与工厂最大的差别呢就是工作室啊是比较自我比较随意的。

而工厂呢是有相关的工业标准的,是有一整套的规范和标准的。

对此呢我有这样一些建议。

第一,当有了工作室的能力之后呢,一般来说啊你就可以去头部的互联网公司或者一些技术公司了。

但是呢你一定要在一些核心的项目或者产品工作。

也就是说呢你要在那些有技术挑战的地方工作,并在那里啊收割更多的经验和技能。

第二,你需要读各种各样的RFC论文,specification标准化文档,还要使用工业级的工程能力要求自己。

比如说CICD这样的软件流程,你得不断的告诉自己,把代码提高到可维护、可扩展甚至可重用的级别。

第三,你必须啊要对技术有更深入的了解,对软件开发的套路,各种traddooff,还有各种解决方案的优缺点都非常熟悉。

那这个呢就需要你了解软件内部的设计和原理,并且啊知道优缺点和使用场景。

第四,你需要开始追求软件运行的SLA啊,也就是能在什么样的性能下做到多少个九,你还要关注性统的可运维性。

也就是说,你需要为你的软件做很多的配套设施,就像为了汽车建加油站、建四s店、建公路、建交通管理部门等等。

第五,你需要找那些有工程素养的工程师一起讨论或者工作。

这一类的工程师啊,有丰富的工作和项目经验,也见过大世面。

他们通常来说呢,会有对外的输出,而不是那些写微信公众号的人,或者是在知乎上输出的人,而是那些在软件开发工作上有丰富工程经验的人。

那这个时候呢对于你要做的软件,你不仅仅啊只是为了完成你追求的是一种技术的高度追求,那种严谨和科学的态度。

你已经把这个软件当成了自己的作品,变成了自己的名片。

你在等待接受别人的学习和膜拜。

好了,那基本呢就是前面这一些,你还要记住我的学习能力。

那节课说的那个学金、金字塔这些过程中呢不断的输出你的认识和体会。

最后我用几个观点来结束这节课,希望能对你有帮助。

第一就是带着一些具体的问题来学习,能够让你更有感觉,也容易获得正反馈和成就感。

第二,开拓视野,尽可能只读英文社区的一手文章。

那这样呢你会得到更有营养的知识。

第三呢就是多问为什么为什么要设计成这样,为什么要有这个技术到底解决了什么样的问题呢?那这样呢会让你对技术有更深的认识。

第四呢就是学会归纳总结,在不同的技术中找到相似或者相同的东西,更容易让你触及技术的本质。

第五就是把自己的理解,用自己的语言表达出来对外输出,那这个呢是最好的学习方式。

第六呢就是动手和监视。

因为这是一个动手能力很强的学科,不动手呢你什么都不可能学精学深。

那这个呢是一个需要你不断坚持的事儿,在这条路上你有很多很多的理由可以让你放弃,只有坚持才有可能有突破。