V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
stupidcat
V2EX  ›  问与答

昨天去教了初一小朋友编程,求建议

  •  
  •   stupidcat · 2016-04-03 14:10:11 +08:00 · 6000 次点击
    这是一个创建于 3188 天前的主题,其中的信息可能已经有所发展或是发生改变。

    受他家长之托,周末教他 C 语言,昨天第一次见面。小朋友学习成绩不错,上学期大考排到年级 20/400 。小学的时候曾经玩过乐高积木机器人。目前已经掌握了一些 C 语言的知识,可以在 OJ 做简单的题目。

    我问:为什么想学 C 语言? 他说:以后想搞嵌入式单片机相关的东西。 (初一同学说出这样的话,着实吓我一跳……)

    我又问他想不想搞竞赛,他说学校里没有相关的竞赛小组

    我的想法是:

    1. 目前不建议搞竞赛,理由:

      1. 他这个学习成绩,参加中考稳进本地最好高中。所以在普及组获不获奖都一样,没必要分心学业
      2. 学校里没有兴趣小组,没有老师指导、没有伙伴交流,会很困难。
      3. 他的兴趣并不在这里
      4. 可以等到高中再尝试,初中竞赛的这些内容,到了高中可以很快学会(何况他已有编程基础)
    2. 建议以后去美国读书,若经济状况允许,最好本科就去。理由:

      1. 美帝的 CS 。不多说
      2. 既然学 CS ,将来留学的概率很大,晚留不如早留。本科申请美国名校的难度显著低于研究生申请美国名校的难度,手握美国本科文凭申请美国名校研究生的难度显著低于手握国内本科文凭申请美国名校研究生的难度。
      3. 学习能力强,兴趣契合,可谓大有前途。没有理由不好好培养。
    3. 想搞“嵌入式和单片机”固然是很好的想法,但是目前建议先锻炼编程技能,学习一些数据结构和算法(非竞赛导向性质),并且学习 C++而不是 C 。理由:

      1. 既然要学 CS ,无论专精什么方向,这些东西都迟早要掌握,晚学不如早学。
      2. 学这些东西,语言只是一个工具,重点应该在学习其中的思想方法,而不是语言本身。学 C++有助于减轻记忆负担。 vector 总比 int* malloc free 清晰多了吧
      3. 保持将来搞竞赛的可能性(信息学竞赛只允许使用 pascal/C/C++)
    4. 出于一种对好学晚辈的鼓励,我想送给他的东西:

      1. 《编码》这本书。他说晚自修作业做完之后有时间可以看点书
      2. 单片机积木玩具。比如 arduino ?不知道现在还流不流行了?
    64 条回复    2016-04-04 20:56:06 +08:00
    popu111
        1
    popu111  
       2016-04-03 14:18:26 +08:00
    看完内容就无力回复了。。。
    jsyangwenjie
        2
    jsyangwenjie  
       2016-04-03 14:18:32 +08:00   ❤️ 1
    要搞竞赛肯定要早开始搞。。

    要么不搞 OI 要么现在就开始
    ivmm
        3
    ivmm  
       2016-04-03 14:20:56 +08:00
    初一还不能分心,初三随便分心,反正都是复习,对成绩好的来说初三随便应付应付就过去了
    horizoncc
        4
    horizoncc  
       2016-04-03 14:22:45 +08:00
    现在初中小朋友学编程的挺多的,似乎是中考有加分
    stupidcat
        5
    stupidcat  
    OP
       2016-04-03 14:25:03 +08:00
    @popu111 那就别回,千万别回。
    VmuTargh
        6
    VmuTargh  
       2016-04-03 14:26:55 +08:00
    @ivmm 我是属于初一初二很分心初三只砍数学的那种, 结果......hhh
    stupidcat
        7
    stupidcat  
    OP
       2016-04-03 14:26:57 +08:00
    @ivmm 理论上说的确是这样,不过家长老师都不会同意的
    popu111
        8
    popu111  
       2016-04-03 14:27:05 +08:00
    @stupidcat 这么天才拿出来虐辣鸡真的大丈夫?
    stupidcat
        9
    stupidcat  
    OP
       2016-04-03 14:27:49 +08:00
    @horizoncc 各地政策不同吧。但他保持这成绩上本地最好高中绰绰有余
    plqws
        10
    plqws  
       2016-04-03 14:29:21 +08:00
    对竞赛没兴趣的话就把心思放到学习上…除非高中就能送到美帝去,不然就是「伤仲永」了
    sennes
        11
    sennes  
       2016-04-03 14:30:33 +08:00   ❤️ 1
    您好。我是做硬件方面的。
    个人觉得编程类相关的书籍,应当让他们自己选择。

    而硬件方面,嵌入式开发和单片机也是两个比较广的范围了。以难度来说,单片机中的 Arduino 是比较简单入门的;而 51 单片机转 ARM 系列是比较传统的学习路线。不过硬件这方面,如果刚开始玩的话,还是需要懂的人带入门比较好。

    单片机方面建议是:
    - DFRobot Arduino 入门套件(套件有教程)
    - 936 焊台(非必须)、万用表(建议送一个)
    - 连接线、面包板、万能洞洞板、锡线等(耗材类)
    - 套件没有的传感器也挑选一下,采购一些。(套件的东西比较基础)

    而嵌入式的话,个人感觉在通过 Arduino"玩"的过程中体会一下做硬件设计的流程,然后让他自己选择合适的平台学习是比较好的,因为除了 ARM 嵌入式以外还有很多很多可以学习的平台。甚至是 FPGA~
    stupidcat
        12
    stupidcat  
    OP
       2016-04-03 14:32:11 +08:00
    @sennes 初一小朋友,搞电焊还是太夸张了,家长这关过不去。。。。
    stupidcat
        13
    stupidcat  
    OP
       2016-04-03 14:33:39 +08:00
    @plqws 是的,年级 20/400 虽然很棒,但是离提高组拿奖可能还差点儿意思。。。。
    CheungKe
        14
    CheungKe  
       2016-04-03 14:37:21 +08:00
    人家学习是爱好,我们是吃饭的家伙
    stupidcat
        15
    stupidcat  
    OP
       2016-04-03 14:40:50 +08:00
    @CheungKe 怎么讲,还是无忧无虑的时代吧。。。。
    yangff
        16
    yangff  
       2016-04-03 14:44:36 +08:00
    @stupidcat 电焊不夸张啊^
    Mireas
        17
    Mireas  
       2016-04-03 14:45:40 +08:00
    我想起了在某群看到某四年级小学生学 C 语言,我问她为什么想学 C 语言,她说:“我想写操作系统。”
    敬佩......
    e1eph4nt
        18
    e1eph4nt  
       2016-04-03 15:25:22 +08:00
    看到学 C++而不是学 C 就呵呵了
    stupidcat
        19
    stupidcat  
    OP
       2016-04-03 15:27:22 +08:00
    @e1eph4nt 看到学 C 而不是学汇编就呵呵了
    maddot
        20
    maddot  
       2016-04-03 15:31:00 +08:00   ❤️ 1
    真厉害,我初中的时候还在政治书的激励下想着解放全人类
    lecher
        21
    lecher  
       2016-04-03 15:34:13 +08:00   ❤️ 1
    小孩子感兴趣的话,别担心学竞赛或者嵌入式会让他分心的事情。有课外兴趣这个事情对他的好处非常非常大。
    在学有余力的基础上,不管学点嵌入式的东西或者学 OJ 竞赛,有几个好处:
    1. 可以学会自己查资料
    2. 可以掌握辨别资料有效性的技巧
    3. 会学到设计方案和实践这一套验证想法的技巧
    4. 学会规划自己的时间

    单单有人教他如何查资料,就已经超越很多同龄人了,这点对于按部就班跟着学校的教学计划学习比起来效率要更高。
    要知道学校的教学计划是为了照顾平均水平上下的大部分同学,对于特别拔尖和特别差那波人是不太适用的。家长发现孩子的兴趣请去辅导已经说明家长是有意识想发掘孩子的潜力了。

    如果要说提供帮助,给他提供足够多的选择和资料,孩子了解足够多的事情之后,会有自己的选择。
    无论是想学算法、数据结构去玩 OJ ,还是学嵌入式玩 arduino ,给够资料和指导,初中生的进步不会比普通大学生差多少。在指导的时候有意识培养一下数学和英语,会让他受用无穷。在 OJ 圈里面,初中看英文版 C 教程,上国外 OJ 平台刷题的也有不少的。可以说开了用 google 查资料和英语阅读能力这两个外挂之后,这小孩的学习效率绝对是两三个量级的提高,在竞赛圈里面初中就开始看高中甚至大学的教材很正常。
    Kirscheis
        22
    Kirscheis  
       2016-04-03 15:43:21 +08:00   ❤️ 1
    反对楼上提到的搞 51 什么的。。早就过时了。小盆友有天赋的话带他学学 FPGA 什么。多做一些能有意义的项目,适当带出国去参加比赛。高中能送出国去就送出去最好,申请本科 EE/CS 难度直线下降。
    xuwenmang
        23
    xuwenmang  
       2016-04-03 16:57:51 +08:00
    人家已经学 C 了,就不要人家学 C++,不要陷入语言的细枝末节。

    小孩子学东西,跟学钢琴,学画画一样,开始都兴趣盎然,一旦到不停的重复训练阶段的时候就索然无味了。

    所以,你唯一要做的就是,用 C 带着他做点东西,给他带来成就感。

    而不是带他今天学古典,明天学现代,后天学流行。
    stupidcat
        24
    stupidcat  
    OP
       2016-04-03 17:12:30 +08:00
    @xuwenmang
    他现在就学了一些基本语法, if for while 之类的语句,现在开始学 C++完全没问题。
    随便举个例子,如果每次用数组,都得例行公事一般地先 int*、再 malloc 、最后 free ,这才叫做“陷入了语言的细枝末节”,这才叫做“不停的重复训练”。现成的 std::vector 就放在那里,为什么不用?
    你的最后一句话就更搞笑了,我这课还没正式开始上,要教什么定下来之后就不会再轻易改变,到了你嘴里就变成一天一个样了,这如簧的巧舌还真就是不一样。
    DaCong
        25
    DaCong  
       2016-04-03 17:20:35 +08:00
    @jsyangwenjie 赞同

    @popu111 现在的孩子都比较聪明,初中学 oi 的很多

    @e1eph4nt 就算你不想搞单片机,你学 OI 也是要用 C++的,你看看比赛的时候用 C 的人数必 Pascal 还要少就知道了,都上 C++
    DaCong
        26
    DaCong  
       2016-04-03 17:23:48 +08:00
    多嘴一句,拿到提高组的奖项并不是不可能,我的一名校友就在初二的时候拿到了提高二=(他的名次大概在 40/360 ,浙江强省)现在已经被别的学校要走了,根本不理会报送和中考……
    aheadlead
        27
    aheadlead  
       2016-04-03 17:26:12 +08:00 via iPad
    必须学啊 OI 老人路过 换我 我小学三年级就要学
    sennes
        28
    sennes  
       2016-04-03 17:46:09 +08:00
    @Kirscheis 51 是比较传统的路线 国内大学课程一般都是 51. (虽然我也不推荐
    FPGA 的话确实可以搞搞,不过门槛略高。
    ooh
        29
    ooh  
       2016-04-03 18:17:38 +08:00
    编程毁我一生!!!
    编程毁我一生!!!
    编程毁我一生!!!
    e1eph4nt
        30
    e1eph4nt  
       2016-04-03 18:22:44 +08:00 via Android
    @stupidcat 我没说过不学 c++啊,我只是好奇楼主是打算怎么在连 c 都不学的前提下学会 c++
    wezzard
        31
    wezzard  
       2016-04-03 18:30:09 +08:00
    @stupidcat 我小學四年級參加學校無線電側向興趣小組的時候就有電焊活了,自己的設備都要自己焊。
    wezzard
        32
    wezzard  
       2016-04-03 18:36:07 +08:00
    @stupidcat 另外既然厭煩 malloc 和 free ,爲甚麼不教他 reference counting 和設計全局唯一的分配釋放機制?前者可以告訴他人類進步所賴以的工具升級就是用簡單的概念駕馭複雜的概念,後者可以培養機制設計能力。 C++ 的符號系統設計得太晦澀難懂,着實不如教 Swift 。
    stupidcat
        33
    stupidcat  
    OP
       2016-04-03 18:39:41 +08:00
    @e1eph4nt 我不会告诉你十多年前我有同学初二拿到提高组一等奖的。。。
    然而各人资质有别,就我个人的经验来看,如果连课内考试都不能做到碾压全年级,说难听一点,去搞竞赛也是做陪衬的
    如果没有同龄人中真正百里挑一的天赋,还是不要花时间在竞赛上为妙
    circsqua
        34
    circsqua  
       2016-04-03 18:41:43 +08:00
    Arduino 离硬件太远了, STM 或者 AVR 走起。
    stupidcat
        35
    stupidcat  
    OP
       2016-04-03 18:42:40 +08:00
    上面 @ 错人了………………本来想 @DaCong 的,@e1eph4nt 抱歉
    DaCong
        36
    DaCong  
       2016-04-03 18:59:20 +08:00
    @stupidcat 这一点上我与你有一些不痛得看法。所谓术业有专攻,我在我们的学校看到的一些 OI 高手,文化科成绩并不十分突出,但是因为比赛有加分的缘故( 1=普及就有 +8 )加上浙江非常重视这一方面,因此直接被其他学校要走并非不可能。即使去中考,加分还是很不错的。再往大了说, OI 这东西又不是说你学了将来就一定做程序员,而是用于培养人的思维的,以我的经验来看,至少可以提高数学上的思维能力,对将来的一系列发展有点帮助。
    popok
        37
    popok  
       2016-04-03 19:27:32 +08:00   ❤️ 1
    初中生学这个不是为了竞赛拿奖,那你给我一个这么早就开始学的理由
    lecher
        38
    lecher  
       2016-04-03 20:31:39 +08:00 via Android   ❤️ 1
    孩子喜欢就让他学,中国这点起步就晚,中学必须按部就班走完高考,非要等到大学了再认真系统学习编程?

    真的有兴趣,家里有条件,学习编程对思维能力的提升好处很多,未必要签军令状式的必须获得什么成就,或者要在文化课上碾压其它人才去学习。

    竞赛未必要拿到保送才去参加,竞赛实质上就是提前学习更高年级才教授的知识,初中的竞赛基本上拿高考和大学的知识点和公式来考,其实就是提前学习各种公式的推导了。我在高中的时候,重点中学那拨学生,老师解物理题都是直接上微分和积分的公式,告诉学生怎么快速确定答案,选择填空基本就是开挂,大题确定了答案再回头按正常的解题步骤拼公式。
    OJ 那拨,初中的计算机竞赛拿大一大二的循环、算法和数据结构,足以应付普及组一等奖,高中的提高组则要提到研究生课程的算法和数据结构才能解决。也许这孩子学了编程不去参加竞赛,也不做个人项目,但是只要他有兴趣,就辅导他提前学一下大学的课程也无所谓。

    这就有点像小学生明明可以理解二元一次方程这类的解题技巧,但是考试不能用。这时候提前教一下二元一次方程,各种应用题,他就不需要非得按一元一次方程的思路去解题,可以先列个二元一次方程,解出来之后再回头拼一元一次方程也无妨。
    ayanamist9
        39
    ayanamist9  
       2016-04-03 21:08:17 +08:00
    孩子年纪还小,何不劝他码海无边,回头是岸……
    jmc891205
        40
    jmc891205  
       2016-04-03 21:11:59 +08:00
    还是从 C 开始吧 否则什么都不懂就进 C++的大坑 运气不好就出不来了
    RqPS6rhmP3Nyn3Tm
        41
    RqPS6rhmP3Nyn3Tm  
       2016-04-03 22:29:02 +08:00
    我小学 Small Basic ,初中易语言和 C ,高中觉得 C 轮子太少了,于是开始搞 Python
    我觉得软件这块还是比较简单的,但是硬件上手非常困难,门槛很高。初中可以启发一下单片机和 Linux ,其他的都可以很顺畅了。
    当年初中的时候有参加机器人竞赛,也有一定启发作用。
    RqPS6rhmP3Nyn3Tm
        42
    RqPS6rhmP3Nyn3Tm  
       2016-04-03 22:30:28 +08:00
    最后告诉他,穿女装可以提高码力,相信他会自学成才的。
    laucie
        43
    laucie  
       2016-04-03 22:42:52 +08:00
    现在的小朋友接触编程越来越早了
    VmuTargh
        44
    VmuTargh  
       2016-04-03 22:48:04 +08:00
    @BXIA 记得多喵~
    TheCure
        45
    TheCure  
       2016-04-03 22:50:33 +08:00
    小朋友应该启蒙很早,但是这个简单描述看不出来是否有天赋.

    小朋友引导一下就好了,主要还是开拓眼界培养兴趣和自主学习习惯

    什么技术栈之类的不重要,他会自己选择的
    RqPS6rhmP3Nyn3Tm
        46
    RqPS6rhmP3Nyn3Tm  
       2016-04-03 22:54:51 +08:00
    @VmuTargh 啧啧,猫娘
    lyragosa
        47
    lyragosa  
       2016-04-03 23:00:18 +08:00   ❤️ 1
    我给一条干货!!

    建议他趁现在早恋一下,找个女朋友!!

    因为这可能是他这辈子最后一次……
    taxiangdeni
        48
    taxiangdeni  
       2016-04-04 02:43:03 +08:00   ❤️ 1
    搞嵌入式是向往硬件方面的,他初中生,还没学过物理,模电,数电,电路,高频,首先这单片机与嵌入式开发你教他也没用,他目前根本接受不了那么多知识(我是通信工程学生,目前这学期学的是高频,单片机,嵌入式我目前还没开始学,可能选课的时候也不会选这方面,单片机正在学,学一点 c 语言就想搞单片机,对硬件方面完全为 0 ,目前嵌入式,单片机方向就别考虑了)

    初一连最基础的数学方面知识都没学到,数学是基础,在有一定数学基础上,怎么进行硬件开发,我知道模电,电路,数电,高频都涉及到一些高数,他数学也只是学了点皮毛,硬件这不是那么容易学,(我这考试都是抄过的深刻领悟这痛)

    初中生我建议,保证成绩优秀前提下,业余学些算法,数据结构,懂一门语言,掌握算法和数据结构,将来学什么编程都容易些
    pimin
        49
    pimin  
       2016-04-04 03:05:24 +08:00
    告诉他人生苦短,早学 Python 吧
    ppdg
        50
    ppdg  
       2016-04-04 04:02:59 +08:00 via Android
    noi 吧,你要是弱省的还是老老实实学习的好,别想竞赛了,在这方面各省重视程度不同,师资差距悬殊。光靠自己,没的玩。现在只有国家集训队那 50 个才能保送的。
    kdplus
        51
    kdplus  
       2016-04-04 04:25:54 +08:00
    初中生也不需要很多精力在学习上吧。没记错的话
    pynix
        52
    pynix  
       2016-04-04 06:50:10 +08:00
    剧本拿错了?
    tracyone
        53
    tracyone  
       2016-04-04 08:01:18 +08:00 via Android
    @taxiangdeni 这些都无所谓的,人家 linus 小学就开始接触电脑,越早接触越好,你学那么多东西有时还不如自己实践
    Comdex
        54
    Comdex  
       2016-04-04 09:23:14 +08:00 via Android
    现在城市的初中生多幸福,有资源有条件搞这个,很多农村的孩子连电脑都没接触过上了大学才知道电脑怎么用
    zscself
        55
    zscself  
       2016-04-04 09:41:50 +08:00
    我堂弟过年回他姥姥家(也就是我奶奶家),说他在学 Java ,然后说苹果说微软说的一套一套的,今年他才初一呀。。。路由器交流群认识一个初一的群管理员,已经在写路由器 Shell 工具箱了,还服务器压缩文件下载到本地后解压来节省服务器流量。
    哎,╮(╯▽╰)╭现在的 00 后和 90 , 80 后当时差太多了,不管是教育环境还是生活水平。
    ![]( http://7xqfkg.com1.z0.glb.clouddn.com/IMG_2804.jpg)
    GentleSadness
        56
    GentleSadness  
       2016-04-04 10:04:33 +08:00
    @stupidcat 懂基本语法并没有什么卵用,你还不如教他为什么这样设计,怎么实现。

    为什么重载是同名字不同参数,和返回类型无关,因为有时我们想单纯调用这个过程,返回值只是副作用

    为什么 C++的虚表是这样实现,因为妈的,因为很多

    其实 C++的类就是 C 的结构体,怎么实现?妈的,类里的函数就是结构体的函数指针

    妈的一堆东西,为什么要学语法,很多东西可以教,但这娃到底是想学什么,有本事学什么

    顺便一提,学 C++有助于减轻记忆负担。 妈的智障
    Alexhex
        57
    Alexhex  
       2016-04-04 12:29:03 +08:00
    做过一些嵌入式,也玩过 FPGA 。但是我想说的和这些没关系……

    我觉得有些人是不是把自己的角色搞错了?

    又不是小孩子的家长。现在小孩子早熟,初一不小了,我劝 LZ 竭尽所能的把自己所了解到的信息告诉小孩子,让他自己选择感兴趣的方向就好。不要低估别人的心智,也不要替代别人做选择。
    wph95
        58
    wph95  
       2016-04-04 12:46:40 +08:00
    > 初中竞赛的这些内容,到了高中可以很快学会。
    lz 应该没有搞过竞赛吧。
    如果之后要想参加 NOIP ,的确是到高中学也不晚。
    然而如果想要参加 NOI ,在浙江这种强的一塌糊涂的省,初一学竞赛不早。
    我是强烈建议去初高中学竞赛,大学不参加 ACM 。学竞赛的好处 lecher 说的很好了。
    fzinfz
        59
    fzinfz  
       2016-04-04 13:02:38 +08:00
    FQ 英语 Youtube
    stupidcat
        60
    stupidcat  
    OP
       2016-04-04 14:14:41 +08:00
    @GentleSadness
    你觉得基本语法没什么卵用,他还是得从语法学起。之前的老师一节课教 if ,一节课教 for ,一节课教数组,开开心心拿钱上课、到点走人,家长很满意,孩子很高兴。怎么讲,我求之不得。
    stupidcat
        61
    stupidcat  
    OP
       2016-04-04 14:16:17 +08:00
    @Alexhex 作为一个相关专业的过来人,我出于好心提提建议,没错吧。
    没有人在“替代别人做选择”,不要打稻草人。
    stupidcat
        62
    stupidcat  
    OP
       2016-04-04 14:19:06 +08:00
    @wph95 我上初中那会儿普及组的难度, 01 背包算是封顶了。不知道现在多出了多少内容。
    我是想现在教他一些算法、数据结构,到了高中真要搞竞赛也是可以很快上手的。
    tSQghkfhTtQt9mtd
        63
    tSQghkfhTtQt9mtd  
       2016-04-04 18:54:13 +08:00
    @zscself 别人家的堂弟。。咱也想要 MB
    @ivmm 初三没认真会药丸的,不要问我为什么,亲测
    @all 真羡慕家里有亲戚是程序员的人
    ivmm
        64
    ivmm  
       2016-04-04 20:56:06 +08:00
    @liwanglin12 那这样的话,基本上初中+高中都不用学了, 利用寒暑假吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1047 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 20:03 · PVG 04:03 · LAX 12:03 · JFK 15:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.