(三十三)问题是找不到方向了:怎么才能把代码写好

更多
2018年10月13日 23点07分 作者:叶飞 修改

熟悉我的同学都知道,我专注的领域是“企业(级)应用的架构和项目管理”。“企业级”的级是我加上去的,因为没有这个“级”字,企业应用,会让人觉得这是“企业公司(内部)所使用的应用系统”,实际上,这是一种翻译上的……怎么说呢,翻译上的“语义缺失”。企业级对应的英语是enterprise,它实际上暗含了“庞大复杂艰巨任务”的意思。比如说美国的“企业号”航空母舰,航空母舰和企业有什么关系?用enterprise命名,应该是指这艘航母规模宏大巨无霸的意思。

而之所以专注于这个领域,也是因为在博朗的工作经历。

那时候算上培训自学的时间,我已经入行两年多了。和很多同学一样,这时候我们面临一个问题:代码写已经会写了,接下来的目标应该就是把代码写“好”,是不是?然而,先不说怎么写好,先问一个问题:怎么样的代码才是“好”代码呢?好的标准是什么呢?

这个阶段,其实比刚入门的时候还迷茫!

刚入门的时候,不会搭环境、代码跑不起来、报错实现不了功能等等,你至少有个反馈,问题就摆在面前,只要搞定这些问题就可以向前进。现在你的问题是找不到方向了,就好像你终于学会了爬学会了走甚至还能跑起来,但是,往哪里跑呢?

就算你想锻炼自己“跑得更快”都没有机会:你的能力能够胜任公司的工作啊,不然公司也不会招你进来,是吧?日复一日的工作,越来越没有“技术含量”,你感觉不到能力的提高,迷茫了。混吃等死吧,不甘心,而且有“程序员三十岁以后”的问题恐吓着你;想努个力加把劲吧,不知道力往哪里使。

方向啊方向,方向在哪里?

我各种渠道听到过很多说法,最流行的就是数据结构和算法了,“不懂算法一辈子都是码农”,但问题是我懂算法也还是个码农啊?参加软考的时候我学了的呀,然而从来没有在工作中用到过,到处打听也从来没听说过谁工作中写了个算法解决了什么具体问题。是我的层次不够?那时候我一个同事,是研究生,图像识别专业,听着都蛮高大上的,逮着个机会问他会不会用到什么算法之类的?“唉!其实都是调用接口,调一下参数啥的……”他倒是实诚,但我心里就更空落落的啦。

但那时候也模模糊糊地知道了“计算机科学”(底层)和“软件工程”(上层)的区别,底层走不通,试试上层吧?最基本的,把“面向对象”真正搞懂吧。真心搞不懂,虽然说之前面试的时候,还凭着对“多态”的理解拿到了offer,但其实啊,都是死记硬背的书上的东西。别说多态了,类的职责都晕的。我记得我思考了好多年的一个问题:比如用户(User)发布(Publish)一篇文章(文章),转换成代码,究竟该是user.Publish(Article)呢,还是article.PublishedBy(user)?从代码实现上来说,两者都可以,但按照“高耦合低内聚”之类的各种杂七杂八的“面向对象”原则,应该选哪一个?哪一个更好?为什么?

也找了很多书来看,但不看还好,越看越晕。印象最深的就是看《设计模式》,就一个感觉:脱了裤子放屁,多此一举,绕来绕去的干嘛呢?new一个对象这么简单的事,你要来这个工厂那个装饰的,不是把简单的事情搞复杂了么?还有什么三层架构,真心不知道中间那一层业务层干嘛的,数据库增删改查再加一个存储过程,啥事都做完了呀……

之所以还在上海待着,不敢开始自己的项目,就是这些问题没有解决。觉得要是自己再次开始创业,肯定没时间来纠结这些技术上的问题了,所以现在就要把他们搞定。

事实证明:带着疑问和思考工作,和“当一天和尚撞一天钟”的工作,效果是不一样的。

在博朗我的工作,主要是修bug,就是如果程序哪里出错了,我们去把它给改过来。这是一个很多程序员非常讨厌的工作,烦!谁都喜欢在一张白纸上面开始作画,很少有人喜欢在不知道多少人改过的画上面在涂涂抹抹修修补补。而且我们项目组负责的这套程序,已经运行了十多年了,代码量之大,逻辑之复杂,简直可以让人崩溃!

代码量有多大呢?直到我离职,我都没有把全部源代码迁(check out)出来过。最开始我迁出来的,都是C#写的,WinForm相关的;后来慢慢的,Java也跑出来了,VB也跑出来啦;最后,连C都蹦出来了,看看svn的log日期,天啊!感觉像在翻一堆都已经发霉了的书。

逻辑复杂最直观的体现就是一个方法里不知道嵌套了多少层的if...else...,看着头皮都麻了。但没办法,要debug,就得把里面的逻辑给搞清楚,先理解现在的代码(别人的思路),再找出别人思路里面的错误。既然别人都在这个地方出错了,说明什么?这个地方就很容易出错!哦,还说漏了一点,你首先得找到问题出在哪里,这一步就可以坑死你。

我记得非常清楚的一个bug,我应该是花了一周多的时间,一周多的时间啊,其他啥事都不做,就在不知道多少行的代码里,不知道多少个类不知道多少个if...else...里面,设断点,F11;再设断点,再F11……一步一步的debug。每一个类每一个if...else...就相当于一个岔道口,我就好像是在一望无际的迷宫里迷迷糊糊的转啊转啊,转得晕头转向!终于,苍天有眼,把问题在哪儿给找到了。

找到了问题在哪儿,就要开始理,理那一堆的if...else...,理清楚了才能改。理不清楚啊,根本不知道这些条件判断是干嘛的,没有文档,有文档也不可能写这么细。还在公司有一点好,有svn的log,还有一个jira系统,代码所有的改动都有据可查。只有倒回去在历史堆里面查了,bug是什么时候出现的,前后出现了什么改动,一个一个的if...else...是怎么添加进来的,又得捋一遍啊。

公司流程很好,有严格的code review制度,我提了好几次,都被打了回来,最后我记得是差不多花了一个月的时间,大家都觉得没有问题了,改动提交到代码库发布。结果没过多久,又报了一个bug,查来查去,就是我们上次的提交造成的。那一瞬间,心如死灰,天上飘过一行字:“按下了葫芦浮起了瓢”!



+++++++++++++++++


每天一篇博客


欢迎评论评价、传播分享,你的任何操作,都是我坚持的助力。

转载请注明:作者叶飞,出处:一起帮



软件开发 程序员 代码质量 工作经历
赞: 241 踩: 8

打赏
已收到打赏的 帮帮币

你的 打赏 非常重要!
为了保证文章的质量,每一篇文章的发布,都已经消耗了作者 1 枚 帮帮币
没有“帮帮币”,作者无法发布新的文章。

全系列阅读
评论 / 2
2018年10月20日 10点02分 --- 第 2 楼 --- dajatpyu

精选
沙发
2018年11月08日 11点31分 --- 第 1 楼 --- 推荐 光暗李佳玉
插眼
叶飞的系列文章

ASP.NET全栈开发

课程讲义,B站视频地址:http://space.bilibili.com/55410301/#/channel/detail?cid=49008

编程那些事:菜鸟入门

大飞哥倾力之作,面向有意入行IT/开发/编程的初学者,欢迎任何形式的留言建议……

从包工头到程序猿

真实故事,讲述我在家装公司关门之后,如何转行成为一个程序猿的故事。(《折腾》第三卷)

《折腾》(卷一)青涩

时间段:从大学毕业到开始创业。离开青葱校园,涉世之初的那些往事……

《折腾》(卷二)风雨 之(1)工地

我一个完全的门外汉(无论装修还是管理),开始给黎叔装修房子。从踌躅满志,到四处碰壁;从一往直前,到左右为难……

《折腾》(卷二)风雨 之(2)胸怀

作为一个律师,接工程没签合同,被狠狠的坑了一把!年轻人暴烈的想要复仇,黎叔教他一个企业家的胸怀……

《折腾》(卷二)风雨 之(3)渠道

成立了公司,招聘了员工,开始大力的拓展业务,一个接一个的坑,摔倒了又爬起来……

《折腾》(卷二)风雨 之(4)视野

经历残酷现实的磨砺,终于明白:干啥事,都不能闭门造车,人要走出去,开阔视野……

未分类

系统自动生成的未分类系列

一锅大杂烩

从律师到包工头,从码农到写手,读书交友生活创业,各种零零碎碎,乱七八糟……

人人都是程序猿

计算机编程普及课程,视频:https://space.bilibili.com/55410301/#/channel/detail?cid=49491

全部
关键字



帮助

反馈