對程式設計師的一些個人建議

2021-05-22 19:35:28 字數 3485 閱讀 9101

答讀者問

以下內容摘自

冒號論壇

的乙個話題

,考慮其具有一定的典型性,故轉至

冒號空間

,希望能對更多的讀者有所幫助,也算是一種**重用吧。

讀者jee

之前在top language

裡的一位網友像我推薦您的《冒號課堂》,書中

eric

向您建議開設社群,我猜測可能會有,就找到您的部落格發現此地,很幸運您是乙個如此有責任心的作者。

我是一名沒有什麼理論基礎的不合格的計算機專業畢業生,畢業後卻對軟體方面技術非常感興趣,可能與個性有關。於是在這近

2年的找工作和工作過程中看了一些書,也和一些過來人聊過,總體來說讓我對軟體程式設計有了一點認識。在閱讀您的冒號課堂之前,我曾一度認為我所差的是經驗和一些諸如高階演算法之類的高階技術,

可現在,乙個用了乙個多月時間的夜晚閱讀《冒號課堂》之後的我發現我所差的不僅僅是那些,而是最基礎最根本的對計算機本身的認識,對數學的認識,對軟體工程的認識。

我不想能有速成一說,只想能夠現在正視自己,腳踏實地的一點一點的學習和進步,哪怕讓我自學

4年大學課程也未嘗不可,只是有些時候有點找不到乙個開始。我數學不好,作為一名程式設計師我想這是個令人沮喪的事實,我英語也不好,當看到蹩腳的一些翻譯著作後痛苦不已。我想嘗試著去改變這些,但是卻不知該如何去做,

您知道,作為一名已經進入社會的成年人,我需要承受一些生存的壓力和一些生活的負擔,我希望能更好的利用每天那抽出來的時間,所以望鄭暉老師能給我指出一條明道。

我一直沒有說我從事的語言和方向,因為我知道這並不是核心,也不是想從您這得到如何學習

xx語言等。萬分打擾,還望見諒。

作者hui答:

你提到的問題十分典型,我非常理解你的心情,同時也非常樂意分享一些個人的看法。

雖然你在言語之中流露出不少負面的情緒,但我看到的卻是正面的希望。首先,你對軟體技術很感興趣,而興趣是學習和工作的最大動力。一般說來,我也沒興趣回答那些對程式設計不感興趣者的有關程式設計的問題。一方面,我會勸他們改行,否則彼此都痛苦;另一方面,我建議的方法通常也不適合他們。其次,你很清楚地意識到自己在哪些方面不足,這是一切進步的基礎。許多程式設計師意識不到自己的無知,甚至自以為足夠有知,那又如何能進步呢?最後,你不指望任何捷徑,願意通過踏踏實實的學習來彌補不足。在浮躁之風盛行的當下,這點也是難能可貴的。

關於數學基礎,竊以為並非什麼太大的問題。幾乎每個得知我數學背景的人都會對我說:哦,學數學的人來學計算機自然容易啦。事實上,這種觀點雖然極為普遍,但也極為膚淺。本人從事數學14年(從本科算起)、從事計算機12年(與前者有部分重合),在這一點上還是比較有發言權的。事先說明,以下提到的數學不包括高中數學。其實大多數從事軟體開發的人員用不到太多的數學知識,他們只需要正常的邏輯思維能力和抽象思維能力。整天拿數學說事,要麼是無知,要麼是找藉口,要麼是裝高深。當然,我不否認一些高階演算法、計算機理論以及人工智慧等領域可能涉及到高深的數學知識(其實也只是圖論、組合數學、數論、概率論、計算幾何、抽象代數、數學邏輯等中的一小部分),但那畢竟只是少數。我也不否認自己的數學背景有助於對程式設計的理解,但投入產出比太低,不值得作為經驗來推廣。不過若想成為一位計算機科學家,那就另作別論了——這時數學懂得再多也會嫌少的。

倒是英語我希望你更重視些。我在

《冒號課堂》中

專門提過閱讀原著的必要性,而且你也意識到譯著的質量問題。建議不必特地去學習英語(你本來就會了,不是嗎?),只要堅持讀經典原著即可。其實,計算機方面的英文算是很容易的了,關鍵是克服自己的慣性和惰性。開始可能不習慣,看多了就習慣了。在此提醒一點,在閱讀時請有意識地培養自己對英語的語感,就像程式設計時要有意識地培養自己對程式語言的語感一樣。

總之,對於程式設計師來說,數學沒有人們認為的那麼重要,英語沒有人們認為的那麼不重要

再說說專業方面的問題。你提到願意重新自學大學課程,雖精神可嘉,但未必可取。從軟體(或建築)設計的觀點來看,這是bottom-up

法。作為學生,最好採用這種方法,但你已經參加工作了,所以我建議你更多地採用top-down

法。這當然不是輕視基礎知識,而是認為獲取知識最高效的方法莫過於按需(on demand)學習。在實際工作中意識到某個知識點的重要性,從而有針對性地彌補短板,這樣學習起來不僅更有效率,也更有興味。需要強調的是,絕不能只是「頭痛醫頭」,而要「拔蘿蔔帶出泥」。只有尋根究底、以點帶面,才能快速有效地建立起自己的知識結構體系。對於軟體開發這類實踐性很強的專業來說,該法尤其奏效。

話又說回來,這種專案驅動式的學習方法也是有一定侷限的。畢竟大多專案涉及的深度和廣度通常都很有限,單純憑此建立起來的知識體系不可能非常完善。這就需要平時有計畫地閱讀一些經典著作以加強深度,並定期瀏覽一些高質量的技術**以加強廣度。

以上談的都是一些較為巨集觀的建議,我想你需要的是更加具體的建議。《冒號課堂》上已經闡述了不少關於程式語言、程式設計正規化、設計原則方面的觀點,此處不復贅言。我想特別強調一點——把握抽象(abstraction)。事實上,無論是在書中還是本論壇中,我都不厭其煩地再三提到抽象的重要性,今後有時間還會深入地挖掘這一主題。對程式設計的語言、正規化、設計、實現體會得越深,對抽象體會得也越深。借用hakell的設計者之一paul hudak的一句略帶誇張的話(overstatement):「abstraction, abstraction, abstraction」 are the three most important things in programming

。一定會有人會問:難道程式語言就不重要了嗎?設計模式就不重要了嗎?演算法設計就不重要了嗎?那是他們尚未真正理解何為抽象——抽象不僅滲透在程式設計正規化之中,也滲透在程式語言之中;不僅反映在設計原則之中,也反映在設計模式之中;不僅體現在架構設計之中,也體現在演算法設計之中。

說來也怪,明明是想提「具體」建議的,偏偏又扯出了「抽象」,大概不是你想要的答案吧?既然你是計算機專業畢業的,又有一定的工作經驗,其實也不需要太過具體的建議。你的苦惱是找不到努力的方向,而這個方向恐怕還是得靠自己去尋找。建議試試兩種方法:研讀一本有趣的名著或開發乙個有趣的應用。只要深入其中,相信絕不會再為找不到方向而發愁,說不定倒會為方向太多而發愁呢。

最後,說句更實際點的話:如果平時能有意識地積累一些計算機以外的領域知識(domain knowledge),比如金融、電信、教育、企業管理等等,對提高個人在it業的核心競爭力也是大有裨益的。當然,前提是你有興趣或有條件獲得這些知識。

一家之言,希望能對你有所幫助。

擴充套件閱讀:

冒號課堂豆瓣

互動網購買

對程式設計師的一些建議

對程式設計師的一些建議 說起來真的感到很慚愧,都工作2年的人了,結果寫的 還是讓人一下子指出很多程式設計風格上的眾多問題 這個注釋寫的不好,明明是定義了void 函式,為什麼還要return 1呢。哎,看著別人指責自己的問題,心裡也是一肚子的苦水 專案趕的這麼緊,我寫的source如果都要revie...

對程式設計師的一些建議

首先,我想說的是,你的路你的人生要你自己決定,不要輕易的讓人幫你決定,那怕是你的家人。如果我們把所的問題一起談,那怎麼說也說不清楚,所以,請允許我 關鍵點分離原則 來分開說說。一 對技術的熱情 如果我們喜愛程式設計,喜愛技術的話,那麼,我們就會投入熱情,自己會去專研很多東西。就像你以前對某個東西痴迷...

對程式設計師的建議

不知不覺做軟體已經做了十年,有成功的喜悅,也有失敗的痛苦,但總不敢稱自己是高手,因為和我心目中真正的高手們比起來,還差的太遠。世界上並沒有成為高手的捷徑,但一些基 本原則是可以遵循的。1.紮實的基礎。資料結構 離散數學 編譯原理,這些是所有電腦科學的基礎,如果 不掌握他們,很難寫出高水平的程式。據我...