Py学习  »  Python

从 Python 博主到网上大V:资深 Python 工程师的 12 年进阶路

算法与数学之美 • 6 年前 • 955 次点击  

资深 Python 工程师的 12 年进阶

来源:100offer

编辑:Gemini




许多程序员走上编程岗位,最初的诱惑都是出于对计算机编程的喜爱,但工作  3-5 年之后,对于那些想在工程师这条路上走得更远的人来说,未来方向究竟在哪里,很少有人能得到清晰的思路。


为此,我们找来了 Python 领域的知名人物刘晓明(他运营着一个高质量的技术博客,还是中国最资深的 Python 工程师之一。通过他和 Python 语言之间的故事,来向各位读者展示一个资深的 Python 工程师是如何修炼而成的。


刘晓明正在操作一台四旋翼无人机


01

你是我们唯一雇得起的 Python 博主


2007 年,刘晓明从河北唐山南下来到上海找工作,身上只带了 700 块钱,这时他二十出头,刚毕业一年。来上海是为了面试一家国内知名视频网站,刘晓明在一家二星级酒店住了六天,终于拿到了入职 offer ,他松了一口气。


在那年,全国只有三家公司公开招聘 Python 工程师,而他已被前面两家拒绝。公司领导这么向刘晓明解释录用原因:「全国在写 Python 博客的一共就 6 个人,只有你是我们雇得起的。」


刘晓明是个在技术上不安分的人,在去视频网站以前,他进过唐山本地的有线电视网络公司,也做编程方面的实习。在刚毕业时,他为一家企业的 web 系统写了一套代码生成器,可以用输入的 Python 模式批量生产 Java 的 web 代码,包括每个数据库表的 CRUD 操作界面。这样一来,刘晓明每十五分钟就能完成同事一个月的工作量,但结果是被当时领导严厉批评,原因是引入了新的编程语言,而其他人不会。


Python 显然不属于领导们眼中流行的编程语言,即使在十几年后,刘晓明也承认,这款本质上极易上手的语言在中国仍然知名度不高,而在世界范围内,也仍徘徊在 TOIBE 编程语言排行榜的前十位,与 C 语言、Java 还有相当距离。


刘晓明对编程的热情来自 1997 年,一个做生意的亲戚带当时还是中学生的他入门了 DOS,当时流行的语言是 QBasic 和 C 。进入高中后,刘晓明接触到了Pascal 、Visual Basic 等。他第一次去网吧的时候,同去的朋友在搜索“奇怪的东西”,以及混聊天室,刘晓明却打开本地的 outlook ,注册了一个 etang 邮箱,并在网吧主机上练习 C 语言、VB 和 Delphi 。总之,这样的一个孩子将来不去学计算机简直是不合理的。


大学四年中,刘晓明通过自学,搞定了 Delphi6/7、C++Builder5、CORBA 编程、DLL、系统编程等。大学后半期还学了 Java 里的 JSP、Servlet,Visual C++,以及 Visual Fox Pro 和 Turbo C++ 。最关键的,是他邂逅了日后最称手的编程兵器——Python。


2005 年,大三的刘晓明在编程原理课程设计的作业面前犯了拖延症,他在一本名为《简明 Python 教程》的电子书那开了小差,用一周时间学会了里面介绍的编程语言,累计学习时间不超过 9 个小时,最终他用 Python 完成了课程设计。


「这是我大学阶段所有课程设计里唯一没有延期的。很多人研究 Python 是因为好懂,但深入 CS 学科很多高级主题时,Python 能发挥出更加强大无比的力量。」从此以后,刘晓明成为了 Python 的狂热粉丝。


由于这款编程语言的中文资料奇缺,英文不好的刘晓明只好硬着头皮去研究有关 Python 原版资料,这反倒替他锻炼出一身英语本领。他利用几个月的闲暇时间完成了 mod_python 文档的翻译,并把接近 6 万字( unicode 字符计算)的译文贴到自己的博客上。从那以后,刘晓明关于技术的知识摄取渠道全部变成了英文文档和原文书籍。


02

Python 是最称手的编程语言


进入视频网站以后,刘晓明挣脱了原先的技术束缚,使用任何编程语言或工具都不再被视为另类,他开始了大刀阔斧的尝试技术理念。这一年的 11 月,刘晓明只回了四次家,其他时间全部泡在电脑上研究 CDN,用这一个月的时间,刘晓明弄清楚了所有和 CDN 相关的知识。第二年,刘晓明得以参与公司一个耗资4000 万的系统项目,成为团队中仅有的两个程序员之一。


从那以后,「这家公司想开发任何和 CDN 有关的东西,都离不开我了。」


也正是同一个时期,刘晓明开始有意识地在博客上更新编程技术内容,他随时在上面发表自己的操作感想,包括封装 libpcap 、做网络抓包、以及通信劫持,俨然是个黑客。他一度希望寻找比 Python 更好的语言,为此尝试了 Lua、Erlang 等。


「在 2008 年到 2010 年之间,我研究过 Lua ,很多游戏脚本是用 Lua 写的,包括魔兽世界,关于 Lua 我写了将近 18 万字笔记,也用它做了一些信息安全上的程序,但 Lua 有一些缺点,比如作用域、模块支持等方面的问题。后来还研究过一阵子 Erlang ,一个函数式编程语言,写了 37 万字的笔记,但后来也是一直没怎么用过。」


最终,刘晓明发现还是 Python 最符合自己对于最佳通用语言的需求。即便是对Erlang 产生兴趣期间,刘晓明也尝试做了 C node 的 Python 封装,使得Python 与 Erlang 互相可以发送消息、组建群组。而此后,当刘晓明涉及硬件开发任务时,他同样尝试过封装 Cubieboard 和 RaspberryPi 的 GPIO、SPI 等众多外设的 Python 接口。


在 2013 年,刘晓明在为一家开发音视频识别系统的企业服务,他使用 Python 设计出一套对重复项目进行自动识别的程序,从而将人力识别工作量降低到1/20 。而通过自己原创和 NumPy 的封装,音视频识别任务每天至少会经历十几次甚至几十次迭代,优化算法参数。这让刘晓明在不到两年时间里取得的音视频识别效果超过了某些大学实验室多年的研究。


「对于各个领域的研究者,我是真心推荐 Python 的。用上 NumPy 和 SciPy,你就拥有了极致的性能,顶级的可调式性,和产品级的稳定性。而这也使得Python 的这套组合成为科学计算领域唯一能与 matlab 竞争的选择。」


同样在 2013 年,刘晓明结识了正在创办一家 G 企业的创业者。这位学术根基深厚的创业者给刘晓明留下了深刻印象,但在刘晓明看来,加入他们的时机尚不成熟。


一年后,创业者再次邀请刘晓明长谈,这时刘晓明发现,G 企业的团队中已经网罗到不少牛人,包括从斯坦佛商学院回国的 CEO 。于是刘晓明以第 19 号员工的身份加入了 G 企业,在 apollo 组与机器人组担任 Senior Manager ,并成为研发团队中五个拥有 CTO 背景的成员之一。


在 G 企业,刘晓明接触到了许多新奇的工程项目,包括改装汽车——那次是为了检验一下自动驾驶方面的相关技术。不久,自动驾驶板块的业务从格灵深瞳被拆分独立出去。


「那之后就玩一些新的项目。比如视觉里程记忆相关的技术、行车安全方面的自动判断,以及做自动标注这类深度学习方面的技术。」而这种深度学习领域的任务,正是 Python 语言的强项。


「我推崇 Python+C 的玩法,组合式语言。当你发现性能不够用,或者涉及到底层知识太深,干脆就自己去写这块,利用 Python 的 C 模块,可以让 Python 调用——这就是 Python 胶水特点的作用。」在博客里,刘晓明不厌其烦整理出了国内最全面的一份有关 Python 的 C 模块的文档,总计写了 7 万多字。


03

Python 在中国的三次风潮


在中国,Python 曾经历过三次风潮,第一次就发生在 2007 年,当时 Google 进入中国市场,人们也随之关注到,在这家明星公司的工程师里,Python 语言的使用率出人意料的高。第二次风潮发生在 2009 年到 2012 年,中国互联网创业潮到来,许多公司急于迅速搭建网络架构,而开发环境友好的 Python 就成为许多工程师的选择。第三次则是在 2015 年至今,由深度学习概念导致的技术潮流。


作为完整经历了这三次程序员扎堆学习 Python 的风潮的 Python 使用者,刘晓明看到了中国程序员对于技术风向的捕捉与饥渴,尽管这些技术往往诞生在海外,但国内的技术工作者总能短时期内掌握,并利用庞大的市场人口进行检测。今年 3 月,刘晓明选择前往一家创办于美国的科技企业,带领技术团队进行软硬件开发。多次往返硅谷和中国的经历,让他甚至产生一种感觉:和中国的程序员们相比,硅谷程序员们似乎过于追求舒适了。


刘晓明并非对 Python 毫无怨言,在与 Python 的 12 年接触里,除了 Python3  的出现,这套语言本身几乎没有什么变化。而 Python3 和 Python2 之间存在不兼容的情况,无法直接升级。


「很多编程语言、甚至一些库,动不动搞不兼容升级,用户马上就跑光了。」刘晓明自己仍然在使用 Python2.7 的版本。他拿前几年兴起过的 D 语言举例,每次小版本升级都不兼容,如今已经没有多少人听说过它的消息了。但尽管如此,刘晓明仍坚信,Python 是一个架构师最值得结交的朋友。



04

什么样的人能成为优秀的 Python 工程师/架构师


从第二份工作开始带团队时算起,刘晓明的团队经验已经超过7年。他承认自己偏爱有自学能力的人,至于本科学历的出身,刘晓明并不在乎,在他的团队里,员工读到大二退学,或者干脆没读过大学,都不稀奇。与之相对的,只会按部就班学习老师教授内容的乖孩子,很难受到刘晓明的看重——「有几种人我肯定不招,一种是去报名技术培训班的,另一种是不会翻墙的。」


他甚至亲自设计了一个围绕 Python 的四周入职培训:第一周读完《简明 Python 教程》,适应 Python 开发环境;第二周尝试写爬虫,深度了解 re、urllib2、sqlite3、threading,queue 等模块;第三周学习 web 开发框架,推荐  flask、webpy 之类;第四周给产品做个小功能。据刘晓明说,有的员工完成这个周期可以只用一天。


到 2017 年为止,刘晓明在 Python 编程领域已经混迹超过 12 年,这让他变得比大部分 Python 程序员都更加资深。在一则知乎问答上,刘晓明半开玩笑似的回答有关“如何面试 Python 程序员”的问题,他给出的回答是:「问他认不认识我。」


常年更新博客的习惯让刘晓明交了不少朋友,在 Gtalk 上,他一度拥有超过四百位 Python 领域的爱好者朋友。他频繁登录与 Python 底层与第三方库相关的技术文档,进行笔记整理和翻译工作。


「每种技术都有对应的社区,Python 是比较有特点而容易的。大部分国内开发者都会去 Python 中文邮件列表,现在托管在 Google groups 上。”刘晓明显然深得其益,“总之,要做笔记,然后交一些不错的朋友。」


刘晓明在 2008 年曾通过与朋友合作尝试过技术互助的形式,在短时期内提高了自己的知识水平。他和另外两位技术出身的朋友约定每两周聚会一次,在聚会中确定未来两周专注完成一件技术领域的研究,然后各自认领不同的具体技术,等到下次聚会时再彼此分享。


「比如这周研究序列化,我就去看 ProtoBuf,其他人去看别的。后来我们三个人用这种方式,几年内把市面上流行的网站的信息系统架构全弄清楚了。我们三个人也都成了不错的架构师。」


刘晓明每年会完成差不多 100 万字的笔记写作,据他统计,现在自己的笔记总量已达到 981 万字,并且很可能在今年 7 月突破 1000 万字数。至于笔记工具,他选择用一套软件包,使用的是某种标记式语言,笔记内容可以被自动编译成网页,刘晓明再用 Git 对这些网页进行管理。


在中国,接触过 Java 和 Python 两种语言的人往往有一种先入为主的判断:前者适合大企业,后者适合早期企业。刘晓明对这一观点嗤之以鼻,他认为市场形成这种看法,仅仅是因为国内的 Java 程序员数量庞大、容易招募而已。


「在美国很多大公司就使用 Python ,最出名的就是 Facebook。」在程序员扎堆的知乎上,刘晓明( ID:gashero )以不遗余力的鼓吹 Python 著称,他将对 Python 的执念归纳为一句口号:「人生苦短,快用 Python 。」


(为保护用户隐私,文中企业均为化名)



长按图片识别二维码

欢迎大家把独特见解分享出来,投稿邮箱:

math_alg@163.com


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/O4sta8MJ6d
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/2280
 
955 次点击