Files
CategoryResourceRepost/极客时间专栏/左耳听风/程序员练级攻略/91 | 程序员练级攻略的正确打开方式.md
louzefeng d3828a7aee mod
2024-07-11 05:50:32 +00:00

50 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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