CSDN 的小伙伴们,大家好,我是沉默王二。最近我在狂补计算机基础知识,感觉有点上瘾!以前觉得很枯燥的知识,现在竟然有点香!不知道为什么。
我算是科班出身,大学的专业就是计算机网络,不过老实说,在实际的开发中,大学的很多课程,要么“用处”不大,要么可以换个方式,更高效的学习。
其中的原因,一方面是实际开发更关注知识的“实用”,另外一方面,大学的教学确实和产业有些脱钩。所以我就从实际应用的角度出发,重新来梳理一下计算机基础方面的知识。
01、数据结构
毫无疑问,数据结构对一名程序员来说非常重要,还是那句话程序=数据结构+算法,这种说法无论放在什么时候都是成立的。
大部分的数据结构课程,关注的重点都在如何从数学上实现一个数据结构,但在实际开发中,大部分主流语言都已经内置了常见的数据结构,比如说 Java。也就是说,对于大部分程序员来说,实际开发中,很难有需求要从零开始实现一个数据结构。因此我们只需要做到下面几点。
1、熟悉常见数据结构的概念,比如说数组、堆栈、链表、哈希表等。
2、了解常用数据结构之间的差异,比如说 ArrayList 和 LinkedList,我在之前的文章中有详细说明过,可以点击链接去查看下。
3、关注常用数据结构的外围算法,比如说如何对 List 和 Map 进行查找。
4、关注数据结构使用中容易出错的地方,比如说线程是否安全等。
…
B 站上浙江大学的一个数据结构的课还不错,很系统很经典,适合小白入门。
视频地址如下。
https://www.bilibili.com/video/BV1JW411i731
02、算法
以我接触的领域来说,大部分普通的业务系统都不会涉及到太复杂的算法,因此我没有在算法上投入过多时间。
但如果你在一些特殊的领域,如果算法跟不上,可以说是“寸步难行”,比如说图形处理领域,无论是图像的变化还是增强,无一例外都要用到矩阵变换,因此就必然涉及到线性代数的内容,再往深处学的话,必然会牵扯出更多的知识。
所以学习算法要视情况而定,如果想走算法岗,那么《算法第4版》、《算法导论》、《数学之美》、《编程珠玑》、《剑指offer》这些书都要耐着性子啃一啃。电子书可以在下面这个 GitHub 仓库上找得到。
https://github.com/itwanger/JavaBooks
顺带再推荐一份阿里大佬的算法刷题笔记吧,在 GitHub 上已经有 13.3k 的 star 了。里面的每道题都写了解题思路,是通过 GO 语言实现的,每道题都 runtime beats 100% 了。
在线阅读地址如下所示:
https://books.halfrost.com/leetcode/
03、设计模式
我认为设计模式是初中级程序员迈向高级程序员的必经之路。有不少程序员,前期冲劲十足,但后继乏力,都是吃了设计模式的亏。
在工作的前几年,大部分程序员都处于熟悉编程语言的阶段,也就是处于“技”的阶段,随后就要进入“术”的阶段了。在编程领域,“术”的典型代表就是“设计模式”。
我自己推荐的一本书是《设计模式之禅》,代码是用 Java 实现的,读起来比较轻松,也更符合国内程序员的阅读习惯。
另外就是我上次推荐的 Refactoring Guru 网站,里面附带的图片非常精美,阅读起来的视觉效果会比较丰富。
在线阅读地址如下所示:
离线版可以通过下面这个链接下载(无套路,不需要解压密码):
设计模式,牛逼!
04、软件工程
实现一个软件系统的过程,不仅只有编码,还涉及到项目安排,团队协调等一系列非技术因素,如果想从一名程序员走向管理岗,成为 team leader 或者开发经理,软件工程方面的知识就必须得跟得上。
这里我推荐几本不错的经典书,其中有一本邹欣老师的书,他刚出任 CSDN 副总裁,希望 CSDN 能在他的入驻后变得更好一些。他这本书的书名叫做《构建之法》,我看过,还是很不错的。
另外还有两本必读,就是《人月神话》和《人件》,虽然有了岁月的痕迹,但依然值得深读。当然,关于软件工程,最好的学习方法是观察,观察你所在的团队是如何处理工程问题的,然后思考,最终形成自己的方法观。
05、架构 & 设计
要想写出一个好而美的程序,需要经过三个阶段。
第一阶段,有扎实的基本功,简单点说,就是要做到语法熟练、框架熟练,成为一名能够完成开发任务的“码农”。
第二阶段,从“码农”到“工程师”,在局部上,不仅要能够实现功能,还能关注功能之外的维度,比如健壮性、低耦合、可扩展等指标。
第三阶段,从“工程师”到“架构师”,不仅在局部上追求一个模块的好坏,而且还要从整个系统层面去掌控,合理安排资源的优先级,保证整个系统不会出现腐败等等。
要想成为一名优秀的架构师,除了自身的努力,也需要一点点运气,但靠读书可能不够,但这些经典书籍还是要阅读的,能给日常的工作带来巨大的帮助。
《代码大全》
《重构:改善既有代码的设计》
《设计原本》
《大型网站技术架构核心原理与案例分析》
最后
技术这条道路并不好走,不仅要学习很多新技术、新框架,还要及时补充必要的计算机基础知识,底子硬的同时还要学会拥抱变化。
学习的过程,就好像登山一样,大概有 80% 的人在这个过程中会掉队。那么请相信我,只要目标明确,努力加上坚持,再加上一点点好运气,你就能登顶!