欢迎光临散文网 会员登陆 & 注册

毕业想拿高薪?程序员一定要好好学这些课

2021-03-09 15:38 作者:01星球  | 我要投稿

1、

首先,我们要明确一个概念:

如果给计算机技术一个简单的划分的话,一个是应用,一个是研发,二者在普遍意义上都是程序员,我们从概念就可以看出,前者是单纯的应用,也叫业务程序员,后者是对于硬件或软件的研究设计,也叫架构程序员。

目前市面上大多数程序员都是在应用层面,并不是涉及到真正的研发,甚至大多数人对于计算机学科的认知还停留在编程语言的上面。

这里有个初学者普遍的误区,编程语言并不是计算机的全部,在学习计算机的过程中,数学与自然科学,专业知识,和一些通识类的课程,都非常重要。

当然,大多数人的学习目标首要还是学习企业所需内容,进入心仪的公司,拿到一个相对不错的薪资,这是没有任何问题的。

只是在技术积累到一定程度之后,或者想要在技术一途深耕下去,我们会发现一些编程以外的基础知识就变得尤为重要。

所以学习这些,能让我们在技术走的更深,能给未来更多可能性。


2、

对于技术学习大概分为两个类别,一个是围绕计算机基础学科知识的学习,一个是应用技能的学习。

前者属于计算机学科的基石,它是编程,乃至整个计算机技术体系都是围绕前者建立的,想要在计算机方向深入,必不可少。

接下来挨个讲每门课的学习意义。


1、计算机组成原理。

不谈深入,如果想从事软件相关工作的话,了解存储器、输入输出系统、计算机的运算方法、指令系统等内容,对以后涉及到的调优等问题都很有帮助。

如果我们不知道硬件在计算机内部如何运行,软件无法发挥硬件的最大优势,调优必然受到限制。

在学习过程中,计算机组成原理有两个最大的特点,一个是内容繁杂,零零碎碎,乱七八糟,第二个是内容十分晦涩难懂,所以在学习过程中,有条件的话要多参加学校实验课,或者可以多看一些顶尖大学公开课,可以在慕课、YouTube,包括哔哩哔哩,都有很多不错的课程。

或者说,可以看一些专业的书籍。比如黑皮书。这些都是学习过程中一些不错的选择。对于看书,如果有能力的,最好去看一下原版的书籍。因为翻译过来的内容,实在是 一言难尽。


2、汇编:

汇编是可以脱离编译器甚至编程语言的限制,它对于语法总结,对于了解编程语言本质,对于解决问题的能力帮助都很大。

在高级语言的角度来说,如果学会汇编语言,能看懂每一行代码,看懂编译器生成的汇编代码,我们就知道这行代码在计算机中到底在做什么事情,就可以从本质上了解编程。

所以学习汇编之前最好先学习一门高级语言(比如C++、Java),因为高级语言更贴近人,它是符合人的逻辑的,当我们在学习汇编语言的过程中遇到问题的时候,就可以跳出汇编语言从高级语言的角度来看待这个问题,我们就不会被局限起来。

个人认为学习汇编的根本目的不是非要用汇编去找一个相对应的工作。而是因为汇编语言对于一个开发人员所应该具备的基本素质的培养和形成都有非常重大的意义。同计组一样,汇编也是去相应的一些平台,看一些公开课,或者书籍。

这里推荐王爽老师的汇编语言,还是非常经典的一本教材的。


3、操作系统

操作系统,我们已经耳熟能详了,什么Windows,Linux,操作系统也是一个极其抽象的东西。我们仔细想一想,操作系统是给人用的。

所以它是其实是在解决我们在使用计算机当中的问题,所以在学习过程中,我们可以在其中领会各种解决问题的奇思妙想,思考到各种数据结构的巧妙应用,他为许多的工程问题提供了非常经典并且极其有效的解决思路。每个知识点,都去好好了解一下他的背景和意义。

推荐一本书,《操作系统导论》,推荐的原因只有一个。他提供了真实、可运行的代码,而非伪代码,也被称为最好的开放式操作系统教材。


4、计算机网络

互联网时代,所有的流量,传输都是依靠于网络,在开发过程当中,尤其当接触到一些具体网络技术时,例如Tomcat,Nginx,或者docker等等我们就会发现网络基础的重要性。

想要深入学习编程,计算机网络还是比较重要的一环。同样在面试里面,我们也会遇到各种网络问题,如TCP|IP三次握手,四次挥手,TCP和UDP的区别,HTTP协议一堆堆的面试题。

这推荐《计算机网络:自顶向下方法》,通俗易懂,每章后面也有专门的习题、讨论和实验。更易于我们去理解计算机网络。


5、编译原理

这门课我想多说两句,目前国内计算机学习大趋势,是迎合互联网公司招聘需求为主,对于工业软件、编译器的研究和语言的研究有很大缺失。

首先这门课是从使用语言到创造语言的必经之路。就算不能创造,有所了解,对日后编程的学习和研究也会有很大帮助。

其次除去应用场景,它对我们自身的竞争力和对于计算机技术的理解也有很大的帮助。有难度的问题都涉及到了底层,因为我们只有了解底层机制才能更深入的思考问题,而编译原理可以让我们从语法、代码优化、代码与硬件结合等多个方面去看待问题,加深对于计算技术的理解。

编译原理的难度相当大,他要求我们建立起 对于计算机编译过程的理解,对于计算机基本工作原理的理解,甚至有一定的数学的思维。

我们在看编译原理之前,至少把C语言指针的思想搞清楚,学习离散数学,学习了数据结构。然后要理论和实践的结合,争取自己能写出一版玩具编译器。这里说一点题外话,

我想表达的一点是什么呢,没有什么无用的技术,而在于我们能不能去发现他的价值,并且深入的学习和研究。


6、数据结构与算法

同一个项目,架构、设计思路和实现的功能都差不多。有的人做出来的框架Bug也多,性能也一般,只能在自己的公司用。而有人做的就可以开源出来给很多人用,甚至被Apache收录。这么大的差距形成的原因就是因为细节。

这些细节就包括,我们的内存是否节省,数据存取是不是足够的高效,算法是不是足够优化,等等等等,这些结合起来决定了一个框架是否足够优秀。如果不懂数据结构与算法,不懂复杂度分析,那就只能写“凑合能用”的代码。

所有业务的实现都是数据结构,所有数据的存储都依托于算法。还有种说法是程序 = 算法 + 数据结构,某种意义上来说,这也是最粗略区分码农和程序员的一门课。


3

总结一下,以上学科内容为“内功”,内功不一定能让我们多拿多少工资,但是能够帮助我们建立对于计算机学科比较全面的认知。回到开始说的,我们学的并非只是编程语言,而应该是整个计算机学科。

掌握好这些内容,起码能帮我们打造个人职业发展的适配性和稀缺性。 如果对技术深入兴趣不是太大, 或只是想以技术入行再找适合自己的定位的话,以上内容除数据结构和基础网络知识外,其他的都可以忽略。

还是那句话,顺应市场需求进行学习,是为了当下的生存,学好内功,是为了以后的发展,根据个人情况分清自己的学习方向和未来规划。

最后说句理想主义的话,作为一个技术人,我个人不是很想以工作有用无用来谈论一个技术的学习和研究价值,老打工人思维了,不是对技术该有的态度。

毕业想拿高薪?程序员一定要好好学这些课的评论 (共 条)

分享到微博请遵守国家法律