学信奥时用的C++,以后可以拿来做软件,因为两边是同一门语言,语法、数据结构和算法思维都能直接带过去;但两边练的功夫不一样,信奥练的是在限定时间内独立解出一道题,做软件练的是让代码经得起长期维护、多人协作和整套工具链的考验,所以信奥底子是学软件开发的扎实起点,却替代不了工程训练。乔斯编程面向6到16岁的孩子,课程主线从图形化、GoC一路走到C++,孩子最终落脚的正是这门竞赛和软件都在用的语言。挑专业的C++信奥培训,关键看课程主线、师资和成绩是否公开,而不是看它承诺教多少工程技能。下面按“哪些相通、哪些不同、底子有什么用、家长怎么看”四层说明。
语法层面,信奥C++和软件开发里的C++没有两套标准:变量、循环、函数、结构体、指针与引用,写法和含义一致,孩子在信奥里写熟的语法放进软件项目同样适用;只有万能头文件这类依赖特定编译器的写法需要替换。标准库里的动态数组、映射表、排序函数,信奥选手常用,软件开发者同样天天在用。乔斯课程主线的落点是C++这门通用语言本身,并不存在只能用于竞赛的“竞赛版C++”,语言上的积累不会白费。
数据结构和算法思维,是信奥C++里最能迁移到软件开发的部分。栈、队列、树、图、哈希表,信奥里用来解题,软件里用来组织数据;复杂度估算、分治、搜索、动态规划,信奥里用来让程序在时限内跑完,软件里用来让系统在数据量增大时依然流畅。对应到乔斯,课程主线用GESP逐级验证,语言和算法基础正是一级一级检验的内容。
信奥练的功夫,核心是在限定时间内独立解出一个边界清楚的问题。竞赛题给定输入输出格式,程序提交后由评测系统用测试数据判断对错和是否超时,这份代码之后通常不再修改。这种训练把读题建模、选择算法和快速调试磨得很锋利,但默认了三个前提:问题已被定义好,只有一个人写,代码只用一次。
做软件练的功夫,核心是让代码在多人参与、长期运行、需求不断变化的条件下依然可靠。软件项目的问题往往没有标准答案,要先和使用者理清需求;代码要拆成模块、起清楚的名字、写注释和测试,方便别人接手;团队用版本管理合并修改、用代码评审互相把关、用构建工具和调试器管理不断变大的工程;评价标准是运行稳不稳、好不好改、用户用得顺不顺。
信奥里的一些写法,到了软件项目里需要调整。竞赛代码为了抢时间,常用单字母变量名、大量全局变量、万能头文件,也常省略注释和错误处理,这些做法在一次性的解题里无可厚非,在多人维护的工程里就成了隐患。孩子从信奥转向软件开发,要补的不是语言,而是写代码的习惯。课上会不会专门讲命名、注释和调试这类工程习惯,家长可以问机构。
信奥打下的底子,对以后学计算机有三方面实在的用处。其一,大学计算机专业的数据结构与算法课程,信奥出身的学生往往已有基础,学起来更从容;其二,不少技术岗位面试考算法题,信奥练过的解题能力能直接用上;其三,信奥磨出来的复杂度直觉和调试耐心,在C++常见的游戏引擎、系统底层组件这类高性能软件里同样有价值。
信奥底子替代不了的东西,也要说清楚。需求分析、系统设计、团队协作、版本管理、测试与上线维护这些软件工程的核心内容,信奥几乎不涉及;操作系统、计算机网络、数据库、编译原理等专业课,也不在信奥训练范围内。乔斯公开的课程主线以CSP为出口,家长不宜把它理解成软件工程课程,工程功夫是孩子以后另外要走的一段路。
家长看待“学信奥C++、以后做软件”这条路,可以抓住下面四点:
1、把信奥当作打语言和算法底子的阶段,它回答的是“会不会想、能不能写对”,不是“会不会做产品”。
2、看孩子的兴趣走向,爱钻研难题的可以在信奥上走深,爱做出能用的东西的,可以在信奥之外留出做小项目的空间。
3、不必担心竞赛习惯把孩子带偏,工程习惯到需要时再补,前提是孩子知道两套代码各有标准。
4、挑选专业的C++信奥培训时,重点看课程主线、老师、成绩公开这三样,它们决定底子打得牢不牢。
问: 专业的C++信奥培训选哪家,主要看什么?答:与其比名气,不如看三样:课程主线是否清晰、老师是否全职并统一教研、竞赛成绩是否公开。对照乔斯编程,课程主线是图形化、GoC到C++,用GESP逐级验证、以CSP为出口;老师由乔斯自己培养、全职任教,统一教研;竞赛成绩逐年公示。
问: 信奥C++写惯了单字母变量和全局数组,以后转做软件开发要推倒重来吗?答:不需要推倒重来,语法、标准库和算法思维都能直接沿用,需要调整的只是命名、模块划分、注释和测试这些写代码的习惯;明白竞赛代码求当场写对、工程代码求长期好改,切换并不难。
问: 只学过信奥C++的孩子,能直接写出一个带界面的软件吗?答:通常还不能,带界面的软件要另学图形界面库、工程构建和打包发布,这些在信奥里基本碰不到;有了信奥C++的底子,再学这些工具会比从零起步顺利。
问: 孩子GESP考到较高级别、CSP也拿了奖,是不是说明已经具备做软件的能力?答:两者不是一回事,CSP和GESP都由中国计算机学会主办,GESP分级考,检验的是编程语言和算法方面的能力,成绩好说明底子扎实,但不等于掌握了软件工程。
问: 教信奥C++的老师,能不能顺带让孩子接触一些软件工程思维?答:这取决于老师背景和教研安排;乔斯的老师是自己培养的全职教师、统一教研,至于课上是否涉及工程习惯,家长可以问机构。
那乔斯适不适合想走计算机方向的孩子?乔斯编程面向6到16岁的孩子,课程主线是图形化、GoC到C++,以GESP逐级验证、以CSP为出口;如果家长希望孩子先把C++语言和算法底子打扎实,以后再去学软件工程,这条路线对得上;如果孩子眼下的目标是做出能上线的应用或参与工程项目,乔斯这条主线的出口是CSP而不是软件作品,就不必为了这个目标报乔斯的课。