卧龙阁最近对我进行了一次专访,主要聊了工作以来的一些经验和对技术的看法,现全文转载如下,希望对新入行的朋友有帮助,如果有兴趣的话也可以移步原文阅读

问:很多人都认为程序员就是无止尽的写代码,是件非常枯燥的工作,您从事这行多年,能说说做这行与其他行业相比具有哪些亮点吗?您认为这一行有哪些乐趣让您乐在其中?

答:会从事开发,其实技术本身并不是最吸引我的。最让我有成就感的事情,还是通过使用各种各样的技术,从无到有去创造一个产品。 一行行代码慢慢转变为用户可以体验、把玩、讨论、有用的产品,这个过程带给我的体验是无与伦比的。从业这么长时间至今,我依然很享受这种创造的过程,这是其他职业很难体验到的事情。

个人非常推崇日本的“职人精神”。本质上来讲,程序开发也是一门手艺活,能专注于自身专精的领域,并穷尽毕生精力去追求更高的技艺,我觉得这样的人是值得尊敬的,而我也在努力成为这样的人。

问:行行出状元,您作为网站技术架构领域的佼佼者一定也有自己一套和别人不一样的工作习惯,您平时的哪些工作习惯在潜移默化中助您提升职业价值?

答:

1、向开源社区贡献代码。比如我曾向Zend Framework等比较大的项目提交过代码,通过接触这些优秀项目的开发者,了解他们解决问题的方法会让人受益终身。

2、 在StackOverflow上回答问题。我的方式可能更有针对性,比如在做ZF2相关开发时,就只回答ZF2相关问题,直至刷到一个奖牌,这对短期内掌握了解某个技术非常有帮助。

3、翻译图书。目前我已经翻译出版了《自制编程语言》和《游戏开发的物理和数学》等书,在翻译过程中会对个人的知识体系起到很好地整理和巩固作用。

4、坚持更新博客。个人博客avnpc.com已经有多年的历史,很多圈子里的朋友虽然不认识我但是都认识我的Blog。坚持将自己的经验和知识整理为博客,一方面可以帮助到很多初学者让他们少走弯路,另一方面对自己也是极好的锻炼。

问:您在网站技术构架方面颇有成就,在您接手的一些关于网站技术架构工作中,哪些给您留下了深刻印象,能具体谈谈为什么会让您难忘吗?

答:惭愧,我们的项目在大公司来看可能还根本称不上架构,只是组合了一些语言和工具能解决我们现有的问题而已。

有句话叫善战者无赫赫之功,我觉得做架构也是同样的道理,一个架构的迭代和演进应该是非常默默无闻的,外界作为用户不应该感受到任何架构层面的变化。我们的服务从我加入时的几万日PV到现在每天数亿次请求,用户基本上没觉得有太大变化。

而好的架构师除了自身技术能力外,眼光更加重要。对于创业公司而言,架构师需要能准确看到公司业务核心需要解决的问题,比如我们公司业务价值在于资讯和行情的速度,那么最开始做架构的时候就花了非常大的精力去提升系统的实时性,比如投入人员去自动化整个信息发布流程,比如使用WebSocket代替有延迟的轮询方案,同时又对低端设备准备好降级的替代方案等。而对于一般架构中比较重要的用户系统,其实我们是等到公司开始涉及金融交易业务时才去将这一块完善的。

个人愚见是,没有什么架构能解决所有问题,大公司的架构也未必能适合创业公司用,如果我们一开始就花精力去做用户,去规划分表分库,系统本身固然会得到更好的扩展性,但是公司的发展速度却会受阻。我总结创业公司做架构优先考虑的应该是用较低的成本满足当前需求,并且保证一定的前瞻性就够了。

问:我们这个专题叫“卓越者计划”,有幸邀请您加入卓越者计划中,您认为您自己能够取得一些成就并脱颖而出的关键点是哪些,用几个关键词概括即可?您是如何解读这些关键词的?

答:很巧,我最喜欢的一句话就是《三个傻瓜》中的“Follow Excellence. Success will chase you”。怎样追求卓越,作为开发人员,我觉得一个最重要的关键词是保持“专注”。比如我是后端开发,但是这两年移动比较火,就扔下后端去做移动,最后很可能什么也做不好。再比如最近股市比较火,那么程序也不好好写了,每天花8个小时去研究股票,这都是不可取的。大多数人包括我在内都不是天才,那么只有长期专注于一件事情才有可能超越其他人。


下面是一些问答,也将其中一些有价值的摘抄出来供参考

Q: 请问想成为顶尖的程序员,或者技术大神,是否需要有很强的算法,或者数学功底吗?

A: 还是需要的,数学和算法是基本功,不一定会在项目中用到,但是基本功扎实会决定你能到达的高度

Q: 前两天和一个创业的朋友谈事儿,问了个问题,如果移动互联网创业公司,薪资空间只够请一个技术大牛或一个产品大牛,如何抉择??您怎么看?

A: 这个问题没有唯一的答案吧,可以看看最近很火的文章《为什么整个互联网行业都缺CTO》。

创业公司真的需要思考一下现阶段真正缺少的是什么,不要把问题只归咎于缺1、2个人上面。

Q: 想请教下,PHP这门语言的优势到底在哪里?

A: 上手快,脚本语言,无需编译。资源自动回收,能容忍一些不够好的代码在线上运行。社区生态成熟,产品稳定。人员招聘相对容易。个人觉得是创业公司首选吧。

Q: 我准备跳槽了,但是我想问问程序猿在选择公司的时候,会比较看重公司的哪些地方,选择怎样的公司才不会令自己后悔?

A: 我觉得新人首要看重的不是公司,而应该是团队,这家公司有什么样的人,在用什么技术,以什么样的方式在工作,这是面试过程中需要了解清楚的,面试不光是公司面试应聘者,也是应聘者在面试这家公司。

Q: 我在知乎也问过这个问题,请问徐老师,怎么成为一个优秀的程序员,而不是一个优秀的码农?

A: 其实决定程序员成长的还是本人的意愿,哪怕再小的项目,都存在可以不断优化并进步的空间。但如果只是为了做业务而做业务,从来不思考,那可能做很多年还是在做很初级的事情。

Q: 请问下如果你们的产品经理一般都是什么需求,你们怎么判断能不能做呢?

A: 我们对产品经理看重的点是他能不能砍需求,一个产品可能有100个需求都可以做,他能不能找到最核心的10个需求并已最低的成本将产品实现出来。

Q: 最近很多人推荐了解和学习GO语言,请问从一个技术领导的角度,怎么看待这个的价值?另外,在自身提升技术的角度,是应该多接触很多语言,增加知识的宽度,还是根据工作内容,不断深挖单一工具,增加技能的深度?

A: 在入行的前几年先专注深度,专精一门语言之后再考虑广度会比较好。两者都很重要,不过需要讲究一下顺序

Q: 您说做技术应该专注,我很赞同,但是我同时也很迷茫,自己马上要30了,如果过了30我还是个写码的是不是就很失败?大家都说程序猿要慢慢开始带团队,如果真的老了自己还做基层工作怎么办?带团队或者升职真的是程序猿成功的标志吗?

A: 我现在也每天写代码,我觉得技术人员应该在意的是今天写的代码有没有比昨天写的更好,而不是今天和明天是不是都写代码。无论写代码还是做管理,如果能保持持续进步的话,职业道路肯定会越走越宽的。

Q: 你觉得HTML、CSS、JavaScript、PHP、 MySQL 的学习顺序是什么?

这几个东西拼在一起才能做成一个完整的网站啊,我自己是直接开始一个小项目,比如写一个Blog,用到哪一块的知识就去学哪一块

Q: 最近刚走上领导岗位,虽说职位比较低,但也碰上了缺人的问题,请问您在上海的工作过程中,有没有碰到过这样的问题?您是怎么处理和解决的呢?

A: 我们从第一天到现在都严重缺人,一个创业公司缺人的现象持续到上市都是正常的。

招聘当然是最直接的解决方案,但是同时也应该注意把有限的力量用在一些核心问题的解决上,避免浪费资源。开源+节流吧。

Q: 看到您说写博客,您说团队开设技术博客这件事靠谱吗?我现在的公司,属于初创型公司,招聘是很现实的问题,大家讨论,想开设一个整个技术团队的博客以吸引人才,但我整个团队里,有人很积极,有人却非常抗拒,您怎么看这件事?

A: 团队开设Blog对技术积累是有一定好处的,但是招聘的话以我的经验应该不会有太大效果。推进一个事情,如果认定这个事情是好的,那么就从小部分人开始实践,慢慢影响到大多数人。

Q: 不知道在您的管理中遇没遇到过,由于招聘任务重,新来的同级别员工会比同级别老员工工资高的现象,您怎么看?

A: 公司稳定是最重要的,如果无原则的招聘导致薪资结构倒挂,我觉得这是CEO需要反省的问题。

Q: 如果让您给初级程序员,在学习道路道路上一点建议,你会给什么建议,或者应该怎么去学习?

A: 个人不建议只看教程或只看书。先发现自己的兴趣所在,结合兴趣从实践中去学习是最快的。

Q: 请问徐总你在招人的时候,主要看重一个程序员的哪些方面?如何才能判断这个人是团队需要的?

A: 对于我们来说,如果应聘者有一个Github账号和一些自己维护的项目就是最好的简历了。

Q: 提问:应该会碰到过产品需求打破架构设计的情况吧,碰到这种状况,你怎么办呢

A: 一个架构总是用来解决一类需求的,如果某些需求整个架构都无法满足,那一定做的是完全不同的另一件事情,是不是可以新开一个项目来完成这些工作,而不是用一套架构满足所有需求。

Q: 提问:徐老师你好,作为一个程序员,请问你有没有特殊的值得推荐的学习方法?另外,你对于PHP的发展持怎样的态度,据说今年十月份PHP7就发布了,请问华尔街会部署吗?

A: 个人是实战派,所以很少去先看书和教程,一般会直接上手项目,边做边学。

线上产品稳定性还是第一位的,如果我们测试新版本的新特性或者性能提升有升级的价值,会考虑线上全面部署。当然会有很大的测试成本。

Q: 每天对技术方面的关注或者研究会花多少时间呢? 你碰到过瓶颈吗, 当时都是怎么提升的?

A: 其实没有刻意计算过时间,不过我觉得10000小时定律是想对靠谱的,没有10000小时的话很难在某个技能上达到一定深度。

瓶颈是周而复始的,每年都会有几次觉得自己好像什么都不懂……主要还是靠坚持吧,不懂的东西坚持去学习也就慢慢懂了:)

Q: 徐总你好,目前项目遇到服务、业务拆分的阶段,请问在拆分的标准方面,你有什么好的建议?

A: 如果只是代码层面的拆分,定义好目录结构按照规定放置代码即可。如果是服务层面的拆分话题会比较大,主要还是要约定接口规范。

个人不建议过早的拆分,拆分的前提是业务需求想对稳定,否则联调会很痛苦

Q: 我想知道技术男你们怎么学习英文,翻译书籍应该需要英文很好的,对吧?

A: 其实我的英语水平一般,因为有在日本的工作经历,翻译的基本都是日语书。

当然无论日语还是英语,技术人员阅读外文资料都是一门基本功,不过个人并没有觉得这件事情非常有难度,因为技术类文章所用词汇都比较固定,叙述方式也很直白,没有特别复杂的语法障碍,所以只要肯花功夫一定能有所成就。