2017-我的技术之路

2017 我的技术之路:不忘初心,夯实基础

又一年春去冬来,到了年末盘点的时候,感觉自己今年相较于前两年沉稳了些,也愈能明晰自身的不足;所以本年的主题就定为了不忘初心,夯实基础。今年年初的时候领证结婚,未立业而先成家;从南大毕业,结束了学生生涯;从零到一组建技术团队,看着新公司逐步发展壮大;加入某厂,结束三年的创业生涯,突破现有的瓶颈。三年创业,终未成猪,也是有哭有笑;虽然算不得什么慷慨激昂大事,却也有一种渡尽劫波兄弟在,相逢一笑泯恩仇的感叹。

首先来聊聊初心吧,像我这样小富即安,胸无大志的,可能也谈不上有什么初心;但是随着眼界与格局的提升,会忧虑于此生一事无成,亦担心自己浅薄而不甘平庸,反而成了痛苦的原罪。当我什么都不会的时候,心有惴惴,容易妄自菲薄;这三年的磨砺下来,只希望自己的心境圆融些,能够不卑不亢,知道自己能做什么,知道自己要做什么。很多的领域也是多奇技淫巧,像笔者这样愚钝的唯有脚踏实地,步步向前;中道而行,心无旁骛。前五年都在中小型团队,更多的承担的是团队协调的职责;在不同的业务场景、团队搭配背景下,我也慢慢地养成了自己对于团队成员的期望。而当今年自己作为校招新人进入新的团队,从零做起时,愈发体会到提升团队效能的重要意义。

从大四出来开始创业至今也有四五年的时间,笔者自觉自己的技术学习历经了三个阶段;首先是只会写基础语法,使用内建接口的阶段,而后是喜欢追逐名词,不求甚解的阶段,现在是发现自己连基础语法都不会的阶段。技术一直有所谓的术道之辨,有的开发者选择了广度,有的选择了深度,但是无论如何都需要从点到面;类比知识的金字塔,唯有地基广而实,才能保证塔尖高而稳。现在又是知识爆炸的时代,借鉴未来简史中所谓自由主义的挽歌,如果我们踟蹰不前,肯定是要被抛弃的;另一方面,现在又是繁忙的时代,极少有时间能够系统化地学习,更多的还是要碎片化学习。所谓集腋成裘,聚沙成塔,但是没有能沉淀为体系,终究也是水上浮萍,经不住时间的打磨。笔者下车伊始即致力于打造完备的知识图谱,让知识在它该在的地方,这也是笔者遨游无尽海洋的一叶方舟。越来越多的技术、工具、框架之间存在交集,特别是在微服务、分布式系统、容器编排等方面,而知识图谱不断重构地过程,在笔者看来,也是不断穿过表象看本质的淬炼。

不拘于具体的技术方向或者领域,笔者认为最为珍贵的能力之一即为解决问题的能力;从技术的角度来看,就是编码能力与工程组织(等)。很多时候我会感慨于编程的时候会有阻塞感,因为需要频繁地在各个语言之间切换,很多语法特性却是无法信手拈来;另一方面,随着各种技术方案推陈出新,我们不应该追逐新颖,但是要能够为问题寻找合适的解决方案,打造面向团队的,能够提升团队整体研发效能的工程体系。年末的时候,笔者将两千多篇笔记规整到七个仓库二十余个不同的系列中,这些笔记即是以不同的组织形式,承载不同的内容,来提升、保障笔者的编码能力与工程组织意识,确保任何时候都保持自己对于知识的掌握。笔者不可避免地会陷入到不专一、容易三心二意的困局,但是任何愿意抬头看路的程序员都会关心整个产品,他山之石,可以攻玉;也不希望现在做的事情,限制了自己的发展。

笔者为不同的系列取了不同的名字,各有寓意,也自然是有很多名不副实,不过也是表达了笔者的一种希冀。首先是 Knowledge Map - IT 知识图谱与技术路线,指明了技术之路上漫游的方向;文末附图即是最新的知识图谱,而泛前端、Web、微服务等等细节则可以前往原文查看。其次是 AwesomeListAwesome CheatSheet,分别从不同的维度解决我知识编排的问题。AwesomeList 记录了笔者在日常阅读、学习与实践中发掘的优秀的资料,其按照知识图谱中定义的各个领域的知识体系分门别类地存放。笔者会不断更新其中链接,去芜存菁,去重留一,希望为同仁提供优秀的、有价值的、尽可能精简的资料索引。笔者还将自己阅读,收集的,优秀的电子书集锦到了 Awesome-CS-Books,阅读书籍永远是最为系统的学习方式,能够帮助我们缓解过于碎片化带来的技能不连贯性与片面性;本仓库以 IT CS 相关书籍为主,同时也会包含一些著名的、有价值的公开课程。Awesome CheatSheet 则是致力于解决知识易忘与速学概览的需求,其目标为语法速览, 实践备忘,从零到一,上手即用;Awesome CheatSheet 会是我 2018 年里的重点项目,也是保证我编程能力的重要依仗。对于笔者往年技术之路的记述,归档在了 Tech Road - 某熊的技术之路

其次是编程语言相关,主要归档在了 Domain of ProgrammingLanguage - 编程语言语法基础与工程实践,存放了笔者在编程语言方面学习与实践总结而来的笔记;笔者目前首选的语言为 JavaScript / Java / Python / Rust,因此笔记也就为现代 JavaScript 开发:语法基础与工程实践, 现代 Java 开发基础, Java 工程实践与设计模式, 深入浅出 Java 并发编程, JVM 内部原理与性能调优, 现代 Python 开发:语法基础与工程实践, Rust in Action, 编程语言理论指南等几个方面。编程语言是软件开发的基石,而软件开发就是把一个复杂的问题分解为一系列简单的问题,再把一系列简单的解决方案组合成一个复杂的解决方案。笔者在 SoftwareEngineering Essentials - 软件工程基础中归档了数据结构与算法基础, 团队协同开发与软件质量保障必知必会, 设计模式与软件架构之禅等内容。

笔者今年投注精力较多的 Web 领域,最令我惊讶的就是前端每周清单系列;万事开头难,坚持不懈则是难上加难,我并非意志坚定的人,但是一年来前端每周阅读清单能持续更新,我也是蛮佩服自己的,经常会半夜加班赶稿;很多时候无暇发文,都是内容整理好了之后交与我夫人帮忙发布,所以来年大大们轻喷呀~ 而在系列文章方面,笔者整理了 现代 Web 开发基础现代 Web 开发工程化实践现代 Web 应用架构与性能调优React 开发与前端工程化实战Vue 开发与前端工程化实战等数个系列,归档在了 Web-Development-And-Engineering-Practices之中。而对于更广阔的大前端领域,笔者在 Frontend Technology Handbook - 大前端开发相关中整理了 iOS 开发基础与工程实践, Android 开发基础与工程实践, 混合式开发基础与工程实践, 深入浅出数据可视化等内容。

而在泛后端领域,笔者总结在了服务端应用程序开发与系统架构深入浅出分布式基础架构 这两个仓库中,分别包含了服务端应用程序开发基础深入浅出 Node.js 全栈架构Spring Boot 5 与 Spring Cloud 微服务实践DevOps 与 SRE 实战信息安全与渗透测试必知必会;以及Linux 配置使用、内部原理与 Shell 编程MySQL 内部原理与性能优化分布式存储与 NoSQL 数据库基础分布式容器架构与编排云计算系统与大数据应用等内容。最后就是在数据科学、机器学习、深度学习等领域,笔者归档在了 程序猿的数据科学与机器学习实战手册,包括了 Python 机器学习基础深度学习课程笔记深度学习与自然语言处理实践等内容。

不同人的学习方式不一样,不过对于瓶颈期的人而言,保证自己每天能阅读/浏览 30 ~ 50 篇资讯/文章,也是比较可行且容易量化的成长方式。而撰写技术文章,不仅是对自己的积淀,帮助自己更深入地理解;也是希望能够以自己的绵薄之力跟大家一起成长,不仅能用于公司内同事的共同学习,也想着能有更多的后进英才,使整个行业蓬勃发展。笔者将今年常看的一些站点列举如下:

此外,笔者今年还尝试分享自己工作生活中编写的小工具,或者模式化的解决方案。fractal-components 存放了笔者以 Pure CSS / Vanilla JS / React / Vue / RN / D3 不同的形式/框架积攒的组件,webpack-app-templateiReactPackiVuePackwebpack-app-template 则是前端项目组织方式的沉淀。Modern-JavaScript-SwissGear 中则集锦了 observer-x 变量响应式监控、decorator-x 现代实体类注解与 Swagger API 文档生成、declarative-validator 校验、x-fetch 网络请求等模块。

2018 年在保证自己每天开心地做好本职工作之余,希望完成思虑(拖延)多年的 Java 并发编程与 JVM 实战系列、熟悉并且实践 Rust、真正地能将机器学习与深度学习用起来。虽然 Rust 尚未投入到生产环境中,但是笔者认为其是非常不错且合适的 JavaScript 技术栈的互补;其编译为 WebAssembly 的能力以及作为 Node.js 原生插件,都能够弥补 JavaScript 在性能上的不足。对于 Rust 的学习与使用也并非朝夕之事,还是需要较长时间的了解与实践才能用好。今年前端框架之战逐渐平静,期待明年的编译元年,为前端带来更多的可能。

今年的很多时间还要来筹备婚礼,12.30 携妻手踏入婚姻的殿堂,工作繁忙之后很多的文案整理与发布也都是她帮我处理的,每天回家之后才能进行些内容写作,或者维护些项目代码。感谢尾尾,感谢川哥,谢谢一年来很多前辈同仁的提携与指导,支持与鼓励;谢谢每一位阅读我的文章,批评、指正、认可我的人,谢谢你们给予我前进的动力。山高水远,来年再见~

(各领域更多内容查看 Knowledge Map - IT 知识图谱与技术路线)

上一页
下一页