受他家长之托,周末教他 C 语言,昨天第一次见面。小朋友学习成绩不错,上学期大考排到年级 20/400 。小学的时候曾经玩过乐高积木机器人。目前已经掌握了一些 C 语言的知识,可以在 OJ 做简单的题目。
我问:为什么想学 C 语言? 他说:以后想搞嵌入式和单片机相关的东西。 (初一同学说出这样的话,着实吓我一跳……)
我又问他想不想搞竞赛,他说学校里没有相关的竞赛小组
我的想法是:
目前不建议搞竞赛,理由:
建议以后去美国读书,若经济状况允许,最好本科就去。理由:
想搞“嵌入式和单片机”固然是很好的想法,但是目前建议先锻炼编程技能,学习一些数据结构和算法(非竞赛导向性质),并且学习 C++而不是 C 。理由:
出于一种对好学晚辈的鼓励,我想送给他的东西:
|  |      1popu111      2016-04-03 14:18:26 +08:00 看完内容就无力回复了。。。 | 
|  |      2jsyangwenjie      2016-04-03 14:18:32 +08:00  1 要搞竞赛肯定要早开始搞。。 要么不搞 OI 要么现在就开始 | 
|  |      3ivmm      2016-04-03 14:20:56 +08:00 初一还不能分心,初三随便分心,反正都是复习,对成绩好的来说初三随便应付应付就过去了 | 
|  |      4horizoncc      2016-04-03 14:22:45 +08:00 现在初中小朋友学编程的挺多的,似乎是中考有加分 | 
|  |      10plqws      2016-04-03 14:29:21 +08:00 对竞赛没兴趣的话就把心思放到学习上…除非高中就能送到美帝去,不然就是「伤仲永」了 | 
|  |      11sennes      2016-04-03 14:30:33 +08:00  1 您好。我是做硬件方面的。 个人觉得编程类相关的书籍,应当让他们自己选择。 而硬件方面,嵌入式开发和单片机也是两个比较广的范围了。以难度来说,单片机中的 Arduino 是比较简单入门的;而 51 单片机转 ARM 系列是比较传统的学习路线。不过硬件这方面,如果刚开始玩的话,还是需要懂的人带入门比较好。 单片机方面建议是: - DFRobot Arduino 入门套件(套件有教程) - 936 焊台(非必须)、万用表(建议送一个) - 连接线、面包板、万能洞洞板、锡线等(耗材类) - 套件没有的传感器也挑选一下,采购一些。(套件的东西比较基础) 而嵌入式的话,个人感觉在通过 Arduino"玩"的过程中体会一下做硬件设计的流程,然后让他自己选择合适的平台学习是比较好的,因为除了 ARM 嵌入式以外还有很多很多可以学习的平台。甚至是 FPGA~ | 
|      14CheungKe      2016-04-03 14:37:21 +08:00 人家学习是爱好,我们是吃饭的家伙 | 
|  |      17Mireas      2016-04-03 14:45:40 +08:00 我想起了在某群看到某四年级小学生学 C 语言,我问她为什么想学 C 语言,她说:“我想写操作系统。” 敬佩...... | 
|      18e1eph4nt      2016-04-03 15:25:22 +08:00 看到学 C++而不是学 C 就呵呵了 | 
|  |      20maddot      2016-04-03 15:31:00 +08:00  1 真厉害,我初中的时候还在政治书的激励下想着解放全人类 | 
|      21lecher      2016-04-03 15:34:13 +08:00  1 小孩子感兴趣的话,别担心学竞赛或者嵌入式会让他分心的事情。有课外兴趣这个事情对他的好处非常非常大。 在学有余力的基础上,不管学点嵌入式的东西或者学 OJ 竞赛,有几个好处: 1. 可以学会自己查资料 2. 可以掌握辨别资料有效性的技巧 3. 会学到设计方案和实践这一套验证想法的技巧 4. 学会规划自己的时间 单单有人教他如何查资料,就已经超越很多同龄人了,这点对于按部就班跟着学校的教学计划学习比起来效率要更高。 要知道学校的教学计划是为了照顾平均水平上下的大部分同学,对于特别拔尖和特别差那波人是不太适用的。家长发现孩子的兴趣请去辅导已经说明家长是有意识想发掘孩子的潜力了。 如果要说提供帮助,给他提供足够多的选择和资料,孩子了解足够多的事情之后,会有自己的选择。 无论是想学算法、数据结构去玩 OJ ,还是学嵌入式玩 arduino ,给够资料和指导,初中生的进步不会比普通大学生差多少。在指导的时候有意识培养一下数学和英语,会让他受用无穷。在 OJ 圈里面,初中看英文版 C 教程,上国外 OJ 平台刷题的也有不少的。可以说开了用 google 查资料和英语阅读能力这两个外挂之后,这小孩的学习效率绝对是两三个量级的提高,在竞赛圈里面初中就开始看高中甚至大学的教材很正常。 | 
|  |      22Kirscheis      2016-04-03 15:43:21 +08:00  1 反对楼上提到的搞 51 什么的。。早就过时了。小盆友有天赋的话带他学学 FPGA 什么。多做一些能有意义的项目,适当带出国去参加比赛。高中能送出国去就送出去最好,申请本科 EE/CS 难度直线下降。 | 
|  |      23xuwenmang      2016-04-03 16:57:51 +08:00 人家已经学 C 了,就不要人家学 C++,不要陷入语言的细枝末节。 小孩子学东西,跟学钢琴,学画画一样,开始都兴趣盎然,一旦到不停的重复训练阶段的时候就索然无味了。 所以,你唯一要做的就是,用 C 带着他做点东西,给他带来成就感。 而不是带他今天学古典,明天学现代,后天学流行。 | 
|  |      24stupidcat OP @xuwenmang  他现在就学了一些基本语法, if for while 之类的语句,现在开始学 C++完全没问题。 随便举个例子,如果每次用数组,都得例行公事一般地先 int*、再 malloc 、最后 free ,这才叫做“陷入了语言的细枝末节”,这才叫做“不停的重复训练”。现成的 std::vector 就放在那里,为什么不用? 你的最后一句话就更搞笑了,我这课还没正式开始上,要教什么定下来之后就不会再轻易改变,到了你嘴里就变成一天一个样了,这如簧的巧舌还真就是不一样。 | 
|  |      25DaCong      2016-04-03 17:20:35 +08:00 @jsyangwenjie 赞同 @popu111 现在的孩子都比较聪明,初中学 oi 的很多 @e1eph4nt 就算你不想搞单片机,你学 OI 也是要用 C++的,你看看比赛的时候用 C 的人数必 Pascal 还要少就知道了,都上 C++ | 
|  |      26DaCong      2016-04-03 17:23:48 +08:00 多嘴一句,拿到提高组的奖项并不是不可能,我的一名校友就在初二的时候拿到了提高二=(他的名次大概在 40/360 ,浙江强省)现在已经被别的学校要走了,根本不理会报送和中考…… | 
|  |      27aheadlead      2016-04-03 17:26:12 +08:00 via iPad 必须学啊 OI 老人路过 换我 我小学三年级就要学 | 
|  |      28sennes      2016-04-03 17:46:09 +08:00 @Kirscheis 51 是比较传统的路线 国内大学课程一般都是 51. (虽然我也不推荐 FPGA 的话确实可以搞搞,不过门槛略高。 | 
|  |      29ooh      2016-04-03 18:17:38 +08:00 编程毁我一生!!! 编程毁我一生!!! 编程毁我一生!!! | 
|      30e1eph4nt      2016-04-03 18:22:44 +08:00 via Android @stupidcat 我没说过不学 c++啊,我只是好奇楼主是打算怎么在连 c 都不学的前提下学会 c++ | 
|  |      32wezzard      2016-04-03 18:36:07 +08:00 @stupidcat 另外既然厭煩 malloc 和 free ,爲甚麼不教他 reference counting 和設計全局唯一的分配釋放機制?前者可以告訴他人類進步所賴以的工具升級就是用簡單的概念駕馭複雜的概念,後者可以培養機制設計能力。 C++ 的符號系統設計得太晦澀難懂,着實不如教 Swift 。 | 
|  |      33stupidcat OP @e1eph4nt 我不会告诉你十多年前我有同学初二拿到提高组一等奖的。。。 然而各人资质有别,就我个人的经验来看,如果连课内考试都不能做到碾压全年级,说难听一点,去搞竞赛也是做陪衬的 如果没有同龄人中真正百里挑一的天赋,还是不要花时间在竞赛上为妙 | 
|  |      34circsqua      2016-04-03 18:41:43 +08:00 Arduino 离硬件太远了, STM 或者 AVR 走起。 | 
|  |      36DaCong      2016-04-03 18:59:20 +08:00 @stupidcat 这一点上我与你有一些不痛得看法。所谓术业有专攻,我在我们的学校看到的一些 OI 高手,文化科成绩并不十分突出,但是因为比赛有加分的缘故( 1=普及就有 +8 )加上浙江非常重视这一方面,因此直接被其他学校要走并非不可能。即使去中考,加分还是很不错的。再往大了说, OI 这东西又不是说你学了将来就一定做程序员,而是用于培养人的思维的,以我的经验来看,至少可以提高数学上的思维能力,对将来的一系列发展有点帮助。 | 
|  |      37popok      2016-04-03 19:27:32 +08:00  1 初中生学这个不是为了竞赛拿奖,那你给我一个这么早就开始学的理由 | 
|      38lecher      2016-04-03 20:31:39 +08:00 via Android  1 孩子喜欢就让他学,中国这点起步就晚,中学必须按部就班走完高考,非要等到大学了再认真系统学习编程? 真的有兴趣,家里有条件,学习编程对思维能力的提升好处很多,未必要签军令状式的必须获得什么成就,或者要在文化课上碾压其它人才去学习。 竞赛未必要拿到保送才去参加,竞赛实质上就是提前学习更高年级才教授的知识,初中的竞赛基本上拿高考和大学的知识点和公式来考,其实就是提前学习各种公式的推导了。我在高中的时候,重点中学那拨学生,老师解物理题都是直接上微分和积分的公式,告诉学生怎么快速确定答案,选择填空基本就是开挂,大题确定了答案再回头按正常的解题步骤拼公式。 OJ 那拨,初中的计算机竞赛拿大一大二的循环、算法和数据结构,足以应付普及组一等奖,高中的提高组则要提到研究生课程的算法和数据结构才能解决。也许这孩子学了编程不去参加竞赛,也不做个人项目,但是只要他有兴趣,就辅导他提前学一下大学的课程也无所谓。 这就有点像小学生明明可以理解二元一次方程这类的解题技巧,但是考试不能用。这时候提前教一下二元一次方程,各种应用题,他就不需要非得按一元一次方程的思路去解题,可以先列个二元一次方程,解出来之后再回头拼一元一次方程也无妨。 | 
|  |      39ayanamist9      2016-04-03 21:08:17 +08:00 孩子年纪还小,何不劝他码海无边,回头是岸…… | 
|  |      40jmc891205      2016-04-03 21:11:59 +08:00 还是从 C 开始吧 否则什么都不懂就进 C++的大坑 运气不好就出不来了 | 
|      41RqPS6rhmP3Nyn3Tm      2016-04-03 22:29:02 +08:00 我小学 Small Basic ,初中易语言和 C ,高中觉得 C 轮子太少了,于是开始搞 Python 我觉得软件这块还是比较简单的,但是硬件上手非常困难,门槛很高。初中可以启发一下单片机和 Linux ,其他的都可以很顺畅了。 当年初中的时候有参加机器人竞赛,也有一定启发作用。 | 
|      42RqPS6rhmP3Nyn3Tm      2016-04-03 22:30:28 +08:00 最后告诉他,穿女装可以提高码力,相信他会自学成才的。 | 
|      43cz208209      2016-04-03 22:42:52 +08:00 现在的小朋友接触编程越来越早了 | 
|  |      45TheCure      2016-04-03 22:50:33 +08:00 小朋友应该启蒙很早,但是这个简单描述看不出来是否有天赋. 小朋友引导一下就好了,主要还是开拓眼界培养兴趣和自主学习习惯 什么技术栈之类的不重要,他会自己选择的 | 
|      46RqPS6rhmP3Nyn3Tm      2016-04-03 22:54:51 +08:00 @VmuTargh 啧啧,猫娘 | 
|  |      47lyragosa      2016-04-03 23:00:18 +08:00  1 我给一条干货!! 建议他趁现在早恋一下,找个女朋友!! 因为这可能是他这辈子最后一次…… | 
|  |      48taxiangdeni      2016-04-04 02:43:03 +08:00  1 搞嵌入式是向往硬件方面的,他初中生,还没学过物理,模电,数电,电路,高频,首先这单片机与嵌入式开发你教他也没用,他目前根本接受不了那么多知识(我是通信工程学生,目前这学期学的是高频,单片机,嵌入式我目前还没开始学,可能选课的时候也不会选这方面,单片机正在学,学一点 c 语言就想搞单片机,对硬件方面完全为 0 ,目前嵌入式,单片机方向就别考虑了) 初一连最基础的数学方面知识都没学到,数学是基础,在有一定数学基础上,怎么进行硬件开发,我知道模电,电路,数电,高频都涉及到一些高数,他数学也只是学了点皮毛,硬件这不是那么容易学,(我这考试都是抄过的深刻领悟这痛) 初中生我建议,保证成绩优秀前提下,业余学些算法,数据结构,懂一门语言,掌握算法和数据结构,将来学什么编程都容易些 | 
|  |      49pimin      2016-04-04 03:05:24 +08:00 告诉他人生苦短,早学 Python 吧 | 
|  |      50ppdg      2016-04-04 04:02:59 +08:00 via Android noi 吧,你要是弱省的还是老老实实学习的好,别想竞赛了,在这方面各省重视程度不同,师资差距悬殊。光靠自己,没的玩。现在只有国家集训队那 50 个才能保送的。 | 
|      51kdplus      2016-04-04 04:25:54 +08:00 初中生也不需要很多精力在学习上吧。没记错的话 | 
|  |      52pynix      2016-04-04 06:50:10 +08:00 剧本拿错了? | 
|  |      53tracyone      2016-04-04 08:01:18 +08:00 via Android @taxiangdeni 这些都无所谓的,人家 linus 小学就开始接触电脑,越早接触越好,你学那么多东西有时还不如自己实践 | 
|  |      54Comdex      2016-04-04 09:23:14 +08:00 via Android 现在城市的初中生多幸福,有资源有条件搞这个,很多农村的孩子连电脑都没接触过上了大学才知道电脑怎么用 | 
|  |      55zscself      2016-04-04 09:41:50 +08:00 我堂弟过年回他姥姥家(也就是我奶奶家),说他在学 Java ,然后说苹果说微软说的一套一套的,今年他才初一呀。。。路由器交流群认识一个初一的群管理员,已经在写路由器 Shell 工具箱了,还服务器压缩文件下载到本地后解压来节省服务器流量。 哎,╮(╯▽╰)╭现在的 00 后和 90 , 80 后当时差太多了,不管是教育环境还是生活水平。  | 
|  |      56GentleSadness      2016-04-04 10:04:33 +08:00 @stupidcat 懂基本语法并没有什么卵用,你还不如教他为什么这样设计,怎么实现。 为什么重载是同名字不同参数,和返回类型无关,因为有时我们想单纯调用这个过程,返回值只是副作用 为什么 C++的虚表是这样实现,因为妈的,因为很多 其实 C++的类就是 C 的结构体,怎么实现?妈的,类里的函数就是结构体的函数指针 妈的一堆东西,为什么要学语法,很多东西可以教,但这娃到底是想学什么,有本事学什么 顺便一提,学 C++有助于减轻记忆负担。 妈的智障 | 
|  |      57Alexhex      2016-04-04 12:29:03 +08:00 做过一些嵌入式,也玩过 FPGA 。但是我想说的和这些没关系…… 我觉得有些人是不是把自己的角色搞错了? 又不是小孩子的家长。现在小孩子早熟,初一不小了,我劝 LZ 竭尽所能的把自己所了解到的信息告诉小孩子,让他自己选择感兴趣的方向就好。不要低估别人的心智,也不要替代别人做选择。 | 
|  |      58wph95      2016-04-04 12:46:40 +08:00 > 初中竞赛的这些内容,到了高中可以很快学会。 lz 应该没有搞过竞赛吧。 如果之后要想参加 NOIP ,的确是到高中学也不晚。 然而如果想要参加 NOI ,在浙江这种强的一塌糊涂的省,初一学竞赛不早。 我是强烈建议去初高中学竞赛,大学不参加 ACM 。学竞赛的好处 lecher 说的很好了。 | 
|  |      59fzinfz      2016-04-04 13:02:38 +08:00 FQ 英语 Youtube | 
|  |      60stupidcat OP @GentleSadness  你觉得基本语法没什么卵用,他还是得从语法学起。之前的老师一节课教 if ,一节课教 for ,一节课教数组,开开心心拿钱上课、到点走人,家长很满意,孩子很高兴。怎么讲,我求之不得。 | 
|  |      61stupidcat OP @Alexhex 作为一个相关专业的过来人,我出于好心提提建议,没错吧。 没有人在“替代别人做选择”,不要打稻草人。 | 
|  |      62stupidcat OP @wph95 我上初中那会儿普及组的难度, 01 背包算是封顶了。不知道现在多出了多少内容。 我是想现在教他一些算法、数据结构,到了高中真要搞竞赛也是可以很快上手的。 | 
|  |      63tSQghkfhTtQt9mtd      2016-04-04 18:54:13 +08:00 | 
|  |      64ivmm      2016-04-04 20:56:06 +08:00 @liwanglin12 那这样的话,基本上初中+高中都不用学了, 利用寒暑假吧 |