谈一谈编程到底应该怎么学?-暨2023年 CSP-J2轮爆零总结

谈一谈编程到底应该怎么学?-暨2023年 CSP-J2轮爆零总结

转自 https://mp.weixin.qq.com/s/_Fi64pYrZ6tHfKaNDb3xAA

今年的信息学奥赛复赛结果已经基本出来了,整个行业讨论最多的就是今年的爆0问题。据说一个省,总共1900多人参加J组复赛,有800个0分。

其它各省也都是爆0 很多。但是同时呢,高分段选手也变多了。

这背后到底隐藏着什么原因?

首先我们来看下 信息学奥赛复赛和我们的传统中考,高考有什么区别?

中考,高考都是120分或者150分制,有选择题,填空题,应用题等,题型多,题目数量多,难度分布均匀,给了不同阶段学生不同展示的机会。

所以一般来讲,对于150分,或者120分的卷子来讲,你拿到:108分或者135分才能算优秀。

但是信奥不一样,信奥复赛无论是J组还是S组,都只有4个编程大题,时间是3.5小时/4小时,每题100分,也就是说一共只有4个题,每个题会有十几个,几十个测试数据用例,比如一共100分,假如这题一共有10个测试用例,那么你每提交通过1个测试用例就得10分;但是很多情况对于一个编程题来讲,你可能都会了,那么就是100分,也有可能不会,只能0分;这个0分的概率也是非常大的。

介绍完了基础,我们来重点看看今年的J组题和去年有什么区别?

去年2个题,第1题和第2题相对简单,只要学了几个月的学生,如果还可以,就有可能做出来。虽然拿满分100分比较难,但是每一题拿个几十分是比较容易的。

然后呢,我们再来看看初赛,初赛呢是这么回事,很多年前初赛也是有填空题的,但是填空题阅卷太麻烦呀,所以为了提高效率, 现在就改成 全部选择题+判断题了。也就是说100分的卷子是这样划分的:

1)单选题 15个,一共30分 乱填答对概率:0.25
2)阅读程序题:

A:单选题:8个:一共24分 : 0.25
B:判断题:9个 一共 16分 : 0.5
3)完善程序: 单选题:10个,一共30分 0.25

我们来统计一下你全部随机填写平均多少份:

840.25 + 160,5= 29分

也就是说,你什么也不会,随便乱填,也有29分。然后我们看下今年 初赛一些弱省的晋级分数是大概是多少?

海南云南青海,甘肃:最高的38分,最低的20分就晋级了。

那么是不是会导致 一堆学了几个月的,或者说压根不具备编程能力的学生懵到复赛了?

那么再回到上面复赛,假如你学了3个月,以40分的高分晋级了。正好你学了一点编程皮毛。那么遇到2022年的复赛,2个题相对简单,被你每题拿个50分,是不是可能100分就被你拿到了?

100分今年弱省是一等奖水平呢,大家想一下。按照去年的情况,每个题你蒙40,80分。那也是80分,弱省也是二等奖水平呢。

但是这个奥赛二等奖,一等奖很显然对于 国家来说,对于CCF来说,对于重点高中来说,是没有价值的,没有起到要给筛选的作用。

但是今年就不一样了

今年4个题

第一题: 啥算法也不考,数组也不用,但是对于学生的思维能力要求很高,如果你只是按照老师的题去按部就班做(指的是老师讲了做,自己听懂了,模拟),从来不去钻研一些题,那么对于今年第一题肯定做不出来,几年结果出来,很多学了1年多的第一题也没做出来,而且是0分;这个题出的太好了,杜绝了投机份子,我认为这才是信奥应该出的题类型

第二题:用了一点点贪心算法。做出来也不容易,难度还在第一题上面一点点。所以没有经过一年的学习,没有达到GESP-4级水平,那做不出来也是大概率事件

第三题:第3题就比较变态了,考了一个 初中代数求根公式,不太难,但是很繁琐,就跟我们中考高考遇到的有些题,难度不高,但是计算的过程非常繁琐,需要你有耐心,需要你强大的编码能力。不然看都看不懂。这样的题你没有经过系统学习,没有初中代数功底,能做的出来?

第四题:第4题就难了,是真正的精英才能做出来的,今年的姚班和交大ACM班的杜老师和沃老师直播讲题就说了:这题无论从什么角度,都属于难题,他们手撕 都得捻把汗。最后小图灵统计做出来的只有0.1%都不到的概率

这么看下来,是不是你可以拿到分的也只有第1题了?第1题今年就不太容易做出来。所以是不是爆0就非常正常了。

所以我们通过这次复赛来看,我们总结出一个道理,这是我作为老师一直跟学生跟家长强调的几点:

1)编程不能急功近利,需要稳打稳扎,第一年都是做炮灰的,认真学习2年,大概率会出成绩。

2)编程需要系统性学习,它对学生逻辑思维能力、处理细节的能力高要求非常高,是一个极度锻炼学生思维与耐力的学科。

3)学习编程,学生不能一遇到问题马上就问,一问老师就看下告诉问题所在。不能跟做学校里的作业一样,需要鼓励学生钻研,鼓励学生遇到问题去排查去解决,确实思考了,想不出来了,老师可以提醒下,学生继续思考。这才是学习编程的根本方法。

我高中的时候学习编程,一个题想一个月呢,然后再做出来的,每天晚上睡觉了,脑子还在想思路,这样的思考过程对于学生就是很大的提升。

4)编程里面有很多的特殊处理方法,很多高难度技巧,这些实际上都不用去教的,只要教基础就行了, 特殊技巧都是孩子自己摸索出来的,比如说:二分法为了防止溢出不能直接写成:(l+r)/2,比如说:生成回文数的方法 等等各类技巧。你告诉学生了,学生背一下就会了,但是不理解背后的原理有什么用。。当然了,我也承认,临考前2个月教一些技巧也是有必要的,咱毕竟是为了考试。

5)老师的教学得讲原理,讲推导,比如说以一本通启蒙篇里面的很多题目,我们都知道是拿了奥数题过来的,但是变成了编程题,要么学生直接学过奥数,直接有公式知道怎么解,否则,就需要引导学生去自己拿笔做草稿去推导整个过程。很多公式不是直接口算出来的,是推导出来的,哪怕是选择排序算法,也推导出来的。

如下几个都需要讲解推导过程:1)不大于N能被K整除的最大数 2)牛吃草问题 3)整数回文 逆序推导 3)选择排序算法推导 4)二分推导

6)学生应该如何做编程题? 我最近发现很多学生做编程题都是直接看题直接写代码的,有那么容易吗?编程题是集合了数学应用题,计算题,强逻辑思维,还有计算机科学的题,很多题都是找规律,需要学生平时养成拿起草稿纸和笔 通过自己列举数字,找出规律(今年的小苹果第一题就是这样的,需要草稿纸上画圈,去演练:输入N与每一轮的关系,看看是余数关系还是其它关系)

当然,很多方法,对于学生来讲,需要一遍又变的强调,慢慢练习,这个也看学生的,如果是小学生,确实难度较高,养成习惯非常重要。如果是初中生,那就必须严格按照要求来。

  1. 还有一个很重要的就是 平时教学生是否需要强调命名规范,我认为很重要,比如说: 循环自增变量一般都用:i,j,k, 求和一般都用sum,临时用temp,动规一定用DP,多个就用DP1,DP2,必须遵循规范,不然有些程序学生今天洗完,过几天自己都看不懂了。老师因为变量乱命名,也会导致难以帮助学生一眼看出问题。所以这个问题是需要一直强调的,至少我每次上课都会强调。

8)跟家长是否需要实话实讲,那必须呀。对于家长不能乱吹牛,得诚实告诉他们:奥赛是有难度的,需要踏踏实实学,第一年可能拿到奖的概率很小,但是只要学生稳步在进步,坚持几年就会出成果,当然家长会根据孩子自己的能力和 中考的时间点去把控。对于有些接受能力弱的孩子或者说年龄较小的孩子来讲,那么就跟家长沟通好,一周一次课就可以了,慢一点。不着急追求成绩。因为哪怕有些孩子天赋还不错但是毕竟只有3年级4年级,这个也不用急的。他们是用时间换了空间。未来出成绩的概率非常大。

对于一部分接受能力强的学生来讲,就应该安排双周课,多学一点,这个时候不学什么时候学呢,对吧。如果一个小学5年级以下学生学习一年C++,可以通过GESP5级,那么我认为就已经是达标了。而且很OK 了。因为再过2年到7级,你就大概率可以获得CSP-J一等奖了。强省的CSP-J一等奖那可是很厉害的水平,无论到哪里,都是算很不错的。

最后,也告知一下今年爆0的家长,如果你家一年编程都没学满,爆0你一点也不要惊讶。。真的。

今年有个初赛82分的复赛还爆0呢。。

爆零不怕,怕的是:学习方法不对,怨天尤人。

带着一个良好心态去让学生学习编程才是正解。编程带给学生未来的希望是很大的。最近5年,中国最火爆的专业就是计算机科学与技术,真是笔者大学就读专业。

笔者跟大家一样,靠着学习编程, 在上海扎根落叶。 在一线城市,未来还是靠计算机,计算机靠AI,想要从事AI领域,编程是第一关。

未来会编程就像10年前人人都需要会OFFICE一样。所以我们学编程,也不仅仅是为了竞赛。

posted @ 2024-08-04 09:42  梁君牧  阅读(93)  评论(0编辑  收藏  举报