经常有人问我,零基础怎么自学编程?我自己就是一个自学编程的例子,从完全不懂代码,到现在做了六年程序员。今天分享一下我自学编程的经历和方法,包括怎么选语言、怎么学、怎么练、怎么找工作,希望能帮到想入门的朋友。

先说说我的背景。我大学学的不是计算机专业,学的是一个和编程完全不相关的专业。大学的时候,我对编程一无所知,连代码是什么都不知道。毕业之后,我做了一份和专业相关的工作,但做了一段时间之后,发现自己不喜欢那份工作,而且工资也不高,发展前景也一般。

那时候,我身边有几个朋友是做程序员的,看他们工资挺高的,而且工作也挺有意思的,我就萌生了转行做程序员的想法。但我完全没有基础,也不知道从哪里开始学。

后来,我在网上查了很多资料,看了很多经验分享,然后就开始了自学编程的道路。从最开始的HTML/CSS,到JavaScript,再到后端语言,一步一步学,花了大概半年的时间,然后找到了第一份程序员的工作。到现在,已经做了六年程序员了。

今天,我就把我自学编程的经历和方法分享出来,包括怎么选语言、怎么学、怎么练、怎么找工作,以及一些常见的误区,希望能帮到想入门的朋友。

一、自学编程前的准备

在开始自学编程之前,有一些准备工作要做。

1. 想清楚为什么要学编程

这是最重要的一步。在开始学之前,先想清楚,你为什么要学编程?是因为兴趣,还是想转行找工作,还是想做一个自己的产品,还是只是想了解一下?

不同的目的,学习的方法和路径是不一样的。如果是因为兴趣,那可以学自己感兴趣的方向,比如做游戏、做网站、做爬虫,怎么开心怎么来。如果是想转行找工作,那就要以就业为导向,学市场需求大的技术,做项目,准备面试。如果只是想了解一下,那学一点基础的就够了。

我当时学编程,目的很明确,就是想转行找工作。所以,我所有的学习都是围绕就业来的,学市场需求大的技术,做能写进简历的项目,准备面试题。目的明确,学习才有动力,才不会半途而废。

很多人学编程,学着学着就放弃了,很大一部分原因就是目的不明确,不知道学了干什么,遇到困难就容易放弃。所以,在开始学之前,先想清楚自己为什么要学,把目的写下来,贴在显眼的地方,时刻提醒自己。

2. 做好吃苦的准备

编程不是一门容易学的技术,尤其是零基础入门,会遇到很多困难,会有很多时候觉得自己很笨,学不会,想放弃。所以,在开始学之前,要做好吃苦的准备,要有耐心,要有毅力。

我刚开始学的时候,也遇到了很多困难。比如,学JavaScript的时候,闭包、原型链、异步这些概念,我怎么都搞不懂,看了很多遍教程,还是一头雾水。那时候,我真的觉得自己不是学编程的料,想放弃。但后来,我咬牙坚持下来了,反复看,反复练,突然有一天就开窍了,明白了是怎么回事。

所以,学编程,遇到困难是正常的,不要因为一时学不会就否定自己,就放弃。每个人都是从零基础过来的,每个人都遇到过困难。只要你坚持下去,反复学,反复练,总有一天会开窍的。

3. 准备好学习的环境

学编程,需要一台电脑,不需要太好的配置,一般的笔记本电脑就够了。然后,需要一个安静的学习环境,能让你专心学习,不被打扰。

我当时学编程的时候,是辞职在家学的,每天学8到10个小时,学了半年。当然,不是所有人都能辞职在家学,很多人是边工作边学,或者边上学边学。不管是哪种情况,都要保证每天有固定的学习时间,比如每天晚上学2到3个小时,周末学一整天。坚持比突击更重要,每天学一点,比一周学一次、一次学十几个小时效果好。

另外,学习的时候,要把手机放在一边,或者调成静音,不要一边学一边刷手机,那样效率很低。学编程,需要专注,需要动手,需要思考,三心二意是学不好的。

二、怎么选编程语言

很多零基础的人,学编程遇到的第一个问题就是:我该学什么语言?现在编程语言这么多,Python、JavaScript、Java、C++、Go、PHP,到底学哪个好?

我的建议是:根据你的目的来选。

1. 如果想快速入门,做网站前端:选JavaScript

如果你想做网站开发,想快速看到效果,那可以从HTML/CSS/JavaScript开始。HTML和CSS不是编程语言,是标记语言和样式语言,很简单,学一周就能做出一个简单的网页。然后学JavaScript,JavaScript是前端的核心语言,学会了JavaScript,就能做出交互性很强的网页,还能做后端(Node.js)、做移动端(React Native)、做桌面端(Electron),应用范围很广。

而且,JavaScript的市场需求很大,前端开发工程师的岗位很多,找工作相对容易。我当时就是从HTML/CSS/JavaScript开始学的,学了大概三个月,就能做出一些简单的网站了。

2. 如果想做数据分析、人工智能、爬虫:选Python

如果你对数据分析、人工智能、机器学习、爬虫这些方向感兴趣,那可以学Python。Python语法简单,接近自然语言,很容易上手,被称为"最适合零基础学的编程语言"。而且,Python的应用范围很广,数据分析、人工智能、机器学习、爬虫、自动化运维、Web开发,都能用Python。

不过,Python虽然入门简单,但深入学下去还是有难度的,而且Python的岗位,对学历和经验的要求比较高,零基础转行找Python的工作,相对难一些。如果是想转行找工作,建议先学JavaScript或者Java,就业机会更多。

3. 如果想做后端开发,进大公司:选Java

如果你想做后端开发,想进大公司,那可以学Java。Java是一门很成熟的编程语言,应用范围很广,尤其是在企业级开发、后端开发领域,Java的市场份额很大。而且,大公司用Java的很多,Java的岗位很多,薪资也不错。

不过,Java的语法相对复杂一些,概念也比较多,零基础入门可能会难一点。而且,Java的学习周期比较长,要学的东西很多,Java基础、集合、多线程、JVM、Spring、SpringBoot、MyBatis、数据库、中间件,等等,要学很久才能找工作。

4. 如果想做游戏开发:选C#(Unity)或C++(Unreal)

如果你想做游戏开发,那可以学C#(用Unity引擎)或者C++(用Unreal引擎)。Unity用C#,比较容易上手,适合做手游、独立游戏。Unreal用C++,功能更强大,适合做3A大作,但学习难度也更大。

不过,游戏开发的岗位相对少一些,而且对学历和经验的要求比较高,零基础转行做游戏开发,难度比较大。如果是因为兴趣,可以学;如果是想找工作,建议慎重考虑。

我的建议

综合来看,如果你是零基础,想转行找工作,我建议从JavaScript开始学。原因有几个:

  1. 入门简单,能快速看到效果,容易建立信心
  2. 应用范围广,前端、后端、移动端、桌面端都能做
  3. 市场需求大,岗位多,找工作相对容易
  4. 学习资源丰富,教程、文档、社区都很完善

当然,这只是我的建议,每个人的情况不一样,你可以根据自己的兴趣和目的来选择。不管选什么语言,最重要的是坚持学下去,不要今天学Python,明天学Java,后天学Go,最后什么都没学会。选一门语言,深入学下去,学通了一门,再学其他的就容易了。

三、怎么学:我的学习方法

选好了语言,接下来就是怎么学了。我自学编程的时候,用的是"视频教程+官方文档+动手实践"的方法。

1. 看视频教程入门

零基础入门,我建议先看视频教程,而不是直接看书或者看官方文档。因为视频教程有老师带着你学,一步一步演示,更容易理解,也更容易坚持。看书或者看官方文档,对于零基础的人来说,太枯燥了,很容易放弃。

我当时学JavaScript的时候,看的是网上的一套免费的视频教程,老师讲得很细致,从最基础的变量、数据类型、函数,到复杂的DOM操作、事件、异步,一步一步讲,每节课都有例子,跟着做就能学会。我花了大概一个月的时间,把这套教程看完了,对JavaScript有了基本的了解。

看视频教程的时候,不要只是看,一定要跟着做。老师写一行代码,你也跟着写一行,老师运行一下,你也运行一下,看看效果是不是一样的。不要觉得看懂了就会了,看懂和会写是两回事。很多时候,你觉得看懂了,但自己写的时候,就会发现各种错误,各种不会。所以,一定要动手写,跟着老师一步一步做。

2. 看官方文档深入

看完视频教程,有了基础之后,就要开始看官方文档了。官方文档是最权威、最全面的学习资料,比任何视频教程和书都准确。而且,官方文档会持续更新,能学到最新的特性和用法。

我当时学完JavaScript的视频教程之后,就开始看MDN(Mozilla Developer Network)的JavaScript文档,把常用的API、对象、方法都看了一遍,做了笔记。看文档的时候,不要死记硬背,要理解,要动手试。每个API,都写个小例子,运行一下,看看效果。这样,既理解了,又记住了。

很多人学编程,不喜欢看文档,遇到问题就百度,就问别人。这是一个不好的习惯。文档是最好的老师,学会看文档,是程序员的基本技能。而且,很多问题,文档里都写得很清楚,看文档就能解决,不需要百度或者问别人。

3. 动手实践,做项目

学编程,最重要的就是动手实践,做项目。看视频、看文档,学的都是理论,只有动手做项目,才能把理论变成自己的东西,才能真正学会。

我当时学完JavaScript的基础之后,就开始做项目了。第一个项目是一个简单的待办事项(Todo List)应用,用HTML/CSS/JavaScript做的,能添加、删除、修改待办事项,能标记完成状态。虽然很简单,但做完之后,很有成就感,也把学的知识巩固了一遍。

然后,我又做了几个更复杂的项目,比如一个简单的天气预报应用(调用第三方API)、一个简单的博客系统(用Node.js+Express+MongoDB)、一个简单的电商网站(用React+Node.js)。每个项目,我都尽量用学到的新技术,尽量做得完整一点,能写进简历的那种。

做项目的时候,不要怕难,不要怕遇到问题。遇到问题,先自己想,自己查文档,自己百度,实在解决不了,再问别人。解决问题的过程,就是成长的过程。每解决一个问题,你的能力就提升一点。

而且,做项目的时候,要尽量模仿真实的项目,用Git做版本控制,写README,写注释,注意代码规范。这样,做出来的项目,才能写进简历,面试的时候才能拿得出手。

4. 记笔记,写博客

学编程,要养成记笔记的习惯。学到的新知识、遇到的问题、解决的方法,都记下来。好记性不如烂笔头,记下来,以后忘了,翻一下笔记就想起来了。

我当时学编程的时候,用印象笔记记了很多笔记,每个知识点、每个API、每个问题,都记下来,分类整理。现在回头看,那些笔记还是很有用的,有时候遇到问题,翻一下以前的笔记,就能找到解决方案。

除了记笔记,还可以写博客。把自己学的知识、做的项目、遇到的问题、解决的方法,写成博客,发表出来。写博客的过程,就是梳理知识的过程,能让你对知识的理解更深入。而且,博客写得多了,还能建立个人品牌,找工作的时候,也是一个加分项。

我当时就写了一个技术博客,把自己学的东西、做的项目、踩的坑,都写成博客,发表出来。虽然写得不好,但坚持写了一段时间,也有了一些读者。找工作的时候,我把博客地址写进了简历,面试官看了我的博客,对我印象不错,也加了不少分。

四、怎么练:刻意练习

学编程,光看光听是不够的,必须大量练习,刻意练习。

1. 每天写代码

学编程,最重要的就是每天写代码,保持手感。哪怕每天只写半个小时,写几行代码,也比一周写一次、一次写十几个小时强。

我当时自学的时候,每天都写代码,少则两三个小时,多则八九个小时。写得多了,手感就有了,很多代码不用想,自然而然就写出来了。

如果你是边工作边学,那每天晚上抽出一两个小时写代码,周末多写一点,坚持下去,也能学得很好。关键是坚持,不要三天打鱼两天晒网。

2. 刷题

如果想找工作,那刷题是必不可少的。现在的公司面试,基本上都会考算法题,尤其是大公司,算法题考得更多。所以,学完基础之后,就要开始刷题了。

刷题的网站,国内的有LeetCode中文站、牛客网,国外的有LeetCode、HackerRank。我当时主要是在LeetCode上刷题,从简单的开始,刷了大概200道题,涵盖了数组、字符串、链表、树、动态规划、贪心等常见的算法类型。

刷题的时候,不要只追求数量,要追求质量。每道题,先自己想,想不出来再看答案,看了答案之后,要自己再写一遍,理解解题思路。而且,要总结,每种类型的题,有什么常见的解法,有什么套路,都总结出来。刷得多了,总结得多了,遇到新的题,就有思路了。

当然,刷题不是目的,目的是锻炼编程思维和解决问题的能力。不要为了刷题而刷题,要理解每道题的解法,举一反三。

3. 读别人的代码

除了自己写代码,还要多读别人的代码,尤其是优秀的开源项目的代码。读别人的代码,能学到很多东西,比如好的代码风格、好的设计模式、好的实现思路。

我当时学编程的时候,就经常在GitHub上看一些优秀的开源项目的代码,比如一些简单的库、一些开源的项目。看别人是怎么组织代码的,怎么命名的,怎么设计接口的,怎么处理异常的。看多了,自己写代码的时候,就会不自觉地模仿,代码质量也会慢慢提高。

读代码的时候,不要怕看不懂。看不懂很正常,慢慢来,先从简单的项目开始,先看整体结构,再看具体实现。看不懂的地方,查文档,百度,或者打断点调试。读得多了,慢慢就能看懂了。

五、怎么找工作

学了一段时间,做了几个项目,刷了一些题,就可以开始找工作了。

1. 准备简历

找工作的第一步,是准备简历。简历是你的门面,一定要认真准备。

简历的内容,主要包括这几个部分:

  • 基本信息:姓名、电话、邮箱、GitHub地址、博客地址等
  • 教育背景:学校、专业、学历、毕业时间
  • 工作经历(如果有的话):公司、职位、时间、做了什么、取得了什么成果
  • 项目经历:做过的项目,项目名称、用了什么技术、做了什么、取得了什么成果
  • 技能清单:掌握的技术、语言、框架、工具等
  • 其他:获奖经历、证书、个人评价等

对于零基础转行的人来说,项目经历是最重要的,因为你没有工作经历,面试官主要看你的项目。所以,一定要做几个能拿得出手的项目,写进简历里。每个项目,要写清楚用了什么技术,做了什么功能,有什么亮点,取得了什么成果。不要只写"做了一个博客系统",要写"使用React+Node.js+MongoDB开发了一个博客系统,支持文章发布、评论、标签分类等功能,使用JWT做用户认证,使用Redis做缓存,部署在阿里云上"。

简历要简洁,一页纸就够了,不要写太长。用词要准确,不要夸大,不要造假。面试官不是傻子,你有没有真本事,面试一问就知道了。

2. 投简历

简历准备好之后,就可以开始投了。投简历的渠道有很多,比如BOSS直聘、拉勾网、智联招聘、前程无忧、猎聘,还有公司的官网、内推等。

我当时主要是在BOSS直聘和拉勾网上投的,投了大概几十家,收到了十几个面试邀请。投简历的时候,不要海投,要有针对性地投。看清楚公司的招聘要求,根据要求调整简历,突出自己匹配的地方。而且,尽量投和自己技术栈匹配的岗位,比如你学的是前端,就投前端开发的岗位,不要投后端或者其他不匹配的岗位,那样成功率很低。

另外,内推是一个很好的渠道,成功率比自己投高很多。如果你有朋友在某家公司,可以让朋友帮你内推。没有的话,可以在脉脉、GitHub、技术社区上认识一些人,让他们帮你内推。

3. 准备面试

投了简历,收到面试邀请之后,就要准备面试了。

面试一般分为技术面和HR面。技术面主要考技术基础、项目经历、算法题。HR面主要考综合素质、职业规划、薪资期望等。

准备技术面试,要从这几个方面入手:

  • 技术基础:把你学的技术的基础知识复习一遍,比如JavaScript的原型链、闭包、异步、ES6新特性,CSS的盒模型、定位、Flex布局,HTML的语义化、SEO,等等。这些都是面试常考的。
  • 项目经历:把你做过的项目都复习一遍,每个项目用了什么技术,做了什么功能,遇到了什么问题,怎么解决的,有什么亮点,都要能说清楚。面试官很喜欢问项目里的细节,所以一定要熟悉自己的项目。
  • 算法题:继续刷题,保持手感。面试的时候,一般会让你在线写代码,或者在白板上写,所以要多练习手写代码。
  • 常见面试题:在网上搜一下常见的前端面试题,或者你要面的岗位的面试题,多看看,多背背。很多面试题都是重复的,看多了就会了。

准备HR面,要从这几个方面入手:

  • 自我介绍:准备一个1到2分钟的自我介绍,说清楚自己的基本情况、学了什么、做了什么、为什么想做这个岗位。
  • 职业规划:想清楚自己的职业规划,短期和长期的目标是什么。
  • 为什么转行:如果是转行的,要准备好为什么转行的回答,要积极正面,不要说因为原来的行业不好,要说因为对编程感兴趣,觉得编程更有发展前景。
  • 薪资期望:了解一下市场行情,给自己定一个合理的薪资期望,不要太高也不要太低。
  • 反问面试官:面试最后,面试官一般会问你有什么问题要问,准备几个有水平的问题,比如团队的技术栈、项目的情况、新人的培养机制等,不要问工资、加班、假期这些太功利的问题。

4. 面试复盘

每次面试完,都要做复盘。想想面试官问了什么问题,哪些答上来了,哪些没答上来,哪些答得不好。没答上来的,回去查资料,搞懂,记下来。这样,面试得多了,不会的问题越来越少,成功率就越来越高了。

我当时面试了大概十几家,前几家都挂了,因为经验不足,很多问题答不上来。但每次面试完,我都做复盘,把不会的问题搞懂,慢慢的,能答上来的问题越来越多,后来就拿到了几个offer。

所以,不要怕面试失败,失败是正常的。每次失败,都是一次学习的机会。只要你坚持,不断复盘,不断进步,总有一天能拿到满意的offer。

六、常见的误区

最后,说说自学编程常见的几个误区,希望大家不要踩坑。

误区1:只看视频,不动手

很多人学编程,喜欢看视频,看了一套又一套,觉得自己看懂了,就学会了。但一到自己写代码,就什么都不会了。这就是典型的"眼高手低"。

学编程,动手是最重要的。看视频只是输入,动手写才是输出。只有动手写,才能把知识变成自己的。所以,一定要边看边写,看完之后还要自己做项目,多练习。

误区2:收藏了很多教程,却从来没看完

很多人喜欢收藏教程,看到好的教程就收藏,收藏了几十上百套,但从来没有一套是看完的。总觉得"收藏了就是学会了",其实不是的。

教程不在多,在于精。选一套好的教程,认认真真看完,跟着做完,比收藏一百套教程都有用。所以,不要贪多,选一套适合自己的,坚持看完,坚持做完。

误区3:频繁换语言

很多人学编程,今天学Python,觉得Python好;明天学Java,觉得Java好找工作;后天学Go,觉得Go很火。结果,学了好几种语言,每种都只学了一点皮毛,什么都不会。

编程语言只是工具,核心是编程思维。选一门语言,深入学下去,学通了,再学其他语言就容易了。不要频繁换语言,那样只会浪费时间,最后什么都没学会。

误区4:只学基础,不做项目

很多人学编程,只学基础,语法、API、数据结构,学了一大堆,但从来不做项目。结果,学了很久,还是不知道怎么用,也找不到工作。

做项目是检验学习成果的最好方式,也是找工作的敲门砖。学完基础之后,一定要做项目,从简单的开始,慢慢做复杂的。做项目的过程,就是把知识融会贯通的过程,也是积累经验的过程。

误区5:遇到问题就问,不自己思考

很多人学编程,遇到问题,自己不想,立刻就问别人,或者在群里问,在论坛上问。这样,虽然问题解决了,但你自己没有成长,下次遇到类似的问题,还是不会。

遇到问题,先自己思考,自己查文档,自己百度,自己调试。实在解决不了,再问别人。问的时候,也要说清楚自己做了什么尝试,遇到了什么错误,不要只说"这个问题怎么解决"。自己解决问题的过程,就是成长的过程。

误区6:觉得自己学不会,半途而废

很多人学编程,遇到一点困难,就觉得自己不是学编程的料,就放弃了。其实,每个人学编程都会遇到困难,都会有觉得自己学不会的时候。这是正常的,不要否定自己。

编程是一门技能,和学开车、学游泳一样,只要你坚持学,坚持练,总能学会的。不要因为一时的困难就放弃,咬咬牙,坚持下去,过了那个坎,就会豁然开朗。

七、写在最后

自学编程,是一条不容易的路,需要耐心、毅力、坚持。但只要你方法对,肯努力,就一定能学会,一定能找到满意的工作。

我自己就是一个例子,从完全不懂代码,到现在做了六年程序员,靠的就是坚持和努力。我能做到,你也能做到。

当然,学编程不是目的,目的是用编程解决问题,创造价值。不要为了学而学,要学以致用,用学到的知识做项目,做产品,解决实际问题。这样,学习才有意义,也才有动力。

最后,送给所有正在自学编程的朋友一句话:"路虽远,行则将至;事虽难,做则必成。"只要你坚持下去,就一定能成功。

希望我的这些经验和方法,能对你有所帮助。如果有什么问题,欢迎在评论区交流。