2
头图


0x00

前段时间高考不是刚落下帷幕嘛。每年高考一结束,怎么选专业,怎么填志愿就成了热门话题。

去年帮老家那边两个亲戚家小孩参考过志愿,今年也接到了老家几个叔婶的电话。家长比小孩还急呀,也各种打听,各种调研的。

去年是一个去了计算机,一个去了师范。今年估计家那边两个小孩应该也会填计算机(或相关)吧,学的理科。

当然这不是说我推荐他们填计算机。我个人始终觉得兴趣很重要,但是一问有没有兴趣专业,都说没啥明确目标,希望填个热门好就业的。况且现在互联网这么发达,小孩们自己一查,也知道这几年计算机火,然后也详细调研一些有关计算机的情况。孩子们关心的就是好不好学,家长关心的就是好不好就业。

但是我会建议说冲一冲、稳一稳、保一保。能冲进计算机相关专业当然没问题,但如果投档进不了,那通信/电子也不是不可以,保底嘛。


0x01

我至今依然觉得工科类专业是对我们这些普通家庭出身的理科生比较友好的选择吧。没有什么太高壁垒,你有技术就有机会,学完最起码有点实用的技术傍身。

只要你有兴趣学,选这个一般没啥问题。当然这个兴趣不是说要特别特别地强,有时候不讨厌也是一种兴趣。

尤其是计算机相关专业,这几年的确是工科界的顶流。

首先大家都知道工资高。稍微好一点学校出来的应届毕业生,在北上广深一毕业年薪拿几十个基本都没啥问题。所以学计算机出来一定是可以满足我们安身立命,反哺家庭,以及对未来美好生活向往的目标。我盘点了一下自己熟悉的同学也是,通信/电子/计算机这一块的,发展得也都还可以。因此选计算机专业确实也比较迎合市场。

另外一个,个人感觉计算机的学习门槛好像不算高吧。一般来说理科出身,具备点逻辑思维,一般都能学得不差。况且计算机的各种学习资源不要太多,开源世界也很丰富,网上都能找到,没有什么明显的学习壁垒,有一台电脑就能学。而且付出与回报成正比,也不拼其他的,就纯靠技术了。

所以可能也正因为这些方方面面的原因吧,现在报计算机的人实在太多了,那叫一个火。除了高考志愿填计算机的,还有转专业到计算机的,考研跨考计算机的,工作后转行从事计算机的,甚至包括培训班培训计算机的...所以我也会跟他们说压力和竞争是不小的,要有心理准备。


0x02

聊到卷的问题,从两个最常见的点就能看出来,一是考研,另外一个就是找工作的面试难度,我想很多小伙伴可能有亲历体会。

现在考研不仅是计算机,但凡热门一点的工科专业压力都大。我们那时候考研多少分?300出头就有学上。现在看看呢,好点学校的计算机相关专业400分神仙打架的多的很,报的人多,大神也多。

而聊到求职面试。以前背一背八股文,然后刷刷题,找个还行的工作没啥问题。什么叫八股文呢?就可以背的,比如像什么OOP特性、接口和抽象类的区别、hashmap原理、List和Set区别、Java运行时内存区、Get和Post请求、三次握手四次挥手、OS页面置换算法...等等,大家可能也背过。

然后刷题,我们那时候剑指Offer上四五十个题目刷完基本就可以保个底,LeetCode我记得好像也没有现在这么多题目吧。

但是站在当下的时间再看一看面试都问啥。

问底层,深入到骨髓。像什么JVM底层原理、JVM调优实践、JDK源码、JUC并发包、锁的实现原理、数据库底层原理、索引优化、SQL调优、Spring源码、各种框架的机制,然后还有像什么集群、分布式锁、缓存一致性...等等一些问题也是被高频地问起。

然后就是问项目。要么就是往底层挖,最后也是底层原理,像上面一样,要么就是往架构层面上升,比如架构设计、框架选型、链路设计、架构扩展...等等。

除了这些还有手撕算法题。现在求职LeetCode没个几百道题量,怕是连笔试都很难找到感觉吧,面过的小伙伴一定有所感受。

所以现在自学,包括面试准备的时候,真的不是说背一背八股文,会用个Spring Boot,Spring Cloud就可以的。比较值钱的两个方面刚也聊过:

要么就底层原理:操作系统底层、JVM底层、框架底层、算法原理、源码的理解和掌握...
要么就架构思维:架构设计的能力、框架选型和对比、链路的设计和把握、架构的扩容和扩展...
而这些一般是需要理解并实践的。

况且个人明显感觉身边的应届生计算机素养普遍很高。不管是是面试的时候,还是工作后观察身边的一些新人。除了本身计算机方面思维很好,学东西贼快之外,而且还特别年轻,精力也旺盛,难顶哦。

所以基于这些,我也会跟家那面填志愿的小孩说,随大流无脑梭哈计算机也不行。想报可以,首先要有心理准备,能Hold得住压力,其次就是对这个东西要有点兴趣(最起码不讨厌吧),最后还得有很强的自学能力和习惯,不然就算进去也很痛苦的。


0x03

然后一个问题就是关于编程难不难的话题?这是老家那边几个同学最近在调研专业的时候所共有的问题。

编程难吗?其实这个问题真不知道怎么回答。

个人感觉计算机的学习门槛应该不算高吧。都是学理科的,具备一点逻辑思维一般都还行吧。当然这里不是说那种学到极致的天才型选手,我们指的是学个一般,做个普通开发的角度来聊的。

就以最常见的编程工作为例吧。它对人的思维能力是有点要求的,其实简单一点理解,差不多就是分析问题,然后抽象出要素,最后建立模型的思维过程。如果觉得编程难,或者说代码无从下手,那大概率可能还是没有形成这种思考方式吧。说明首先基础可能有待加强,另外则是可能锻炼得还不够多,没有突破那个阈值。

尤其参加工作后,做的那些系统和各种业务。其实讲白了就是把一个个实际需求抽象建模,用合适的数据结构和算法流程把它表示出来,然后辅助于一些框架或者工具,用编程语言把它描述出来,然后经过一系列处理,最后交由计算机执行。

先把功能实现,流程跑通,然后再考虑怎么才能做得更快,怎么才能并发更高,怎么才能更加安全。我们可以回想一下,项目里那些复杂的系统往往不都是这么演变过来的嘛。

所以很多刚入职的小伙伴所头疼的一个问题就是说刚入职团队,刚接触实际项目,项目太大了,一时半会搞不懂吃不透。

为啥呢?因为这里面很多的演进和迭代过程,你并没有看到。其实一开始系统没那么复杂的,只不过后面迭代了好多个版本,改了很多东西,又加了很多东西。这时候如果没有比较靠谱的迭代记录,文档,或者注释,的确是很难看懂,太正常不过了。所以这时候只能靠自己多问,多想,多悟,上下文/前后段,由整体到局部,由局部再到整理,就这么来回反复摩擦,慢慢就吃透了。

所以有时候想一想,好像事情也没那么复杂。但是你又想过没,为什么现在的互联网开发世界那么繁荣呢?尤其之前我们在梳理像大数据、后端开发那些知识点和学习路线时,涉及到的各种技术点和框架实在太多了。

其实细想一下,它们很多时候都是在做辅助用的。它们的出现很多时候都是为了应对企业级应用开发的所面临的的诸如复杂性、代码质量、可测试性、可扩展性、可维护性等一系列问题。一句话总结,都是为了更好地工程化迭代。

举个例子可能更好理解一些。比如做Java后端开发的用Spring框架很多,其实我们在写这些Web化服务时,不用Spring也完全可以。用朴素的方式也可以写,这样的话不同人都自己去造轮子,自己去封装工具类,封装自己的工具方法,也没问题,能完成需求。

但是这时候因为不同人的思维方式不同,习惯不同,能力也不同,大家写出来的代码很有可能参差不齐,质量不一,那就很难达到企业级开发所讲究的那些代码质量、可测试性、可扩展性、可维护性、可迭代性。这样写出来的项目后面可能不好维护,没办法长期迭代演进了。

而这些框架它们内部用到了很多的机制,实现了很多的工具类,方法,以及流程,自己也规定了很多约束性写法,给开发者或暴露API,或暴露接口...其实某一程度上来说都可以理解为提供了一种约束性编程。你要用我的框架?可以。那你就得遵守我这边的游戏规则(编码规则)。Spring典型不就是这样嘛,IoC容器用来干嘛的?方便管理对象,然后还搞了一堆像什么切面式编程、接口式编程、声名式编程...等等,我们就可以理解为一种约束性的编程。这样才能保证写出来的代码,在完成需求的同时,还能便于测试、扩展、维护、甚至便于和其他技术进行集成,来创造业务价值。

不过写到这里,好像扯得有点远了,时间也不早了,以后有机会再聊吧。


后 记

另外最近花了大把力气,把自用的编程学习资源做了个大整理。

都是纯肝货,目录如下。

该内容 GitHub https://github.com/rd2coding/Road2Coding 已经收录,里面还有我整理的6大编程方向的自学路线+知识点大梳理我的简历面试考点几本硬核pdf笔记,以及我的程序员人生,欢迎star。

整理不易,欢迎支持,下期见!


CodeSheep
3.4k 声望7.7k 粉丝