我是如何提高自己的「编程能力」的?
上周的投票,大家最关心的还是提高技术,那我们今天就来聊聊这个话题。
之前主要分享的多是算法和数据结构方面(年后继续),因为我认为算法和数据结构是程序员最最最重要的内功,但是并不是唯一。
我自己作为一个非科班的程序员,并且在工作中观察了“这两类”工程师的表现,我认为科班和非科班最大的区别在于:科班的同学知道去学什么,问题出现了他知道自己是哪里有知识漏洞;而非科班的,可能压根不知道自己不知道什么。
(解决方式:建立系统的知识体系、寻求老板、tech lead 的指点,快速补充基础并反复学习。)
因此这篇文章我想粗浅的聊聊成为一个工程师需要掌握的大致学习路线,更多的偏入门一些,不涉及具体的工作方向。欢迎大家在文末分享你的学习心得,正如柏拉图所说:
人只有通过和别人讨论,才能知道我们的经验是不是真实的。
文章略长,如果一次没时间看完,建议先拉到文末参与抽奖送书活动~
如果把学习比作练功的话,我把我的学习内容分为:
-
修炼“外功”:偏应用 -
修炼“内功”:偏基础
两者配合,才能仗剑走天涯!
一、外功
1. Linux 操作系统
对于想做开发的同学,如果还是个小白,问我第一件事情该做什么,我会强烈推荐先学习 Linux 操作系统,因为互联网公司基本上大部分业务框架部署都是在 Linux 操作系统上进行的。
我认为学习 Linux 操作系统的重点就在于学习各种强大命令如何组合运用。
一是因为工作中我们经常需要用到,比如对各种日志文件进行分析,写脚本驱动机器帮助我们工作。
二是面试时经常会给出一个需求场景让你编写相关的组合命令,比如统计一段日志中各种 IP 地址出现的次数。
给大家推荐一本 Linux 界的“圣经”。
《鸟哥的 Linux 私房菜》蝉联最受欢迎华语 Linux 书籍第一的位置,无人能撼动。
对于想走开发路线,或者互联网技术路线的同学,学习 Linux 绝对是必须的。
这是一本既能帮助你入门,又能随时备查的工具书。更特别的是鸟哥的写作风格,非常口语化,读起来感觉像是有人在跟你实时互动聊天。
建议想要学习的同学可以收藏一本电子版随时备查。第一次阅读的同学估计会被它的厚度吓到,但其实没有必要去一字一字的全部读完,快速的看完前面十章,你就会对 Linux 有一个初步的认识。以后需要用到哪些命令和知识随时再查就可以了。
2. 学习一门语言和框架
对 Linux 操作系统有了一定的了解之后,大家就可选择一门编程语言及其通用框架进行学习开发。
语言的学习和框架可以借助的资料就很多了,每个人的习惯都不一样。喜欢跟着视频学习的可以去慕课网、极客时间,上面有很多性价比很高的课程。另外推荐大家可以加入一些交流群,嗯,比如我的读者交流群,另外一些框架或者语言的官网里面都会有自己社区和交流群的联系方式,里面会有很多精华帖子和大牛进行分享。
说回我自己,当时入门语言是 C++,研究生课程要用,没基础也只能硬着头皮上了。
但其实很多 C++ 的课程或者书籍都是先讲 C 语言,比如《C++ Primer》前面几章都是讲的 C 语言,所以也还好。
后来刷题的时候觉得 C++ 刷题有些麻烦,听了朋友建议选择了 Java,真心感谢他的建议,在这里我也建议如果你不知道应该选什么语言,自己也没有特殊偏爱的话,那就无脑选 Java 吧。
因为 Java 市面上学习资料非常的多,无论是国内还是国外大厂 Java 的就业面都非常广,对于新人来说目前是个很稳妥的选择。
当然,如果你不放心,可以在任何一个招聘网站上面查一查各种语言给岗位需求,只要不是那种很窄门的语言,我觉得学习都是没有问题的。像 Go、Python、C++ 等等就业面还是广泛的。
现在看来,我认为这三门语言都是需要学习的:
-
Java 是综合能力很强的语言,很多互联网公司大型的框架或者开源项目都是基于 Java 的,因为它有非常完成的一套轮子,能够快速帮助企业解决业务问题; -
C 语言偏底层,很多软件都是用 C 来写的或者和它有间接的关系,学习 C 能够帮你更好的理解计算机; -
C++ 虽然有些复杂,但它在某些应用场景中有很强的不可替代性,很多公司还在用 C++ 开发核心架构,比如腾讯、百度、谷歌等。
如何学习呢?这里拿 Java 举例来说。
A. 基础部分
推荐书籍:
同时推荐 B 站尚学堂的这套免费课程,可以说包含了 Java 的全部内容了。
https://space.bilibili.com/392179313
我自己总结的关于 Java 集合的文章: