话题开始之前,请先容我哀悼一分钟。

1,2,3…60,好了,一分钟过了,我又凑多了几个字。

毕业三年了

哈哈,开个玩笑。

之所以写这篇文章,也是最近才觉察到自己已经毕业三年了,从2017年6月30号算起,整整三年多的时光。时间不知不觉地飞逝,转眼之间,我也从一个青春少年转变成了一个老油条,额。。。说老油条好像早了点,那就叫中油条吧。

记得当初校招找到工作之后,我热情满满的对自己的未来做了详细的规划,像什么三年升高级,五年做架构师。如今看来,这一切也只不过是一个初出茅庐的小白的自我陶醉而已。当然,每个人都会有年轻的时候,毕竟刚出校园嘛,对未来有幻想是正常的,可幻想过后终究还是要面对现实,不得不接受自己就是一个菜鸟的设定,接受自己就是一个普通人的设定。

学历一般,能力一般,一个没有天赋的农村小伙能跟别人竞争的最大优势可能就只有奋斗了。毕竟,再差的菜鸟也有成为老鸟的一天,这三年的时间里,我也许没有做过什么特别有价值的事,最大的价值也唯一算得上价值的可能就是我这三年以来的从业经验了,三年的时间说长不长,说短不短,但我可以信誓旦旦的说,比起刚毕业的时候,我对自己所在岗位和行业的认知都上升了一个高度,也正是从业了三年的原因,让我开始明白为什么如今很多公司的社招岗位普遍要求要三年以上的工作经验。

为什么是三年

为什么是三年这个时间段呢?不是一两年或者是五年?

我个人认为,三年是一个小坎,对于工作流程的熟悉度和岗位需要的协调能力都有一定的积累,简单来说,就是可以直接上手做事,不用花太多时间去调教。

比起一两年的求职者,三年工作经验的人对工作的熟练度更甚,跟其他同事协作的能力也已经具备,同时还能承担部分重要的职责,主导部分重要的工作,比如带新人做项目之类的,这样的一个门槛限制,可以过滤掉很多不合适的求职者,给企业招聘省下很多的人力。

比起五年左右的求职者,虽然能力和经验稍逊一筹,但贵在便宜啊,而且岗位的能力不是特别高的话三年的经验足够胜任了,所以,很多岗位的要求也就三年以上,最多也就3-5年,五年以上的相对不是很多。

三年经验的程序员

前面说到,我是2017年6月底毕业的,但其实,当时4月份的时候我就开始工作了,我的第一份工作做的是Java开发,直到现在依然是做Java方面的项目,这么算起来,我也有三年多的Java开发经验了,想起当初大学时候跟同学调侃,简历上写精通Java一定有很多面试机会,同学戏谑地反驳我,呵,年轻,没有三年以上的经验还敢说自己精通Java。现在想想,即使过了三年我也不敢说自己精通Java,这条路还长着呢,真的是太年轻了。

当然,虽然没有做到精通,但我对这个职业也算有一定的认知吧,从我个人的角度来看,一个合格的三年经验的程序员,他应该具备以下的几种特质:

1、扎实的基础。

基础的重要性不言而喻,在我看来,基础方面是否扎实是衡量一个程序员是否合格的入门门槛,也是几乎所有的互联网公司都会考量的重要知识体系。

什么是基础呢?就拿Java的知识体系来说,基础包括但不限于:

Java基本语法,Java集合,多线程开发,JVM,数据库,计算机原理,计算机网络,基本的算法和数据结构,web端相关技术,常用框架的使用和原理等等。

千万不要觉得很多,也不要觉得基础不重要,有时候,你的基础知识不扎实,你写的代码可能会造出你自己都理解不了的bug,比如下面这段代码,

public class ThreadSafety implements Runnable{//共享数据public static int i = 0;public  void increase(){for (int j= 0;j<10; j++){i++;}}@Overridepublic void run() {increase();}public static void main(String[] args) throws Exception{ThreadSafety demo = new ThreadSafety();Thread t1 = new Thread();Thread t2 = new Thread();t1.start();t2.start();t1.join();t2.join();System.out.println(i);}

我们知道运行后的结果肯定不是20,因为没有对共享变量做线程安全的操作,如果你的多线程基础不扎实的话,这样的代码你可能不经意间就写出来,最后程序跑的时候数据就不一致了。

当然,一般人不会这么蠢,即使是我刚学Java的时候都知道这种代码有问题,但基础确实是很重要。

如果你是一个即将毕业的大学生,相信我,学好这些基础的知识将是你跟同龄人拉开差距的最大优势,因为多数的大学生没有经历完整的企业项目开发,在实际项目方面即使不是一张白纸,也不会有多丰富的经验。这个时候,企业招聘考察的最好方式就是你们对基础知识方面的掌握程度,扎实的基础将帮助你在激烈的同龄竞争中脱颖而出。

2、良好的编码能力。

除了能正常实现功能外,还需要有优化代码的意识和习惯,最基本的习惯就是注释要清楚明了

一个项目往往需要多人的协作,你的代码并不只是给自己看的,很可能会经过很多人的接手,如果注释不清楚的话,别人光看你的逻辑就要仔细的揣摩半天,而且可能还偏离方向。

我看过很多人写的代码,一个方法的业务流程注释很不清晰,有些人一个方法100多行就一两句注释,完全让接手者摸不着头脑,像我自己的话,一般写业务代码会按照步骤来写注释,这样看上去每一步的逻辑都比较清楚,

public GardenUserFruitDetailDesp userFruitDetail(GardenBaseReq req, Long userId) {// 1、查看有没有正在参与活动的用户果树,没有的话返回 "未选择水果" 状态.......................// 2、水果还是未选择状态,证明用户未通过新手教程.......................// 3、果树成熟,返回可采摘状态.......................// 4、获取用户果树的相关数据.......................

不过,注释清晰也只是基本的要求,即使是新手也能很容易的做到,但说到代码的优化方面就另当别论了。

一个有经验的开发者除了专注功能的实现外,代码的优化也是其比较上心的部分。

举个例子,比如说逻辑有共通性但分类较多的情况下,很多人会写大量的if/else语句来表示,虽然也能实现功能,但从可读性和扩展性来说是比较差的,如果想更上一层楼的话,可以引入一些其他的设计理念来优化一下代码,比如可以引入策略模式或是适配器模式的设计来处理代码,兼容不同分类的共通性逻辑,不仅实现功能,还让代码看上去更加的高端,便于维护。

当然,这方面的能力不是一蹴而就的,除了多写之外,意识和习惯方面的培养也不能少。

3、承担一个项目的设计开发任务

如果是刚入行的新人,一般上级的任务是让你修改一些bug或者实现一些小功能,厉害点的人会让你负责单个模块的开发工作。

随着你经验的增加,你负责的工作内容会慢慢的开始扩展,从单个子模块到多个子模块,然后是重要模块的研发和维护,甚至最后可能是负责一个中小型的完整项目的研发过程。

当你有三年左右的工作经验之后,我们日常负责的将不仅仅是代码的编写工作,可能需要经历一个完整的项目生命周期,从技术评审,到模块设计,以及分配工作、功能实现,还有项目维护这一系列的工程。除此之外,如果你能力和经验足以胜任的话,上级还会给你分配新人,让你来带他们做项目开发。

4、对架构方面有一定的理解

算起来,三年经验的程序员也是有一定经验的工作者了,从经验上看不能归为普通的初中级,但也没有达到高级程序员的高度,大概就是中级到高级程序员之间的过渡阶段吧,毕竟要成为高级程序员的话,除了基本的编码能力之外,对架构方面也要有一定的理解,我姑且称之为架构思维吧。

什么是架构思维呢?就是当你的视野和思考已经有足够的高度,能对项目全局或部分做一个整体的架构方面的设计和优化。

举个例子说,现在公司有一个电商类的项目,因为项目初期没有考虑到未来业务扩展快速的原因,所以在架构设计方面有所欠缺,造成现在单表数量太多,单个工程代码量太庞大,日常qps过高导致页面响应过慢等问题。针对这些问题,如果让你来对项目的整体架构做优化的话,你会怎么考虑?

在实际中,公司或许不会把项目架构优化这么庞大的工程量交给我们这个阶段的开发者来设计,但工作之余的我们也可以学习思考一下,如果让我们来接手的话,我们该怎么结合实际业务场景来优化架构?

又或者说公司的架构师或者是业界已经有成熟的架构方案了,我们可以拿他们的方案和自己思考的方案做下对比,看看有哪些地方需要改进,然后看看自己的架构技术盲点,课余时间去进一步的学习和补充。

我相信,这样的学习策略对于自己的架构方面的理解一定会有所帮助,长此以往的思考方式也一定可以提高自己的架构思维能力。

总结

当然,上面所说的几点也只是我个人的见解,现实中没有哪个通用的考察标准,虽说是合格的三年开发者必备的特质,但说实话,我自己都达不到这样的要求,所以,我也不知道自己算不算得上合格,也不知道现阶段的我跟同龄的程序员相比是否有优势。但有一点我是坚信的,那就是,不管自己现在是什么阶段,不管自己从业了多少年,只有终身的学习,不断的精进自己的知识技能才是保持我们竞争力的最大优势。

ps:虽然是吹水文,但撸了那么多字也是挺难为我的,我不知道正在看文章的读者你看完本文后有什么想法,但我想说,如果你也感同身受的话…快给个三连吧,臣妾不容易啊!


作者:鄙人薛某,一个不拘于技术的互联网人,欢迎关注我的公众号,每周不定期更新干货文章,这里不仅有技术,还有吹水~~~

毕业三年了,我开始明白为什么说三年是一个坎相关推荐

  1. 三年是程序员的一个坎

    三年是程序员的一个坎 我的工作经历 一次面试 展望未来 我的工作经历 我是一个工作快三年了的程序员,从一家医科大学出来之后选择了程序员道路,曾供职于中国航信重庆研发中心和南京君合创胜(一家中兴软创的人 ...

  2. Android 开发工程师自述:毕业两年后,我明白的那些事!

    作者 | 张拭心 责编 | 屠敏 去年七月写了<毕业一年总结>(https://blog.csdn.net/u011240877/article/details/74503788),一转眼 ...

  3. 计算机专业三年教学实施计划及总结,教师个人三年专业成长目标和措施

    文章来 源初 中教师cz 9 1 0.cOm 从2016年参加工作至今,我先后在乡镇成教中心教过职业高中计算机课程,在初中教过信息技术课.如今步入开发区国际学校这所新建的学校,开始一段新的职业生涯,心 ...

  4. PHP三年15K,程序员月薪15K相亲三年才成功,被拒理由:这个薪资提鞋都嫌弃

    程序员,北漂三年,月薪1万5.懂行的人可能知道,这个薪资也就是一般水平,与成功人士还有很远的距离,甚至在程序员圈子都是被鄙视的水平,很多刚毕业的985大学生如果从事程序员,拿到2万的起薪也不是什么新鲜 ...

  5. 计算机老师三年发展规划,信息技术专业教师个人发展三年规划汇总(全).doc

    信息技术专业教师个人发展三年规划 没有计划的生活是盲目的;停滞的知识迟早会被淘汰,现今世界竞争日趋激烈,尤其是人才竞争尤为突出,这股强劲的竞争风伴随着教育改革席卷校园.本来在普通人眼中的"铁 ...

  6. 太累了,28岁半路转行,坚持了三年现如今年薪36W+,也算是给自己一个满意的交待了

    背景 26岁985研究生毕业,学的土木工程相关的专业.工作半年,存款3000,半年后调到深圳总部(公司央企),工作一年差不多也就几万存款,感觉生活无望,就直接决定转行. 说实在的,转行就是奔着挣钱去的 ...

  7. 跳槽:三年五年一个坎

    一年多前和CSDN的编辑,网友做的一个在线聊天,探讨的跳槽话题.从故纸堆中翻出来,希望对大家有帮助 主持人:我们今天聊天的话题将围绕着"跳槽.转型.晋升和创业" .在此之前我们在网 ...

  8. 回望过去三年(作为程序猿踏入社会的三年) 续篇

    转眼从12年到14年了,现在和当时比年龄大了两载,有了女朋友,好像更孤僻了,待遇涨了%60, 现在回望好像还是在摇摆中,现在的摇摆可能不想当初那样了,现在是选择项目的决定,感觉现在是游戏行业泡沫要破灭 ...

  9. 回望过去三年(作为程序猿踏入社会的三年)

    天气还是如往常一样的冷,不想玩游戏(合租的家伙还在火拼,值得表扬的是没玩网游),在这家公司待了将近两年,有点感觉是为它付出了差不多两年的青春,没有在自己的人生规划范围内花了2年时间,觉得有点惋惜,不过 ...

最新文章

  1. AI 初学者必须要了解的术语盘点
  2. Google Latitude 能否成为所有移动社会网络的杀手?
  3. 【Linux】一步一步学Linux——ld命令(256)
  4. JDBC获得数据库连接及使用
  5. golang 返回值问题
  6. Linux学习体会。
  7. C语言线性表之单链表
  8. uc点网页显示服务器升级,让uc浏览器网页加载速度提升100%
  9. 盘点国内外那些有野心的BI公司
  10. Samba 共享目录启动mysql
  11. CentOS7安装python3.6.6(解决所有安装异常情况!!!)
  12. iOS NSString的常用用法
  13. 系统找不到指定的文件。 : No installed service named Apache
  14. 乒乓球(Table Tennis)
  15. 程序和算法之间,主要有什么关系?
  16. c语言 菜单选择,设计一通过 c语言 个简单实用的菜单,通过菜单选择不同的菜单项并实现相应的功能。...
  17. c语言实现24位彩色图像二值化
  18. Ruff Chain 荣获”2018年度最具发展潜力项目“奖
  19. CICD -- pipeline 流水线
  20. 第一次冲刺--查看活动详情用户场景分析

热门文章

  1. java贪吃蛇游戏设计,成长路线图
  2. JavaScript,Mysql,Java中substring,substr区别
  3. springboot starters包
  4. 在跨境电商领域,国际短信的优势你了解多少?
  5. iPhone1.1.3固件jailbreak详细操作教程
  6. 如何在你的 Flutter 中使用 input chip 标签组件
  7. golang json Marshal遇到的字符转义
  8. virt-manager+virt-install 制作windows7+10-qcow2镜像
  9. python语言流程控制语句的格式while循环_Python流程控制-while循环-for循环
  10. 最简单的kafka接入方式(kafka配置),kafka整合Spring