软件设计之美
郑晔
开源项目 Moco 作者
19890 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
软件设计之美
15
15
1.0x
00:00/00:00
登录|注册

12 | 编程范式:明明写的是Java,为什么被人说成了C代码?

你好!我是郑晔。
在上一个小模块,我给你讲了程序设计语言,帮助你重新审视一下自己最熟悉的日常工具。但是,使用程序设计语言是每个程序员都能做到的,可写出的程序却是千差万别的。这一讲,我们就来看看这些差异到底是怎样造成的。
在开始之前,我先给你讲一个小故事。
在一次代码评审中,小李兴致勃勃地给大家讲解自己用心编写的一段代码。这段代码不仅实现了业务功能,还考虑了许多异常场景。所以,面对同事们提出的各种问题,小李能够应对自如。
在讲解的过程中,小李看到同事们纷纷点头赞许,心中不由得生出一丝骄傲:我终于写出一段拿得出手的代码了!讲解完毕,久久未曾发言的技术负责人老赵站了起来:“小李啊!你这段代码从功能上来说,考虑得已经很全面了,这段时间你确实进步很大啊!”
要知道,老赵的功力之深是全公司人所共知的。能得到老赵的肯定,对小李来说,那简直是莫大的荣耀。还没等小李窃喜的劲过去,老赵接着说了,“但是啊,写代码不能只考虑功能,你看你这代码写的,虽然用的是 Java,但写出来的简直就是 C 代码。”
正在兴头上的小李仿佛被人当头泼了一盆冷水,我用的是 Java 啊!一门正经八百的面向对象程序设计语言,咋就被说成写的是 C 代码了呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文通过一个代码评审的故事引出了编程范式的概念,深入探讨了结构化编程、面向对象编程和函数式编程三种主流编程范式的特点和约束。文章以实例说明了不同编程范式在实际应用中的灵活性和互补性,强调了学习不同编程范式并将其中优秀元素运用于日常工作的重要性。同时,还提到了一些语言在发展中融合不同编程范式的趋势,以及程序员在学习其他编程范式时可能面临的思想冲击。总的来说,本文通过生动的故事和具体案例,为读者深入浅出地介绍了编程范式的概念和重要性,对于程序员具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《软件设计之美》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(13)

  • 最新
  • 精选
  • 西西弗与卡夫卡
    当Bob大叔说出那句,“编程范式本质是从某方面对程序员编程能力的限制和规范”时,真有些振聋发聩

    作者回复: 哈哈,你看出我从哪吸收营养了。

    2020-06-22
    42
  • chenzesam
    不单止编程范式对程序员的能力做了限制,编程框架也在开始做这一方面的努力了。努力提高程序员的下限。

    作者回复: 这个理解是对的,编程框架本来就是让你少和底层细节打交道。

    2020-06-22
    15
  • 阳仔
    主流的编程语言都有结构化编程,面向对象编程,函数编程。纯粹单一的使用某个编程范式在现代编程语言其实会越来越少,现代语言都是吸收了各种编程范式的优点组合编程

    作者回复: 没错!

    2020-06-22
    2
    8
  • escray
    看到编程范式,首先想到的是左耳听风专栏里面也有过的“编程范式游记”,不过当时似乎没有认真看,而且也没有音频版本,这次正好可以参照着学习一下。 斯坦福大学公开课中有编程范式,同样只看过前面一两讲。很久以前,我上大学的时候,似乎是没有编程范式这门课的(也可能有老师讲过,但是我逃掉了)。 特意去看了一下专栏的目录,编程范式这部分一共有 8 节课。有一点疑惑,为什么要在编程范式上下这么多功夫? 对我来说,结构化编程可能是用的最多的;面向对象也在用,但可能用的不好,甚至不对;函数式编程基本没怎么接触过。 我能够理解,文中所说“将不同编程范式中的优秀元素综合运用在日常工作中”,但是不知道如何去做。 等专栏的这个模块结束的时候,再来回答“编程范式为什么重要”这个问题。

    作者回复: 为什么要在编程范式上下这么多功夫?因为没有地方把这些东西仔细讲啊!太多人只熟悉结构化编程了,对面向对象也不了解,对函数式编程也不了解,所以,要好好讲讲。

    2020-06-24
    6
  • Demon.Lee
    而在每个类具体的接口设计上,采用函数式编程的风格 ------ 老师,这句话具体如何理解,我脑子里出现的是java8里面的@FunctionalInterface,很多接口中的函数入参都是一个个@FunctionalInterface,比如: public interface Predicate<T> { default Predicate<T> and(Predicate<? super T> other) { Objects.requireNonNull(other); return (t) -> test(t) && other.test(t); } ... }

    作者回复: 后面讲到函数式编程的时候,你就会看到我的做法了,简言之,设计可以组合的接口。

    2020-06-22
    5
  • Jxin
    以函数式编程为例。 1.我能理解不变性的价值,毕竟在应对并发场景时我也用cow的模式。但很难接受将cow贯彻到每个函数,本能的觉得浪费。 2.我看得到函数式编程在代码上的简洁(可读性高)。但将功能实现成函数式编程的风格,感觉比较难(也可能是我水平不行,毕竟没有刻意练习),而难本身就是成本。(业务逻辑翻译成功能代码,从易到难:面向过程,面向对象,函数式编程)。 3.虽然我理解鸭子理论。但我就想明确的定义接口。因为,当我作为调用方时,我只想知道意图,而没有实现的接口,显然是比较整洁的。 4.虽然我理解函数是一等公民(单方法接口)的定位。但我就喜欢接口下定义多个方法(行为),因为我认为接口是一类事务共同行为的抽象,那么行为很可能是捆绑出现。比如说,对动物行为做抽象,吃和拉必须一起出现,只有吃没有拉,只有拉没有吃都挺尴尬。

    作者回复: 不同的系统会有不同的原则,性能不关键的系统,用不变对象带来的优势大于性能损耗。

    2020-06-22
    4
  • Janenesome
    一定要把这篇转发出去,中小公司的代码里都是平铺直叙,工作了几年,面向对象是什么都忘记了。

    作者回复: 还可以转发《代码之丑》和《10x 程序员工作法》

    2020-10-20
    2
  • sam
    如果有介绍各种需要编程范式发展和应用的资料就好了,比如Objective-C,Swift等等

    作者回复: 编程范式,我们后面聊。

    2020-06-22
    1
  • solo
    小李做的就是用脚蹬电瓶车 ,电瓶车也提供了脚蹬子
    2021-08-15
    2
  • 6点无痛早起学习的和尚
    工作 3 年了,第一次这么系统性的了解编程范式这个内容
    2023-09-12归属地:北京
收起评论
显示
设置
留言
13
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部