给一个即将大学毕业同学的回复

1、问:

1.1、开发岗与算法岗的选择

听同学说,开发岗相对于算法岗没有那么看重学历,更看重技术。而学习开发不如不读研,工作三年在公司的学习肯定比读研学习三年要好。算法的话,一般本科生是不会接触的,至少要研究生,这就可以发挥读研的优势,但是竞争也会更激烈,岗位相对较少,要求更高。

我自己对于算法,只看过一些最基础的机器学习视频。对于开发,本科学过JavaC,C++,有一定的编程能力。但是因为没有做过项目,没有过实习经验,对于一些业务,框架,设计模式,优化等几乎没有概念,也不知道在公司工作具体是要做些什么,对开发人员的要求是什么。

因为对这两者,都没有进行过深入的学习,所以也谈不上喜欢和不喜欢。所以也有人问,你喜欢哪个方向就可以尝试着去学,但我就是觉得在对一个东西不了解的情况下,谈不上好恶。

1.2、前端后台的学习方法

因为一直以来受到的教育就是从0一步步学起,包括高考和考研,那是一种教科书式的学习。一直以来我也是用的这一套学习方法来学习开发,发现四处碰壁。比如我在完全不会前端的情况下,就从最基础的HTMLCSS学起,发现这些知识很简单,但是又特别多,特别杂乱,没办法坚持学下去。学完以后还要学JSES6语法,然后学习React框架这些。这样一步步学起了,已经不可能有那么多时间弄别的了,而且学习效率也是极低。

后来要同学告诉我要转变这些学习方法,要根据需求来学习,需要什么就学什么,要我好好利用Github,各大博客,好好学习别人的代码,和源码,然后自己尝试做一些项目,边做边学习,边总结。但是在这过程中也是困难重重,比如Github上看别人代码也看不太懂,自己做项目,也不知道拍脑袋做个什么项目出来,脑子是空白的。

之所以说前端,是因为好像看到很多做开发的同学,他们都是前端后台通吃,他们说都需要了解,竞争力会强一点,做全栈。如果倾向于做后台的话,前端大概要学习到什么程度。

我们实验室听说还有人去了华为的数据库组,完全不知道专门的数据库组是做什么的。

1.3. 对于acm和leetcode刷题

本科唯一学过一段时间的,就是刷这些算法题。这些究竟对于公司做项目有没有用,还是说只是锻炼了逻辑思维,是能力的一种体现。如果为以后准备面试笔试,需不需要从现在开始每天刷几道题保持手感。

1.4. 开发岗的行情

这个差不多是问题1的详细。师兄的公司或者互联网公司,大多数真的是996这样的工作时间吗。另外它的工资水平和发展前景是什么样的,据说有按等级划分。还有同学说过程序员吃青春饭这一套,没有晋升到管理层,就容易被裁掉一说。做开发真的很辛苦吗。

总结下来,就是想向师兄了解一下,两种岗位的选择,开发岗的行情,开发的学习方法。

2、答

首先值得肯定,写的很棒,是带思考的。

“思想比行动重要”这点是我最近几年才想明白的,以前我都觉得行动比思想重要,不喜欢天马行空。我们都是工科思维,讲行动、讲落地。但忽略一个前提,我们需要一个好的思想去引导。如果养成一个独立思考的能力,总能从不同的视角去看待问题,抛开其他不说,你就已经走在了所有人去前列。

回到你的问题,我站在我个人的角度谈谈,但最终你自己来判断。

2.1、关于开发岗与算法岗

看了描述里面应该算是2个问题,一个是开发工程师与算法工程师的门槛。另外一个是读研与直接参加工作带来的效益谁好?

首先开发与算法工程师做的事情是不同的。不得不是说,算法工程师对于学历、专业深度会更深入。

算法工程师:可能更多偏向于数学、物理、生物等,只是他用计算机语言来实现。

开发工程师:需要理解业务、产品、以及架构能力,还有对于框架的应用,考虑更多的时候如何利用更多的工具造出更大、更高的建筑;

2.2、前端与后端的学习

在几年前,我们还在说前端没有什么搞头,还是后端的路子多一些,确实如此,后端才是这课树下面的根。但随着计算机技术的发展,现在前端也变得越来越强、越来越多样化。包括在写法与语法上都已经跟后端相似了。

后端:注重系统的并发、高可用、稳定、安全、业务的分割、问题的定位、大数据分析等等;

前端:注重渲染、交互、动画等等(前端我不是很专业,所以说不出太多所以然)

如果说按照薪水来划分,现在前端反而优势更明显,但是后面会稍微的遇到一些屏障,但不会太大。

再谈你说好多东西需要学习,那是肯定的。后端需要掌握的东西更多,你到后面会有一种感觉那就是:知识永远学习不完,了解底层的东西才是重要的。而且要知其然还要知其所以然。还有你会觉得知道的越多,越觉得自己了解的少。

在现在的行情里面,前后通吃是有必要的,因为前后是需要相互配合的。只有了解前端或者后端是如何做的,在沟通上或者设计上才会考虑的更全面。哪天真的如果自己要创业或者需要前后都自己上,那也显得很从容嘛!

2.3、关于刷题

对于刚刚毕业的同学,这个是很重要的。因为缺少社会经验与项目经验,那么在一些原理、理论上的知识显得格外重要。刷题跟做试卷类似,做的越多,知道的也就越多。而且面试官也很看重这些东西,如果去BAT或者TMD这些公司,这些是必然的过关内容。

2.4、职业生涯的发展

如果是走技术,前期基本都是一样的,后期就会因人而异。

基本的一个成长历程:初级开发→中级开发→高级开发→资深/专家开发→架构师→技术总监→CTO。

在高级或者资深这里,就会有分歧,这个也要看性格。

纯技术:有的人就喜欢钻研技术、喜欢算法等,想下沉到最底层去,那就走纯技术路线,但道路会非常的孤独,如果真的是有所突破,那就是一下子出人头地。

偏管理:首先是自己有一定的技术沉淀,后面就开始带领团队做事情了,更多的是跟人打交道,如何合理的分配、拆分需求等。对公司技术发展的整体规划,包括:技术、业务、人力等。

对于薪水,我觉得你完全不用担心,每个岗位都有他的平均水平。而且薪水与能力直接挂钩,与年纪没有必然的关系。然而,我觉得出来工作或者自己创业,都非常辛苦。天上不会掉馅饼,拿一份不辛苦还能那很多的钱的差事儿理论上不应该有,除非是富二代。但是,后期我们如果能做一些理财,我们的收入不完全靠一份薪水,我们也许不会那么累。

关于996,这个话题我也不好说。加班是很辛苦,确实也会带来一些成长,但我们不都会要求强制加班,相对还是比较自由。部分公司,加班是有加班费用或者补贴的。没结婚之前,估计对996没有那么介意,如果有家庭后,需要平衡家庭与工作的关系,可能会介意。

2.5、总结

上面说了这些,都是针对你的问题做的一个回复。但任何东西都会存在一些方法,我把我觉得参加工作后的一些心得分享给你,希望对你有一定的帮助,还是那句话:我瞎说,你自己来判断。

1、无论在哪儿,我们最终一定都是解决一个问题,避免不了跟人打交道,所以认识人是到一个新环境里面最先要做的事情,后面做的就是如何让人认识你了;

2、要逐步逐步的认识自己,这点很难却很重要。因为,自己大多的不开心或者郁闷,都是对于自己不认识造成的,比如:自己找不到目标;做的事情开始喜欢后面就不喜欢了;为什么做事情不够洒脱,顾着顾拿。总之就是让自己不盲目、越快的做事情;

3、人生是分阶段的,每个阶段做好每个阶段的事情就好了。但每个阶段时间长短是可以控制的,看如何突破自己的认知,一般可以找一个偶像作为目标,或者通过阅读来突破自己;

4、专业知识要成体系,不能是零零碎碎的,串联不起来。有的人是广度优先,后面找出一个喜欢的,在深度进去;还有人是深度优先,在某一个专业先扎根,然后再在周边扩展自己的广度。这个我觉得都行,看每个人的性格或者看当前你是否找到了喜好。

5、要学习的东西真的很多,但底层的东西并没有那么多。但很难说一开始就扎入到底层去,因为是有门槛的。大多数人都是先学会使用,知道一个API是如何如何的~ 后面才会去阅读源代码,跟其他同类型的做对比。看源代码是一个非常有意思的事情,看的越多越觉得简单。不过,刚刚开始肯定是相当痛苦的。

6、实践是检验真理的唯一标准!没错啊,很多东西没有捷径,那就是多做。对于开发来说,那就是多写代码,看一遍与敲一遍,完全不是同一个概念。

7、时间管理,到后面每个人的时间都是零碎的,被打断的。如何留给自己足够的时间是一门学门,可以多学习一些时间管理的方法;

8、保持一些原则性的东西会让自己活得简单些,符合的我就要,不符合的就不碰他。比如:

  • 尊重每一个人的意见;
  • 拥有开放的心态,不要先排斥;
  • 拥有较强的业务,技术的专业度;
  • 拆分与总结能力;
  • 良好的沟通能力;
  • 一定的创新能力;

每个人的人生道路轨迹都一样,自己走的路自己来把握。希望你可以走出一条星光大道出来。

仅供你参考。

如果大家喜欢我的文章,可以关注个人订阅号。欢迎随时留言、交流。

简栈文化服务订阅号