如果說程序設計是對現實生活的抽象,那麼如何培養這種能力?

因為最近在看圖論的一些演算法,很多問題需要別人的一點撥才能看出來隱藏在其中的關係,才能抽象出一個解決模型...

那麼請問如何培養自己把現實生活問題抽象成代碼(或者演算法一類的解決之道)的能力?有沒有很系統的方法?


多搞點複雜的項目,譬如說至少你參與的部分可以有5位數行的,然後你現在抽象和設計水平不行沒關係,被這種級別的工程噁心你個幾次,你就會知道演算法和設計模式的每一個東西到底是在什麼情況下被創建出來的了。

特別是題主你這種喜歡演算法的,找的東西不能太容易。譬如說你用C++寫個網站,處理HTTP那些噁心字元串到了1萬行,但是裡面的東西都太直接,你也是沒有機會去體驗演算法的。你可以去搞點什麼,譬如說幫人設計公交站換乘什麼的這些東西。


在《你好,C++》這篇連載中有這樣一段,也許可以回答你這個問題

你好,C++(1)C++是什麼?C++的「前世今生」

知道更多:編程是怎麼回事?

語言,是用來描述和表達現實世界的,C++作為一門編程語言也不例外。作為自然語言,為了描述現實世界中的事物,我們需要一些名詞(陳老師、曾學
生)。這些名詞在C++中就是變數(teChen、stZeng);同時這些名詞都有自己的種類(老師、學生),表現在C++中就是變數的數據類型
(Teacher、Student);為了表達事物之間的關係,我們需要一些動詞(指導),然後用這些動詞將各個事物連綴成句子(老師指導學生)。這些動
詞表現在C++中就是函數(Guide()),而由這些動詞連綴而成的句子在C++中就成了表達式
(huTeacher.Guide(huStudent););將多個句子按照一定的邏輯關係組合起來,就可以形成一篇文章。同樣,在C++中利用一定的
邏輯控制結構將多個表達式組合起來就形成了程序。

Teacher teChen; // 陳老師
Student stZeng; // 曾學生

teChen.Guide(stZeng); // 老師指導學生
// 用if條件控制結構組織表達式
if(stZeng.m_nScore &>= 60) // 如果學生的成績大於或等於60
{
stZeng.m_bPass = true; // 學生及格
}

通過C++編程語言與自然語言的對比,我們可以輕鬆地理解C++程序的含義。編程,就是將描述現實世界的自然語言翻譯成C++語言的過程,如此而
已。而這也提示我們,在編寫程序之前,不妨先把程序所要描述的事物(通常是某個數據處理過程)先用自然語言把它描述一遍,然後再翻譯成對應的C++編程語
言,就得到了最後的C++程序。


推薦閱讀:

如何高效深入的閱讀Redis的源碼?
主板上為什麼同時存在北橋晶元和南橋晶元?
calloc/malloc/realloc有什麼不同?
所有遞歸都可以改寫成循環嗎?
如何評價「消逝的光芒」這款遊戲 ?

TAG:編程 | 計算機 | 程序員能力 | 抽象思維 |