十年铲码,八大体系超千篇数百万字技术笔记系列汇总(GitBook 悦享版)
十年铲码两茫茫,纵思量,却易忘;不觉笔者步入程序员已有十年。十年里一直浮沉沉沉沉,愈深入,愈觉得世界之大,宇宙浩瀚。十年之期,正巧笔者从阿里离开,重回 3D 打印制造业的怀抱,希望能依托于设备优势逐步、真正构建分布式制造网络。十年里,笔者从最初的自我摸索、摔爬滚打,到进入华为、阿里这样的大厂,不断地完善对于完整的技术世界观的理解,并且尝试对于自我产品意识的启蒙。
十年里,学的也很多,忘的也很多,如今发现自己还是在许多技术的门槛处徘徊。从小愚钝,只能以笔代记,以勤补茁。洋洋洒洒百万字,数十万行垃圾代码,也是笔者存在过的痕迹。同时也是借此文对过去几年里的 TL(@Henry https://github.com/mjolnirjs)和小伙伴表示感谢,让我不断地体悟什么是以客户/用户为中心,将技术产品化,慢慢褪去过去的纯技术导向的思维。人生有幸,与有趣的人,做有趣的事,下一个三年,依旧江湖再见。
文章指北
在这个知识大爆发的时代,笔者所见许多人面临的问题不再是知识的匮乏,也不是缺乏学习的动力、毅力或激情,而是在浩汤洪流之中迷失了方向,也无足够的承载知识的容器,终致学的越多,忘的越多,竹篮打水一场空。某熊的技术之路系列文章/书籍/视频/代码即是笔者为自己构建的知识围栏,也是笔者蹒跚行进于这条路上的点滴印记,包含了笔者作为程序员的技术视野、知识管理与职业规划,致力于提升开发者的学习效率与实际研发效能。
目前笔者已有数十仓库千篇文章百万字,你可以在某熊的技术之路指北 ☯查阅详细的导航。可以前往 Awesome Lists 或者 Awesome-CS-Books 查阅分门别类的资料与书籍,抑或前往 Awesome MindMaps 查阅完整的知识体系、脉络与要点的脑图,或者 Awesome RoadMaps 了解不同技术领域的进阶指南。最后,你还可以前往 Awesome Interviews 做最后面试前的准备,或者用常见的技术面试题去检验自己学习的结果。
您可以通过以下导航来在 Gitbook 中阅读笔者的系列文章,涵盖了技术资料归纳、编程语言与理论、Web 与大前端、服务端开发与基础架构、云计算与大数据、数据科学与人工智能、产品设计等多个领域:
此外,你还可前往 xCompass 交互式地检索、查找需要的文章/链接/书籍/课程;或者在 MATRIX 文章与代码索引矩阵中查看文章与项目源代码等更详细的目录导航信息。最后,你也可以关注微信公众号:『某熊的技术之路』以获取最新资讯。
Awesome MindMaps
Awesome ITCS MindMaps 是笔者所有系列文章、代码、项目中的知识系统的脑图形式的总结:
- 知识脉络
- 知识要点
Awesome RoadMaps
当我们站在技术之路的原点,未来可能充满了迷茫,也存在着很多不同的可能;我们可能成为 Web/(大)前端/终端工程师、服务端架构工程师、测试/运维/安全工程师等质量保障、可用性保障相关的工程师、大数据/云计算/虚拟化工程师、算法工程师、产品经理等等某个或者某几个角色。在这个知识爆炸与终身学习/碎片化学习为主的时代,我们面临的问题之一就是如何进行有效学习,不仅能有效平衡广度与深度,并且能真正的积淀下来,提升自己的研发效能。于笔者而言,常常郁结于胸的就是以下三个问题:
-
应该学习什么?这是怎样的一个技术世界?存在着怎样的高峰与路径?
-
如何克服遗忘带来的无效学习?
-
如何不再碎片化地学习?
究其根本,也就是需要拓展自己的知识广度,精进自己的知识深度,锤炼自己的编程能力。所谓知识广度,即是为实际问题选择合适的解决方案的能力,广义来说也是眼界与格局的表现。它并不拘泥于某个技术方向或者行业领域,而需要对传统/流行的各类语言、工具、框架、库、服务等有一定的认识;能够明晰各个方案的优劣,并在较高的层次(High Level)描述相关原理。知识广度的拓展与保持需要建立在庞大的阅读量与知识沉淀能力上。在能力模型一节中,我们从业务、团队、技术这三个维度,对技术人员的五个层次进行了梳理:
Awesome Lists 就为我们准备了精而全的技术开发学习与实践资料索引,去芜存菁,去重留一;譬如其中的 Awesome WebSites 一文就为我们推荐了值得阅读的资讯、博客等站点列表。知识广度的拓展也并非一蹴而就之事,需得循序渐进,从初窥门径,到登堂入室,最后融会贯通,当我们感觉乱花渐欲迷人眼,太多的碎片化知识反而使自己迷失方向之际,就可以前往 Awesome CS Books Warehouse,去深入地阅读学习各个领域的精选书籍、课程等系统化的内容。
俗话说,好记性不如烂笔头,当我们阅读的多了,自然也要开始记录;而笔者认为记录的开始就要有自己的知识体系。在自己的知识体系下随看随记、定期整理。唯有建立符合自己认知方式的知识图谱,才能有效地沉淀知识,明晰知识边界并进行不断地探索。上车伊始,笔者即致力于构建自己的 Awesome MindMaps,提供了软件工程通用、前端、后端、DevOps、测试、架构师、人工智能工程师等多领域的知识图谱、学习成长路线与面试必备内容,并在数年来不断维护与刷新。
笔者目前选择的是以 MarkDown 格式记录,并且将所有的笔记存放于 Github-文档札记以 Git 方式进行版本管理;编辑器是直接使用的 VSCode,移动端编辑的话也是用的 GitGo/WorkCopy 这样的 Git 应用。这些笔记即是笔者自身技术视野与认知的外化,也类比于外设之于内存,在需要的时候分页加载到脑海中使用,以应对这知识爆炸的时代。其中的典型代表,Awesome CheatSheets,对于日常开发中用到的相关知识的备忘录/清单进行总结, 适合快速掌握或者回顾某个语言/框架/工具的语法或使用要点。Tech Road, 我的技术之路是对于笔者多年学习与认知变迁的总结。
先贤有云,知行合一,知是行之始,行是知之成,Linus Torvalds 也曾提到: ‘Talk is cheap. Show me the code.’,在阅读与笔记之后,就是要开始实践编码。所谓编程能力,并不仅仅是编写代码(Write Code)的能力,而是包含了阅读、编写、理解、重构、抽象等多个方面,是所谓的代码管理/掌控。其外在表现之一即是能够随时随地用合适的语言无阻塞地实现某些功能需求,对于常见的语法,接口,算法,设计模式等能够做到心随意动,信手拈来。编程能力是提升研发效能的重要保障,于笔者而言也是毕生应该追求的目标与爱好之一。笔者的编程能力较弱,日常开发,特别是在多语言多框架并用的场景下,往往会需要不断地中断,查找以继续工作,也是令我颇为苦恼。Coding Snippets 系列仓库,即是对笔者在编程语言、前后端编码过程中常用的模板、模式等代码片、工具库的汇聚。
前文重在讨论如何拓宽技术视野、追寻技术的广度,但是需要铭记的是,技术深度才是技术广度的基石,正如中国自古以来常用道术之辩,知其然,也要知其所以然;亦如 Richard Feynman 所述:”What I cannot create, I do not understand.”。所谓知识深度,即是能够对某个方面做到深入了解,并且达到融会贯通,洞若观火,可以随心所欲地加以扩展、优化、创新等改造或变换。这方面则更加的见仁见智,不同的领域与方向对于深度的定义与挖掘方向也是千差万别。Reinvent Wheels 系列仓库即是笔者在前后端到基础架构中重造的轮子的汇总。
我们需要自己去从零开始造些轮子,才能深刻理解使用的框架/库/平台的内部原理,才能在碰到故障时快速地修复;在下文的几乎每个章节中,我们都会提到某些笔者自造的轮子。笔者目前将所有的文档归类到了不同的系列中,每个系列又分为 篇-章-节-小节 这样的层次结构。