我是如何用 10 天自学编程,改变一生的?

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

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

如果看到这标题,会让你觉得,读完一篇文章就能快速的掌握编程技术的话,这可能会让你失望,这里甚至没有一行代码。

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

1.决定

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

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

所以,我做了一个现在看起来对人生产生重大影响的重要决定:

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

那一年我19岁,却有着如今看起来可笑的狂妄自大,总觉得在将来会跟别人活得不一样。

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

大学一年级的时候,虽然个人电脑已经走入千家万户,但是创业、互联网,还没有像今天那么吵的火热朝天的,移动互联网的概念还没有形成。

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

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

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

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

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

2.基础

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

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

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

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

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

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

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

  1. 小目标

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

这非常重要!

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

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

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

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

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

怎么理解呢?我们可以把不同平台的软件开发,想象成不同交际语言的写作:

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

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

比方说,Java语言,既可以开发Android程序,也可以做网站后台开发,那么,让一个做安卓开发的Java程序员,立刻去做网站后台开发行不行?

不行,两者还有大量的开发条件和工具链是不一样的。

因此,选择一个小目标,自上而下的去思考和学习,就非常重要了……而我当时的小目标,做网页——我希望美化自己博客网站的界面(使用一个叫Wordpress的网站软件搭建的博客)。

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

这也是为什么我要系统地学习编程的重要原因——达成这个小目标。

4.资料

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

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

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

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

所以,对于想要学习编程的初学者来说,最好的学习方式是:少看,立刻动手。

  1. 时间分配

那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种不同的编程语言来做过项目,从来不会介意,会不记得哪个函数、哪个语法怎么写了。可能学院派看到这,会觉得三观尽毁,可我们生活很多事情,都是这样的。

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

编程语法也是一样,是不用死记硬背,只要把思维养成了,需要用的时候,再通过搜索引擎解决问题就可以了。通过教育,我们更多得到的,不是知识,而是认知。

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

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

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

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

  1. 实战

10天以后,如果你已经真把HTML/CSS/JavaScript教程过了一遍,你就可以尝试开始实战了。

当年,我做了一件非常囧的实战————

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

这个网页,可以提供几个选择题,然后按确定,提交选择。

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

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

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

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

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

  1. 一理通百理明

下一步是什么?

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

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

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

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

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

因为无论何种编程语言,它们基本语法都是条件、函数、循环、数据结构所组成。

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

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

乔布斯曾经说过:

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

不管你出来工作后,是不是以此为职业,拥有一定的编程技能,会用编程思维来思考问题,将会受用终生。

  1. 导师

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

先定它一个小目标!

快速过一遍教程!

尝试一个小实战!

其实,记住我的心法,我觉得根本不需要10天。

在2016年之前,我一直把自己的一个人生格言引以为豪:

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

然而,如今我不这么认为了!!!

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

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

我觉得,因为缺少导师,我在个人技术认知成长上,也走了很多弯路,浪费了不少时间。

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

比如说,我们购买一个商品,我们会先在网上搜索,进行比价,预防自己被坑。

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

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

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

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

当然这也有一个好处,很多事情,我会有不同的视角,去思考技术的问题,尽管我并不知道这好与不好,至少现在回想起来,我的一些见解是独到和有用的。

  1. 学习

尽早“练习”

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

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

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

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

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

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

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

这也是我写下这篇文章的原因,通过传达我的自学经验和思考维度,可以让更多的人在科技大爆炸时代,提升自己的认知、技术思维。

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

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

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

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

本文来自开源中国社区 [http://www.oschina.net]

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
Java 开发者
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
51 5
|
15天前
|
人工智能 数据挖掘 开发者
探索代码之美:我的编程旅程与感悟
在数字世界中,代码是构筑梦想和现实的桥梁。本文将带你走进编程的世界,分享我从初学者到熟练开发者的旅程,以及在这个过程中对技术、学习和生活的深刻思考。从最初的迷茫,到后来的热爱,再到现在的不断探索,编程已经成为我生活的一部分,它教会了我如何面对问题,如何找到解决方案,更重要的是,它让我学会了思考。让我们一起踏上这段旅程,感受代码的魅力,发现生活中的无限可能。
|
3月前
|
存储 容器
从代码中感悟生活:编程与人生哲学的交融
【9月更文挑战第27天】在键盘敲击的节奏中,隐藏着生活的哲理。代码不仅仅是冷冰冰的命令序列,它反映了我们解决问题的方式,甚至揭示了人生的智慧。本文将通过编程的视角,探讨如何将技术经验转化为对生活的深刻理解,用简单的例子说明复杂概念,让你在轻松阅读中获得启发。
|
4月前
|
Java 程序员 Python
探索编程之美:从代码到哲学的思考之旅
【8月更文挑战第30天】编程,不仅仅是一种技术活,它更像是一扇通往深邃世界的窗户。本文将带你走进编程的世界,从一行行代码中,探寻其背后蕴含的哲理和美学。我们将一同体验从大学毕业的迷茫,到大胆尝试新领域的冒险旅程,再到通过不断学习和提升找到人生方向的过程。正如乔布斯所言:“人生中的每一个点都会在未来某个时刻连接起来。”让我们跟随代码的脚步,开启一场思考与实践交织的旅程。
|
7月前
|
小程序 C++ Python
探索代码的诗意——我的编程感悟
【5月更文挑战第31天】在数字世界的浩瀚海洋中,我是一位航行者。每一次按下键盘,都是与机器灵魂的对话。这篇文章是我个人的技术之旅,记录了从困惑到顿悟的过程,以及那些让我着迷的编程之美。它不仅仅是关于技术的,更是关于创造和表达的艺术。
|
7月前
|
数据采集 算法 Java
业余爱好者想入门编程,一定远离那些只会说No的家伙,尤其程序员
业余爱好者想入门编程,一定远离那些只会说No的家伙,尤其程序员
70 2
|
搜索推荐
这个知识点搞明白了,游戏开发中90%的数学问题就解决了
关键词:三角函数,游戏开发,游戏数学,微信小游戏制作工具,游戏开发教程。 嗨!大家好,我是小蚂蚁。 晓得上面那句话的逻辑谬误了吗?不论是学习数学,还是学习编程,都是锻炼一个人逻辑思维的方式,因为这两者对于思维的要求非常的严谨,稍有差池就会带来一个错误的结果。所以学习它们适合锻炼一个人严谨缜密的思维,你的逻辑思维是因为学习这两者而锻炼出来的,而不是要先要具备一定的逻辑思维,才能够进行学习。
213 0
|
Java 程序员 开发者
优秀程序员的学习习惯和方法你都不知道,还学什么编程
好的学习习惯和方法会让你的工作事半功倍,快来看看你还差哪些
75 0
优秀程序员的学习习惯和方法你都不知道,还学什么编程
|
Unix 程序员 编译器
编程修养(精品文,建议认真品读并实践)
编程修养(精品文,建议认真品读并实践)
49 0
|
搜索推荐 算法 程序员
探索编程世界的宝藏:程序员必掌握的20大算法(上)
探索编程世界的宝藏:程序员必掌握的20大算法
161 0
下一篇
DataWorks