实际上,大一初学编程的小伙伴在刚开始学编程语言的时候都会很吃力,以上推荐教材的正确使用方法有两个要点:
- 结合课上老师所讲和书上所讲,在实际应用中去感悟“为什么”
- 把教材当成工具书、参考书,而非“教程”,结合参考书和网上搜索资源,来解决在实际编程中遇到的问题
计算机基础的话,就是我们平时常提到的老四件:1.数据结构、2.算法、3.计算机网络、4.操作系统。
要我说的话,这四门课是程序员最最最需要好好学的东西!另外,虽然四者都很重要,但是数据结构和算法相比于计算机网络和操作系统要更加重要一些!
这四大件也就是我们常说的程序员内功修炼最重要的一部分内容!
“直接用框架不就好了么?为啥还要学习这些东西呢?” 这句话是很多初学编程的小伙伴最疑惑的问题。
简单给大家聊聊为什么这四大件这么重要吧!
- 地基稳固才能走的长远:这大件可以说是程序员未来发展的地基,你掌握的程度决定了你的地基打的有多深。工作不久之后,你就会发现你想要成为一位优秀的程序员,而不是 API 调用者/低级 Bug 制造者,这些东西都是必备的!
- 技术更新换代快:我们前几年可能还在用 Spring 基于传统的 XML 开发,现在几乎大家都会用 Spring Boot 这个开发利器来提升开发速度,再比如几年前我们使用消息队列可能还在用 ActiveMQ,到今天几乎都没有人用它了,现在比较常用的就是 Rocket MQ、Kafka 。技术更新换代这么快的今天,你是无法把每一个框架/工具都学习一边的,底层技术就是你快速上手他们的瑞士军刀。
- 懂得底层技术的人更有竞争力:现在的程序员这么多,你如何能和别人拉开差距?单纯就靠使用框架的能力么?这些随便从培训班抽一个人可能都会做的工作无法成为你的核心竞争力。
关于数据结构,我想说的是,它是这四大件中最简单、最基础的一个。离开了数据结构,几乎任何的程序都会失效,所以在讨论数据结构的时候,常常要把算法也连带着说一说。
要单纯地掌握常见的数据结构,就如同拆解一个个精妙的仪器件一样有趣和简单。正因为数据结构这个东西在程序中的作用,和仪器部件特别相像,不同的数据结构有着不同的特性,因此要想学好数据结构,图解是必备武器!
在数据结构的学习中,强烈建议跟着名校的网课学习,这些课程都经过多次打磨,配套练习丰富,非常适合初学者。比如中国大学 MOOC 上的武汉大学开设的《数据结构》课程。
辅以教材参考书,强推《大话数据结构》,光看封面你就知道这本书的风格了,图解学数据结构?选这本,没错的!
当用图解理清了各种数据结构的原理和特性之后,还要在代码中多加练习,熟能生巧。
编程是一个冒出一个问题,解决一个问题的有趣过程。
当有一个变量在脑海中出现的时候,要先思考该变量的作用是什么,以什么数据结构存储这个变量,还要考虑在代码中如何实现。比如说栈,在 C 语言中可以用数组辅以栈顶指针来实现;在 Java 中可以直接调用 Stack 类来实现。只要你编程,就要用到数据结构,编的程序越复杂,用到的数据结构就可能越多,可以说它几乎没有什么难点,重点是熟能生巧。
算法算法课常常和数据结构课放在一起,在有些高校中,会存在“数据结构与算法”和“算法设计与分析”这样的两门课。
前者可能相对简单,介绍的是常用的数据结构和基础的算法;后者就相对较难,讲的是算法相关的概念,以及稍微比较复杂的算法思维和算法分析。前者侧重的是基础逻辑算法的应用,后者侧重的是运用算法思想到实际问题中。
举个例子,我们常用的排序算法就属于前者的课程内容,一个排序问题可以有多种算法解决方案,不同方案有不同的优劣,也就有不同的应用场景,学习一题多解也可以加强编程熟练度。而贪心思想属于后者的课程内容,比如说经典的活动选择问题:
摄 S={1,2,…,n}是 n 个活动的集合,各个活动的集合,各个活动使用同一个资源,资源在同一时间只能为一个活动使用。现已知 n 个活动的开始时间 si 和 fi,设所有活动的最早开始时间和最晚结束时间都在资源可供利用的时间内,并规定若活动 i 和活动 j 满足 fi≤sj(或 fj≤si),则称他们是兼容的。现求:最大活动集合,该活动集合内的所有活动都是兼容的。
该问题的解决思想使用了贪心思想,贪心策略为:每次都选 fi 最小,即结束时间最早的活动(在满足兼容的情况下)。以此贪心策略进行选取活动集合,可以满足结果为最优解(不唯一),该解法的最优性可以用优化子结构来证明。以上这些,对于初学者来说可能听起来云山雾绕,但这都是算法设计与分析课上的内容。
分治思想、贪心思想、动态规划这三大算法在实际应用起来非常灵活,常常让人摸不到头脑。我给大家的建议是:
- 多多联系图解的方式,先接触算法的思想。不管多复杂的算法,结合了图解,总能对其有一个清晰的认识
- 多多联系实例,研究算法在问题中的应用。对算法有一个清晰的认识后,到了实际问题中还是不容易应用算法想出解题思路,需要大家勤动脑,勤动手,多做题,感悟算法在问题中的应用。
- 多多看博客、热门笔记,听听前辈们的总结,争取做到举一反三。前辈们的笔记都是非常不错的学习资源。
- 网上一些热门的开放的 OJ 也是大家训练算法的好资源哦~,比如leetcode
另外,如果你刷 Leetcode 的话,你会发现很多算法题都是通过动态规划的方式来解决的,因此你务必要琢磨透动态规划算法的思想。
再附上一些算法领域的经典学习参考书(对于初学者,推荐程度从左向右……):
下面这两篇文章都非常不错,一定要好好看一下:
- 《硬核的算法学习书籍 资源推荐》 。
- 如何刷 Leetcode?
计算机网络是一门系统性比较强的计算机专业课,各大名校的计算机网络课程打磨的应该都比较成熟。
要想学好计算机网络,首先要了解的就是 OSI 七层模型或 TCP/IP 五层模型,即应用层(应用层、表示层、会话层)、传输层、网络层、数据链路层、物理层。