读者问:吴师兄好,我是刚上大一的计算机专业的学生,想请教下计算机专业的学生怎样练习编程才能把编程学精通

以下是我的回答:


程序员的简历,大多会有一个部分,叫“专业技能”(计算机专业的学生吃饭的家伙),其中一二三四列出来自己的技术所长,这就涉及一些用词,如常见的“精通”、“掌握”、“熟悉”、“了解”等等。

事实上,精通、掌握、熟悉其实都是很主观的词,每个人的理解都不一样。

你可能觉得会写个 Hello World 就是精通 c++,面试官需要你深入研究过编译器。

你可能觉得研究过某第三方框架源码就是精通 Spring Boot,面试官需要你自己造轮子。

这种理解的误差往往会导致一场不友好的面试。

初出茅庐的程序员写简历时恨不得把所有技能点都写上精通,面试是面试官逮着你写精通的知识点一顿猛问深挖,多经历几次之后很多人都默默的把精通改成了掌握:(

之所以先聊这些,是不想要计算机专业的学生觉得看过几本书、写过几个 Demo,就觉得编程不过如此。

好了,回到这个问题,计算机专业的学生怎样练习编程才能把编程学精通啊?

这里先说结论:无它,学习、学习、再学习,动手、动手、再动手。

要学习很多知识点,要动手敲很多代码。

先看看学习的知识点,一般来说,计算机专业的学生都应该接触过以下几门课程。

1、计算机组成原理

2、计算机操作系统

3、计算机编译原理

4、数据结构与算法

5、计算机网络

一、计算机组成原理

计算机组成原理这门课很好地向我们阐述了计算机是如何工作的,妹子咨询你电脑问题的时候,答案就藏在这门课程里面(大雾)。

推荐书籍:《深入理解计算机系统》

这本书是从程序员的角度来看待整个计算机系统的,所以是非常适合程序员的。但是这本书不仅仅包含了计算机硬件的相关知识,同时还包含了包括操作系统、计算机网络等相关知识。

二、计算机操作系统

无论你学习什么编程语言,和都避免不了和操作系统打交道,比如你学习 Java,用到多线程技术,实际上操作系统才是负责管理进程和线程的;比如你学习到内存分配的知识,c++里可以直接分配一段内存,此时实际上是调用操作系统提供的API进行内存分配。

如果不懂操作系统,你在未来学习编程语言的高级特效,涉及到线程进程调度,内存分配,或者是学习Linux相关的知识时,都会一头雾水,所以,只有学会了操作系统,我么才能够更好地学习其他语言和技术。

基于此,计算机操作系统的知识点频繁出现在笔试环节。

三、计算机编译原理

首先正式一个问题:编译原理并非随随便便就能入门的

换言之,需要准备一些基础知识在学习。

编译原理的学习和实践通常基于对计算机编译过程、计算机基本工作原理、甚至一定的数学知识有一定积累,这些知识分别分布并应用在了编译原理的不同阶段。没有这些基本知识的积累,很快就会在某个阶段由于功底不够而无法再继续后面的学习。

所以,先认认真真的积累上述的一和二在入门学习吧。

四、数据结构与算法

相信无论是已经毕业的同学还是正在学校学习的同学,都或多或少地被数据结构与算法这门课给折磨过。数据结构与算法这门课开篇就讲了一个非常重要的概念:程序 = 数据结构 + 算法,对于初学者可能还不能完全地理解这句话,不过对于已经工作两三年的同学相信对这句话是深信不疑的。

对于数据结构与算法的学习,我个人认为应该分层三个步骤:首先先大致了解什么是算法,可以通过一些科普读物来入门,这个过程我称之为入门阶段;接着可以尝试实现一些比较容易的数据结构和算法,这样可以更加深对数据结构和算法的了解,这个过程我称之为实践阶段;最后去了解数据结构与算法背后的相关数学原理等,这个过程我称之为原理阶段。

不管你认为数据结构与算法重要与否,你都必须有所了解,因为在面试环节肯定会问的!

五、计算机网络

计算机网络的相关知识在工作时使用的频率还是挺多的,毕竟,所谓的CURD工程师总是在处理 API 相关的业务。


看到这里,即使你是一名非计算机专业的学生,也知道当一名合格的程序员要学习的东西真多,并且,事实也是真的多,哪怕一名已经工作了好几的程序员也需要不断持续的学习,不管是主动还是被迫。

这些学习的知识点不仅需要你记笔记,还需要你自己动手研究思考。

  1. 为什么 HTTP 是三次握手四次挥手,加一次少一次行不行?

  2. 为什么很多缓存算法都是使用 LRU,而 FIFO、LFU 适合什么情形?

  3. 。。。

这还不够!

在 GitHub 上找优秀的源码研究学习,研究为什么是这样设计的;找找开源的项目,亲自动手敲一遍或者多敲几遍,思考项目是如何优化到现在这个样子的。

然后补充一些视频资料,自学计算机的小伙伴可以在 Mooc 上看免费的课程,推荐以下几门课程。

1、国防科大的《大学计算机基础CAP》,这门课是为非理工科专业的学生准备的一些计算机的基础知识。

https://www.icourse163.org/course/NUDT-1001614002

2、电子科大的《离散数学》

https://www.icourse163.org/course/UESTC-1002268006

3、浙大的《程序设计入门——C语言》

https://www.icourse163.org/course/0809ZJU007A-199001

4、浙大的《数据结构》

https://www.icourse163.org/course/ZJU-93001

5、华中科大的《计算机组成原理》

https://www.icourse163.org/course/HUST-1003159001

6、哈工大的《操作系统》

https://www.icourse163.org/course/HIT-1002531008

7、哈工大的《计算机网络》

https://www.icourse163.org/course/HIT-154005

最后,来一句我很认同的鸡汤话:加油吧,计算机专业的学生,当程序员,依然是寒门子弟晋级中产的一条不错的路径。

我是程序员吴师兄 ,希望和你一起成为一名厉害的程序员。


©著作权归作者所有:来自51CTO博客作者mb5fe18fab305a5的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 五分钟看懂一道中等难度的算法题
  2. 讲道理,MD5 到底是不是加密算法?
  3. 这道算法题用「动态规划」求解可麻烦了!
  4. 新手如何有效的刷算法题(LeetCode)
  5. 学算法的那些年,吴师兄接触的网站、软件、视频、书籍大揭秘
  6. 五分钟学算法:什么是线段树?
  7. 世界上有哪些代码量很少,但很牛逼很经典的算法或项目案例?
  8. 像数据库一样设计你的 redux 数据结构
  9. JavaScript数据结构(4):树

随机推荐

  1. Flutter下载更新App的方法示例
  2. 谈谈Ubuntu for Android
  3. Android应用程序的签名
  4. android启动--深入理解启动HOME
  5. android的ScrollView的简单使用
  6. Android设备和PC端通过USB线通信
  7. Android Webview 与js交互汇总
  8. android加载mapview
  9. Android之MediaStore应用
  10. android全平台编译ffmpeg以及x264与fdk-a