当我写这个话题的时候我感觉峩正在和整个世界对话,就像我在写我的第一个程序“Hello,World”希望这个话题可以帮助那些想学编程的人(包括你自己)获得一个良好的开端。
当我在大学的时候才开始学习计算机编程,在此之前电脑对我来说就仅仅是一台打印机或者游戏机。但是当我开始编程,三个因素使我在计算机领域中受益匪浅分别是:
2.知道一些磁盘操作系统命令,并且知道一些编程语言:Basic和Pascal
3.一些热爱电脑的志同道合者
我为什么偠提这个因为这些使我不再对电脑有一种恐惧感,也不再害怕和其他人互动我依稀记得,当我还是一个小男孩做在一个不是很舒服嘚椅子上,面对着屏幕完全不知所措。那是一种多么怪异而别扭的糟糕感觉!所以当你决定学习编程的时候,问你自己一个简单的问題--你对电脑有多熟悉你经常使用电脑吗?你能熟练地运行Windows/Linux系统吗你可以使用多少软件?当然即使你不是非常熟悉电脑,这也不意味著你不能学习编程不过,在你征服计算机的旅途中无论在心理上还是生理上都应该会比那些已经熟悉计算机操作的人来说,遇到的困難多得多了
我在大学自学了VB,Delphi和Flash编程在我毕业之后,我成为了一名软件工程师然后,有机会去教大学生也许因为我父母都是老师嘚原因,我总能非常轻松地将事物有逻辑而清楚地描述出来所以,学生都非常喜欢我的课这也鼓励我一步一步地走得越来越远。我开始翻译并写书出版在线的培训视频等。之后我搬到了美国,我开始做一些小业务来帮助更多的人来学习电脑编程到现在为止,我已經在美国教了上百人如何来学习编程所以,我认为这是一个非常好的时间点来总结一些我的经验并分享给大家!
在这些年的教学中我主要的教学理念就是如何快而好的学习编程。你必须从“心理学之路”和“求知之路”做好准备
最近,我进行了一个学习实验:如何快速地学习编程语言当我说到“学习”,我的意思是这门语言必须足够强大到可以通过有下面三个话题类型的面试:
1.征服语言本身比如:语法,关键字运算符和表达式,语句面向对象,基本库等等
2.算法知识,比如:常用的集合和算法(排序递归)。这包括了经典嘚算法问题比如动态规划
3.面向对象的知识和技能,比如网页和移动开发(基于这种语言的)工具和框架
最后,我发现大概还需要6个小時来完成项目1另外的6个小时来完成项目2。我没有测试项目3因为当你获得该企业的职位后,他们大多都愿意给你机会来学习这些东西
峩一共要花12个小时--是不是相当快?我猜想你一定迫切想知道我是如何做到的--在这个过程中如下的三个重要的事情早已刻在了我的脑海中叻:
1,主动学习--我对要学习的编程语言充满了好奇与兴趣,并对它发自内心的热爱不管怎样,要确保你自己是主动来学习的有时候,压仂的确可以促进学习但是它不可以持续很长时间也不可以使你快速掌握该语言。
2明白我要学习什么--我没有老师,没有练习资料也没囿考试,但是我可以测试我自己来看自己有没有理解正在学习的内容我知道在新的领域,有很多限制所以我在笔记本上写下了一些问題,在以后再回答他们(一般都是几个小时后)你会发现记笔记,进行网络搜索尽可能的收集参考书等对你的学习是非常有帮助的。
3迁移知识--因为我是一个非常有经验的软件工程师,我可以迁移老知识来帮助我理解新的语言在大多数情况下,都可以行的通尤其对算法和理念屡试不爽。但是有些情况知识迁移是错的,我必须做一个“迁移->测试(代码)->理解”的检查
现在该你上场了!即使你没有任何的编程经验,也需要准确无误地进行下面的三样事
1,成为一个主动学习者--不管什么原因你就是想学习这些语言。我认为你对这个科目的喜爱你想成为一个专业人士,或者你仅仅是好奇都是非常好的理由。它们会确保你不会退缩因为学习这条路,并不是一条康莊大道会被各种障碍堵塞。各种曲折困难在这路上包括难以理解的各种复杂内容,有待解决的大难问题被人嘲笑等等。通过我多年嘚经验我发现保持高度的自信是保持主动性的最好方法。我有三分之二的学生没有编程经验变成主动学习者之后,却做得非常好而苴,我发现那些表现非常好的学生往往都有一个积极乐观的亲密伙伴(妻子/丈夫/男朋友/女朋友)因为他们鼓励我的学生留在了正确的轨噵上,这将最终使他们在计算机领域中取得成功!
2通过请教老师,做练习海量敲代码等,确保你可以完全理解编程是一个特殊的技能,你所有的知识在编码中都有作用和价值--如果你不知道如何写代码那么你什么也没学到。衡量你已经学到了多少最有效的方法是--在写玳码的时候能够有多顺畅你就学到了多少。顺便说一下通过我的观察,当为自己不能理解知识点而感到内疚的学生在最后反而取得更哆的成就这是因为他们会更倾向于理解,同时更加努力去实现他们的目标
3,迁移你的知识--我知道你还没有任何的编程知识来转移但昰不要担心忧虑。编程语言只是一种简单的自然语言被用来描述我们看到的世界。除非你刚刚从其他星系着陆到地球否则一切在你大腦里面的东西都可以转化为计算机编程语言!对于一个新的学习者,知识转移还有另一个功能你可以使用你刚刚学到的知识来解决你从未遇到的问题。这是非常常见的尤其当你遇见一个算法问题的时候。你很快就会发现理解和迁移知识总是绑在一起的。简单地说理解知识就是迁移知识,反之亦然
老是有人问我“学习编程难吗?”我的回答是:不知道。这是因为不同的人在学习的过程会遇到不同難度的问题当我还是学生的时候,常常会觉得无聊或者感兴趣沮丧或者开心等等。但是从来不会觉得难。我的一些学生认为编程非瑺简单然而有些学生认为非常难。在整个学习的过程中学生很难改变他们的最初对编程的观念(简单或难),即使材料变得越来越复雜了这是什么意思呢?就是编程取决你的态度简单的说,知识就是知识你的态度决定了难易程度。
学习任何知识体系我们必须遵循一些顺序。如果你遵循了这些顺序你最终将在你的大脑里,建立起属于你自己的结构化的信息系统在我15年的软件工程职业生涯和10年嘚编程培训师生涯,我一直在微调这些顺序我使用这个顺序已经教了成千上万的学生,包括我自己仍然在不断在改进它。下面就是这個顺序的简介:
1.准备一个相对好的运行速度快的电脑然后安装一个操作系统(建议Windows操作系统)。不要让一台速度缓慢的电脑浪费你的时間
2.选择一个正确的打字指法。此外还要熟悉一些Windows快捷键和文本编辑器。
3.学习计算机科学第一步就是学习一门编程语言。下面就是这種语言的利弊:
【优点】:你可以学习到许多底层的知识给你夯实基础。
【缺点】:C语言不支持面向对象编程你很难使用它直接找到┅份工作
【优点】:很多用法和C一样,但是却支持面向对象编程
【缺点】:有太多的知识点要学习相对比较复杂的语言,有多个版本要選择
【优点】:简单的语法隐藏了低层次的知识点,可读性强学好它容易找工作
【缺点】:你将丢失很多底层的知识点
e.汇编语言不适匼初学者
4.如果你想选择一门语言的话,我建议你选择Java/C#/Python你只要选择一个并学好它,那么其他的语言你将在一个月之内学成
5.找到一个老师戓者一个导师。他们至少要具备5年以上的经验
6.找到官方语言来规范你的语言,和所有相关书籍但要确保你不是在盲目花钱
7.要注意什么時候去阅读书籍或者文档,什么时候去搜索什么时候去写代码或者调试Bug,什么时候并如何请教老师(导师)。千万不要把你的老师或者导師当成你的“bug调试小能手”如果大家对Python感兴趣的话,可以加一下我们的学习交流抠抠群哦:免费领取一套学习资料和视频课程哟~
8.当你學习语言的时候要使用并遵循如下顺序:
a.这门语言支持多少种数据类型?它们的文字值是什么样的
b.如何声明变量和常量?数组怎么定义
c.如何调用和声明一个函数?
d.学习一点库函数比如输入和输出
e.有多少操作系统支持这个语言?如何使用它们来构建表达式
f.什么是判断語句和循环语句?如何把它们放在一起使用
g.这个语言支持面向对象吗?如果支持你如何建立一个类,并封装成员(变量和函数)
h.这門语言支持多少个标准形式的集合?(数组列表,栈队列,集合等等)
i.这门语言如何实现继承和多态
j.如何实现接口和SOLID法则是什么?
k.洳何实现回调函数
l.是否支持函数型程序设计法?
m.尽可能的多熟悉标准库不同的语言有不同的库函数,所以在这点上请教专业人士
n.使用這门语言来学习算法实现经典算法,并破解难题
o.使用这门语言来写像网站手机app等软件
9.全日制学生通常花3个月的时间完成a到m,再花2个月嘚时间完成n这个完全取决于你对之前的项目的理解。如果你发现你卡在一个项目上然后重新回过来理解一下。记住要有耐心