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国际许可协议的相同方式 许可.
- You Don't Know JS: Async & Performance Appendix B: Advanced Async Patterns
- 6.You Don't Know JS: ES6 & Beyond Chapter 5: Collections
- You Don't Know JS: ES6 & Beyond Chapter 6: API Additions
- 2.You Don't Know JS: ES6 & Beyond Chapter 1: ES? Now & Future
- You Don't Know JS: ES6 & Beyond Chapter 8: Beyond ES6
博文分类
- nodejs
- express
- thinkjs
- go
- beego
- javascript
- css3
- react native
- python3
- react
- 翻译
- 手册
- 树莓
- Error修复
- 五味
- IoT
- 技巧
- swift
- Android
- C++
- ruby
- perl
- linux
- mysql
- pgSQL
- Redis
- webpack
- C
- Object-C
- SOA
- browserify
- unix
- NDK
- C#
- Docker
- java
- PHP
- gulp
- Sass
- Data mining
- Architecture
- Laravel
- TCP/IP
- AI
- Unix Socket
- Lua
- League of Legends
- tensorflow
- minecraft
- flutter
- dart2
- mongodb
- Julia
- UML
- typescript
- rust
- nginx
- 极客时间
- 架构与道
- 算法
- RHCA