Golden Thumb

1-on-1 tutor of chosen kids
個人資料
正文

解決不了問題,可以繼續思考,可以討論,可以提問,但絕對不可以蒙。

(2019-09-25 13:29:15) 下一個

上次課教練布置的課後作業:HW: finish the 5x7 grid

阿賢沒費太多功夫就亮出亮作品。精美的網格,將來可以擴展成五子棋的棋盤。

教練:“Perfect!”

阿賢接著附上了源代碼。

教練:“The code looks clean and elegant. Good job.”

課開始了。

教練:“試試把網格往右邊推過去一些。”

阿賢想了一想,動手把originX的值從20改成50了。

let originX: CGFloat = 50

教練:“寫成20加上一個數更能表達咱們往右移的意圖,而且用個奇怪點的數更好,比如13 。”

let originX: CGFloat = 20 + 13

阿賢執行了一下程序,網格是往右邊平移了13個點位。卻出現了一個奇怪的問題,即每根豎線的底部都向下長長了一小節。

教練:“成爬蟲了。看看問題出在哪裏。”

阿賢看著這滿屏的代碼,一時無從入手。

教練:“阿賢現在就是個偵探了,如何破案?是不是要縮小範圍?假如要捉拿罪犯,範圍從城市縮小到區,區到小區,再到樓。是不是範圍越小越好?”

阿賢:“是的。”

教練:“好,我先幫你縮小範圍。你覺得是橫線出問題了,還是豎線出問題了?”

阿賢:“豎線。”

教練:“七根豎線好像都是類似的問題。如果能發現第一根豎線的問題,會不會對解決所有豎線的問題有幫助?”

阿賢:“會。”

教練:“那你能不能找到畫第一根豎線的代碼?這樣範圍就小到一個線了。找到後咱們可以把代碼注釋掉,驗證一下是不是第一根豎線。”

阿賢奮力地找著。兩三分鍾過去了。阿賢對代碼對敏感性不強,可以理解。

教練:“我有個笨辦法。代碼的上半部分是橫線,一根一根數下來,就到豎線了。”

教練話音未落,阿賢:“我就是這樣數的。”

阿賢把相應的兩行代碼注釋掉,結果是第二根豎線消失了。

教練:“說明是前一根,對不?”

阿賢做了調整,第一根豎線消失了。找到要聚焦的兩行代碼了。

教練:“咱們繼續縮小範圍好嗎?就像確定罪犯在樓裏的某個單元裏了,最好再知道是哪個房間。你覺得是上麵的點的坐標有問題,還是下麵的點的坐標有問題?”

阿賢:“我覺得是下麵的。”

教練:“好。我已經幫你一步一步把範圍縮得非常小了。還有最後一次縮小範圍的機會,你來吧。”

阿賢沒有辜負教練的期待:“我覺得第二個點的x坐標沒問題。應該是y坐標有問題。”

教練:“太棒了!那你說y是太大了還是太小了呢?”

阿賢:“太大了。”

教練加亮了這部分有問題的代碼:

originX + (CGFloat(cols-2) * cellSide)

教練一眼就看出來了應該是originY卻寫成了originX,所以隨著originX增加了13長腳了。

但阿賢看了半天還看不出所以然,還試圖用 -13 來對付過去:

originX + (CGFloat(cols-2) * cellSide) - 13

教練氣不過,舉了個例子說明嚴重性,並讓阿賢引以為戒。

教練:“實在看不出問題,就試著重新計算,重新寫唄。”

阿賢忙著整理思緒,用具體數字,而不是變量名,列出了基本正確的算式。這時候教練突然發現,表達式 “originX + (CGFloat(cols-2) * cellSide)”中居然藏著三處錯誤。

originX 應該是 originY

cols 應該是 rows

-2 應該是 -1

完全不著邊際,it doesn't make any sense! 阿賢的作業豎線部分是蒙對的,是湊出來的。

教練:“啊?!我居然完全被美麗的結果蒙蔽了。三處地方完全不合理,你卻能整出似乎完美的網格。你的騙術好高明啊。”

阿賢樂出聲來了:“哈哈哈,咯咯咯”。

下課時間到了。教練給阿賢發了如下信息:

解決問題時,不問為什麽,不想清楚邏輯聯係,而是拚湊出“答案”,這個要狠狠批評。重重地打一下自己的屁股。

解決不了問題,可以繼續思考,可以討論,可以提問,但絕對不可以蒙。

[ 打印 ]
閱讀 ()評論 (0)
評論
目前還沒有任何評論
登錄後才可評論.