注册

谈谈这十年的代码生涯👨‍💻


博客终于完成了,借着这次机会,我想好好回顾总结一下这十年的代码生涯。有人曾说过如果一个人专注做一件事做十年,那么他会成为这个行业的大师。先别在意其出处与真假,遗憾的是这十年我并没成为专家或大师,甚至,于这个行业而言我才算刚刚入门。


三句话总结这十年



空白:不知道想要什么、想干什么、喜欢什么



image.png



活着的意义便是寻找活着的意义:挣扎、困顿、精神内耗、努力寻找出口



image.png



在我离开之前想要多认识这个世界一些:算是找到自己的信仰、人生的方向,不以物喜、不以己悲也不再随波逐流、随风飘扬



image.png


我想大多数人都会跟我一样经历这几个阶段,对此我想分享一些自己的经验看法:



  • 正在经历第一个阶段的小伙伴们不要焦虑,认识自己本就是人的一生中最复杂的事情,也不可能一天两天一年两年就能完成,因此再急、再焦虑都只是徒增烦恼而已,倒不如先做好眼前的事,而后慢慢的一步一步的认真的寻找和认识自己。
  • 正在经历第二个阶段的小伙伴们不要担心、恐惧,其实我比较赞同余华老师的观点,有时候精神内耗其实是一个好事情,因为你不安于现状,不满足于此,你在寻找出口也在认识你自己。这个过程毫无疑问是极度痛苦的,但你要相信不认识黑暗是无法知晓光明的,没有经历困顿挣扎也无法看清前方的路。
  • 正在经历第三个阶段的小伙伴们,首先恭喜你们找到了能为之奋斗终生的事业!但切勿忘了这个世界上唯一不变的就是变化,我们仍要面临许多挑战、选择与诱惑,坚持还是另寻他路?这是个问题!

由于从小就深受电影影响,看着那些"黑客"只需要动动键盘敲下几行神秘的英文就可以破解万事万物,当时觉得他们简直无所不能,他们的技能简直比魔法师还炫酷,由此编程的种子就种在了我的心里。


在读高一时机缘巧合下我参加了学校的技能大赛,便满心憧憬的开始了编程的修炼之路。当时主要还是用C#和winform框架写windows软件,我仍记得我写下的第一个软件——“识别十进制的位数”,我觉得计算机真是世界上最奇妙的物品了!会编程真的是太酷了!


image.png


第一个软件:"识别十进制的位数"


至此便一发不可收拾,也写很多很多有趣的玩意,界面也逐渐美观起来。



9748ae88be38dd7cb15d9e1d140f2c1c.jpg

一个计数器



d0ca4092c0f3f71055412aea3d4720df.jpg

仿QQ界面



21d16d3c3e7b77c9b2b66ab9e1554e2a.jpg

1024游戏


误入硬件


原本我是打算在大学读计算专业的,可是命运总是喜欢跟我们开玩笑,最后阴差阳错读了电子专业。不过还好,电子专业也没有跳脱编程的范畴,只不过面对的对象不一样了而已。不过由于自己一开始对软件开发的依赖导致我整个大学生涯对电路设计有着天生的反感,这也导致了我目前也没玩明白电路😅。不过也正因我的软件开发基础致使我许多编程课程都学得非常轻松😁


记得第一次接触硬件编程是STM8,当时作业是利用仿真软件基于STM8写个计数器,由于之前有软件的编程基础,在了解硬件一些逻辑后很快就上手了,于是乎很快我的第一个硬件作品也诞生了——"基于STM8的计数器"



b35fd4d52077821d761c68abaa82ec69.jpg

基于STM8的计数器


在完成第一个硬件作品后,简直感觉成就感拉满!当时我觉得做硬件比做软件还要有趣,因为硬件是实实在在看得见摸得着的,当它在跟着你预期的逻辑一步一步动起来的时候,荷尔蒙会飙升直击你的大脑。


有了第一次做硬件的快感,自己便上瘾了起来,开始参加各式各样的比赛。记得第一个参加的是校内的硬件比赛,当时做的是一个无线充电循迹小车,这对于当时的我而言真的是个超级工程,整个项目有着6个传感器,2个电机,若干个led灯需要控制,这对新手而言并不友好😭,不过好在熬了几个通宵还是把它完成了!



18bbd036dc166b1ce14b94c149fe0e9a.jpg

无线充电循迹小车


之后各种作业、比赛自己又陆陆续续做了许许多多的作品



a826fa2e29c74b9958f94a9b99be3ec4.jpg

RGB蓝牙灯



5ed9aeb671758c16a72bd053f77e3e87.jpg

局域网点歌器



eaf4117377b4eb727bfe6f69135a4653.jpg

一个超酷的软件


除此之外,我自学了大概半年的深度学习,不过就学了有监督部分,自己做了一些非常有趣的东西!



0bbc82b2e5f4747793da73126e9b3bf2.jpg

手写字体识别



49fda0163358995f46de720fa586e4f1.jpg

银行卡号识别


大家可以从我的作品中看到我是一个彻头彻尾的垃圾佬,由于经济窘迫,所有作品都是泡沫板、雪糕棍、热胶等等拼接而成(我要是有钱绝对搞一个3D打印机😶‍🌫️)。不过有三件作品可以说是我这个垃圾佬的得意之作,它是真的有用真的帅呀!


第一件:恒温箱


这是我的一个课程作业,当时老师要求围绕PID算法做一个作品。考虑到倒立摆已经被玩烂,因此思来想去做个冰箱吧,主要是正好寝室缺个冰箱,除了缺个冰箱以外,还缺个加热箱(冬天室友带饭会冷的)。好的,那就做个恒温箱吧!



649d8be75ba88e1c60ff7c6cc76eaaf7.jpg

紧锣密鼓调试中....


熬了几周终于弄好了,它是真的帅呀!不但可以实现最低-10°C的制冷还可以实现最高60°C的保温,重点是它不是PWA的粗稳,而是PID的精稳呀!!!!



524442bdabf4f8fd48385ac5a08dab60.jpg

成品


第二件:基于STM32的游戏机


这件作品也是我的一个课程作业,当时一直都想给自己的作品上摇杆(总觉得摇杆真的很帅),但一直没有机会,正好这次可以用一用。之所以觉得这件作品很酷,一是它很简约(东西不多)一块芯片、一个喇叭、一个三极管、二个摇杆,二是它是唯一件自己从腐蚀板子到完成全由自己动手的一件作品(以前板子都是在嘉立创画好,最后直接就收到成品板子了),因此觉得它很格外的珍贵!


image.png


image.png


第三件:消防喷水枪


这件作品就是比赛作品了,完完全全由垃圾拼接的,哈哈哈哈哈!可以看到转向用的是回收的摄像头拆下来的外壳,底座是月饼盒子,管子是割的亚克力水管,哈哈哈哈,整个作品最贵的就是红外温度传感器了,当时买着是几十块还是百来块?不记得了,总之精度很差很差,导致远距离的火苗识别不到,气死了🤯!当时也有考虑摄像头方案,太贵了买不起呀😭!!!


image.png


微信图片_20230823150823.png


入坑Web


在大三的时候,为了凑学分,我选了一门学分很高的课——《网页设计与实现》,当时的我又如何能想到这会是我以后为生的技术呢!那时候虽然每天都在使用网页,但对于网页的实现是一窍不通,也更看不懂网页中那些恼人的代码,虽然看起来跟我在WPF中使用过XML非常相似,但由于没有深究,则以为它们只是长得像而已,除此之外并没有什么瓜葛。


在此我先要感谢一下这门课的老师,他实在是教会了我们太多东西,这门课也是我整个大学生涯中收获最大最多的一门课(没有之一),相较于他而言,其他课程老师则显得格外不称职。


记得当时我们还是使用的Dreamware写代码,当时第一个网页写的是table布局显示LPL排名(游戏中二少年,哈哈哈),那时候还不懂css并且也不知道什么HTML标签,就学了个< table>



b565bb45143cb9211ed2266270f45a6a.jpg

第一个网页


学了CSS之后开始花哨起来,右边的奖杯是旋转的,整个底图是个视频,当时效果真的贼震撼贼帅(依旧是中二的LOL)



2a2396cdc42df70a876674e55cb216ad.jpg

学了CSS之后的网页


在掌握了JS之后,突然就感觉打开了任督二脉,最终做了一个网页音乐播放器,背景地图也是视频,并且会跟着歌曲变化,效果究极炸裂!



580ddf6f921ad393560e230c867f8b85.jpg

学了JS之后的网页


大四创业


大三下之后我们就没什么课了,然后在导师的帮助下去了他朋友的公司实习。当时的工作内容主要是后端,这段时间自己也学了非常非常多的东西,主要就是一些后端的框架/中间件之类的,包括SpringMCVC、Springboot、kafak、redis等等,当时自己也乐在其中(主要是有钱还能学东西)。我以为我会慢慢度过实习期,然后大四找工作成为一名后端工程师,但是命运总是喜欢跟我们开玩笑的。突然有一天我的一个学长跟我说需要一套针对他们公司的管理系统,就这样我约上了三个小伙伴走向了创业的路。


完成第一版


由于团队的小伙伴没人愿意写前端(当时普遍对前端有偏见,觉得写页面没有什么技术含量)于是不得已我便承担了前端开发的工作,由于这次合作是我主导的,因此我也承担了需求分析、数据库/UI设计等工作,其余的小伙伴分别负责后端/小程序/IOS开发。


大约在进行了2周的需求分析后,我们开始了开发工作,但很快我们遇到了第一个问题——“我们做的并不是他们想要的”,并且他们常常天马行空,一天一个想法,这导致我们不得不停下开发工作思考下一步如何做。最终在查阅资料和讨论后,我们决定先仔细了解分析需求!通过深入了解他们公司员工的工作,了解整个公司的业务流程,从而知晓他们的痛点,并且同时构造出整个公司的业务流程图以及每员工/用户在其中的位置,也就是用例图。


最终我们花了大概一个多月的时间完成了用例图,然后花了大概三个多月的时间,按照他们的需求编写出了第一套管理系统。该系统包含一些常见的公司事务,例如:请假、打卡、薪资计算也有针对他们公司本身业务的工单系统等。



f193d889cfe1afadebf33cb72e55992d.jpg

管理系统V1.0


发现问题


但很快问题便来了,由于公司架构/人员/流程/功能字段时常变更,但我们又是将流程/人员在代码中写死的,这导致他们每发生一次变更我们就需要改一次代码,这让我们非常头疼,于是我们寻求解决方案。


我们通过查找资料、看书、看社区很快找到了解决方案——"sass"。自20世纪90年代以来,以互联网为核心的现代信息技术在世界范围内迅猛发展,基于互联网为载体的信息化软件服务的在线租用模式SaaS(Software as a Service软件即服务)日渐成熟,为中小企业开展信息化建设提供了更合理更高效的发展平台。当然对于软件开发商而言从卖“代码”转变到卖“服务”的难度是可想而知的,他们需要对业务进行高度的抽象,从中找出它们共性与差别,以此用同一套代码来满足不同企业的输入、处理、输出数据三个环节。



23748f027adcbf7ead3b432b19649547.jpg

程序模型


因此当前SaaS类系统的抽象也是从这三个环节入手的,数据输入部分为动态表单引擎、数据处理部分为流程引擎与计算引擎、数据输出部分为报表引擎。表单引擎作用是由用户拖动一些组件构成所需收集的信息,有点类似目前许多的在线问卷调查网站;流程引擎决定了用户填写数据的处理对象和流程走向;计算引擎计算和处理填写的数据;报表引擎则是自定义展示数据内容。



a597df7ce9489e0b8176d96eddb4efe8.jpg

SaaS软件主要组成部分


如今我依旧认为“sass”是当下中小型企业降本增效最好的且最优的途径,sass的发展远不为此。找到解决方案后我们深知这次改动将是巨大的,并且这个项目也会变得非常困难的,因此我们决定把一切推倒重来并把之前的遇到的一系列问题全部解决。


推到重来


我们决定使用码云管理代码,各个端的代码分别存储,且加上一个文档仓库。以解决我们消息闭塞无法总览、难以合并、查阅代码以及分配、总览任务问题。


image.png


仓库架构


文档仓库中存放需求分析文档、用例图、架构图、数据库设计、接口设计等内容,方便大家查看修改


image.png


文档仓库存放内容


我们再次对需求进行了更加仔细的分析,结合以此进一步完善和改进了系统用例图。


image.png


系统用例图


由于之前开发中经常遇见忘记数据库依赖关系,无法总览全局的问题,因此我们决定根据用例图先画出数据库设计图,设计图让我们能够更加直观的看到各个模块的依赖关系,并且每次修改我们只需要共同基于设计图改动即可,后续可根据设计图生成表结构。


image.png


数据库设计


根据用例图与数据库设计,我们设计出了系统整体架构


image.png


系统架构


在之前的开发过程中,由于我们没有接口文档,这导致会有许多耗费时间且多余的沟通步骤,并且一些code码、状态消息等内容并未得到统一,因此我们也规定了相应接口文档的格式、参数等。


image.png


接口文档


我们开始规定、分配任务,并将其统一放入码云管理,规定其任务周期以及里程碑,对项目整体时间进行监管把控。


image.png


任务规划、分配、监管


完成第二版


在完成了这一系列的前期工作后,我们便开始着手开发了,大约用了半年多的时间,我们成功的完成了大部分的内容。正如我们起初设想的那样,整套系统分为三个端:管理端(web)、员工端(App)、用户端(小程序)。


image.png


系统总览


管理端主要设置整套系统的应用/查看应用提交的数据内容,应用分为固有应用与自建应用。固有应用指的是无法使用动态表单生成的应用,需要直接通过编写代码;自建应用则指的是用户可以自行通过动态表单/流程引擎/视图引擎创建的应用。


image.png


管理端设置页面


自建应用通过表单引擎拖拽组件生成业务需要填写的信息、通过流程引擎决定该业务的流程,并规定该业务的权限,面向的使用对象等,视图引擎则决定了该表单需要在首页中展示/统计的数据。创建应用完成后,该功能则会同步出现在有权限的用户的小程序中以供填写数据申请业务。


image.png


创建自建应用


image.png


设置应用表单


image.png


设置应用的流程



83500002cd03f267852926c02389cfea.jpg

用户端显示应用



60e62662be757f390966350c72159503.jpg

用户端提交申请


image.png


根据设置的流程流向相应人员处理业务


image.png


总览该应用数据


为了满足自建应用无法完成的需求,我们也写了许许多多的固有应用,包括了员工打卡、仓库管理等等,但遗憾的是我并没有记录下相关的内容图片。此外我们准备着手重构动态表单部分代码,然后将其开源!


image.png


准备开源的动态表单


在我们完成这版系统后,恰逢毕业论文选题,于是乎我选择了自主命题,并打算以这段工作来完成自己的毕业论文!


image.png


毕业论文


发布


在我们完成第二版没多久,我们便开始对外开始宣传这套系统,为此我们做了许许多多的工作,由于资金非常紧张,我们负责了许多设计工作,包含设计了一些海报、易拉宝、宣传册等等。


image.png


自己设计的相关海报



d78b0e3da3ca7d0475c75135d0db8bd1.jpg

自己设计的宣传册


临近毕业,我们宣告失败


在临近毕业前几天,很遗憾最终我们还是失败了,失败的原因有很多,但直接原因是我们遇到了无法解决的技术难题。该系统一开始其实就是一个问卷调查系统然后加入一个流程引擎,这造成了一个问题,动态表单与动态表单之前无法产生数据关联,导致形成了数据孤岛。为此我们在动态表单中加入数据关联组件,也解决了一对一、一对多的关联,但多对多一直无法解决,大概挣扎了两个多月,但还是没有寻得解决方案。


虽说直接原因是技术难题,但我知道对于一个团队而言是永远不会被技术难倒的。其实主要原因还是我作为团队负责人,在团队遇到挫折与困难时没有积极调和团队氛围,不但没有积极鼓舞团队成员,反而还因为困难整天闷闷不乐,导致团队氛围跌至谷底,最终解散。其次我并没意识到软件是迭代出来的,并不是一面世就是完美,但我每次遇到问题时都急于解决不去划分轻重缓急,常常推到重来,这虽然使得软件更加完美,但也使得软件开发周期不断延期,也不断重复多项工作,打击成员的积极性。


当然团队成员也或多或少有问题,但归根到底还是我的问题,我并没有挑选更为合适的人选加入团队,这导致耽误了团队,也耽误了他们,我直到现在仍觉得愧对于他们!


虽然说项目最后失败了,但我并不后悔,直到如今我也常常怀恋我们把酒论码、午后敲码的日子,收获很多也很快乐!


image.png


image.png


image.png


回首十年


记得临近毕业时我的导师曾对我说“你太浮躁了,希望你离开学校之后好好改一改”。起初我也认为自己浮躁,常常东搞一下,西搞一下,并且急于求成,但如今我却有了不同的看法,是浮躁但不完全浮躁,我觉得我本质上是在寻找。由于刚进入大学,各种技术眼花缭乱,而且我并不知道对于这个专业而言,我应该打好什么样的基础,这些基础对应这哪些方向,以及最重要的,我应该如何才能学好这个专业。虽然我整个大学都非常努力,但遗憾的是直到我大学毕业都没有搞清楚这些基本的问题,一直在技术表面跳来跳去。由于缺乏清晰的认识以及能告知你这些的人,因此我唯有的办法则是不断地试,我只有不断的去尝试才能知道上述问题的答案,我也只有不断的尝试才能知道接下来要走的路。



最近又读了一遍《月亮与六便士》,产生了很多新的感悟,我想作为这篇文章的结尾再好不过了。



我们就如同被船掀起的浪花,被前浪牵着走,被后浪推着走。大多数浪花都会随波逐流,有一些浪花在这个过程中趁着风势逐渐变大变高,惹得其他浪花羡慕追随,给浪营造了强大的假象。也有极少数浪花有了此生必要到达的目的,开始挣脱前浪的牵引,摆脱后浪的束缚,这也打得前后浪措手不及,乱了阵脚,伤痛欲绝。


此时的我们想必早已争相着各抒己见,吵得不可开交。更有甚者大肆宣扬诸如“满地的六便士他却看到了月亮”等等片面观点想要其定为“真理”,殊不知我的叔叔亨利早已说过“魔鬼总是随心所欲地引用经文。他记得从前一个先令就能买到十三只上等的牡蛎。”


最后提一句,大学教育改革并不应该一味给大学生增压,因为我认为其本质并不是大学生懒散不愿意学,而是即使是努力学了也不会有太多收获。

作者:汪啊汪QAQ
来源:juejin.cn/post/7270464435297501196

0 个评论

要回复文章请先登录注册