程式設計師該怎麼做,才能成為coding王者?

AI科技大本營發表於2019-02-05

每當做程式設計題目時,大多數人都會靠基本的直覺,遵循一些固定的步驟來有效地解題。不管是有意還是無意,在做程式設計題目的時你會下意識地遵循一些步驟,在閱讀完這篇文章後你就可以將這些步驟和這篇文章聯絡起來,從而就可以更高效地解題。因此在這篇文章中,我將討論解程式設計題的五個步驟。


640?wx_fmt=jpeg


作者 | Madhav Bahl

譯者 | 彎月

責編 | 屠敏

出品 | CSDN(ID:CSDNNews)


這個世界需要的是開發者,我為什麼要在程式設計競賽上花時間呢?


我自己就是開發,但我發現大多數開發者(包括許多“非常”有能力的開發者)並不是太擅長做資料結構、演算法以及一些通用的問題。很可悲的是,許多人只不過是通過遵循一些基本的步驟來開發應用程式,或者做一些非常簡單的軟體,然後稱自己為“程式設計師”。


640?wx_fmt=jpeg


這個時代人人都能程式設計,所以深入學習資料結構和演算法不再是當今學生們的第一選擇,即使是那些本應非常重視這些領域的學生。


即使是我,作為一個開發者,也沒有參加過太多程式設計競賽,但我還是會盡量在演算法和資料結構上多花些時間,學習如何編寫高效的程式碼,並鼓勵和推薦所有人都關注這個方面。


下面是一些例子,表明資料結構、演算法和程式設計競賽(一般意義上的)的內容能幫助學生們:


  1. 選擇好的大學

  2. 編寫高質量的程式碼

  3. 編寫高效率的程式碼(時間和空間複雜度)

  4. 最優地使用資源

  5. 邏輯推理

  6. 知名度(程式設計競賽的學生可以接觸到巨大的社群)

  7. 機遇(大量的程式設計競賽)

  8. 程式設計的過程有無限的樂趣

“程式設計教你怎樣面對大問題。”——Jack Dorsey


現在進入正題。


做程式設計題時的五個步驟


幾天前在做一道程式設計題時,我發現我在解題時都會遵循一個固定的模式。我又做了幾道題,並寫下了解題前後我腦海中的步驟。很驚訝的是我發現竟然真的有規律可循,我甚至都不知道我用了五個步驟,但有了這五個步驟,我就能更高效地解題了。


正如我前面說過的,很可能你也會下意識地使用這些步驟,但如果你進行總結,並意識地使用後,就會發現驚人的區別。


1.理解並分析問題


閱讀題目,開始思考題目,可能的話在紙上寫下給出的條件和你需要找出的條件。


問自己幾個問題:


  • 能完全理解題目嗎?

  • 能給非專業人士解釋清楚問題嗎?

  • 需要多少輸入,每個輸入都是什麼?

  • 每個輸入帶來的輸出是什麼?

  • 能從題目中分解出幾個模組嗎?

  • 是否擁有足夠的資訊?如果沒有,試著再理解一遍題目。


640?wx_fmt=png


2.仔細閱讀示例輸入


仔細閱讀示例輸入,試著想出更多的示例輸入,這樣能幫你更好地理解題目,而且,這樣能讓你想清楚你的程式碼需要處理多少種情況,可能的輸出或輸出範圍是什麼。


這裡我建議:


  • 選擇非常簡單的輸入並找出輸出

  • 選擇更復雜、更大的輸入,看看輸出是什麼,需要多少種用例


然後開始處理邊界條件:


  • 不提供任何輸入,輸出應該是什麼

  • 提供非法輸入,輸出應該是什麼


640?wx_fmt=jpeg


3.分解題目


對於大型問題來說這一步非常非常有幫助。這種情況下我建議遵循以下步驟:


  • 試著手繪一份流程圖或 UML

  • 將問題分解成模組,或子問題

  • 試著為每個子問題建立獨立的功能

  • 按順序或按需要呼叫子問題(很可能一個函式會呼叫另一個函式),將它們連線起來

  • 如果是真實世界的問題(如管理系統等),試著用類和物件來實現


640?wx_fmt=png


4.開始解題和寫程式碼


現在題目已經分析完,可以真正編寫程式碼了。如果不能一次性解完,那麼可以先給一個簡單的部分寫程式碼,隨著解決問題的深入,你會逐步發現更多細節,從而找出更多的思路。


只需要記住這三點,就一定能找到解法:


  • 你的起點

  • 你的位置

  • 你的目標

640?wx_fmt=png

而且,如果你是在面試中,不要浪費時間去解決整個題目再告訴面試官,應該不斷簡化問題,不斷告訴面試官你解決問題的方法。


  • 告訴面試官你從哪裡入手

  • 告訴他你在思考什麼方法

  • 找出你在問題中面臨的最難的部分

  • 有時可以忽略“最難”的部分,從簡單的子問題入手,這樣能給你帶來更多的時間去思考前者

  • 解決完簡單的子問題後,試著用類似的方式解決困難的部分

  • 解題時可能會想出更好的方法,要告訴面試官


5.回顧並學習


這部分是最重要的!解題完成後,一定要回顧下:程式碼能否改進?有沒有另一種解題的方法?


640?wx_fmt=jpeg


不要做完就放棄了!這樣等於放棄你找出其他解法的可能性,也放棄了完整地探索問題的機會!


下面是在寫完程式碼之後應該問自己的問題:


  1. 這段程式碼是否能處理任何輸入(包括邊界情況)?

  2. 有沒有其他方法解決問題?

  3. 程式碼是否有效?能否更有效?

  4. 程式碼是否可讀?

  5. 如果別人給你這段程式碼,你能否理解?

  6. 效能能否提高?

  7. 能否利用其他演算法達到更好的結果?


除了這些問題之外,還要檢查同一題目其他人的解答,看看別人是怎樣完成的,這個過程中你會學到很多。


總結


本文討論了以下五個步驟:


  1. 分析並理解問題

  2. 仔細閱讀示例輸入和用例

  3. 將問題分解成子問題,或函式,或模組

  4. 開始解題和程式設計

  5. 解題完成後,回顧程式碼是否可以改進,是否有其他解題方法


以上,希望這篇文章可以提高你的解題技巧。 


原文:

https://hackernoon.com/how-to-approach-any-coding-problem-9230f3ad6f9

本文為 CSDN 翻譯,如需轉載,請註明來源出處。


徵稿

640?wx_fmt=png

推薦閱讀:


640?wx_fmt=png

點選“閱讀原文”,開啟CSDN APP 閱讀更貼心!

相關文章