作者:袁浩瀚

作为一个写程序很长时间但是不以程序员为职业的人,我爱coding,我说说我的感受:

  1. 世界上有很多系统是完全由人设计的,比如金融、比如计算机。但是数学和计算机是两种最常见的确定式系统。举个例子,金融系统基本由人类设计,但是在市场上,你的对口是人,比如股市是人与人之间的博弈,人是不确定的,因此这个系统也是不确定的,小概率(黑天鹅)事件比比皆是,作为一个赌性不强的人,我对于这种非确定性系统,是爱恨交织的。但是数学和计算机的根本都是1+1=2,或者1+1=10(二进制),一旦你掌握了原理,你是可以完全确定的去完成很多事情的。但是数学的创造远难于编程,因此我对于在一个确定性系统下去创造的感觉,只能说很踏实很爽。相信很多朋友也有这种感受。

  2. 编程让你的思维会条理化,细致化:编程说简单了,就是告诉计算机按照一定的步骤去高速完成任务。人的特点是可以直觉思考(intuitive thinking),但是计算速度有限;计算机的特点是不能直觉思考但非常听安排,但是计算速度巨快。所以编程是一个你教计算机如何去做一件事情的过程,比如 如何把大象关进冰箱。当你熟练后,你会发现你的思考问题的条理好了很多,做事一二三四步安排得很清楚,步骤先后顺序(拓扑关系)也能处理得很好。同时,编程要考虑很多极端情况,比如内存溢出。编程越来越多,你会发现自己越来越谨慎,特别是长期做网站等交互性比较强的程序后,你会反复思考如何面对 变态用户,到后来你做事就会越来越细致。这个思维训练的过程数学和物理也有,但是你是在创造中学习,这一点会很销魂。

  3. 廉价的工科实践方式:工科很多都是有创造因素的,按照人的定义,人就是能制造工具的动物,因此创作的成就感于我个人是高于去做重复劳动的。就像80后小孩儿时喜欢玩四驱车一样,创造永远是一种令人兴奋的乐趣。现在大部分工科的实践,成本都略高,比如让你去造台汽车,或者合成个有机物,一般人都没有条件去完成。但是编程,算是物美价廉的去满足你创造欲的一种方式:一个还算ok的电脑足以。

  4. 代码之美:说实话,这个魅力需要你在一定时间的编程后才能体验,其感觉类似于看到数学中的美妙公式。代码是程序员写出的文字,有些代码,如同诗歌一般,令人黯然销魂;有些代码,如同杂文一般,令人拍案叫绝;有些代码,如同小说一般,令人反复回味;有些代码,如同谜语一般,令人前赴后继;有些代码,如同歌剧一般,令人如痴如狂。当你有一天面对一段代码内流满面,你就懂了我在说什么。

还有很多的原因让你爱上coding,这里不一一列举,如果说要如何爱上编程,我认为前提是擅长编程,至少熟练编程,说说我自己的经验:

  1. 学会如何查找帮助:这是学习一个新语言的第一步,一般别人要我教一个语言,我一定告诉TA先学会如何用这个语言系统的帮助,这就好比学会如何用字典。每个人类语言都有字典,而且形态类似,但是计算机语言的帮助系统形态各异,比如统计语言R,是在命令行里面输入?+你要查询的内容完成,而Visual Studio大部分通过MSDN,iOS编程通过Apple Developer Center等等。因此你要先找好帮助在哪,怎么用。如果帮助看不懂,就买本入门的书籍,慢慢开始看。等你能写程序了,就会慢慢用上帮助。我自己的经验是,就算一个程序员对于一个语言系统再熟悉,写一个新的project的时候,还是有不熟悉的函数、库、接口需要查看帮助系统,因此早早学会怎么查帮助,会对你长期帮助很大。当然,实在不行,就身边找个大牛,随时请教,没有比这更靠谱的了。

  2. 带着任务开始编程,起步时不必拘泥于底层原理:大部分编程教学,都是以在屏幕上输出Hello,World这个例子,其实要探究这个例子背后的实现原理,可以讲到I/O系统、编译原理、内存分配、程序入口等太多问题,但是你要做一个非系统级别的应用,这些东西都用不到,因此你开始学习时,不要太拘泥于原理,多去考虑如何编出一个想要的程序去解决你想要解决的问题比较有利于你降低学习曲线。因此很多范例式教学的编程书是很好的起步伙伴。等你熟练了,就可以考虑去深入学习一些原理性的东西,当然,完全看你的兴趣,不懂这些东西也可以写出有用的程序。

  3. 找一些 project 做:尽力去参与一些具体的project,也许自己做不了太难的部分,可以让别人分一些简单的部分给你写。这种感觉好比你生产不了一台法拉利,但是你可以生产里面的齿轮,你看到车跑起来,也会获得很多的成就感。特别是现在面对对象(OOP)的封装思想越来越成熟后,单独完成一个部件的任务会越来越多,多去争取这种机会,你会在成就感下慢慢爱上编程。

  4. 多看代码:如同前面“代码之美”里面所说,你可以多去欣赏别人的代码或者程序,把前后逻辑研究清楚,那种感觉如同:遍览千文,下笔如有神。读多了你自然就会获得很多灵感,就会懂得如何去写了。
    其它知友也有很多好建议,我觉得你可以综合一下,但关键还是反复去尝试,去实践,想像你在做程序,就好比一个工匠在打磨一把日本武士刀,或者在雕琢一个玉石,其学习过程和成就感其实是类似的,你应该就会更加明白该如何前进。

 

原文发表于:http://www.zhihu.com/question/19917580/answer/13716566