代码与代码之外

Code and Beyond

如果重做过去半年的需求,你需要几个月?

标题是我在公司晋级答辩上给一个小同事提出的开放性问题,当时他回答:一个月。听到这个答案,我很惊讶!

先说感触:程序员入行后应该尽量加强自己的知识深度和广度,多学几种语言与框架/中间件接触不同的思考方式,同时锻炼自己能更好的做事的设计能力和把事情做更好的工程能力。

考虑到个人进步的影响,我认为对一个四年经验的开发者这个问题的答案应该是三个月左右,那说明自己有能力把时间大部分花在有意义的事情上。

小同事西电毕业后去华为呆了三年,然后完整的、健康的、保留着一点帅气离开华为与我们为伍。之前一直写 C++ ,最近才因为工作原因接触了一点点 Node.js。在这个问题的后面他解释是因为不会掉进已经踩过的坑里,比如 RPC、并发处理、缓存处理,所以会快非常多。但我的惊讶正是在于:为什么你需要踩这么多坑呢?为什么花了八成以上的时间踩?为什么还要延用目前的技术栈和解决方法?

公司背景是互联网性质的创业公司,但是延袭的基本是迅雷的技术栈,后台服务和接入层居然都是 C++ 做的,前端用一些 PHP,同时有苹果和安卓两个移动端。后台部分因为 C++ 真爱粉太多的原因,开发成本居高不下的同时,工程进度和质量也难以保证。而个人背景是身为一个铁杆 Gopher 却进了一个没人听过 Golang 的公司:因为刚毕业做嵌入式用过两年 C/C++,面了 C++ 岗位进来,然后继续用 Golang ……

技术栈的优化空间应该是一个在各个公司都很有代表性的问题,对比、总结以及算命猜到我们公司最大的几个坑是:

1, 大量使用 C++,业务迷失在细节中,净干些没价值的事却在 C++ 的细节中找到快感,这个问题最大。

2, 大量使用 RPC,使用同步方式处理异步消息,这个问题会在用户量并发量上升的时候变得非常明显。

3, 业务不分层,比如一个模块往 DB 里写数据,另外一些不断轮循,这个互相绑架的问题也很突出。

4, 缺少设计能力和工程能力却没有架构师,倒是加了一层不懂技术的项目管理为中介,这个影响会非常远。

对比有效的解决方法是:

1, 尽量少用 C++,目前公司已经大量使用 Python 和 Node.js。我们组大量使用 Golang,少量 Python,不用 C++。

2, MQ 和 REST API 解除互相绑架。我们组使用 RabbitMQ Actor 模型和 Golang CSP 模型揉合其它技巧实现三高:高并发,高性能,高可用。

3, 我自身的设计能力和工程能力处理当前规模的事情绰绰有余,尚需要更深入的延伸到其它组才更有价值。

但有效的解决方法不一定有办法推广,主要还是开发者的执行能力的问题。如果不能优化小同事们的编码、设计能力和工程素养,这些都只是空中楼阁而已。多数人更适应在工作场景中被动学习,但这远远不够。上文建议小同志们加强自己的深度和广度,其实广度更多的是深度的副产品而已,而深度是必须通过自己的学习与实践来挖的,所以关键还是学习者自身的努力及悟性。

以后会写个人对软件工程、面向对象、设计模式的理解,也会写一些工程方面的理解和处理问题的经验。


2016-09-25 深圳

逛儿童乐园吃浙江菜,老婆说甜的发腻,女儿和我都吃多了。