熟悉我的同学都知道,我专注的领域是“企业(级)应用的架构和项目管理”。“企业级”的级是我加上去的,因为没有这个“级”字,企业应用,会让人觉得这是“企业公司(内部)所使用的应用系统”,实际上,这是一种翻译上的……怎么说呢,翻译上的“语义缺失”。企业级对应的英语是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,查来查去,就是我们上次的提交造成的。那一瞬间,心如死灰,天上飘过一行字:“按下了葫芦浮起了瓢”!
+++++++++++++++++
欢迎评论评价、传播分享,你的任何操作,都是我坚持的助力。
多快好省!前端后端,线上线下,名师精讲
更多了解 加: