程序員的八個級別,來看看你在處于什麽階段?

清遠課程 2024-06-01 05:00:39
1、菜鳥

邁進這層樓的門檻是很低的。基本上懂計算機的基本操作,了解計算機專業的一些基礎知識,掌握一門基本的編程語言如C/C++,或者Java,或者JavaScript,...,均可入門邁進這層。

如計算機專業畢業生,大量的通信、自動化、數學等相關專業的轉行人士。

這類人員不管是不是計算機科班出身,基礎如何,他們對編程有著特殊的愛好,他們可能會是一些很有前途的學生或實習生。

他們完全是靠熱情和承諾來編程。興趣永遠是最好的老師,也是最好的一件事,因爲興趣而引發的熱情通常會讓這些程序員成爲“骨幹程序員”。

所以,菜鳥們總是在努力學習,希望爬更高的一層樓去。

2、大蝦

從第1層爬到第2層相對容易一些,以C/C++程序員爲例,只要熟練掌握C/C++編程語言,掌握C標准庫和常用的各種數據結構算法,掌握STL的基本實現和使用方法,掌握多線程編程基礎知識,掌握一種開發環境,再對各種操作系統的API都去使用一下,搞網絡編程的當然對socket編程要好好掌握一下,然後再學習一些面向對象的設計知識和設計模式等,學習一些測試、軟件工程和質量控制的基本知識,大部分人經過2~3年的努力,都可以爬到第2層,晉升爲"大蝦"。

3、牛人

由于"大蝦"們經常被一些疑難問題給卡住,他們只好繼續學習,將原來所學的知識進一步熟練掌握。

以軟件設計來說,光懂結構化設計、面向對象設計和一些設計模式是不夠的,還要了解軟件架構設計、交互設計、面向方面的設計、面向使用的設計、面向數據結構算法的設計、情感化設計等,否則是很難進到這個樓層的。

當然除了上面說的知識外,大蝦們還需要去學習各種經驗和技巧。當然這點難不倒他們,現在出版的書籍衆多,網絡上的技術文章更是不勝數,然後再去各種專業論壇裏泡一泡,把這些書籍和文章中的各種經驗、技能、技巧掌握下來,再去學習一些知名的開源項目如Apache或Linux操作系統的源代碼實現等。此時對付一般的疑難問題通常都不在話下,菜鳥和大蝦們會覺得你很"牛",你也就爬到了第3層,晉升爲"牛人"了。

在國內, 一旦成爲"牛人",通常可以到許多知名的公司裏去,會被稱爲“架構師”"首席架構師"或者"首席xx學家"。

4、大牛

從牛人進階成爲大牛並不容易,就像是百分制,到及格線比較輕松,但是60分到80分就會更難了。要成爲大牛的話,你必須要能做牛人們做不了的事情,解決牛人們解決不了問題。比如牛人們通常都不懂寫操作系統,不會寫編譯器,不懂得TCP/IP協議的底層實現,如果你有能力將其中的任何一個實現得象模象樣的話,那麽你就從牛人升級爲"大牛"了。

要成爲"大牛"並不是一件簡單的事情,需要付出比牛人們多得多的努力,一般來說,至少要看過200~400本左右的專業書籍並好好掌握它,除此之外,還得經常關注網絡和期刊雜志上的各種最新信息。

5、專家

當大牛們真正動手做一個操作系統或者類似的其他軟件時,他們就會發現自己的基本功仍然有很多的不足。這個時候就要求他們會進行基礎研究,主要的內容就是研究非數值"計算"。

非數值計算可是一個非常龐大的領域,不僅時下熱門的"多核計算"與"雲計算"屬于非數值計算範疇,就是軟件需求、設計、測試、調試、評估、質量控制、軟件工程等本質上也屬于非數值計算的範疇,甚至芯片硬件設計也同樣牽涉到非數值計算。如果你還沒有真正領悟"計算"二字的含義,那麽你就沒有機會進到這層樓來。

在這個時候,牛人和大牛都要仰望你,但是到這裏,你的知識來源都是別人的,是在別人知識的基礎上改寫。你自己並沒有多少自己的知識和思想分享給別人,如果想要進入另一個階段,還需要繼續往上爬。

6、學者

當"專家"們想繼續往上一層樓爬時,他們會發現專業性的學習對于他們來說是很簡單的,攔路虎是“創新”。像上面提到的,想要在專家的基礎上更近一步,就需要産生自己的知識和思想。

但學習的都是一樣的東西,怎麽去創新呢?古人有一句話“溫故而知新”,也就是工作當中說到的“複盤”。

以查找爲例,並不是去天天盯著那些複雜的查找結構和算法進行研究,你需要做的是將二分查找、哈希查找、普通二叉樹查找等基礎性的知識好好地複習幾遍。

對任何一種簡單的東西,你需要考慮各種各樣的需求,以需求來驅動研究。最後你將各種最基礎性的查找結構和算法都了然于胸後,或許某天你再看其他更複雜的查找算法,或者你在散步時,腦袋裏靈光一現,突然間就發現了更好的方法,也就從專家晉升爲"學者"了。

學者所做的事情,通常都是在前人的基礎上,進行一些小的優化和改進。

這層樓裏所說的創新,是指學術層面的創新,是基礎研究方面的創新。

7、大師

成爲大師必須要有較大的貢獻。首先解決問題必須是比較重要的,其次你要比前輩們在某方面有一個較大的提高,或者你解決的是一個全新的以前沒有解決過的問題;最重要的是,主要的思路和方法必須是你自己提供的,不再是在別人的思路基礎上進行的優化和改進。

如,像Hoare一樣設計出一個快速排序的算法;或者像Eugene W. Myers一樣設計出了一個用編輯圖的最短路徑模型來解決diff問題的算法;或者像M.J.D. Powell一樣提出了一個能夠處理非線性規劃問題的SQP方法;甚至設計出一個像C++或Java一樣的語言......

以前在單核時代開發的各種算法,現在都需要改寫成並行的。數據結構與算法、圖像處理、數值計算、操作系統、編譯器、測試調試等各個領域,都存在大量的機會,可以讓你進到這層樓來,甚至有可能讓你進到更高一層樓去。

8、科學家

科學家向來都是一個神聖的稱號,要成爲科學家,你的貢獻必須超越大師,不妨舉一些例子。

如Dijkstra設計了ALGOL語言,提出了程序設計的三種基本結構:順序、選擇、循環,他是可以被稱爲科學家的。

類似的還有:

Don Knuth,奠定數據結構與算法這門學科的基礎;

巴科斯,發明Fortran語言,提出了巴科斯範式,對高級程序語言的發展起了重要作用;

Ken Thompson、Dennis Ritchie,發明Unix操作系統和功能強大、高效、靈活、表達力強的C語言,對操作系統理論和高級編程語言均作出重大貢獻。

......

看了上面列出的科學家的成就,你會發現,要成爲“科學家”,通常要開創一門分支學科,或者是這個分支學科的奠基者,或者在某個分支學科裏作出裏程碑式的重大貢獻。

0 阅读:0

清遠課程

簡介:感謝大家的關注