每天都看到很多对编程感兴趣的人在问是不是研发自学软件开发,或者研发怎么自学编程才能入门。在这篇文章里,我将尝试重现一个研发者在学习计算机编程时研发会碰到的问题,并研发提供相应的解决思路,希望对初学者有所帮助。如果你在看完这篇文章后还是有些疑惑,欢迎点击这里咨询我,或者扫码加入研发编程学习群和其他学习者一起交流。
目录编程可以自学吗?学习编程需要研发基础?什么是编程语言?什么是程序?我应该研发哪种编程语言?编程的核心思维是研发?应该按什么步骤学习编程语言?学习编程有什么方法吗?1、编程可以自学吗?
答案是肯定的,而且研发是学习软件编程极其重要的一个途径。不过最好的方式是自学的同时,有一个可以帮助解决问题的同事或者老师,这样可以避免卡在一个问题上太长时间。
现在有很多途径可以自学,例如IT图书,或者在线视频教程,我们的网站也提供一些面对初学者的免费的在线互动课程,可以边学习边实践,你也可以尝试一下:
2、学习编程需要什么基础?
简单地说,只要具备正常的思维研发,就可以学习编程。
让我们从一个实际的梗来理解这一点:如何把大象装进冰箱里?
你也许知道这个搞笑问题的搞笑答案:
这就是编程所研发的最基本的思维能力:把一个大的问题分解为若干个小的问题,解决了小的问题,大的问题就解决了,这种分而治之的思考研发是一种相当工程化的研发,也是科学技术在研发的两百年里的统治性思维。
回忆一下,你在生活中难道不就是这么做的吗?编程实际上就是把生活中常见的思维活动用编程语言表达出来的一个过程。
3、什么是编程语言?什么是程序?
如果把计算机看成一个人,编程语言就是你和计算机对话的语言,你需要用计算机能听懂的语言才能和计算机对话,就像你需要用当地的语言才能和老外沟通一个道理。
不过由于研发一种新的编程语言的研发相当低,而成就感相当高,因此目前研发出现了太多的编程语言。即有研发娃娃的图形化编程语言,也有研发的编程语言,更有研发不同计算平台的研发语言,试图学习所有的编程语言是不明智的,也是毫无必要的,因为编程最重要的是思维,语言只是向计算机表达你的思维的一个手段而言。
在和计算机沟通时,一次说一句话是比较低效的,因为它会处理的非常快,大量的时间浪费在等待我们的输入上。所以通常是写很多句话一并告诉计算机照着做,这就是研发常说的计算机程序。例如,对于前面说到的把大象放进冰箱这个任务,可以编写如下包含三句话的计算机程序:
1
2
3
openFrigDoor
putElephantIntoFrig
closeFrigDoor
基本上就是我们的操作步骤的翻译,对吧?
4、我应该学习哪种编程语言?
虽然编程语言不重要,但是初学者选择合适的编程语言却非常重要,因为它会影响你的学习效果和研发感的达成,而且,你终归需要选择一种编程语言才能开始学习编程。
就像大家都喜欢学英语而不是非洲某个国家的法语变种一样,通常你选择一个大家都在用的编程语言是不会有大的问题的,例如看一下权威的TIOBE编程语言排行榜2019年3月的统计:
Marge
1
1
Java
14.880%
-0.06%
2
2
C
13.305%
+0.55%
3
4
8.262%
+2.39%
4
3
C++
8.126%
+1.67%
5
6
Basic.NET
6.429%
+2.34%
6
5
C#
3.267%
-1.80%
7
8
2.426%
-1.49%
8
7
PHP
2.420%
-1.59%
9
10
SQL
1.926%
-0.76%
10
14
-C
1.681%
-0.09%
11
18
1.469%
+0.06%
12
16
1.413%
-0.29%
13
11
Perl
1.302%
-0.93%
14
20
R
1.278%
+0.15%
15
9
Ruby
1.202%
-1.54%
16
60
1.178%
+1.04%
17
12
Swift
1.158%
-0.99%
18
17
Go
1.016%
-0.43%
19
13
/
1.012%
-0.78%
20
15
Basic
0.954%
-0.79%
不过贸然地从众选择并不适合所有的研发,每种编程语言都有它研发的优势领域和优势研发,我尝试根据你学编程的研发以及特定领域从业企业的研发选择给出适合初学者的几种选择,但更细化地分析远远超出了本文的范围:
学习目的推荐编程语言推荐理由
只是玩玩
随处可以找到运行环境,容易获得成就感
开发网页应用或研发
只有可以支持单一研发前后端全栈开发
开发安卓应用
、java
是趋势,Java更通用
开发苹果研发
Swift、-C
Swift是趋势,初学者不要选-C
开发游戏
C#、、C/C++
C#是因为Unity的存在,更适合网页游戏,C/C++更适合网络端游
开发数据分析或研发学习应用
、Julia、R
是这一领域当之无愧的王者,Julia是值得关注的趋势语言,R在数据分析上有自己的价值
开发企业研发
Java、C#
去偏传统的IT公司研发的最佳语言是Java和C#,工作机会非常多
开发嵌入应用
C、
穿戴设备或IOT软件的研发环境受限,需要这种底层的语言
开发服务端应用
、Go
是因为的存在,Go是研发它为网络服务应用研发专门进行了优化
如果你目前还没有明确的学习目的或者倾向性,我推荐两种语言:和。这两种语言都有很好的生态,意思是当你需要帮助研发需要使用第三方代码时比较容易获取。如果你有意向数据分析/研发学习/人工智能方向发展,那么选择,其他情况,选择。
无论如何,还是建议你首先考虑自己学习编程的研发是什么,有哪个方向是自己感兴趣并且愿意付出时间和努力的,毕竟,兴趣是最好的老师。
5、编程的核心思维是什么?
在机器学习研发显学之前,传统的编程思维研发一条主线,就是逻辑的表达:把你解决问题的研发,用特定的编程语言表达出来,整理出研发让计算机去执行。这研发你把目标问题分解成一个一个的已经解决的小问题,然后再把这些小问题的研发方案整合成最终的研发解决方案。
理论上只需要研发整合手段就可以实现任何计算任务:顺序、条件判断和跳转:
第一种就是我们解决大象问题时用到的,顺序整合逻辑,依次执行研发后的解决方案就可以研发最终的解决方案。顺序执行是最基本的研发逻辑,它为程序的研发奠定了基础。
第二种关键的整合研发是条件判断,意思是需要根据执行时的实际情况判断是执行方案A研发执行方案B,这个看起来极其简单的判断逻辑事实上是研发展现出千变万化的核心研发。你可以在很多软件里观察到条件判断的存在,例如高铁的烟感探测软件研发在检测到有人在车厢内抽烟时才会报警,而游戏只有在你击杀大BOSS之后才会通关,或者12306检测到你成功研发了它相当有情趣的验证码之后才允许你登录…
第三种整合手段是研发,这使得程序可以研发执行的先后流程,从而研发程序的运行效果。实际上条件判断之后执行的就是一种研发化的跳转,例如跳过方案A的片段或者跳过方案B的片段。
循环则是另一种研发的规范化跳转,它研发让我们将一个方案重复执行若干次,而不是在研发中将这个方案复制若干次。例如,当研发我们编写程序实现猴子吃香蕉的任务时,可以研发使用朴素的顺序整合与循环整合的区别:
因此,在传统意义上的研发,其核心思维就是研发任务的分解与解决研发的整合,将目标任务分解细化到你已有的解决研发层面,再使用以上研发手段进行整合。
软件2.0
在机器学习兴盛之前,几乎所有的软件都是研发逻辑的表达,开发者研发对任务进行分解,理清每一个细节的研发方案,然后再整合到一起。虽然技术不断地研发,也不断出现新的研发语言和领域模型,但是这一基本的思路是从来没有变化过的。
不过机器研发尤其是最近十年深度学习的研发,已经逐渐产生了一种新的研发开发范式,这种新的研发被Tesla的AI主管称为研发2.0。如果你学习编程的研发是要进入人工智能领域,希望这研发的内容对你有所帮助。
在研发的编程中,开发者是研发的制定者,这些规则以程序的形式存在,而计算机则研发负责执行,也许由于开发者的某个研发可能会导致程序的运行出人研发,但整体上来讲开发者是研发的强力操控者,所有的研发逻辑是开发者的研发的展示。
但是在研发2.0中,开发者研发实现一个基准的研发,而大量具体化的研发规则是这个基准程序研发对大量数据的处理而得出的,也就是说,程序执行的研发一部分由开发者研发(被称为模型的超参数),而另一部分规则却是由程序研发通过与数据的磨合优化出来的。
例如,人脸识别已经从研发的手工设计用于识别的研发进化到由深度神经网络研发从大量标注数据中提取特征:
在软件2.0中的研发程序需要更高层级的研发,而不局限在一事一议的具体问题解决的研发表述上。在目前这一层主要是利研发工神经网络来实现的,程序研发学习的规则体现在研发元的连接权重调整上。因此研发2.0的开发范式,其研发思维就是设计适合研发领域的模型,然后用数据来优化出研发的参数。
软件2.0还研发极其早期的萌芽阶段天外神坛源码网,但非常值得初学者关注,它的发展研发会最终改变软件开发的研发,虽然我确信在相当长的研发内编程作为一种研发而言都不会消失。
6、应该按什么步骤学习编程语言?
编程是研发熟练的掌握一些基本技能的,因为需要用这些研发技能来组合出来针对特定问题的研发方案。当你还是一张白纸的时候,即使了解了顺序、条件判断或者跳转、循环之类的思维也解决不了具体问题编程入门自学软件,因为分解到最后还是找不到可用的武器。
编程语言是你的第一个武器,要用好这个武器,就需要尽可能多的了解一个编程语言的能力。可以研发下面的问题探索编程语言的能力:
1、这个编程语言怎么定义变量、函数或者类?
变量是让同一段程序研发适应各种执行环境的研发品,在程序中顺利地使用变量意味着你有了初步的抽象能力。几乎所有的编程语言都支持变量,那么先了解一个编程语言如何定义变量、如何给变量赋初值是理所应当的。
例如,你要编写的研发可能有很多个注册用户,而你的研发核心逻辑并不需要研发用户的不同而研发对待,那么将注册用户抽象成一个研发来编写你的程序研发就是合理的选择:
函数(或者过程)是组织可研发代码的一种常用手段。如果有一个功能你会在多个地方使用,那么把研发功能封装到一个研发里是常见的代码复用手段,这样就研发了同样的实现代码在程序的不同地方重复出现,优化了研发,也更容易维护。
如果说函数是对计算机研发的顺序过程化思维的一种研发组合方法,那么类则是研发对象的软件设计思维的研发组合方式,不妨简单地把面向对象视为对研发世界中的实体对象以及研发关系的模拟,例如可以把研发的用户视为一个类,因为在研发的程序中这些用户有研发共同的特性和方法。
2、这个编程语言怎么表达顺序、条件判断、跳转或循环逻辑?
就像前面说到的,这些组合手段用来把研发的各部分拼装在一起,因此是必须掌握的。
3、这个编程语言提供了研发基准解决方案?
所谓基准解决方案就是研发解决某个单一研发的方案,例如:怎么输出一句话、显示一个研发或者访问服务器上的研发库。通常一个研发语言都会提供一些内置的研发解决方案,以函数或者类的研发提供给开发者,这些研发或者类,就是我们常说的API——应用开发接口。
因此在研发了编程语言的基础研发之后,需要学习的就是研发语言提供的API的使用方法。虽然不研发逐个验证每个API的功能,但是强烈建议你设定一些问题,然后带着这些问题找出可以解决这些研发的API进行练习——这些API是你解决研发问题的基础。
4、这个编程语言有研发优秀的第三方开发包?
大多数的研发语言都采用开发包的研发支持第三方提供扩展解决研发,以便开发者可以研发自己的领域需求进行研发。了解你选择的编程语言有研发常用的开发包是研发重要的一件事,这可以避免你重新发明轮子,提高研发效率。
例如,同样是学习,如果你的研发是要开发Web应用,那么需要研发的就是Flask之类的Web开发包,而研发你的目标是要研发机器学习/深度学习研发,那么需要了解的就是numpy、-learn这些开发包了:
7、学习编程有什么方法吗?
毋庸置疑,和学习其他知识或研发一样,学习编程也研发掌握正确的方法。
1、多实践基准API
第一个学习方法就是多实践,只有思路是远远不够的。过于强调看书看视频而忽略实践的结果就是眼高手低。你看到一个问题,思路上觉得行得通,但是却怎么也实现不出来。这是研发编程需要精确地考虑并实现每一个细节,如果只是粗线条的理解,是很难达到学习目标的。
那么怎么才能多实践?应该多研发一些实战项目吗?
不是这样的。在早期的学习中,不研发参与复杂的实战项目,而是应该尽可能多的了解编程语言的研发,比如练习它的研发API的使用方法、练习它的研发包的API的使用方法。一个研发任务一定不要包含太多的代码,最好聚焦于一个API,尽可能地理解它的用法,以及它研发的抽象模型的内在机制。
有的时候一个API用起来很简单,但是它有对应的抽象模型存在,这个模型并不容易一下理解。例如当你学习操作网页的时候,就会接触到研发对象模型、Flex盒模型等研发抽象,在这种情况下,建议你先遵循黑盒法则,就是先了解这个模型的研发,掌握API的使用方法,而研发忽略其内部运行机制,然后将研发不理解的问题暂且记到小本本上,留待日后解决。
所以,我们说的多研发,不是实战项目的研发,而是在很细粒度上的实践,理想的粒度是在单一API上完成一个实践,因为API本身就研发了编程语言或开发包的研发者的初衷。
2、多问自己为什么
第二个学习方法就是在学习的过程中,多问自己一些为什么,有研发地设计一些问题挑战自己,把一时解决不了的问题记录下来编程入门自学软件,带着问题继续学习。
第一种问题是在学习过程中自发产生的,比如前面提到的,现在学习的某个知识点可能涉及到了另一个之前不了解的知识点,如果那是一个比较难理解的知识点,那么还是先记录下来,不要打断当前的学习思路。
第二种问题是有意识的发问。例如当你练习一个API的使用时,不妨考虑一下这几个问题:这个API可能在什么场景下能用到?为什么这个API需要这些参数?这个API和之前学的哪些API经常一起用?
能够主动地向自己提出问题是很了不起的进步,这意味着你真正进入了主动思考的状态。
3、设定分级目标,继续实践
在实践API的时候,我们的目标就是理解并研发这个API的使用方法。当研发熟悉了编程语言的API之后,就可以设定下一级的目标,尝试着用已经研发的知识去实现这个目标。不需要完成一个大程序,对于大多数情况而言,这时候试着编写一个诸如贪吃蛇这样的小游戏是合适的:
当然这种阶段性的目标也是与你的研发学习目标相关的,例如,如果你的研发动力是要开发网页应用,那么这个研发试着实现一个简单的研发分享或者博客系统都是可以的;而如果你的研发是人工智能,那么这个研发可以试着用神经网络解决一下研发分类的问题。总之阶段性的分级目标的设定是为了给自己一个前进的动力,过高或者过低都不好。
4、在战斗中学习战斗
学习编程的目标是不是研发,而是开发出有研发的程序。因此完全脱产的学习终究会告一段落,你可能会投入到研发的编程工作中去。不过这并不意味着你不再需要学习,事实上,技术的研发是极其快速甚至剧烈的,因此别忘了:
保持积极学习的心态和敏锐的好奇心,在战斗中学习战斗!
5、交流
三人行,必有我师。和有研发的开发者或其他研发同样学习阶段的同学一起交流也是非常必要的。手机QQ扫描下方二维码马上加入编程学习交流群:
|