点击关注,了解更多精彩内容!!努力陪伴孩子成长的中年胖子。

一直有这方面的广告,所以尝试用通俗的语言说下我对编程的看法。
昨天匆忙写了一篇,有兴趣的可以看下。
少儿编程和打字一样的必备技能吗?你想让孩子咋样——养娃记0194
文章有点长,大概需要10分钟,核心意思是,如果不确定要不要让孩子学编程,也许它可能可以帮你打消这个疑虑。
能力所限,您且看且吐槽,欢迎留言。

01 简单的历史回顾,编程会是稀缺性技能吗?

很多年前,如果会打字,就算是会计算机了。

但是当时的很多人,毕业的时候电脑也没有摸过。

很多年后,Word,Excel,PPT算是基本技能,但是要用好,也不容易。

但是会了也不会特别加分。

什么意思呢,这是一个级别工具,很多人只是拿它来做工具而已。

现在很多人电脑打字不快,但是手机很溜,也可以。

但是当年打字培训班的广告也是制造焦虑的哦。

那么现在编程比当年的打字似乎高端了很多。

但是在人群的知识水准上,他们其实没有太大差异。

从这个朴素的角度来说,会编程和会打字没有太大差别。

会编程给工作带来的提升固然是有的,但是我只是扫地而已,并不需要那么多高科技。

再通俗一点,一件事,满分100分,会编程可以做到90分,不会编程我也能做到89分,这个时候,编程作为一种技能并没有稀缺性。

打开网易新闻 查看更多图片

02 编程要解决的问题范畴,弄个屠龙刀?

其实看了很多广告,都没有特别确切地讲明这个事。可能是刻意模糊的。

编程要解决的问题,我们通俗一点可以理解成是解决一次性问题还是长期性问题。一次性就是为了解决具体问题,解决完就拉到。

少儿编程,或者是竞赛类的,都可以认为是一次性问题。

比如说,要解方程,100元1次方程,解决了就好了,这次编程行动就结束了。它也不用太多考虑后续的事了。

或者是做一次工资表,做完就好了。分析一次数据,分析完就好了。

解决很多数学问题也是类似的,问题本身不需要很多复用性,也不用去推广,将来给很多人用,不需要考虑这些问题。

这些东西,涉及很多算法,成就感会比较强。可能时间也比较短,代码也比较精炼,也不用太多考虑其他人的感受。

实际上,真正的编程工作,很多时候,是长期性的,是1个很大的系统工程,这个时候,成就感就没那么大了,兴趣爱好成了工作,多少有些不一样的感觉了。

这么多年下来,编程的很多积累都完成了。

比如说,我们用摄像头识别车牌,识别人脸,10多年前可能是非常困难的,涉及到很多领域的知识,但是现在不用,有很多开源免费的东西可以用。自己不用从头开始做。

前面讲了这么多,核心的意思是,用计算机语言编程只是其中很小的一个部分,真正的编码工作,大部分都是工程问题,而不是某个看起来很有闪光点的个人英雄。

再直白一点来说,真要在工作中用编程,到时候学都来得及。

编程是工程问题不是很酷的事,一项普通的职业技能而已,和咖啡拉花比,不见得就高级多少了

03 编程会越来越简单,和使用word也差不多

编程语言后面会有个简单的说明。我们先说编程会越来越简单这件事。

这个有很多现实因素,在很早的时候,软硬件是需要兼修的。

什么意思呢,做编程,软件要懂,硬件也要懂,要不然没法弄。

那个阶段,编程不是聚焦普通人的具体问题,更多的是——玩具。

我让电脑发出声音了,我牛!

但是这些事随着商业化的发展,会越来越简单。

这些发展的迭代速度是非常快的。

20年前的手持设备,和今天的手机比,简直是无法直视的。

今天手机的处理性能,比以前的电脑要强很多。

简单来说,手机要扫描二维码这件事,在手机刚刚出现的时候,算是一个挺难的问题,现在微信的二维码扫描识别都非常迅速。

但是它们会把这些能力开放出来给人免费使用。

如果自己个人要从底层开始写,非常不现实。

现在能用好Excel,夸张一点说可以顶过去很多人完成一个项目的了。

编程语言有很多种,现在广告比较多的,培训比较多的是Python和C++。

但是这2个语言一直也是在争议中的。

几乎每年都有很多编程语言产生,有些专注于具体领域,有些是通用的。

总体来说,是越来越简单了。

以前受制于硬件,比如说以前IPhone刚出来的时候,整个空间才8G,单子随随便便一个App就能几百M。

从这个角度来说,学很难的编程,对未来的帮助未必有那么大

花那么多精力,学一个Hello World,产生的现实意义太小了。

打开网易新闻 查看更多图片

04 编程只是工具,工具属性不需要过分放大

编程只是工具,早期的编程因为受制于硬件,需要花很多精力解决计算机本身的问题。

但是随着技术的进步,现在越来越聚焦实际问题了。

意思是说,很多计算机本身的限制慢慢被解决了。

什么是工具呢,比如说要计算圆周率,知道方法,人力算不出来,用计算机来算,会编程有帮助,但是光会编程没用,得理解算圆周率的方法。

比如说下围棋的AlphaGo,我们知道围棋是19X19,一共是361个点。

如果我们直接编程去算,每个点的可能性,那将是非常庞大的计算量,现在也没法解决。所以需要很深的数学背景,把问题简化,把要搜索的结果范围收敛。才有可能在现有的算力背景下,解决问题。

这个时候,编程重要吗?也重要,但是不是最重要的。

相比来说,对于一个工具的执着,就容易陷入小人驭于物的困境

计算机语言给人的刻板印象也就在这里

编程要解决的不是编程问题,而是工具使用问题

05 手机能解决大部分电脑问题,将来还会有其他设备

随着科技的发展,现在对于很多人来说,打开电脑,是一件非常专业的事。

但是在手机出现之前,办公设备中,电脑是最重要的。

但是现在很多人已经不开电脑了,大部分工作在手机完成了。

什么意思呢。

在电脑出现之前,要解决无纸办公的问题。

手机要解决电脑笨拙的问题。

那将来手机一定会长期存在吗?也是未必的事。

06 编程语言是什么

编程语言和电脑病毒类似,这个名词可能算是好名词,同时很多误解也有由此产生的,利用信息不对称,确实会带来很多迷惑性。

其实想用通俗的语言描述一个专业的事,不是一件容易的事。

有误解是必然的。

简单来说,编程语言就是人和计算机对话的语言(不准确也不严谨,但是好理解)。通过编程语言告诉计算机做什么。

曾经有数学家在解决一些问题的时候,发现可以把问题分解成不同的步骤。

这些步骤看起来是很笨拙的,但是确实很能解决问题。

比如说,1+2+3+……+100,我们知道是(1+100)*50/2。

编程思维是,从1开始,循环到n。

每一步都是前面的和 加上 n。

第一次:1

第二次:1+2=3

第三次:3+3

类似这样,每一次都做加法,循环100次。

整体来说,解决这些,大致可以分成3种应对措施。

  • 顺序
  • 从上到下依次做一件事
  • 选择
  • 判断,假如满足1种条件,做什么
  • 循环
  • 就是类似上面的做法

这就是编程的思想了。把问题拆分开来解决。

这和编程语言有什么关系呢。

07 编程语言怎么和计算机说话

前面讲了编程的思维。计算机就可以理解成是一套精密的设备。

它有一些功能,必然说在屏幕上显示一个小点。

真正实现这个功能是很复杂的,电脑的各种硬件设备调度之后才可以。

这其中的复杂程度远超我们想象,但是大部分编程的不需要了解这个。

因为有人把这个工作包装成一个功能的单元。由操作系统调度。

也就是平常我们说的Windows和苹果的IOS等,来和硬件打交道。

但是这个工作还是太复杂了,所以他们把各种工作做了分类。

有让屏幕亮一下的,有让设备发出声音的等等。

这个时候编程语言就出来了,加入设备有1000种功能。

这1000种功能怎么归类,怎么使用起来方便,就是各个语言不同的设计思路。

从这个意义上说,编程语言其实是给人看的,并不是给计算机看的

从这个意义上来说,人是很Low的。只能用这样的大白话来沟通。

各种编程语言------>告诉操作系统要干啥------>操作系统调度硬件。

各种语言,就是对计算机的不同理解。

08 编程需要了解很多现成的东西,编程只是其中很基础的一个手段

前面说的是编程语言的区别。

实际解决问题的时候,不太可能直接从头开始编。

这个其实很好理解。

我要做法,但是我不想切菜洗菜,那就有人帮我们把菜切好洗好。

有人觉得这样不干净,有人纯粹觉得这样省力。

编程要解决问题,做饭要解决吃饱的问题。

去菜市场买菜,买回来洗好切好,炒好,吃!

外卖送切好的菜过来,炒好,吃!

编程需要了解哪里买的菜比较好。比较适合自己!

但是现在培训的,都是从种菜开始的。

有意义吗?当然也有,但是并不是必要的。

09 编程会怎么变化,只会越来越傻瓜

很多年前,在手持设备上开发,需要考虑崩溃,内存不足等等各种状况。

开发的语言也相对底层,C为主,也有用汇编的。

后来慢慢地就越来越简单了。

为什么有Java这个语言,在一些人看来,主要是解决工程化的问题。

相比来说,C,C++这些语言,门槛是比较高的。

什么意思呢,就是我要学会做饭,首先要学会修煤气灶。但是其实我只是饿了,吃泡面也是可以的。

Java把很多编程复杂的东西,都包起来,不让我们看到了。

把编程的门槛降低以后,意味着更多的人可以加入进来,加快整个行业的发展速度。

其实这些单机的语言讨论已经意义不大了。

现在硬件的成本很低,更重要的是,问题规模都不在单机能解决的。

每年淘汰的语言,新产生的语言都很多。

不见得学了Python,学了C++就独步天下了。

如果兴趣没那么大,其实真没啥必要。

打开网易新闻 查看更多图片

10 语言没那么重要,思维才是根本

有些孩子学了C++,学了Python会觉得有特别大的成就感。

其实对于现在几千几万种编程语言来说,整体都是大同小异的。

无非就是不同的语法糖而已。

要计算1加到100,每个语言解决的时候都是类似的。

区别的是解决一些具体问题的时候,有些差异。

这种差异有些是运行差异,执行销量差异,有些是工程差异。

什么意思呢,人比机器贵,所以如果要花很多人力,结果节省了一点时间。

未必是一笔合算的买卖。

编程语言没那么重要,不要为了编程语言的语法迷惑。

没有什么高低贵贱之分。

如果真把Excel用好,大部分的Python都是废的。

现在很多Python的培训广告,似乎比Excel强很多。

但是,现实可能等把运行环境,开发环境弄利索,差不多也得放弃了。

关键得快速解决问题。

不知不觉,已经进入中学阶段,叛逆的萌芽已经越发明显,许多看起来无法接受的缺点,拖沓,拖拉,信心不足,情绪管理不善,丢三落四,凡此种种,一应俱全。我似乎慢慢把一手好牌给打坏了。不管如何,还是希望尝试着记录这段经历,聊以慰藉,抚慰余生。