左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家,骨灰级程序员
立即订阅
40357 人已学习
课程目录
已完结 108 讲
0/6登录后,你可以任选6讲全文学习。
开篇词 | 洞悉技术的本质,享受科技的乐趣
免费
01 | 程序员如何用技术变现(上)
02 | 程序员如何用技术变现(下)
03 | Equifax信息泄露始末
04 | 从Equifax信息泄露看数据安全
05 | 何为技术领导力?
06 | 如何才能拥有技术领导力?
07 | 推荐阅读:每个程序员都该知道的知识
08 | Go语言,Docker和新技术
09 | 答疑解惑:渴望、热情和选择
10 | 如何成为一个大家愿意追随的Leader?
11 | 程序中的错误处理:错误返回码和异常捕捉
12 | 程序中的错误处理:异步编程以及我的最佳实践
13 | 魔数 0x5f3759df
14 | 推荐阅读:机器学习101
15 | 时间管理:同扭曲时间的事儿抗争
16 | 时间管理:如何利用好自己的时间?
17 | 故障处理最佳实践:应对故障
18 | 故障处理最佳实践:故障改进
19 | 答疑解惑:我们应该能够识别的表象和本质
20 | Git协同工作流,你该怎么选?
21 | 分布式系统架构的冰与火
22 | 从亚马逊的实践,谈分布式系统的难点
23 | 分布式系统的技术栈
24 | 分布式系统关键技术:全栈监控
25 | 分布式系统关键技术:服务调度
26 | 分布式系统关键技术:流量与数据调度
27 | 洞悉PaaS平台的本质
28 | 推荐阅读:分布式系统架构经典资料
29 | 推荐阅读:分布式数据调度相关论文
30 | 编程范式游记(1)- 起源
31 | 编程范式游记(2)- 泛型编程
32 | 编程范式游记(3) - 类型系统和泛型的本质
33 | 编程范式游记(4)- 函数式编程
34 | 编程范式游记(5)- 修饰器模式
35 | 编程范式游记(6)- 面向对象编程
36 | 编程范式游记(7)- 基于原型的编程范式
37 | 编程范式游记(8)- Go 语言的委托模式
38 | 编程范式游记(9)- 编程的本质
39 | 编程范式游记(10)- 逻辑编程范式
40 | 编程范式游记(11)- 程序世界里的编程范式
41 | 弹力设计篇之“认识故障和弹力设计”
42 | 弹力设计篇之“隔离设计”
43 | 弹力设计篇之“异步通讯设计”
44 | 弹力设计篇之“幂等性设计”
45 | 弹力设计篇之“服务的状态”
46 | 弹力设计篇之“补偿事务”
47 | 弹力设计篇之“重试设计”
48 | 弹力设计篇之“熔断设计”
49 | 弹力设计篇之“限流设计”
50 | 弹力设计篇之“降级设计”
51 | 弹力设计篇之“弹力设计总结”
52 | 管理设计篇之“分布式锁”
53 | 管理设计篇之“配置中心”
54 | 管理设计篇之“边车模式”
55 | 管理设计篇之“服务网格”
56 | 管理设计篇之“网关模式”
57 | 管理设计篇之“部署升级策略”
58 | 性能设计篇之“缓存”
59 | 性能设计篇之“异步处理”
60 | 性能设计篇之“数据库扩展”
61 | 性能设计篇之“秒杀”
62 | 性能设计篇之“边缘计算”
63 | 区块链技术的本质
64 | 区块链技术细节:哈希算法
65 | 区块链技术细节:加密和挖矿
66 | 区块链技术细节:去中心化的共识机制
67 | 区块链技术细节:智能合约
68 | 区块链技术 - 传统金融和虚拟货币
69 | 程序员练级攻略:开篇词
70 | 程序员练级攻略:零基础启蒙
71 | 程序员练级攻略:正式入门
72 | 程序员练级攻略:程序员修养
73 | 程序员练级攻略:编程语言
74 | 程序员练级攻略:理论学科
75 | 程序员练级攻略:系统知识
76 | 程序员练级攻略:软件设计
77 | 程序员练级攻略:Linux系统、内存和网络
78 | 程序员练级攻略:异步I/O模型和Lock-Free编程
79 | 程序员练级攻略:Java底层知识
80 | 程序员练级攻略:数据库
81 | 程序员练级攻略:分布式架构入门
82 | 程序员练级攻略:分布式架构经典图书和论文
83 | 程序员练级攻略:分布式架构工程设计
84 | 程序员练级攻略:微服务
85 | 程序员练级攻略:容器化和自动化运维
86 | 程序员练级攻略:机器学习和人工智能
87 | 程序员练级攻略:前端基础和底层原理
88 | 程序员练级攻略:前端性能优化和框架
89 | 程序员练级攻略:UI/UX设计
90 | 程序员练级攻略:技术资源集散地
91 | 程序员面试攻略:面试前的准备
92 | 程序员面试攻略:面试中的技巧
93 | 程序员面试攻略:面试风格
94 | 程序员面试攻略:实力才是王中王
95 | 高效学习:端正学习态度
96 | 高效学习:源头、原理和知识地图
97 | 高效学习:深度,归纳和坚持实践
98 | 高效学习:如何学习和阅读代码
99 | 高效学习:面对枯燥和量大的知识
左耳听风
登录|注册

30 | 编程范式游记(1)- 起源

陈皓 2018-01-11

现在很多的文章和演讲都在谈架构,很少有人再会谈及编程范式。然而, 这些基础性和本质性的话题,却是非常非常重要的。
一方面,我发现在一些语言争论上,有很多人对编程语言的认识其实并不深;另一方面,通过编程语言的范式,我们不但可以知道整个编程语言的发展史,而且还能提高自己的编程技能,写出更好的代码。
我希望通过一系列的文章带大家漫游一下各式各样的编程范式。(这一系列文章中代码量很大,很难用音频体现出来,所以没有录制音频,还望谅解。)
这一经历可能有些漫长,途中也会有各式各样的语言的代码。但是我保证这一历程对于一个程序员来说是非常有价值的,因为你不但可以对主流编程语言的一些特性有所了解,而且当我们到达终点的时候,你还能了解到编程的本质是什么。
这一系列文章中有各种语言的代码,其中有 C、C++、Python、Java、Scheme、Go、JavaScript、Prolog 等。所以,如果要能跟上本文的前因后果,你要对这几门比较主流的语言多少有些了解。
而且,你需要在一线编写一段时间(大概 5 年以上吧)的代码,可能才能体会到这一系列文章的内涵。
我根据每篇文章中所讲述的内容,将这一系列文章分为四个部分。
第一部分:泛型编程,第 1~3 章,讨论了从 C 到 C++ 的泛型编程方法,并系统地总结了编程语言中的类型系统和泛型编程的本质。
第二部分:函数式编程,第 4 章和第 5 章,讲述了函数式编程用到的技术,及其思维方式,并通过 Python 和 Go 修饰器的例子,展示了函数式编程下的代码扩展能力,以及函数的相互和随意拼装带来的好处。
第三部分:面向对象编程,第 6~8 章,讲述与传统的编程思想的相反之处,面向对象设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,列举了面向对象编程的优缺点,基于原型的编程范式,以及 Go 语言的委托模式。
第四部分:编程本质和逻辑编程,第 9~11 章,先探讨了编程的本质:逻辑部分才是真正有意义的,控制部分只能影响逻辑部分的效率,然后结合 Prolog 语言介绍了逻辑编程范式,最后对程序世界里的编程范式进行了总结,对比了它们之间的不同。
我会以每部分为一个发布单元,将这些文章陆续发表在专栏中。如果在编程范式方面,你有其他感兴趣的主题,欢迎留言给我。
下面我们来说说什么是编程范式。编程范式的英语是 Programming Paradigm,范即模范之意,范式即模式、方法,是一类典型的编程风格,是指从事软件工程的一类典型的风格(可以对照“方法学”一词)。
编程语言发展到今天,出现了好多不同的代码编写方式,但不同的方式解决的都是同一个问题,那就是如何写出更为通用、更具可重用性的代码或模块。
如果你准备好了,就和我一起来吧。

先从 C 语言开始

为了讲清楚这个问题,我需要从 C 语言开始讲起。因为 C 语言历史悠久,而几乎现在看到的所有编程语言都是以 C 语言为基础来拓展的,不管是 C++、Java、C#、Go、Python、PHP、Perl、JavaScript、Lua,还是 Shell。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《左耳听风》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(40)

  • Colin.Tao
    关于编程范式,超级喜欢《冒号课堂》那本书...两年前读的,真是相见恨晚。跟读大神的文章一样收获满满。
    2018-01-10
    2
    48
  • ibrothergang
    真正优秀的程序员就是应该上能写业务,下能搞底层。
    2018-01-04
    28
  • shougao
    分好几篇读,而且还要等好久才有下篇,每次都有意犹未尽感觉,女生说的追剧可能就是这感觉吧,浩哥写书吧,哪怕199一本直接读到你前后所有的思路

    作者回复: 我本来就是想在一年内写完104篇,写多少发多少,不是匀速发。不过运营方不同意,匀速发有规律,也容易慢慢消化,因为我的文章中知识量比较多……见谅了。以后我有控制权了,就照你说的办……

    2018-01-06
    18
  • Weizw
    强烈请求耗子哥整理成书啊,现在都是打印出来慢慢读。
    2018-01-04
    18
  • ryerh
    响应式编程够得上算一门范式么?
    以RX为代表的这一系列,考虑讲一讲么?
    2018-01-04
    7
  • 403
    斯坦福大学的编程范式公开课很好
    2018-07-12
    6
  • Silence
    这个系列又都是干货!!!
    2018-01-09
    5
  • 云学
    最喜欢看到的文字就是“我保证你会,本质是……”
    2018-01-04
    5
  • 云学
    终于等到这个系列了!!
    2018-01-04
    4
  • karas
    代码看的比较郁闷的同学(比如我这种。。。)可以参考K&R书的5.11章节,函数指针部分。

    主要看两点,一个是函数指针的声明和调用,比如这种`int (*comp)(*void, *void)`。

    另外,就是*void。void本身没啥卵用的,但是*void表示通用指针,可以被任何类型赋值。可以对标一下Java里面的Object类型。其实,Java的泛型在运行时擦除后,也都是Object,思路到挺像。
    2019-06-06
    1
    3
  • 宋桓公
    今天对范式编程有了新的理解,非常感谢。
    不过想想重装系统就是用这种范式都解决不好的语言写的,岂不蛋疼
    2018-06-15
    3
  • 王剑
    很精彩,希望后续还能有讲解数据结构的系列😄
    2018-01-04
    3
  • 亮出
    这样发挺好的,直接出书可能不会看了
    2018-01-11
    2
  • 茎待佳阴
    现在一般一个项目都不会只用一种语言了吧?底层的用c,c++这种,上层用java这些,各尽其能
    2018-01-04
    2
  • 瀚海星尘
    感觉c语言是个划时代的“中间层”语言。在它出现的那个年代最高级,而后又成为新的底层。在以前的硬件电路里它还有很多用武之地,但随着cpu内存等集成度越来越高,硬件资源的瓶颈被突破,c可能真的会被定格到“中间层”了。
    2019-07-10
    1
  • edisonhuang
    编程范式中的主线从范型编程,函数式编程,面向对象编程,到阐述编程的本质。
    编程概括来讲是算法+数据结构,不同的语言希望达到的共同目标都是希望能够尽可能的做到代码的可重用和易扩展。
    对于C语言这样面向过程,偏底层的语言,它选择信任程序员,可以很直接的操作计算机底层的硬件,做内存的直接读写访问,使得它执行更高效,但同时也带来了当类型变换代码扩展困难的问题。此处在C++中通过范型来解决了
    2019-06-17
    1
  • escray
    大学的时候 C 语言就一直没有学好,不能全怪“谭老师”,不过确实那本教科书里面并没有讲的很清晰。回头看来,其实 C 语言可能并不适合作为入门语言。

    毕业后没有什么动手写 C 代码的机会,接触了 JavaScript,Java,C#……比较喜欢 C# 的语法和风格。

    还曾经看过斯坦福大学的编程范式,不过也只是看了个开头。

    这个系列的文章发表已经快一年了,才来拜读,姗姗来迟,相见恨晚。
    2019-05-30
    1
  • 梁亮
    七周七语言也是一本好书,推荐。
    2019-02-02
    1
  • 绿茶
    对c语言有了进一步的了解,很喜欢这种讨论底层和本质的文章。
    范式就是语言的指导思想,这就很形象,容易理解和记住,以前老师推荐七周七语言,好像也是讨论七种语言的编程范式
    2018-12-14
    1
  • 固态U盘
    浩哥的这篇文章刚发出来的时候基本没看明白,过了几个月回头再看,明白了。
    2018-07-31
    1
收起评论
40
返回
顶部