晋江文学城
下一章 上一章  目录  设置

26、写代码好难 11.4 ...

  •   11.4
      EECS 183 的难度在第三周突然跳了一个台阶。

      前两周讲变量、输入输出、条件判断,我还能跟得上。作业写起来虽然慢,但好歹能跑。第三周开始讲循环,屏幕上那些花花绿绿的括号和分号像一堵突然竖起来的墙。我的代码怎么都 run 不了。编译错误,逻辑错误,有时候跑起来了但输出是错的,有时候跑着跑着就卡住了,一闪一闪的,像是在嘲笑我。

      我盯着屏幕看了很久,一行一行地检查,改了十几遍,还是一样。不,也许真的不是每个人都适合写代码吧……

      周三的 lab 我没来得及问 Ian,人太多了,他身边围了好几个人,我等了一会儿,没轮到我,就走了。周五下午,我去了他的 office hour。

      Office hour 在 BBB 的那栋楼的四楼,一间不大的教室,靠墙一圈电脑桌,中间几张长桌。我到的时候人不多,三四个人散坐着,Ian 坐在最前面,正在帮一个女生看代码。我找了个角落的位置坐下,打开电脑,登录课程页面,开始看代码,写到第七行的时候卡住了,编译器报错,说 missing semicolon。我加了一个分号,又报了别的错。改了十几分钟,还是不行。我抬头看了一眼,Ian 还在和那个女生说话,她旁边还坐着一个人在等。我低下头,继续改。改了大概十几分钟,代码终于跑起来了,但输出是错的。循环多了一次,或者少了一次,我不知道是哪里出了问題。我把循环的边界条件改了几遍,不对。重新写了一遍,不对。再写一遍,还是不对。

      又过了大概二十分钟,排队的人走了一些。我看了一眼,前面只剩一个人了,就收拾东西走过去。

      “怎么了?”Ian 问我。他靠在椅背上,手里拿着一支笔,屏幕上是刚才那个人的代码。

      “这个循环,我怎么都写不对,”我说,把电脑转过去给他看,“它应该输出一个倒三角形,但我的输出总是多一行。”

      他低头看了一会儿,手指在触控板上滑了两下,把两个 for 循环都框了出来。

      “你这里不是 syntax error 了,是 loop bounds 的问题。外层循环控制有几行,内层循环控制每一行打几个星号。你现在把这两个逻辑混在一起了,所以每一行都会多跑一次。”

      他点了点内层循环的条件。

      “你先别急着改,先拿 n = 4 手算一下。第一行应该几个,第二行几个,第三行几个。把你想要的输出和循环次数一一对上,代码就顺了。”

      他说得很清楚,每一步都点在了我卡住的地方。我点了点头,把电脑拿回来,改了几行,跑了一下。还是不对,但这次的错误不一样了。我又改了几分钟,卡住了,抬头看了一眼 Ian,他正在帮另一个人看代码。我等了一会儿,又轮到了我。

      “还是不对,”我说,“形状是对了,但星号还是少了一行。”

      他低头看了两秒,没说什么,只是把光标移到那个 for 循环的边界条件上,改了一个数字。
      “你试试这个。”

      我照着改了,重新跑了一次。对了。

      屏幕上的倒三角终于整整齐齐地落下来,每一行都比上一行少一个星号,最后只剩最底下一颗。我盯着那几行输出看了几秒,像是突然明白了一点什么,又像只是运气好,刚好把它改对了。

      “谢谢。”我说。

      “不客气。”他往后靠了靠,手里的笔轻轻转了一下,“还有别的问题吗?”

      “有,”我说,“但我还没写到那里。等我真的改不出来,再来找你。”

      他笑了一下。这次比刚才明显一点,嘴角抬得更高,像是觉得这句话有点好笑。

      “行。”

      我抱着电脑回到角落的位置,重新坐下。

      下一个部分是打印金字塔,比倒三角更麻烦,要同时管空格和星号,左右还得对齐。我先写了个外层循环控制行数,又补了两个内层循环,一个打空格,一个打星号。写完跑了一次,输出倒是出来了,只是整个图形歪到了一边。

      我改了改边界条件,又跑了一次,还是歪。

      再改一次,直接编译错误。

      我停下来,把代码从头到尾看了一遍。括号是成对的,分号也都在,变量名看着也没打错,可就是不对。屏幕上那几行 for 循环挤在一起,看久了几乎有点眼花。

      我把其中一段删掉,重新写。

      写到一半,又卡住了。

      教室里的人渐渐少了。有人收拾东西走了,有人在门口跟 Ian 说再见,Ian 抬了抬手,没有抬头,继续看电脑。我看了一眼时间,离 office hour 结束还有不到二十分钟。教室里只剩两个人了,一个坐在前排的男生,正在打包电脑,还有一个我,坐在角落里,盯着屏幕上那几行歪歪扭扭的星号发呆。

      男生走了。Ian 站起来伸了个懒腰,看了我一眼。“你还在?”

      “还在。”

      他走过来,在我旁边的椅子上坐下,侧着身、手肘撑在桌上,看着我的屏幕。

      他没有催我,也没有问我哪里不会,就那么坐着,等我开口。

      “这个金字塔,”我说,“我怎么都写不对。空格的数量和星号的数量总是对不上。”

      他凑近了一点看我的代码,“你这里 loop bounds 没问题,”他说,“是输出顺序错了。每一行都要先打前导空格,再打星号,不然图形就会偏。”

      我把那两行交换了位置,跑了一下。金字塔站直了,整整齐齐的,从第一行的一颗星,到最后一行展开成宽宽的一层,每一行都正好落在中间。

      我靠在椅背上,呼了一口气。

      Ian 看着我,嘴角弯了一下。

      “你怎么想学 CS?”他问。

      我想了几秒。这个问题不是没有答案,是答案太长,长到不知道从哪里开始说。

      “原来有个很重要的人,”我说,“他就是这个专业的。我想看看他之前每天都在干嘛。”

      我说这话的时候没有看他,看着屏幕上那个金字塔。光标在最后一行星号的末尾一闪一闪的,像一个永远写不完的句号。

      Ian 没有说话。他沉默了大概三四秒,那几秒里教室很安静。

      “那你看懂了吗?”他问。

      “还没。”

      他又笑了一下。他靠回椅背,双手交叉放在膝盖上,看着天花板,像在想什么事情,“你下周还来吗?”他问。

      “来,”我说,“这个作业我还没写完,gpa 比什么都重要。”

      他笑了,这次是真的笑了,没忍住笑出了声,很短的一声。

      他站起来,把椅子推回桌下,拿起自己的笔记本,走到门口,回过头来看了我一眼。

      “那下周见,”他说,“记得把作业先自己多改几遍再来。”

      “知道了。”

      他推开门,走了。走廊里的脚步声越来越远,然后消失了。教室里只剩我一个人,和屏幕上那个整整齐齐的金字塔。我盯着那几行星号看了很久,然后把电脑合上,塞进书包。
note 作者有话说
第26章 写代码好难

  • 昵称:
  • 评分: 2分|鲜花一捧 1分|一朵小花 0分|交流灌水 0分|别字捉虫 -1分|一块小砖 -2分|砖头一堆
  • 内容:
  •             注:1.评论时输入br/即可换行分段。
  •                 2.发布负分评论消耗的月石并不会给作者。
  •             查看评论规则>>