我是如何用 10 天自学编程,改变一辈子的?(学习编程的时候,不要死记硬背,要培养感受)

编者按:本文来自微信公众号“商学院毕业的程序员”,经过自学编程成为一家大型上市公司的资深软件工程师。html

我是我,一个因兴趣入行的商学院毕业的程序员。最近有很多人,来问我,想学编程,可是又不知怎么开始。因此,我想把我8年前影响我一辈子的10天自学编程的经历,毫无保留的分享出来。前端

若是看到这标题,会让你以为,读完一篇文章就能快速的掌握编程技术的话,这可能会让你失望,这里甚至没有一行代码。程序员

我想分享的,是我最初自学编程的经历和心法。面试

1.决定

(图为2008年的白色苹果笔记本)算法

2009年初,一个潮湿、肮脏、背靠竹林的大学宿舍里,其中一张书桌,放着一台与环境格调不一致的纯白色的苹果Macbook电脑。她是我课余时间最好的朋友。数据库

我读的是商学院金融专业,在度过了逍遥放纵颓废的半年大学一年级生活后,总以为要学点什么技能,赚一点钱。编程

因此,我作了一个如今看起来对人生产生重大影响的重要决定:后端

用10天!系统地学习一遍网站编程!数组

那一年我19岁,却有着现在看起来好笑的狂妄自大,总以为在未来会跟别人活得不同。服务器

如今回忆起来,当初的我纯粹只是一个电脑用得比别人好的学渣而已,也不知道当年进水的脑壳哪来的自信,真是too young too naive。

大学一年级的时候,虽然我的电脑已经走入千家万户,可是创业、互联网,尚未像今天那么吵的火热朝天的,移动互联网的概念尚未造成。

计算机技术在外行人看起来更多仍是技术的世界,没有谁张口闭口就跟你聊融资、产品、市场、运营。

父母资助给我买了一台苹果电脑,这在当时还算是一件难能难得的事情。接近五位数的价格,拿到手这么一台电脑,当时我是有多感动啊,我说:我之后绝逼再也不玩游戏了,我要好好学习。

一台不能玩游戏的破电脑,拿来干吗?学习使用各类软件或者学编程呗。

就这样,萌生了系统地自学编程的想法。在商学院毕业前,也没有通过面试,我却糊里糊涂的,进入了一家老牌大型上市软件公司(而且仍是小时候曾经那个憧憬向往的公司),成为了一名程序员。

这一切,都起源于2009年的那系统地自学编程的10天。

2.基础

(图为小时候,用来画画的LOGO编程语言)

在讲述那10天的自学编程经历前,得说明个人电脑基础。

幼儿园的时候接触386计算机,会用MSDOS系统玩一个叫“波斯王子”、象棋的游戏;后来开始用Windows 3.0(从Dos那里敲段命令进入Windows,那时候还没开始菜单),里面的软件少得可怜。

小学一年级的时候,恰好分配到了计算机实验班,学校会教一个叫“认知码”的输入法。输入法也没怎么学会,却是学会了拼音快速打字的本领;

小学五年级的时候用Dreamweaver、Fireworks、Flash、Photoshop(网页制做三剑客,三个软件)作我的主页,用FTP(文件传送工具)上传到虚拟主机作成网站;

以后几年电脑游戏上瘾,玩了好多年,一直没有在技术上深究。直到高中后,开始折腾三个PHP开源程序,他们是Discuz、PHPWind和Wordpress,而且还运营了个PHPWind的校园社区。可是,并不懂得如何经过编程去开发一个Web产品,只大概知道了Web产品是怎么炼成的。

因此说,在大学正式系统地自学编程以前,我是有不错的电脑应用基础的。

可是,那时候,我还不太系统的了解编程,只知道计算机软件程序,是由编程语言控制的;只知道编程语言里,有不少if(若是)、 for(循环)等关键字,却不太懂怎么去用它们作出一个软件程序来。

3. 小目标

要决定自学编程,首先要定个小目标。

这很是重要!

不少计算机系毕业的本科大学生,你让他们去作一个简单的H5页面,他们都是作不出来的。

可能他们中的不少人的回答是,老师没有教啊。

是的,国内大学的计算机课程通常以C语言或Java语言基础入门,而后开始学习数学、数据结构、算法。确实很大一部分人,到毕业为止,都没有教怎么作一张网页。

因此有时候,程序员是一个至关专业化的职业,搞后端的不懂前端,搞前端的不懂后端,搞苹果的不会安卓,搞移动开发的不懂电脑开发。这是很正常的。

不论搞什么开发,编程语言,仅仅起到最最最底层基础的做用。

怎么理解呢?咱们能够把不一样平台的软件开发,想象成不一样交际语言的写做:

让你作一个苹果iOS App,就像让你用英语写一篇文章:你不但要学习英语单词,还要学习英语语法、英语句式、习惯用词;

让你作一个网页,就像让你用西班牙语写一篇文章:你不但要学习西班牙语单词,还要学习西班牙语文化、西班牙语语法、西班牙语音标……

比方说,Java语言,既能够开发Android程序,也能够作网站后台开发,那么,让一个作安卓开发的Java程序员,马上去作网站后台开发行不行?

不行,二者还有大量的开发条件和工具链是不同的。

所以,选择一个小目标,自上而下的去思考和学习,就很是重要了……而我当时的小目标,作网页——我但愿美化本身博客网站的界面(使用一个叫Wordpress的网站软件搭建的博客)。

这个目标,足够的小。我只须要学习HTML、CSS、PHP就足够了。

这也是为何我要系统地学习编程的重要缘由——达成这个小目标。

4.资料

那10天里,我分别学习了什么?

我学习了HTML、CSS、PHP、MySQL四种技术,笼统来讲,这些都是开发一个网站的基本技能。

走进图书馆的计算机相关书架,你会发现不少计算机相关的书籍,都厚得吓人,其中至关大的篇幅,是前言、理论和案例,让初学者手足无措,无从入手。

上图,随便拍一张身边的3本书,分别是700页,500页,300页!太厚了,谁那么多时间看完!

对于一个什么都不懂的初学者来讲,一上来就一堆理论,只会让人一脸懵逼。

因此,对于想要学习编程的初学者来讲,最好的学习方式是:少看,马上动手。

5. 时间分配

那10天的时间里,我是怎样把这个技能学习进行时间分配的?

  • 第1天:HTML(网页标记语言);

  • 第2 – 3天:CSS(网页样式语言);

  • 第4 – 7天:JavaScript(网页开发语言);

  • 第8 – 10天:PHP/MySQL(数据库);

由于以前的基础,除了MySQL数据库部分,其余部分都比较顺畅的经过。CSS,看无缺像很懂,可是是极度须要熟练练习的。

在学习的过程当中里,遵循3个原则:

  • 快速阅读基本概念,不浪费时间,进入训练

  • 使用提供的训练代码,快速试验,不求重头开始写,只求稍做修改也能正确运行

  • 快速通读整个教程,回去再理解一次

第一条,阅读完基本概念的时候,你多是似懂非懂的状态;第二条,代码训练,是来验证基本概念的;第三条,当整个教程通读一遍后,你回过头来,看那些以前没理解的,可能已经明白了,编程的知识点之间,是有关联的。

其实,在自学的过程当中,即便是w3schools这样简单明了的教程,我也并无逐条认真看,而是快速阅览。

当遇到看不懂的部分时,就动手作一次,作了仍是不懂,也不要太浪费时间,首先用最快的时间,去把总体浏览一遍。

宏观有认识和练习后,回过头来,才发现,“啊原来就这样子啊”。

有一件事,是必须刻意克服的————

英语,不能渣!英语,不能渣!英语,不能渣!重要的事说三遍!

有人说,学编程,不是应该理科特别好,像数学有特别好,才能学得好吗?

我呸!!!

在实际工做中,大部分状况,你打交道的,是英语!英语!英语!

写代码多了,你会发现,写代码,其实就像写英语做文同样。

那些说看到代码就晕的人,通常一样会看到英语就晕。这里说的英语,不必定是要英语成绩有多好,语法有多棒,可是,不能反感看英语,有必定的单词量。

要学习编程,英语,不能太差。不然很难在编程的世界里走远,英语好,就打通了全世界的程序员技术之门,全世界的程序员在帮你解决问题。

直到今天,工做之中90%的技术问题,我几乎都能经过Google一下找到答案;对于新兴技术,去英语官方网站看看官方教程,根本不须要买厚厚的书籍。

所以,必定要培养英语阅读技术文档的能力。

学习编程的时候,不要死记硬背,要培养感受。

由于,即便到今天为止,工做的过程当中,我仍是会不停地经过百度和Google搜索引擎搜索“忘记掉”的语法和代码。好比,我常常会作出这样的搜索关键字:

依然在用的搜索关键字:

“Python for循环”、 “Java 接口”、 “JavaScript class”,一些很基础的语法

我用过11种不一样的编程语言来作过项目,历来不会介意,会不记得哪一个函数、哪一个语法怎么写了。可能学院派看到这,会以为三观尽毁,可咱们生活不少事情,都是这样的。

好比说,出来工做几年的人,会把小学、初中,甚至高中的数学,给忘记了。到真的想用的时候,又实在记不起的时候,上去百科上搜一下,很快就补回来了。

编程语法也是同样,是不用死记硬背,只要把思惟养成了,须要用的时候,再经过搜索引擎解决问题就能够了。经过教育,咱们更多获得的,不是知识,而是认知。

因此有时候,挺反感一些技术面试过程当中,要求写出具体代码的题目,由于具体的代码,每过一段时间,就会忘记得一干二净了,而编程思惟,或者说编程的感受,倒是永久的烙印在脑海中。

当我须要用到的时候,我知道去哪里找到她,这就够了。

这就像,当咱们家里水龙头坏了,首先想到的,是找专业的师傅,而不是马上学习修水龙头,是一个道理的。

代码是一个浩瀚的世界,死记硬背毫无心义,更重要的是理解编程思惟,而不是具体怎么写代码;写代码的练习,不单是让技能熟练,并且培养的,是对编程思惟的理解。

6. 实战

10天之后,若是你已经真把HTML/CSS/JavaScript教程过了一遍,你就能够尝试开始实战了。

当年,我作了一件很是囧的实战————

那时候是班长,常常拿一些班务工做,当作是技术实战的试验田。有一次须要进行全班同窗的调查问卷, 我就决定本身动手,作一个网页。(当年可尚未像问卷星,这样的在线问卷调查工具)

这个网页,能够提供几个选择题,而后按肯定,提交选择。

这须要用到HTML和JavaScript。我打开了代码编辑器,把HTML码上去,而后用JavaScript把每次提交的结果,保存到一个数组中。

(图:作了个很简单的选择题网页)

而后,把它挂到了单机网站服务器,而后提着笔记本电脑和iPod Touch上课去。我用那个iPod Touch打开作好的HTML选择题网页。

而后,把iPod Touch在班里的同窗之间,一个一个地传阅,作好选择并提交。

使用iPod Touch有一个弊端,若是某个同窗多手按了一下中间的首页键,选择题的网页就不见了,他们也不知道从哪里从新打开这个网页。怎么办?

因此我用厚厚的透明胶纸,把HOME键贴住,让它不能按……

7. 一理通百理明

下一步是什么?

拿当年的例子来,在这10天后,我开始学习PHP和MySQL,并在不久以后,开始帮学校作网站,赚一点钱。

当时的我,目的就是经过编程,尽快拥有作项目的能力,在课余赚钱。

这是一种至上而下的学习过程,更快地学习,经过动手,迅速的入门一项技能。无数计算机系的学生,在毕业的那一刻一脸懵逼的踏入职场,而我大学一年级开始就开发本身的项目了。(大四的时候还帮了几位计算机系的兄台作毕业设计。)

在这些过程里,我逐渐发现了“一理通百理明”的道理。后来剩下的大学生涯里,把Java、C#、Python、Ruby等常见的编程语言和她们的框架都自学了一遍,不一样的编程语言,他们的学问实际上是很大一部分是相通而有关联的。

随着学习的深刻,当你已经熟悉两三种编程语言,能开发各类软件,这时要学习一种新语言,学习的更可能是思想,理解了思想和学习新语言的工具链后,就能够开工了,彻底是1-3天的事情。

由于不管何种编程语言,它们基本语法都是条件、函数、循环、数据结构所组成。

与学院派那种自下而上的过程相比,这种自上而下的学习过程,能更快的完善小目标、激发兴趣和成就感。

至于一些基础的底层知识,我对正统计算机课程里的数据结构、算法、计算机底层的相关知识并不牢靠,但凭借足够的猎奇心,在随后的工做时间里,慢慢本身地自学回来。

(图:乔布斯访谈)

乔布斯曾经说过:

我以为每一个人都应该学习一门编程语言。学习编程教你如何思考。

无论你出来工做后,是否是以此为职业,拥有必定的编程技能,会用编程思惟来思考问题,将会受用终生。

8. 导师

总结我上述自学编程的心法:

  • 先定它一个小目标!

  • 快速过一遍教程!

  • 尝试一个小实战!

其实,记住个人心法,我以为根本不须要10天。

在2016年以前,我一直把本身的一我的生格言引觉得豪:

“我有2个老师,1个叫谷歌,1个叫百度”。

然而,现在我不这么认为了!!!

当年的我,没人辅导,在大学利用课余时间,全靠自学,花了10天,系统的了解一下“网页编程”,日后才开始花费大量的时间,一个接一个的去熟悉各类开发框架。

现在,我建议是,能够缩短“快速过一遍教程”的这个过程。要是有必定的电脑基础,一天里分配比较多的时间,5天,把基础理论和试验过一遍是没问题的。

我以为,由于缺乏导师,我在我的技术认知成长上,也走了不少弯路,浪费了很多时间。

互联网的发展,带来了信息的爆炸,大量的信息让咱们的世界变平了,信息的不对称,正在逐步被减小。

好比说,咱们购买一个商品,咱们会先在网上搜索,进行比价,预防本身被坑。

可是每一个不一样的人,对信息的思考和处理的结果,是不同,这形成对一样的信息,会有不一样的认知,也就是认知差距。这种认知,是须要导师去指导的。

好比说,如今的人,看一个电影,会先跑上豆瓣上看评分。明明一个不知所云、让人呼呼大睡的电影,怎么就很高分?虽然不懂,可是由于它很高分,因此依然跟着,给它一个高分。

要解决这种认知差距,与其经过在信息丛林里阅读天量的信息,还不如找到一个认知导师。

要知道,我整个编程生涯里,没有遇过哪怕一个导师,全部的知识,都是从网上的信息里挖来的,而且自我生成对它们的认知。

固然这也有一个好处,不少事情,我会有不一样的视角,去思考技术的问题,尽管我并不知道这好与很差,至少如今回想起来,个人一些看法是独到和有用的。

9. 学习

尽早“练习”

关于创业,咱们会见到这样的段子:

我有一个价值十亿的 idea,只要开发这样一个 APP,半年就会有一千万人用,一年就能纳斯达克上市。项目我已经规划的很是清楚,启动资金也很充足,“万事俱备,就差一个程序员了!”

你那么牛,花10天自学一下的时间都不肯意,你咋不上天呢。

别忘了,无数成功的创业企业家,他们都是程序员出身,像比尔·盖茨、马化腾、李彦宏。

就算不懂代码,也最起码都懂得技术思惟。像乔布斯对“面向对象”的深入理解(我认为这理解超越80%的职业程序员)、1996年马云作的中国黄页(能看见别人看不见的一个新兴技术的商业价值),均可以看出这些商业巨人对科技技术的深入理解。

在我看来,编程是一门艺术,而不是技术。

在学校课堂里的,学到的只是技术,要把它玩成艺术,还须要有丰富的经验、强烈的好奇心和与别不一样的视野。这些都是光靠网上资料学习,很难学到的。

这也是我写下这篇文章的缘由,经过传达个人自学经验和思考维度,可让更多的人在科技大爆炸时代,提高本身的认知、技术思惟。

我不比别人聪明,可是我也学到了,相信每一个人均可以。

绝不夸张的说,这短暂的10天,改变了个人人生,让我走上技术之路。

我自学编程的经验,想分享的真是太多太多了。下一篇文章,我想具体说说,对于想自学编程初学者,究竟学哪种编程语言比较好。

若是你以为有用,你也想学习编程或投身科技行业,可是你不知道从哪开始,留下评论,说说你的小目标和故事,我会持续分享本身的自学经验、方法和技巧,提供绵薄之助。

稿源:代码湾

 

http://www.oschina.net/news/83833/how-i-learn-programming-change-my-life

相关文章
相关标签/搜索