老兵不死,只是凋零:前九枝兰架构师王晓辉
他曾是以一位人民教师,他是程序开发界的一名老兵,你可能没有听过他,他有着十多年的开发经验,先后在做过计算机老师,并且在私企、外企、互联网公司、 创业 公司里做程序开发和技术管理工作。
程序员 客栈王鑫:我还是叫你老师吧,您先做个自我介绍
王晓辉 :大家好,我是王晓辉,毕业后当过两年的高中老师,于2006年辞职到北京从事专业程序开发工作,至今已10年,先后在私企、外企、互联网公司、创业公司里做程序开发和技术管理工作。做过的项目包括个人PC安全软件、自然语言处理(KNLP)、移动电信联通网关业务、数字证书认证系统、安全 数据 代理软件、自动化营销SaaS系统,在Windows和Linux下均积累了丰富的开发和项目管理经验。
程序员 客栈王鑫:像您应该很早就接触到开发了吧?能说说当时你们的大学 生活 吗?
王晓辉 :现在想想还是很还念那时候的时光啊,我毕业于信阳师范学院计算机科学与技术专业,信阳师范学院只属于二本院校,所以名气不大,但学风很好,大学四年为我打下了扎实的计算机理论功底,再加上当时跟同学经常一起泡在学校外面的电脑培训班(学校里面的上机课严重不够啊)里学习各种编程技巧,从Basic到Pascal,再到C、Visual Basic、Visual FoxPro,到最后的C++/MFC,都自学自画的捯饬过。
程序员 客栈王鑫:您都在哪些公司就职过,能分享一下吗?
王晓辉 :2006年辞去老家高中老师的工作,只身来到北京,开始第一份纯技术开发工作,这是一家私企:北京卡斯特信息技术有限公司,既有自己的产品(个人PC安全软件),又做外包业务。我在公司里做了大半年自己公司的产品后,就被外派到日企佳能(Canon)公司,开始做一个韩文自然语言处理(KNLP)的项目,这一做就是两年多。
在这里,我首次经历了一个完整的 项目 周期——需求分析、概要 设计 、详细 设计 、编码、单元 测试 、系统 测试 、验收 测试 。我的C/ C++ /MFC技能在那里得到了一次质的提升,虽然之前看了很多的书和做了很多练习,但都跟实际的 项目 经验差别甚大。核心的底层模块都是用C语言完成的,而且要求跨平台运行,所以在这里也首次开始在Linux系统下做开发,首次使用VIM+GCC+GDB的组合方式来开发调试程序。
上层的 UI 是用 C++ /MFC/ATL完成的,以库的方式调用底层核心的模块。这个 项目 整整做了两年,在当时的我看来,这是一个很大的 项目 ,用到了C/ C++ /MFC/ATL等编程技术,使用了模块化的 设计 ,采用了典型的瀑布开发模式,从需求、 设计 、编码、单元 测试 、验收 测试 ,到最终的 产品 发布,都给了我全新的体验。
KNLP 项目 完成后,我回到原公司,公司的情况已经不容乐观,本身的 产品 没有很好的市场, 外包 业务也在萎缩,再加上公司上层的组织架构发生了很大的变化,导致很多老同事纷纷离开。我在公司只呆了半年,零零星星的又做了一些小 项目 ,也选择了离开。
后来就去了亿阳信通。亿阳信通有自己的软件园,有自己的办公大楼,有自己的餐厅,有自己的班车,算是一家很大的公司。
我当时去的部门,是做电信、移动、联通等网关业务 数据分析 ,就是把硬件设备采集到的业务数据进行分析、存储、汇总、页面展现等。底层模块中很大一部分都是做 数据分析 处理的,但看了之后才发现,如此庞大的一个数据处理系统,全部构架在 Perl 语言之上的,可能当时架构 设计 者认为 Perl 是动态语言,易于开发,易于维护,易于扩展。这个想法原本也是不错的,但任何系统,当达到一定的规模后,易于扩展和易于维护都变得不再容易。我到现在仍然认为 Perl 语言并不是很适合构建大规模的软件系统,特别是在处理性能上存在瓶颈。在亿阳信通的两年里,除了后来为了特性性能做的一些C/ C++ 分析模块,大部分都还是跟 Perl 语言打交道。
后来公司领导也觉得原先的数据处理系统在性能上差强人意,就让我们组针对特殊 项目 开发独立的数据处理模块,使用C/ C++ 语言来完成。当时开发的数据解析程序是运行在Solaris系统上,我先在自己的Ubuntu系统上开发完成,然后再移植到Solaris系统上调试运行。因为Solaris系统跟我们平时使用的计算机CPU架构是不一样的,我们通常使用的x86架构的计算机,硬件编码的方式是小端(Little-Endian),而Solaris系统是大端(Big-Endian)。这也是当时开发过程中特别注意的一个方面,所以至今记忆深刻。
在亿阳信通的两年里,我开始接触开源 项目 ,自己也尝试写一些开源的程序,比如Linux下GNOME/GTK图形库,就是在写开源程序的过程中掌握的,实际工作中并没有用到。当时还没有github,还是 Go ogle code的代码仓库。因为当时我醉心于Linux/Ubuntu, 所以开发的开源软件都是运行在Linux/Ubuntu之上的。
后来,公司要跟IBM进行战略合作,但雷声大雨点小。我们 项目 组按照部署要跟IBM进行合作,对他们的业务质量管理 产品 做二次开发,满足国内业务的需求。但合作进展缓慢,有一段时间几乎无所事事,浪费青春啊,是时候要离开了。
我接着加盟的公司叫吉大正元信息技术股份有限公司,总部在 长春 ,我入职的是它的 北京 研究院。当时吉大正元正准备开发一款 数字 证书身份认证与数据代理网关的 产品 ,刚好在搜罗人才,而我也刚好从亿阳信通离职,很快就受邀加盟了吉大正元的 北京 研究院。我入职的第二个星期,整个研发团队就被拉到怀柔雁栖湖畔山脚下的一个小楼开始了封闭开发,没想到一呆就是五个多月。提起封闭开发,可能很多人会觉得很苦很枯燥,但后来跟一起封闭开发过的兄弟谈起,都很怀念那段时光。封闭开发相当于给 程序员 们提供了一个理想的编程环境,尽量排除外界因素的打扰,全身心地专注在 产品 研发上。这对于 程序员 的职业成长来说,实际上是一件幸事啊。
产品 主要是使用C、 C++ 和 Java 完成——服务端核心代理模块使用C完成,后台管理和登录会话管理模块使用 Java 完成,客户端使用 C++ /MFC/ATL完成。当时公司决定在这次封闭开发中采用敏捷开发模式,还专门从外面请了敏捷教练进行全称培训,这也是我首次接触敏捷开发理念和敏捷实践,像迭代开发、故事墙、每日站立早会、结对编程,代码集体所有权、自动化构建,自动化部署,自动化 测试 等等,都为我们打开了一个全新的视野,让我看到跟之前传统的瀑布开发模式完全不一样的开发流程。所以说,在封闭的这半年里,是我职业生涯中又一个快速提升的关键期,可以跟在佳能研发中心的那两年相媲美。
封闭开发结束后,网关 产品 的核心功能都已完成,之后就是对 产品 不断完善和修复bug的过程。在这一个过程的开始,就已经把 产品 推向了市场,然后不断的完善功能,修复Bug,以快速迭代的方式发布新版本。这就是敏捷中快速发布,而不像传统的软件发布那样等一切就绪了再发布 产品 。传统的软件发布反应迟缓,错失机会。而敏捷的发布模式却可以在核心功能和最小需求完成的情况下,快速推向市场,让市场和 用户 来检验 产品 ,提出新需求,发现问题,从而快速有效的完善 产品 ,持续不断的发布新版本。
在吉大正元 北京 研究院的三年零五个月的职业生涯中,我又一次收获了很多。我接触和学习了敏捷开发理念,掌握和实践了敏捷开发活动,分析和掌握了很多的网络协议,对网络编程的理解和实践达到了一个新的高度,对Linux下的大并发多线程高性能的服务器开发有了深刻的理解和 项目 积累,对Linux的防火墙iptables的使用开始得心应手,对一些开源软件——apache, openssl, openvpn的借鉴让我的 设计 能力得到了很大的提升。是吉大正元又一次把我推上了一个新的高度,我很感谢这家公司。
后来, 产品 推向市场后,经过多次的迭代开发,趋于完善和稳定。而我又一次选择了离开,我就像永远走在路上的朝拜者一样,只在某处逗留几天,但终会再一次出发,走向远方。
这一次,我决定再给自己一个新的挑战——进入纯粹的互联网领域,加入纯正基因的互联网公司。我离开吉大正元的时候, 北京 九枝兰信息技术有限公司刚成立三个月,做互联网的自动化、一站式营销平台,刚好当时的CTO找到了我,邀请我加入。CTO是个很有情怀的人,跟他谈的很投机,可谓一拍即合,于是就选择了加入九枝兰。
我时常对自己说:只要用心去追求,总会收获不一样的风景。在生活中如此,在职业生涯中也是如此。在九枝兰这两年里,我完成了我职业生涯的三级跳:
在这两年里,我首次使用并熟练掌握了新的编程语言—— Go ,之前的 产品 和 项目 主要都是基于C和 C++ 进行开发,而 Go 语言作为互联网时代的C语言进入了我的视野,而且让我欲罢不能,这两年开发的大部分代码都是使用 Go 完成的。我首次在大规模云服务平台上使用微服务(Micorservices)的架构模型,紧跟了互联网时代的 设计 思想。我们的团队也在云服务中引入Docker的实例管理,让云服务的构建和部署更加的轻巧和灵活。还有公司扁平化和自组织的管理模式,也让开发管理变得更为简单高效。所有这些,都是九枝兰带给我的丰收硕果。
以上就是我差不多十年工作的一个经历和总结,现在回顾那段激情燃烧的岁月,我只想说:“不后悔。”
4, 程序员 客栈王鑫:你参与的 项目 能否做一些简单的介绍?
王晓辉: Marketin Go S一站式营销系统—— 集成了搜索引擎投放、搜索引擎优化、 微信 、 微博 、 H5 模板、着陆页、邮件、短信、DSP、广点通、 APP 消息推送等多个推广渠道,结合用户管理、营销活动管理、营销自动化、渠道分析、用户分析、 数据分析 等功能,帮助企业主提高效率,节省营销成本。
项目 使用的主要编程语言有: Go lang、 Python 、 Java 、 PHP 、 Java script。 项目 使用的关键技术有:RESTful API、Thrift、Apache Kafka、NSQ、Docker、 MySQL 、MEAN等。
身份认证与数据代理网关G3000—— 吉大正元自主研发的基于 数字 证书身份认证和安全数据代理的内网安全 产品 ,主要针对国内对内网安全要求比较高,需要进行身份鉴别和权限控制,而且对数据在传输过程的安全有极高要求的企事业单位。
项目 使用的编程语言:C、 C++ 、 Java 。 项目 使用的关键技术:TCP/IP/SSL/HTTP、Sock5、Apache、Openssl、Openvpn、Netfilter/Iptables、TUN/TAP、MFC/ATL/STL、Windows NDIS驱动等。
自然语言 合成系统KNLP—— 该 项目 是佳能自主研发的一个韩文 自然语言 处理系统,要对韩文的语言文字做语音合成处理,最终要用于佳能的硬件设备上,如相机、复印机等。
项目 使用的编程语言:C、 C++ 。
当时做 项目 还很少使用开源库,所有的功能模块全都是用代码纯手工打造出来的,所谓的软件匠艺,在早期的 项目 中反而有更好的体现。
5, 程序员 客栈王鑫:对你来说一名优秀的 项目 经理需要具备什么样的硬实力?
王晓辉 :作为一个项目经理,我觉得首先要了解技术,不要求对技术多么精通,那是程序员做的事情,但作为一个项目管理者,如果对自身项目使用的技术领域不了解的话,可能就会两眼摸黑、盲人摸象,在管理过程中沟通的效果就会大打折扣。
其次就是要对 项目 的风险因素有一个清晰的把控。 项目 的时间安排上是不是充足?人员安排上是不是到位?关键技术上是不是有瓶颈?团队成员的工作状态是不是很好?把这些因素一一的考虑到,如果有风险要及时的进行调整。比如 项目 实际的进度慢了,是什么原因造成的?是开始的时候时间估算就不准确,还是因为遇到技术瓶颈进展缓慢,还是因为团队成员士气不振出活不多?根据实际的情况分析出原因找到解决的办法。
其次就是团结的能力。 项目 经理就是 项目 的粘合剂,把所有的 项目 成员粘结在一起,把一个共同的目标完成。这个过程中,团队成员之间可能会出现各种各样的沟通问题,甚至跟你这个 项目 经理之间也会产生分歧,这时候怎么办?就需要 项目 经理放低姿态,不要自认为是一个管理者,而是一个兄长、一个朋友的身份,设身处地的为对方考虑,沟通到位,把问题说开辨明。大家最终的目标都是一致的,在路途中某些人稍微偏离了一点,就要及时的把他们拉回大家一起的道路上,共同向目标进发。
6, 程序员 客栈王鑫:在 外包 公司工作和在互联网公司工作最大的区别你觉得在哪里?
王晓辉 :外包公司和做自己产品的互联网公司我都经历过,所以我就谈一下自己的感受吧。
作为一个 程序员 的职业成长来说,并不能说在什么样类型的公司发展孰好孰坏,没有一个绝对的标准。关键还是看你自己在这个过程中是不是得到了成长,学到了有价值的技能。而这一点在两种类型的公司中都可以做到。
就比如我在佳能做KNLP 项目 时,就属于 外包 性质的,但那两年却是我职业发展提升很快的一段时期,让我至今受益匪浅。再比如我在吉大正元和九枝兰,都是做自己公司的 产品 ,同样也是成长最快的一段职业发展时期。
2016-9-13 13:54
|
来自:
程序员客栈
|