西西河

主题:【原创】三年级也可以学编程 -- 月色溶溶

共:💬209 🌺336 新:
全看分页树展 · 主题 跟帖
家园 编程应该是目标驱动型的任务

我其实想说的是,挑选初学者所使用的语言,应当比较的是语言的使用环境和编程者的目的。我不赞成一个成年之后才学习计算机编程的人从汇编或者C语言学起,这非常不容易培养兴趣,要知道成年人比小孩子的好奇心差得远了,精力也不能比较,如果没有炫丽的成果或者有效的帮助,是很难在编程的道路上坚持下来的。当然前提是月色mm承认自己是成年人,否则当我没说^-^

编程实际上只是逻辑的表达,只要有正确逻辑的人都能学习编程,因此几岁的孩子可以学习编程,实际上可以等价于几岁的孩子具有正确表达自己思维逻辑的能力。我在这里想要吐槽国内计算机教育普及的工作,这么多年了还是有不少人在进入大学之后才接触编程,而且上手就是C/C++,这其实完全不利于计算机的普及,因为很多学习者并不知道自己学习编程的目的是什么,或者知道自己的目的,但是学了之后却很茫然,因为C/C++要实现自己的编程目的似乎非常困难,如果不是特别有狠劲,最后往往学个皮毛就放弃了。说起来似乎也学过计算机编程了,但是要用变成解决点实际工作生活的问题却不可能。因此我建议月色mm先考虑一个问题,你想学编程最有可能用来完成什么工作?最希望用来完成什么工作?或者想用来秀什么?

我把我所了解的编程语言主要作用和特点罗列一下,希望能有助于理解为什么说编程实际上是一种目的驱动型的任务。这里所说的当然都是高级语言,低级语言几乎是特指汇编语言,几乎肯定不是初学者能够使用的工具。但是事情也不绝对,通过全套复杂完备的伪指令集,完全可以把汇编语言变得和高级语言一样易读和易写,这可以作为一个提示,高级语言实际上就是某种特定的伪指令集。

首先就是你现在所学习的C语言。C语言是和unix伴生的产物,其最初作用就是用来创建操作系统,而操作系统最主要的工作就两条,一是调度任务,二是操纵硬件。因此C语言不论怎么发展,都保留了直接操作指针这一很“低级”的特征,也因此被很多人戏称为“中级语言”谓其不上不下。C语言基础功能很低级,也可以很方便地嵌入汇编语言,这与其用来写操作系统的目的非常适应,如果要用C语言构筑比较复杂的功能,比如图形显示或者人机交互,所需要的代码量是非常大的,你需要自己去初始化这些显示设备和输入设备,这些设备的驱动倒基本都是C所完成的。大多数初学者实际上“学会”C语言后,什么也干不了,写个简单的计算器程序都很费劲,这也是我不赞成初学者学C语言的原因。C语言适合和硬件打交道的工作,比如微机电控制,比如驱动设备,比如SoC,这些方面C当仁不让,是首选。

如果想要计算复杂的数据,矩阵变换,信号处理,那么其实应该选用宝刀不老的Fortran。Fortran是专为工程计算而生的语言,它不涉及任何硬件操作,强项只有一个,工作也只有一个,就是计算,计算浮点数、矩阵运算、并行计算,统统在行,而且效率极高。早期军用信号处理器的编程都选用Fortran,或者是Fortran的进化版Ada(我的个人看法)。近年来因为Fortran和Ada程序员的因素,以及通用性等问题,信号处理有改用C语言的趋势,但是其他科学计算仍然是Fortran一统天下。Fortran语言格式非常规范,对数据的溢出检查极其苛刻,爱好数学的初学者上手Fortran其实没有难度,因为Fortran的逻辑基本就是数学逻辑的再现,而且因为语法严格,也不容易出错不需要焦头烂额的调试。最大的缺点就是功能比较单一,除了计算外想让它干点别的可费老鼻子劲了。

各种Shell语言,python、perl(tcl之类的面比较窄),这是非常好用的东西,它们出生的意义就是帮助人们完成各种繁琐的工作,如文本处理,复杂过程的程序调用等等。这两种语言是开源软件,因此所有使用这两种语言开发的工具都自动成为你可以借用的工具包和学习范例,这是非常诱人的事情。比如处理文件,操作磁盘,图形化界面,只要你看到别人写过,你就可以借用。perl的工具包更多一些,python则是近两年势头比较好,这两种语言所写的程序都可以转化为可执行文件,不但很多个人在用,不少公司也用来作为整个工具链的整合。python语法相对严谨,perl更天马行空一点,两者都以正则表达式作为切入点,使用shell语言的过程,实际上就是使用正则表达式表述你想要描述的对象的过程,只要对象描述清楚了,过程其实就是你想做的事情步骤。比如你想在某个磁盘找到某个类型的文件,然后把这个文件里面某些特定的内容复制出来,写到另外一个地方去,然后你把这个步骤一行一行写出来就是了。某些人盼望过所谓的中文编程,其实shell语言是最适合中文化的东西。

各种数据库相关的语言,统称为SQL,早年有dbase和foxbase等,现在的oracle SQL等。这类语言其实不是很规范,因为基本上都是各家数据库公司自己构建的指令集,脚本类型语言,所实现的功能就是查找、访问、插入、删除,扩展之后可以有排序、复选以及各种网络相关的功能。但不可否认这是几乎所有公司都有用的技能,其实也是很适合初学者使用的语言,因为查找数据和归类数据用处很广,而SQL语法则极简单,界面通常是直接用现成的控件搭出来的。

图形图像制作、网页开发及3D建模语言,这类语言也是脚本居多,图形处理的本质是数据处理,它们的内核通常是另一种高级语言,提供给用户的只是脚本和界面,这里就包括matlab,虽然matlab并不以图形处理为主业,只不过是各种仿真和数据处理最终都需要图形输出,因而其图形功能不弱。这种语言需要一点艺术天赋啦,真正做得好的都不是程序员,而是绘画见长的人,但是这个最有用,逢年过节做个电子贺卡,自己搞个小型动画什么的,成就感极强,很适合有绘画天赋的小朋友。有些网友提到的LOGO语言,也是一种初学者非常容易上手的绘图语言,它就是模仿绘图的动作而制定指令的,比如落笔对应光标定位,前进后退左转右转都有对应指令,转向的角度,划线步长,线的类型,然后加上简单的控制语句如重复等等就构成了LOGO语言,只要会画画,知道线的长短和角度,就可以用LOGO语言绘图。网页制作比较特殊,perl和python、java、VBS、php等等都可以实现网络编程,但复杂深入的网络编程其实融合了图形图像,服务器访问,数据库访问,html编程和网络安全等多方面的内容。

想来想去,强大的matlab、scilab还是应该单列的。这两者其实严格意义上不叫语言,它们实际上是一个非常强大的平台,瑞士军刀冠军型软件,并且不断有人添砖加瓦,使其更加强大,其中matlab是要版权的,数千刀,个人几乎不会购买,但是某些公司是不得不购买的,scilab是免费的,相对而言应用面小一些,因为没有个强大的公司团队提供支持。这两者所能实现的功能涉及日常生活方方面面,画图,统计数据,仿真计算,机电控制,这是真正既可以炒股又可以控制机器人煮咖啡的软件。它们的底层实际上还是C、C++和Fortran。

上述多种脚本类型的语言,绝大部分编译器是用C语言编写的,matlab早期是Fortran,现在不清楚,怀疑也是C的。这里也显示出C语言独特之处,可以说任何语言都可以改写成C语言。不过初学者不要因为这个“万能”而放不下C,“万能”的工具只有在行家手上才有用,在初学者手上绝不如单纯的剪刀和锤子方便。

最后说说BASIC,相信70后如果接触计算机较早一定会用过BASIC,它跟着AppleII进入中国,风光一时,几乎是计算机入门的代名词。后来发展为更高效的BASICA、TrueBAISC、VisioBAISC等等,VBS就是VisioBasic的最年轻后代,个人觉得basic比较可惜,有这么广大的用户群,却被束之高阁多年,失去了成为最广泛使用的脚本语言的机会。VBS也是有用的,它和微软的office套件是绑定的。如果你非常需要处理各种office表格数据,VBS提供了丰富的接口,可以直接操作所有office文件类型,这一点上比其他语言有极大优势,其他功能都可以被别的工具取代。

通宝推:泉源,刹那芳华,
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河