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

2016-04-03 14:10:11 +08:00
 stupidcat

受他家长之托,周末教他 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 ?不知道现在还流不流行了?
6000 次点击
所在节点    问与答
64 条回复
lecher
2016-04-03 15:34:13 +08:00
小孩子感兴趣的话,别担心学竞赛或者嵌入式会让他分心的事情。有课外兴趣这个事情对他的好处非常非常大。
在学有余力的基础上,不管学点嵌入式的东西或者学 OJ 竞赛,有几个好处:
1. 可以学会自己查资料
2. 可以掌握辨别资料有效性的技巧
3. 会学到设计方案和实践这一套验证想法的技巧
4. 学会规划自己的时间

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

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

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

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

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

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

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

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

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

这就有点像小学生明明可以理解二元一次方程这类的解题技巧,但是考试不能用。这时候提前教一下二元一次方程,各种应用题,他就不需要非得按一元一次方程的思路去解题,可以先列个二元一次方程,解出来之后再回头拼一元一次方程也无妨。
ayanamist9
2016-04-03 21:08:17 +08:00
孩子年纪还小,何不劝他码海无边,回头是岸……
jmc891205
2016-04-03 21:11:59 +08:00
还是从 C 开始吧 否则什么都不懂就进 C++的大坑 运气不好就出不来了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/268266

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX