04 | 编程语言的进化-笔记

分水岭

编程语言的出现

分工标志

汇编语言

通过编程语言,我们可以做什么?

1.  和计算机进行交互  

2.  表达思想

为什么软件是获得书籍?

1. 软件是人类知识传承能力的一次伟大进化

2. 书籍: 记载时间 传递感情 揭示规律 传承技术

原因:

1. 表达方式的多样性

软件可以通过文字 超链接 多媒体 实时交互反馈的方式 还原场景

2. 对技术的现场还原

软件对于技术的还原可以使精确的 软件是技术的一部分 

技术传承是精确地

未来:

不管是否从事软件开发工作 我们都无法和信息科技脱节 

如果想站在职业发展的制高点 

理解计算机沟通的语言

理解软件工程师的语言 

每个小孩的基础教育中必有编程教育 如同每个小孩都要学习物理化一样


编程的范式

从汇编语言到诞生如此之多彩的编程语言的今天 只用了60多年

按照思想表达的方式 编程范式如下

1. 过程式 一条一条命令的方式 让计算机按照我们的意愿执行 例如 Fortran、C/C++、JavaScript、Go

核心概念

1. 结构体 —— 自定义类型

2. 过程—— 函数

结构体的组合 -> 构建人以复杂的自定义数据结构  -> 通过过程抽象出任意复杂的自定义指令-> 代码服用 简化表达

2. 函数式 本质上是过程式标称的约束 

主张 “变量不可变 函数没副作用”

难以彻底实施函数式思想 思想上可以借鉴

函数式编程相对小众 质量高 门槛高 

3. 面向对象

引入对象(类)、 对象方法(成员函数) 方法归纳到合适的类上,不主张全局函数 ,例如 Java、C#、C++、Go

从 面向对象 到 面向连接

面向对象的核心是契约

概念: 一种对代码使用界面的抽象和封装

特点:

1. 清晰的使用界面

某类型对象有哪些方法,一目了然

2. 信息的封装

面向对象不主张对象使用接口侵入到对象的内部实现细节。

接口的概念让 我们可以优雅地实现多多态

多态的概念

一般的,对象和对象方法是强关联,引入接口抽象不同对象的相同行为 不同对象可以使用相同的代码实现复杂的行为!

什么时候使用继承 是么时候使用组合?

地址:http://open.qiniu.us/go-next-c.pdf

GO 是面向连接的语言

面向连接的概念:

朴素的组合思想:研究人与人如何组合 研究代码与代码之间怎么组合


不只是只有对象需要契约 语言设计的方方面面都需要契约


消息传递是多核心思想

主张:用消息传递取代内存共享,避免显式锁机制、降低编程负担


其他的进化

包 :代码发布单元

版本 :包管理

文档生成

单元测试


按执行器的行为,分类

编译为目标文件 C++ Go Rust

跨平台虚拟机字节码 JAVA Erlang

直接解释执行 JS

语言对架构的影响

架构图简化 含服务端 客户端



淡紫色 硬件层 物理基础

淡绿色 软件层 程序员生态环境

橘色   库、源码层 程序本身的组成部分 还有一部分是业务架构

业务架构

如何拆分 模块做什么 取决于业务需求、无关于编程

模块规格描述

1. 语言无关的接口

2. 开发采用的语言描述

原则: 如无必要 勿增实体 

唯技术论角度:

业务架构与语言无关 影响的是模块规格描述语法

语言选择对业务架构的决策的影响仍然极其关键

原因:

1. 开发效率

社区框架和库、企业长期发展形成的框架和库- > 产生巨大差异

2. 后期维护

选择更熟悉的语言 或者 选择未来更优的语言  

## 总结

要想有所突破。需建立突破性思维、新思潮的过程容易差生过度设计


## 引用版权声明

极客时间版权所有:  https://time.geekbang.org/column/article/92419


有疑问、勘误、请您在下方留言,谢谢合作!

感谢您阅读,这篇文章归 极客点子版权所有.
如果转载,请注明出处: 极客点子版权所有(/page/934.html) 知识共享许可协议
本网站使用 创作共用 归属 - 非商业用途 - 共享4.0国际许可协议的相同方式 许可.

关于作者:

    作者:

    reverse()

    简介:

    nodejs 全栈工程师 、作家、github 开源爱好者
    研究方向:数据分析、 深度学习、 服务器架构、 系统原理

    著作:

    最爱的编程语言:

    Javascript
    Python