主题:【原创】三年级也可以学编程 -- 月色溶溶
歪一下楼。个人觉得,C的指针有很完美的理论基础。计算机专业的河友大概都记的理论计算机这门课吧?图灵机,一个指针不断的读、写无限长纸袋上的小方格,那个就是指针的理论基础。还有编译原理中的若干理论计算机模型的实现,没有指针绝对的不方便。还有数据库技术中对于数据块的迅速定位。
VBA.
特别是VBA+EXCEL,实用、直观。二者还能相互促进,不断提高,实现办公自动化,足以解决工作中的大部分问题,是办公室小白领手中的大杀器。
前提是你得有一定的EXCEL基础,对面向对象的语言有一个直观的认识。
下河看到这篇文章,读了下月色mm的程序,更痛了
我其实想说的是,挑选初学者所使用的语言,应当比较的是语言的使用环境和编程者的目的。我不赞成一个成年之后才学习计算机编程的人从汇编或者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文件类型,这一点上比其他语言有极大优势,其他功能都可以被别的工具取代。
我想大概是想电脑厉害点,知其然又知其所以然;还有就是教的小孩子对电脑编程感兴趣的话,我不会一点也不知道,最好能指点入门.
而且对以后在大家指导下学习编程充满信心!
工科男,只在大学学了C,工作也没做技术,没地方用。
反倒是工作中有越来越强烈的数据处理偷懒需要。
实际的需要产生了驱动力 。
读了读excel的帮助文档,网上看了些文章,觉得VBA很不错完全可以实现我想完成的目标。算法很快就想好(其实真正日常应用的东西没什么太高深的算法)基本表达式不会就查文档,用到什么现看现套。
不管表达是否规范,不管语法是否优美,只要实现我要的功能就够了。
楼上有几位说的很有道理,C很经典很基础,但学的时间短或者浅的话,难以跟日常的东西发生直接的联系。
现在回想起来,当时学C带给我最多的是了解计算机解决问题的方法,使我有了一个定性的认识,然后可以在合适的时候找到合适的工具参考帮助文档去解决问题。至于表达式,早都忘光了。我甚至记不清for后面括号里是用;隔开还是用,隔开。
那时西西河被墙,大家到处找梯子,你也给过我现成的。
后来我又找到一个,有人用python写的fetch server,运行在google app engine上的,我还在河里写了个懒人应用教学帖,骗了不少花。
还是要看小孩子对什么有兴趣,如果喜欢画画什么的,学习制作网页或者3D建模是很好玩的东西,我见过许多孩子乐此不疲,而且成果斐然。
如果喜欢动手做点小模型,玩个机器人什么的,SciLab是很好的入门平台,也有相应的竞赛,自娱自乐很不错,对数学学习也有帮助,起码将来学解析几何之类的那是非常直观啊。
我真的不建议小孩子搞单纯的程序设计,这不属于孩子,个别有天赋的,让他们自己折腾去,也不需要大人帮助,我们这一代玩电脑长辈都是门外汉,也不妨碍成才。数学好的,我还没见过搞不定程序设计的。知其所以然没有别的路可走了,必然要从组成原理开始,也必然涉及汇编,对于小学生是否真的必要?钢琴小提琴演奏得好的孩子不少,搞得清十二平均律的恐怕不会很多吧。
我的看法是小孩子的技巧(听力动作等)在重复训练后有很好的成果,而且属于过了这村就没这店的,对原理性的理解不是小孩子的强项,儿童教育不要在这种原理性问题上消耗过多时间。
至于你说的电脑厉害,可能多半还属于windows操作特别熟练的,这个意义更是不大甚至不属于电脑原理性的问题。