1. 云栖社区>
  2. PHP教程>
  3. 正文

The Last Four Years

作者:用户 来源:互联网 时间:2017-12-01 12:14:17

The Last Four Years - 摘要: 本文讲的是The Last Four Years, 半工半读的实习生活到今天为止暂时告一段落,算下来整整四年有余。 这四年来,我从一个只学过 C 和翻阅过 Python 老鼠书的准小白,慢慢变成一个程序员熟练工,至少有一半的功劳来自于实习过的这家公司。从一开始学着写 PHP 爬虫,然后

半工半读的实习生活到今天为止暂时告一段落,算下来整整四年有余。

这四年来,我从一个只学过 C 和翻阅过 Python 老鼠书的准小白,慢慢变成一个程序员熟练工,至少有一半的功劳来自于实习过的这家公司。从一开始学着写 PHP 爬虫,然后学了一下 JavaScript 开始写网页前端, Node 刚兴起的时候用来写爬虫运行网页脚本,移动应用热闹起来的时候,没学过一天 Java 直接从官方文档开始学写 Android ,写了两个App之后又回来写网站,时遇前端和全栈崛起,各种框架满天飞,研究一番之后写了两个前后端分离的网站。这期间,曲折的弯路走了不少,做到一半烂尾的也有不少,学过之后弃之不用的更是不少。把这些全部抛开,剩下的,才算是真正学到的东西。

这篇文章算是对过去四年的小结,往之不谏,来者可追。

非技术向 新人养成计划

伟大的程序员哈利波特曾经说过,所有伟大的程序员都是从菜鸟进化而来的。“菜鸟”和“老鸟”之间的差距,除了天赋之外,大部分是经验上的差距。而大部分人的努力程度之低,根本还轮不到拼天赋(鸡汤)。可是为何许多新人养成如此艰难,或是自学太难成才。发展心理学告诉我们,人们习得新知识是打破旧的知识框架、建立新的知识框架的过程,而这个过程不但需要足够的耐心,往往还需要忍受否定自我的痛苦(谁说学心理学没有用。)。太祖曰:与自己斗其乐无穷。这才是正确的姿势。

The Last Four Years

新人很容易在学习过程中由于缺乏实战经验而沦为过目就忘的知识点复读机,联结主义心理学的观念认为知识的表征是通过知识点相互联结、相互作用完成的,翻译成汉语叫做“融会贯通”。就好比学会了 C 和 Python 并不意味着已经学会了 JavaScript ,但如果学了 C 和 Python 还看不懂 JavaScript ,那说明你没有心(谁说学心理学没有用。 X2 )。

当然,我最近研究函数式编程并选择了 Haskell 来学,瞬间又被打回原形变成小白,亟需回炉重练。对于新人养成计划,还有得展开。

团队

团队自然不用说,沟通永远是最重要的,人多的时候上情下达甚至比技术问题重要,否则误会和怨气积累到一定程度,势必会爆炸。小团队自然需要扁平化的结构,一共三个人,一个组长,一个经理,这谁受得了。管理团队当然也是一门学问,并不是说技术牛一定带的了队,万一智商高但情商低那也是要命。权力下放也需要技巧,大包大揽自己累死不说,下面的人还觉得不被重视、不被信任。况且没人做的了百事通事事通,强行涉足非专业领域很可能事倍功半。像是技术Leader把全司员工工资表和裁员计划提前打印出来放在打印机上供员工观赏,这事儿我能笑一年。大家再扁平也不带这么搞吧,难道是提前实现共产主义了。村委会没通知啊 :D 。

技术向 前端之争

广义来说前端包括Web、Mobile。从开发的角度来看,Android开发给我的感觉就像是戴着镣铐舞蹈,要命的是还要适配不同型号的镣铐。加之 Java 的缘故,可能由于没有系统学习过,我对其最深刻的印象只有一个词:“ 啰嗦 ”,因此如非逼不得已,我是不会想要再次尝试了。况且,凭什么要比iOS工资低。 :D

最近比较百家争鸣、异彩纷呈的还是 JavaScript ,一直以来争论不休的一劳永逸型Web App和效能优先型的Native App,似乎随着混血王子React Native的到来销声匿迹了。当然我们知道唯有适者才能生存,在用户体验至上的产品狗眼中,如果用户被卡到不想用,你开发再快、更新再自动也并没什么卵用。而在老板眼中一个 JavaScript 程序员如果能兼容iOS、Android、Web,拿一个人的钱干三个的活,自然是美滴很。

在所有这些技术和编程语言中,我似乎在 JavaScript 上花的时间最多。虽然伴随着前端热潮的掀起,新的语言规范似乎想要摆脱“toy language”的头衔,然而至今为止我对它最深的印象仍然是:“ 随意 ”。就好像她在对你说,“大爷您随便玩儿,咱们基本不会错。(可是真要出了错,您可未必找得着。)”。究其原因,可能是由于入门太简单,而且可以在界面上做出的花样太多,很容易忽略了其背后真正的原理,我试着写过几篇 探究背后实现机制的文章 ,看反响确实是很多前端新人亟需补充的知识。

JavaScript 与Web能否实现大一统我不清楚,但是隐约觉得可能硬件的升级速度终将使得性能可以不再受限。然而,虽然 JavaScript 简单,并不意味着前端也很容易。且不说各种框架满天飞,新手直接上容易有种踩着高跷绣花的感觉,其实对于很多死理性的程序员来说,审美和交互可能是一种相对较为缺乏的素养。当然这部分可能理应由设计师负责,但在小公司并不总是有这样的待遇,所以我常觉得调试和适配某些界面,并不比乔算法来得轻松。以最近做了两次前后端分离的尝试来看,React框架用起来确实比以前jQuery时代方便了许多,但是当页面结构和逻辑变得复杂起来之后,我会突然有种错觉,觉得自己不是在写网页,这分明就是Android。后来通过反省我发现,无论是Android、React还是前后端分离,他们真正的用武之地是团队协作,通过松耦合的设计实现各个模块的独立开发和重复利用,自己跟自己搞前后端分离,要不是学过变态心理学,都容易搞出精神分裂(谁说学心理学没有用。 X3 )。

后端之苦

不愧是跟 JavaScript 一前一后的两个好兄弟,宇宙第一语言 PHP 最大的包容性不在语法而是体现在“只要您能想得到的功能,咱库里基本都有”。我用过的两个框架: CI 和 Phalcon ,自然是觉得Phalcon更优雅(虽然它标榜的优势是“快”),缺点就是(当时)文档较少,遇到问题比较难处理。Phalcon是基于 PHP 扩展的框架,我也研究过一段时间的 PHP 扩展,后来尝试去写一个基于 PHP 扩展的模板引擎,比较尴尬的是写出来结果在有些时候比 smarty 还慢;还有一个嵌入人脸识别功能的扩展,其实想法是很不错,只可惜没有深入优化,现在代码也不知道哪里去了。我觉得脚本语言中某些性能瓶颈通过嵌入 C 语言模块的方法来优化是一个很值得深究的领域,而且大部分成熟的语言像 Node 、 Python 都有公开的接口可以调用,后面有时间我会继续研究一下。

相比前端一家独大,后端除了 PHP 以外可供选择的套餐非常丰富,例如 Python/Node/Go 。我分别做过 Python(flask) 和 Go(gin) 与 PHP 的性能比较,结果是不涉及 DB 访问时 Python 是要比 PHP 好,但加上 DB 读取之后 PHP 可以甩开 Python 几条街, PHP 数据库驱动部分还是更专业一些。当然, Go 还是可以全面压制 PHP 的 :D 。前两年有兴起一股“敏捷开发”热潮,主要是以 RoR 为代表,公司也有尝试过,但似乎并没有很大成效。小团队无论是出于成本还是技术层面的考虑选择“敏捷开发”并没有什么错,但很容易忽略的一点是,如果对于产品的设计和思路不够清晰,技术手段再快也只能是快点“做死”一个产品。

这个小标题“后端之苦”,并不是说写后端的程序员更辛苦,一方面是指后端开发没有可视化成果即时展现,相比前端会更枯燥乏味一些;另一方面也是指后端服务运维方面的辛苦。前几天有人分享了一篇文章: 如何写出不可维护的服务端程序 ,引起很多共鸣。不光是在接手别人配置的服务,即使自己亲手写出来的配置,几个月过去再回来看可能都已忘记。以我的经验来看这其中最痛苦的并不是遇到什么新问题,而是遇到问题之后发现这个问题如此熟悉以前一定遇到过甚至能够回忆起如何一步一步Google得到线索的情景,但就是没办法想起如何解决,然后只好再一次重复一步一步Google的路线,就像西西弗斯推着巨石上山一样,一次又一次。到这时,你才会发现记笔记和写Blog的优越性。

开源之美

好吧我承认这个小标题是为了对称。 git 现在应该已经是程序员版控的标配了吧,自从加入了 全球最大同性交友网站 以后,虽然并没有太多时间花在参与开源项目上,但还是非常喜欢这里的氛围。每天逛一逛,关注一下有趣的项目。除此之外,GitHub也成为继 stackoverflow 之后第二个寻求技术问题答案的地方。

之前做了 一张图学JavaScript 竟然有4k+关注,受宠若惊。同一系列的 一张图学Python 3 虽然一直处于未完成状态也有500关注,希望后面有时间可以补完。接下来也会尝试从一些小型开源项目开始,参与开发维护。

总结

现在别人问我专业方向,我都说是“工程心理学”,省去被要求算命的麻烦。因为科研方向是场景识别,接下来图像处理和机器学习自然是研究学习的重点,之前上完了吴恩达老师在Coursera的课程,感觉像是又学了一遍高级心理统计,现在越来越多机器学习的框架正在变得系统化、工程化,而且对计算量的需求也提高了对并行计算以及计算性能的要求,虽然现在数据挖掘领域争得不可开交的是 Python 和 R ,但是关键时刻还得上 C/C++ 啊(说来惭愧, C++ 我也是一天都没学过啊,我真是非主流啊哈哈);然后是函数式编程( Haskell ),也许并不会实际应用到生产项目,但确实可以感觉到能够带来许多新的思维方式,彻底改变对于很多问题的看法;最后闲暇之余,很想以做一些(尽量可以小而美)的OS X App,目前看来Electron + JavaScript 会是很不错的选择。

我非常喜欢《三体》里的一句话“给时光以生命,而不是给生命以时光”(虽然我求是过了,这句话并不是帕斯卡所说,但我还是喜欢 :D ),许多人觉得程序员不过只是“码代码的”的,但我觉得我们只是在借用代码创造这个世界上还不存在的美好事物,我们是画家,是艺术家,哈哈。

Make good things.

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索,以便于您获取更多的相关知识。