200字
写在宋友老师《程序设计基础》结课之后
2025-12-03
2025-12-03

“重新”走入计算机世界的大门

我并不是一个完全没有接触过计算机的人。事实上,我从小就是非常热衷于折腾各种电子产品的人。到了中学有了接触电脑的权限,更是如同发掘了一个神奇的新世界一样。我自己了解了许多互联网、计算机有关知识,也曾经自学过编程(这里指的是写一行代码看十分钟博客和文档且最后生产出烂尾项目的水平)。但是一个小孩凭兴趣自学哪能称得上合格的程序员呢,写出来的东西不过是(部分)恰好能跑且没有规范的小玩具罢了。

凭着对计算机的兴趣,在大学选择专业的时候选择了计算机这条道路。一个理工科的学生当然更偏好硬核实操的课程。刚看到课表的时候我就对程序设计基础这门课产生了期待,那时的我很自信,认为学懂这种基本的编程不费吹灰之力。

第一节课从一些“为什么要学C语言”之类的问题开始,讲了半节课,然后又从这个经典的“hello world”程序,我再次走进了编程的世界。

#include<stdio.h>
int main()
{
    printf("Hello World!");
    return 0;
}

刚开始讲的内容并没有什么困难,我也一度以为这门课就会这样轻松下去。但随着讲解的内容从最初的输入输出到函数、数组,难度肉眼可见地上升了。到了指针这一部分,我往往需要在课下或者做OJ的时候再翻看理解课上的代码。而每周二上午上课,晚上的C赛就要用到很多上午讲的内容,使我常常陷入”我到底听懂了没有“的自我怀疑之中。学习编程之路并非一马平川。

确实是

(现在看来这个课程特点描述的一点也没错)


AC? "accoding" : "wacoding"

OJ是本课程贯穿始终的一大挑战。我一向喜欢的编程方式是没有时间限制,可以依赖互联网解决问题的。而面对OJ这种争分夺秒考验熟练度的考核方式,常常就汗流浃背了。

第一次C赛,那时还在担心“只”做出了8题会不会跟不上进度,殊不知这已经是做出来最多的一次了。每周二晚上被C赛“折磨”着(其实到了后面就习惯了),随着学的知识越来越深入,最开始的8题也慢慢变成7题、6题、5题(其实有一次翻车了只做出来4题)。我也时常感慨群里那些竞赛大佬,感慨为什么他们能轻轻松松地做出来很多题,谈论着我不会的算法知识。但回看自己一路走来,上百道题(C赛E赛加上国庆和R赛、模拟应该有了吧)确实带给我了不少成长,我掌握了一门我之前完全不熟悉的编程语言的基本语法,会不看文档使用基本的函数,会根据输出排查自己代码的问题(虽然还是经常犯一些很蠢的错误),也会自己总结一些常见的问题的解法,记得一些常用的函数如何实现。接触了指针这种神奇但又令人头大的东西之后,用它实现了很多程序。我学会了如何编写cmp函数,最开始是课件上的整数类型,然后依葫芦画瓢做出符合题目的数组的、结构体的比较函数,我也曾抱怨,为什么上课讲的是基础的能听懂的东西,但做题就是苦思冥想许久却喜提WA,转念一想,也许这恰好培养了我们举一反三的能力吧。

与accoding相伴的几个月是痛并快乐着的。其实我还是很享受将题目的意思转换为逻辑,再将想法写成代码,生成一个能回答问题的程序这一个过程的,正确的结果能给我无可替代的满足感与成就感。我有时面对一个很麻烦的题目觉得无从下手,写很长缺因为小的错误而WA,但时不时的,AC的目标激励着我,战胜了那种所谓“不敢写”的心理,其实这种心理就像高中的时候面对作文和主观题差不多吧。

归根到底,OJ教会了我如何与计算机交流,如何用计算机解决简单的问题,如何在有限的时间内将自己的思考转化为代码,而当今互联网世界的一切不还是基于这几个简单的问题吗?

(一个鏖战E赛题许久终于AC的励志故事)


为什么要学习C语言:我的思考

我上文提到,我之前也自学过一些编程,不过学习的都是python、java这样的语言,与接近系统底层的c语言相比,这些语言有更多的“轮子”,有更现代化的设计,因此在用这些语言解决问题的时候,我往往想的是去网上搜索解决方案或者引入别人写好的库来辅助。初见C语言给我一种很陌生的感觉,它没有面向对象,也没有很多我们熟知的内置的数据结构,没有很多python、java中的库,很多功能都需要自主实现。

逐渐适应C语言的许多特性(包括难缠的指针),我开始理解宋老师在第一节课的课件上写的话——”仰望星空,脚踏实地“。这门语言虽然基础而底层,但是轮子不够就自己造,优秀的程序员能使用它开发出复杂而优美的程序、现代化的操作系统。学好这门语言是一个程序员的入门必修课。“由俭入奢易,由奢入俭难”,只有掌握了C语言的特性,拥有了程序设计的思维,才能更好发挥各种编程语言的能力。

写在后面的一些感谢

宋友老师是一位可敬的计算机教师,他上课有丰富的拓展和互动环节,讲解代码时有生动而形象的例子,活跃了课堂氛围,使修行C语言之旅变得不枯燥乏味。感谢宋老师,为我们带来如此有趣而硬核的一门课程。(附上学校官网个人主页:https://soft.buaa.edu.cn/teacher/songyou/index.htm

感谢陪伴我们十几周的助教们。程序设计的助教应该是这个学期所有课程的助教中跟我们互动最多的了。在前面的C赛我可能是请求帮助最多的学生之一了(因为开始的debug能力太差了),但往往最后助教看完发现是一些非常简单非常蠢的错误。此外在E赛的时候也请教过助教,再次感谢每位助教的耐心解答。

最后再感谢下坚持到现在的我自己吧,不多说了我复习去了。

评论