信息学竞赛到使用编程解决更多的生活实际问题,差距有多大

大四狗怒答一记首先,现实生活中要解决的问题和竞赛的思路是完全不一样的。你可以说竞赛学到的东西在一些地方用得到,但是也仅仅是在一些地方用得到而已。在一开始我们要弄清楚,什么是“使用编程解决生活实际问题”。上IT公司搬砖可以说是“解决生活实际问题”。竞赛和它的差距在我看来是一些工科系课程(例如操作系统,编译原理,计算机网络etc),一些数学基础(高数,线代,概统,离散etc),以及对很多计算机相关知识的日常积累,思维的转换,还有一些专业知识。如果要是说在生活中体现用程序解决问题的GEEK范,这可是毫无止境的,不会python?看不懂HTML?这想说是geek真心有点差距吧。以上均为大学狗的一己之见。
■网友
你把这个网页源代码复制下来作为输入,然后就是处理一个字符串的问题的......帮你补充你点吧做实际应用来说,无外乎是逻辑+输入输出的问题。竞赛只关注逻辑,而实践中和竞赛中的主要区别也就是用的接口不一样。要实现一些功能,无非是要和外部系统打交道,一般你只接触了怎么读写文件,不知道怎么通过网络访问别的机器,或者通过数据库来读写数据。这些都是通过接口可以完成的,比如调用某些函数,输出某些内容。你一般做题目,在里面会看到诸如输入输出格式这样的东西,就是描述接口的文档,也就是和外部系统怎么交互的问题,无非是竞赛中比较单纯,输入是一个文件,输出也是一个文件,文件的格式也比较简单,方便在题目中比较简单的描述清楚。想要做点事情,可以考虑怎么把你要做的东西,转换到你熟悉的接口来实现。也可以去学习别的相应的规范,诸如应该调用什么函数,输出什么格式的东西。当然还有另外一个事情也是竞赛不怎么涉及的就是代码有一定规模了怎么管理,怎么方便增加或者删除功能,实践中的经常会遇到需求变化的情况。
■网友
我也曾经是OIer,跟你有过一样的疑惑,感觉我可以写个命令行中丑陋无比但是有着强大AI的回合制坦克游戏,却写不出一个图形界面的井字棋。我当时查了好久怎么在控制台输出一个彩色的方块,因为如果能做到这一点的话我就能写一个还算可以的三消游戏了,最终也没成功。现在我有自己租的服务器,上面跑着自己写的一些基于web的应用,生活中也经常写爬虫或者做图像处理。这些工作用到的技能都需要额外去学习。像你说的网页设计、数据库,每一个名字在大学都是一学期的课。但是如果你有OI的基础,那么你可以学得非常非常快,比如半小时掌握php语法,半小时写出能够查成绩的页面。OI的算法和数据结构关注点还是太窄了。学OI时候,自己眼中的周围人都是计算机盲,很容易产生骄傲感。实际上计算机相关的技能太多了,我刚开始的时候面对着linux的命令行都完全无法幸存。要保持不断探索不断学习才行呀!


    推荐阅读