从历史看编程
不是因为有了计算机才有了编程。而是,因为有的编程,才创造了计算机。
编程早于计算机
当你想到编程是不是想到的是密密麻麻的代码,或者不管变化的数字?其实编程的目的是通过逻辑计算解决现实的问题,而写代码是实现目的的方式。
在计算机软件编程出现之前,就已经有了对编程的探索。1700年代,莱布尼兹(对,就是发明微积分和二进制的莱布尼兹)尝试用逻辑语言描述各种事物,计算出事物的结果。但是,莱布尼兹只是提出了构想,随后,布尔把它进行了体系化,但是编程计算机的梦想依旧没有实现。
到19世纪中叶,英国人Ada利用打孔纸袋写出人类第一个软件程序,这个程序还包含循环和子程序。因此,Ada被认为是第一个程序员/媛。这时距离计算机的发明还有100年。
什么是计算机
真正的计算机是40~50年代诞生。
最早的计算机编程需要程序员将电线编来编去,以控制计算机的执行(所以,才叫编程?)。不过,很快就有了机器指令编程。
但是,机器语言是面向机器的,对人来讲,太难写、太难读、太难改!为了解决机器语言编写、阅读、修改复杂的问题,汇编语言应运而生。
但是,无论是机器语言,还是汇编语言都是面向机器编程的。而人更习惯按照自己的逻辑去编程。因此,出现了各种结构化的语言,以及高级语言,强调的是逻辑,实现了莱布尼兹最初的编程思想。
从面向过程到面向对象
高级语言解放的程序员,使程序员可以面向逻辑去编程。早期程序员是单打独斗的,或2~3人开发一个系统,高级语言可以满足需要。
但是随着开发的系统越来越大,越来越复杂,原来的编程方式无法组织更多的程序员协作,失败的项目越来越多,软件质量也得不到保障。
究其原因,编程的方式如果按照逻辑,每个人的理解不同,多人无法协作编程。
在这个背景下,人们思考尝试,产生了经典书籍《人月神话》,产生了结构化程序设计方法,产生了面向对象的思想。
编程的目的是,用计算机解决现实世界中的问题。编程的过程就变为,将现实世界中的问题,包括问题相关的实物和概念(领域问题)分析抽象出模型,并由此设计出软件系统。
而面向对象的程序设计,直接表达问题空间内的元素。但是现实世界和对象模型又很多不一致,使面向对象有困难,合作还是很多面向过程。如,现实世界用户创建了订单,但是编程时很少写User创建Order。
因此,面向对象又进一步发展。典型的,如,领域驱动设计(DDD)可以认为是面向对象的一种落地实践方式。
PS:正在学习《架构师训练营》,学习思考汇总,如有不完善,欢迎探讨
评论