程序員該怎麼做,才能成為 coding 王者?
每當做編程題目時,大多數人都會靠基本的直覺,遵循一些固定的步驟來有效地解題。不管是有意還是無意,在做編程題目的時你會下意識地遵循一些步驟,在閱讀完這篇文章後你就可以將這些步驟和這篇文章聯繫起來,從而就可以更高效地解題。
因此在這篇文章中,我將討論解編程題的五個步驟。
作者 |Madhav Bahl
譯者 |彎月
責編 | 屠敏
出品 |CSDN(ID:CSDNNews)
這個世界需要的是開發者,我為什麼要在編程競賽上花時間呢?
我自己就是開發,但我發現大多數開發者(包括許多「非常」有能力的開發者)並不是太擅長做數據結構、演算法以及一些通用的問題。很可悲的是,許多人只不過是通過遵循一些基本的步驟來開發應用程序,或者做一些非常簡單的軟體,然後稱自己為「程序員」。
這個時代人人都能編程,所以深入學習數據結構和演算法不再是當今學生們的第一選擇,即使是那些本應非常重視這些領域的學生。
即使是我,作為一個開發者,也沒有參加過太多編程競賽,但我還是會盡量在演算法和數據結構上多花些時間,學習如何編寫高效的代碼,並鼓勵和推薦所有人都關注這個方面。
下面是一些例子,表明數據結構、演算法和編程競賽(一般意義上的)的內容能幫助學生們:
選擇好的大學
編寫高質量的代碼
編寫高效率的代碼(時間和空間複雜度)
最優地使用資源
邏輯推理
知名度(編程競賽的學生可以接觸到巨大的社區)
機遇(大量的編程競賽)
編程的過程有無限的樂趣
「編程教你怎樣面對大問題。」——Jack Dorsey
現在進入正題。
做編程題時的五個步驟
幾天前在做一道編程題時,我發現我在解題時都會遵循一個固定的模式。我又做了幾道題,並寫下了解題前後我腦海中的步驟。很驚訝的是我發現竟然真的有規律可循,我甚至都不知道我用了五個步驟,但有了這五個步驟,我就能更高效地解題了。
正如我前面說過的,很可能你也會下意識地使用這些步驟,但如果你進行總結,並意識地使用後,就會發現驚人的區別。
1.理解並分析問題
閱讀題目,開始思考題目,可能的話在紙上寫下給出的條件和你需要找出的條件。
問自己幾個問題:
能完全理解題目嗎?
能給非專業人士解釋清楚問題嗎?
需要多少輸入,每個輸入都是什麼?
每個輸入帶來的輸出是什麼?
能從題目中分解出幾個模塊嗎?
是否擁有足夠的信息?如果沒有,試著再理解一遍題目。
2.仔細閱讀示例輸入
仔細閱讀示例輸入,試著想出更多的示例輸入,這樣能幫你更好地理解題目,而且,這樣能讓你想清楚你的代碼需要處理多少種情況,可能的輸出或輸出範圍是什麼。
這裡我建議:
選擇非常簡單的輸入並找出輸出
選擇更複雜、更大的輸入,看看輸出是什麼,需要多少種用例
然後開始處理邊界條件:
不提供任何輸入,輸出應該是什麼
提供非法輸入,輸出應該是什麼
3.分解題目
對於大型問題來說這一步非常非常有幫助。這種情況下我建議遵循以下步驟:
試著手繪一份流程圖或 UML
將問題分解成模塊,或子問題
試著為每個子問題建立獨立的功能
按順序或按需要調用子問題(很可能一個函數會調用另一個函數),將它們連接起來
如果是真實世界的問題(如管理系統等),試著用類和對象來實現
4.開始解題和寫代碼
現在題目已經分析完,可以真正編寫代碼了。如果不能一次性解完,那麼可以先給一個簡單的部分寫代碼,隨著解決問題的深入,你會逐步發現更多細節,從而找出更多的思路。
只需要記住這三點,就一定能找到解法:
你的起點
你的位置
你的目標
而且,如果你是在面試中,不要浪費時間去解決整個題目再告訴面試官,應該不斷簡化問題,不斷告訴面試官你解決問題的方法。
告訴面試官你從哪裡入手
告訴他你在思考什麼方法
找出你在問題中面臨的最難的部分
有時可以忽略「最難」的部分,從簡單的子問題入手,這樣能給你帶來更多的時間去思考前者
解決完簡單的子問題後,試著用類似的方式解決困難的部分
解題時可能會想出更好的方法,要告訴面試官
5.回顧並學習
這部分是最重要的!解題完成後,一定要回顧下:代碼能否改進?有沒有另一種解題的方法?
不要做完就放棄了!這樣等於放棄你找出其他解法的可能性,也放棄了完整地探索問題的機會!
下面是在寫完代碼之後應該問自己的問題:
這段代碼是否能處理任何輸入(包括邊界情況)?
有沒有其他方法解決問題?
代碼是否有效?能否更有效?
代碼是否可讀?
如果別人給你這段代碼,你能否理解?
性能能否提高?
能否利用其他演算法達到更好的結果?
除了這些問題之外,還要檢查同一題目其他人的解答,看看別人是怎樣完成的,這個過程中你會學到很多。
總結
本文討論了以下五個步驟:
分析並理解問題
仔細閱讀示例輸入和用例
將問題分解成子問題,或函數,或模塊
開始解題和編程
解題完成後,回顧代碼是否可以改進,是否有其他解題方法
以上,希望這篇文章可以提高你的解題技巧。
原文:https://hackernoon.com/how-to-approach-any-coding-problem-9230f3ad6f9
本文為 CSDN 翻譯,如需轉載,請註明來源出處。
熱 文推 薦
喜歡就點擊「好看」吧!


※為什麼最近「騷擾電話」明顯越來越多了?
※當我們在談論單測時我們在談論什麼
TAG:CSDN |