科班学习求助

192 天前
 Systemprint

题主本科计算机在读,前一年一直跟着学校的课程表学习。 之后在各种论坛的介绍下,看了 3blue1brown 的科普视频,浅浅地读了几本机械工业出版社的大黑书和其它经典书籍( csapp 、计算机导论、Head First 等等) 这些外部学习资源跟校内接触的课本之类的教辅,给了我不同的感觉:

( 1 )有些是课内课外都差不多,比如国内出版社出版的《离散数学》与大黑书系列的《离散数学及其应用》两本书介绍的知识点都差不多,只是国内出版的书籍过于简洁,而大黑书更为详细(也更厚更重)。

( 2 )有些是课内课外天差地别,比如线性代数。课内使用的同济线代描绘的线性代数充满了计算,对几何方面的描述也极为抽象。3blue1brown 的科普视频直接从几何角度解释了线性代数的几何意义:比如矩阵在空间变换的作用、行列式测量空间变化程度的作用...... 再回过头去看课本,我只觉得哪怕把同济线代上的练习题练到飞起来,也不会对实际的图形编程有任何帮助,连在简历上写“学过线性代数”都不合适的那种。

( 3 )有些知识启发性极大,但是科班课程中连个影都没见,比如 java 的设计模式: 科班学习中的 java 像是带了个类和对象的 c 语言,设计出来类和对象好像并没什么用。接触了设计模式之后,看见了类与接口配合,在一次次继承中保持核心而不断变化;使用多态来提高复用性,减少代码量。 但是课本中没有,只有对 java 的各种特征的介绍,至于这些特征有什么意义,全靠自己想办法弄明白吧。

( 4 )有些知识不管使用那些资源,都感觉云里雾里 比如《计算机组成》这种深入底层的课程,知识点繁多,又不与编程直接相关,更像是作为有一定水平的程序员应当学习的内容而不是科班学生的课程。

在开始学习前,有人说科班程序员基础更扎实,学习的知识点更全面,编码水平更高云云。 但当真正进入科班学习以后,只给我留下了像是在学某种“文科计算机”的样子,与实际应用重合性不大。计组只是计组,讲课的讲师一般不会将它与其它内容串联; java 就是 java ,讲不讲设计模式就看课时够不够,线代就是线代,也很少有人会将它与其它内容串联讲授。学完的知识考完就忘,更别提等到参加工作以后了。(个人看法)

然后我参考了 csdiy.wiki 的内容,开始自学了。 自学的内容比科班的课程内容多,深度更深,耗费的时间也更多。(也开始佩服那些能按学习计划自学的大佬) 学的东西短期内也不会看见什么成效(也可能根本上就是浪费时间)

题主身边并没有参加工作的程序员,也不认识在计算机领域摸爬滚打多年的大佬。 自己做的、想的可能就是错的。但题主的能力也不一定能让我认识到这些错误,故来求助各位,希望能得到朋友们的指点与帮助。

1074 次点击
所在节点    程序员
8 条回复
litchinn
192 天前
我觉得你可以先明确你当前的目标,计算机属于工学,但内部细分其实也分工学理学
你目前的困惑在于这二者的区别,理学是对理论的研究,是科研,工学更多的是对理学的落地,是过程是结果

除非是天才,一般人在这二者之中基本只能选择其一,这当然并不是说你做工程就不能出科研结果,做科研就做不出落地的项目,这其实有关你对事物的看法和行为方式。
现实中有很多工程学天才,他们可以轻易的将抽象的理论应用与实际,开发出优秀的作品。也有理学天才总是能迸发出创新的火花。更有很多人,他其实是工学思维但走上了理学的道路,这其实会让他痛苦无比。

学校显然属于一个理论先于工程的环境,不知道你们学校有没有金工实训的课程,让你用尺规画图画一个五角星,这很简单,但让你用锉刀锉一个出来你现在可能就束手无策,让你为工人设计一个批量加工的方案更显得为难,这在于理论是确定的,但是工程却会因为外部环境变化而变化。因此学校更注重理论的传授,这也更直接有效。

回到开始,对于计算机相关专业来说,学校的内容肯定是不够的,但对比其他工学学科来说,我觉得计算机有一个宝库——开源。
现阶段我觉得你应该找到自己的兴趣点或者以你看待问题的方式,你是愿意科研还是将理论应用于实际(再强调下这两者并不冲突,这只是让你更舒服)。选择一条适合的道路,我相信你现在已经领先大多数同龄人了。加油!

吾生也有涯,而知也无涯,以有涯随无涯,殆己!
ma836323493
192 天前
基础不牢,地动山摇, 学基础感觉云里雾里, 到后面你学到后面就会和基础的知识融会贯通了
joshua7v
192 天前
每个人有不同的学习方式,找到适合自己的就好。计算机科学是一门科学,和工作时写软件不是一个概念,科学知识通常就是很抽象的,而编码能力是要在实际应用中学习的。如果你的目标是想把学习到的这些科班知识应用到平时的编码中,你需要做一些针对性的练习会得到更深入的理解。比如说 3b1b 的线代科普非常好,但是线代本身又有什么用呢,你会了解到现代计算机系统里线性系统非常多,接触一点计算机图形学写一写相关代码或许是线代实用的一个场景。

是不是错误很难说,你可以想想自己想要的理想样子,如果你有明确目标且将来不需要这些知识的,那其实就是浪费时间。如果理想的样子是在各种国际大厂里写一些关键代码,你现在的学习就一定不会是浪费时间。想不清楚就还是继续学,花这些时间可能会让你在以后程序员的工作上有更多选择。

学习要挑难的学,工作要挑简单的做
pxiphx891
192 天前
我觉得本科期间要把理论基础打扎实,工程实践能力上班了有的是时间学习,上班写代码的时候遇到问题之后,才能体会到设计模式的意义,否则是体会不到的,不如把数据结构、C 语言、组成原理、计算机网络、操作系统、算法导论仔仔细细学明白
scorpion91
192 天前
c 语言和数据结构与算法最重要
hejingyuan199
192 天前
有这样的想法很正常。

学科设置上来说,计算机科学与技术放在本科,只是一个通时教育,啥都了解一点就可以了。
我觉得这个专业本意不是培训码农。
当然,到了大三大四你有了选修课,你就可能会选不同的小方向。
如果说你大一学了 Java ,就非要变成专业 Java 程序员,那不太现实。

可能这个专业在最开始设置时,程序员还不是一个热门专业,所以目的是培养计算机科学家、或者计算机工程师。
当然,随着工业的发展,这些全变了。
现在我们谁还能分清楚什么才是计算机科学家呢?什么是计算机工程师呢?

楼主读了计科,可能已经先入为主把自己当成一个码农了。
这就是困惑的来源。
Systemprint
191 天前
@litchinn
感谢回复
我对学校教学的不解之处就在它的“理论教学”是否真的是理论?
比如同样是介绍计算机结构,大黑书系列的 csapp 就简单介绍了下冯诺依曼结构中的各个部件,比如 CPU 和它内部的寄存器、运算单元等内容。但又点到为止,并不会完全深入到底层去介绍相关内容,读了以后也大致对计算机结构有个印象。

而课程内的教材,就真的把里面有什么什么介绍出来了。比如刚刚提到的寄存器,csapp 的介绍的寄存器只有“寄存器”,不会说有多少多少种寄存器。课程内的教材是把 CPU 里面有几种寄存器,几种寄存器的作用都是什么,它们什么时候起作用等内容都完全介绍出来了。

但它也只是介绍,不会说再跟别的内容串联起来去深入分析,更像是写了一段简洁到不能再简洁的陈述句在那里。这句陈述句确实没错,但是就是难以理解+难以记忆。
比如说“汽车的油门能控制发动机进油量”和“汽车有四个轮子”
它确实没说错,但是没见过发动机的人、没坐过汽车的人,看着这两句话也不会明白 “为什么汽车一踩油门就走了”

理论教学给我的感觉就是拿无数上面那些陈述句去给没见过、没坐过汽车的人去介绍汽车。
这些陈述句确实没错、确实是描述汽车的,然后我听了就两眼一黑,不知所措了。听了都不明白这些理论跟汽车有什么关系。
因此,学校给我一种“既不理论,又不工程”的奇怪印象。

我也认同你对计算机学习的看法,开源跟它背后的分享精神确实是计算机学习的一大宝库。我接触到的能称为“计算机学习资源”的内容都来源于其它程序员的分享。
理论与实际应用也不是一般人能两手抓的,一个理论性强的考研多少人又提前准备又二战才勉强考上,能把已有的东西完美利用的人更少。我应当考虑认真思考自己到底要干什么。
感谢你的回复。
talkischeap567
191 天前
多整点有用的 实用的 书本的东西 可以拿来挑重点 总结的
结合实际应用场景
但是书本总体还是落后时代太多,还得看实用的
还是多逛逛 github,找别人整理好的,实际开发实用的东西看再结合书本
先开发提高自己效率的工具,这算是基础设施

比如
好多好的网址经常有些没时间看或者忘了,就写个 URL 收集器,浏览器自带的书签不好用,无法自定义,备份导入迁移麻烦

再比如写代码 经常需要用到的可复用的代码,那就写个工具方便你提前写好,映射到快捷键 免得需要时又要重写

等等等

这样的开发水平才会逐渐提高 吧?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/986523

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX