解決程式設計難題的實用方法指南 - praeclarum

banq發表於2022-04-20

我有時發現自己需要編寫一些程式碼,但我不知道如何寫。你有過這樣的經歷嗎?以下是我在遇到困難時採取的步驟。這裡沒有巨大的啟示,只是硬性規定的建議。

在輸入任何程式碼之前,認真思考這個問題幾個星期。

輸入一個函式或寫一個有你需要的輸入和輸出的類。

把函式分解成多個有明確目標的步驟。你可能不知道如何實現這些目標,但這是你未來的自己的問題。現在,你只是想寫出高層次的演算法。

為每一個步驟建立一個函式,並在其中丟擲新的NotImplementedException()。它們的名字應該很長,而且要有解釋,對它們的預期應該沒有問題。如果你不知道怎麼寫,也沒有關係。

現在,去實現這些函式中的幾個。你知道它們並不都是困難的。有些甚至是有趣的! 建立起你的信心,實現那些簡單的函式。取得進展的感覺很好,它可以讓你大腦的分析部分在後臺執行一會兒,而你則專注於瑣碎的數字型別和檔案IO。

是時候解決一些較難的函式了。就像你之前所做的那樣,進入每一個問題,並將問題分解成若干步驟。你是對的,我要說的是。沖洗和重複。繼續將這些困難的問題分解成步驟。把每個步驟變成一個有明確名稱的函式。實施容易的問題。然後再把困難的問題分解成步驟。一次又一次地這樣做。你會驚訝於你能真正完成多少事情。

很快(哈哈)你就會有一個80%完整的解決方案,只剩下幾個討厭的函式丟擲NotImplemented。現在去搜尋你最喜歡的軟體包庫,或程式碼庫,或問答網站,或人工智慧程式設計助手的實現。你很有可能不是第一個需要這個特定函式或部件的人。找到一些巨人,爬到他們上面,然後大叫 "我靠,世界上有很多聰明的程式設計師!"

好了,你已經搜遍了網路,但你仍然有幾個討厭的NotImplemented異常。現在是時候檢查一下那些科學家了。在arXiv中輸入你的問題陳述的每一個SEO變體。當然,其他人也曾研究過與你試圖解決的問題相關的問題。他們很可能會提供一些見解或觀點的轉變,以幫助你將你的問題重塑為可解決的問題。就這樣做。重新構思你的問題,把那些 "不執行 "的問題解決掉。

現在你有麻煩了。如果你仍然有一些沒有實現的例外,而且沒有巨人可以站在上面,也沒有學者在這個特定的領域裡糾纏不休,那麼這一切就取決於你。大膽思考。跳出框框思考。你的職業生涯就靠它了。(開個玩笑,我希望。)也許洗澡可以幫助你思考?

我認為這些是所有程式設計師都會採取的步驟,但有時把它說出來也不錯。

我特別重視函式分解。函式是一個強大的抽象,不僅僅是為了少寫程式碼,也是為了思考問題。

請不要誤解我對 "函式 "一詞的使用,認為它只是指那些函式式程式設計師喜歡的東西。我指的是任何資料轉化器:從低階的lambdas到帶狀態的IO處理的單體物件。

 

相關文章