最近一直有这方面的广告,所以尝试用通俗的语言说下我对编程的看法。 文章有点长,大概需要10分钟,核心意思是,如果不确定要不要让孩子学编程,也许它可能可以帮你打消这个疑虑。 很多年后,Word,Excel,PPT算是基本技能,但是要用好,也不容易。 什么意思呢,这是一个级别工具,很多人只是拿它来做工具而已。 从这个朴素的角度来说,会编程和会打字没有太大差别。 会编程给工作带来的提升固然是有的,但是我只是扫地而已,并不需要那么多高科技。 再通俗一点,一件事,满分100分,会编程可以做到90分,不会编程我也能做到89分,这个时候,编程作为一种技能的稀缺性其实是不大的。
其实看了很多广告,都没有特别确切的讲明这个事。可能是刻意模糊的。 编程要解决的问题,我们通俗一点可以理解成是解决一次性问题还是长期性问题。一次性就是为了解决具体问题,解决完就拉到。少儿编程,或者是竞赛类的,都可以认为是一次性问题。 比如说,要解方程,100元1次方程,解决了就好了,这次编程行动就结束了。它也不用太多考虑后续的事了。 或者是做一次工资表,做完就好了。分析一次数据,分析完就好了。解决很多数学问题也是类似的,问题本身不需要很多复用性,也不用去推广,将来给很多人用,不需要考虑这些问题。 这些东西,涉及很多算法,成就感会比较强。可能时间也比较短,代码也比较精炼,也不用太多考虑其他人的感受。实际上,真正的编程工作,很多时候,是长期性的,是1个很大的系统工程,这个时候,成就感就没那么大了,兴趣爱好成了工作,多少有些不一样的感觉了。比如说,我们摄像头识别车牌,识别人脸,10多年前可能是非常困难的,涉及到很多领域的知识,但是现在不用,有很多开源免费的东西可以用。自己不用从头开始做。前面讲了这么多,核心的意思是,用计算机语言编程只是其中很小的一个部分,真正的编码工作,大部分都是工程问题,而不是某个看起来很有闪光点的个人英雄。 再直白一点来说,真要再工作中用编程,到时候学都来得及。编程是工程问题不是很酷的事,一项普通的职业技能而已,和咖啡拉花比,不见得就高级多少了。编程语言后面会有个简单的说明。我们先说编程会越来越简单这个事。这个有很多现实因素,在很早的时候,软硬件是需要兼修的。 什么意思呢,做编程,软件要懂,硬件也要懂,要不然没法弄。那个阶段,编程不是聚焦普通人的具体问题,更多的是——玩具。20年前的手持设备,和今天的手机比,简直是无法直视的。 简单来说,手机要扫描二维码这个事,在手机刚刚出现的时候,算是一个挺难的问题,现在微信的二维码扫描识别都非常迅速。现在能用好Excel,夸张一点说可以顶过去很多人完成一个项目的了。 编程语言有很多种,现在广告比较多的,培训比较多的是Python和C++。 几乎每年都有很多编程语言产生,有些专注于具体领域,有些是通用的。 以前受制于硬件,比如说以前IPhone刚出来的时候,整个空间才8G,单子随随便便一个App就能几百M。 从这个角度来说,学很难的编程,对未来的帮助未必有那么大。 花那么多精力,学一个Hello World,产生的现实意义太小了。
编程只是工具,早期的编程因为受制于硬件,需要花很多精力解决计算机本身的问题。什么是工具呢,比如说要计算圆周率,知道方法,人力算不出来,用计算机来算,会编程有帮助,但是光会编程没用,得理解算圆周率的方法。 比如说下围棋的AlphaGo,我们知道围棋是19X19,一共是361个点。 如果我们直接编程去算,每个点的可能性,那将是非常庞大的计算量,现在也没法解决。所以需要很深的数学背景,把问题简化,把要搜索的结果范围收敛。才有可能在现有的算力背景下,解决问题。 相比来说,对于一个工具的执着,就容易陷入小人驭于物的困境。
随着科技的发展,现在对于很多人来说,打开电脑,是一件非常专业的事。
但是在手机出现之前,办公设备,电脑是最重要的。 但是现在很多人已经不开电脑了,大部分工作在手机完成了。 什么意思呢。
在电脑出现之前,要解决无纸办公的问题。
手机要解决电脑笨拙的问题。 那将来手机一定会长期存在吗?也是未必的事。 编程语言和电脑病毒类似,这个名词可能算是好名词,同时很多误解也有由此产生的,利用信息不对称,确实很带来很多迷惑性。 其实想用通俗的语言描述一个专业的事,不是一件容易的事。简单来说,编程语言就是人和计算机对话的语言(不准确也不严谨,但是好理解)。通过编程语言告诉计算机做什么。曾经有数学家在解决一些问题的时,发现可以把问题分解成不同的步骤。 比如说,1+2+3+……+100,我们知道是(1+100)*50/2。
顺序 从上到下依次做一件事 选择 判断,假如满足1种条件,做什么
循环 就是类似上面的做法 前面讲了编程的思维。计算机就可以理解成是一套精密的设备。 真正实现这个功能是很复杂的,电脑的各种硬件设备调度之后才可以。这其中的复杂程度远超我们想象,但是大部分编程的不需要了解这个。因为有人把这个工作包装成一个功能的单元。由操作系统调度。也就是平常我们说的Windows和苹果的IOS等,来和硬件打交道。但是这个工作还是太复杂了,所以他们把各种工作做了分类。这个时候编程语言就出来了,加入设备有1000种功能。 这1000种功能怎么归类,怎么使用起来方便,就是各个语言不同的设计思路。 从这个意义上说,编程语言其实是给人看的,并不是给计算机看的。从这个意义上来说,人是很Low的。只能用这样的大白话来沟通。 各种编程语言------>告诉操作系统要干啥------>操作系统调度硬件。 我要做法,但是我不想切菜洗菜,那就有人帮我们把菜切好洗好。 很多年前,在手持设备上开发,需要考虑崩溃,内存不足等等各种状况。 为什么有Java这个语言,在一些人看来,主要是解决工程化的问题。 什么意思呢,就是我学会做饭,首先要学会修煤气灶。但是其实我只是饿了,吃泡面也是可以的。Java把很多编程复杂的东西,都包起来,不让我们看到了。 把编程的门槛降低以后,意味着更多的人可以加入进来,加快整个行业的发展速度。 现在硬件的成本很低,更重要的是,问题规模都不在单机能解决的。 有些孩子学了C++,学了Python会觉得有特别大的成就感。其实对于现在几千几万种编程语言来说,整体都是大同小异的。要计算1加到100,每个语言解决的时候都是类似的。 这种差异有些是运行差异,执行销量差异,有些是工程差异。什么意思呢,人比机器贵,所以如果要花很多人力,结果节省了一点时间。如果真把Excel用好,大部分的Python都是废的。 现在很多Python的培训广告,似乎比Excel强很多。但是,现实可能等把运行环境,开发环境弄利索,差不多也得放弃了。
|