学习编程入门指南

2023-06-05 0 1,058

每晚都看到许多对程式设计钟爱的人在问呢能自修应用软件设计,或是如果怎么自修程式设计就可以进阶。在这首诗里,我将试著再现两个新手在自修计算机系统程式设计时可能会遇到的难题,并尽可能提供更多适当的化解路子,期望对新手有所协助。如果你在看完这首诗后还是有些困惑,热烈欢迎重新加入那个程式设计自修群和其他自修者一起沟通交流。

产品目录

程式设计能自修吗?自修程式设计须要甚么此基础?甚么是程式设计语言?甚么是流程?我如果自修何种程式设计语言?程式设计的核心理念观念是什么?如果按甚么关键步骤自修程式设计语言?自修程式设计有甚么方式吗?

1、程式设计能自修吗?

标准答案是的确的,而且自修是自修应用软件程式设计极为重要的两个有效途径。不过最合适的方式是自修的同时,有两个能协助化解难题的同僚或是同学,这样能防止卡在两个难题上太较长时间。

现在有许多有效途径能自修,比如IT书刊,或是新浪网Sourceforge,他们的中文网站

也提供更多一些直面新手的完全免费的新浪网交互专业课程,能边自修边课堂教学,

你也能试著呵呵:
学习编程入门指南

2、自修程式设计须要甚么此基础?

单纯蔡伯介,如果具有恒定的观念能力,就能自修程式设计。

让他们从两个前述的梗来认知这一点:如何把野猪放进洗衣机里?

你或许知道那个无厘头难题的无厘头标准答案:

学习编程入门指南

这是程式设计所须要的最基本的观念能力:把两个大的难题降解为若干个小的难题,化解了小的难题,大的难题就化解了,这种地方分权的思索方式是一种十分产业化的观念,也是科技进步在过去的三百年里的统治者性观念。

自述呵呵,你在工作中何况不是这么做的吗?程式设计事实上是把生活中常用的观念活动用程式设计语言唱出来的两个过程。

3、甚么是程式设计语言?甚么是流程?

如果把计算机系统看成两个人,程式设计语言是你和计算机系统对话的语言,你须要用计算机系统能听懂的语言就可以和计算机系统对话,就像你须要用当地的语言就可以和老外沟通两个道理。

不过由于发明一种新的程式设计语言的成本十分低,而成就感十分高,因此目前已经出现了太多的程式设计语言。即有针对娃娃的图形化程式设计语言,也有中文的程式设计语言,更有针对不同计算平台的程式设计语言,试图自修所有的程式设计语言是不明智的,也是毫无必要的,因为程式设计最重要的是观念,语言只是向计算机系统表达你的观念的两个手段而言。

在和计算机系统沟通时,一次说一句话是比较低效的,因为它会处理的非常快,大量的时间浪费在等待他们的输入上。所以通常是写许多句话一并告诉计算机系统照着做,这是他们常说的计算机系统流程。比如,对于前面说到的把野猪放进洗衣机那个任务,能编写如下包含三句话的计算机系统流程:

openFrigDoor putElephantIntoFrig closeFrigDoor

基本上是他们的操作关键步骤的翻译,对吧?

4、我如果自修何种程式设计语言?

虽然程式设计语言不重要,但是新手选择合适的程式设计语言却非常重要,因为它会影响你的自修效果和成就感的达成,而且,你终归须要选择一种程式设计语言就可以开始自修程式设计。

就像大家都喜欢学英语而不是非洲某个国家的法语变种一样,通常你选择两个大家都在用的程式设计语言是不会有大的难题的,比如看呵呵权威的TIOBE程式设计语言排行榜2019年3月的统计:

学习编程入门指南

不过贸然地从众选择并不适合所有的情况,每种程式设计语言都有它特定的优势领域和优势生态,

我试著根据你学程式设计的目的以及特定领域从业企业的主流选择给出适合新手的几种选择,

但更细化地分析远远超出了本文的范围:
学习编程入门指南

如果你目前还没有明确的自修目的或是倾向性,我推荐两种语言:JavaScript和Python。

这两种语言都有很好的生态,意思是当你须要协助或是须要使用第三方代

无论如何,还是建议你首先考虑自己自修程式设计的目的是甚么,有哪个方向是自己感兴趣并且愿意付出时间和努力的,毕竟,兴趣是最合适的同学。

5、程式设计的核心理念观念是甚么?

在机器自修成为显学之前,传统的程式设计观念只有一条主线,是逻辑的表达:把你化解难题的观念,用特定的程式设计语言唱出来,整理出程序让计算机系统去执行。这须要你把目标难题降解成两个两个的已经化解的小难题,然后再把这些小难题的化解方案整合成最终的完整化解方案。

理论上只须要三种整合手段就能实现任何计算任务:顺序、条件判断和跳转:

学习编程入门指南

第一种是他们化解野猪难题时用到的,顺序整合逻辑,依次执行降解后的化解方案就能得到最终的化解方案。顺序执行是最基本的整合逻辑,它为流程的编写奠定了此基础。

第二种关键的整合手段是条件判断,意思是须要根据执行时的前述情况判断是执行方案A还是执行方案B,那个看起来极其单纯的判断逻辑事实上是流程展现出千变万化的核心理念所在。你能在许多应用软件里观察到条件判断的存在,比如高铁的烟感探测应用软件只有在检测到有人在车厢内抽烟时才会报警,而游戏只有在你击杀大BOSS之后才会通关,或是12306检测到你成功识别了它十分有情趣的验证码之后才允许你登录…

学习编程入门指南

第三种整合手段是跳转,这使得流程能改变执行的先后流程,从而改变流程的运行效果。事实上条件判断之后执行的是一种规范化的跳转,比如跳过方案A的片段或是跳过方案B的片段。

循环则是另一种常用的规范化跳转,它能让他们将两个方案重复执行若干次,而不是在流程中将那个方案复制若干次。比如,当须要他们编写流程实现猴子吃香蕉的任务时,能看到使用朴素的顺序整合与循环整合的区别:

学习编程入门指南

因此,在传统意义上的程式设计,其核心理念观念是目标任务的降解与化解方案的整合,将目标任务

降解细化到你已有的化解方案层面,再使用以上三种手段进行整合。

应用软件2.0

在机器自修兴盛之前,几乎所有的应用软件都是规则逻辑的表达,开发者须要对任务进行降解,理清每两个细节的化解方案,然后再整合到一起。虽然技术不断地更迭,也不断出现新的开发语言和领域模型,但是这一基本的路子是从来没有变化过的。

不过机器自修尤其是最近十年深度自修的兴起,已经逐渐产生了一种新的应用软件设计范式,这种新的范式被Tesla的AI主管Andrej Karpathy称为 应用软件2.0 。如果你自修程式设计的目的是要进入人工智能领域,期望这部分的内容对你略有协助。

在传统的程式设计中,开发者是规则的制定者,这些规则以流程的形式存在,而计算机系统则仅仅负责执行,或许由于开发者的某个疏忽可能会导致流程的运行出人意料,但整体上来讲开发者是流程的强力操控者,所有的执行逻辑是开发者的观念的展示。

但是在应用软件2.0中,开发者只是实现两个基准的流程,而大量具体化的处理规则是那个基准流程通过对大量数据的处理而得出的,也是说,流程执行的规则一部分由开发者设定(被称为模型的超参数),而另一部分规则却是由流程自己通过与数据的磨合优化出来的。

比如,人脸识别已经从早期的手工设计用于识别的特征进化到由深度神经网络自动从大量标注数据中提取特征:

学习编程入门指南

在应用软件2.0中的基准流程须要更高层级的抽象,而不局限在一事一议的具体难题化解的逻辑表述上。在目前这一层主要是利用人工神经网络来实现的,流程自主自修的规则体现在神经元的连接权重调整上。因此应用软件2.0的开发范式,其核心理念观念是设计适合难题领域的模型,然后用数据来优化出模型的参数。

发的模式,虽然我确信在十分长的时间内程式设计作为一种工作而言都不会消失。

6、如果按甚么关键步骤自修程式设计语言?

程式设计是须要熟练的掌握一些基本技能的,因为须要用这些基本技能来组合出来针对特定难题的化解方案。当你还是一张白纸的时候,即使了解了顺序、条件判断或是跳转、循环之类的观念也化解不了具体难题,因为降解到最后还是找不到可用的武器。

程式设计语言是你的第两个武器,要用好那个武器,就须要尽可能多的了解两个程式设计语言的能力。能参考下面的难题探索程式设计语言的能力:

1、那个程式设计语言怎么定义变量、函数或是类?

变量是让同一段流程能够适应各种执行环境的必备品,在流程中顺利地使用变量意味着你有了初步的抽象能力。几乎所有的程式设计语言都支持变量,那么先了解两个程式设计语言如何定义变量、如何给变量赋初值是理所应当的。

比如,你要编写的流程可能有许多个注册用户,而你的流程核心理念逻辑并不须要根据用户的不同而区别对待,那么将注册用户抽象成两个变量来编写你的流程逻辑是合理的选择:

学习编程入门指南

函数(或是过程)是组织可复用代码的一种常用手段。如果有两个功能你会在多个地方使用,那么把那个功能封装到两个函数里是常用的代码复用手段,这样就防止了同样的实现代码在流程的不同地方重复出现,优化了代码,也更容易维护。

如果说函数是对计算机系统原生的顺序过程化观念的一种优化组合方式,那么类则是面向对象的应用软件设计观念的优化组合方式,不妨单纯地把面向对象视为对现实世界中的实体对象以及相互关系的模拟,比如能把所有的用户视为两个类,因为在他们的流程中这些用户有一些共同的特性和方式。

2、那个程式设计语言怎么表达顺序、条件判断、跳转或循环逻辑?

就像前面说到的,这些组合手段用来把流程的各部分拼装在一起,因此是必须掌握的。

3、那个程式设计语言提供更多了哪些基准化解方案?

所谓基准化解方案是能化解某个单一难题的方案,比如:怎么输出一句话、显示两个图片或是访问服务器上的数据库。通常两个程式设计语言都会提供更多一些内置的基准化解方案,以函数或是类的形式提供更多给开发者,这些函数或是类,是他们常说的API —— 应用开发接口。

因此在了解了程式设计语言的此基础语法之后,须要自修的是程式设计语言提供更多的API的使用方式。虽然不须要逐个验证每个API的功能,但是强烈建议你设定一些难题,然后带着这些难题找出能化解这些难题的API进行练习 —— 这些API是你化解具体难题的此基础。

4、那个程式设计语言有哪些优秀的第三方开发包?

大多数的程式设计语言都采用开发包的形式支持第三方提供更多扩展化解方案,以便开发者能根据自己的领域需求进行选择。了解你选择的程式设计语言有哪些常用的开发包是非常重要的一件事,这能防止你重新发明轮子,提高自修效率。

比如,同样是自修Python,如果你的目标是要开发Web应用,那么须要了解的是Flask之类的Web开发包,而如果你的目标是要开发机器自修/深度自修应用,那么须要了解的是numpy、scikit-learn这些开发包了:

学习编程入门指南

7、自修程式设计有甚么方式吗?

毋庸置疑,和自修其他知识或技能一样,自修程式设计也须要掌握正确的方式。

1、多课堂教学基准API

第两个自修方式是多课堂教学,只有路子是远远不够的。过于强调看书看视频而忽略课堂教学的结果是眼高手低。你看到两个难题,路子上觉得行得通,但是却怎么也实现不出来。这是因为程式设计须要精确地考虑并实现每两个细节,如果只是粗线条的认知,是很难达到自修目标的。

那么怎么就可以多课堂教学?如果多模拟一些实战项目吗?

不是这样的。在早期的自修中,不如果参与复杂的实战项目,而是如果尽可能多的了解程式设计语言的能力,比如练习它的此基础API的使用方式、练习它的扩展包的API的使用方式。两个课堂教学任务一定不要包含太多的代码,最合适聚焦于两个API,尽可能地认知它的用法,以及它对应的抽象模型的内在机制。

有的时候两个API用起来很单纯,但是它有对应的抽象模型存在,那个模型并不容易呵呵认知。比如当你自修JavaScript操作网页的时候,就会接触到文档对象模型、Flex盒模型等诸多抽象,在这种情况下,建议你先遵循黑盒法则,是先了解那个模型的作用,掌握API的使用方式,而暂时忽略其内部运行机制,然后将这个不认知的难题暂且记到小本本上,留待日后化解。

所以,他们说的多课堂教学,不是实战项目的课堂教学,而是在很细粒度上的课堂教学,理想的粒度是在单一API上完成两个课堂教学,因为API本身就体现了程式设计语言或开发包的设计者的初衷。

2、多问自己为甚么

第二个自修方式是在自修的过程中,多问自己一些为甚么,有意识地设计一些难题挑战自己,把一时化解不了的难题记录下来,带着难题继续自修。

第一种难题是在自修过程中自发产生的,比如前面提到的,现在自修的某个知识点可能涉及到了另两个之前不了解的知识点,如果那是两个比较难认知的知识点,那么还是先记录下来,不要打断当前的自修路子。

第二种难题是有意识的发问。比如当你练习两个API的使用时,不妨考虑呵呵这几个难题:那个API可能在甚么场景下能用到?为甚么那个API须要这些参数?那个API和之前学的哪些API经常一起用?

能够主动地向自己提出难题是很了不起的进步,这意味着你真正进入了主动思索的状态。

3、设定分级目标,继续课堂教学

在课堂教学API的时候,他们的目标是认知并掌握那个API的使用方式。当初步熟悉了程式设计语言的API之后,就能设定下一级的目标,试著着用已经掌握的知识去实现那个目标。不需要完成两个大流程,对于大多数情况而言,这时候试着编写两个诸如贪吃蛇这样的小游戏是合适的:

学习编程入门指南

当然这种阶段性的目标也是与你的最终自修目标相关的,比如,如果你的自修动力是要开发网页应用,那么那个阶段试着实现一个单纯的图片分享或是博客系统都是能的;而如果你的目标是人工智能,那么那个阶段能试着用神经网络化解呵呵文本分类的难题。总之阶段性的分级目标的设定是为了给自己两个前进的动力,过高或是过低都不好。

4、在战斗中自修战斗

自修程式设计的目标呢自修,而是开发出有价值的流程。因此完全脱产的自修终究会告一段落,你可能会投入到繁忙的程式设计工作中去。不过这并不意味着你不再须要自修,事实上,技术的演变是极其快速甚至剧烈的,因此别忘了:

保持积极自修的心态和敏锐的好奇心,在战斗中自修战斗!

原文链接:程式设计进阶自修手册 — 汇智网

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务