大家好,我是二哥呀。
今天来给大家分享一些学习编程的心得,真的颠覆了我以前对学习编程的刻板印象,可以这么说,如果你恰好处在大学阶段,看到了这篇内容,OK,恭喜你,如果你能按照我说的去做,大三大四的时候绝对能领先同学一大截,除非你好心把这篇内容分享给他——嘿嘿。
编程分两种,一种是实操型,奉行的准则是实践出真知;一类是理论型,奉行的准则是全部的知识都要搞懂后才肯去动手。前者代码写得多,但基础不扎实,刚学编程时候的我应该属于这一类;后者代码写得少,一句“talk is cheap, show me the code”就被呛得想动粗。
真正的大牛,能在两者之间找到一个巧妙的平衡点。
对于上班族或者转行的同学来说,想把所有的知识点都铺开去学习完,确实不现实,最好的办法就是重实战,然后再补理论。对于科班的在校大学生来说,因为有充足的时间,所以可以在理论知识上多花一些时间,等到工作后再弥补实践上的短板我认为是最正确的方式。毕竟鱼和熊掌不可兼得呀!
最近些年,可能是因为写作的原因,我补充了大量的基础知识,就突然感觉“今非昔比”了,编程上有了很大的进步,尽管依然很菜,但比前些年自认为好了很多。
好了,废话就不多说了。先给大家推荐一门课,哈佛大学的 CS50。
老师非常激情,尽管没有在现场,但依然有一种身临其境的感觉。第一节课,直接就叫同学到讲台上撕了一本超级厚的书,就为了给同学们灌输一种思维——说得直接点,就是二分查找法,先把书撕一半,然后再撕一半,再撕一半,直到找到一个 M 开头的名字。
总共也就 20 多节课,每节课大概一个小时左右的时间,大家可以每天刷一节。我简单列一下课程的目录,基本上都是编程中要搞懂的基础知识。
算法、程序设计、语言等
数据存储、磁盘等
C 语言、源代码、编译器等
函数、全局变量、参数、返回值等
线性搜索、二进制搜索
符号、递归、冒泡排序等
归并排序、动态内存分配、堆和栈等
指针、文件输入输出等
数独、计算机史上最有名的 bug 等
魂斗罗游戏如何分配内存等
哈希函数等
网络编程等
网络安全等
说一件挺不好意思的事,我以前觉得只学 Java 这门编程语言就够了,做个 CRUD 的好 boy 不就挺好的嘛。然后随着时间的推移,越来越觉得这个想法有点天真,有点无邪,哈哈,还是要力争上进的,多学点没啥坏处。
一开始学也行,随后补也行,总之是不能想当然的不学,会吃亏的,吃大亏的。
关于 C 语言,我之前给大家推荐了浙大教授翁恺的视频,以及一个英文的在线学习网站,新来的同学可以去看一下。
https://www.bilibili.com/video/BV19W411B7w1
大家应该能发现,很多讲解计算机科学相关的书籍,包括课程,里面的例子几乎都是 C 语言描述的。我在《一把小刀,直插 class 文件的小心脏》这篇文章里也提到了 C 语言的符号表(Symbol Table)。
C 语言是很古老了,但越老的东西活得越久,越能证明它的优越性。
不得不说,哈佛就是哈佛,名校就是名校,这课程真心给力。如果你真的是对计算机科学感兴趣,并且将来要进入这个行业工作,强烈建议多刷几遍。
这是一个在编程界混吃等死了十多年的老菜鸟给初学者的最良心的建议。下面是这门课程的地址。
https://open.163.com/newview/movie/free?pid=M6U6LS8CV&mid=M6U6MHDUR
刷完这门《哈佛大学的 CS50》,也刷完了翁恺教授的《C 语言程序设计》,就可以看看下面这本天书了!
这本书牛不牛逼,直接看豆瓣评分就能感受到,基本上全星,应该说是计算机相关书籍中评分最高的一本了吧。
那肯定是一门好书,一本再好不过的书了。
但能不能看得懂,能不能耐着性子看下去,就需要看你的定力了!
这本书从计算机开始讲,介绍了电脑主机有什么部件,主板上有什么零件,CPU、内存和硬盘之间是怎么连接的。
介绍了我们写的程序是怎么从一个文本文件被编译,然后是怎么变成汇编语言,再到机器码的,以及怎样被计算机执行的。
还讲到了计算机网络、计算机组成原理、进程和线程等等,从硬件到软件,全部拿下。
这本书读完后会有哪些收获呢?
明确某一个阶段我们欠缺什么知识。
对技术有极客追求的同学会在这本书里找到很多答案。
终于明白了,我们写的程序是怎么被计算机执行的。
再次强调,《深入理解计算机系统》这本书对初学者并不友好,可能需要在不同的时间节点反复的看,一开始看不懂的内容可以过一段时间再看,如果还看不懂就再等等,过一段时间回来再继续看。另外,书里面很多例子都是用 C 语言写的,所以在看这本书之前一定要把 C 语言给吃透了。
总之,不要抱着那种一定要把这本书吃透再怎么怎么样的幻想。先从中学到 1%,再学到 5%,再到 10%,不要操之过急,学到点是点,能学到多少都是值的,不抛弃不放弃,嘿嘿。
如果真的想从事编程,当做一份职业来对待的话,你需要一本这样的书。
读这本书的同时,可以着手学习数据结构了,比如说数组、链表、树、图,以及哈希表等。为什么要学习数据结构呢?
清华大学邓俊辉老师的答案:数据结构作为构建高效算法的必要基础,在计算机科学领域中,起到了技术体系的基石的作用。以 ACM/IEEE Computing Curricula(计算机教学大纲)2005 年版为例,其中对于计算机科学、计算机工程、信息系统、信息技术、软件工程等几个相关专业的共同要求中,数据结构与算法作为程序设计概念与技能的核心,紧随在数学之后,排在第二位。
当然了,基本的算法也跑不了,比如说动态规划、贪心算法,还有基本的排序算法。
我给大家推荐一个在线的学习网站,地址如下所示:
https://www.programiz.com/dsa/why-algorithms
这是一个纯英文的学习网站,截图中为什么是中文的?哈哈,当然是我用 Safari 浏览器翻译过的。英文功底可以的同学可以直接看英文原版的。代码示例有多种版本,Python、Java、C 和 C++ 的都有,完全不用担心被编程语言困扰的问题。
有 C++ 基础的同学可以直接看邓俊辉老师亲自录制的课程,有配套书籍——《数据结构》第三版,清华大学的计算机系列教材,质量没得说。
我贴一下课程的在线地址:
https://www.xuetangx.com/learn/THU08091000384/THU08091000384/5883586/video/9215529
害,如果你想在毕业后或者跳槽的时候拿到满意的 Offer,甚至体验那种好多个 Offer 摆在面前,却不知道选哪一个的感觉的话,我推荐的这三门课程、一个学习网站、两本书,你值得拥有!
最后再送大家一本美团大佬手撕的 300 道 LeetCode 刷题笔记,纯 Java 版,二哥亲自整理的,分亮白版(可以打印出来学习)和暗黑版(晚上看保护眼睛),对于算法薄弱或者需要提高的同学都十分受用(提起码:xs23):
https://pan.baidu.com/s/1xe3r8qDuKE99p2ZD9w2XrQ
哇塞,原来学编程可以这样呀,忍不住点个赞,嘻嘻~