如何感受计算机程序的美感

计算机科学是什么?从某种程度上来说,计算机科学并不能称为科学,而更应该称为工程或者艺术。称之为工程是因为在使用计算机从事生产创造的工作中,其中包含了大量的经验和技艺。称之为艺术则是因为其与魔法一样有着众多神奇之处,如艺术般展现着人类智慧惊人的创造力。另一方面,计算机科学甚至与计算机也不紧密相关,就像数学并不与数字密切相关一样,生物学并不与显微镜密切相关一样。计算机科学并不仅是研究作为工具的计算机实体,它更多关心的是如何对计算过程进行形式化表述,关心如何解决问题。而这些关于如何解决问题的表述,就是计算机程序。很喜欢一个比喻,在计算机中生活着执行操作的精灵,而计算机程序则是控制这些精灵的咒语。学习一门计算机语言,便是掌握一种控制精灵的咒语。自然地,码农的真实身份是会使用咒语的魔法师。实际上,相比人类语言,计算机语言的规则要容易的多。任何计算机语言都仅由三个要素组成:基本对象组合方式抽象方式。了解这三部分内容,便也了解了一门语言。但真正的难点在于如何使用这些规则,来形式化这种有关”如何做“的指令性知识。

这种如何做指令性知识难在哪呢?真正的难点来自于构建规模庞大的系统时,如何控制复杂度。当面对几千页的代码时,一个人的脑子是无法同时装下这么多东西的。这些控制复杂度的技术,便是计算机科学的真正议题。总结起来,共有三点控制复杂度的技术:

  • 黑盒抽象 。即将一些东西封装起来当做整体看待,隐藏起盒中的细节,从而细节中抽身出来去构造更大的黑盒。这其中艺术与智慧便体现在何种层次上进行抽象,好的抽象策略往往能抓住事物中最本质的模式。不同的抽象水平反应了对事物的不同认知水平,最深刻的抽象常常能让人叹为观止,对人类智慧产生深深的敬仰与赞叹。

  • 建立约定的接口。约定的接口是控制复杂度,进行模块化设计的另一利器。约定的接口为构建大规模系统提供了巨大的便利性。其可进一步产生两种不同的编程模式:

    • 面向对象的程序设计。在这种模式中,整个系统可以看作一个社区,社区中各个部分通过传递消息来进行交互。这些消息的形式便是由这些规定的接口所定义,从而使得各部分能准确无误进行沟通。
    • 函数式程序设计,又可称为基于流的操作。这种编程模式直接抹去了面向对象的程序设计模式中的状态和变化,事物的动态性源于其以时间点作为参照,但如果从整个时间长河来观察,整个动态的过程便是一个确定性的静止状态。站在整个历史长河中看待事物,任它潮起潮落,我自岿然不动。

    同是通过约定的接口控制复杂度,但折射出了不同的世界观,何其妙哉!

  • 元语言抽象。换句话,便是设计一种新的计算机语言,来隐藏背后的复杂性。新语言的设计意图是为了强调系统的某个方面,同时弱化其他部分。LISP, C, C++, JAVA, JS, Python, Scala, GO...这些精灵的语言,便是那些伟大的魔法师们开创新纪元时所创造的咒语。

不过,纸上得来终觉浅。就像了解象棋规则并不能成为象棋大师一样,想深入领略计算机科学的美,成为优秀的魔法师也需要付出汗水的努力与修行。在这里给大家强烈推荐一本书,《计算机程序的构造与解释》,也称为SICP. 这本便涵盖了我前面所讲的所有内容,给人以无限的启迪,体会到计算机程序的深层次的美感。前前后后这本书我总共刷了三遍,第一遍因为不得要领,胡乱的看了前面两章便放弃了。第二遍耐着性子认真读完了三章,但因为课后习题没怎么做过,后面越看越吃力便放弃了,但仍然有种醍醐灌顶之感。最近刚刚三刷SICP,来了套组合拳,看书,看视频,做习题,愈发领会到其中精妙。三遍下来,虽然有一些弯路,但还是收获满满的。如果没有看过这本书的小伙伴,我在这里推荐一种学习方式:

另外还有一些小提示:

  • 其中讲解LISP语言的部分一定不要跳过,书中代码和讲解均由LISP讲授,好在是LISP规则非常简单。
  • 书中页底注释也尽量不要跳过,有些注释还是很有价值的。

记得在没读这本书之前在豆瓣上看到一篇短评,燃起了我好好学习这本书的兴趣,“SICP,尽管只读过前三章也深深体会到,这是一本启发思维的书,它燃起你编写出色程序的热情;它还将教会你认识并欣赏美;它让你有种敬畏,让你难以抑制地渴望学习更多的东西”, 诚不欺我!现在这本神书也分享给大家,希望喜欢。

历史长河滚滚向前,社会仍在进步,科技仍在发展,人类社会仍在不断面对新的挑战,面临着前所未见的复杂性,而这一切都在等待着新晋魔法师们运用自己的智慧去征服去创造。美而壮丽。翻滚吧,魔法师们!

欢迎大家关注我的公众号:范维的科技之旅

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352