置顶『糖水谈资
』,我尽心熬,你开心喝!
糖水注:
你没有看错,但汤圆哥也绝不是转行了,熟悉我的人一定知道我是个对好内容爱不释手的人。为了保持垂直度,我纠结了很久要不要发下面这篇跟财经风马牛不相及的文章?汤圆哥作为一个也曾在腾讯云上买过服务器建过discuz的伪IT迷,还是没能控制自己,给大家带来当年与我同在商学院毕业的这位大学基友
霖哥(如今牛掰程序员)
以及他的公众号
《商学院毕业的程序员》
的开篇之作,
相信对即便完全不关心IT的你一样受益匪浅!
最后,
汤圆哥表示欢迎一切优质的内容
作为
《糖水谈资》
的辅料奉献给我的读者,只要你的内容打动了我(有点难噢),我必力推!
最近有不少人,来问我,想学编程,但是又不知怎么开始。所以,我想把我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页!太厚了,谁那么多时间看完!
对于一个什么都不懂的初学者来说,一上来就一堆理论,只会让人一脸懵逼。
所以,对于想要学习编程的初学者来说,最好的学习方式是:
少看,立刻动手。
我用的是什么学习资料? ?是时候祭出我的老师了——w3schools.com。
(图:w3schools.com 2017年的截图,啧,霖哥记得当年,这个页面是红色界面的。)
很遗憾,这个国外的英文教学网站,现在在国内已经不能访问了。一个学习的好网站,居然被墙了,真的有点无奈。
不过,在很早之前,就有国内的人把他抄袭了一遍:W3School http://www.w3xuexiao.com,你可以使用它。
不用怀疑,当初霖哥用的,就是纯英文的老外版本。(词典软件忙个不停)
w3schools.com是一家专门Web开发的学习网站,它的特点就是:
少废话、全干货
。
(图:W3School HTML简介)
w3schools.com的教程中,几乎没有什么啰嗦理论。比如上图里,简单的一句介绍,HTML是用来做网站的,然后点击开始教程了,迎面而来的,就是“实例”和“试一试”功能按钮。
(图:w3学校,试一试,现场体验代码)
常见的编程语言入门书中,开头一般花不少的篇幅介绍如何进行环境搭建。
比如学习C语言,光要让一个Hello World跑起来,就需要废很大的劲,安装各种开发环境、编译器,再学习用命令行编译....
可能,几个星期过去了,终于,才把一个Hello World打印到屏幕上.....
但是使用w3schools学习编程,什么都不需要安装,只需要在“试一试”里,通过
网页浏览器
,就能立刻体验编程学习的结果。
(图:列表的形式表述理论)
而在里面,理论的表述,一般都是使用列表的形式的:用尽可能简短的文字,来把这个问题解释清楚。
5. 时间分配
那10天的时间里,我是怎样把这个技能学习进行时间分配的?
因为之前的基础,除了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天的事情。
因为无论何种编程语言,它们基本语法都是条件、函数、循环、数据结构所组成。
与学院派那种自下而上的过程相比,
这种自上而下的学习过程
,能更快的完善小目标、激发兴趣和成就感。
至于一些基础的底层知识,霖哥对正统计算机课程里的数据结构、算法、计算机底层的相关知识并不牢靠,但凭借足够的猎奇心,在随后的工作时间里,慢慢自己地自学回来。
(图:乔布斯访谈)
乔布斯
(汤圆哥的第一偶像,第二罗振宇?)