极客时间
http://139.196.35.134/time/#/article/9369[2018/8/1 11:05:58]
程序员练级攻略(2018):软件设计
2018-06-21 陈皓,杨爽
学习软件设计的方法、理念、范式和模式,是让你从一个程序员通向工程师的必备技能。如果你不懂这些设计方法,那么你将无法做出优质的软件。这就好像写作文一样,文章人人
都能写,但是能写得有条理,有章法,有血有肉,就不简单了。软件开发也一样,实现功能,做出来并不难,但是要做漂亮,做优雅,就非常不容易了。
Linus
说过,这世界程序员之所有高下之分,最大的区别就是程序员的
“
品味
”
不一样。有品位的程序员和没有品位的程序员所写出来的代码,所做出来的软件,差距非常大,而且价值
也差别很大。
所以,对于我们每一个程序员,如果你想成为软件工程师、设计师或架构师,软件设计是你必须用心学习的事
。
然而,软件设计这个事,并不是一朝一夕就能学会的,也不是别人能把你教会的,很多东西需要你自己用实践、用时间、用错误、用教训、用痛苦才能真正体会其中的精髓的。所
以,除了学习理论知识外,你还需要大量的工程实践,然后每过一段时间就把这些设计的东西重新回炉一下。你会发现这些软件设计的东西,就像饮茶一样,一开始是苦的,然后慢
慢回甘,最终你会喝出真正的滋味。
要学好这些软件开发和设计的方法,你真的需要磨练和苦行,反复咀嚼,反复推敲,在实践和理论中螺旋式地学习,才能真正掌握。
所以,你需要有足够的耐心和恒心。
编程范式
学习编程范式可以让你明白编程的本质和各种语言的编程方式。虽然很多程序员都忽略了这个事,但是其实是非常非常重要的事。因此,我推荐以下一些资料,帮助你系统化地学习
和理解。
一个是我在极客时间写的《编程范式游记》系列文章,目录如下。
编程范式游记(
1
)
-
起源
编程范式游记(
2
)
-
泛型编程
编程范式游记(
3
)
-
类型系统和泛型的本质
编程范式游记(
4
)
-
函数式编程
编程范式游记(
5
)
-
修饰器模式
编程范式游记(
6
)
-
面向对象编程
编程范式游记(
7
)
-
基于原型的编程范式
编程范式游记(
8
)
- Go
语言的委托模式
编程范式游记(
9
)
-
编程的本质
编程范式游记(
10
)
-
逻辑编程范式
编程范式游记(
11
)
-
程序世界里的编程范式
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
)等六种不太常见的编程范式,并结合了一些你没怎么听说过的语言来分别进行讲述。
比如在讲
Concatenative languages
时,以
Forth
、
cat
和
joy
三种语言为例讲述这一编程范式背后的思想
——
语言中的所有内容都是一个函数,用于将数据推送到堆栈或从堆栈弹
出数据;程序几乎完全通过功能组合来构建(
concatenation is composition
)。作者认为,这些编程范式背后的思想十分有魅力,能够改变对编程的思考。我看完此文,对此
也深信不疑。虽然这些语言和编程范式不常用到,但确实能在思想层面给予人很大的启发。这也是我推荐此文的目的。
Programming Paradigms for Dummies: What Every Programmer Should Know ,这篇文章的作者彼得·范·罗伊(Peter Van Roy)是比利时鲁汶大学的计算机科学教
师。他在这篇文章里分析了编程语言在历史上的演进,有哪些典型的、值得研究的案例,里面体现了哪些值得学习的范式。
比如,在分布式编程领域,他提到了
Erlang
、
E
、
Distributed Oz
和
Didactic Oz
这四种编程语言。虽然它们都是分布式编程语言,但各有特色,各自解决了不同的问题。通过这
篇文章能学到不少在设计编程语言时要考虑的问题,让你重新审视自己所使用的编程语言应该怎样用才能用好,有什么局限性,这些局限性能否被克服等。
):软件设计