每天都看到很多对编程感兴趣的人在问是不是可以自学软件开发,或者应该怎么自学编程才能入门。在这篇文章里,我将尝试重现一个初学者在学习计算机编程时可能会碰到的问题,并尽量提供相应的解决思路,希望对初学者有所帮助。如果你在看完这篇文章后还是有些疑惑,欢迎扫码加入这个编程学习群 和其他学习者一起交流。
目录
- 编程可以自学吗/li>
- 学习编程需要什么基础/li>
- 什么是编程语言么是程序/li>
- 我应该学习哪种编程语言/li>
- 编程的核心思维是什么/li>
- 应该按什么步骤学习编程语言/li>
- 学习编程有什么方法吗/li>
1、编程可以自学吗/h2>
答案是肯定的,而且自学是学习软件编程极其重要的一个途径。不过最好的方式是自学的同时,有一个可以帮助解决问题的同事或者老师,这样可以避免卡在一个问题上太长时间。
现在有很多途径可以自学,例如IT图书,或者在线视频教程,我们的 站
也提供一些面对初学者的免费的在线互动课程,可以边学习边实践,
你也可以尝试一下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4MNWhWBr-1584533114823)(http://blog.hubwiz.com/2019/03/25/how-to-learn-coding/hubwiz.png)]
2、学习编程需要什么基础/h2>
简单地说,只要具备正常的思维能力,就可以学习编程。
让我们从一个实际的梗来理解这一点:如何把大象装进冰箱里/strong>
你也许知道这个搞笑问题的搞笑答案:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kZfDArOb-1584533114825)(http://blog.hubwiz.com/2019/03/25/how-to-learn-coding/frig-elephant-solution.png)]
这就是编程所需要的最基本的思维能力:把一个大的问题分解为若干个小的问题,解决了小的问题,大的问题就解决了,这种分而治之的思考方法是一种相当工程化的思维,也是科学技术在过去的两百年里的统治性思维。
回忆一下,你在生活中难道不就是这么做的吗程实际上就是把生活中常见的思维活动用编程语言表达出来的一个过程。
3、什么是编程语言么是程序/h2>
如果把计算机看成一个人,编程语言就是你和计算机对话的语言,你需要用计算机能听懂的语言才能和计算机对话,就像你需要用当地的语言才能和老外沟通一个道理。
不过由于发明一种新的编程语言的成本相当低,而成就感相当高,因此目前已经出现了太多的编程语言。即有针对娃娃的图形化编程语言,也有中文的编程语言,更有针对不同计算平台的编程语言,试图学习所有的编程语言是不明智的,也是毫无必要的,因为编程最重要的是思维,语言只是向计算机表达你的思维的一个手段而言。
在和计算机沟通时,一次说一句话是比较低效的,因为它会处理的非常快,大量的时间浪费在等待我们的输入上。所以通常是写很多句话一并告诉计算机照着做,这就是我们常说的计算机程序。例如,对于前面说到的把大象放进冰箱这个任务,可以编写如下包含三句话的计算机程序:
基本上就是我们的操作步骤的翻译,对吧/p>
4、我应该学习哪种编程语言/h2>
虽然编程语言不重要,但是初学者选择合适的编程语言却非常重要,因为它会影响你的学习效果和成就感的达成,而且,你终归需要选择一种编程语言才能开始学习编程。
就像大家都喜欢学英语而不是非洲某个国家的法语变种一样,通常你选择一个大家都在用的编程语言是不会有大的问题的,例如看一下权威的TIOBE编程语言排行榜2019年3月的统计:
Mar 2019 | Mar 2018 | Change | Programming Language | Ratings | Change |
---|---|---|---|---|---|
1 | 1 | Java | 14.880% | -0.06% | |
2 | 2 | C | 13.305% | +0.55% | |
3 | 4 | C++ | 8.126% | +1.67% | |
5 | 6 | C# | 3.267% | -1.80% | |
7 | 8 | PHP | 2.420% | -1.59% | |
9 | 10 | Objective-C | 1.681% | -0.09% | |
11 | 18 | Assembly language | 1.413% | -0.29% | |
13 | 11 | R | 1.278% | +0.15% | |
15 | 9 | Groovy | 1.178% | +1.04% | |
17 | 12 | Go | 1.016% | -0.43% | |
19 | 13 | Visual Basic | 0.954% | -0.79% |
学习目的 | 推荐编程语言 | 推荐理由 |
---|---|---|
只是玩玩 | JavaScript | 随处可以找到运行环境,容易获得成就感 |
开发 页应用或 站 | JavaScript | 只有JavaScript可以支持单一语言前后端全栈开发 |
开发安卓应用 | kotlin、java | Kotlin是趋势,Java更通用 |
开发苹果应用 | Swift、Object-C | Swift是趋势,初学者不要选Object-C |
开发游戏 | C#、JavaScript、C/C++ | C#是因为Unity的存在,JavaScript更适合 页游戏,C/C++更适合 络端游 |
开发数据分析或机器学习应用 | Python、Julia、R | Python是这一领域当之无愧的王者,Julia是值得关注的趋势语言,R在数据分析上有自己的价值 |
开发企业应用 | Java、C# | 去偏传统的IT公司工作的最佳语言是Java和C#,工作机会非常多 |
开发嵌入应用 | C、Assembly Language | 穿戴设备或IOT软件的运行环境受限,需要这种底层的语言 |
开发服务端应用 | JavaScript、Go | JavaScript是因为NodeJS的存在,Go是因为它为 络服务应用开发专门进行了优化 |
如果你目前还没有明确的学习目的或者倾向性,我推荐两种语言:JavaScript和Python。
这两种语言都有很好的生态,意思是当你需要帮助或者需要使用第三方代码时比较容易获取。如果你有意向数据分析/机器学习/人工智能方向发展,那么选择Python,其他情况,选择JavaScript。
无论如何,还是建议你首先考虑自己学习编程的目的是什么,有哪个方向是自己感兴趣并且愿意付出时间和努力的,毕竟,兴趣是最好的老师。
5、编程的核心思维是什么/h2>
在机器学习成为显学之前,传统的编程思维只有一条主线,就是逻辑的表达:把你解决问题的思维,用特定的编程语言表达出来,整理出程序让计算机去执行。这需要你把目标问题分解成一个一个的已经解决的小问题,然后再把这些小问题的解决方案整合成最终的完整解决方案。
理论上只需要三种整合手段就可以实现任何计算任务:顺序、条件判断和跳转:
7、学习编程有什么方法吗/h2>
毋庸置疑,和学习其他知识或技能一样,学习编程也需要掌握正确的方法。
1、多实践基准API
第一个学习方法就是多实践,只有思路是远远不够的。过于强调看书看视频而忽略实践的结果就是眼高手低。你看到一个问题,思路上觉得行得通,但是却怎么也实现不出来。这是因为编程需要精确地考虑并实现每一个细节,如果只是粗线条的理解,是很难达到学习目标的。
那么怎么才能多实践该多模拟一些实战项目吗/p>
不是这样的。在早期的学习中,不应该参与复杂的实战项目,而是应该尽可能多的了解编程语言的能力,比如练习它的基础API的使用方法、练习它的扩展包的API的使用方法。一个实践任务一定不要包含太多的代码,最好聚焦于一个API,尽可能地理解它的用法,以及它对应的抽象模型的内在机制。
有的时候一个API用起来很简单,但是它有对应的抽象模型存在,这个模型并不容易一下理解。例如当你学习JavaScript操作 页的时候,就会接触到文档对象模型、Flex盒模型等诸多抽象,在这种情况下,建议你先遵循黑盒法则,就是先了解这个模型的作用,掌握API的使用方法,而暂时忽略其内部运行机制,然后将这个不理解的问题暂且记到小本本上,留待日后解决。
所以,我们说的多实践,不是实战项目的实践,而是在很细粒度上的实践,理想的粒度是在单一API上完成一个实践,因为API本身就体现了编程语言或开发包的设计者的初衷。
2、多问自己为什么
第二个学习方法就是在学习的过程中,多问自己一些为什么,有意识地设计一些问题挑战自己,把一时解决不了的问题记录下来,带着问题继续学习。
第一种问题是在学习过程中自发产生的,比如前面提到的,现在学习的某个知识点可能涉及到了另一个之前不了解的知识点,如果那是一个比较难理解的知识点,那么还是先记录下来,不要打断当前的学习思路。
第二种问题是有意识的发问。例如当你练习一个API的使用时,不妨考虑一下这几个问题:这个API可能在什么场景下能用到什么这个API需要这些参数个API和之前学的哪些API经常一起用/p>
能够主动地向自己提出问题是很了不起的进步,这意味着你真正进入了主动思考的状态。
3、设定分级目标,继续实践
在实践API的时候,我们的目标就是理解并掌握这个API的使用方法。当初步熟悉了编程语言的API之后,就可以设定下一级的目标,尝试着用已经掌握的知识去实现这个目标。不需要完成一个大程序,对于大多数情况而言,这时候试着编写一个诸如贪吃蛇这样的小游戏是合适的:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-54u0NUoF-1584533114830)(http://blog.hubwiz.com/2019/03/25/how-to-learn-coding/snake.jfif)]
当然这种阶段性的目标也是与你的最终学习目标相关的,例如,如果你的学习动力是要开发 页应用,那么这个阶段试着实现一个简单的图片分享或者博客系统都是可以的;而如果你的目标是人工智能,那么这个阶段可以试着用神经 络解决一下文本分类的问题。总之阶段性的分级目标的设定是为了给自己一个前进的动力,过高或者过低都不好。
4、在战斗中学习战斗
学习编程的目标是不是学习,而是开发出有价值的程序。因此完全脱产的学习终究会告一段落,你可能会投入到繁忙的编程工作中去。不过这并不意味着你不再需要学习,事实上,技术的演变是极其快速甚至剧烈的,因此别忘了:
保持积极学习的心态和敏锐的好奇心,在战斗中学习战斗!
原文链接:编程入门自学指南 — 汇智
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!