程序员的悲哀是什么?

Posted 程序员王炸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员的悲哀是什么?相关的知识,希望对你有一定的参考价值。

说悲哀之前,先说说快乐

程序员最大的快乐就是年轻的时候赚的比同龄人多,甚至多很多。今年春节后由于疫情问题,就业情况不是很好,于是我们公司很顺利的就招到了一批还可以的应届生程序员,还没高兴多久,就出现了一个接着一个毁约的情况,久经职场的我立刻就明白是因为随着疫情复苏,有公司开出了更高的价格,最终我估摸出来的市场行情价是12K,因为开到这个数,毁约率就明显降下来了。最近和以前同事交流了解到,今年他们给一个本科两年的APP开发开了20K,结果最后人还没去。

程序员在年轻时,工资起点高,增长速度快,本科6年或硕士3年的好手,工资基本都超过30K。本科8年或硕士5年的好手,有机会争取到年薪百万的薪资,当然所谓的百万年薪,是由基本工资,年终奖和股票加起来构成,就算打个折,年薪七八十万不成问题。硕士10年混的好的年薪能到150W+。

以上说的是一个程序员好手,踏踏实实的做,按部就班就能达到的收入水平。要是撞大运进了一家高速发展的公司,能拿到股票期权,那真是干几年就财富自由,以后做事全凭兴趣。

说完了快乐,再说说悲哀

加班,认识的程序员中很少有不加班的,大概不加班的公司最后都倒闭了。每天十点能到家都还算早的,回到家后基本都是进行一些苦逼的娱乐项目,追剧,刷视频,然后洗漱睡觉。为啥要这么规律,因为第二天上班不能迟到,睡不好第二天脑子不好使会影响开发进度。

形象,大部分程序员没啥形象可言,我的一位年薪接近百万的好友,某个下雨天披着雨衣骑着电动车去上班,上班地点是个高档写字楼,结果被保安拦住不让进。说到形象,就不得不提格子衬衫,格子衬衫真是对程序员最大的误解,因为程序员穿格子衬衫的真的很少,策划穿格子衬衫的倒是挺常见。

改需求,工作中最痛苦的事莫过于改需求,因为改需求意味着之前做的东西基本都没用了,废掉前面的之后,还要再按改过的需求来做,如果说有什么是比改需求更痛苦的,那就是当你改完之后,产品跑过来说,需求又改了。我经历的真事,开发某网游中的背包系统,策划前前后后改了5次需求,程序显示出极大的忍耐性配合改了,然而该策划非常执着的发起了第六次修改需求,程序终于爆发了,对策划说,你要是还改,我就辞职。大家知道事情的结果是怎么样的吗?很不幸,因为策划太执着,这个程序最后辞职了。

单身汪,能耐住寂寞做程序的,性格上本身就比较闷,然后语言能力都不大好,嘴比较笨,然后还不注意形象,再加上天天加班,没多少空闲时间,这每一点都是找对象之大忌。本来就已经找不到对象了,结果有帮程序员还搞了个美颜相机,哎,雪上加霜啊。

35岁现象,其实35岁现象纯属一帮无聊的媒体炒作出来的,只要技术足够好,40多岁拿高薪的大有人在。但随着年龄增长,45岁以后的程序员何去何从可能还真是个问题。现在国内大部分公司的开发强度都很大,年纪大了,体力是有可能跟不上的,如果做的是上层开发,技术一更新,就落伍了,学新的又学不动。有些行业是年轻时吃香,有些行业是年纪大的吃香。我有个朋友,现在已经做到某银行的高管了,毕业前几年,我的收入是他的3倍还多,但现在,他职业黄金期才开始,而我已经要开始考虑未来该怎么办了。

父母不理解

你天天坐办公室,有什么苦的?什么狗屁996?你爹妈年轻的时候哪里有五天工作制,全是上六天班的,以前在工厂上班,天天都站着,空调都没有,还能比你舒服不成?有的班上就不错了,别天天跟个祥林嫂似的。

女友不理解

你每天加班,加班,加班,每天都到半夜才回来,想你难得周末有空能一起出去逛个街,陪我买买东西,结果你和我说你周六还要上班,那好吧,我他马的等你到周日,我们刚准备出门,你说公司打电话给你,有个紧急的BUG要处理一下。我X,你眼里有我吗?算了,你和你的电脑和你的BUG过日子去吧,我们分手了。

同事不理解

这个需求你说你要二个礼拜才能实现?你和我开什么国际玩笑,我觉得这东西二天就可以做出来了。你说太复杂你一个人不好弄?那别人淘宝怎么做得出来,换你就做不出来了呢?别和我逼逼,我不要你认为,我要我认为。

朋友不理解

我操……你一个月的工资顶我三个月了,我羡慕死你了。你竟然还说你太累太压抑做不下去了……你真是得了便宜还卖乖,要是别人给我这么高的工资,我命都可以给他。

路人不理解

瞧那个人,一脸猥琐的样子,眼圈黑得和熊猫似的,头发都快秃光了,就留了几根毛在脑袋上,哈哈哈,他一定是个程序员吧。

同行不理解

你找不到工作?活该啊,这么大年纪了你不紧跟技术你怪谁啊,这么多年你就光写业务代码么,新出的技术你都不去了解,呵呵,你说底层原理你都忘光了?这分明就是你不努力的表现。你老了,应该被淘汰了,别以为我现在是比你年轻才占了优势,我可是干劲十足,将来我绝不会像你这样的。

老板不会理解。

小张,我们公司打算做个微信小程序,你给我招一个程序员吧?要什么要求?嗯招个条件好能力强的,这样以后除了小程序也可以做点别的功能。最好带有那个阿里百度腾讯公司的工作背景,我们早晚会超越他们做到市值第一的,所以在技术实力上也要对标这些大公司,招的人必须会开发苹果App和安卓App软件,必须精通大流量高并发,以后我们公司的注册用户早晚会突破1亿。现在那个区块链比较火,也必须要精通区块链技术;呃……大数据,对,这个大数据也必须要精通,对了,还有人工智能,我看很多公司都在搞人工智能啊算法什么的,这个也必须要精通。

你问我这个岗位准备开多少工资?呃……一万块钱吧,什么?你说大公司都是2万3万起步的?这价格太离谱了!没这数不肯来?那你想想办法嘛,要不到时候许诺给点期权好了,再不济你就校招弄两个这样的进来。

老王不理解

你家那位也是太拼了,这么晚都不回来,怎么舍得让你一个人在家啊,工作比你还重要吗?什么?他是在拼命赚钱养你?那多无趣啊……要不我来陪你聊聊天吧。

 最后再说说建议

千万别相信什么管理路线,拿高薪的程序员,基本都是技术上的好手,能独当一面的,程序员的价值在于你能解决什么难度的技术问题。而且不要想着哪天你可以不写代码了,很久没写代码,意味着你也没价值了,随时可以被取代。

多与技术之外的人交流,很多程序员会觉得技术才是成功的最重要因素,因此对其他岗位的人都不屑,这其实是非常错误的,多交流才能更清楚的看世界,才能更多的发现机会。

多读书,尤其是技术以外的书,书也是认识世界的重要手段。天天读自媒体文章是学不到真东西的,大部分网上内容的目的都是流量,可以当消遣,要学真东西还是得看书。

大家都羡慕谁谁谁很早就进了某上市公司,手里股票一大把,这确实是个运气问题,但如果你的技术好,信息灵通,能更好的分析行业趋势,那么你进到这类公司的概率会大大增加。


感谢关注,为你们准备了编程学习的一套资料,还有相应的代码,视频教程都可以获取,需要点赞私❤666即可

300+Python经典编程案例
50G+学习视频教程
100+Python初阶、中阶、高阶电子书籍
1000+简历模板和汇报PPT模板(转正、年终等)

快点来学吧!Java程序员最大的悲哀是什么

前言

“大专人大专魂,大专都是人上人”
当我看到这句话突然就在各个平台火了之后,又开始涌现出了一批又一批抨击专科的网友。
其中有一条评论我记忆犹新:大专生努力做什么都行,就是别做程序员了,别祸害IT届拉低档次了。看完这条评论时我实在耐不住心情促使我敲出这篇文章。作为一个专科毕业成为程序员的人,我发现大家对专科生当程序员这件事恶意满满,不少人说大专能当程序员?大专能进大厂?大专出身,做Java程序员真的没有春天吗?

系统介绍

整个系统可以从功能上分为3块:

  1. 业务系统:在上游有很多的业务系统,业务系统的运行产生很多的数据,这些数据分散在很多的数据库中,大部分是MySQL数据库
  2. 数据智能平台:数据智能平台属于中台系统,主要为业务系统提供强大的数据支撑服务,下层连接数仓。
  3. 数据仓库: 数据仓库统一集中的管理所有的数据,数仓会将业务系统产生的数据按天进行加工、抽取、转换到数据仓库存储。

当一天结束后,各个业务系统产生了大量的数据,这些数据由定时任务进行加工、抽取到数据仓库存储,当半夜你还在睡觉的时候,这些定时任务就在默默的运行着。

而每天加工的数据通常要求在上班工作时间之前加工完成,然后通过数据智能平台的查询系统供业务系统查询调用,这一次数据没有查询到是因为在第二天早上10点,数据还没有加工完成。下面就是找问题优化了,因为正常来讲,即使定时任务链再长,也不会慢到第二天10点钟数据还没有出来。下面就是找问题,然后进行优化了。

任务优化

通过任务日志发现有一个上游系统的数据抽取执行时间有3个小时,而数据量仅100万。当然,光凭这样还无法确定这个任务是否是可以被优化的。

查看任务代码,逻辑还比较简单:有一张原始数据表,记录商品信息以及定义的分类(这一点是虚构的,实际情况要复杂一些,我这里精简然后转换了一下,便于理解),而数仓的目标表是将分类和商品分别存储在不同的表中,大致结构如下。

那为什么需要进行这样的转换呢? 这是因为整个大的系统,一般来说只能定义一些基本的规范,而具体的细节规范则无法约束,比如A系统的身份证字段名称为card_no,而B系统的身份证字段名称为crdt_no(这种情况大家应该经常遇到);再比如处理实体关系的时候,处理方式也是不同的,1对1的关系,可以建两张表关联,也可以一张表都存储,这就造成了多个系统的不统一性,而这种情况是不可避免的,因为从业务系统来说,都保证了系统的正常运行。

而数仓对多个原始数据处理的时候就需要考虑到兼容的问题,所以就会出现如上图的转换过程。

而这个任务执行3个小时的原因在于原始表中的一条记录,会转换到数仓表中的三张表中,而且这三张表是通过id进行关联,整个代码流程如下。

然而问题来了,100万的数据,跑了3个小时,然后我开始尝试去优化程序的执行流程,大概从一下几点入手

  1. 将分类缓存,分类在系统中已经固定,不会发生变化,缓存可以减少查询数据库的次数
  2. 每次从原表中读取的数据更多,从原来的500/次 -> 2000/次

经过优化,效率有一些提升,但并不是很明显(有同学可能要问了,这些都是很基本的,为什么最开始做? 咳咳。。。这个嘛,历史原因吧,在最开始数据可能不多,不论以什么方式执行,都差别不大,比如执行10分钟和执行20分钟,看似2倍的执行效率,但是由于没有影响到业务系统,且一直正常运行,也就没有看出问题)。

这里数据是需要关联的,所以我们是需要插入数据并拿到这条记录的自增长id,然后插入到关联表,而表结构基本不可能去动的(表结构动了那真是牵一发而动全身了,第二天准得被叫去喝茶)。

那么我们先来分析一下这里为什么执行这么慢呢。

  1. 原表100万的数据,每次查询出2000条,所以查询的总次数就是1000000/2000 = 500次,这肯定消耗不了多少时间。这里基本没有优化的空间,就算一次全部查询出来,也仅仅节省499次的查询时间(也不可能一次查询这么多数据)
  2. 查询的2000条数据,数据转换,然后依次插入到信息表以及关联表中,这里是一条一条解析执行的,总计插入数据库4000次,毫无疑问,这里是最耗时的。数据转换是必须的,而且是在内存中操作,所以耗时不是特别多;那么剩下的就是总计100万 * 2的数据库插入次数,能否进行优化呢?

首先想到的就是批量插入,批量插入可以有效的降低数据库访问次数。但是这里不能进行批量插入是因为需要取到自增长id,感觉陷入了困境。

当天晚上昨晚运动之后,抛开烦恼,觉得浑身舒坦。

突然,脑袋灵光一闪,数据库的自增长id是由数据库控制的数值,而自增长的步长我们是知道的,比如自增长步长为1,当前自增长id为1的话,那么可以肯定,下一条记录的自增长id就为2,以此类推。

那是否可以插入一条记录,取到自增长id,然后就可以计算出之后所有数据的自增长id,而不再需要每条记录都去取自增长id了。

但是这样也有一个问题,就是在数据转换导入的过程中,不能有其他的程序向表中插入数据,不然会导致程序计算的自增长id匹配不上。而这个问题根本不存在,因为数仓的数据都是由原始表计算插入的,在同一时间是没有其他的任务写这张表,那么我们就可以放心大胆的干了。

最后

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

image

image

再免费分享一波我的Java专题面试真题+视频学习详解+Java进阶学习书籍

我的Java专题面试真题+视频学习详解+Java进阶学习书籍](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB)**

其实面试这一块早在第一个说的25大面试专题就全都有的。以上提及的这些全部的面试+学习的各种笔记资料,我这差不多来回搞了三个多月,收集整理真的很不容易,其中还有很多自己的一些知识总结。正是因为很麻烦,所以对以上这些学习复习资料感兴趣,

以上是关于程序员的悲哀是什么?的主要内容,如果未能解决你的问题,请参考以下文章

知乎又炸了!为什么都说 Go 语言是后端开发职场加速剂?

悲哀啊,这么多年轻人都当领导了

程序员职场算法,一条真正的发展捷径

程序员职场算法,一条真正的发展捷径

职场Scrum改变了我的人生,聊聊它的价值和流程如何治好了我的完美主义和拖延症

程序员的悲哀是什么?