浅谈编程中的学习路线 - 我的学习经历
今天看到一个很有意思的视频回复:
现在回想起来,编程这个领域到底有没有一个学习路线呢?现在的我给出的回答是:
没有,要什么学什么。
很多时候,我遇到的情况都是这样:
- 欸 ~ 小麦,可以帮我开发个小程序嘛
- 啊?小程序啊,我没啥经验咧,不过可以试试。你想做什么类型的小程序?
- 啊我想做这样这样的……
- 哦哦,这样啊,那行,我试试看吧
然后我就开始敲代码了,并且某些东西不清楚怎么实现的时候,就去搜索
但是转念一想……真的是这样吗?
编程中有学习路线吗
要搞清楚这个问题,首先要了解:一个领域,是分为很多不同的阶段的。在不同的阶段,得出的答案必然不同。这样,以下就用我的故事来为大家说说我从懵懂无知到能够独立开发一个项目的心路历程。
我的故事:初识编程
省流:渴望拥有学习路线
一开始,我们都是懵懂无知的小白。那时候,一个网站上酷炫的动画、一个 RPG Maker 制作出来的游戏、一个 Flash 写几行 Action Script 做出来的可交互动画。对于我来说都是很有冲击力的科技产物。那时候的我,是渴望拥有一条学习路线的。我们一定会羡慕所有大佬,信手拈来一个很牛的项目、一个很帅的动画。自己也想学,奈何根本就无从下手。
有时候。
你想学,都不知道从哪里开始学。你想通过阅读来提升自己的知识,但却不知道应该读哪一本书。你想搜索某些资料,都不知道输入哪些关键字。
甚至,你都不知道有这篇文章的存在。。。
我第一次接触编程,就是在我小学的时候上的电脑课、通过 YouTube 学的 Visual Basic。当时通过。时间太遥远了,依稀记得,当时候搜索的关键字应该是:How to program
或者 How to crack a game
所推送的衍生作品。总之,当时那段接触编程的机遇真的很魔幻。
可能你们是幸福的,还能接触科技产物,学习一些新的事物。至少当时我家是不让我碰电脑的,这种编程上的东西,更是被我爸认为是迟早让电脑中病毒的歪门邪道。我被摔过游戏机(当时喜欢破解游戏,有了台 PSP 就成天琢磨着怎么给游戏设置金手指)、被剪过数据线(反正我只要打开电脑,不管是在写代码还是真的在打游戏,家里都会觉得我一定是在打游戏),也被灌输过什么时候应该做什么事情,是的,我的成绩非常的糟糕,非常!糟糕!
不夸张的说,我整个中学生涯,从入学初中平均在 70%,排名全班中央,但到了高中甚至降到了 50% 以下,甚至不让毕业的那种。。。这段历史,现在翻回去看确实不忍直视。所以这篇文章也是我的逆袭人生笔记。我现在的总平均在 88.98%,GPA 3.93,是学校的年级第 15 名,获奖无数。看到这篇文章的家长,可以适当的培养孩子自身的兴趣。
到了初中,学校有电脑课,恰巧学校的电脑课是编程教学的。这一下就感觉:嗷~ 我的恋爱时刻来了!这不排除在编程领域上是需要天赋,但是你不试试怎么知道你不行呢?我当时是这样的:我整个中学生涯,成绩虽然说不达标,但是电脑课每一次考试,必定拿 95% 以上,6 年成绩至少在 97% 以上(前一两次可能是平时分拉低了,后来在班上表现良好,每一次考试都是 100%)。平时考试也是最早睡觉那个家伙。平均一门电脑考试,我估计只用 30 分钟(考试时长 2 小时)就能睡觉。成绩不差!
这时候,我开始接除了 Flash、接触了 RPG Maker。。。我了解了代码中是一行一行由上往下执行的。具体怎么了解的,忘记了(大概是初一的事情了),可能是 YouTube 学来的?也可能是不小心写错代码,然后 Debug 的时候发现卡在那里了,着重研究了一下。
所以在我初中的阶段,我对编程开始培养了兴趣,开始对代码感兴趣。我的学习路线,就是 YouTube 上东拼西凑的 Tutorials。你说有用吧。。。好像当时学的又不是正确的东西,你说没用吧。。。那它确实是我的编程启蒙教育。
就这样,我的中学生涯就结束了
我的故事:初学编程
省流:拥有学习路线
这时候,我进入了大学。别问成绩差怎么进来的。天选之子(完了会被打,总之就是有点幸运)。。。而且我在统考的时候确实努力了,考的确实比以往所有的考试都还要好(虽然都是在及格线,但是还是顺利毕业了)逆袭经验 + 1。也很幸运,我选择了计算机科学与技术这门专业。那么这部分就是重点了,大家所说的学习路线应该就是从这里出来的。大学里系统性的教学确实是一个很不错的入门手段。我们的学习课程是这样安排的,你们可以参考。当然,对于某些重点课程,我将会跳出来精讲,剩下的自己悟。
当然,我的大学生活也很悲惨,正好撞上了 2 年半的疫情。一切都靠自学。
大一
整个大一,第一学期学习了:C 语言、计算机导论、网页设计与开发、JavaScript 程序设计以及数字逻辑。
C 语言
这门课一直以来都作为程序员的启蒙课程而存在,从编程的概念,到变量,再到函数,最后再到指针。。。这些一系列的概念。但是最重要的一个,也是很多老师会忽略的点 —— 培养学生们对于编程的思维能力。编程这个领域就是训练思维的。思维才是重中之重。
为什么?设想今天你拿到一个编程题目,或者说需要你实现某个功能。光靠编程课所学的概念是行不通的。就算你懂循环、懂得判断。但是你不懂应该怎么处理问题那他永远都不可能去解决问题。当然,我遇到过我的师弟是这样的,今天一个问题不会解决,但是给他说了思路之后,他把代码敲错了(这里的错指的是 main
写成 mian
、void main
的返回值是 return 0
这类型算是基础的错误),这就代表他不仅没学会编程思维,连编程基础都不会。
编程这块,对我来说就是水到渠成的事情,比如说 main
函数,就是英文里 “主要” 的意思,主要的函数。要将这类型的相关知识点融会贯通,才能实现所谓的:Good Code Is Easily Read and Understood, in Part and in Whole。所以对于那些说 “我英文不好,学不来编程”,以我的角度,就是一个逃避的藉口,学习永远是提升自己而不是让别人受惠的过程。
计算机导论
这门课就是让学生了解一个电脑中的软硬件分别进行什么操作,计算机是怎么工作的。这是计算机科学与技术这门专业的核心课程,你得了解 CPU 是怎么运作的,才能去了解你的代码究竟在电脑里执行了什么操作。为什么某些代码被称之为屎山代码?他到底对 CPU 进行了哪些摧残。。。
网页设计与开发
这门课我觉得是大一里面比较有趣的一门课,不是因为他多么的深奥,而是这是一门前端开发的课。这就意味着,我再也不需要对着那个黑屏控制台输入输出一堆奇怪的数学题了!!!这门课主要在于学习 HTML 以及 CSS 如何对网页进行设计。虽然现在我们也不怎么会去用纯 HTML 来构建一个前端页面了,但是这是基础。和纯 C 语言不再用于构建某个功能很强大的应用是一样的道理。现阶段都有更优秀的框架进行前端开发,如 Vue、Angular、React 等等。
JavaScript 程序设计
这门课嘛,简直就是给网页设计与开发这门课叠加了 BUFF,此话怎讲?因为 JavaScript 是用于给静态页面做交互的,这就意味着我可以让我的页面动起来了。这其实就是学习中很重要的一点:奖励机制。欸!我的页面动起来了欸!听起来就特别兴奋不是嘛?
数字逻辑
来到了一门比较枯燥但是也同样很重要的课程。我觉得这门课程的前置课程应该是计算机的导论,学什么?学逻辑电路。这门课将学习到各种各样的逻辑门、时序电路、基本芯片等。这门课学好了,以后可以去硬件开发试试?
大二
到了大二,我们开始学习 Java 程序设计、Android 移动应用开发、数据结构、React 程序设计等课程。
Java 程序设计
Java,可以说是中国整个编程业界最通用的语言了。反正在我的认知中,Java 一直被灌输着 “月薪过万,岗位需求大” 等标签。事实上我们在找工作的时候也确实是这样。但是找工作是后话,不在这里谈。那么从这里开始,我们学到了面向对象思想,了解了怎么将现实世界的东西抽象到编程世界中去。
也就是这里,我开始进入无休止的网课阶段。我的 Java 编程知识都是从 B站 学来的。应该大家都差不多,听过这么一句话:“零基础,学 IT,月薪过万,就来黑马程序员!”。伴随着我的整个疫情生活。强烈推荐去学黑马的课程,我的评价是:它的公开课比学校教的知识更精深多了。从中我学到了,多线程、抽象、继承等概念。
React 程序设计
这门课是我挺痛苦的一门课,因为 React 在国内的材料(当时)是真的很少,这是一个 Facebook 框架,而国内主流框架则是 Vue。我当时不明白为什么学校要交这么一个框架来学习,真难!还不如 Vue 舒服。但是这是我第一次接触 “框架” 确实体验到了用框架开发的香(他确实可以快速开发),和臭(主要前期开发有点麻烦,因为某些概念如生命周期啥的很绕)。
Android 移动应用开发
这门课应该是各位能认识我的契机了。基本上安卓这门课说难不难,说简单也并不简单。原因是国内基本很难搜到 Android 的最新文档,很多文档都是镜像搬运的,历史悠久。而你也不可能去学习一些已经淘汰的东西吧?我当时学的时候老师还让开发 Android 4.1。好在最近看学弟学的是 Android Oreo+。再加上国内对 Google 一直是封锁状态,想要完好无损的下载 SDK,简直就是玄学一般的存在。而我当时 “有幸” 因为疫情被困在国外,从而可以无阻获取到最新 Google Developer 的文档。
数据结构
重中之重!重中之重!重中之重!
这门课是计算机中的核心课程,核心的不能再核心了!为什么,它的下一个进化形态叫做:算法!不知道各位大学生是否有幸被他摧残过。应该都有,反正很重要。至于怎么重要?老师没说是吧?来,我跟你说
我遇到一个案例是这样的:我需要为我的游戏生成地牢,我思考良久都没想出来怎么解决问题。直到看了一个大佬的源码,一目了然!就是一颗二叉树组成的,那二叉树就是数据结构的一种,而这个案例就是数据结构其中一个很直观的案例。
大三
在大三,我们学了 C#,JavaWeb、操作系统、数据库原理、软件测试、以及软件工程理论等。
明显到了这里,我们已经进入了 BOSS 房。先不说两个和编程相关的东西,直接说后四个理论课:
操作系统
这门课,我基本上上的全是网课,好在网课录播的老师是校外的资深老师,讲的课也挺精深。听得懂,实在不行,还有 BiliBili 作为我的后盾。这门课嘛,也蛮重要,等我有时间了把我的学习笔记一起放上来吧。主要说明了一个操作系统对于我们人类工作提供了哪些便利,其中实现了哪些技术、提供了哪些接口、为什么我们的程序可以在系统上运行。其实操作系统就是我们和计算机的一道桥梁,负责接收我们的输入,如何处理成计算机所理解的形式进行运算,最后再返回到各个软件中。
数据库
这个就不用说了吧,我们的日常生活应该都离不开数据库,他是作为我们的信息存储的媒介。这门课主要是学习怎么对数据库进行管理及操作。以及数据库的一些概念。
入门者
省流:可以不用学习路线,需要什么学什么
入门,其实是和初学相辅相成的。真正的入门就是在学习了基础知识之后,这门课就算是入门了。在这里,因为我们已经学习了 C 语言,知道应该怎么写代码,了解了编译器的原理。所以这时候我们需要什么就学什么而不再需要一个确切的学习路线了。
自学
我本来想说自学和大学入门一起写的,但是发现自学这块说实话,大学帮不上什么忙。更多的是靠自己,所以放到这一部分来探讨。
自学的前提,是你已经构建了基础的编程思维。通俗点说:你已经知道你要干嘛,该怎么干,拿这时候才去自学。否则就想办法去培养你的思维模式,再来谈自学。至于自学,就是缺什么补什么。比如,我喜欢研究计算机的原理,所以我去买了以下这款游戏(没有收恰饭钱!)
自学当然还有很多道路,比如:B站、知乎、小红书、甚至购买的各种各样编程相关书籍。。。
精进者
省流:在入门者的基础上,为了了解底层原理,需要系统的去学习整个技术
我觉得这是我现在的阶段,我无法给出正确的一条路,但是我现在就是想要读研。同时也找到了自己感兴趣的点 —— 人工智能与游戏。那么在这个入门的基础上,我们需要了解其底层原理,然后系统性的去学习整个技术。包括它的衍生知识。以我为例:
在人工智能方面,我正在精进的学习:
- 人工智能概述
- 机器学习
- 自然语言处理
而在游戏开发方面,我不仅仅学习了 Unity 以及 Godot 的使用,更学习了:
- 游戏策划
- 游戏构思
- 游戏数值设计
- 心理学
- 图形学 / Shader 编程
一门科系,肯定不是学通了这门科系的所有知识就行了,一定是还需要把周围领域的知识学会,才能发挥最大的经济价值。
后话
学海无边,这个世界每一天都有新的技术诞生。不学只会被这个社会淘汰,做一个普通人。在编程这个领域,不存在哪个编程语言最好、我应该学习哪个语言,这类型的疑问。编程语言、乃至于我们所用的开发环境,他都是一个工具,一把铲子。怎么用不同的工具,去凿出不同的星光大道,那才是你应该关心的事情。
喜欢这篇文章的朋友可以给我进行打赏,您的支持是我创作最大的动力!谢谢。