程序员人生作为一名程序员,有哪些感触很深的经历?
2024-05-16

每次去面试都感触挺深,为什么做着同样的事,对方啥都懂,而我…只能灰溜溜地离开~

凡人和天才之间的距离遥远得仿佛无法触碰

N 年前,刚入行,小白一枚。在某国企用 Oracle 的存储过程写 CRUD,做的系统都是 ERP、OA、MES 之流。后来国企搬迁,战略改革,向着信息化发展,投入数亿重做所有的软件系统。那时找了很多家国际上很牛的 IT 公司来集成办公。

其中有个比较牛的韩国公司,他们一共几个人,不坐集团提供的免费班车、免费酒店、免费自助餐厅。自己雇司机、自己住五星级酒店、自己带饭。周五下午飞韩国,周一上午再飞回来。

由于语言不通,所以我们日常只会用三流英语加上手势比划交流。开会的话,他们会带一个中文翻译。

他们其中有个年轻人,姓朴,也就 30 岁出头。人长得帅,看上去也很高冷。每天沉默寡言,但开会时,在业务设计上存在的一些问题他总是能一言道破。所以我们一直认为他是个业务人员。

后来才知道,我们用的 JAVA 集成框架其实都是朴欧巴主导开发的,他在这是做技术支持,原来是个技术架构师。

有一天晚上加班,我从朴欧巴旁边路过接水,看他在打 LOL,刚好是结算界面,这帅哥竟然是个王者,还是国服的。

在一个办公室呆了几个月,我们混熟了。一是我碰到问题就喜欢找他,二是那时我也打 LOL,卡在大师上不去。加班摸鱼时就让他双排带我上分,硬是把我带上了王者。

大家混熟以后了。我发现朴欧巴人很好,是那种外冷内热的人。经常送我自己做的泡菜,手工制作的火鸡面。

而且我发现他竟然在日常交流中学会了很多中文。平时没留意,直到有一次办公室锁门。我地记得他平时都是提醒我“Do you have your keys?”,但不知道什么时候他开始说:“你带钥匙了吗?”也是那一次我才发现我们的差距,因为这小半年,我只会说欧巴、啊你啊塞药、康桑米哒等极少几个韩语。

那时候开始跟风刷 Leetcode,遇到一个中级题目,卡住了,搞了二十多分钟没做出来。请教朴欧巴,他扫了眼题目,没有立马写代码,过了 30 秒,把我写的没通过的代码,调整一个关键的顺序,pass 了。这次真的让我对他刮目相看。

这么久一直没有问他工资,后来无意中聊到,他说平均一月的话,大概 3000 万吧。

把我吓了一跳,后来发现是韩元,换算了一下,也是 17 多万人民币。刷新了我当时的世界观,原来码农的天花板这么高。后来想想,也不是遥不可及,大概是阿里 P8-P9 的标准。

一年后,项目结束。朴欧巴一行人回到了韩国。虽然还有彼此的 Facebook,但也很少联系了。

此后的几年,我一直在努力提升技术,经历了一些大公司,见识了很多牛人。但没有谁给我留下的印象能够超过朴欧巴。

直到现在我也达不到朴欧巴当年一半的水平。

经历了保持好奇心的同事,我有个同事,技术大牛,我刚进公司觉得自己很厉害了,可他更加厉害…无论是宽度还是深度,他有着强烈的好奇心,遇到问题就揽过来,So.,

保持好奇心,对于程序员来说,非常重要!

邀请我来回答这个问题,真是找错了对象。我的职业不是程序员,我只是一个普通的电气工程师而已。不过,在我的工作中的确与编程有许多关联。

刚就职大国企时,我在技术开发中使用了许多51系列单片机。由于配电系统中存在大量谐波和干扰波,我需要对输入参量进行处理,真是麻烦,记得这输入参量处理程序我就设计了近半个月,做了许多试验,最后得到较好的效果。后来改用PLC,程序设计就容易得多,把这个问题给彻底地解决了。

可见,在工作现场使用单片机搞设计不是一个很好的办法,也由此看到PLC的优势之所在。

后来到了外企,从事于低压成套开关设备的设计和制造工作,工程项目几乎都是国家重点工程。对于多路市电进线直接的断路器投退操作及倒闸操作,原先利用继电器来构建,但总觉得设计起来很麻烦,也有点不到位的感觉。后来在某石化工程中我用PLC来执行逻辑设计,虽然程序比较复杂,但控制效果比单纯的继电保护方式好很多。

由于工程很多,我把PLC的程序优化成为标准格式,供电气工程师们设计使用,取得了很好的效果。

再后来,我负责电力监控工程的设计,这里有许多电气工程师。刚开始我们只能依赖其它公司提供监控软件。后来我以SQL-SERVER数据库为基础,再用VB设计了具体程序界面,构建了中低压配电网的电力监控系统,并在许多工程中使用,效果不错。

某日,在某地铁工程中,一位地铁的配电室工作人员说电脑真聪明,我开心了半天!

我发现编程其实不难,难的是操控原理设计和逻辑设计,这才是关键!

我妻子在外地工作,她是厂医,调动回来后在我女儿就读的小学当校医,她是全市为数不多有医师执照的校医之一。我得知她们在做小学生的身高体重测试以控制肥胖率,学校里有1500多位学生,每位学生有十几项指标,且每半个月就要轮循测试一遍,非常麻烦。我利用微软的ACCESS数据库配套VB制作了体检程序供她们使用,效果还不错。后来改进后,被当地的疾控中心推广到全市几百所小学和中学使用,效果良好。

某日,一位老师看了电脑操作后,说了一句:“电脑真聪明!”。是电脑聪明吗?还是人聪明?我又开心了半天。

在外企,负责公司网络的员工都毕业于计算机专业,他们的待遇水平和受重视程度远低于我们这些电气工程师。其实也不奇怪,毕竟是在电气工程方面的外企,行业和专业决定了电气工程师们更吃香。

记得西北某采油基地配套电力监控系统,负责软件界面的设计工程师告诉我,系统验收时客户不喜欢主页上的厂区照片,因为图片上的山都是光秃秃的,非让工程师把山上画满树林才行。后来我自己也多次遇见类似情景,慢慢地就喜欢绘画了。下图是我画的水彩画之一:

这才是意想不到——编写程序还能在绘画方面有所收获,开心!

动笔之时,本来想命名为“个人程序员的创业之路”,转念想想,我目前的主业还是打工挣钱,所以不能算真正创业,最多算副业。

想写这篇文章,是因为最近看到了太多同行失业,在网络上写他们转行或创业的故事。其实我和太多高龄程序员一样,也面临过了35岁不好找工作的年龄。

可日子总归要继续,总不能让我一个985的理工科硕士,真去送外卖吧?虽然已经有985毕业的同行程序员去送美团快餐去了,而且那哥们还时不时自嘲一番,但毕竟是少数,不能代表整个程序员群体,尤其不能代表“有水平的程序员”群体。

于是将我个人,对程序员做副业的思考和探索,也和大家聊聊吧。一来记录一下,二来给自己的产品做一些推广。程序员不要气馁,特别是有想法,有能力的程序员,做自己的软件,做国产可替代,一定是一条康庄大道。

在此之前,我已经写过一篇文章,《我为什么要开发自己的软件——CC Compare作者的自诉》,反响平平,而且还引来一部分同行的嘲笑,说软件做的烂,不会有市场。

最早文章是在头条发布的,不过头条推广实在太少,个人有广告嫌疑的文章更是限制推广,后面我转发到知乎去了。在《我为什么要开发自己的软件——CC Compare作者的自诉》中,我对个人程序员“能够做什么”,“该去怎么做”,“选择做什么”这几个方向做了大概的介绍。由于我本人目前还不算副业成功,所以还不能一本正经的说自己的结论或经历就是真理。只是说提供给同行一个思路或方向,或者就当闲时看看,至于能不能体会或学到什么,那就是各位看官自个儿的事了。

前文说过,我被一家头部互联网游戏公司裁员后,重新开始了第三段工作的寻找之旅。反思前面两次工作的糟心点后,我决定找个能够工作和生活平衡的工作,毕竟一个人不能总是抱怨两次被蛇咬,但又不反思自己的选择,这是无济于事的。当时我33岁,正是职业生涯尴尬的年纪。这个年纪再不慎重选择,可能后面没法动了,只能坐等被裁。我承认我还能够干一些事情,智商也至少算是程序员的中上水平,但是混的不算突出,只是一颗螺丝钉,过去做的事情都是比较无趣和枯燥。这次我不首先看重钱多,首先看行业稳定和加班不要太多。程序员干久了,越发觉得拼的其实是身体,而且要拼身体的工作,往往是痛苦和枯燥的。

我的第三份工作,以降薪三分之一的待遇,到了一家小公司。

到了这家小公司后,我整个人真的缓过气来了,不用再像之前那么累,可以有周末,假期也不用24小时电话值守,这一切让我有了更多的思考时间。我决定开始搞个副业,或者说是开始创业,看看能不能打破自己职场35岁危机,为未来谋个更好的打算。

之前我自己做过多款小软件,都不了了之,可以说是失败了。虽然是想着做大做强,甚至想通过出售注册码,但是都还没能走到“有市场”这一步,就已经彻底死掉了,因为连用户都没有,其他同类产品一是一大把,人家还做的更好。

不怕大家笑话,我就说一个我正儿八经做了3个月的一个软件吧。一款使用golang语言做的个人论坛系列,后端使用beego+mysql的组件,前端使用html+boost,没有使用前后端分离。关于这个前后端分离,还是同行吐槽我的产品时,留言说:“做的很烂,前后端都没有分离。”那时我才第一次有此概念。我以前也没有做过网页前端,也不会php/java,所以当时对前后端分离压根没有概念。

为什么要做一款个人论坛软件呢?最主要的原因,是看了php编写的论坛软件discuz,其作者戴志康是一名80后,人家是做了一个论坛软件,就实现了财务自由和个人成功。我为啥不能做呢?java和php这些语言的速度是个大问题,我如果可以使用golang去做一款,岂不是更快更好!于是我利用业余时间,调用了一下golang的论坛系统,自己鼓捣出一款个人论坛的雏形,还傻乎乎的拿出去开源了,结果可想而知,无人问津。我还没有死心,到相关论坛去发帖,寥寥无几的回复,没有说要参与开发的,反倒是有好几个不看好的回复,“这个离能用极其遥远”,“出发点可以,等它能用,黄花菜都凉了”,诸如此类。

2017年我入职游戏公司后,外加我的女儿出生了,那段时间来,我非常忙,于是也没有心思去继续完善个人golang论坛系统了。不过我倒是用我的个人golang系统,开发了几个简单论坛,不过最终都关门下架。等到我对个人论坛系统彻底死心后,反思一下自己当时的境遇,实在没有太多个人时间去做产品,所以如果一个软件产品虽然想做,但是超过一个人能够维护的极限时,建议还是不要贸然动工。这是其中一个失败的案例,失败在于:自己不熟悉,外加工作量超过个人极限。

就这样浑浑噩噩到了2019年,我在第三家公司站稳了脚跟,平时工作也没有之前两家公司那样类似996的忙碌,外加女儿当时已经1岁多了,比刚出生时好带许多,我又开始琢磨自己的“技术变现”之路了。思考一番后,我觉得还是要走软件技术的本行,而不能去做其它不熟悉的行业,不管能不能成功,我对此是笃定的:不到迫不得已,千万不能丢掉自己的本职专业,而换行去做其他事情。另外对严重依赖体力劳动的事情,比如快递,卖盒饭这些事情,想都不用想,那个苦不是一个读书十多年的理工男,可以去长期吃下来的。

既然是技术创业,那就要从选择产品开始,做一个什么好呢?一个是自己要能做,要有这个技术实力;二是体量不能太大,不能超过一个人可以完成的极限;三是要能解决一定的市场需求,即要做一个能够解决一些问题,有真实市场需求的产品。尤其不要忽略第三点,许多人因为没有看清市场形式,而做了一个自以为很有市场的“伪需求”产品,依我看,许多个人自媒体自吹自擂的产品,都从一开始就犯了这个大毛病,对此我不方便具体点名举例,否则容易得罪同行。

最开始我是想了许多软件创业方向的,都觉得不太合适,最后我说干脆不要东想西想了,就从自己的行业开始吧。看看程序员这个行业有什么可以做的。比如压缩软件,比如看代码的source insight软件,等等。

别说,我开始真想去做一款压缩软件的,对此我还傻不拉几的想过,自己能不能搞出一个新的压缩算法,压缩比要能超过市面上所有同类软件,但是后面发现不是那么一回事,自己的脑袋还没有聪明到可以提出一个更好压缩比的压缩算法,也只能作罢。虽然有市场,但是没技术。

有一天我在工作时,突然想着自己手边使用的工具,有没有什么觉得不爽的地方?哎,别说,还真有一个,软件代码对比软件——beycond compare。这个软件几乎是中国程序员人手一个,用在提交代码之前,做一个检测代码差异后,对比合入的功能。但是有个问题,这个软件的正版要199一个,好像是永久授权的。如果不购买它的正版软件,也可以试用,不过只能使用30天,到期后经常要重新找破解版,或者找些延长试用时间的方法。我已经被这个软件功能折磨好久了,经常到期后就不能使用了,又得赶紧搞些破解或延长试用方法的技巧。有天当我的beycond compare再次过期时,我突然想:我为什么不能自己做一款对比软件呢?不说和bc一样强大,至少要能解决自己工作中的代码对比需求,自己免费用起来,也是一件好事啊,也不算浪费时间吧?

于是说干就干吧。下班回到家,做完家务后,到9点过,把老婆和女儿哄着去睡觉,自己就开始在电脑面前编代码了。我的目标很明确,做一个中国版的bc,我暂时取名是cc,意思是要超越bc。但是一上来,研究一番后,就被一个技术问题给打蒙了——如何给出一个高效的对比算法?

一开始我以为对比很简单,不就是字符串暴力对比吗,但是我真的想错了。在对比的时间和内存要求上,如果没有一个好的对比算法,做出的产品是绝对不可能好用的。于是我花了三个月左右的事情,去研究国内外的相关对比算法,期间我看了大量国内这方面的“先进研究”,读了几篇论文,甚至给好几个国内的博士,还有教授,通过论文的通讯地址,联系他们给我一个可以测试用的C语言的代码,可都石沉大海。但是仅仅按照他们论文的描述,是无论如何也不能编写出C代码的,这真是老火,不得不说,我对国内的论文真是失望。要么藏着掖着,要么就是水论文,很少有一个能够真正实用的。

最终通过相关论文,找到了一个老外的LCS对比算法,是1973年的一个老外博士写的。我看了下老外的论文,照着他里面的描述,写出了对应的C代码。虽然到现在,我还是没有完全搞懂老外论文里面的提速思路,但是这丝毫不影响我可以按照论文步骤写出对应的C代码,更重要的是,代码可以高效工作!还是老外的算法论文靠谱,而且我再次确认老外写这篇文章的时间——1973年,我们那个时候还在处于“饥荒时代”。

算法部分的关键问题解决后,我就开始在操作和界面上面,针对算法使用做一些外围的编程工作了。此时已经过去快半年,那段时间我就在看论文,翻译代码,哄娃的节奏中渡过。

未完待续。

文章首发于头条,有程序员咨询创业问题,不一一回复,把自己心得摘录于此。目前我个人的状态,远不能说是成功上岸,此文更像是一个人“在路上”的过程记录。

ccompare已经集成到ndd文本编辑器中,欢迎大家免费使用。ndd2.3下载地址:ndd是支持mac/linux/windows/uos/麒麟的全平台文本编辑器。

ndd: notepad--是一个国产跨平台、简单的文本编辑器,是替换notepad++的一种选择。其内置强大的代码对比功能,让你丢掉付费的beyond compare。 (gitee.com)