熊写代码这三年: 阅读写作与技术成长

本文是非技术向的随笔,慎点!

本文是一篇种田流水文,希望以平淡的笔触记录笔者这三年的成长。本文整体大概会包括自我定位、阅读、写作、知识殿堂这几个部分,为了避免过于正式就不分章节了。

笔者的第一份工作从大三开始,在南京某家安全公司从事安全培训与渗透平台开发,兼职做做讲师;老实说肚子里没几滴墨水却要对着台下数百听众,搜肠刮肚地忽悠他们,很锻炼面皮啊。后来某个来头不小的二代找我说一起创业吧,他想颠覆世界,问我敢不敢一起。于是我就拉着身边的兄弟走了出来,很感谢我的两个舍友那些年里给我的支持与包容,容忍了我做的那些傻逼的事情。现在想起来,我还挺佩服 CEO 勇气的,竟敢找我来创业,真的是年轻啊。那个时候经常逛的是以 DZone 为代表的这类网站,并非说它们不好,不过确实太多的标题党,动辄新一代产品或者性能提升 100%。那时的我太过年轻,才从农村出来尚不知城市套路深,轻信了这些标题党,当然根本原因还是我们毫无经验,结果两个月的时间开发出来的 Hybrid APP 启动时间 20 多秒;当时我还一脸无法理解为什么 CEO 会露出绝望的眼神,毕竟之前参加某软件大赛的作品启动要将近两分钟还得到了好评。经历了技术波折之后我们老老实实回到了原生开发,接下来的一年多时间我技术上不一定成长多少,市面却是见了不少,充分认识到关系不是万能的、产品经理是必须的、需求是不能随便变的、领导的话是不能轻易相信的等等等等。后来,公司黄了,一分钱没赚到。后来,我参与到其他的创业当中,满怀热情,也看着那些年的冬日里熄灭的火苗。次数多了,也就不会痛了,印象比较深刻地还参与过某在线婚庆创业,某 3D 打印创业等等,直至现在有时候会去妹子所在的某建筑行业软件服务公司帮帮忙。如今公司招人,我引以为豪地能拿出来讲夸公司的一大优点就是,我们公司有稳定收入,不会吃了上顿没下顿,不会一朝入冬。想想走过的路,有两个自己打自己脸啪啪响的典型,一个是大二的时候推崇底层开发,裸写机器码,觉得 Web 不过是套模板的毫无前途的活计;另一个是跟运营商接触多了觉得传统软件行业里都是观念陈旧的老技术、毫无创新理念与创新动力。然后我现在主要依托于 Web 技术栈,在于政府合作的建筑投标软件行业里混饭吃。这三年走过大江南北,到过万里之外,见过异域风情,写过数百万字,赚到数十万元。印象最深的是爱人相伴,友人相随,笑过哭过,也有后悔。

笔者啰啰嗦嗦这么多,想表述的不过是认识你自己。天地不仁,万物刍狗,我们要相信勤奋是会有回报的;念念不忘,必有回响,连机器都能通过大量学习优化模型,何况智人乎?笔者是早产儿,七个月的时候出生,差一点就不能跟这个世界说你好。从小略显愚笨,弱于常人,就像笔者对于数学心有畏惧,这么些年一直没学好算法结构与机器学习。笔者也没有过人的毅力与执着的态度,到现在也没能真正的好好锻炼过,也没能如预期般学完一个课程或者看完一本书。更多的时候我是想着怎么跟自己妥协,寻找到真正能够完成的,精神与肉体上都能接受的方案。另外在将技术相关的东西之前,笔者还是希望读者能认清自己的定位,不是说一定要怀着莫大的热情才能进入 IT 领域,而是尽可能地找到自己的定位。我觉得很好的例子就是我夫人,当年也是在某外包公司做嵌入式码农,每天工作都是痛苦万分;后来慢慢地摸索,发掘了她某个最大的优势:以轻微的强迫症去做产品经理,女生特有的细心与品质决定了她能更好地去催促程序员赶进度。现在她同时实现了自我价值与集体价值,成为了公司运转的核心之一。知前路之漫漫,敢披荆而斩棘,相信大家都能找到合适自己的位置。

化学中的放射性元素往往有所谓半衰期的概念,即某种特定物质的浓度经过某种反应降低到剩下初始时一半所消耗的时间。同理,知识的半衰期则是用于衡量知识的价值随着时间流逝它消失的速度。相对变更较慢的医学知识的半衰期约 45 年,物理学知识的半衰期是 10 年,而计算机知识的半衰期可能只有两年,一直在激烈变化的互联网领域知识可能只有几个月。沉舟侧畔千帆过,就像笔者在怀着被抛弃的恐惧在奋斗中前行描述的,鱼与熊掌不可兼得,放弃安逸的铁饭碗而进入竞争激烈的 IT 行业,势必会被后来者超越的,我们只有不断修修打打自己,才能不被这个时代所抛弃。古语有云,开卷有益,对于笔者的阅读相关可以参考某熊的阅读与写作日常 ,这里不作赘述。不过回望自己的阅读流程,我最初是从刷推酷的每日推荐开始,大概每天能看数百篇,选出有价值的放到 Pocket 里面留待后看。后来慢慢的发现每天刷的列表里面仅有两三篇会被留存下来,慢慢的就转向了 Reddit、HackerNews、Medium 这些;老实说笔者并非崇洋媚外,不过目前来看中国的社区相对整个世界还是一汪浅水,所以我默默地把公司默认搜索引擎设置成了 Google。在成长之初碎片化的阅读很有益处,虽然会感觉很痛苦,仿佛被强行填食的鸭子,但是如破茧而出,帮你打开广阔的世界。笔者现在逐步的有强迫自己去看书,虽然有时候跟看文章一样一目十行,蜻蜓点水,但是不得不承认书和论文里成体系的描述介绍不是碎片化的文章所能给予的。这里推荐笔者前一阵子收集的追求技术之上的进阶阅读学习索引机器学习、深度学习与自然语言处理领域推荐的书籍列表

文以载道,歌以咏志。当我们阅读积累到了,自然就会形成自己的想法,并且想对这个世界说出来。笔者的写作分为两步,首先是做笔记,而后是写文章,厚积薄发,切不能强求。笔者最初做笔记的时候,很多朋友会质疑,记录的笔记真的会去看吗?是不是记录之后就能记住了?答案自然是否定的,笔者一直以来鼓励自己做笔记的动力并不是让自己不会遗忘,而是希望在下一次需要的时候能够以最快的速度学习让自己回忆起之前的东西。笔者发现身边很多人的学习能力并不弱,但是技术能力难以进步突破的问题却是在于永远都在重复学习,譬如笔者团队中秉持岗位轮换的原则,可能做几个月的服务端再轮换做一些简单的前端,但是每次都需要重新学习,看不出什么进步。罗曼罗兰说过,多数人二十或三十多岁已经死了,他们变成自己的影子,不断重复以前的自己。有时候我们的笔记会是我们生命存在的痕迹,让你能够记得自己走过的路,踩过的坑。笔者现在大概分门别类地有两千多篇笔记,断断续续地写了二百多篇文章;并不是说没有积累就不能写作,而是你没有积累很难去进行长时间的持续地写作。写文章本身不仅是让你的思想曝光于世,让别人帮你发现自己的不足;还是很好的打造个人品牌,增加自己社区影响力的好方法。

如果你是前端新人或者技术新人,很建议从尝试翻译开始;InfoQ 网站包括其架构师月刊等一直是我认为国内质量比较高的资讯来源之一,年后也有幸成为了其社区编辑。我发现他们有个很不错的任务领取与报酬机制,如果你希望相互督促,也能转点零花钱,那么可以尝试加入这个大社区,跟着大家一起前行。

记得包法利夫人里面有一句总结,浅薄且不甘平庸是最大的原罪;而在技术之路上,在没有知识体系的情况下,学习的知识都是相互独立,难以互相借鉴,举一反三,阅读也不过是春风拂面,一掠而过,不留痕迹,知识也就难以真正的沉淀下来。笔者非常支持认可碎片化学习的思想,但是否定在没有知识体系的情况下盲目的碎片化学习。特别是对于尚未建立基础知识体系与认知能力的同学,如果突发性地吸收过多的知识,反而会摧毁自己的认知能力。就好像传说中的吸星大法,乱吸的后果就是体内真气斑驳不堪,最终走火入魔,爆体而亡。因此我们必须要建立自己的知识体系与思维宫殿,梭罗在《瓦尔登湖》中写道:知道自己知道什么,也知道自己不知道什么,这就是真正的知识。知我所知是对于自己能力的正确认识,知我所不知则能为自己未来的路明确些方向。笔者关于自己的对于软件世界的认知写在了2016-我的技术之路:编程知识体系结构图里。Program into Your Language, Not in It.

前端工程化这个词一直很火,笔者在2016-我的前端之路:工具化与工程化2015-我的前端之路:数据流驱动的界面 这两篇年度总结里都有详细的不成熟的自我思想的介绍。记得面试腾讯的时候面试官问道你这么激进地使用现代语法,使用 Babel 然后导致包体增倍怎么能兼顾老旧浏览器或者带宽上不是很好的地方的用户呢?我默默想起了现在公司碰到的一个有趣的事件,我们做的某个投标工具(Web & Electron)对于浏览器或者系统有较高要求,但是政府客户典型的标配 XP 与 IE。我们思考了好久如何去达成兼容性,最后欧了一波笔记本电脑跟软件产品打包发售,还额外赚了一笔的说。工程做久了,有时候会发现自己陷入到某种瓶颈。本节可能过于主观了,对于我们所熟知的云计算与大数据、服务端应用程序架构(API、微服务与高可用等)、基础架构(数据存储、虚拟化、分布式系统与集群计算等)等等偏工程的进阶之路,老实说并不是螺丝钉们所能轻易实践的。笔者之前一直感慨于混迹在小公司之间,所谓大数据不过镜花水月,很难真正有实践的场景。除了工程向的进阶之外,笔者个人主观感觉还有两个偏理论的进阶向,即使不能有所实际成就也能提升个人品味的方向,一个是偏向于数据学科与人工智能,包括机器学习、深度学习、自然语言处理等等;另一个是偏向编程语言原理、计算机系统基础理论、数据库系统基础理论的方向。笔者本科的时候发了四五篇文章,遗憾的是在南大的三年未能投身学术,一文未发,愧对师长。有时候看着其他同学仰望星空,自己只能默默在沼泽地里蹒跚前行。

本文最后,笔者还是想对于所有阅读过我的文章的朋友说声谢谢,你们的支持是我前行的动力,希望在未来的岁月里我能够继续完善我的知识体系中的内容,也希望能够帮助到所有花时间阅读我文章的人。诚如罗胖所说,未来的世界是时间的战场,愿意花时间阅读的朋友本身也是一种付出。笔者这些年来一直笔耕不缀,不过写的绝大部分都是属于某个领域中某个技术细节的介绍与实践总结,借这篇随笔之际,笔者也是打算以随笔的方式,描述自己对于编程的认知、感悟、猜想,因为这个系列更多的是非技术性的思考,希望能得到真正的大家指导,与其他人思维碰撞。笔者不敢取名为程序员的自我修养,毕竟笔者自己都不知道自己是否称得上合格的程序员,因此取名为程序熊的自我修养。【程序熊的自我修养】系列拟会包含以下部分:

  • 【程序熊的自我修养】知识体系与自我定位

  • 【程序熊的自我修养】阅读与积累

  • 【程序熊的自我修养】工具与实战

  • 【程序熊的自我修养】产品与工程化

  • 【程序熊的自我修养】编程之道:编程语言、数据结构与算法、编程范式

  • 【程序熊的自我修养】Web 前端

  • 【程序熊的自我修养】服务端应用程序架构

  • 【程序熊的自我修养】数据科学与人工智能

上一页