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