摘要: 每個程序員、或者說每個工作者都應該有自己的職業(yè)規(guī)劃,如果你不是富二代,不是官二代,也沒有職業(yè)規(guī)劃,希望你可以思考一下自己的將來。 每個程序員、或者說每個工作者都應該有自己的職業(yè)規(guī)劃,如果你不是富二代,不是官二代,也沒有職業(yè)規(guī)劃,希望你可以思考一下自己的將來。今天給大家分享的是一篇來自騰訊C/C++架構師對普通程序員的職業(yè)建議,希望對你有啟發(fā)。 對于大多數(shù)的程序員,可以分為以下三個階段 第一個階段三年 : 代碼里沒有人的思維 我認為三年對于程序員來說是第一個門檻,這個階段將會淘汰掉一批不適合寫代碼的人。這一階段,我們走出校園,邁入社會,成為一名程序員,正式從書本上的內(nèi)容邁向真正的企業(yè)級開發(fā)。我們知道如何團隊協(xié)作、如何使用項目管理工具、項目版本如何控制、我們寫的代碼如何測試如何在線上運行等等,積累了一定的開發(fā)經(jīng)驗,也對代碼有了一定深入的認識,是一個比較純粹的Coder的階段。一個比較明顯的分水嶺就是初學人員在用計算機的思維寫代碼,而有一部分人精益求精,開始在用藝術的思維寫代碼,比如我接觸到一個朋友在群里問的問題: 如果你認為這是一個初學人員常見的一個問題,而我是認為很多人染上了江湖惡習或者梁山好漢的臭氣一樣,一者是喜歡在代碼里???,二者是隨意隨性,只管實現(xiàn)了功能了事。所以一個程序員是否能繼續(xù)深入到第二個階段,需要的是系統(tǒng)地知識和閱讀優(yōu)秀代碼的能力,比如數(shù)據(jù)結構、linux系統(tǒng)、各種組件(如redis、mysql、zookeeper),了解了應用程序如何調(diào)用周邊系統(tǒng)的接口,以及學習了一點周邊系統(tǒng)一般的抽象方法。 第二個階段五年 : 不夠深,沒有追求 我認為五年又是區(qū)分程序員的第二個門檻。有些人在三年里,除了完成工作,在空余時間基本不會研究別的東西, 熱衷于研究各種技術實現(xiàn)細節(jié)、看了N多好書、寫一些博客、在Github上分享技術,但是大多都是人云亦云,沒有技術的鑒別能力,沒有深度的思考能力。 比如出去面試的時候: 面試官:熟悉TCP不? 程序員:熟悉! 【PS心理活動】嘿嘿!我這幾天在偷偷看了TCP的三次握手四次揮手。 面試官:TCP的TIME_WAIT狀態(tài)是怎么回事,如何解決? 程序員:TIME_WAIT,我記得書上是這么說的~~~。 【PS心理活動】媽呀,都不按套路出牌啊,手心開始有漢,渾身開始不舒服...... 面試官:你們這個游戲面臨高并發(fā)時,網(wǎng)絡IO處理的模型是怎么設計的。【PS心理活動】沒有深入了解TCP也沒有關系,可能業(yè)務不涉及,問點跟項目相關的。 程序員:哦,我們當時采用多線程的設計,每個線程負責一個連接的socket,而且用了緩存隊列。【PS】終于問了我熟悉點的,這個項目的主程跟我關系好,給我講解了他的代碼。 面試官:嗯,那你還熟悉其它的IO模型不? 程序員:我們那個項目夠用了,沒有嘗試過其它模型了。 這就是典型的菜B,你要說他菜他一定不服你,甚至口水戰(zhàn)就要來了。 我想說“是故非澹漠無以明志,非寧靜無以致遠?!?一個人技術是否牛逼,在氣質(zhì)上都會不一樣,虛懷若谷,大智若愚,不疾不徐,或者目光如炬,才思敏捷。當你深入了解,旁征博引,深入思考和測試才能逐步深入技術。 還有一類人以為會一些設計模式就是架構設計,會用各種組件拼接就是架構,跟你滿嘴的springMVC,redis,mysql等等,可是當你提起系統(tǒng)性能、業(yè)務可擴展性、系統(tǒng)一致性時,似乎也聽見過一些設計,但是當寫起代碼來全然不顧,然后又一堆的BUG解都沒有辦法解。 這些人里只有一小撮人能在五年后具備在技術上獨當一面的能力并且清楚自己未來的發(fā)展方向,從一個Coder逐步走向系統(tǒng)分析師或是架構師,成為項目組中不可或缺的人物,而其余絕大部分人會。停止不前,甚至陷入深深的憂患當中,奈何已成溫水中的青蛙。 第三個階段十年 : 登堂入室 十年又是另一個門檻了,轉行或是繼續(xù)做一名程序員就在這個節(jié)點上。如果在前幾年就抱定不轉行的思路并且為之努力的話,那么在十年的這個節(jié)點上,有些人必然成長為一名對行業(yè)有著深入認識、對技術有著深入認識、能從零開始對一個產(chǎn)品進行分析的程序員,這樣的人在公司基本擔任的都是CTO、技術專家、首席架構師等最關鍵的職位,這對于自己絕對是一件榮耀的事,當然老板在經(jīng)濟上也絕不會虧待你。 我認為隨著工作年限的增長、對生活對生命認識的深入,應當不斷學習思考 關于專業(yè)技能 程序員應該具備的技能 我這里要說明一下,以下列舉的內(nèi)容不是都要會的東西。但是如果你掌握得越多,那么你的架構設計能力就更強。 一.源碼分析專題 數(shù)據(jù)結構:紅黑樹、平衡二叉樹、B樹和B+樹、布隆過濾器、KMP算法 設計模式:責任鏈模式、發(fā)布訂閱模式、Reactor模式、過濾器模式、代理模式、工程模式 開源源碼分析:nginx、zeroMQ 詳細介紹源碼中所用到的經(jīng)典設計思想,看看大牛是如何寫代碼的,提升技術審美、提高核心競爭力。 二.分布式架構 架構實戰(zhàn):斗魚視頻直播技術核心揭秘、網(wǎng)易門戶高負載均衡實現(xiàn)、淘寶海量數(shù)據(jù)存儲引擎、open api設計。 架構中間件:分布式RPC框架 、分布式MQ 架構策略:一致性、可靠性、可擴展性、高并發(fā)海量數(shù)據(jù)設計。 架構原理:消息驅動式架構設計、動態(tài)域名做高負載均衡、P2P去中心化。 作為技術開發(fā)者,如何去應對技術變革帶來的技能危機?;趥鹘y(tǒng)架構到分布式架構演變過程所帶來的技術變革進行全面深入講解。在技術深度和技術廣度上得到飛躍的提升。 三.集群架構專題 mysql、redis、mongdb、nginx + lvs、zookeeper集群。 面對海量的數(shù)據(jù)、高并發(fā)的請求,集群保證水平可擴展性,保證系統(tǒng)可靠性是唯一的途徑。 四.linux系統(tǒng) 深入內(nèi)核層面理解系統(tǒng),理解系統(tǒng)架構設計,使用一系列的工具深入挖掘系統(tǒng)瓶頸,而不是人云亦云的優(yōu)化和架構設計。 五.工程化專題 六.性能調(diào)優(yōu) 七.音視頻專欄 不管是剛入門的小白,還是才高八斗的資深開發(fā)、架構,你都需要從這里開始對于來說小白可以快速提升對于資深開發(fā)人群可以加分 以上就是我要說的內(nèi)容,希望以上的內(nèi)容可以幫助到正在默默艱辛,遇到瓶頸且不知道怎么辦的程序員們,希望大家在往后的工作與面試中一切順利。 |
|