后端技术面试 38 讲
李智慧
同程艺龙交通首席架构师,前 Intel& 阿里架构师,《大型网站技术架构》作者
37373 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 46 讲
不定期加餐 (1讲)
后端技术面试 38 讲
15
15
1.0x
00:00/10:27
登录|注册

开篇词 | 掌握软件开发技术的第一性原理

讲述:李智慧大小:9.57M时长:10:27
缺乏对新技术诞生来源的理解
缺乏理解新技术背后的思想和原理
把握事物最本质的特征原理
架构的核心原理
软件的设计原理
软件的基础原理
建立技术体系的起点
物理学的第一性原理
方法问题
交流学习方法
围绕事物核心推动事物正确前进的做事方式
第一性原理的思维方式
专栏如何帮你建立技术体系
第一性原理
学习新技术的困难
学习方法
软件开发技术的第一性原理

该思维导图由 AI 生成,仅供参考

计算机软件开发是一个日新月异的领域,几乎每天都有新的技术诞生。每隔几年,软件开发领域就会进行一次大的技术潮流变换,所以身处其中的软件开发技术人员也常常疲于奔命,不断学习各种新知识、新技术,生怕被这个快速变革的时代所抛弃。
但是每次从头开始学习一个新的技术,这个过程既痛苦又漫长,好不容易掌握得差不多了,新的技术又出现了,于是不断重复从入门到放弃这一过程。这个过程是如此痛苦、艰难,以至于整个行业形成了一种所谓的“共识”:随着学习能力和体力精力的下降,编程知识和技能逐渐衰退,35 岁以后就不能写代码了。
其实很多看起来难以坚持、让人容易放弃的事情,并不是智力、体力或者意志力的问题,更多的是方法问题。很多时候,学习新知识和新技术之所以困难,是因为没有理解这些新技术背后的思想和原理,以及这些新技术诞生的来源。太阳底下没有新鲜事,绝大多数新技术其实都脱胎于一些既有的技术体系。
如果你能建立起这套技术思维体系,掌握这套技术体系背后的原理,那么当你接触一个新技术的时候,就可以快速把握住这个新技术的本质特征和思路方法,然后用你的技术思维体系快速推导出这个新技术是如何实现的。这个时候你其实不需要去学习这个新技术了,而是去验证这个新技术,你会去看它的文档和代码,去验证它是不是和你推导、猜测的实现方式一致,而不是去学习它怎么用了。那么,学习一个新技术就变成了一个简单、轻松、快速且充满乐趣的过程了。你不再惧怕学习新技术,而是开始抱怨:为什么技术革新得这么慢,太无聊了。你甚至可以开始自己创造新技术。

第一性原理——建立技术体系的起点

那么如何实现这一美好的愿景,建立自己的技术思维体系呢?
物理学有一个第一性原理, 指的是根据一些最基本的物理学常量,从头进行物理学的推导,进而得到整个物理学体系。有硅谷钢铁侠之称的埃隆·马斯克特别推崇第一性原理,他做电动汽车、做航空火箭,并没有去遵从别人的老路,而是从这个产品最本质的需求和实现原理出发,重新设计了产品最核心的关键以及发展路径,进而开发出自己独特创新的产品。Google 的创始人拉里·佩奇说过:“让我自由地从物理规则出发去思考问题,而不是迎合那些所谓的世俗智慧。”其实也是第一性原理。
第一性原理就是让我们抓住事物最本质的特征原理,依据事物本身的规律,去推导、分析、演绎事物的各种变化规律,进而洞悉事物在各种具体场景下的表现形式,而不是追随事物的表面现象,生搬硬套各种所谓的规矩、经验和技巧,以至于在各种纷繁复杂的冲突和纠结中迷失了方向。
软件开发技术也是非常庞杂的,各种基础技术,各种编程语言,各种工具框架,各种设计模式,各种架构方法,很容易让人觉得无所适从。就算下定决心要从基础学起,上来一本厚厚的《操作系统原理》,好不容易咬牙坚持学完,回头一看,还是各种迷茫,不知道在讲什么。继续学下去,再来一套更厚的《TCP/IP 详解》,彻底耗尽了意志力和兴趣,完全放弃。
其实,我们不需要一开始就精通操作系统进程调度的各种算法,也不需要上来就掌握 TCP/IP 协议里的各种帧格式。我们应该从软件技术的第一性原理出发,了解每个基础技术方向那些最关键的技术原理,明白这些原理是如何和我们日常开发工作发生关系的。
比如我们的程序是如何被操作系统调度执行的?为什么高并发的时候系统会崩溃,原理是什么?在编程时,什么场合下应该使用链表,什么场合下应该使用数组,为什么?当我们使用 Hash 表的时候,什么情况下它的性能会急剧降低,原理又是什么?我们用 Redis 这样的分布式缓存的时候,到底要解决什么问题?分布式缓存是如何工作的?还有哪些技术看起来和 Redis 毫不相干,其实工作原理是一样的?
如果我们能把这些基本问题都回答清楚了,那么这些问题背后的核心技术原理也都理解了,我们就开始建立起自己的技术思维体系了。当有新的问题和技术出现,你就可以思考,这是属于哪个技术领域的?它的核心原理和哪个技术方案本质是一样的?
如果你掌握了软件开发技术的第一性原理,那么当你为了解决某个新问题,去学习和研究一个新技术的时候,就算遇到了知识的盲点,也可以快速定位到自己技术体系的具体位置,进一步阅读相关的书籍资料,这个时候也许你就会深入到操作系统的调度算法实现或者通信协议头信息的具体编码里,但是这时,你不会觉得枯燥无聊,也不会觉得迷茫无措,只会觉得原来如此,太有意思了,甚至觉得这其实可以实现得更好。

专栏如何帮你建立技术体系

我想从软件技术的第一性原理出发,写一写软件技术那些最基本的知识原理和知识体系。在这个专栏中,我对自己过去二十年软件编程生涯和业界的技术发展历史进行回顾总结,将软件知识技术体系分成软件的基础原理、软件的设计原理、架构的核心原理三个部分。
软件的基础原理主要是操作系统、数据结构、数据库原理等等,我会从一个常见的问题入手,直达这些基础技术最本质的原理,并覆盖这些基础技术的主要关键技术点,让你理解这些基础技术原理和你日常开发工作的关联关系,对这些基础技术有一个全新的认知。
在软件的设计原理里,我会讲述如何设计一个强大灵活,易复用,易维护的软件。在这个过程中,应该依赖哪些工具和方法,遵循哪些原则和思想,使用哪些模式和手段。如果软件只是实现功能,那么程序员就没有高下之分,软件也没有好坏之分,技术也就不会有进步。好的软件究竟好在哪里?如何自己也写出一个好的程序?我将在这个模块一一道来。
架构的核心原理围绕目前主要的互联网分布式架构以及大数据物联网架构进行剖析,分析这些架构背后的原理,它们都遵循了怎样的驱动力和设计思想,有哪些看似不同的技术其实原理是一样的,以及如何通过这些技术实现系统的高可用和高性能。
软件开发是一个实践性很强的活动,如果你只是学习技术,那么就是在纸上谈兵。只有将知识技能应用到工作实践中,才能真正体会到技术的关键点在哪里,才能分辨出哪些技术是真正有用的,哪些方法是花拳绣腿。但是公司不是你实践技术的实验室,怎样才能处理好工作中的各种关系,得到充分的授权和信任,在工作中实践自己的技术思想,并为公司创造更多价值,得到更多的晋升和发挥的空间,使自己的技术成长和职业发展进入互相促进的正向通道?我将会在第四模块,技术人的思维修炼和你分享一些这方面的方法和认知。
我在学习几何的时候,开始常常困扰于各种定理、推论,我觉得它们都很相似,以至于进行几何证明的时候,不知道该用哪个。后来我索性不去管这些定理和推论,而是直接从公理开始证明,虽然证明步骤长了一点,但是总归能证明出来。后来做的题多了,发现有些中间推导结果总是重复出现,打开书再学习,发现这些重复出现的中间结果就是各种定理、推论。这个时候我不去记这些定理,也能随心所欲去用它们了。
其实我学几何的这种方式就是第一性原理。第一性原理是一种思维方式,一种学习方式,一种围绕事物核心推动事物正确前进的做事方式。也许这个专栏讲到的很多知识技术你已经掌握,但是这些知识技术和软件技术最基本的原理的关系你也许不甚了解。它们从何而来,又将如何构建出新的技术?如果把这些关系和原理都理解透彻了,你会发现,日常开发用到的各种技术,你不但可以随心所欲地去使用,甚至可以重新创造。
如果说具体的技术是一朵花,那么技术思维体系就是一棵树,希望你跟随我的专栏,种下自己的技术思维体系之树,收获一树繁花。
在学习的路上,你有哪些建议或者心得体会呢?欢迎你分享在评论区,我会和你一起交流这些学习方法,也欢迎把这篇文章分享给你的朋友或者同事,一起交流一下吧!
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

软件开发技术的第一性原理是建立自己的技术思维体系的关键。通过理解技术背后的思想和原理,以及技术诞生的来源,可以快速把握新技术的本质特征和思路方法。这样,学习新技术就变成了一个简单、轻松、快速且充满乐趣的过程。专栏作者将软件知识技术体系分成软件的基础原理、软件的设计原理、架构的核心原理三个部分,深入讲解了软件技术的基本知识原理和知识体系。他强调了软件开发技术的实践性,提出了如何在工作中实践自己的技术思想,并为公司创造更多价值的问题。通过专栏的学习,读者可以建立自己的技术思维体系,快速定位到自己技术体系的具体位置,进一步深入学习相关的书籍资料,而不会觉得枯燥无聊或迷茫无措。作者以自己学几何的方式来解释第一性原理,鼓励读者种下自己的技术思维体系之树,收获一树繁花。

2019-11-1864人觉得很赞给文章提建议

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端技术面试 38 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(36)

  • 最新
  • 精选
  • Archer-上源-嘿喵
    学习的第一性原理其实就是两个关键动机 「偷懒的专业化」和「灵活的抽象化」。我们之所以发明计算机就是为了可以在大批量重复计算中偷懒,发明专业性计算机。后来我们发现单一用途的计算机每次都要从头搭建于是为了灵活一点,抽象出程序语言,发明通用可编程计算机。后来在编程中自动化程度高了,又发现同样的问题。太自动化的程序不好调节,为了偷懒于是出现了模块化解耦编程,专业化又来了,就是分包分库,甚至高级语言。可是后来又发现各种分包分库中有很多重复动作,于是出现了重复动作的抽象打包,或者打包成函数或者打包成对象,这样编程起来又简单省事了。现在又进入专业性的时代,比如web应用的MVC框架,AI的神经网络框架...下一步估计又要抽象出各种框架的共性出现真正的元框架了吧...

    作者回复: 👍

    2019-11-18
    68
  • Y024
    查理·芒格认为:学习并不是追求更多的知识,而是要寻找更好的决策依据。这个更好的决策依据,就是那些经过广泛验证的原理和规律,称之为思维模型。第一性原理和芒格的思维模型很相似。

    作者回复: 👍

    2019-11-18
    2
    43
  • 无形
    李老师的专栏,买就对了,李老师大数据的专栏是我第一个看完的专栏,记得李老师的《大型网站架构》里的一句话,是事情成就了人,非常受用,也深有体会,正是因为有了一件件非常具有挑战性和技术难点的难题,在解决这些难题的过程中,才会不断成长和进步。基于事情成就人的观点,最近准备搞一个基于文件的高性能检索系统,涉及爬虫,数据的存储,倒排索引等,一方面能够用大量的数据考验技术,也能让自己在之前不曾涉及的具体的挑战面前去学习、思考技术的细节,探索问题的本质,在解决问题的过程中使自己进步,现在已经遇到了一些问题,老师的专栏来的正是时候👏👏👏

    作者回复: 👍

    2019-11-19
    4
    12
  • 度衡
    前端路过,我有些逆潮流,我想具有全栈开发能力

    作者回复: 欢迎

    2019-11-18
    4
    6
  • 宋文杰
    上次看老师直播,就非常期待这门课,终于上线了!

    作者回复: 谢谢~

    2019-11-18
    6
  • 探索无止境
    希望看到有一个深入推导的过程,这样就会非常精彩,而不是直接给出一个结论,期待

    作者回复: 我正是这样努力的。多交流,多指正~

    2019-11-19
    5
  • 老男孩
    时隔一年,智慧哥终于又上线了。看了开篇内容,我不由想起了一句话“授之于鱼不如授之于渔”。21世纪是一个技术爆炸的时代,软件技术更是日新月异。4G技术的应用开启了移动互联网时代。而5G的出现,将带给我们一个全新的未来——万物互联。也许就此开始一次新的工业革命!在这样一个背景下,身为老码农的我既高兴又焦虑。如何快速迭代技术?估计要付出非常人的努力。也许技术本身只是工具,智慧哥说的第一性原理才是技术大厦的根基。万变不离其宗,武侠小说中绝世高手所谓的手中无剑心中有剑,也许就是高手参悟了武学的第一性原理,所以手中拿什么都不重要了,只是工具而已。所以这个专栏很值得期待!

    作者回复: 🤗

    2019-11-18
    2
    3
  • William
    李老师有很多话,都被我在不同场合所引用,人如其名,充满智慧的内容

    作者回复: 🌹

    2019-11-19
    2
  • sammok2003
    追着李老师的更 肯定能受益匪浅

    作者回复: 🌹

    2019-11-19
  • L
    就这个标题,作为后端新人必买啊😂

    作者回复: 加油~ 一起学习交流~

    2019-11-18
收起评论
显示
设置
留言
36
收藏
99+
沉浸
阅读
分享
手机端
快捷键
回顶部