期望本科生的起薪都没有公司要…(The starting salary of undergraduates is expected to be lower than that of the company)

大家好,我是对白。

有多少人想过程序员生涯该如何走得更远这个问题?****在工作了一年多后,我总结了三点感悟:一是写代码不要长时间依赖Google,不要认为功能跑起来没错就行了,要主动去记忆一些技术点;二是要尽可能多写一些有价值的代码,简单重复性的代码最好少写;三是主动学新技术,看新论文,增加自己在程序员这个圈子里的核心竞争力。

为了让大家思考的更多,下面就给大家分享一位做了4年的程序员,今年却失业的故事期望****本科生的起薪都没有公司要,确实有他自身的一些问题,下面让我们一起听听他的经历,以下为原文。

作者:看天问地 | 编辑:对白的算法屋
https://zhuanlan.zhihu.com/p/507421427

作者:看天问地 | 编辑:对白的算法屋

https://zhuanlan.zhihu.com/p/507421427

2022年,我彻底失业了。在面试了10多家单位后,居然没有一个人给offer,为此对自己做出了反思。

首先总结一下面试,第一点我真的太不会表达了,十多年的技术生涯,使我欠缺交流的机会。第二点我的技术真的很菜,我做了4年的程序员,1年的前端,3年c#,这样听起来好像应该是一个经验丰富的程序员了。应该是在市场上很吃香。我当时也是这么天真地认为的。

为什么会到今天这个地步呢。4年程序员生涯,面试的时候我要求的待遇一降再降,从9k-10k。在从8.5k-10k,再从7-8k。这是在广州呢。7-8k不就顶一个本科生刚毕业的新手吗。为什么连这个数都没有企业愿意给呢?我越面试越没有信心,首先我要深刻地反思自己。

原因如下:首先我技术真的菜,不要因为3年时间就能拿高工资,你不追求技术进步,可能十年工资还是一样的。甚至还要贬值。3年间,我基本上班摸鱼,没什么任务给自己锻炼,身处其中的时候觉得挺好的,殊不知这是一个巨大的危机,以为自己碰上了一个好领导,殊不知严厉的领导才能督促你的技术进步。对于技术的理解只是达到能完成公司的任务是远远不够的。但是我当时天真的就是按照这个最低的标准进行的。写代码就是靠百度。功能跑起来没错就行了。从来不会去思考或者去主动记忆一些技术。然而我这三年就是这么过来的。一个混子程序员迟早要遭到报应的。

对于上面的问题。其实我在入职上家公司3个月的时候就已经意识到了。当时想着是不是要跳槽。因为领导总是安排一些我已经会了的功能给我做。就是简单重复机械的工作给我。当时还觉得领导是不是想把我赶走呢。但是由于一些原因我还是留下来了。但是领导还是给我安排这样的工作给我做,我就产生了消极怠工的思想。也就不怎么积极了。然后领导就再也没有安排有价值的任务给我做了。(之前有一段时间有的安排一下能稍微学到点东西的任务给我做)慢慢地我变成了一个混子。对于编程语言产生了遗忘,还不如刚刚学的时候。

现在看来我应该早点离开那家公司就好了,不至于浪费了3年的时光,人也废掉了。因为那家公司就是维护。修bug而已,然后前面程序员留下的代码惨不忍睹的。你无法从阅读代码中学到任何设计模式。而且你还要按照他的写法才能让程序跑起来。我应该在工作半年后走人的。

还有就是自己对于技术的追求只要求能完成工作任务就行。那么领导天天给你安排些简单任务。那你岂不是只有简单的水平了。事实上领导看我没啥进步也确实都安排简单的任务给我做。恶性循环导致自己水平越来越菜。而且还有我那可怜的策略,当时对自己的要求:对于技术只要能完成任务就可以了。一切以任务为导向。现在回过味来,才知道多么的可怕了。我应该以市场为导向的,而且是以更高工资的收入所要求的的对技术的要求和市场常见的技术栈为导向,明确下一份工作方向。直到我现在找工作才知道,我原来的公司技术栈是市场上最窄的技术栈。从那种公司出来,自己的身价不增反而贬值。(个人成分也很大,我在公司做的都是些边角料的开发任务)其实应该多多跳槽的。

总结前面说的。首先在一家公司发现对自己发展不利,要立刻跳槽。不然白白浪费大把的时间。第二对于自己技术的要求要按照市场技术栈为导向和更高工资要求的技术等级为导向。第三从事技术的年限不能决定你的技术高度,你付出的精力才决定了你的技术高度和工资。我做了三年的开发连7,8k都没公司给。其他人做了一年开发他可以到15k。所以大家要出工也要出力。不能自欺欺人。

这30多天的面试算是给我深深地上了一课吧,去掉了所有的不切实际的幻想。面试的失败当然和社会环境(疫情)也有不小的原因,如果你不在年轻了,工作了很多年的开发,水平还是很一般(面试又不会吹牛),那么极有可能会找不到下家公司。我现在体会到了程序员真的是一个高淘汰率的职位。技术不行就会被后来者代替。我还不到30岁,35岁危机就提前到来了。对于技术做不到顶尖的程序员来说,还是早做准备吧。程序员不能干一辈子,程序员职业更多是赢者通吃的格局

然后30岁了。发现有点干不动了。(一到下午就困地不行情绪浮躁,思维混乱,很难集中注意力在工作上,工作10分钟休息半小时)网上说的30多岁身体跟不上是真的。如果加上自己技术一般的话。其实不会多少技术精进的欲望的。30多岁干基层的活真的是干不动的(他需要脑子的灵活和反应快,不需要什么太多智慧技巧,这种年轻人显然更合适)高级的靠智慧的架构管理工作除外,其实应该考虑转型,可以在计算机行业里面,目前我打算做实施。主要脑子反应没有之前快了。做不了机械重复的脑力劳动了,而且想做一做和人打交道的工作,突破一下自己。

以上是对自己的4年程序生涯的总结,兄弟们会看到自己的影子吗。或者会被启发到吗。此文案例真实,希望能帮助大家规避类似错误,找到自己在技术圈的真实定位。

–更新–

谢谢各位兄弟们的评论和点赞,也让我学到了很多.(比如1.面试前花几个月啃技术书一样。2.多面试几家至少20起步。3.自己下班平时多总结技术原理性的东西4.各个公司面试程序员的套路千差万别。5.程序员内卷。6.考老师公务员上岸等)

可能每个人都有自己的路要走,目前自己找了一份实施的工作。薪资9.5左右。(自己还算满意吧,别到时候把我开了就行)。

首先解释一下自己为什么不做初中开发,不是钱不够有有诱惑力,而是高工资下隐藏的是脑力劳动量巨大,加班巨多,要知道人的硬件机能是随着年纪增加而降低。说到编程里面的所谓的技术栈,我也接触过各种前段框架后端框架的真的很多。各种技术h5技术,css3技术,包括现在出的.net core ,webapi等。技术栈在不断的演化发展,公司对于你掌握的技术栈要求会越来越严格,也会越来越新,老的技术栈市场可能没有市场了(也许这是新程序员比老程序员有优势的地方吧,我卷不动了,也觉得技术栈卷的意义不高)。

其实我有反思过这些框架和新技术的意义,曾经我也是一个乐忠于扩充自己技术栈的人,也因此曾经是面试达人。(也许因为自己那时候年轻)基本面一个过一个的。面试滔滔不绝的讲自己对于技术栈的应用理解,各种英文名词的花式堆砌,面试官听得一愣一愣的。但是现在回过头来想一下,我当时对于技术栈的理解是有多么的肤浅。技术栈好比是工具。技术栈掌握的多和深对于面试是有好处的。因为一次简单的面试很难考察到程序员的真正实力(内功,比如用工具解决问题的能力。判断问题分析问题能力,灵活应用技术方案的能力。)更多的考察你有没有相关技术栈,以及对相关技术栈的理解。

把程序员的能力分割成两部分:一部分叫做工程师素养(理科素养,分解解决问题的能力和其他行业工程师一样),一部分叫做技术工具(各种框架,各种语言,各种技术实现方案)。工程师素养好比是内功,技术工具好比是招式。好比一位散打运动员没有绝对的内力训练(爆发力,反应力,体力抗击打能力,腿力,臂力,战术策略训练)而只是学武术套路(螳螂拳,虎鹤双形手等)那么他也打不过几个人。现在的招聘市场更多的在在考察你的技术工具,而忽略了工程师素养,忽略我们不叫码农,不叫程序员,我们叫软件工程师。而又因为招聘市场的需求,是很多程序员投入到了内卷技术栈旋涡中。我的同事中有技术能力比较薄弱(人还可以,社会阅历丰富),公司因为他的写的代码某个项目差点黄了(后面开发主管和老板亲自去项目现场改代码才勉强挽救回来)他写的代码没有任何的对于问题的深入思考,和理解需求,代码字数极大,也不好维护。后来和他联系,他一周就找到工作了而且是12k左右吧。平时和他聊天中我知道他平时学习各种技术栈,http://asp.net,web前段等(他的技术栈很广)。

不得不佩服那位同事,他的社会阅历,就业市场的洞察力,谈判能力真心的高。其实反映了招聘市场对于技术工具要求比较高。对于工程师素养反而不太重视。市场有需求就会供应者。其实周围的程序员朋友都在卷技术栈,卷框架,卷技术方案,甚至设计模式都要卷(刻意的去使用)要不就是死命加班拼自己对业务逻辑的熟悉程度。

引出一下我对于框架,技术方案的理解上了。框架,技术方案只是工具,我甚至都发现他们相互抄袭了(当然你也可以说他按照软件约定俗称的规范写的)很多框架会很雷同,很多技术方案也很雷同(最明显的c#和java)我曾经面试过一个上机位软件工程师的工作,技术面试官和我说他们项目基本很多设计模式都用上了。对此我产生一丝怀疑,首先如果他在公司呆了很长时间是这个有可能,对于业务熟悉了,提炼除了业务的一般化的模式,模式的模式,用设计模式封装起来了,让代码更好维护和功能扩充。但是这需要他特别的刻苦努力。第二种如果他在公司呆的时间不长,对于业务问题都没有一个清晰的认知和见解。那我怀疑他是为了设计模式而设计模式(属于画蛇添足)。抛开这两种假设不说,首先他们公司是做医疗硬件的。用到的软件更多的上机位软件,大概比上机位开发难一点,比mes简单一点。总体难度不会很高。哪里会用到那么多设计模式呢。设计模式应该在合适的地方用吧。且据我对于程序员工作的了解,如果一个设计模式是灵丹妙药的话,能让软件系统趋向于有序,我们能优雅的喝着咖啡编程。为什么网上那么多程序员抱怨加班,bug改了又改,各种扯皮。(总之是不成熟的,混乱的),说明行业内大部分程序员对于设计模式应用和认识水平一般,以及设计模式本身不是软件危机的好的解决方案。

总结上文,技术工具在特定的问题,特定的环境中用吧。然后人人都说程序员需要不断的学习。很认同,但是我们要学习什么呢,学习给我们带来的意义是什么?上面已经说了大部分程序员在卷技术栈。但是这些技术栈真的有意义吗?(我承认他真的很有钱途,但是需要可能会需要你想追星一样追技术栈吧)这些技术栈的学习真的对于提高我们解决问题的能力,分析问题的能力真的有帮助吗?(上文说了我也曾经比较乐忠于学习各种技术栈,以为学会了自己就是高级程序员了,但自己在游戏公司的经历狠狠打脸了自己这种想法。面试很轻松进去的。但是进去了之后发现自己那点解决问题的能力,考虑问题的周全度,应对需求更改变化的能力十分的糟糕,当时感觉做开发太痛苦了,bug永远修不完。这个bug修复了,那个bug又起来了,招我进来的主管讽刺道你不是会游戏开发吗?怎么这个鸟样,当时我的尴尬呀。) 程序员难道不是对于数据结构,算法,计算机操作系统,以及他背后的线性代数,组合数学,高等数学,概率论等计算机基础理论吗?我们卷的东西不应该是对于我们人生和生活利益最大化的东西吗。

因为自己认知,所以我三年的时间在卷,数据结构算法,计算机操作系统,线性代数,离散数学,高等数学,概率论,数据库原理,软件工程的这些。(我承认自己懒惰于对技术栈学习,但是并不是评论区朋友说的那种懒惰)因为我想提高自己内功,不想进去被人怼,被人怂自己技术能力,事实上3年时间,我没有被人怼过,甚至领导解决不了的问题我都能够解决,给我分的技术领域我也是独挡一面。我是一个百度型程序员,大家不要见笑我。上文的没有深挖技术,和学习技术栈是存在的。但是也有特殊情况,首先我们公司技术栈很多只要会c#,sqlserver就行了。技术工具并不多。然后很多时候我会把解决问题当成是解题。数学以及一些算法的方法给了我非常大的启发。所以我才会说设计模式不要刻意的使用。每个阶段有每个阶段的代码。等你把你的业务流程认识深刻了,以及业务流程还有多少优化空间这些认识深刻了,在考虑设计模式那些的。就像解数学题一样。分为1.用合理的数学模型去描述问题。2.分析问题。3.解决问题。第一步的非常容易被很多人忽略。但这往往是非常关键一步。不同的问题描述角度带来的求解难度是不同的。比如用微积分计算长方形面积,和用初等数学计算长方形面积,显然这个问题初等数学解决起来更好。(亦或者是有些题目只有一个问题描述角度才能把问题求解出来)同理,写代码也是一样的,分析和描述业务模型,用哪种数据结构或者api对应还蛮重要的。设计模式需要慢慢来,否则画虎不成反类犬。3年时间我也解决过很多领导解决不了的问题的。(原因在思维方式,可能很多程序员敲多了代码之后忘记了自己在大学里面学的数学知识吧,敲代码和原来数学知识联系不紧密,导致有些问题不能解决,我领导就是这样的,他只会站在程序员和业务角度常规思维角度。跳不出来,当然遇到需要跳出程序员角度的特殊的问题就不行了,这种问题反而是我很拿手的)我解决的问题是特定环境下的问题,问题普遍性很低,而且较少遇到。领导技术能力是比较稳妥均衡。且他能解决的问题普遍性高。巧妙性是低了点,但是可靠。

在接着说下百度型程序员这个话题吧。听了这个名词大家是不是觉得太low。确实low,遇到问题总是百度。但是他也在节省你大脑中的内存空间,知乎里面有篇文章叫外脑计划,其实我很认同他,就是把编程知识分门别类的码放。放到有道云笔记。或者自己文件系统,然后建立索引。遇到问题我们去检索问题的关键词。百度就是外脑一样。把一些静态知识存储到网络的各个角落中。我们大脑负责组织这些静态知识信息变成解决某个问题的解决方案。我自己在工作中方法大概是这样供大家参考分析:首先我不研究具体的技术问题。不会做完一个项目之后写一篇技术博客(这样不好大家不要学),但是研究数学结构算法蛮多的,所以我的做法是遇到不懂的技术知识百度。然后遇到不好百度出来的知识,我会做推理分析,会用到命题判断,谓词判断,比如是存在还是所有,锁定范围关系,找到他的百度搜索关键词,或者直接举一反三不查自明会了。然后就是分析问题和场景内的业务逻辑,把静态知识拼合成问题解决方案,分析一下各个解决方案的好坏,评价出最高性价比的解决方案,性价比的评价角度是:自己如何能少干活,最快的把活干完这些,太懒了。然后时候也会做复盘。总结他是哪一类问题,之前遇到过吗以便下次遇到迅速检索调用,或做成代码模板的形式,遇到类似问题改改。

或者每个程序员工作的方式不一样吧,白猫黑猫能抓到老鼠就是好猫,不一定非要技术栈那么广,对api,技术理解那么深。才能解决问题的。我可以用最少的技术知识去解决问题。(但是一定场景下,特定公司下)能做到这一点是因为数据结构和数学功底的提高。因为数学题目给的条件(可以类比静态技术知识)极少的。然后却要让你去解决一个题目(类似工作中解决工作问题)大量的这种数学训练会使你在已知技术知识不多的情况下,运用数学思维(不能说出具体那个数学知识点,更多是启发,和解题训练的良好思维习惯正向作用)巧妙的解决问题。做题好比是解决工作问题的演练,他的思维过程很类似的,甚至解数学题的技巧需要更高。而且这种解决问题的能力能够推广到自己生活中,人生中。他可能不会让你大有前途,但是你在生活中运用这种能力,你能感受到他给你带来的种种好处。这也是我非常支持学习技术内功的原因。

总之计算机功底我还会坚持学习提高上去。尽管已经做了实施,同样的需要解决问题,分析问题和良好的思维习惯。同样也提醒大家在卷技术栈的同时,也可以回想一下大学数学知识,数据结构算法知识,他们挺难的,挺废时间的,但是收获也会很大的。是对解决工作问题思考过程的演习(希望大家不要像我一样保持不好其中的平衡)

最后欢迎大家关注我的微信公众号:对白的算法屋(duibainotes),跟踪NLP、推荐系统和对比学习等机器学习领域前沿,日常还会分享我的创业心得和人生感悟。想进一步交流的同学也可以通过公众号加我的微信,和我一同探讨技术问题,谢谢!

————————

Hello, I’m dialogue.

How many people have thought about how to go further in the career of < strong > programmers**** After working for more than a year, I summarized three insights < / strong >: first, don’t rely on Google for a long time to write code, don’t think the function is right, and take the initiative to remember some technical points; Second, write as much valuable code as possible, and write less simple and repetitive code; Third, take the initiative to learn new technologies and read new papers to increase their core competitiveness in the programmer circle.

In order to make you think more, let’s share the story of a programmer who has worked as a programmer for four years but lost his job this year < / strong >, < strong > it is expected that the starting salary of * * * * undergraduates is not as high as that of the company. There are indeed some problems of his own. Let’s listen to his experience together. The following is the original text.

Author: look at heaven and earth | editor: algorithm house of dialogue
https://zhuanlan.zhihu.com/p/507421427

Author: look at heaven and earth | editor: algorithm house of dialogue

https://zhuanlan.zhihu.com/p/507421427

In 2022, I lost my job completely< Strong > after interviewing more than 10 companies, no one offered < / strong >, so I reflected on myself.

First of all, to sum up the interview, < strong > the first point is that I really can’t express it. < / strong >, after more than ten years of technical career, I lack the opportunity to communicate. Second, my skills are really good. I have been a programmer for 4 years, a front-end programmer for 1 year and a programmer for 3 years c#, which sounds like I should be an experienced programmer. It should be very popular in the market. I was so naive at that time.

Why did it come to this point today< Strong > I have been a programmer for 4 years. During the interview, the salary I asked for decreased again and again < / strong >, from 9k-10k. From 8.5k-10k to 7-8k. This is in Guangzhou. 7-8k isn’t it just a novice who has just graduated from college. Why is there no enterprise willing to give this number? The more I interview, the less confidence I have. First of all, I have to deeply reflect on myself.

< strong > the reasons are as follows: first of all, I’m really good at cooking < / strong >. Don’t get a high salary just because you can get it in three years. If you don’t pursue technological progress, you may still get the same salary in ten years. Even devalue. In the past three years, I basically went fishing at work and didn’t have any tasks to exercise myself. I felt very good when I was in it. I didn’t realize that this was a huge crisis. I thought I met a good leader. I didn’t realize that strict leadership can urge your technical progress. The understanding of technology is not enough to complete the tasks of the company. But I was naive to follow this minimum standard. Writing code depends on Baidu. Just run right. Never think or actively memorize some technology. But that’s how I’ve been for the past three years. Sooner or later, a bastard programmer will be punished.

For the above question. In fact, I realized it three months after I joined my last company. At that time, I was wondering if I wanted to change jobs. Because the leader always arranges some functions I already know to do for me. Simply repeat the mechanical work to me. At that time, I still thought whether the leaders wanted to drive me away. But I stayed for some reason. But the leader still arranged such work for me, so I had the idea of slacking off. It’s not very positive. Then the leader never assigned me any valuable tasks. (there was a period of time before, some arranged tasks for me that I could learn a little.) slowly, I became a jerk. It’s better to forget the programming language than when you just learned it.

Now it seems that I should have left the company earlier, so as not to waste three years and people. Because that company is maintenance. Just fix bugs, and then the code left by the previous programmers is terrible. You can’t learn any design patterns from reading code. And you have to follow his writing to make the program run. I should have left after half a year’s work.

< strong > What’s more, their pursuit of technology only requires that they can complete their work tasks < / strong >. Then the leader arranges some simple tasks for you every day. Then you have only a simple level. In fact, the leaders see that I have made no progress, and they do arrange simple tasks for me. The vicious circle leads to the improvement of one’s own level. Moreover, there was my poor strategy, which required me at that time: for technology, as long as I can complete the task. Everything is task oriented. Now after looking back, I know how terrible it is. I should be market-oriented, and be guided by the technical requirements required by higher wages and the common technology stack in the market, so as to clarify the direction of my next job. I didn’t know until I found a job now that my original company’s technology stack was the narrowest technology stack in the market. If you come out of that company, your value will not increase but depreciate. (my personal composition is also very large. What I do in the company is the development task of leftover materials). In fact, I should change jobs more.

< strong > summarize the above first of all, if you find that it is bad for your development in a company, you should change jobs immediately. Otherwise, a lot of time will be wasted. Second, the requirements for their own technology should be guided by the market technology stack and the technical level with higher wage requirements. Third, the number of years engaged in technology can not determine your technical height, but the energy you pay determines your technical height and salary. I’ve been developing for three years and haven’t even received 7 or 8K from the company. Others have done development for a year, and he can reach 15K. So we have to work and contribute. You can’t deceive yourself.

The interview for more than 30 days taught me a deep lesson and got rid of all my unrealistic fantasies. Of course, there are many reasons for the failure of the interview and the social environment (epidemic). If you are not young, have worked for many years, and your development level is still very general (you won’t boast during the interview), you are likely to be unable to find your next company. I now realize that programmers are really a position with a high elimination rate. If technology is not good, it will be replaced by latecomers. Before I was 30, the 35 year old crisis came ahead of time. For programmers whose technology can’t be top, it’s better to prepare early. Programmers can’t work for a lifetime. The programmer profession is more of a winner take all pattern

Then I was 30. I found it a little hard to work. (I can’t sleep in the afternoon. I’m impetuous and confused. It’s difficult to concentrate on my work. I work for 10 minutes and rest for half an hour.) it’s true that the body in my 30s can’t keep up with me. If you add your average skills. In fact, there will not be much desire for technical excellence. In his 30s, he really can’t do grass-roots work (he needs brain flexibility and quick response, and doesn’t need much wisdom and skills, which is obviously more suitable for young people). Except for advanced intelligent architecture management, in fact, transformation should be considered, which can be implemented in the computer industry. At present, I plan to implement it. The main brain reaction is not as fast as before. I can’t do the mental work of mechanical repetition, and I want to do the work of dealing with people and break through myself.

< strong > the above is a summary of my four-year programming career < / strong >, will brothers see their shadow. Or will it be inspired. This case is true. I hope it can help you avoid similar mistakes and find your true positioning in the technology circle.

–Renew–

Thank you for your comments and praise, which also let me learn a lot (for example, 1. Spend a few months gnawing technical books before the interview. 2. Interview more companies for at least 20 starting points. 3. Summarize more technical principles when you get off work. 4. The routines of interviewing programmers in various companies vary greatly. 5. Programmer internal volume. 6. Exam teachers, civil servants, etc.)

Maybe everyone has his own way to go. At present, he has found an implementation job. The salary is about 9.5. (I’m quite satisfied. Don’t drive me at that time).

First of all, explain why you don’t do junior high school development. It’s not that you don’t have enough money. It’s that under the high salary, there is a huge amount of mental labor and a huge amount of overtime. You should know that people’s hardware function decreases with age. When it comes to the so-called technology stack in programming, I have also been in contact with various front-end frameworks, and there are really many back-end frameworks. Various technologies, H5 technologies and CSS3 technologies, including those now available Net core, webapi, etc. The technology stack is constantly evolving and developing. The company’s requirements for the technology stack you master will be more and more strict and new. There may be no market for the old technology stack market (maybe this is where new programmers have advantages over old programmers. I can’t move, and I don’t think the significance of technology stack volume is high).

In fact, I have reflected on the significance of these frameworks and new technologies. Once I was also a person who was loyal to expanding my own technology stack, so I was once an interview expert. (perhaps because I was young at that time) the fundamentals went one by one. The interviewer was stunned when he talked about his understanding of the application of the technology stack and the fancy stacking of various English nouns. But now looking back, how superficial was my understanding of the technology stack at that time. The technology stack is like a tool. Mastering the technology stack is good for the interview. Because a simple interview is difficult to investigate the real strength of programmers (internal skills, such as the ability to solve problems with tools, the ability to judge and analyze problems, and the ability to flexibly apply technical solutions.) Check whether you have relevant technology stacks and your understanding of relevant technology stacks.

The ability of programmers is divided into two parts: one is called engineer literacy (science literacy, the ability to decompose and solve problems is the same as that of engineers in other industries), and the other is called technical tools (various frameworks, languages and technical implementation schemes). Engineer accomplishment is like internal skill, and technical tools are like moves. For example, if a Sanda athlete doesn’t have absolute internal force training (explosiveness, reaction, physical resistance, leg strength, arm strength, tactical strategy training) but just learns martial arts routines (mantis boxing, Tiger Crane double hands, etc.), then he can’t beat a few people. Now the recruitment market is more investigating your technical tools, ignoring the engineer’s quality. We are not code farmers, not programmers, but software engineers. And because of the demand of the recruitment market, many programmers have invested in the vortex of the internal technology stack. My colleagues have relatively weak technical ability (people are OK and have rich social experience). The company almost yellowed a project because of the code he wrote (the later development director and boss went to the project site to change the code in person and barely saved it). The code he wrote did not have any in-depth thinking and understanding requirements for the problem. The number of words in the code is huge and difficult to maintain. After contacting him, he found a job in a week, and it was about 12K. I know that he usually studies all kinds of technology stacks in his chat with him, http://asp.net , web front section, etc. (his technology stack is very wide).

I have to admire that colleague. His social experience, insight into the job market and negotiation ability are really high. In fact, it reflects that the recruitment market has high requirements for technical tools. On the contrary, they do not pay much attention to the quality of engineers. When there is demand in the market, there will be suppliers. In fact, all the programmers around are working on the volume technology stack, volume framework, volume technology scheme and even design mode (deliberately use them) or working overtime to spell their familiarity with business logic.

Let me introduce my understanding of the framework and technical scheme. Frameworks and technical solutions are just tools. I even found that they copied each other (of course, you can also say that they wrote according to the commonly known specifications of the software agreement). Many frameworks and technical solutions are very similar (the most obvious ones are c# and Java). I once interviewed a job as an on-board software engineer. The technical interviewer told me that they basically used many design patterns in their projects. I have a little doubt about this. First of all, if he has stayed in the company for a long time, it is possible that he is familiar with the business. In addition to the general mode of the business, the mode mode is refined and encapsulated with design mode, so as to better maintain the code and expand the function. But this requires his special hard work. Second, if he doesn’t stay in the company for a long time, he doesn’t have a clear understanding and opinion on business problems. Then I suspect he designed patterns for the sake of design patterns. Put aside these two assumptions, first of all, their company makes medical hardware. The software used is more on-board software, which is probably a little more difficult than on-board development and a little simpler than MES. The overall difficulty will not be very high. Where will so many design patterns be used. Design patterns should be used in the right place. As far as I know about the work of programmers, if a design pattern is a panacea, it can make the software system tend to be orderly, and we can program gracefully with coffee. Why do so many online programmers complain about overtime, bug changes and all kinds of wrangling. (in short, it is immature and chaotic), indicating that most programmers in the industry have a general level of application and understanding of design patterns, and that design patterns themselves are not a good solution to software crisis.

To sum up, let’s use technical tools in specific problems and specific environments. Then everyone said that programmers need to keep learning. I agree, but what should we learn and what is the significance of learning? As mentioned above, most programmers are in the volume technology stack. But do these technology stacks really make sense? (I admit that he is really rich, but you may need to follow the technology stack like a star.) is the learning of these technology stacks really helpful to improve our ability to solve and analyze problems? (as mentioned above, I used to be quite happy and loyal to learning various technology stacks. I thought I was a senior programmer after learning it, but my experience in the game company gave me a hard blow. It was easy to get in the interview. However, after I got in, I found that my ability to solve problems, consider problems comprehensively and deal with changes in requirements was very poor. At that time, I felt that development was too painful and bugs would never be fixed It’s not over. This bug was fixed, and that bug came up again. The supervisor who recruited me said sarcastically, don’t you know game development? Why is this bird like? I was embarrassed at that time.) Isn’t the programmer concerned with data structures, algorithms, computer operating systems, and the basic computer theories behind him, such as linear algebra, combinatorial mathematics, advanced mathematics, probability theory and so on? Shouldn’t the things we roll be the things that maximize the interests of our life and life.

Because of my own cognition, I spent three years in volume, data structure algorithm, computer operating system, linear algebra, discrete mathematics, advanced mathematics, probability theory, database principle and software engineering. (I admit that I’m lazy in learning about the technology stack, but I’m not lazy as my friends in the comment area say) because I want to improve my internal skills. I don’t want to go in and be bullied by others. In fact, I haven’t been bullied by others in three years, and I can solve problems that can’t even be solved by leaders. I’m also on my own in the technical field I’ve been assigned. I’m a Baidu programmer. Don’t laugh at me. There is no deep excavation technology above, and the learning technology stack exists. But there are also special cases. First of all, our company has a lot of technology stacks. As long as we can c#, SQL server will do. There are not many technical tools. Then many times I will take solving problems as solving problems. Mathematics and some algorithms have given me great inspiration. That’s why I said that design patterns should not be used deliberately. Each phase has code for each phase. When you have a deep understanding of your business process and how much room there is for business process optimization, you are considering the design patterns. It’s like solving a math problem. Divided into 1 Describe the problem with a reasonable mathematical model. 2. Analyze problems. 3. Solve problems. The first step is very easy to be ignored by many people. But this is often a very critical step. Different problem description angles bring different difficulties to solve. For example, using calculus to calculate the area of a rectangle, and using elementary mathematics to calculate the area of a rectangle, obviously this problem is better solved by elementary mathematics. (or some problems can be solved only from the perspective of problem description) similarly, writing code is the same. It is very important to analyze and describe the business model and which data structure or API to use. The design pattern needs to be taken slowly, otherwise drawing a tiger will not turn into a dog. In three years, I have also solved many problems that leaders can’t solve. (the reason lies in the way of thinking. Many programmers may forget the mathematical knowledge they learned in college after typing too many codes. Knocking codes is not closely related to the original mathematical knowledge, resulting in some problems that can not be solved. My leader is like this. He will only stand from the perspective of programmers and business. If he can’t jump out, of course, it won’t work if he meets special problems that need to jump out of the perspective of programmers. This kind of problem is instead I’m good at) the problem I solve is the problem in a specific environment. The universality of the problem is very low and I rarely encounter it. Leadership skills are relatively stable and balanced. And the problems he can solve are universal. The cleverness is a little low, but it is reliable.

Let’s continue with the topic of Baidu programmers. After listening to this term, do you think it’s too low. Indeed low, problems are always Baidu. But he is also saving the memory space in your brain. I know there is an article called the external brain plan. In fact, I agree with him very much, that is, to put programming knowledge in different categories. Put it in Youdao cloud note. Or build your own file system and then index it. When we encounter a problem, we search the keyword of the problem. Baidu is just like the external brain. Store some static knowledge in every corner of the network. Our brain is responsible for organizing these static knowledge information into a solution to a problem. My own working method is probably like this for your reference and analysis: first of all, I don’t study specific technical problems. I won’t write a technical blog after finishing a project (it’s not good for you to learn), but I have a lot of research on mathematical structure algorithms, so my practice is to encounter technical knowledge Baidu that I don’t understand. Then when I encounter bad Baidu knowledge, I will do reasoning analysis and use proposition judgment and predicate judgment, such as whether it exists or all, lock the scope relationship, find his Baidu search keywords, or draw inferences directly without checking the self-evident meeting. Then analyze the business logic in the problem and scenario, put the static knowledge together into problem solutions, analyze the quality of each solution, and evaluate the solution with the highest cost performance. The evaluation angle of cost performance is: how can you work less and finish the work as quickly as possible? It’s too lazy. Then I will make a double offer. Summarize what kind of problems he has encountered before, so that he can quickly retrieve and call next time, or make it in the form of code template, and change it in case of similar problems.

Or every programmer works in a different way. A white cat and a black cat can catch mice. They don’t have to have a wide technology stack and a deep understanding of API and technology. To solve the problem. I can solve the problem with the least technical knowledge. (but in certain scenarios, specific companies) this can be achieved because of the improvement of data structure and mathematical skills. Because the conditions given by mathematical problems (which can be compared with static technical knowledge) are very few. Then you have to solve a problem (similar to solving work problems in work). A lot of this mathematical training will enable you to skillfully solve problems by using mathematical thinking (you can’t say the specific mathematical knowledge point, but more inspiration, and the positive effect of good thinking habits of problem-solving training) when you know little technical knowledge. Doing problems is like a drill to solve work problems. His thinking process is very similar, and even his skills in solving mathematical problems need to be higher. And this ability to solve problems can be extended to their own life, life. He may not make you promising, but if you use this ability in your life, you can feel the benefits he brings to you. This is also the reason why I am very supportive of learning technical internal skills.

In short, I will continue to improve my computer skills. Although it has been implemented, the same needs to solve problems, analyze problems and good thinking habits. It also reminds you that while rolling up the technology stack, you can also recall the knowledge of college mathematics, data structure and algorithm. They are very difficult and waste time, but they will gain a lot. It’s an exercise in the thinking process of solving work problems (I hope you don’t keep a bad balance like me)

Finally, you are welcome to pay attention to my wechat official account: duibainotes, which tracks the cutting edge of machine learning fields such as NLP, recommendation system and comparative learning. You will also share my entrepreneurial experiences and life insights on a daily basis. Students who want to further communicate can also discuss technical issues with me through official account and my wechat. Thank you!