一个仅供参考的规划

一个仅供参考的规划

为什么写

写这篇规划的初衷是因为在我大一刚开始接触程序开发时,我也有很多困惑,对很多东西没有清楚的认识,也没有人指点,很容易迷茫。从那时一路走过来,也在各种论坛受到了类似文章和优秀的人的影响,我也想做一件可以帮助别人的事。

其实一直在考虑要不要写这篇文章很久,主要原因是因为我个人的知识学习仍在持续,同时我也在考虑自己是否有足够的能力提供有价值的建议,以及是否能够确保我的陈述既严谨又清晰。因此,还是需要花一些时间来构思和陈述这篇文章。

实际上,我在这篇文章中列举的几门技术在计算机科学(Computer Science) 领域来说,微不足道。计算机领域方向庞杂,知识浩如烟海,每个细分领域如果深究下去都可以说学无止境。因此,一个清晰明确的学习规划是非常重要的,如果你顺利了进入软件开发专业,那么目前你在整个计算机的领域中,就已经确定了大方向类就是软件工程

自学这条路走过不少弯路,最终提炼出了下面的内容。我希望通过这篇文章,分享我在过去两年学习程序开发的心得和经验,为海院信息工程学院的新同学,尤其是那些与软件开发相关的同学提供一些帮助,哪怕只是微小的帮助,我也会感到非常开心。

必须要提醒的

大一统一开设的专业课程有Java基础入门、Web设计、Linux、MySQL。在大二就要开始分前端方向后端方向,两个方向的教学内容也是极其不同的,但不论是前端后端,在整个大学生涯中都需要把计算机基础学完。由于我选了后端方向,所以本文的部分课程推荐更适合偏向后端方向的同学。

阅读体验说明

  • 电脑端的同学可根据网页左上角来预览文章的目录手机端的同学可点击右上角搜索图标左边的目录按钮进行查看,点击即可跳转到对应标题的内容。
  • 文中具有蓝色的字样是网页链接,点击即可跳转到对应站点。

本篇属个人心得和经验,具有较强主观性陈述,仅供大致参考,如有疑问和错误,欢迎通过评论或邮件沟通。

心路历程

讲点自己在学校两年间的心路历程

大一:2021.10至2022.06

在高考完之后,专业的录取结果是软件开发专业的,当时一位老师也开了线上班会,带所有软件开发的学生浏览了一遍我校教学计划,编程语言(Programming Language) 用的就是用Java语言,于是就抱起了提前一点学Java的想法了。在Bilibili一搜Java课程一大把,满眼看过去大部分都是机构课程,其实当时觉得机构课程都非常非常棒,尤其像黑马程序员,尚硅谷至今也是目前公开课程最多,质量优秀的两大机构。不过这个结论是我后来才产生的,在起初充斥着各大机构Java课程的搜索结果里,我根本就无法判断结果里内容的质量高低。于是我就开始在百度搜寻各种建议,听哪一家的比较好?大家都推荐黑马程序员,但集数真的很多很多,他们把知识点的讲解细分成很多集,不过好在每集其实并不是很长,于是我就开始看课并且跟着写代码

其实当时Java被很多机构宣传的很多,也进一步劝了很多人进入了Java的坑。重要的是2021年计算机的行情还算可观,我当时的想法就是学好Java这门语言和流行的开发框架就一定可以找个好工作了。

后面看到不及集数的1/3,我就开始听的有点懵的状态了,后面索性又在众多搜索结果了换了一套教程。学到数组差不多就开学了,后面就在学校课堂上课,不过那会自己的进度已经赶在了老师教学进度之前,于是就继续Java基础语法的进度了。

随后,在大一第一学期,当时的任课Java的蒋玉婷老师在课堂上讲了一下蓝桥杯的比赛,后面因为比赛需要训练时间和个人规划的冲突犹豫了一段时间,最终我还是联系了老师成为预选,在2022年的3月春季开学老师确定好了人选,最终也成功的报名了比赛,最最最重要的是学校为每位参赛选手提供了报名费以及蓝桥杯VIP题库的名额。在4月份比赛之前都是在蓝桥杯官网做练习题,其实当时我已经意识到参加算法比赛是要有一定的编程语法基础,数据结构基础,以及基础算法基础的,不过当时没有这些课程的教学,我只有简单的Java语法基础,并且时间有限,我只能报以理解题意的思维去刷题或看题解。

最终水了一个省二等奖的名次,同参加的校友还有一位获得了省一等奖和一位进入了国赛的选手。不过是一次体验,也算是一份小小的荣誉,很大程度上的增加了我对技术学习的信心和热情,也感谢蒋老师。大一除了Java基础语法,同时也学了基础的Web网页设计,包括HTML,JavaScript,CSS,其实我更喜欢前端,因为我可以通过编码设计出自己喜欢的样式,并且也享受其中,Web网页设计的许欢老师也是一位讲课非常棒的老师,受益于她任教的这门课,大一第二学期结课之前完成了最后一个大作业(如图)。

主页部分:

博客部分:

在整个大一有部分是课堂听讲,一部分情况下自学的较多,大一除了Web,Java基础以及MySQL,还有其它比较实用的操作课程,比如Linux。

其实大一第二学期中旬才把Java语法学完,这个进度是有点慢的,是因为当时按照那个课程一直看到进阶的知识,后来才意识到的。其实那部分知识很难,当时也不怎么用的到,进阶的几个技术点都可以单独拎出来学习的,甚至到现在也有点遗忘了。

大二:2022.08至2023.07

在大一时候看过很多建议,大多数人强调了计算机基础的重要性。大一结束完的暑假,我就着手去学习了南京大学-袁春风《计算机系统基础》,这门课讲的更多的是计算机组成,其实看的也是有点囫囵吞枣,但是对计算机运作的原理算是有了一个简单的认识。在暑假期间开始折腾了一个博客,就是现在的博客,虽然花了大量的时间去查阅搭建和使用,但是最终能学到的不止于这些,在今年9月开学我又重新装饰了一下博客,就如你现在看到的样子

大二实行专业分流,软件技术分成前端(front-end)后端(back-end),我选择了后端(其实那时候我对后端的概念比较模糊)

第一学期开始后端框架的教学,其实我在课堂上没有听懂,后面是课下花了时间又去自己学,课堂上听不懂的结果无疑是会占用大量的课下时间,导致课上时间是没有价值的。其余时间学习了中科大-郑烇《计算机网路:自顶向下》。计算机基础是枯燥的,没有编码练习又很难真正的理解知识点,导致了我在大二第二学期二刷这门课程,不过这一遍对计算机网络知识的框架又进一步深入和理解,但是对于这次的不足还是缺少实验的实践对知识进一步理解。网上有实践项目但是前置知识缺少无法继续进行,所以就计划搁置在后面补充完前置知识再继续完成实践项目。

第二学期依旧是框架技术的学习,学习的规划分布也如同第一学期,第二学期也是心情和技术提升波动最大的一学期。第一是:随着互联网寒冬的来临,众多企业开始裁员,我质疑自己是否能坚持这条路,面对未来还没就业就已经先失业的环境我很焦虑。第二是:我是一个倾向于喜欢计划再行事的人,不规划好一些东西,我总是在任何时候会去想着这些事情的顺序,担心忘记。所以第二学期也因为自己没预先充分了解课程前置知识,规划了几门课程的学习目标,导致学的过程很痛苦,过度认为是因为自己足够笨拙。然后和朋友沟通,谈心,了解原因后,于是重新规划自己的路线,最终这些不好的情绪也随之散去,感谢我的朋友们。在第二学期的5月中旬把数据结构学完,后面就在LeetCode刷题了。持续了一个半个月左右,然后临近放假也没再刷了。刷题也很痛苦的,刷到mid的时候,看题解也理解不了代码逻辑的话会极度痛苦。

其实本来计划着在大二第一学期结束前找份实习工作,在工业界中学习比自己去蒙着头学习的效率要高很多,在工业界实习你能真正的了解实际开发过程与环境,快速学习到主流的技术。但是行情不是特别的好,暑假实习的人又很多,再加上学历的原因,所以就暂时放弃了找实习的想法,继续在家学了。

大二结束的假期,也就是这个暑假,又重新学习了计算机组成、操作系统(未完) ,跟的课程是之前比较畏惧的CMU 15-213 CSAPP 深入理解计算机系统,但是没有做Lab以及只听了几张重要的章节,但计划在后面抽时间尝试做。不过在大二的寒假只读了这门课程配套的书籍 《Computer Systems: A Programmer’s Perspective》 简称:CSAPP,中文名:《深入理解计算机系统》 但是配套的Lab做完Lab1就已经到达能力的极限,但还差一点点才完成整个Lab1。

大二一直都在偏向于计算机基础的学习,不过在Spring Boot学完之后自己跟了一个简单的增删改查(CRUD)的项目,虽然项目不是很难,但是跟着做完之后会对Spring Boot开发有一个进一步的理解和实战技能的提升,不过这些还远远不够,增加开发经验需要阅读更多的开源项目和使用Spring Boot做项目,我会在后面的课程推荐里把这门项目课程放出来。

自学很难避免走写弯路和时间的浪费,虽然有时候会轻微偏离正确的方向,但总体来说两年的时间颇有收获,比如技术的掌握,视野增加,信息的搜索和辨别能力。其实除了文章中提到的的技术和知识,还有一部分学习和折腾过程中也学到了很多,单独去学一门技术其实能学到的仅仅是你目标的东西,很多技术大多是都在搜寻问题和解决问题的过程中学习到。

路线

先阅读这里

  1. 课程推荐里的大部分是我看过的,每个技术点只需从中选择一门合适的观看就够了,还可以选择除本文推荐外的课程,比如黑马和尚硅谷的课程,他们的所有技术都有公开课程。

  2. 路线方面有两个大致的路线可以参考,选择路线一的直接完全可以按照黑马和尚硅谷的路线来就行,如果你觉得黑马和尚硅谷路线里自带的课程不适合你,那么你可以在我我的课程推荐目录里选择一门就好。选择路线二的你就按照我给你的建议去看。不过由于有的视频在Bilibili可能会因为未知原因被下架,所以目录里的链接可能会有失效的情况,如有失效,请及时评论进行反馈

PS:关于路线和课程推荐,不做任何绝对的强制推荐,可供大致参考。如果你在某个时间过后意识到之前阅读的这篇文章对你有益或者适合,那么你可以尝试

路线一:仅仅学习主流技术+项目实践

如果你只是想掌握并且又希望学的内容比学校多,可以按照 黑马程序员或者尚硅谷的技术路线学习,在之前提到过,这两大机构的课程质量是优秀的,我也听过这两个机构的部分课程,路线里也有给推荐项目实战教程。

但要说的一点是,路线的技术点是顺序是这样的,但是课程并不用一定听他们的,如果你听不明白学习路线中某一门课,你完全可以换一套教程,比如Java基础你觉得学习路线里自带的课程并不适用于你,你可以寻找一门更适合自己的Java基础课程。但找到一门合适的课你需要不断的听,后面可能又听不懂,然后再换…就这样反复循环,这无疑是浪费时间的。而且大部分机构的课程是非常冗余和多集数的,我在后面的具体技术课程推荐目录里会分享相对不错的课程但不保证一定适合你,有时候开始听不懂的时候,不能忽略的一点是考虑一下是不是自己的问题。不过缺少了计算机基础的支撑,你在面对很多问题可能很棘手,并且你的技术成长可能很快遇到瓶颈不建议只走这条流行技术路线。

路线二:计算机基础+主流技术+项目实战

其实这一路线也就是在上面两大机构路线中并行学习计算机基础知识,这个路线是贯穿整个两个年的时间,在整个大一学校会开设Java基础,Web设计,Mysql,Linux;大二差不多就是Java Web,Spring, Spring Boot以及顺便会讲Maven。在两年的时间里,你可以合理的安排这些技术的学习,包括兼顾学校的开设的课程,其实如果你在课堂上学好,就不用课下再去系统性学习了,忘记的话快速复习一遍就行(我也有忘记并且二刷课程的时候)。

因为学校的教学顺序也大概和一些培训机构的顺序是一样的,所以大可按照每学期学校开设的课程提前学习这些课程,剩下空闲的时间可以用来学习计算机基础。

我的建议是

  1. C语言的基础学完,可以听浙江大学-C语言入门与进阶 翁恺,后面就可以学习《数据结构与算法》,Java可以在其他空闲时间并行学习,这样既能保证跟进学校课程进度,也能同时掌握C语言和数据结构的知识,一切的时间安排和效率都取决于你自己,我强调的是学习《数据结构与算法基础》这门课的前置知识你需要学习C语言的基础语法

  2. 整个大一结束,你会学完大一开设的课程,大一暑假你可以开始《计算机组成原理》的课程

  3. 如果你是后端,大二一整年你会学习各种基于框架的开发技术。你尽量在大二第一学期完成《操作系统》的学习,大二寒假或者大二第二学期的空闲时间完成《计算机网络》的学习。如果时间安排受限,那么你可以选择在大二结束的暑假完成《计算机网路》,在大三开学前,一定要完成计算机基础四门课的学习。

计算机基础部分的整体顺序:数据结构与算法基础 → 计算机组成原理 → 操作系统 → 计算机网络

课程推荐

推荐分为计算机基础部分和主流技术部分

计算机基础部分

听计算机基础之前可以尝试听下这门课2023哈佛大学CS50,这门课UP主到2023年9月5日为止还在持续翻译中,后续应该会翻译完。这门课需适合初学者,但是可能需要有一定的编程经验

“CS50” 是哈佛大学的一门计算机科学入门课程,这门课程旨在帮助学生建立计算机科学和编程的基础知识。

内容包括:C语言编程、数据结构、算法设计与分析、计算机科学的基本概念、数据库、Web编程、安全性、软件工程。

计算机组成原理

  1. 南京大学-袁春风《计算机系统基础》

    此课分为五个大部分,听完这一部分即可,具体点击这里查看课程列表。

操作系统

  1. 哈工大-李治军《操作系统》

数据结构

  1. 青岛大学-王卓《数据结构与算法基础》

    讲的非常非常细心,通俗易懂,老师很友善。学数据结构与算法的前提是C语言基础入门,因为你需要看懂老师PPT上的代码示例。

计算机网络

  1. 中科大-郑烇《计算机网路:自顶向下》

    也是一位非常出色的老师。因为是课堂录播嘛,我记得印象最深的是有一节课可能没有录播,同时也是最重要的一节课,但是!老师亲自对着空教室又录了一遍这节课,然后课中也不停的强调本节课重要的知识点。

主流技术部分

Java基础语法

语法基础一定要学牢固。

  1. 马士兵教育-2021版java就业班全套视频讲解

    这门课是我自己当初看的,他也包括了框架开发技术,还有工具的技术,所以只需要关注P1-P171是基础入门,P172-P351是进阶,这个进阶部分也是前面提到的导致我学语法进度比较慢的原因,进阶部分可根据自己能力和时间多少来选择听取,不过最终也是要补这部分知识的,这部分进阶技术不受限于编程语言,也就是说任何想成为一名合格的Coder都需要学习并掌握这部分技术,只是实现这些技术的编程语言可以是任何

  2. 楠哥2021最新Java零基础实战全套教程,从入门到精通

    这位讲师我在大一结束的暑假里学JavaWeb发现的,我大致看了一下这门课程只有60h+的时长,我听过这位讲师的其他两门课程都觉得非常清晰容易理解。

数据库

  1. MySQL数据库入门到精通

JavaWeb

这个一定跟着课程操作一遍,不管哪个课程要跟一遍!这门课程就是很早之前用通过各种技术以及Java构建Web应用的操作,搞懂Servlet,JDBC,还有整个JavaWeb程序的大概运行逻辑和顺序。

  1. Java Web从入门到实战

    Java web 是指由Java语言开发出来可以在万维网上访问浏览的程序。

    Web通过一系列的通信实现与Java的交互,Java是你的后台,进行逻辑处理,中间层进行数据的交互,Web显示给用户来看。就好像你买东西付款,钱是你能看到的–钱:Web,收钱和找零通过手来执行–手:中间层的作用,大脑来算出应该找零多少–大脑:Java后台。

    这门是在大一结束暑假提前预习JavaWeb找到的,讲的比较清晰,是我目前见到的比较小众和干净的Java Web课程了。

Spring Mvc以及Spring

先学Sring MVC,再学Sping。关于Spring和Java EE的区别,可参考这篇文章,如有不懂,可自行搜索查阅更多相关资料。

  1. 2022年厦门大学JavaEE平台技术课程

    这门是在去年10月多份Bilibili首页刷到的课程,当时试听了一下感觉讲的非常清晰透彻,包括Java EE、Spring以及Spring Boot技术的历史发展。不过我听了前几节课发现比较偏向于技术的概念的讲解,没有太多上手的实际操作。可以通过这门课快速了解基于Spring框架开发的流行技术,实操之前看可以当做了解,实操之后可以再次用作于知识的巩固,毕竟课时不长。

  2. 动力节点SpringMVC框架实战教程

    在计算机科学中,MVC是一种软件设计模式,这种模式将应用代码组织成三个相互交织的部分——模型、视图和控制器。

    模型是与数据库交互的逻辑;视图是用户接口和交互,控制器是是视图和数据库之间的中介。

    大多数情况下,视图不直接和模型交互——这个功能由控制器执行。

  3. 跟老杜从零学spring入门到高级

Spring Boot

Spring Boot基本上是Spring框架的扩展,它消除了设置Spring应用程序所需的XML配置,为更快,更高效的开发生态系统铺平了道路。更多内容请参考这里

  1. 黑马程序员SpringBoot2全套视频教程

  2. 黑马程序员SSM框架教程

    SSM是:Spring/Spring Boot + SpringMVC + Mybatis/Mybatis Plus 三项技术,每一个技术的英文首字母组合简称SSM。

    推荐直接看这门,因为时长短,以上那些课程的内容都是针对每一项技术的细致讲解。这套SSM教程是直接对三大技术整合的教程,也包括各个技术知识点的讲解,只不过没有单独技术讲解的细致。

中间件及工具

  1. 4小时Redis极简入门

  2. 黑马程序员Maven全套教程

  3. 一小时Git教程

  4. 黑马程序员最新MybatisPlus全套视频教程

  5. MyBatis零基础入门教程

    MyBatisPlus是MyBatis的加强版本,初学时掌握MyBatis即可,但后续有时间可以再学一下MyBatisPlus,技多不压身,根据需求选择用MyBatis还是Plus。

项目实战

  1. 黑马程序员Java项目实战《瑞吉外卖》

    这门大多数人都在推荐,而且很多做过这个项目的人已经把它改个项目名写在了简历上。

  2. 2023全网最简单但实用的SpringBoot+Vue前后端分离项目实战(第一季)

    非常非常推荐这门实战课,简单易懂,但是前置知识是要学完之前的框架以及部分工具的技术。这门课程目前有两季,第二季你们自行去UP主的主页里寻找。在大二的第二学期中旬左右,我跟了这个项目,跟完之后我对Spring Boot的开发又有了更深的理解,包括整个后端开发流程以及前后端对接的过程

  3. 若依

    建议先做完2项目之后再来看这个,这个项目是一个优秀的开源项目,大家选择前后端分离的版本即可。官方文档其实我也很难看懂,不过大家可以看一个博主讲的视频:若依前后端分离版,通俗易懂,快速上手,这个视频讲的仅仅只是一部分,更深的技术探寻还需要在你掌握更多知识或者有能力的时候再去研究项目源码。

写在最后

  • 关于信息检索

    搜索引擎百度和Bing可以相互补用!从数据库来说,百度比Bing收录的中文内容要多,如果你碰到的时中文相关的问题而且确实找不到相关内容,那么就用百度,搜索引擎是工具,能用好用才是王道。知乎专栏、简书、博客园、 CSDN 中有大量中文笔记,这些都是别人嚼烂了的东西,基本是别人踩坑的经验。

  • 关于英语

    英语一定好好学,然而我也在更好的去掌握它。更值得强调的是英语是一门语言也是工具,请不要把它当做一门学科来学。计算机科学发展这么多年,它的起点就是英语,任何前沿的知识以及新技术的发布都是以英文作为官方语言的,包括很多技术和工具的官方文档都是英文,虽然部分有中文的版本,但是有时候并不一定是原汁原味。当你遇到一门非常优秀的大学公开课时,只有英语字幕,没有中文字幕的时候,你会感到非常非常的无助,因为语言障碍而没有能力去欣赏这门课程,在我看来更多的是遗憾吧,所以会更加的意识到掌握英语的必要性。

  • 关于俱乐部和比赛

    除非你非常感兴趣的运动俱乐部,以及兴趣俱乐部是有价值的,其余多半是对专业没有太多用处的,而且会耽误大量的时间,我整个学生期间没有参加任何一个部门,不过这也意味着你要几乎抛弃了社交。也许你进去只会有干不完的活和开不完的会?

    专业相关比赛可以参加,例如前面提到的蓝桥杯开发技能大赛等等,具体的可以询问相关任课老师

    非常重要的一点:参加这些前提是要衡量一下俱乐部和你专业学习的时间.

  • 书籍推荐

    • 《操作系统导论 》

      英文名:《Operating Systems: Three Easy Pieces》

      这本书深入浅出,很多概念讲的非常通俗易懂,并且有很好的例子去帮助你理解一些抽象的概念

    • 《计算机网络:自顶向下方法》

      英文名:《Computer Networking: A Top-Down Approach》

      从应用层协议开始沿协议栈向下逐层讲解,从实现、应用的角度明白各层的意义,进而理解计算机网络的工作原理和机制

    • 《深入理解计算机系统》

      英文名:《Computer Systems: A Programmer’s Perspective》

      卡耐基梅隆大学CMU-15213的配套书籍,里面内容众多,更是一本计算机组成和操作系统的结合体,涉及的广泛但是并不是很深入

因为某些原因,其实部分计算机基础部分我并没有及时在正确的时间段安排学习,但好在大二结束时,基础课程都基本的完成了。只是现在发现这样安排是最妥当的,所以在上面给了我认为比较合理的顺序。

更好的学习计算机基础以及那些主流技术,前提一定是有一定的兴趣,兴趣是学习任何的自驱力,如果没有对这门学科根本没有兴趣,那么学起来是非常痛苦的,请更可能的对你感兴趣的技术保持好奇心,并且探索。计算机世界里真的真的有很多好玩的东西,很酷的东西。之前在朋友推荐下读过一篇题为《拥抱苦差事》的文章中里引用的一句话:“如果某个魔术所需的时间、金钱或练习的次数,比你(或任何一个普通人)所愿意付出的更多,那你就会被骗到”。如果你愿意拥抱苦差事,你就可以完成不可能完成的任务,但愿我们在拥抱苦差事之后也可以被更多一点的幸运所眷顾,让我们去展示这些“魔法”。

技术不断的更新迭代,学习也会持续不断,我们会以终身学习者的身份继续学习。我在后面也计划暂时放下技术的学习去备考升本,本身寒冷的环境中没有学历很难再有展示机会的舞台

直到现在我也经常会感到焦虑、偶尔的迷茫,然而我深知这些情绪总是无法避免的,我清楚自己的这种状态不会持续很久,也会积极的通过一些精神食粮来缓解这种情绪。所以还是希望大家在专注一件事情的时候,也别忘了探索让自己为之振奋的事情,它或许会在未来的某一刻慰藉你的心灵。

引用一句《死亡诗社》的台词 :

“医学、法律、商业、工程,这些都是崇高的追求,是维持生命所必需的。但诗、美、浪漫、爱,这些才是我们活着的意义。”

长路慢慢,希望大家保持身心健康,祝学习顺利,一起加油!

由于访问不稳定因素点击此处Notion备用页面

Poluk

2023年9月6日写于沁园

作者

Poluk

发布于

2023-09-03

更新于

2023-10-04

许可协议

评论