出成绩了!
二哥编程知识星球 (戳链接加入)正式上线了,来和 280 多名 小伙伴一起打怪升级吧!这是一个 Java 学习指南 + 编程实战的私密圈子,你可以向二哥提问、帮你制定学习计划、跟着二哥一起做实战项目,冲冲冲。
Java程序员进阶之路网址:https://tobebetterjavaer.com
大家好,我是二哥呀!
各地的高考分数应该都出来辣,河南的理科一本 509 分,文科一本 527 分。
我以为这分够水的了(一本和我那年高考的三本分数线差不多),结果,一看陕西的一本分数线——449,瞬间崩溃了,理科一本线相差整整 60 分。河南娃是真的命苦。
要知道河南只有一所 211——郑州大学,这种教育资源的不公平,你上哪说理去。只能这样安慰老乡们了,虽然高考决定了大多数考生的命运,但好在人生很长,并不会因为一次高考就真的完全决定了命运。
(我就是这样安慰自己的)
随着高考成绩的出炉,星球的 VIP 群里也是聊的热火朝天,作为过来人,大家都在弟弟妹妹的面前扮演着重要的角色,毕竟学校的选择/专业的选择/会决定你接下来的人生该往哪里走,走成什么样子!
我当年读大学的时候根本就不知道计算机专业还可以分这么细:计科、人工智能、软工、大数据、物联网、网络工程、前端等等!
高考完填报志愿的时候,第一志愿填的机械自动化,然而没有录取上,就调剂到了计算机网络专业了,糊里糊涂地就上了!
谁能想到,计算机专业这么香!本来是作为学校的垃圾专业,结果完全吊打其他专业。
别的专业我不太了解,这里就姑且谈一谈计算机专业。首先,不要关什么卷不卷的问题,各行各业随着大学生数量的增加,哪能不卷呢?
计算机卷,是因为它热门!为什么热门,是因为它工资高!没别的,大家都是冲着高薪来的,就像我前段时间给大家聊过的一个读者,也是我老乡,字节 SSP,50 万的年包,普通人去任何专业,都很难拿到这个数。
即便是有些小伙伴因为学历的原因,学习能力的原因,去了外包,也可以把整个家庭支撑起来。
我这里就不劝大家盲目选择计算机专业了,就只谈谈计算机专业给我带来了什么,我对计算机专业有什么认识,大家作为参考。
我的读者群体里还有一些家长级别的,也有一些初中生级别的,这篇文章应该能满足各个群体的需求,后续每年我也会在这个基础上进行版本迭代,方便大家参考。
作为一个普普通通的大学生,我就是靠计算机专业改变的命运!下面这张图是我老家的样子,老读者应该很有印象,老家不能说是穷乡僻壤,因为天很蓝,空气是真的润肺。
接下来我来说说,计科,人工智能,软工,大数据,物联网,网络工程,前端,到底该怎么选?
1)想考研、考博
本科建议选计科,研究生以上阶段选人工智能、大数据
2)大专、本科
建议选计科、软工;选软工建议毕业后直接参加工作,选计科的话,可以考研,也可以工作,灵活。
前端,很多女生或者不想卷的小伙伴觉得前端是个不错的方向,那确实这些年,前端发生了很大的变化,在软件开发中扮演的角色也越来越重要,界面做得不好看,用户基本上都懒得用。
JSP 的年代,都是Java 后端的小伙伴直接把前端的活也给干了。现在都讲究前后端分离,并且前端也要工程化,所以前端这个岗位也越来越受到重视了。
网络工程,听起来还算是蛮高端大气上档次的,大家可以去百度百科或者维基百科看一下这个专业的解释。我的理解是网络工程是将计算机以及其他设备串联完成网络通信,以及智能化监控的学科。主要的分支有:路由交换、网络安全、无线网络等等。
物联网,也简称为 IoT,是近些年比较火的一个概念,是指将日常的物理对象连接到互联网的过程——从医疗设备,到可穿戴设备,小到智慧家居,大到智慧城市。相对来说,物联网还有很大的发展空间,比如智慧交通,再比如智慧农业,具体点的例子就是通过湿度传感器来自动触发灌溉等。
大数据,也就是 Big Data,我了解到的适用于大数据的技术有:分布式文件系统、分布式数据库、云计算平台、可扩展的存储系统等。奥巴马曾说“大数据”是未来的石油,可见其重要性。大数据专业是典型的交叉学科,不仅涉及到计算机,还会涉及到数学和统计学,不仅对学校的学科实力有要求,对个人的硬性基本功也是有要求的。
人工智能,研究使计算机来模拟人的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科,研究生以上学历会更有优势。
软件工程专业是以计算机科学为基础的,更加强调软件开发的工程性,包括软件需求分析、软件设计、软件测试、软件维护和软件项目管理等。
计算机科学,也就是计科(Computer Science,简称 CS),不仅会研究计算机的硬件,也会研究计算机的软件,更具体的主题包括编程语言、程序设计等。
计算机科学这一学术领域可以分为:计算机理论、信息和编码理论、算法和数据结构、形式化方法、编程语言等。
偏实践的领域:计算机体系结构(或者叫计算机组成原理)、操作系统、计算机网络、安全性和密码学、人工智能、计算机图形学、人机交互、嵌入式系统和软件工程。
也就是说,软工是计科的一个应用方向而已。
再换句话说,可以无脑选计科!计科学得好,软工、大数据、物联网、网络工程、人工智能都是可以驾驭的。
最近选学科这个话题在知乎很火,有很多相关话题了。看这个话题的要么是高考完选专业、选学校,要么是大一面临专业分流。
讲良心话,不要对大学的教育有太高的期待,除非你上的是超一流的名校,遇到的是超一流的老师,多数时候,学习计算机还是要靠自学。
我是科班出身,但你要问我大学到底学到了什么,我真有点不好意思,因为我大学学得一塌糊涂。之所以没有被辞退,或者挣到了一些钱,买了房、结了婚、买了车,靠的都是自学。
有一说一,一开始,对于计算机,我也是学不进去,觉得自己就不是学计算机的料,但我始终没有放弃,从来没想着转行。
学 Java,我一开始也是学的皮毛,也在 Swing 上花费了很多力气,觉得利用 Swing 做个计算器好像挺不错的。但后来我知道,Java 的核心和 Swing 没一丁点关系,重要的是 Java 语法、Java 集合框架、Java 网络编程、Java 并发编程和 Java 虚拟机。
再比如说,我一开始也没有刷过 LeetCode 的,我那时候参加工作早,不刷 LeetCode 确实是可以找到工作的,但现在不同了。数据结构与算法是学习编程的基础,所以大家应该看到了,很多人都在刷 LeetCode。
还有,我看哈佛大学的 CS50,看计算机科学速成课,看清华大学的数据结构视频课,看翁凯教授的 C 语言程序设计,我一直吸收营养,更关键的是,我一直在输出,这让我的营养消化得很良好。
我虽然没有读过研究生,但仍然有很多研究生的朋友和读者,他们来找我问问题的时候,我也能够从容应对。
十多年的编程经验,让我对科班学习计算机有了新的认识。
如果你要学习物理,我推荐你顺着物理的发展史学习,先学习牛顿的经典物理,再学习热力学、电磁学,然后学习相对论、量子力学这些彻底推翻经典物理的,最后学习电动力学这种硬核的。
整个学习过程,是自底向上的。学计科也要这样吗?
先学习电路,然后学习冯诺依曼结构,造一台计算机?接着再学习如何用汇编写个 mini os?接着学习如何写一个简易版的编译器?最后再学习高级编程语言,比如说 Java、Python、C++?
显然这样是行不通的!计算机科学的学习最好是自顶向下。
什么是顶?在我看来,就是一门高级的编程语言,比如说 Java、C++ 或者 Python。我个人从事 Java 后端开发的时间比较久,所以还是拿老本行来说。
当你学习到 Java 并发编程中的“原子性”、“同步”、“异步”、“进程”、“内存分配”这些概念的时候,你自然而然会产生很多疑问,然后就会去学习操作系统,学习计算机组成原理,然后你的一系列问题就会逐渐被解决。
当你在学习 Java 的时候遇到性能问题时,你就会去研究,啊,原来 Java 是一门解释型的编程语言,而 C 语言是一门编译型的编程语言,所以 Unix/Linux 这种操作系统要用 C 语言来实现,因为要最大限度的压榨硬件的瓶颈。
当然了,Java 为了提升自身的性能也是费尽心思,比如说即时编译(JIT,Just-In-Time)通过在运行时将字节码编译为本机机器代码来提高性能;比如说垃圾回收机制的升级,从 GC 到 ZGC,GC 的痛点在于垃圾回收期间,所有的线程都会停止活动,等待 STW(Stop The World)的结束,而 ZGC 在标记、转移和重定位阶段几乎都是并发的,大大缩短了停顿的时间。
当你用 Java 实现某个业务需求时,发现人家的算法实现比你快得多,你自然会好奇,为什么会这样?然后你发现人家用的数据结构和你的不同,接着你就会去学习数据结构,再了解一些高效的算法,比如动态规划等。
你看,从学 Java 的语法开始,你一步步学到了操作系统、计算机组成原理、数据结构与算法。
跟着需求去学习,才能真正学好计算机科学。
我也会给你推荐《CSAPP》这本黑皮书,毕竟永远的神,但如果你没有编程基础就去啃,你可能很快就会被劝退的;反而,一开始,你读一读我写的《教妹学Java》,或者去 B 站上看尚硅谷或者动力节点这些培训机构的 Java 视频课,没准你会越学越觉得有信心——这么简单的东西,我这么聪明,还能学不会?你会有这种自信的错觉的!
反而一开始去啃 CSAPP,你会感觉,老天!我特么是个废材啊,我学的什么鬼玩意,这竟然看不懂,学不会?
想成为优秀的计算机工程师,从大学开始,需要做哪些准备?我想这应该是很多小伙伴关心的问题,这里也顺带谈一谈。
先上总结:
大一,尽快学完一门编程语言,比如说 C 语言或者 Java 语言,有主动去刷 LeetCode 或者 OJ 的意愿; 如果有可能,参加一些竞赛,比如说 ACM、蓝桥杯等; 大学只要不挂科就行了,把重心放在专业知识上。 注重抽象能力的培养,注重编程思维的提高。 如果有可能,早点去实习,不要贪恋学校的安逸。
接下来,我来说说,你最值得去花时间学习一些课程:
编程语言:C 语言或者 Java 语言 数据结构与算法 操作系统 计算机网络 计算机组成原理 英语也不要落下
害,后悔呀,当年我上大学的时候就没有人给我指点指点,如果当时学了这些,现在估计能飞的更高。
一、编程语言
先说 Java 吧。
可以先看看我的《Java 程序员进阶之路》,里面涵盖了 Java 所有的知识点,包括 Java 语法、Java 集合框架、Java IO、Java 并发编程和 Java 虚拟机、Java 企业级开发所需要的知识,比如说 Git、Spring Boot,以及 MySql、Redis 等等。
然后到 B 站上看看尚硅谷或者动力节点的视频课。
再说说 C 语言吧。
C 语言是一门古老而常青的编程语言,具备现代程序设计的基础要求,它的语法是很多编程语言的基础,比如说 Java。给你推荐一门课,浙江大学翁恺教授的《程序设计入门——C语言》,国家级精品课,很适合初学者。
二、数据结构与算法
计算机科学所赋予人们的最大能量在于对常见算法和数据结构的熟悉。此外,这也可以训练一个人对于各种问题的解决能力,有助于其他领域的学习。
推荐你到 LeetCode 上刷题,Leetcode 上的问题往往有趣且带有良好的解法和讨论。此外,在竞争日益激烈的软件行业,这些问题可以帮助你评估自己应对技术面试中常见问题的能力。我建议你至少刷 100 道题,作为学习的一部分。
说一下我的刷题心得:从易到难,一遍一遍地刷,尽量使用自己熟悉的编程语言,比如说 Java 程序员尽量用 Java 来解题,这样刷题的幸福感也会提升很大一截。
如果不是天赋异禀,不要怕,一开始就是抄题,先把别人的解题思路照着敲出来。刷的题多了,尽量控制一下刷题的时间,掐个点,不能让自己一直想、一直写下去,如果半个小时没有解出来,就果断放弃,去背别人的答案,不要觉得不好意思,等到真的熟了,再去想自己的解题思路。
可以按照下面这个类型来刷就可以了。
数组-> 链表-> 哈希表->字符串->栈->队列->树->回溯->贪心->动态规划->图
三、操作系统
操作系统是计算机系统中负责管理各种软硬件资源的核心系统软件,为应用软件运行提供良好的环境。清华大学操作系统课-学堂在线这门课程以主流操作系统为实例,以教学操作系统 ucore 为实验环境,讲授操作系统的概念、基本原理和实现技术,是一门非常值得推荐的视频课。
书籍的话,推荐《操作系统概念》 (“龙书”)和 《现代操作系统》 ,是操作系统领域的经典书籍。学完操作系统,你要能回答这些问题:
进程与线程简单介绍,区别,以及进程间通信方式,线程同步方式 用户态和内核态 内存管理:分页分段,虚拟内存,空闲地址管理方法 死锁:死锁的必要条件,死锁的检测与恢复,死锁的预防,死锁的避免 数据库系统
四、计算机网络
B 站上的这个计算机网络微课堂视频课非常不错,强烈推荐。
学完计算机网络,你要能回答以下这些问题:
七层结构,简单介绍一下每一层。 输入 URL 后,将发生什么?这个问题会涉及到很大一部分的计算机网络基础。 HTTP 和 HTTPS,DNS 解析 TCP、UDP、拥塞控制、三次握手、四次挥手、滑动窗口 IP 和 ARP 协议
五、计算机组成原理
九阳真经是金庸小说《倚天屠龙记》中一本绝顶内功秘笈,程序员的「九阳真经」,我觉得就是计算机组成原理了,因为这里藏着 CPU 运行代码的秘密,藏着虚拟地址转换的秘密,藏着浮点数的秘密……
弄明白了计算机的组成原理,也就对整个软件开发有了一个系统的认知,不论是计算机的硬件原理,还是软件架构,都能很好的驾驭,随之而来的,我们的职业发展机会也就更多了。如果想深入学习计算机组成原理的话,我推荐哈工大的这门视频课,整体评价非常高。
多说一句,对于我们程序员来说,英语就好像空气一样重要,一呼一吸之间都离不开她。如果空气质量不那么好的话,你是不是就有点缺氧的感觉,同样的,如果英语功底差点意思的话,编程也会感到很吃力。
英语用得好,你可以轻松地阅读和查看国外最新的技术文档。 英语用得好,你可以徜徉在源码的海洋里,肆无忌惮地汲取精华。 英语用得好,你可以惬意地聆听斯坦福等名校在网上的公开课,跟随真正的大牛,学到最原汁原味的技术。 英语用得好,退一万步讲,你在敲代码的时候再也不用担心方法、变量和类的命名不够优雅了。
所以大学阶段,有机会的话,可以尝试多看一下英文的学习网站,一开始可能会很难,但是坚持下来,你就会感觉很值。
---------手动分割线---------
说实话,把上面这些课学好了,国内的互联网大厂基本上可以随便挑了。
不过,话又说回来,即便是你只学到 3-5 成,找一份自己心仪的工作还是不难的!
另外,针对专业、城市、学校,说一点我的看法:
首先,一定要选一个好的专业。
什么是好的专业?当前首选计算机专业,yyds!卷是因为热门,如果你不把握住机会非要去挑战冷门专业,我就不提哪些专业了,后果是很惨的。
其次,尽量去大城市。
什么是大城市,就不用我再赘述了。
我妹去年高考完,我父母给的建议竟然是要不报考三门峡的一所大学吧,能上的概率会大一些。
我当即就否决了,这不是害她嘛!
我妹最终在洛阳上了大学,她的感受就是,哥,我以后再也不想回三门峡了,至少要在洛阳。
别呀,即便是不去北京上海,去杭州、成都、武汉,哪怕苏州郑州也行啊。
大城市带来的不只是机会,更多的是格局。这就是为什么,民国时的精英们都要出国留学。
最后,选个声望值比较高的学校。
推荐你看看这个比赛的高校总榜,选计算机专业的心里就有数了。
https://gplt.patest.cn/rank/school
可能大部分普通人去不了 985、211,我这里仍然有一些建议。
人生说长不长,说短也不短。
没必要比一时的高低,在你的大学生活里,在你未来的职场生涯里,你仍然有机会完成超越和逆袭。
我就不举别的例子了,也不是非要拿我自己来说事,而是我的确是很好的一个参照物,因为我的学历很一般,更没有大厂背景,我之所以还能在如此卷的行业里取得一些成绩,靠的是什么?
我想,我的经验和心得,我的人生规划,更适合普通人作为参考,因为我都能做到,你凭什么不能!
首先,努力是肯定的。
任何时候,一个没有背景的人,你想要取得一点成绩,努力是必选项。你不一定非要超过别人,但至少要能保证,不能落后,差距不能被越拉越大。
其次,你要学会改变。
别人好的地方你要去学习,哪怕是模仿;眼睛里要有光,要能善于发现别人身上的长处和优点。
隔一段时间,你就要脱一层皮,退掉身上那些落伍的东西。
最后,你需要坚持。
一件事,你没做,就是 0,做了就是 1;做了又放弃了,从 1 变成 0;坚持做,你才可能从 1 到 2,从 2 到 4,从 4 到 8,从 8 到 16。
互联网上,到处都是学习资源,然而精华与糟粕并存。你所需要的:
你应当学习哪些科目,为什么? 对于这些科目,最好的书籍或者视频课程是什么?
我把这两个问题都给解决了!大致按照列出的顺序,借助我所建议的教材或者视频课程(最好二者兼用),可以先花 100到200 个小时学习完其中一个科目,然后记着,你的整个职业生涯里,一定要不时地温习 。
计算机专业可能是一个最不会说谎的专业,你选对了,你付出了,还是能从“卷”中走出来了的。高考改变命运,但你的人生本不应该只被一次成绩决定。
没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟。
推荐阅读: