💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 工作三年总结 三年,可以让人从幼稚走向所谓的成熟、也可以让人变得现实认清所谓的世界。 其实,世界什么样对我们来说并不重要,而重要的事是我们的心态将如何伸展。 总以为这一天来得不会太快,上学的时候特别希望自己能够早点步入社会。毕竟对当时的我来说大学或是研究生没有什么需要去学的内容。想在工作里做出成绩来告诉大家什么是对的什么是错的。可是现实往往和想象差的一条鸿沟,当实际生活并没有达到期望值的时候,又会寄希望于另一种方式。比如现在领导不认可技术方案的情况下,我又不想去倔。主要原因是领导对我的技术不信任,又实在是找不到离开的理由,反而读研成了可以逃避现实的一种手段。或许,读书的意义也在这里——做自己的摆渡人。 话又说回来我也不知道怎么去表达工作的难度,怎么跟做硬件的领导解释软件通信、服务端开发、前端开发、网页设计、自动化编译部署、系统集成测试、回归测试等等一系列的工作到底需要多少人月才能完成一个开发周期。总之每次来找我:小赵,客户要求做个摇杆设备远程控制水炮,需要做个网关设备通信协议转发,把提示做成呼吸灯等等。我都是好的,然后两天搞定。难吗,对我来说确实不难。 大致内容如下: 1. 拓扑图标会设计。PS照着实物扣一下三个小时搞定; 2. 拓扑图背景会设计。CAD把现场施工水图、电图画一下三小时搞定; 3. 网页也会写,VUE+SCSS或者原生,写个websocket通信,来火警拓扑图标变个样式,弹个视频窗口调用一下视频播放控件一小时搞定; 4. web端的视频播放器内核也会写。H5读视频流做个视频回放; 5. 设备通信我也会。netty作为NIO框架,自己写个私有通信协议做设备通信; 6. 至于网站开发MVC。spring网上大把大把的代码; 7. 测试、部署、运维。。。jenkins也好,docker、k8s\rancher也罢。真没什么意思,工具只是提高效率的手段,真正的内容还是看个人水平; 8. 文档编写。发明,软著,使用手册,产品手册,接口、开发文档,通信协议、原型图等; 做个云平台无非就是在这基础上多了百度地图、mqtt通信协议、中台管理。很难吗?本身系统就已经是控制几百台现场设备的网站了。就是换了蒙面,控制几百台电脑而已。大部分都是我一个人在撸,如果我离开了,有人能顶上来吗?我保留疑问。至少我觉得按我现在这个薪资范围内、年龄段,应该是招不到人。这点儿自信还是有的。以上大致做个工作内容小结。 不知何时开始有了写文章的习惯,内容更多的是泛泛而谈,即使总结也只是努力写得充实一些。突然想起了大学离校时写得那些总结,顺便翻开看了看,不禁有了疑问:哟,我之前能写出这样的文章?转眼过了三年,当初心心念念工作三年经验的坎如今就在脚下。试问问自己:这三年的努力有没有撑起了自己的野心、或者说是梦想一类的代名词,是否成为了曾经艳羡的那个人。还是说已经被现实磨平了棱角接受了自己的平凡,又或者成为了曾经所讨厌的那一类人? 一直以为自己没有变,觉得走在正确的路上渐行渐远。直到在国网出差时遇到一个和小伙伴性格类似的小姐姐。双目对视的一瞬间,想起了大学四年的点点滴滴。才发现我已经不再是曾经的少年了。主要还是变得沉稳了,心态发生了变化。毕竟这三年随着知识、技能、阅历的增长明白了很多。慢慢地发现了愿意学的始终愿意学,不肯干的就算推也是推一下动一下,有的甚至推了都不想动。很多时候没必要去强求,也懒得去交流了。遇到过形形色色的人,一眼也就看明白自己有没有开口的必要。 很多时候都是选择沉默,因为自己心里明白,一路走来,许许多多的人曾经帮助过我。教过我做人,教过我知识,教过我技能,教过我识人等等。曾经他们施舍予我善意,未来我也施舍予他人。用一句话表达:你认为世界都是泥泞不堪的沼泽、可又曾努力飞过云层看最美的天空?见到更多的是不曾努力,却又抱怨上天不公。那么这三年的努力我又用在了什么地方? 言归正传,下面是技术成长史,技术总结: 软件的本质:人在日益繁杂的现实世界中为了解决生活困难、提高工作效率、规范做事流程等方面,需要各式各样的软件作为工具来帮助他们自己。软件的诞生依托于具有实用价值。一款优秀的软件创造过程必然包含以下六个节点:思想的捋顺、文档的表达、流程的展示、代码的实现、软件的测试、系统的运维。这六个步骤任何一个环节的缺失都会对软件的交付产生不可磨灭的影响,这个影响更多的来自于负面。而一部分程序员的关注点仅仅停留在第四环——代码实现,从不站在问题提出者的角度考虑软件的设计、也不站在使用群体的方向考虑用户的体验。前三点可能独占了整个开发周期的三分之一到二分之一的时间,剩下的反而是不重要的重要。 第一点:把想法变成文档,并严格按照文档的指导实现代码 每个团队的灵魂程序员(俗称首席架构工程师)都可以看作画家,看到橙子皮上的纹理就想找张纸把它画下来;过了一段看到桌子上蒙了灰橙子皮皱了,又想让它跃然纸上的冲动我在好多人身上都能看到。在程序员编写软件的过程中更是屡见不鲜,甚至是越厉害的程序员越相信自己的能力之大——足以驾驭这种punchline(点睛之笔)所带来的负面效果。但事实上没有谁逃得过焦油坑(人月神话),越挣扎陷得越快。无论你是史前猛犸巨像,还是现代大力士,又或者是灵活的小老鼠。而文档的作用往往就是用来评估可行性,把抽象的思维具象化成文字描述,把个人的灵感转化为团队的力量。从而做到指哪,打哪。 第二点:软件实现的流程,可能是独舞 首席程序员需要极高的天分、丰富的经验和应用数学、业务数据处理或者其他方面大量系统知识和应用知识。并且在整个软件的实现过程中,需要有一个团队的人来为他进行服务。比如副手,能完成任何一部分工作,但他主要作用是作为设计的思考者、讨论组和评估人员。再比如编辑,出于最大透明度的考虑,必须创建各种文档,无论对内部描述还是外部描述。而内容更多是首席程序员的口述或者是草稿,进行分析和重新组织,通过各种参考信息和书目,并对多个版本进行维护,监督各种文档的生成等等。一切工作内容其实都是围绕首席程序员展开。但是目前对我来说,身边只有一个能写java,vue能写一部分的小伙伴。剩余所有一切工作内容都是我自己肝,包括写这篇工作总结,都是分了好几次细心裁决出来的。 第三点:写程序就是要一边完善,一边测试 测试也是很重要的一环。它可能达到了开发过程的一半占比。其实软件在实现的过程中本身就是一边构件、一边测试。直到构建的差不多了,接着进行组件化测试,也可以称为早期系统测试。当所有构件已完成,就进行系统集成测试。但是对于大多数项目,第一个开发的系统其实并不合用。它可能太慢、太大、而且难以使用,或者三者兼有之。因此,为舍弃而计划,无论如何都需要这样做。这个阶段可以认为是原型开发阶段,或者人月神话中所提到的试验性系统。接下来的工作无论是美化、性能调优、功能完善等内容都可以提上日程,作为二阶段开发指标。该阶段完成以后再跟一阶段开发出来的产品进行集成测试,无论是软件的兼容性、稳定性、健壮性,都会有一个质的飞跃。 第四点:尝试在不同环境下测试软件,把自己当成使用者 软件的安全性、兼容性、稳定性、性能、健壮性、易用性。第三点里原型开发阶段如果可以投入生产环境。程序员可以作为运维工程师对系统整体做评估给出优化方案,无论是软件设计成本、硬件造价成本、用户体验等方面做成记录,详细听取客户诉求、领导提供的设计方向,三方面信息综合得出优化报告。从而作为先决条件:优化基准、测试基准来指导二阶段开发。在开发的过程中,提出测试用例,改动部分详细记录作为回归测试的依据。自己先整机简单测试后交由测试人员做系统集成测试,修完BUG后测试再修改再测试无限死循环。因此必须明白什么时候该停下来。心里有一杆尺,测到什么程度可以作为正式版发布。再有bug放到下一版去优化。这块儿可作为顶级工程师的衡量标准之一:开发人员握在手里的bug数量永远是涵盖售后人员以及其他使用者反馈问题的80%以上。换句话讲,你使用者还没发现。我已经发现并且开始优化了,当你发现的时候,我已经测试完成并且已经有了新的版本。不排除特殊问题到现场才被发现。比如之前遇到的一个问题:国家电网的强电干扰导致设备通信波动,tcp包大量丢失造成网络重发引发网络风暴。 第五点:拥抱变化 计算机技术是一场革命,一个只属于我们的时代,早20年或迟20年都不会像现在这样林林总总。它更多的是变革,让人又惊喜又害怕。喜得什么呢?每天都有新技术新发明诞生,游戏越来越精良、电子设备越来越好玩、更新频率越来越快。曾几何时,买一样东西至少能用好几年。现在一部手机用个2,3年都算是老古董了。导致人们渐渐地出现了害怕情绪,害怕跟不上时代,信息大爆炸的时代,越来越容易学到新知识,获取技能越来越廉价。因此如果想让自己一直保值的话每天不停地学习就成为了人生必修课。那么想要升值的话,就需要更加努力地学。话锋偏转,我们这一代人需要学习的知识是上一代人的好几倍。所以有人说,这是最好的时代也是最坏的时代。那么对应到软件行业里,就是软件版本的不断更新迭代:计算机语言的升级、开发工具的升级、技术框架的升级、插件的升级等;新技术的诞生、新行业的诞生、新岗位的诞生无时无刻都在引诱着我们的猿们:这个技术岗位给高薪,大家快来啊。导致很多人在各种浪潮中迷失,不知道该学什么。其实只有最最最基础的,核心四大门才是通向彼岸的阶梯。数据结构、计算机组成原理、操作系统、计算机网络。 第六点:基础重中之重 其实还有数学,最重要! 说起计算机技术你最想问的问题是什么?在下列list里吗?这是我同事问过我的几个问题: 1. 操作系统是什么? 2. 为什么要有数据结构? 3. 计算机组成为什么是CPU、内存等? 4. 电脑之间是如何通信的?或者手机APP是如何通过wifi去上网的? 都用一句话解答: 1. 操作系统是由琳琅满目的进程组成的系统,你可以理解成车间各个岗位上的工人。有控制鼠标操作的进程、控制键盘操作的进程、控制桌面操作的进程、控制硬盘操作的进程等等。操作进程的系统,简称操作系统; 2. 数据多而杂的时候不好存储和查找,因此分门别类进行了二次抽象。先有结构后又天; 3. 冯诺依曼结构。仿生,类似人的神经系统; 4. 一道经典的面试题:当我们在浏览器地址栏里输入baidu.com按下回车,直到页面加载出来这段时间里,都经过那些步骤? 这四个问题现在略有心得,不过我觉得还不到正儿八经写的时候。那么这个总结到这里应该结束了。本文记录了工作内容,做事的方式,学习的方式。不希望将来自己本末倒置。 正如俗话所说,在汽车出来前,人们只是想要一匹跑得更快的马。马并不重要,跑得更快才是核心。而马就是代码的实现。