關於程序員成長的一點思考,程序員必須得看
程序員的咱們,是否想過從此的路該怎麼走、如何發展、技術怎樣提升?其實這也是我一直在思考的問題。下面就此問題,分享下個人見解。由於我閱歷有限,有什麼說的不對的,你們一塊兒噴!
1、程序員應該打好基礎
1. 如今開發工具衆多、語言氾濫,常常聽人說「不學C,C++神馬都是浮雲」、「C,C++纔是萬王之王」,C,C++就真比PHP、Lua、AS、JAVA牛嗎?
我一哥們學java+android仍是從黑馬程序員培訓出來的,月薪就8K多了?難道他學的是C,C++?
(看到這裏確定不少人好奇了,這麼牛?培訓出來真的這高工資?騙人的把?這我也很少說,推薦個比較經典java基礎教程給大家看看,感興趣的能夠本身看下,看過以後你就會明白。)
基礎教程下載:
點擊下載
再推薦一個教程分享的訂閱:
點擊訂閱
2. 有些人會說大學學的東西是膚淺的,是沒有用的。想一想看,在學校的時候我也常常這麼想,但出來後才知道這些東西有多麼重要。不過大學學得再紮實,出來後仍然是須要再溫習過的。由於上學畢竟實踐少,所學不能所用,計算機是個應用驅動的學科。咱們再來看「計算機考研」專業課考的什麼(這裏並非說考研就必定 好),「數據結構」、「計算機組成原理」、「操做系統」、「計算機網絡」。「數據結構」、「計算機組成原理」這兩門課程擺在前面,可見其重要性,分別是軟 件和硬件最重要的兩門基礎課。我不相信不學好「數據結構」可以把性能優化作得很好。若說本身學好了,能不看書、不查資料,說出「B+樹、B-數的應用和區 別」、「KMP爲何能快速匹配字符串」、「快速排序在什麼狀況會蛻變爲o(n^2)」嗎?
我也不相信不學透「計算機組成原理」能搞通匯編和內核,不知道「CPU和I/O的交互過程」、「指令的執行通路」、「CPU運算器的工做原理」,如何寫出 高效的彙編代碼?如何弄清楚內核中「中斷」、「GDT」、「IDT」這些概念,實模式保護模式如何切換?「操做系統」和「計算機網絡」則是兩門很是重要的 支撐學科,信號量爲何是最快的同步方式、線程調度比進程調度快、爲何要作內存緩衝池,這些都是來自「操做系統」。而「計算機網絡」主要是講述 TCP/IP的,爲何德問「對於一個具備幾百萬粉絲的用戶,數據如何實時投遞到全部用戶?」要使用多播的方式解決、「如何計算出C/S單向的延遲?」發 送ICMP包測量,這些都是來自它。
咱們大學學的課程通過多少國內外知名學者專家研究過的,因此計算機理論課是基礎,是解決問題的根源。「算法分析與設計」是「數據結構」的延 伸,Divide Conque、貪心、動態規劃對於程序算法的優化有很大的指導意義。一樣,「計算機體系結構」也是「計算機組成原理」的拓展。其次,「編譯原理」、「數據 庫」、「軟件工程」等學科的重要性也不言自白。
2、實踐、理論、再實踐
做爲程序員的咱們,知足於實現一個程序功能的快感,得意於從網上下載別人的代碼加到本身的程序中,陶醉於本身寫了上百萬行代碼。有想過本身是在創造嗎,仍是裝配車間的技術工人。日趨成熟的開發工具,逐步把有豐富想象力的咱們淪爲奴隸。從網上下載個壓縮庫就用着、成熟的加密算法直接使了、包裝好的類庫就 include。爲什麼不探究其算法實現、性能優化、底層機制。有人會說很「難」啊!到底是難,仍是掌握的知識不夠,仍是理論沒有達到必定高度。
很難想象不學習「計算機圖形學」,去作3D項目客戶端圖形算法的後果;不研究「數據挖掘」去分析大量客戶數據會作得多好;不攻讀「機率論」、「線性代 數」、「人工智能」去設計AI有多麼智能。不少人說,這些東西遊戲用不着啊,學了有什麼用?我認可初學編程時,這些東西只是高談闊論。若咱們工做了n年後,還只是熟練地作些coding,和剛畢業的學生有什麼區別。編程工具只是「工具」而已,別忘記了咱們是改變世界的程序員,不提升理論,何以創新、公司 拿什麼優點和別人去競爭。
「研發」是「研究」和「開發」兩大塊,只作開發,不作研究,對我的和公司都只是短時間目標, 固然理論提升了,是須要投產的,否則理論很快淪爲「空想社會主義」,公司白花銀子養活研究部門。「實踐、理論、再實踐」,符合馬克思主義哲學思想,也是計 算機學科的價值體現。真正的計算機科學家不是隻搞理論的,理論是要應用到產品中的。工程師也不是隻作開發不作研究的,是要應用創新,理論微創新。計算機科學家相比於程序員,主要是數學功底至關深厚,因此他們能在理論上有突破。
3、技術、管理兩路線。
1. 「遊戲能玩多深,技術就能作多深」,這句話說得很好。只由於咱們執着,因此在遊戲中能攻破一層層難關,凌晨二、3點還能練級打裝備。若能走回正道,作技術就想玩遊戲同樣,技術作不深纔怪呢。走技術路線的人,必定是對技術癡迷的人。但要走得長遠,咱們須要把技術作穿、作透。如何作穿、作透?計算機底層(C、 彙編、逆向工程、驅動、內核)、計算機算法(網格計算、音視屏壓縮、語音識別…)、架構(軟件工程、跨平臺、多語言等)都要有涉及。只有咱們掌握了這些,才能作到「看問題看到本質」、「思想有穿透力」。這些纔是最寶貴的,須要沉澱下來,僅僅靠作項目、寫代碼是沒法達到的。
2. 對於走管理路線的人,是具備「完成任務爲第一要務」、「有計劃、善於管理時間」、「善於與人打交道」性格特色的人, 重要的是「綜合素質」,而不是「專攻」。可是這些都是能夠改變的,不少公司也會選擇技術作得最優秀的人作管理。因爲我是一個技術癡迷狂,管理這塊,我沒有發言權,不作多解釋。
4、心態。
1. 人活在世界上在於奉獻而不是索取,幫助別人是一件很快樂的事情, 做爲程序員的咱們心胸要開闊些,低調些、虛心些,公司的李老師、老張就是一個心胸很寬廣、低調的人,值得學習,三人行必有我師,咱們熟悉的只是本身的這一塊、這個領域,不懂的地方要虛心向別人請教, 我見過浮躁、過於自信的人,也見過作人低調的人,發展結果徹底不一樣。
2. 樂於分享,支持開源。這是一個很須要心胸、氣度的事,也是決定我的、公司發展快慢的重要砝碼。技術發展突飛猛進,總守着本身手中的那點技術,得不到長足的發展。中國兩千年的封建歷史、門戶關閉政策還不夠慘痛嗎?「技術是交流和玩出來的」,這是銳安龍哥告訴個人。他也是一個大黑客、正義的黑客,開源是黑客的 一項重要精神,因此黑客能引領技術。
3. 每日學習。不少人認爲畢業了就不用學習了,或者不用那麼那麼地學習了。這是一個很是很是錯誤的思想,不管什麼時候何地都要把本身當成菜鳥、應屆生地去學習。書本是學習的一個捷徑,Google、百度解決問題是快,但不是系統化地學習。看書要了解做者背後的知識底蘊,想想這個問題得解決做者是怎麼想到的,這樣 比單純解決一個問題更進一層。更重要的是聆聽做者的心聲,感覺大師的心態。最後給你們推薦「黑客與畫家」這本書,寫得真的很好,老吳不提,我還不知道。
歡迎關注本站公眾號,獲取更多信息