《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 cnblogs.com/jajian/p/9853592.html 「jajian」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

1.0 加班了

“前面左转,拐入宛平南路高架桥,从卢浦大桥走,……”,加班完之后我叫了辆滴滴,已经是凌晨1点了,平时打车我都会看看高架桥上车窗外的灯火和夜景,毕竟黄浦江上灯火璀璨彰显大城市的美丽,可是今天我只想闭上眼睛休息一会。国庆之后已经连续两个周末加班了,21点30甚至更晚,就像今天。

为何加班?因为我是一名程序员。我在赶一个项目进度,产品所谓的花3天的时间整理出来的业务,需要我们在一星期内开发完成并上线。国庆后第一个周末我们花了一天时间过完了需求,即所谓的产品需求移交,第二周的周一我们花了一天时间拆分了业务具体到个人,然后预估了下开发周期,详细到 人天,最后的我们发现这是项不可能的任务,除非每天不眠不休24小时。因为10几个产品他们的需求链整合起来已经是一个完整的产品需求了,而不是迭代式的。这一套做完至少也需要一个月的时间。

可是产品是不会理会这些的,因为他们的需求已经给出来了,PRD也已经移交了,他们的任务已经完成,后面的工作能不能按时完成责任并不在他们这了。如果项目延期上线,上面的领导追责下来也不会到他们那。这时我就在想我当初为什么没选择产品这行呢?

2.0 三明治

程序员,你是三明治。为什么这么说?主要是因为程序员上游有产品经理,下游有测试。产品的需求你可以挑三拣四,但是你不能拒绝。测试提的 bug 你可以说,’是不是你们操作有问题?’,但是你不能说,‘我不修’,最后还是要去自己操作一遍然后查看日志定位问题。两边你都不好得罪,因为最后妥协的肯定还是你。

其实,如果要认真的说,测试其实也很无奈,因为测试实质上是给程序员收拾烂摊子的,给程序员开发出来的产品做体检的。项目上线前,测试也是要加班加点的。如果说程序员的加班是因为产品提的需求,那么测试的加班则是由程序员的 Bug 量决定的。善待你的测试吧,虽然被人指错误是很痛苦的。

所以主要来说说产品经理吧,在这里我没有想诋毁产品经理,毕竟《人人都是产品经理》,也许程序员以后想转产品经理呢,毕竟常常听到被人劝说,”你要具有产品的思维,不要总是从编程的角度看问题”,确实程序员总是容易陷在自己的 code 世界里。世界上不乏有上帝思维的产品,腾讯的微信之父 - 张小龙,网易的网易云音乐产品经理团队等等。每个行业都有优劣之分,但是很多产品经理也有混的嫌疑,打着 “竞品有这些功能,我们也需要有”的口号,当有逻辑缺陷的时候,”让我看看竞品是什么样的”,甚至之前网上发生的“能不能实现主题跟着手机壳变换颜色”互殴事件等等。产品是不是也应该具备一点编程的思维?

3.0 编程之路

程序员,你当初是如何走上编程之路的?程序员一直都是一个备受人们关注的群体,随着近年全国互联网创业热潮的兴起,”互联网+”、”云计算”、”人工智能”以及”区块链”等领域发展迅速,市场对程序员的需求更为旺盛。风口的互联网、大数据和人工智能,让IT人才炙手可热,行业工资水涨船高。这几年培训机构也是赚的盆满钵满,每年培训机构向社会上传输的IT人员达到了百万之多。

为何如此之多的人不断的涌入该行业?是因为热爱吗?通过梳理近十年来行业工资水平变迁,以及不同城市之间的互联网技术人才工资水平发现:

  • IT 领域的人才薪资水平已经连续3年超过金融行业,占据榜首。
  • 一线城市的程序员的平均工资是二线城市的工资的近两倍。
  • 涌入行业的人数很多,但是技术水平参差不齐,企业要求的高水平技术人才依旧一将难求。

其实,对于大多数人来说,相对于其他行业,编程的生活是枯燥的,即使是对编程非常有兴趣的同学和朋友也会如此。很多人说看到自己开发的产品在线上平稳运行是件很有成就感的事,我只想说,’’真羡慕你,你还很年轻’’。当你经历过多年的开发,被看似不断变更实则平平无奇的业务拖累,被生活琐事纠缠,人近30,父母见老,婚事未得而头发渐希,房贷未清学费又来,……,等等这些之后,是否你还能保持如此单纯的想法?

大多数人,也许只是热爱它能提供的高额收入,毕竟养活自己,支撑生活才是最重要的。究竟是否热爱,可以问自己个问题:“当编程并不能为你带来期望的薪资,或有个更有趣的事业,你是否还是愿意坚持在这个行业?”

很多人说程序员薪资高,其实程序员的薪资是按小时算的,每天按时下班那是件奢侈的事情,平均折算下来又有多少。工作之后你会发现,年是按月过的,发12次工资,一年就过去了,换两三家公司,5/6年就过去了。如此快节奏的生活,你的技术是否跟得上?很多人5年的工作经验甚至比不上3年的实际项目经验。程序员要懂得给自己充电。

4.0 程序员职业特点

程序员的生活很少有能打理得井井有条的,皮肤粗糙,头发蓬松,鼻梁上扩着镜片,永远的格子衫,脚上基本都是运动鞋。

1、程序员性别比例

一直以来,程序员这一群体多以男性为主,女性程序员占极少数。这次调查发现程序员群体中男女比例还是近12:1,这和客栈在2016年调查的结果(92.62%:7.38%)惊人的相似。而如此”畸形”的男女比例也是解释了为什么很多程序员自嘲为”单身狗”。

其中男程序员单身比例达到了40.7%,女程序员单身比例也达到了35.6%。

2、程序员的年龄及婚姻状况

近一半的程序员年龄在25-29岁之间,且35岁以上占一成不到。根据搜狐科技网《中国互联网发展简史》显示,中国1994年正式接入国际互联网,最近一次中国互联网大浪潮是在2009年,PC端互联网转移到移动互联网,中国程序员数量呈井喷式发展。这也解释为什么中国程序员大多年龄集中在25-34岁之间。

从上图可以看出,24岁以下程序员绝大多数都是单身,程序员群体普遍结婚较晚,且30-40岁之间竟也有两成人未婚。

3、程序员地区分布

因为主要的大型互联网公司都坐落在北京,上海,深圳,以及近年来阿里巴巴的杭州。从地图中也可以看出,北京市(17.18%)、上海市(11.04%)、浙江省和广东省程序员人数最多,从调查样本数据进一步得到浙江省中杭州(13.50%)人数最多,广东省中深圳(8.59%)和广州(9.52%)人数最多。在程序员群体中流行这样一句话”逃离北上广”,与2016年客栈调查报告相比,很明显看出杭州和深圳的程序员人数在增加。

4、程序员公司性质

近四分之三的程序员所在民营企业,近一成的程序员是自由职业者,国有企业的程序员仅占4.2%。

5、程序员跳槽现状

有近8成程序员都有过跳槽经历。其中有1次跳槽经历的15.2%,2次跳槽经历的20.5%,3次跳槽经历的21.1%,14.7%的程序员有过5次及以上的跳槽经历。据调查,程序员跳槽原因主要包括缺乏发展空间,与预计的期望不符和更高的薪水。

6、近年程序员擅长语言和职业方向

擅长语言

职业方向

从调查数据可知,程序员擅长语言多为Java(41.4%)、JavaScript(38.6%)和PHP(22.4%)等,另外Python(15.2%)、C语言(14.3%)、C#(13.3%)和C++(12.9%)等也是使用较多的计算机语言。再结合程序员客栈后台4000多名签约开发者的职业方向,与本次调查基本符合。(注:此项为多选,总和大于100%)。

7、程序员对工作现状满意程度

调查显示绝大多数程序员对自己工作现状持一般态度,近三成程序员对自己的薪资不满意,满意度最高的是同事。

8、程序员兼职意愿

综上所述,国内一线城市依然是程序员的主要聚集体,一些经济发达,科技公司密集的二线城市也聚集了大量的程序员。在计算机语言方面,中国程序员擅长Java、JavaScript、PHP和Python最多,这也符合世界计算机语言流行度。从薪资来看,中国程序员薪资相比于其他行业相对较高,平均年薪达到15w以上,近五成程序员租房租金在1.5k以上,住房条件较高。

在工作上,76.6%的程序员在私企工作,近一成的程序员是自由职业者。77.2%的程序员都有过跳槽的经历,且跳槽过后的薪资相对提升。虽然中国程序员平时工作压力很大,经常加班,但可以看出他们对自己工作现状都比较可观,没有抱很大负面情绪。

5.0 挑战和提升

IT行业是一个需要不断自我挑战的行业,这就让很多人都想要进行尝试、挑战。IT行业的工作属于脑力劳动,需要不断的攻克难关,且在工作的过程需要不断的更新自己的技能知识,跟上时代的脚步。在该行业,从业者需要不断的突破自己,一步步的得到自我的提升。是一个持续学习的过程。

之前有个前同事和我聊天,他现在很焦虑。两年前我们在xx公司相聚,那是我第一次跳槽入职新公司,职位为中级,他比我早几个月,新成立的项目组,当然意味着我们少不了加班。程序员之间相处其实很单纯,没有职场竞争,也没有勾心斗角,能力强的也愿意揽比较难的活,有难题也相互咨询解决。主要是我们年龄相仿,包括组长和架构师,还有我们几个研发,年龄差在4、5之间。虽然每天都加班很晚但氛围好,所以也不感觉累。吃饭一起,下班一起,深夜修复完bug之后等运维发布版本的空隙时间,七零八散的葛优躺着,聊聊天打打农药。年轻就是好。

可是不到半年时间,项目变动,走的七零八散,架构师去了陆家嘴金融公司,组长去了成都安家。我考虑到自己的技术和发展最后也走了,临走前我花了一个星期的时间将新需求设计开发完成,我认为对于这种自愿离职的最好还是完成自己的任务,不留烂摊子给后面交接的人,程序员已经这么辛苦了,何必还为难程序员呢。

今年我们又相遇了,他没有换工作还在原来的地方,听他说我们离职之后,还有另外2位同事也留下来了没有走。他抱怨,公司虽然给他升级了,但是他的薪资没有涨多少,我和他沟通,换员之后,项目架构调整用到了哪些技术,他说我们已经换成了 Springboot,mogodb,开发工具全都统一改成了 IDEA。”就这些?”,”是啊”,他说他现在也不敢离职,说没想到两年没见你能力比我强多了。其实并不是我变强了,是我一直在行走,而你在原地踏步了。

从近几年的互联网发展可以看到,行业一直在变化,风口也一直在变化,技术也是日新月异,如雨后春笋般冒新,13/14年大量招Java后端,基本会 Spring,mybatis,springmvc,Mysql/Oracle,再掌握点 js / Jquery 就能找到一份不错的工作;15/16年移动互联网盛行,导致企业大量招 Android / IOS,前后端分离思想在国内也开始流行,前端工程师也开始发力,angularJs,HTML5,后端的大数据工程师需求量爆发;17/18年,区块链技术,人工智能,Angular 2,React ,Vue,微服务框架,SpringCloud,……。

面对技术更新换代如此迅速的市场,你如果原地踏步,那就是相当于在等待被淘汰。

6.0 你的生活很枯燥

程序员的编程生活为什么很枯燥,或者换句话说: 是什么导致程序员的编程很枯燥的?

其实原因无非就是以下这几种:

1.同一个环境,同一种技术

什么意思?跟同一个世界,同一个梦想不同的是,你在一个公司待久了,使用你所知的一种技术,重复的干着一个项目,你说时间久了,是不是很无聊呢?如果在一个公司做一个项目,长达一年,在这一年里,你仅仅是用你所知的技术一步一步的去实现,学不到新的技术和知识,技能得不到提高?这时候,无聊自然就会随之而来,悄无声息。可能对于公司来说,这是有意义的工作,但是对你来说:这是重复的,机械的搬砖。

2.复制粘贴……

其实和上边道理差不多。工作每天都是从网上粘贴复制,项目就是这样被垒起来的。很多人离开了网络,基本上就丧失了百分之八十的编程能力,而剩余的那百分之二十还是抄书。很多程序员编程不思考,而是简单的粘贴复制。

当然,聪明点的程序员还是会封装的,自己就会把一些常用的工具类,一些方法,一些控件进行封装,留着以后备用。在公司开发完 A 项目,然后开发 B 项目的时候,就会很简单,把自己封装的东西拿过来直接用,这样机械的复用或者粘贴复制是不是很无聊呢?答案是肯定的。

3.重复的迭代和维护,以及修改 Bug

其实当一个项目进入测试阶段以及后期维护和迭代阶段的时候,开发人员基本上百分之九十的工作任务就是在修复 Bug ,而不是在研发新功能,学习和使用新技术。天天在维护和更新迭代这个项目的时候,其实工作是很乏味的。

4.没有思想的程序员

其实很多时候,程序员是没有话语权的,尤其是在小的创业公司,因为老板基本上就是产品经理,需求说让你做什么,你就得做什么?让你去实现什么,你就得实现什么。不会让你参与到产品的讨论当中来的,当然,如果老板让你参加,估计由于产品经理是老板,你也没有什么话语权和发言权。

在这样一个没有个人思想和独立思考的开发环境中,你是不是很无聊呢?只是机械的去实现老板想法的一个工具?是的,你就是一个工具,这种现状那又该如何改变呢?是时候考虑离职了。

7.0 什么时候离职

实事求是的说,作为一个开发者,一个程序员,我相信大多数人干同一份工作的时间基本上不会超过两年,换句话说就是:一个程序员在同一家公司干同一份工作超过两年的很少。

很多人说,程序员是一个跳槽比较频繁的职业,每一次的跳槽都会使工资大幅度甚至成倍的增长,所以这时候就会有很多人跳出来说:程序员跳槽的目的很简单,就是因为想涨工资了。在这里,我想说:我并不否认,确实有很多开发者和程序员跳槽是为了涨工资,但是我相信作为一个有责任,有志向的程序员,跳槽中最大的目的并非涨薪,而是换一个更好的环境,更好的成长平台和发展空间,涨薪只不过是跳槽过程中附带的价值。

人往高处走,程序员也是人,当自己的能力成长达到一个瓶颈的时候,原来的公司不能提供很好的上升空间的时候,上升空间不限于技术还是管理,是可以考虑离职了。

那如果我发现跳槽可以让自己工资上涨,那是否可以频繁性跳呢,如果真是这样我相信未来你肯定会失业很久或者成长停止很久。技术也是需要时间沉淀的和消化的。如果你的离职理由一直是项目不好或者领导不好,那你的眼光肯定也不好,面试是一个双向过程,面试官在挑你的时候,你也有权利挑公司,面试的时候你可以反向提问以更多的了解公司是否适合自己。

程序员,技术是我们的主导力,因此,入职新公司前我们可以反向问面试官:公司的技术人员配比,入职后的项目详情,公司的产品发展方向,以及目前主要的架构技术。这些可以让我们快速的了解当前公司是否适合自己。

一般判断自己是否可以离职,若无特殊原因,可以从以下几个点去判断:

  1. 公司的项目,产品逻辑是否全部了解,下家面试时是否可以详细讲解清楚,细到边边角角。
  2. 项目中所涉及的技术,是否全部已经知其然知其所以然。不要停留在表面会用的阶段,要了解技术原理深知其特点。
    技术是个累积的过程,你也知道技术更新快,所以尽量不要回头学,用到一个技术就将它理解的透透的。
  3. 有更高的目标可以追求,并且认为自己现在已经有能力实现。

8.0 程序员你30了

中国古语,30而立,程序员你是否担心你的30岁?我认为如果你在30岁之前已经做好了准备,你就没什么好担心的。如果你害怕,说明你做的并不够好。请问如果你有孙悟空的七十二变你会怕取经路上的妖魔鬼怪吗?如果你有成是非的金刚不坏神功,你会怕江湖上的刀枪剑影吗?请别给自己带上了紧箍咒。未雨绸缪,是任何职业人员都需要做的。

当你在30岁之前没有消耗自己,一直坚持着技术积累,我相信在30岁的时候你也是满怀自信的,因为有能力的人走哪都是不惧的。

还有最后一句:量力而行。人可以有梦想,但不可以好高骛远,不切实际。这个世界山连着山,水潺着水,人上还有人。环境不同,起点不同,自己内心过的得意,我有十两银子吃穿温暖,家庭幸福又何必在意别人的百两金子。

9.0 后记

程序员你累了吗?那就睡一觉吧,睡醒之后又可以战斗了。另外,恭喜 IG 战队。

文章目录
  1. 1. 1.0 加班了
  2. 2. 2.0 三明治
  3. 3. 3.0 编程之路
  4. 4. 4.0 程序员职业特点
  5. 5. 5.0 挑战和提升
  6. 6. 6.0 你的生活很枯燥
  7. 7. 7.0 什么时候离职
  8. 8. 8.0 程序员你30了
  9. 9. 9.0 后记