做程序界中的死神,斩魂刀始解
创始人
2024-05-30 14:40:43
0

标题解读:标题中的死神,是源自《死神》动漫里面的角色,斩魂刀是死神的武器,始解是斩魂刀的初始解放形态,卐解是斩魂刀的觉醒解放形态,也是死神的大招。意旨做程序界中程序员的佼佼者,一步一步最终修炼自己的大招。

本文选自左耳朵耗子叔的程序员练级攻略软件设计的内容,以此来分享一下。

编程范式

学习编程范式可以让你明白编程的本质和各种语言的编程方式。因此,我推荐以下一些资料,以帮助你系统化地学习和理解。

  • 推荐老师在极客时间写的《编程范式游记》系列文章
  • Wikipedia: Programming paradigm,维基百科上有一个编程范式的页面,顺着这个页面看下去,你可以看到很多很多有用的和编程相关的知识。这些东西对你的编程技能的提高会非常非常有帮助。
  • Six programming paradigms that will change how you think about coding,中文翻译版为 六个编程范型将改变你对编程的看法。这篇文章讲了默认支持并发(Concurrent by default)、依赖类型(Dependent types)、连接性语言(Concatenative languages)、声明式编程(Declarative programming)、符号式编程(Symbolic programming)、基于知识的编程(Knowledge-based programming)等六种不太常见的编程范式,并结合了一些你没怎么听说过的语言来分别进行讲述。
  • Programming Paradigms for Dummies: What Every Programmer Should Know,这篇文章的作者彼得·范·罗伊(Peter Van Roy)是比利时鲁汶大学的计算机科学教师。他在这篇文章里分析了编程语言在历史上的演进,有哪些典型的、值得研究的案例,里面体现了哪些值得学习的范式。
  • 斯坦福大学公开课:编程范式,这是一门比较基础且很详细的课程,适合学习编程语言的初学者。它通过讲述 C、C++、并发编程、Scheme、Python 这 5 门语言,介绍了它们各自不同的编程范式。

一些软件设计相关的原则

  • Don’t Repeat Yourself (DRY) ,DRY 是一个最简单的法则,也是最容易被理解的。当在两个或多个地方发现一些相似代码的时候,我们需要把它们的共性抽象出来形成一个唯一的新方法,并且改变现有地方的代码让它们以一些合适的参数调用这个新的方法。
  • Keep It Simple, Stupid(KISS) ,KISS 原则在设计上可能最被推崇,在家装设计、界面设计和操作设计上,复杂的东西越来越被众人所鄙视了,而简单的东西越来越被人所认可。宜家(IKEA)简约、高效的家居设计和生产思路;微软(Microsoft)“所见即所得”的理念;谷歌(Google)简约、直接的商业风格,无一例外地遵循了“KISS”原则。也正是“KISS”原则,成就了这些看似神奇的商业经典。而苹果公司的 iPhone 和 iPad 将这个原则实践到了极至。
  • Program to an interface, not an implementation,这是设计模式中最根本的哲学,注重接口,而不是实现,依赖接口,而不是实现。
  • You Ain’t Gonna Need It (YAGNI) ,这个原则简而言之为——只考虑和设计必须的功能,避免过度设计。
  • Law of Demeter,迪米特法则 (Law of Demeter),又称“最少知识原则”(Principle of Least Knowledge)。
  • 面向对象的 S.O.L.I.D 原则
    • SRP(Single Responsibility Principle)- 职责单一原则。
    • OCP(Open/Closed Principle)- 开闭原则。
    • LSP(Liskov substitution principle)- 里氏代换原则。
    • ISP(Interface Segregation Principle )- 接口隔离原则。
    • DIP(Dependency Inversion Principle)- 依赖倒置原则。
  • CCP(Common Closure Principle) - 共同封闭原则,一个包中所有的类应该对同一种类型的变化关闭。当因为某个原因需要修改时,把需要修改的范围限制在一个最小范围内的包里。
  • CRP(Common Reuse Principle)- 共同重用原则 ,包的所有类被一起重用。如果你重用了其中的一个类,就重用全部。CCP 则让系统的维护者受益。CCP 让包尽可能大(CCP 原则加入功能相关的类),CRP 则让包尽可能小(CRP 原则剔除不使用的类)。它们的出发点不一样,但不相互冲突。
  • 好莱坞原则 - Hollywood Principle ,好莱坞原则就是一句话——“don’t call us, we’ll call you.”。意思是,好莱坞的经纪人不希望你去联系他们,而是他们会在需要的时候来联系你。也就是说,所有的组件都是被动的,所有的组件初始化和调用都由容器负责。简单来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:1) 不创建对象,而是描述创建对象的方式。2)在代码中,对象与服务没有直接联系,而是容器负责将这些联系在一起。控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。好莱坞原则就是IoC(Inversion of Control) 或DI(Dependency Injection)的基础原则。
  • 高内聚, 低耦合 & - High Cohesion & Low/Loose coupling,这个原则是 UNIX 操作系统设计的经典原则,把模块间的耦合降到最低。
  • CoC(Convention over Configuration)- 惯例优于配置原则 ,简单点说,就是将一些公认的配置方式和信息作为内部缺省的规则来使用。
  • SoC (Separation of Concerns) - 关注点分离 ,SoC 是计算机科学中最重要的努力目标之一。这个原则,就是在软件开发中,通过各种手段,将问题的各个关注点分开。如果一个问题能分解为独立且较小的问题,就是相对较易解决的。
  • DbC(Design by Contract)- 契约式设计 ,DbC 的核心思想是对软件系统中的元素之间相互合作以及“责任”与“义务”的比喻。这种比喻从商业活动中“客户”与“供应商”达成“契约”而得来。如果在程序设计中一个模块提供了某种功能,那么它要:期望所有调用它的客户模块都保证一定的进入条件:这就是模块的先验条件(客户的义务和供应商的权利,这样它就不用去处理不满足先验条件的情况)。保证退出时给出特定的属性:这就是模块的后验条件(供应商的义务,显然也是客户的权利)。在进入时假定,并在退出时保持一些特定的属性:不变式。
  • ADP(Acyclic Dependencies Principle)- 无环依赖原则 ,包(或服务)之间的依赖结构必须是一个直接的无环图形,也就是说,在依赖结构中不允许出现环(循环依赖)。在设计模块时,不能有循环依赖。

一些软件设计的读物

  • 《领域驱动设计》 ,本书是领域驱动设计方面的经典之作。
  • 《UNIX 编程艺术》 ,这本书主要介绍了 Unix 系统领域中的设计和开发哲学、思想文化体系、原则与经验。。
  • 《Clean Architecture》

小结

好了,总结一下今天分享的内容。我认为,“品位”不同,是各层次程序员之间最大的区别,这也决定了他们所做出来的软件的质量和价值。因此,我特意撰写了软件设计这一篇章,帮助那些想成长为软件工程师、设计师或架构师的程序员,提高软件设计的品位,进而实现自己的目标。

虽然很多程序员都忽略了对编程范式的学习,但我觉得学习编程范式其实是非常非常重要的事,能够明白编程的本质和各种语言的编程方式。为此,我推荐了好几份学习资料,帮助你系统化地学习和理解。随后我介绍了 DRY- 避免重复原则、KISS- 简单原则、迪米特法则(又称“最少知识原则”)、 面向对象的 S.O.L.I.D 原则等多个经典的软件设计原则。

最后,我精选并推荐了软件设计方面的学习资料,如《领域驱动设计》、《UNIX 编程艺术》和《Clean Architecture》等必读好书,以及如何构建 SaaS,如何避免过度设计,如何设计 API,如何用程序打日志等方面的资料。

该笔记摘录自极客时间课程
《左耳听风》

相关内容

热门资讯

魔兽世界奥格瑞玛地下的洞穴在哪... 魔兽世界奥格瑞玛地下的洞穴在哪?发图!谢谢怒焰峡谷,再暗巷区,很容易找到地图上被标记的位置.知道奥格...
动漫人物特殊眼睛 动漫人物特殊眼睛两仪式、远野志贵——直死之魔眼爱尔奎特——或链魅惑之眼日向迟码家族——白眼宇智波家族...
魏晋士大夫为何爱上茶?最初如何... 魏晋士大夫为何爱上茶?最初如何吃茶地清火去燥,芳香营养。
搜索一下米兰昆德拉 搜索一下米兰昆德拉是出自《慢》
暴饮暴食的危害有哪些? 暴饮暴食的危害有哪些?暴饮暴食是一种不好的生活习惯,所带来的危害有以下,第一点就是可能会导致胃肠道溃...
怎样锻炼胸肌、腹肌、臂部肌肉及... 怎样锻炼胸肌、腹肌、臂部肌肉及力量?我是高二的学生(学舞蹈的),只能睡前锻炼一会儿!大约15分钟,没...
煮莲子时为什么会有很多泡沫? 煮莲子时为什么会有很多泡沫?煮莲子时为什么会有很多泡沫?如果是单独的莲子不会出现泡沫的。市场上的莲子...
韩语哈哈怎么写 韩语哈哈怎么写哈哈:하하(haha)하하,但是现在都简写成ㅎㅎ하 하 哈哈허허 呵呵ㅋㅋ 呵呵
粗粮豆包的做法 粗粮豆包的做法粗粮豆包首先要把发面发好,把出粮也放进一起发。发好以后的面,然后把豆子蒸熟以后给它搅碎...
抬头仰望夜空, 月亮旁边一颗很... 抬头仰望夜空, 月亮旁边一颗很明亮的星星是什么名字?启明星啊!我都知!系金星啊,启明星一般系日出前出...
什么是节拍?怎么区分? 什么是节拍?怎么区分?我正在学吉他!小学音乐没有学好。节拍就是用分数表示的那个东东啦!比如2/4、3...
我的偶像妈妈(有着独特的精神令... 我的偶像妈妈(有着独特的精神令我佩服)比如:乐于助人,无私奉献,拾金不昧等在我们的身边,有很多值得敬...
在学校吃早点作文 在学校吃早点作文每次的清晨,总是妈妈在天还没亮透的时候起床,给我做早餐。  按理说,我是一个很幸福的...
燕雀处堂什么意思? 燕雀处堂什么意思? 意思是燕雀住在堂上,比喻生活安定而失去警惕性,也比喻大祸临头而自己不知道。燕雀处...
有什么释放压力的游戏 有什么释放压力的游戏人多的游戏,会玩的很开心,还有自己感兴趣的
帮忙评价一下我的文章,从主题;... 帮忙评价一下我的文章,从主题;脉络;详略;语言来评价(每点简单写一两句就好了)顺便评个分,满分60帮...
形容人老实。本分。善良,的成语... 形容人老实。本分。善良,的成语。多多益善?表示善良的成语:善良设身处地于心何忍安分规行矩步浑俗和光既...
妈咪爱:宝宝便秘那些事儿,妈妈... 妈咪爱:宝宝便秘那些事儿,妈妈们造吗秋天到了,早晚温差大,天气越来越干燥,宝宝体内容易产生火气,小便...
韩语分为多少个等级 韩语分为多少个等级现在TOPIK分为两个等级TOPIK I、TOPIK II,各等级又可细分为:TO...
黑暗荣耀结局是什么? 黑暗荣耀结局是什么? 黑暗荣耀周汝正准备为父报仇。《黑暗荣耀》中男主周汝正经历了父亲被杀后,杀死父亲...