潍坊市论坛

首页 » 分类 » 定义 » 聊一聊自学计算机的辛酸史
TUhjnbcbe - 2021/4/3 20:47:00
白癜风要多少钱治疗 http://m.39.net/pf/a_7628437.html
往期笔记整理

数据结构和算法刷题笔记.pdf下载

找工作简历模板集(word格式)下载

Java基础核心知识大总结.pdf下载

68道C/C++常见面试题(含答案)下载

23种设计模式学习笔记.pdf下载

Java后端开发学习路线+知识点总结

前端开发学习路线+知识点总结

大数据开发学习路线+知识点总结

C/C++开发(后台)学习路线+知识点总结

嵌入式开发学习路线+知识点总结

01

近年来,有些小伙伴会问一些形形色色的问题,让我很难去回答,甚至给不出建设性的意见。

举个例子:

1.我学习什么能进入优秀的互联网公司工作?2.我想做研发我应该学习什么?

众所周知,这问题就像你问学霸说:你为何如此厉害一样让人难以回答。其实,我当时也有很多的疑惑,在这里给大家讲讲我的踩坑历程。

作为探路者,求助知乎和论坛,给出的结论几乎都是好好学习数据结构/算法、现在大数据很火你应该学学Hadoop/Spark、你要是会微服务、docker、k8s一定会很加分。

让我想起了我当年问学霸题目如何解?学霸说:这个题目是来源于第X章第X例题,你这样解,答案就出来了,很容易的。至于为什么他能想到,*也不知道。

当时,我真的是花里胡哨的啥都学,啥都去倒腾,不知道是不是梁静茹给我的勇气。前端、后端技术栈、Hadoop/Spark、docker/k8s这些几乎都实操过,只是很多只是入门并没有深入研究,效果自然也十分有限。

这些概念,对于小白或者在校生来说,这仿佛在对说你不用学了,除非你天生技术欲望特别强烈。这对于大多数普通人来说,明显是劝退的节奏,可操性十分有限,几乎没有参考价值,不知道从何下手。

其实,道理是没有错的,多研究底层和热门技术栈是有益的。但是,脱离实际情况谈技术就是扯犊子,而更应该是根据实际情况,做产出最大的事情,否则会信心全无。

接下来,我系统性拆分问题,在不同阶段应该「学什么」、「如何学」、「学到什么程度」,重点讲我当时遇到的问题,还有我是如何去思考的,最终如何解决的,思路比结论重要。

02

首先,说说在大厂工作都是些什么样的人,他们当年都是背着什么光环混进去的?

经过我的调研和分析,重点说一下在校招中面试官看中和考察的东西。

1.学历/专业、扎实专业基本功2.有成果的科研经历3.省/国家级软件设计大赛4.丰富互联网公司实习经历5.小有名气的开源项目经历

大概思路就是,要么你证明你令人信服的天赋如逻辑系统思维、聪明,让人觉得你可以被快速培养;要么你有丰富的工程实战经验,证明你具备优秀工程师的潜质。

当然,你可能会说这么多要求,恐怕神仙也做不到啊,简直太苛刻了。在这里,并不是上述要点全部满足,只是满足其中两项证明你的实力即可,毕竟面试时间十分有限,要有点让人信服的东西,否则谁愿意花时间跟你逼逼没用的。

举个例子:

1、假设你是上海交大毕业的学生,你可能只需要重点复习数据结构/算法等专业知识,辅之把学校的科研经历说一下。可能进入什么阿里华为百度问题都不是很大,专业知识对于你们来说自然不在话下,毕竟考理论是你们的特长。

2、假如你是双非大学毕业的学生,那么你必须用国家级大赛、开源项目、互联网公司经历证明自己。总之,多做项目,专注于技术本身,让自己更早具备职业软件工程师的实战技能。

简而言之,你没有光环,那就比别人多努力点,提前做好职业规划,把时间投入技术本身不要投机取巧。

03

鉴于上述分析,知道需求是什么?对于我们来说,主要把精力投入在技术本身。

接下来,我们将面临一系列问题。

1.我应该做什么方向?(方向)2.我应该学习什么内容?(规划)3.我如何学这些内容?(方法/策略)4.我应该学到什么程度?(量化)5.如何把理论用到实际项目/产品中?(产出)

不同方向,意味着不同领域不同,学习的知识和实战项目有共性也有差异。在这里,我主要讲一下通用的思路,其他方向可按照同样思路举一反三。

根据我的经验,可将内容分为原理、应用、擅长方向三个纬度。原理和应用纬度必须学习,方向纬度根据自己擅长方向深入学习。

原理:计算机网络、操作系统、数据结构/算法,这些东西都是专业课好好学即可,数据结构/算法可以偶尔刷题,校招的时候也可以再重点复习。

应用:它是最基础的内容,不管你从事什么领域都将离不开它们。这也是小白入门重点花费时间的地方,你将在这里不断与程序斗争如调试、验证、异常、解决。

方向:不同方向本质上就是在基础应用上扩充,发挥它们擅长领域和特性去解决特定问题。在这里,简单列一下涉及的技术栈。

1.后端开发:消息队列、缓存、rpc、微服务等等。2.大数据开发:Hadoop、Spark、Storm、Flink等等。3.自动化运维:elk、ansible、zabbix、docker、k8s等等。

04

基于上述分析,主要讲了整体思路,大家可能会觉得有点不太好理解。接下来,拿我当时遭遇的处境进行举例阐述,这样让不同水平或时期的同学有不一样的体会。

假如有时光机让时间往后倒退3年,时间来到我刚上大二的时候,作为一枚小萌新开始学习JAVA走上后端开发之路。

对于我来说,操作系统原理、计算机网络先战略性放弃,毕竟刚接触编程,看高大上的原理,每次上课都想睡觉。当然,数据结构/算法我还能好好听听,毕竟我数学功底还行让我不排斥。

为什么不先学习基础性原理?举例:假设你学骑自行车,你是直接上去就蹬?还是先把轮子拆下来研究清楚原理再去学习怎么蹬?

重点:根据我的经历,在新手阶段不管是接触新的语言,还是新的方向。最快的方式就是先把自行车蹬起来,等你蹬熟练了再去研究轮子是怎么造出来的。

根据上述策略,刨除我踩的一些坑,我把学习征途划分四个阶段,实现学习效率的最优解。

第一阶段:新手入门

在我入门的时候,我遇到的最大困难是代码不会写,DEBUG不会做,程序报错不会看毫无头绪,甚至大家常说的百度一下的关键字我也不知道搜。

这时候,最大的目标就是根据百度/查文档/看视频,把程序调试出预期结果,甚至你抄代码都行,很多时候抄代码你都不一定能DEBUG出预期结果。这就是现实,主要就是要把对编程的排斥消磨殆尽。

这个阶段,不需要太

1
查看完整版本: 聊一聊自学计算机的辛酸史