西西河

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

共:💬209 🌺336 新:
分页树展主题 · 全看
/ 14
下页 末页
  • 家园 【原创】三年级也可以学编程

    最近我在学编程。

    我会去学编电脑程序,是因为我这儿一个小学五年级的孩子想学电脑编程,我去咨询“专家”,专家说,当然可以了,其实小学三年级就可以开始学编程序了!我一听,嗯。。。我虽然数学不好,但是怎么也不会比不上小学三年级孩子的数学啊,就算是我们来比奥数!那我也要学编程。。。要是真学会了,那就牛大发了。

    其实,在我的概念里,程序属于天书,编程更是我一点也不了解,而且是带点畏难情绪的一点也不了解,因此需要仰望的领域这一。但是跟小学三年级的孩子比还是让我有了点信心。

    我问专家:我也要学,我先去买本书?

    专家的教学方法很独特,他说:买什么书?不需要,你不要用文科生的办法来学编程,就跟大学里那些女生似的,考试一百分一百分,却解决不了什么实际问题。来,我来教你怎么开始!

    他说我可以学C语言,那是非常有用的一种编程语言。先让我下载了一个程序,后来我知道那叫“编译器”,编程序的工作就在那里面进行,然后,就从printf("hello kitty!");开始,要我从实际操作了,讲了几个程序,他就让我从编译器自带的一个教学资料自己学习,不懂可以问他。

    可是这么学我有点不习惯,有点茫然,觉得摸不着头绪,我学东西喜欢先从整体去把握。于是我就去网上找资料,看了一些人家的学习心得,又翻了一些教程的开头部分。对c语言有了一个大概的了解,专家还给我讲了一些电脑工作的基本原理,于是,我有了自己的对编程序的一些领悟:

    对编电脑程序来说最重要的是三部分,一个是cpu,一个是内存,一个就是你编的程序。你编的程序是存在内存里的,那可不是虚拟的“存”,是真的能数得出来这个数字藏在内存第几格里的那种实际的“存”。然后编程序的时候,你一般先要对你需要解决的问题设计好解决的办法,里面需要有几个数字或者符号的位置,你就先定义它们,其实就是在内存里跟种树似的挖好几个坑,表示我要在坑里种树了。然后你用那些程序语句告诉cpu对几个坑怎么去操作。一点你编好的程序,cpu就开动了,按程序告诉它的步骤对那几个坑里的数据搬来变去,等搬完变完了,正确结果就出来了。

    其实,电脑最强大的地方不是它能解决多复杂的问题,而是在于它速度快不怕累还不会对重复劳动感到厌烦疲倦,而我们实际生产生活中需要解决的很多问题,恰恰是这种大量的重复的或者因为简单问题叠加而显得复杂的问题。于是,我们编电脑程序,其实就是去找到把复杂问题分解分步,化为特别简单的小问题,让电脑不厌其烦地去解决,电脑速度快,你一按程序,它就出来结果了,那就显得很强大了。

    这就是到现在为止我对编程序的“领悟”,当然,我开始学编程其实才两个星期。。。以后一定还会继续有很多“领悟”的,也还会碰到一些可能连专家也解决不了或者我自己听不懂学不会的问题,照平时看来,西西河有很多IT男,那真是程序员的宝库啊。。。所以我要把问题先放在这儿,到时候可能会很有用。。。

    下面的对话,可以看出我的“雄心壮志”:

    我:我真能学会编程序吗?

    专家:当然能。

    我:我能学很厉害吗?真去做程序员也能的那种厉害。

    专家:不能。

    我:为什么?!

    专家沉默。

    下面是一个例子:能看出我想干嘛吗?

    #include "stdio.h"

    void main()

    {int a,b,c; /*挖好三个坑*/

    printf("please input a and b:"); /*提示在坑a和b里种上树*/

    scanf("%d%d",&a,&b);   /*在a和b里种上树,就是赋值,有数据了*/

    c=a+b; /*主要计算步骤,也就是在c里种上树*/

    printf("c=%d",c);     /*把c坑里的数据显示出来,就是答案*/

    }

    我自己看着挺对的,却运行不出来,哪儿错了呢?谁能告诉我?

    通宝推:柯镇恶,
    • 家园 是不是这个原因

      在输入a和b的时候你前面的格式是%d%d,中间是没有逗号的,后面的&a,&b却有逗号,前后不一致。不知道是不是这个原因。另外,真想学好的话其实一开始养成好习惯最好,比如c = a + b,中间有空格是标准写法,开始就有这样的坏习惯以后就很难改了。

    • 家园 我在Linux上编译运行了一下可以啊

      我觉得可能是scanf的问题,你换成scanf("%d,%d",&a,&b)试试,运行时候输入"1,2回车"。C语言里面接受用户输入不太靠谱,我觉得还是程序中写死或者传参数进去比较方便。比如

      main(int argc, char *argv[]){int a = atoi(argv[1]); int b = atoi(argv[2]);...}编译好后运行 “a.out 1 2”,这时a就是1,b就是2

    • 家园 我就是小学三年级开始学的编程

      当时邓爷爷南巡的时候,说了句计算机要从娃娃抓起,我有幸成为那第一批的娃娃。当时ABCD还不熟悉,全靠硬背把basic语言常用命令背下来。影响中最深的是三年级接触到一个词叫“循环”,一直以为这个是外来词,直到初中学习语文词性后才明白。5年级的时候开始上奥数班,第一课学习幻方,回家后用basic语言编程,一个星期下来总算实现了用计算机来计算幻方,那个兴奋劲现在都忘不了。

      上大学选专业的时候,就是想学计算机算法,以后当个程序员。可是学到大三的时候,发现数学跟不上了,再回头补又没那个精力,逐渐往应用方向转。现在做管理了,但是还时不时写些文档的批处理脚本,把手下那些个跟班震得一愣一愣的。

    • 家园 送宝!

      送花成功。有效送花赞扬。感谢:作者获得通宝一枚。

      参数变化,作者,声望:1;铢钱:16。你,乐善:1;铢钱:-1。本帖花:1

    • 家园 俺推荐两个:VBA+OZ

      VBA在微软Office套件里的Word,Excel,Access等产品里都可以使用,功能强大,而且效果比较直观,容易做出比较实用的工具。但是VBA本身似乎已经被微软抛弃,现在已经进化成更强大的VSTO,后者支持VB.Net和C#,可以看成是专业的Visual Studio的简化版,自带编译器和图形开发界面,如果只是了解编程的化这两个已经足够了,学完后对命令式编程和面向对象都有了基本的认识,进可攻退可守。

      另一个语言是OZ(就是《绿野仙踪》里的奥兹国的那个“奥兹”)。推荐的理由是这个语言是比较少见的多范式语言。支持目前几乎所有的编程范式和特性,网上有个总结:

       函数型语言(词法域 第一类过程 模式匹配 第一类统一语法),lazy,高阶(可实现非递归的循环),尾递归,描述式编程

       面向对象(状态 Stateful/抽象数据类型 多重继承),

       并行(多线程)(dataflow(数据流)线程 动态 连续 互影响),

       约束编程和逻辑推理(逻辑变量 分离结构 可编程搜索策略),人工智能,

       分布式(网络透明的分布式运算 组件编程 自动连接自动断线 共享变量/对象/类/过程),

       网络编程,无状态数据,

       安全,动态类型,异常处理,内存管理,交互的IDE

       多用途语言(交互的应用程序,GUI窗口程序,移动客户应用程序,Separation of Concerns (Aspects),跨平台,扩展dll,....)

      举个约束求解的例子(摘自网络):

        X 属于 [1 11]

        Y 属于 [12 30]

      求X Y使得满足

        X+Y=25

        X*Y=150

        条件的X和Y。

      程序如下:

        declare X Y in

        X :: 1#11

        Y :: 12#30

        X+Y =: 25

        X*Y =: 150

        {Show [X Y] }

      据说还有解决爱因斯坦五色房子的OZ程序,不过一时找不到。

      俺推荐这种语言的理由是,对于小孩子来说,过早学习C这类工业用语言有害无益,目前主流语言基本就是命令式编程+面向对象,而实际上编程远远不止这两种思想。而且这类语言是为工业化设计的,容易陷进细节的陷阱而学不到背后的思想,限制小孩的创造力。而OZ语言可以按照需要进行取舍,不管是简单的还是复杂的,需要哪块学那块,学起来也比较有趣味,甚至可以自己添加关键字甚至定义一门新的语言(这点难度比较高,不过相对自己从头写应该容易许多,因为OZ和大部分主流语言不同,是基于核心语言的思想开发的,扩展起来相对比较容易)。

      MOZART是OZ语言的一个实现,自带开发环境,网站是http://www.mozart-oz.org/

      遗憾的是MOZART的中文资料非常少,国内也很少人用(估计知道的都很少),如果懂英文的话配上《Concepts,Techniques and Models of Computer Programming》这本教材就完美了(据说是大名鼎鼎MIT的SICP后继,SICP这门课据说已经停止了)。

      • 家园 同样,而且VBA非常实用

        VBA对于大规模的文本和数据处理特别有用。比如做一大堆报表,或者把一堆表格换个格式。

    • 家园 和楼主一样的文科生来说几句

      大学学的文科,虽然选修了一门java课程,但除了把课本上的计算器程序照抄运行无误外,其他也什么都没学会。努力尝试去理解“面向对象”和“递归”之类的专业术语,但无奈天赋有限,终究没学会。

      我对计算器这个例程(在书的最后几节,前面N章没理解)比较感兴趣的原因是,我希望我写出的“程序”能被我直观的感受到,能让我点点某个按钮触发下某个事件,这会让我很有成就感,可惜书上介绍的少,而且实现起来太复杂,我终究是没学会。

      后来工作中一段时间(几个月)需要大量的重复劳动,逼迫我不得不去学点程序,接触到了中文写程序的易语言,摸索了一阵子后,很快就入门并能自动替我处理一些简单的数据了。

      我之所以敢向楼主推荐易语言,而且在河里大牛那么多的情况下,还敢说出来,不是自大也不是想误导楼主,而是切切实实觉得可以解决新手入门问题和解决一些生活中的实际问题。

      优点如下:

      1、中文比较直观,而且有语法提示。

      2、自动纠错功能很强悍。至少缺少括号,数据类型不对什么的,都会自动提示,改起来很方便。而且不同数据类型之间转换也比较方便。像我这种无法把数据类型定义很好的,就用的非常舒服。

      3、每种命令都有提示说明。新手遇到的最大问题是,不知道这个功能有哪些命令可以实现。或者这个命令使用错了,不知道需要写哪些参数,而这些都有提示和说明,照着看很容易用。

      而且就算某些功能不会用,网上也有一堆模块下载来,下载来直接用他们的模块里的命令就好了,比如图片格式转换、定义系统热键什么的。不会写的功能也不怕。

      4、创建图形界面非常简单方便。

      缺点当然是编译程序较大,而且说出来很不好听(我很勇敢了,你们别给我扔草啊),就算你能用易语言写出帮你自动偷菜的程序,说出来也没别人用高级语言写一句hello world好听。

      不过文科生嘛,写点程序不是为了糊口 ,而是为了实际解决问题。至少自动帮我处理excel数据和偷菜什么的还是胜任的,最近在干的事是自动采集某网站上千个页面里的数据。

      我算法是一个也不会。不知道楼主学编程具体要干嘛,要了解编程思想什么的,看其他人的推荐吧,如果想解决点实际问题,希望我能帮到楼主。

      仅作参考,大家别打我

    • 家园 其实,直接用Office里带的VBA更简单

      作为小学生的编程入门,VBA还是很胜任的。呵呵

    • 家园 初学你就用C,而且程序写的没什么毛病,很厉害

      C语言一般是专业的才是从C入手,业余或者爱好者,一般是用BASIC,现在也有用Python,一般都是脚本语言或者弱类型语言,毕竟这样的方便上手

      但是要提高水平,“真去做程序员也能的那种厉害。”确实非C不可啊

    • 家园 学这个不是问题,问题是为什么要学?

      1.为了好玩,下面的就不用看了。

      2.为了解决实际问题,这个的话,单学程序设计是不行的,起码“离散数学”得能及格才行;要达到学习离散数学的程度,怎么也得高中吧?大多数现实生活中可能遇到的问题,都有现成的软件来解决。

      3.小孩子学这个,更多的是一方面了解计算机的工作原理,另一方面训练一种纯数理逻辑的思维方式。这个的话,有面向过程的和面向对象的两种,思维方式是不同的,后者相对抽象一些。前者的话,以前我们都是学的BASIC。不知道现在都用什么了?C/C++干这个是不合适的,对计算机细节的要求太多。

    • 家园 计算机程序最重要的两个statements

      计算机程序最重要的两个statements:

      If................else..................

      Do.................While................

      所有的语言都建立在这两个逻辑上。

    • 家园 宝推一个

      俺是代码民工, 为了让学中文的女友学编程过计算机二级, 全程免费辅导,还要倒贴零花钱和零食给她.

      非专业的学python好, 简单,稍微学学,用用别人的库,有人指导一下,说不定可以写个自己实用的小工具呢,那可有成就感了!

      非专业的想用C写个工具太难了,没有成就感。不过C语言挺简洁的,可以先学学,碰一些难点先不管。

分页树展主题 · 全看
/ 14
下页 末页


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

Copyright © cchere 西西河