前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你肯定学了假的编程

你肯定学了假的编程

原创
作者头像
荣荣乐园
修改2018-12-17 10:41:07
6000
修改2018-12-17 10:41:07
举报
文章被收录于专栏:少儿编程少儿编程

很多人开始学编程的时候都会有一个疑惑,我到底该学什么编程语言?参考的依据要么来自“砖家”、要么是来自热门语言排行榜、要么是来自薪资排行榜等。殊途同归,所有的人都会给出他们的依据和这样做的利弊。如果说一开始这样还可以理解,但是我们发现很多软件工程师、或者计算机专业毕业的人、甚至是从事软件研发工作的人每隔一段时间都会来这么一次内心挣扎的过程(那些靠一门语言就像混到退休的人除外)。

随着人工智能越来越火,很多人开始意识到编程的重要性,也想要找到好的入门秘籍。针对这一问题,我给大家普及下。编程语言要怎么选。

其实很多学计算机和编程的人其实不懂编程,其实编程没有你们想象的这么深奥,编程的基础其实是计算模型(这个我们以后会将,如图灵机、递归论、Lambda演算等)当然还有细胞自动机。。。 如果你不懂计算模型其实你是学不懂编程的。因为编程依赖计算模型。而且编程和编程过程又是两个截然不同的东西。编程体现的是一个概念而编程的过程体现的是一个动态的寻找解的过程。

编程的过程其实也是思维活动的基本过程,所以编程活动本身要训练的其实是人的思维过程。它会间接影响一个人的思维模式。所以学编程最终的目的一个是学会编程的技能(这个是大多数人学编程的目的)但是最重要的其实是学会用一种新的思维方式(分析问题、解决问题的能力)。人类改造自然的基本过程也是人类文明发展的必然结果,而人类改造自然的基本过程是建立在人类这个种族利用已有的知识结构对现实世界进行建模并且用人脑特有的计算模型去推演最终执行反馈到现实世界从而改造自然创造出人类璀璨的文明形态。这个和编程的过程是不谋而合。

我通过分享一个例子来给大家解释下前面这些话的意思

冒泡排序(Bubble Sort):作为计算机算法里面最简单的排序算法(该算法的时间复杂度是O(n²)属于稳定排序算法)

这个算法的描述:它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

原理如下:

1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。

2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

3、针对所有的元素重复以上的步骤,除了最后一个。

4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

这个算法涉及到两个基本过程(遍历其实也可以叫递归、条件)

我们先用人类的语言来编程

如何把一个队伍按照从低到高排列(你要按照高到低也是可以的)?

1、比较相邻的两个人之间的身高,如果后面一个比较矮就让他们交换位置。

2、对整个队伍里面的每个相邻的人都做同样的操作。从开始第一对到最后一对,这个步骤执行完毕,队伍的最后一个肯定是最高的(但是整个队伍现在还没有按照从低到高的顺序排列,想一想为什么?)

3、对队伍里面的每一个人都做上面1、2步所做的操作,除了最后一个。

4、持续对越来越少的队伍重复上面的步骤,直到队伍里面所有的人都比较过了。

然后你就得到了一个从低到高排列的队伍,时间最短而且不需要一个人站出来指挥排队的过程。

其实这个问题你不用学任何算法也不用懂任何排序你都可以做到,区别就是如果你学过编程那你会找到最快的方式做到这一点。

接下来我们展示一下其它语言是如何做到的

Python3

冒泡排序

C

冒泡排序

汇编

冒泡排序

Scratch(少儿编程图形化编程)

冒泡排序

这几种编程语言的实现版本都用到了一种数据抽象:列表(一队人)还有两个基本过程:条件、循环(遍历)无论你使用哪种语言来实现,最终你都需要借助这三个概念。也就是说你要学会的其实是学会对问题建模,把执行这个问题的步骤编写成算法,算法其实就是你思考的过程。学会编程可以帮助你用最低的成本去验证结果,仅此而已。但是最终的目的还是要把这种思考问题、解决问题的方式变成自己的思维活动的基本过程,而不是漫无目的、误打误撞。虽然不会编程也可以解决这个问题,但是编程要教会你的就是用最高效的方式解决。如果你每一件事情都用最高效的方式解决,那你和别人的差距就会产生质的变化。

当然还有其它的语言实现,编程语言千千万万。但是万变不离其宗。

举这个例子其实就是想告诉大家,你选择用什么编程语言其实本质是一样的,不同语言背后的语法、语义不同。但是他们所教会你的思考问题的方式是通用的。所以学编程的最高境界其实是通过编程学会了解决一类问题的方式当然是用最高效的方式。也就是编程教会你用心的方式去思考问题、解决问题。

讲到这些对一些还要纠结学什么编程语言的人相信应该有一些启发。当然作为编程语言的选择还要考量的还有团队的因素、团队运作成本、培训成本、以及所涉及的业务领域和业务模型、对已有库的依赖等很多因素,这些已经不是编程的内容了这些已经属于软件工程的的内容了(那些技术总监、系统架构师、项目经理、产品经理、老板所要考虑的内容了)。

但是对于我们少儿编程来说有什么借鉴意义呢。

我个人认为可以从以下几点来考虑

首先少儿编程是一个新的领域,毕竟一开始所有人都觉得编程是大人的权利,或者准确的说应该是那些软件公司上班的工程师的事情,但是随着人工智能的发展很多人意识到编程的重要性,而且希望孩子也从小就接触到编程。所以才催生了少儿编程。

但是因为少儿编程不需要像培养一个软件工程师一样有这么多标准要遵循也不够系统化,至少现在市面上的少儿编程产品是这种情形,所以就出现了很多机器人,其实机器人也会涉及到一些编程的内容,但是在我看来更像是高级玩具。它是编程的局部应用并不能系统的告诉你编程是怎么一回事所以很多学了机器人的人以为就是少儿编程到最后其实学会的只是说明书的内容而已,很多人就会问那这样为什么还是有那么多人买单呢。这就涉及到一个很微妙的点了。因为很多人其实想要的就是接触下高科技的东西而已并不是真正想学少儿编程,对于这部分人群来说那些机器人是很好的一个产品,当然仅仅是”高级玩具“因为他们足够吸引小孩子。

当然除了机器人剩下的就是那些主打游戏编程之类的编程产品,其实道理一样。通过很好玩的方式去吸引小孩子,这个出发点是非常棒的,但是有一个问题。缺乏后续,而且是为了编程而教编程。并不是通过编程这个过程教会孩子一种新的思维方式。

所以现在市面上的少儿编程产品其实仍然处于早期阶段,同质化严重、缺乏系统性(课程体系不完善、有些甚至没有课程体系,或者直接把成人工程师的那一套照抄过来)、缺乏实践意义、师资不完善、缺乏行业标准和考核规范。到最后都变成了卖高级玩具(带着编程样子的说明书)、玩加盟模式、赚快钱。当然话说回来,也不乏有些优秀的项目和产品。所以就需要家长们擦亮你们的双眼。

其实编程不神秘,学习编程是因为我们进入了一个新的时代,物联网、人工智能高速发展的阶段。当然也对我们每个人的能力提出了新的要求,学习编程说训练的编程思维其实就是其中最关键也是最基础的一种新时代下的技能。所以不应该是浅尝辄止、也不是玩玩就好、更不是最后演变成各种比赛、竞赛。而是要系统性学习编程,并且学习到编程的真正精髓也就是编程思维-新的思维方式。

备注:对少儿编程感兴趣的可以入群交流

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档