如何学习编程

读张越的《如何学编程?》

什么是编程?

现代计算机的起点是莱布尼茨的一个梦想,将理性还原为计算,用强大的机器执行这些计算。//让我想起来一句话“这不是情怀,不是素养,而是冷冰冰的计算”
这需要两个前提,一切都可以计算,可以执行一切计算的机器。

为了达到这个目的,17世纪以来的数学家和哲学家就围绕上面两个问题展开了自己的研究。数学领域人类发明出来了一套统一符号来处理代数表达式,并不断尝试用符号来表征全世界所有的概念和事物。//事实证明这样做的结果是,符号比较混乱,不能统一起来。常常是一个x代表的好几个意思。
像笛卡尔,飞马通过论证讲集合通过某种方式转换成了代数,那个时代的顶尖数学叫尝试做下面的事情:1将全世界的只是归纳起来,2针对上述的全集用一套符号体系进行表征,3用莱布尼茨所述的“推理演算“对这些符号进行运算。

在那个伟大的时代产生了大量的优秀人才和成果,希尔伯特、康托尔、哥德尔等人都作出了重大的贡献。其中布尔在《思维的法则》中证明了逻辑问题可以演变为数学问题,从而奠定了现代编程语言的运算逻辑。而现代编程学语言的概念就源自佛雷格在《该你那文字》所描述的:所有演绎推理都可以归纳在一个逻辑体系内。

这段时间,哲学家也为编程语言和计算机的产生做出了重大贡献:维特根斯坦在《逻辑哲学论》中为现代编程语言的面向对象思想奠定了件事的基础:

”“对象包含了事物的全部状态的可能性,......,这种固定不变的模式有对象组成。

在数学家和哲学家讲一切均可计算的梦想逐渐实现的时候,图灵描述了一种通用的计算机模型,图灵机由此诞生。冯诺依曼等人用电子管实现了这种模型,”可以执行计算的机器“发明出来了

直到今天,现代编程语言依然沿着当年的套路发展,而硬件形态不管变化多大,图灵机的基本原理和梦诺依曼体系始终没有本质变化。
因此简单说,现代编程语言(更准确的说法是,一种”图灵完备“编程语言),应该能够完整的描述某一个现实领域的问题,并通过运算规则,操作计算设备获得分析过程和结果。

所谓学习编程,就是学习使用一种特定的语言,来描述现实世界的一个问题,再将这个问题用过计算机的运算,给出分析和解答。

进入程序的思维逻辑

编程难是因为没有具备”编程思维“。变成四位,需要用一种新的语言形式来描述世界。
那个著名的笑话:

老婆给当程序员的老公打电话:”下班顺路买一斤豹子带回来,如果看到卖西瓜的,买一个。“
当晚,程序员老公手捧着一个豹子进了家门......老婆怒道:”你怎么就买了一个豹子?!“
老公答曰:”因为看到了卖西瓜的。“

这个笑话充分表达了程序思维和生活思维的不同,这里的差异在于:
人类常用表达方式和逻辑习惯是不吻合的,很多信息存在模棱两可的描述中,而编程语言是完备和精确的,机器的代码一个符号都不能错。
第二,”图灵机“的思维模式是一种机械的,线性逻辑。它符合机械流程。而人类的逻辑,本质上是一个非线性的反馈系统,所以思维决策模型上的差异导致编程的逻辑过程必然与人脑思维过程不同。

因此,学习编程需要让自己养成线性思维,或者说是理性的反馈系统。//其实大自然的很多事情都不是线性的,更多是非线性的,我要注意的是这两种思维之间的转换。

只有这样才能从所学知识中举一反三,建立自己的只是系统。因此学习时,经常画流程图,和时间顺序图,是一个号的习惯,用图表将自己的思维表达清楚能有助于用机械逻辑来表述自然思维。另一个方式是写伪代码。

了解你所写的代码

只有了解你所写的代码,你才能渐变成一个专家级程序员。
比如随便最简单的移行代码:

var a = 1;

如果你只是一个普通的程序员,你应该知道这行代码解决了什么问题,但如果你是专家级程序员,你应该知道:
1系统是如何执行这行代买的?
2系统因为执行了这行大妈,发生了那些改变?
要做到这两点,你需要对一下内容有比较深刻的理解:
1深刻掌握你所使用的编程语言;
2了解和掌握你的程序所运行的操作系统;
3在某些情况下,需要了解硬件的一些特性和限制,以及操作系统在这些硬件上的影响。
因为你写的代码,作用与一台图灵机(可以执行计算的机器),中间需要有操作系统,可能还有你所使用的编程语言所使用的运行时(如:Java Runtime)。

如果你立志成为一名优秀的程序员,你需要从一行程序出发,一步步的追踪到硬件的执行。这时候,你会发现很多隐藏在程序之下的东西。

优雅的控制机器

很多不懂程序的人,都会发现一个现象:凡是会写代码的,都会修电脑,修手机,修一切的电子产品......

写程序与修电脑之间有什么必然联系吗?
真的有联系。修手机的能力,来源于对手机的理解和对手机的控制力。这种控制力,包括输入输出的各种设备(摄像头,传感器,蓝牙),包括操作系统,包括工具类的应用软件。

一个程序员希望自己的代码能够在一台设备上运行良好。他确实要关注以上这些东西,一个程序是否可以合理的使用外设,是否在操作系统中兼容性良好,是否与驻留软件不冲突,都是一个程序员需要考虑的问题。

因此,一个合格的程序员,确实要习惯性的稻谷自己的手机、自己的电脑。

一个幸福的事实是,现在的可穿戴设备和只能加剧设备的逐步普及,更多的传统设备配备了操作系统,成了可编程的涉笔。

比如,一个程序员懂得Android开发,口可以使用程序控制电视定时播放,智能手表表针的显示样式,空调的出风温度,手机和门禁链接,在汽车中年中控台上部署一个程序和手机共享音乐等等

长靴长信,吐故纳新

技术日新月异,永无止境。

所有高阶程序员呢,具备的一个基本能力和素质,就是不断的尝试新鲜事物,不断阅读新的项目代码。也会主动改进之前做过的项目,哪怕他们当前运行良好。

每一个新技术的掌握,都建立在对现有技术的充分理解智商,因此,学好当下,恰恰是掌握未来的最佳方式。

以用带学

设立一个学习的目标,比如学习JS可以建一个自己的博客。
有一个明确的目标,就会有明确的学习路径,解决问题时,就不容易发散。更有助于提升效率,衡量学习效果。

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

推荐阅读更多精彩内容

  • 如果你想知道如何学习编程和转行,那么你不是在单骑作战。随着科技热潮对软件工程师和计算机科学家需求的增加,很多专业人...
    fuyou2324阅读 1,054评论 9 6
  • 现在,计算机已经融入到了我们生活的方方面面,手机、电脑、智能家居等。在计算机变得如此普遍的今天,是不是每个人都应该...
    acherie阅读 1,594评论 6 21
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,417评论 25 707
  • (版权所有,抄袭必究,未经作者同意,请勿转载) 从十多年前喜欢上音乐剧的那一刻起,就不可自拔的喜欢上了爱尔兰歌手C...
    空谷百合阅读 3,162评论 3 3
  • 和朋友聊天,谈起许多女人为了钱依附某个男人。我的看法:“没有感情,只为了钱,太下贱,也太恶心;如果真的彼此相...
    水做的镜子阅读 330评论 0 1