这篇写了有第三版了。总是写了一半又中断,导致后续思维接不上。另一方面也说明,时间并不是很连贯。
今年是正式参与工作的第一年。去年大概这个时候,离开南京,孤身一人来到上海。
好在来到的这家公司很不错。接触到了之前前所未想组织开发方式,产品设计,财报压力,还有精妙的设计,优雅的代码,惊叹的 hack 技巧。
从他们身上学到了很多。有一个会在半夜十二点补作业的七零后技术 lead,一个愿意向实习生学习的设计总监,一个我始终不知道技术深度到底有多深的 mentor,一个能 review 任何人代码,写各种搞怪算法的后端,一个什么都懂的架构师,还有一个扫地僧似的项目经理,以及背景可怕的 PM。
我一直以曾经呆过那样的团队引以为豪。这个团队会拿公司发的垃圾电脑组刀片跑 job。这个团队会积极接触 swift, react-native,上最棒的架构,跑最酷的模型。
如果你有接触过这些东西你就能明白这得付出多大的成本。只说一个例子,我问过组里的 android, 他说基本把 rn 的代码整个改了一遍,后续版本的 bug 也都修复了一遍。那个时候加班很苦。
可是我觉得很酷。
你可能不知道,我在学校的时候有一次要赶着发布产品,因为第二天活动报名就开始了。我连着写了三十多个小时的代码,我也不知道自己吃的什么,也不知道为什么不困。等我意识到自己该休息的时候,一看时间已经凌晨四点多了。
那个时候我真不觉得苦,直到之后发现这应该被叫做“苦”,才意识到这是不正常的状态。
工作之后的换组,让我接触到了真正的工作是什么。是老板发工资给我,我去按照 pm 的要求干活。按部就班,日复一日。
算了,后面再谈。
技术
总的来说,今年的技术我学得很不好。
iOS, Android 这样的客户端都学了一些,也能写代码了,也基本能做产品出来了。细节和深度上当然还不行,反正是比不过应届生得水平。
之所以学原生开发得原因在于,我在做 rn 的时候很痛苦。老大比较担心我的 native 能力,所以一直没有放太多的原生桥接代码给我写,给我写的也基本上是那种三五行能搞定的。而我对于代码还是比较好强的一个心态,不过好强归好强,确实是写不好。那个时候也没什么时间可以去学,我总觉得自己太菜了,拿着公司给发的薪水,却做不好自己应该做的工作。所以在组织架构调整之后有了空余时间就去学了原生。学了原生之后我才发现,无论是 iOS, Android 抑或是 web, 其实都差不多。无非是 iOS 和 Android 的工程化程度更高一些,其实也算是简单一些。都是事件机制的,类 MVC 架构。所要学的只是 api 的变化而已。
深度学习学了大半年,是从看 吴恩达给你的人工智能第一课 这样的课开始的,不过最开始是 coursera 上学的,那个不推荐就不放链接了。真的学了大半年,理论感觉基本都挺过去了,笔记也写了挺多(感觉回到了高三的状态)。可是到现在仍旧一个模型都没训练出来。原因的话,应该是虽然理论应该没什么大问题了,可是 API 不熟悉,之前也没搞过这种数据驱动的东西,所以很棘手。我一直有想训练一个可以识别美女的模型,为此数据库里屯了大概有七万张图片。
不过随着越来越理解深度学习,我认为它并没有那么成熟,成熟到足以深刻地影响社会,足以改变一种新的生活方式。无论对谁,我都会说,现在的人工智能,连人工智障都算不上,至于那些搞人工智能的创业公司,在我看来,大部分都是骗炮的。人工智能确实是非常棒的东西,不过技术还不够成熟。
最近在学习区块链相关的东西。和对人工智能的态度刚好反过来。最初我的想法是,谁神经病啊,花 600 块买个看不见摸不到的所谓比特币?在看着比特币暴涨到一万美金的时候我也像是“科技博客”中的一样,幸灾乐祸等着崩盘。可是随着最近看了一些区块链的概念,比特币的实现以及要解决的问题,还有其他虚拟币的愿景与解决方案之后。我发现了我的无知。这是一个新的世界。
基于区块链的不可逆,可信任,分布式等等等等的概念将会改变我们生活的方方面面。它会构造一个新的社会结构,一个解决了落后社会问题的新的世界。在我看来,和它同等级的大概就是互联网的诞生。和区块链相比,深度学习这样的东西实在是虚无飘渺,除了骗取 VC 的资金,我想不到有什么更多的原因。
我最近在翻译一个关于实现加密货币的系列文章,大概在一月八号左右会放出来,到时候如果你还对区块链比特币没有什么比较深入的了解,可以试着看看。
说回技术。关于函数式编程,我没有很深入。只是了解了一部分像是不可变,纯函数的皮毛,能看 schema,能写简单的 schema 代码。
终于正式开始学了 Java,不过因为 golang 实在是太好用了,也一直没有大规模使用 Java 去做什么事情。算是能写 java 吧,不过话说回来,java 也很难写出烂代码吧。
就像上面说的,在今年,是真的开始大规模用 golang 了。几乎所有的非前端代码,我都在用 golang 去实现。无论是命令行工具,还是 web 服务。今年我已经全然放弃了 nodejs,如果不是工作需要,我不会写一行 node 代码。
golang 是一门很优秀的语言,简洁而有力。
elixir 也学了一部分,有些思想不错,比如 stream, crash early 等。也是没有大规模用过,看看明年有没有什么小工具可以写写,增加一下经验之类的。
关于技术深度和广度的优先级问题。知乎等地方一直鄙视全栈程序员,认为全栈程序员是全都不会。我觉得有必要讲一下我自己的想法。
在我看来,我认为应该是先有广度才能有深度的。一个前端,如果只是单纯做前端,很难接触到内存的概念,那么在内存泄漏的时候就一脸懵逼,完全没有解决的策略,在写代码地时候也没有内存优化地思想,也对 GC 没有概念。同样是一个单纯的前端,长期不接触多线程概念,那么在js语言概念发生了改变之后应该如何应对?依旧是一个单纯的前端,长期没有 Android, iOS 的接触,那么如何更好地封装组件?还是一个单纯的前端,如果不了解 int, big int, unsigned 这些概念,那么如何理解精度缺陷的问题,如何理解和处理 js 的高精度运算?最后还是个 js 程序员,长期不接触 interface, protocol, generics 这样的概念,有时候可能连后端给的接口文档都看不懂。
所以我觉得应该尽可能多地了解计算机概况,然后深入到其中的一方面,碰到瓶颈了转到另一个方向上。大部分时候,上一个方向的瓶颈也就迎刃而解了。
工作
最近我离职了。至于原因,我也想了很久,我觉得有必要写下来,因为无论是面试对 hr 说的,还是申请离职的时候对老大说的,都没有说得很全面。
团队。对于我来说,我认为团队非常的重要。它是最最最重要的。我很希望自己是团队里最弱最菜的,就像上半年在组里的感觉一样。我永远需要学习更多的东西,永远需要比别人更努力才能跟上他们的脚步,才能缩减和他们的差距,即使很难。团队的氛围也很重要,我的 mentor 代码洁癖相当严重,除非非常紧急的事件,他都会一行一行地看,思考,提出建议。说实话我过得心惊胆颤,每次看到他在 review 我的代码总是很害怕,不过实际上在被他训练了这么一段时间以后,我觉得自己的代码质量确实有了一部分地提升。团队中的大家都很爽快地愿意交流自己的想法。那个时候我丝毫不觉得沟通是一个成本非常高的事情(当然,之后我发现这个成本实际上高得超乎想象,只是我们奇葩,导致团队沟通成本低罢了)
责任。刚到公司的时候我总是干完活就跑,因为我不知道呆在那里该干什么,由于在莫名其妙的地方看的帖子导致我认为到钟了就该跑。后来 mentor 提醒我,应该对自己的代码负责,自己的模块上线测试了没问题了再走。这个事情我一直记得,不过现在没人催我应该这么做,很沮丧,也没人告诉我什么时候该上线了,甚至也不知道什么时候会上线,更不知道该不该下班。
还有团队的责任。我记得有一次因为我的疏忽,JIRA 上忘记写依赖,导致前端先上了,后端的 api 没有上线,出了问题。刚知道的时候我怕得要死,满脑子都是闯了祸。不过后来老大没有丝毫的怪罪我,他觉得是他自己的责任,没有处理好这个问题。他们花了一段时间讨论应该如何避免再次犯这个问题,而不是找是谁的责任。
上面的东西全是团队的内容。不过一个新的团队我们很难看到这些东西,只能从面试官的接触中初步了解,还有感受。
第二重要的是设备。我发现,似乎所有人都不 care 这个点。除了我。我对于性能有些奇妙地追求,也对设备有很多偏执。所以我会自己配一台可能五年之内也不能完全发挥全力的八核处理器。为 64G 内存做准备的单条 16G。我觉得设备是一个工程师文化的公司的最基本的标志。虽然它并不会花多少钱。如果有公司愿意为我配置主频 4GHz+ 的 16 核 CPU 做开发机,我愿意每天多加班一个小时,工资少 1k。我觉得我应该用最好的设备做出最棒的产品。我不怕风险,也不担心压力。我只怕自己做不够好。
我最烦的是编译等待。相信你也一样。
第三重要的是钱。它的比重相当低,至少对于现在的我来说。我觉得工资越高越好的一点是,公司愿意在我身上投这么多钱,认为我值这么多。这件事会让我开心。至于拿到多少钱,反倒没那么重要。或者说在一定的量级之下都没那么重要。在我接触到的百万千万上亿身家的人中(不是吹,我还真有这样的同学朋友同事)。他们没有一个是靠工资达到这样身价的。要么是自己创业,要么是投资。所以,我觉得年薪百万以下的水平,大家都差不多,都买不起静安的房子,都买不起布加迪,都没办法抵抗较大的风险。差别无非是你开奔驰我开五菱而已。没有什么太大的区别。所以,我期望高工资,可是也从没想过能靠这个东西达到财富自由。
之后的都是杂七杂八的理由了。什么离家近,妹子好看这种的。对我更是没有什么影响。
生活
长发。长发已经留了有十五个月了。,到了及肩的程度。白发依旧没有染,所以如果你找我的话,人堆里一眼就能看到,“那个个子高的,长头发的,白的,巨丑的男的”。
毕业。毕业之后反倒发现要学的东西太多了。感觉毕业之后的这一段时间比我大学两年学得还要勤快。
读书。上半年读书挺多,下半年一直在啃《源氏物语》。今年强烈推荐《演员的自我修养》,放到任何职业身上都很合适,写得超级棒。然后是《源氏物语》,看着很痛苦,因为特别长,字还是晚清民国时候的语法。看完之后大概能理解一下日本文化的内核了,因为快看完了,现在看日本文化,有点儿理解 物哀
是一种怎样的感觉了。原来觉得《龙族》里写死梨绘衣是普通的情节,现在看来倒是很符合日本文化。之后看的一本《现代操作系统》,已经给一万个人安利过了,程序员必看。
今年本来给女票买了一台“小蚁微单”,后来可能是她觉得我太穷了,担心我饿死在上海,又给退了。
而我厚着脸皮买了一块 Apple Watch。 感觉没那么好。
今年花费最多的是自己组了一台电脑。用着非常的开心。性能很棒。顺便上了 2k 显示屏。感觉挺舒服的。
吉他,基本下半年就没怎么练,现在除了基本几个和弦以外,其他都不会。
日文依旧很差,没怎么学。最快明年要去日本旅游一圈,现在还这么差可不行,需要多花点儿时间学。
未来
我不太想干前端了。不过由于递简历的时候太懒没有改字,所以下一份工作还是干前端。目前的想法是,下份之后的工作可能转去干后端了,或者骗个深度学习之类的职位,也可能干 PM 坑人。
我的愿景是不想很频繁地换工作,换工作很累,有较高的成本。履历上也不好看(虽然我并不 care)。
短期目标的话,明年能多学点儿程序设计,语言暂时没目标了。对区块链设计非常熟悉。深入视觉设计,加强沟通能力和写需求以及整理需求的能力。
长期目标的话,当然是自己创业,做一番事业,早日实现财务自由,顺便去纳斯达克敲个钟什么的。
ps: 发现毕业以后,学习的时间更少了