不单单是码农_2021新年快乐

Hello,2021

在这里插入图片描述

首先, 祝大家 新年快乐,狗屎一样的2020年总算是结束了,希望新的一年里,大家工作顺心如意,生活安康,家庭幸福!
很久以前就想写一篇关于程序员的工作介绍,但是一直抽不出时间,趁着新年空闲和喜气赶紧写了一篇供我圈里朋友们观赏。

Anyway Happy New Year!


解决大家最常见的几个疑问

在这里插入图片描述

其实很多人在问我,你是做什么工作的,回答的时候,我们通常会说是程序员,但其实程序员也分很多种,大体上分成
1. 软件工程师
2. 硬件工程师
3. 嵌入式软件工程师

A. 第一种软件工程师就是大家口头上说的程序员(知名度更高),这一类也是我本科时候学的(当然我学的不是很深入,只会搭建个数据库做个购物网站这些简单的)。此软件工程师的兴起也就是近20年左右的事情,互联网起来了,需要更多的软件工程师,所以高校也都在培养这一类程序员,因为从成本上来说,培养这类程序员的成本就比较低(一般一台电脑就够了),教育也是适应市场需求的表现之一,此外,很多和我一样的同学肯定也听过不少培训机构,很多不满于现状(工资低,教育水平不高,不善人际(No bias))的人们也被吸引到机构接受培训,一般培训6个月就能出来胜任一份程序员工作了,因此不少专科生毕业以后还会选择再来培训一下,赚钱嘛。
所以说呢,庞大的需求,让更多人的注意力转移到了这些“卤蛋”朋友们身上哈哈哈哈(其实卤不卤蛋的跟遗传关系大,其次是卫生,和啥工作没啥关系,别乱带节奏),所以造成了大家问我啥工作的时候,就会把我当成是这种程序员,然后我又要解释一大圈,然后还是没听懂啥意思的情况太鸡儿多了。

B. 硬件工程师,这一类工程师就如名称所言,主要是对硬件负责和开发的,他们是我目前认为的,最厉害的一类程序员了,或者叫他们工程师比较合适,毕竟他们不敲代码的。在这里插入图片描述

接下来我就以我目前的浅薄见识来聊一下我印象里的硬件工程师们都做什么事情来给大家留个印象。一般来说,硬件工程师最基本的就是对所有的电子元器件都要了解(比如电容,电阻等等),此外他们熟知在不同的电路上要如何布线才能最合理,芯片选型一般他们也要负责(后面会说一下),等等很多很多太多太多高深的东西了,PCB,做隔离,信号质量,还有很多我听都没听过的术语,真的特别高深的一门学问,说个题外话,如果有人想着读博士,我觉得这三种程序员里头,硬件是唯一在学术上有特别显著成效的学术研究类了。

C. 嵌入式软件工程师,终于谈到我目前的工作了,其实完全可以看名字来理解,Embedded Software,嵌入式意思其实在于强调它的特点:嵌入! 那么我们可能觉得插入的那种设备就是嵌入吗,其实不完全是,如果你的理解是“插入的设备”,那么你的印象还是比较接近我们所说的“用户层感受”,但其实嵌入式,更好的理解应该是兼容,但不是产品与产品的兼容,而是它内部硬件上的兼容,打个比方,我们在选择芯片的时候,可以选择某一款进口芯片,当然,也可以选择我们国产芯片,他们都能实现我们的需求,只是在性能上的表现会有不同(当然性能肯定是很重要的!),那么我们会选择哪一种芯片就取决于市场(或者应用场景的需求,比如军工和民用)。另一方面,嵌入式这三个字的含义,是集成,就是将所有现有的条件集中表现在某一个具体的产品中,变成一种全新的产品,举个栗子,在我们小的时候用过的双飞燕鼠标,那种有线鼠标都有印象吧,那会儿还没有什么“无线wireless”的说法,当出现了无线的概念以后,我们就将这种无线通信模块添加到原先的鼠标模型中,那么,全新的,更有市场吸引力的无线鼠标就诞生了,再加点LED灯,游戏鼠标又出来了,再把信号的响应做的完善一些,卖的更离谱的电竞鼠标也开始收割大家的智商税了。所以这样一说,大概的集成的意思应该是能明白了(再不明白可以和我聊聊,保证不粗鲁对待)。
解释了一大圈,其实嵌入式做的事情也不是那么复杂了,我们所需要的核心技能就是以下的几个方面:
i. 能够熟练阅读英文文档(因为有的芯片手册是纯英文的)
ii. 能明白我们硬件工程师所设计的板子,知道上面那些电子元器件是做什么用的,也要能读懂这些原理图上的元器件,走线,各种各样的底层设计,因为我们的代码都是基于这些硬件原理图写出来的!
iii 能掌握软件工程师的代码编写能力,代码规范(方便给后面接盘的码农们阅读),严谨的代码设计思路。

简单说这样三个方面吧,后面我要阐述一下,我们这三类程序员日常是如何合作的!

码农们的日常合作

为了更直观的表达这种合作和工作模式,我将以一个不存在的案例给大家讲述:
在这里插入图片描述

----------------------------无人机项目--------------------------------------------
现在比较流行的各种无人机产品,小的可能几十块钱,大的可能上万上十万,那么这里我将以一个比较大型的无人机项目做一个介绍,这个项目涵盖了 “手柄,飞机,PC端”,相信看完以后你就会对程序员的区别感受更进一步!

首先,在进入这样一个项目时候,我们的硬件工程师会去进行所有需要的选材,我简单介绍几个(因为我确实没有真的介入这个项目):

  1. 硬件工程师会找到需要的电阻,电容,光耦等需要的电子元器件,然后会选几款合适的处理芯片,合适的传感器(飞行平衡需要的传感器,手柄也需要传感器才能感受你的控制,当然手柄用键盘的也可以),无线通讯模块(wifi,Bluetooth,Zigbee等等,把这种模块当成是一种信号发射器就行了),然后硬件工程师会将他们组成一个板子,通过硬件基本电路测试以后就递交给嵌入式软件工程师了,同时还会给我这些元器件和芯片的使用手册。

  2. 当我拿到这样一些材料以后,我首先会选择一个嵌入式操作系统,ucos,FreeRTOS这些都可以,看具体需求了,操作系统的概念可以理解成我们人的神经系统,只有一个神经系统,那我们只能将信息传来传去,干不了别的事情,那么接下来就是要将我们的手脚给放进去玩玩了。
    嵌入式程序员的思路非常清晰,主要解决两件事情:底层通讯和简单算法(代码逻辑那些就省去不说了),有了各种原理图,我们可以知道这块芯片能干点啥事儿,把它能干的事儿都罗列出来,先把底层驱动代码写了,这一类代码主要是我们对芯片直接干预!也是我们最主要的事情了,有了这些代码,我们就知道芯片在干啥了,换句话说,我们与硬件工程师之间的工作基本就结束了(当然,如果芯片或哪个元器件工作不正常,比如电压太低了啥的,还是要找那些硬件的算账的),那么第二个事情了,设计一个合理的算法(关于算法,我之前有过另一篇PID的有兴趣可以看看,百年前人的伟大智慧!),什么是算法,这里的算法要拿来干嘛?其实这部分算法不是所有的嵌入式都需要的,我大胆猜测无人机的平衡误差算法应该也不是在单片机上存储和运算(一个原因是内存不够,一个原因是运算能力不够),但是为了强调嵌入式所使用的传感器和代码之间的联系,我在这里想阐述一下:
    首先,嵌入式会把我们需要的传感器,比如水平位置的传感器,垂直位置的传感器,风力的传感器,有了这三个传感器,我们就能知道当前的飞机是横着飞呢还是歪着飞呢还是瞎鸡儿飞,也能知道当前风力的大小,简单来说,我们只需要这几个参数,得到了这个参数,传感器的任务就结束了。
    其次,有了这些参数,我们会找一些网上已经存在的无人机平衡算法,大胆推测应该也是类似PID的一种误差算法。那么除了这些参数,我们还会收到用户的飞行命令,飞哪儿去,降落,加速啥的,OK,接下来的事情就比较容易理解了,我们把用户的飞行命令和我们的参数一起加入算法,算法就会根据当前的飞机状态,生成几个输出参数,从而控制飞机按照我们想要的飞行方式飞行,那么如何让它飞行,这是另外一个问题了。

我们现在知道算法会产生一系列的参数,为什么这些参数能影响飞行呢,先要了解飞行器的飞行原理,通常来说是由四个舵机组成整个飞行的运动,
在这里插入图片描述

四个角,每个对角的舵机带动风叶的旋转,旋转的速度,旋转的正反方向,就早就了飞行的状态,一般1个对角控制飞行的前后方向,另一个对角控制飞行的上下高度,所以我们看到的飞行器如果是四个风叶的,那么它要拐个弯可能还挺费劲,你想嘛,就俩舵机前后拐弯的对吧,如果是十个八个的那种飞行器,那么就非常灵活了,同时对算法的需求也会更大,算法的复杂度也会更高。
言归正传,有了这些算法产生的参数,给了我们嵌入式工程师以后,我们就根据这些输出参数,转化为相应的电平信号,传输给那些舵机(可能有协议也可能没有)。到此为止,嵌入式的一大半工作就结束了。
那么,软件工程师的工作体现在哪里,之前提到的那个无线模块,除了遥控器和飞行器之间的通信,也会做飞行器和PC之间通讯,嵌入式软工将那些飞机的当前平衡状态(有的装了摄像头的,也会将影像信号传输回PC)通过无线的方式传输给PC,那么软件工程师有了这些信号,就可以在已经构建好的PC端网页上进行显示,可能是会显示一个飞机的模样,根据嵌入式传回的数据形成一个实时的飞行姿势,或者是实时的图形,所以简单说,嵌入式软件工程师和软件工程师的主要工作对接就在于信号的对接,至于信号的内容,你要啥就是啥,反正都是一顿无线电咱也管不着。所以软件工程师的主要工作内容就在于构建那样酷炫的框架(毕竟是给用户用的,用户都喜欢看起来酷酷的东西,当然有需要的话还需要一个美工或UI来设计一下飞行器的图形)。
基本上一个项目就是这些了,看起来嵌入式的工作很多,但其实不是的,另外两个也很多,只是我没有那么了解不敢乱写,但是用于大家理解这样的一套流程应该是没什么太大问题,如果你能看到这里,我相信,回家以后看看你身边的电子产品,其实就能知道哪些东西哪些功能在哪些阶段是由谁做的了,或者说也可以是一个产品经理了也说不定。

程序员之间工作紧密度如何

那么关于我们之间的工作,其实软件工程师的工作和我们的关系不是那么紧密的,尤其是可以看出,很多互联网公司,像某宝,某多多这样的电商,根本不需要硬件相关的东西,人家就需要做个漂亮,安全,有竞争力的网站或APP,所以他们并不招我们这样的嵌入式和硬件,所以…当时找工作。算球,总之嵌入式和硬件之间的紧密度是非常高的,通常我们在写代码的过程中就发现的问题,如果是硬件上的问题(比如我经常遇到某个同事给我电阻焊反了,查问题查了一周…),就马上联系硬件debug,与此同时,软件工程师应该在设计网页或APP或软件的架构等,但是这些和我们当时的研发是关系不太大的,通常我们嵌入式和硬件的工作做完了才会和软件方面做对接,如果对接的不好,90%也是找硬件,看是不是两遍的通讯涉及到的硬件电路不太好,所以说之前我提到的,硬件真的是一门深奥的学问也是在这里,因为硬件的经验积累只能靠时间,所以老硬件工程师是非常难得的,不像软件,一代换一代,当然作为职业规划,还是要多学一点,要有自己的特色,一专多能的老话我就不说了没意思,但是可以考虑在某一块自己感兴趣的地方多花点时间做积累和拓展,我最近被逼的去学电机的东西,刚入门的时候也是一头雾水的状态,现在渐渐的感觉那些冰冷没有感情的线圈啥的其实也挺好玩的。

程序员是年轻饭吗

其实从宏观的角度谈这个问题 :是的。
没什么好避讳的,年轻人的脑子灵活,干得多吃得少,粗饲料喂一口能跑地球三周。

但是在思考这个问题的时候,其实要考虑几个其他的要素:

  1. 是哪一类程序员?
  2. 这个人加入程序员的初衷是什么?
  3. 家庭环境因素
  4. 自我怀疑
  5. 公司战略需求
  6. 个人素养(与受教育程度)

那么我逐一展开我个人的理解,说的不好或者说的太绝对,请多包涵。

A. 这个程序员的类别很重要,之前提过,硬件工程师其实只要不是干的特别差,特别慵懒,它就绝对不会是年轻饭,所以我之前也提到的,最值得读博的学科之一。
至于软件工程师,单纯从技术层面交流,它们面对的技术更替是最频繁的,各种各样的架构,各种五花八门的东西,我记得我本科毕业时候比较新潮的H5,
在这里插入图片描述

现在感觉就比较low了,当然还有听起来更low的HTML,PHP哈哈哈哈开个玩笑,我也只会个HTML和PHP。总之他们这些程序员的年轻饭更替应该是绝对的主力,至于具体的原因,技术更替频繁导致的压力肯定是其中最重要的,但不是全部。
嵌入式的话其实还好,技术更替多但没有那么多,看历史发展就知道,嵌入式与硬件的发展在大约百来年以前就开始了,是基于基础科学的一门学科, 所以它玩不出太多的花(相对软件来说真的没多少花),但是它涉及到的硬件知识,就显得特别多,所以很多嵌入式离职不做这个行当的技术原因就是,他们发现这些硬件的东西,学很容易学完,但是怎么学都学的不深刻,造成了一个高不成低不就的状态(但是我个人觉得,心态要摆正再谈深入的问题),确实很难学完,百来年的东西让你工作七八年就学完了那还了得。

B. 初衷。有的人选择这个行业可能是因为兴趣,有的人可能是因为钱,有的人没有想太多,反正学什么都是学。很大一部分因为“年轻饭”离开的原因就是因为钱的那些人,就像他们加入的时候想的那样。大家总说程序员的工资很高,但是这个高,是存在瓶颈的,不是每个人跳槽都能翻一番。我之所以说他们因为钱加入也会因为钱离开,但是不绝对,只说我自己的切身体会,不少人咬咬牙渡过了培训,拿到了一份offer开始码农生活,赚到上万,但是有一部分会就会耐不住辛苦。让我们想像一下, 一个销售月入6k,一个刚培训完的程序员月入8k,但是时间久了销售变成了9k,程序员也大涨到了1.2k,但从数字上来说,我作为一个程序员确实赚的更多了,但是我的时间其实也被压榨了,失去了更多的个人时间,另一方面,工作久了我们就会发现其他能投资理财赚钱的门路也不少,何必要当一个码农呢,我只是想赚钱而已,所以这样一部分人流失的很快,但是一般体现在小的互联网公司比较多(但小公司的量肯定是很大的)。

C. 家庭环境,主要是年龄上去了,大家结婚生子,有的还要继承家产对吧,时间渐渐的被阉割了,那么自然而然的能投入到敲代码的时间肯定会少,不少人想干到一定岁数就去干管理层,干别的了,大哥,你们那么多技术岗都想转管理,人家毕业就干管理的找哪儿说理去?所以转管理的总归是少数,那么剩下的人都去哪里了呢,有待深思。

D. 自我怀疑。我在博客上看了很多人的各经历,b站也有各种各样被暴力裁员的vlog,撇开公司原因单单说我们自己的问题,有时候是不是我们的心态确实不够好,总想着攀高枝又不知道自己有没有那两把刷子,运气好搞到了一份offer,工资的确是上去了,但是入职以后发现能力和收入不匹配,我们就会开始玩儿命补习学习以匹配相应的能力,长此以往,心态很容易发生变化,开始否定自己,否定多了人就变了不是吗。另一个自我怀疑的表现在于频繁的跳槽带来的不稳定,这个最常见的就是刚毕业的同学,一味的为了获得经验而跳槽,确实经验多了,可是归属感也少了,至少我个人是很看重工作与归属感之间的联系的,如果一直都是为了double而强迫自己积累经验,那是很痛苦的一件事情,时间久了,自我怀疑是肯定了。

E. 公司战略需求。这个很容易理解,我刚入职实习的时候就听说,滨江某某A大厂今年不涨钱了,跳槽出来了一大批程序员跑去了竞争对手的B公司(第一次听到的时候真是笑死我了),然后A厂又大规模招了一批年轻的幼崽(很荣幸我当时也去面试了,还好没去),节约成本嘛,一万块招来的人培训几个月就能干三万块的人的活儿,美滋滋。企业在技术上的发展稳定以后,一般只需要留核心的研发及支持研发的部门,更看重的应该是市场和营销上的事情了,无可厚非。
相似的战略需求所带来的裁员的故事太多了,总之这一裁,年轻的还行,但是有很多上了岁数,本来就想在一个公司安安稳稳做自己本来就干的不错的那些程序员们就不太舒服了,他们要换一家公司的首要条件就是:如何让新的公司知道你有多强。 表述能力和运气好一点的确实在这次离职以后反而能晋升,但是程序员的表述能力,大家不用我说就知道有多尴尬的地位了吧,加上有些人根本就没准备好被这样离职,心里上很难承受的,毕竟继续程序员工作,还是离开这个行业,只是你内心的一句话而已,0 和1 就是这么的简单,能留下就留下来,想换个环境换个工作的自自然然就离开了。

F. 个人素养首先!我不是说!不是说专科,高中毕业,培训机构出来的程序员们素质低!绝对!没有!这个意思!
OK,我想表达的意思,就是很多层次不齐的人加入到程序员队伍中,虽然我们的主要工作就是面对电脑敲敲代码,与部门外的人打交道确实不多,所以人与人的交际确实比较窄,不像那些管理部门或者是市场啊销售的,也许在那些部门,你的一些小毛病可能容易被容忍,但是在研发是不会那么容易的,但是作为一个研发团队,我们更看重的是我们之间的沟通是否走心,大家钱都拿的可以了,又没有太多的竞争(当然大厂还是残酷的),如果一个人只是一味的完成自己的工作,不愿帮助别人解决问题,对我个人而言,我损失的是一次额外的学习经历,对他人而言,这个确实不是你的职责范围内的工作,但是你对整个团队的研发进度也只完成了“本分”这件事,我不是要鼓励大家完成额外的工作,但是我希望如果这件额外的事情你认为能学到什么,那就去尝试一下真的很好,至少我个人的硬件水平(我来以前是完全的硬件门外汉)都是在额外的机会中获得的,现在要我去做一个简单的硬件测试,不用人教也是没问题。
另一个素养就是硬伤,学历。可能很多人觉得程序员只要技术过硬就可以了,但是其实不是的,因为在技术上和我们竞争的是以万,数十万为单位的,那就很可怕了,本来就是什么聪明脑袋,怎么和你们愉快的玩耍?不少人因为学历的门槛,没办法晋升,比如两个程序员都要做产品经理,那么有学历的那个肯定会被首选,至少我做这个决策时候,我会考虑这两个人做产品经理的时候,哪一个与人沟通会更好,哪一个见识多,考虑的长远,这些要素都是没办法用笔和纸写出来,也没办法通过代码表达出来的,所以你的社交面广泛,你的学识(哪怕你学的与这一类完全不相关,但是肯定有不一样的见解)也会是不一样的。举个例子,真实案例,我的一个同事和一个实习僧,那个同事给我更多的感受,就是在完成眼下的工作,两个人在面对同一个问题的时候,那个实习生给我的感觉就像是,他在揣测这个问题所带来的影响和用户体验以及潜在的研发周期是否会被延长,但另一个虽然已经工作的同事却没有考虑这么多,我没有诋毁这个同事(虽然他还没入职就走了),但是工作久了以后确实人是会变的,你的素养就会影响你多少年之内还能保持一个长远的目标和态度,当然,说个题外话,这也是我为什么要写一些博客来记录我当前的感受,因为我也怕几年以后,我无法以现在的目光来看待一些事物。

程序员的脑壳

在这里插入图片描述

说了一堆严谨的东西,说点轻松的话题来结束这篇文章,老有人问我,程序员是不是脑袋瓜子都是葛优,我tmd就真的有时候想一耳刮子,把他扇到我部门里看看是不是有秃头,哈哈哈哈其实真的没有了,我部门三十个男的三个女的,没一个秃头,稀疏的有,但是人都四五十岁了,还不让人家稀疏一下?
我反正两周就要剪一次头发,长得太快了。
之前看过很多科普,谢顶就是遗传问题,有的人油脂分泌旺盛,有的人遗传秃头,那么压力大的时候掉几根头发也很正常。换句话说,长期高强度压力不会让一个遗传没有秃头的人变成葛优,但是会让有这个遗传的人提早变成葛优,这是没毛病的。
说了对不对的我也不管了,反正我家族里没脑瓜子亮的,我也不太在意这个,等哪天我脑壳上没毛了我再回来这篇博客狠狠打自己一顿脸吧。

  • 2
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论

打赏作者

Warmu

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值