程序員如何讓自己的技術(shù)能力突飛猛進(jìn)?

一. 初學(xué)者如何自學(xué)

世界上偉大的人才都是孤獨(dú)的表箭,因此對(duì)于初學(xué)者在家自學(xué)要規(guī)避媽寶和社會(huì)人赁咙,一不要圍著家人扯不完的家事钮莲,二不要過度尋朋訪友,要留給自己連續(xù)彼水、成片的時(shí)間和精力崔拥,這很重要。

大學(xué)計(jì)算機(jī)凤覆、軟件和大數(shù)據(jù)等專業(yè)链瓦,會(huì)學(xué)習(xí)各種編程,每年不重樣的學(xué)習(xí)盯桦,其實(shí)這只是符合考試慈俯,并不符合編程規(guī)律,專精于一種語言的連續(xù)學(xué)習(xí)拥峦,不斷訓(xùn)練編程思想才是關(guān)鍵贴膘,假期梳理很重要。你可以理解為掌握一門主流語言等于為自己創(chuàng)造了一件好產(chǎn)品略号,而這件好產(chǎn)品是肯定能在社會(huì)上找到很多買家刑峡。重點(diǎn):選擇看好書,尋找優(yōu)質(zhì)源代碼樣例進(jìn)行修改訓(xùn)練玄柠,嘗試構(gòu)建 Linux 環(huán)境突梦。

希望在 C 的路線發(fā)展,將來的機(jī)會(huì)領(lǐng)域是在系統(tǒng)層和硬件驅(qū)動(dòng)底層羽利,除了 C 語言之父的程序設(shè)計(jì)外宫患,推薦 Unix 高級(jí)環(huán)境編程和 Unix 網(wǎng)絡(luò)編程,懂得 Unix/Linux 的開發(fā)環(huán)境很重要这弧。

想走 Java 路線娃闲,Java 是最為通用的應(yīng)用層編程語言,但基礎(chǔ)一定是要掌握面向?qū)ο蟮毖纾扑]買本 Java 編程思想畜吊,靜下心看,邊看邊練户矢,除了寒暑假玲献,堅(jiān)持大學(xué)就看完它,這本書對(duì)初學(xué)者的編程和面向?qū)ο笏季S塑造很有效梯浪,別總想二十一天解決問題捌年,欲速則毀滅。

想走 C++路線挂洛,C++既能和 C 一樣搞系統(tǒng)底層礼预,還適合游戲、圖像虏劲、云計(jì)算和高性能組件等托酸,除了 Web 應(yīng)用褒颈,也算樣樣精通,但是 C++學(xué)成很難励堡,我身邊的朋友十年 C++開發(fā)經(jīng)歷谷丸,不認(rèn)為自己學(xué)懂了。因此 C++適合有恒心是人应结,初學(xué)者建議不要看 C++之父的程序設(shè)計(jì)刨疼,先從 C++Prmier 入門,若能入行了鹅龄,回報(bào)頗豐揩慕。

想走大數(shù)據(jù)路線,那么掌握分布式理論扮休、數(shù)據(jù)庫/NoSQL迎卤、Linux 服務(wù)端、網(wǎng)絡(luò)通訊都很重要肛炮,大數(shù)據(jù)技術(shù)可以通過 Java止吐、Python、SQL 等語言來操作數(shù)據(jù)采集侨糟、清洗、存儲(chǔ)和分析瘩燥,這是應(yīng)用需求秕重;也需要監(jiān)測(cè)、維護(hù)和優(yōu)化分布式多節(jié)點(diǎn)的 Linux 系統(tǒng)厉膀,這是運(yùn)維服務(wù)溶耘;還會(huì)延伸到數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)的 AI 領(lǐng)域服鹅。那么對(duì)于學(xué)習(xí)大數(shù)據(jù)技術(shù)的同學(xué)一定首選要認(rèn)清自己必須是個(gè)“雜食者”凳兵,推薦書籍:分布式系統(tǒng)概念與設(shè)計(jì)、TCP/IP 網(wǎng)絡(luò)經(jīng)典三卷企软、Linux Shell 命令與腳本庐扫、Java 編程思想、數(shù)據(jù)密集型計(jì)算仗哨、機(jī)器學(xué)習(xí)基礎(chǔ)形庭。學(xué)習(xí)順序:網(wǎng)絡(luò)知識(shí)-> Linux 知識(shí)->分布式知識(shí)->編程知識(shí)->數(shù)據(jù)技術(shù)知識(shí)->AI 算法知識(shí)。

二. Linux 怎么學(xué)

如果想要當(dāng)一名厲害的程序員厌漂,最好的老師其實(shí)就是了解你的操作系統(tǒng)萨醒,而選擇正確的操作系統(tǒng)是進(jìn)步的關(guān)鍵所在,對(duì)于程序員來講苇倡,操作系統(tǒng)的學(xué)習(xí)選擇非 Linux 莫屬富纸,從現(xiàn)在大趨勢(shì)來看囤踩,懂 Linux 就是必備技能了!

在長期的使用當(dāng)中晓褪,你從 Linux 身上能了解到 tcp/ip 協(xié)議堵漱,網(wǎng)絡(luò)連接與通訊,配置調(diào)參辞州,文件和權(quán)限怔锌,shell 命令和編程,性能觀測(cè)变过,進(jìn)程服務(wù)以及網(wǎng)絡(luò)端口埃元,等等,我從上大學(xué)開始玩 Linux媚狰,藍(lán)點(diǎn) Linux岛杀、中軟 Linux、Mandrive Linux崭孤、Debian Linux...类嗤,到現(xiàn)在二十年,老鳥一枚辨宠∫怕啵總之程序員學(xué)習(xí) Linux 操作系統(tǒng),要經(jīng)歷三個(gè)階段:

第一階段嗤形,從會(huì)安裝到圖形玩家也就是懂得各種發(fā)行版的安裝精偿,例如:Debian、Ubuntu赋兵、CentOS笔咽、Redhat、Suse 等霹期。然后開始在 Gnome叶组,KDE,fvwm(高級(jí)水平)各種桌面系統(tǒng)進(jìn)行美化和應(yīng)用體驗(yàn)历造。這就是 Linux 應(yīng)用和玩家級(jí)別甩十。

第二階段,從圖形到終端帕膜,這時(shí)候就要開始大量云服務(wù)枣氧,數(shù)據(jù)庫,應(yīng)用服務(wù)的安裝垮刹,配置和運(yùn)行达吞,讓自己達(dá)到 Linux 系統(tǒng)管理員級(jí)別。

第三階段荒典,從命令到編程酪劫,這個(gè)階段掌握了 Linux 的體系結(jié)構(gòu)吞鸭,可以搞定各種 Linux 策略配置,懂得了大量 shell 命令覆糟,這時(shí)候開始學(xué)習(xí) shell 編程和 Python 編程刻剥,讓 Linux 操作系統(tǒng)的所有問題都聽你調(diào)遣和部署,那么你就進(jìn)入到了 Linux 黑客階段滩字。

三. 如何提升編程能力

想成為高水準(zhǔn)的編程工匠需要經(jīng)過三個(gè)基礎(chǔ)方面的努力:1.看書造虏、 2.閱讀源代碼,3.代碼重構(gòu)麦箍。

JAVA漓藕、Linux 是我的擅長的核心領(lǐng)域,但我不排斥其他領(lǐng)域的技術(shù)書籍的學(xué)習(xí)和理解挟裂,包括:C/C++享钞、C#、Windows 編程诀蓉、Unix 網(wǎng)絡(luò)編程栗竖、Python 等。這是作為一位專業(yè)程序員應(yīng)該具有的基本素養(yǎng)渠啤。另外并不是編程技巧好就自以為是個(gè)牛人了狐肢,那你就錯(cuò)了,還要更多在軟件工程方面的去理解和感悟沥曹,那么人月神話处坪、敏捷開發(fā)、團(tuán)隊(duì)之美這類書籍就也需要多讀架专,多體會(huì),多在工程實(shí)踐中去理解玄帕。往往說一將無能部脚,累死三軍,不是說將軍的武藝不夠強(qiáng)裤纹,關(guān)鍵原因是將軍總是赤膊上陣委刘,不懂得指揮,團(tuán)隊(duì)就如無頭蒼蠅亂飛鹰椒,那么再優(yōu)秀的個(gè)人代碼技巧也抵不上一個(gè)團(tuán)隊(duì)稀爛的開發(fā)工程锡移。

閱讀源代碼,當(dāng)很多人只想著 ctrl+c/ctrl+v 趕緊解決完工好回家追王凱漆际、靳東的新劇時(shí)淆珊,而黑客潛質(zhì)的程序員,正在電腦面前閱讀著大師們的杰作奸汇,想從框架的源代碼中尋找到更優(yōu)解的答案施符,因此很多人只能稱之為碼農(nóng)往声。面對(duì) github 浩如煙海的大師之作,就好像電影《七宗罪》里面老警探對(duì)著圖書館的保安說:“先生們戳吝,我永遠(yuǎn)也不會(huì)懂浩销,有這么多書,知識(shí)的世界完全唾手可得听哭,可你們呢慢洋?整晚打撲克牌”,可能很多人看到會(huì)反駁我陆盘。沒有關(guān)系普筹,若有心人能體會(huì)到其中的奧秘,對(duì)人生發(fā)展定大有裨益礁遣。

我在 10 年前就看完了 JSF/MyFaces 80%的源代碼斑芜,Springframework Core 源代碼,那時(shí)候極為推崇 Rod Johnson 的編程風(fēng)格祟霍。去年把 Hadoop HDFS 的 Client 部分看了大半杏头。每當(dāng)閱讀完這些源代碼之后的幾年都會(huì)在相應(yīng)的工作中受益無窮,不僅僅是編程沸呐,還有對(duì)軟件架構(gòu)洞悉的能力極速提升醇王,這是千真萬確的事實(shí)。

再說說重構(gòu)的重要性崭添,當(dāng)你接手了一個(gè)項(xiàng)目寓娩,屎一樣的 if if if ... else else else ...,幾千行嵌套的方法體時(shí)呼渣,你是不是腦海中出現(xiàn)了萬只動(dòng)物棘伴。請(qǐng)相信這不是一個(gè)人的力量,而是無數(shù)和你一樣的程序員接手后經(jīng)歷了一樣的憤怒屁置,又不得不繼續(xù) if else 下去焊夸。這種爛代碼是對(duì)程序員群體最大的羞辱。自己的代碼永遠(yuǎn)有一個(gè)硬性要求蓝角,方法體絕不能超過 100 行阱穗,平均應(yīng)該在 10-20 行之間。一個(gè)類可以重構(gòu)為出更多的方法使鹅,解決不同方法的重復(fù)代碼揪阶,甚至成為一種代碼潔癖。

四. 如何變得卓越

我們對(duì)精英人才所作出的卓越事跡都會(huì)贊嘆不已患朱,實(shí)質(zhì)上他們經(jīng)歷的訓(xùn)練都是反人性的鲁僚。例如:面對(duì)擊打,普通人的意識(shí)是躲避、恐懼和憤怒蕴茴,但拳擊運(yùn)動(dòng)員的意識(shí)是閃躲并伺機(jī)反擊劝评;面對(duì)寫作,普通人的思維是淺層碎片化倦淀,但作家的思維是層次系統(tǒng)化蒋畜。達(dá)到專業(yè)的能力,必然要在身體撞叽、思維上經(jīng)歷痛苦姻成。程序員也是一樣,想要成為卓越愿棋,就要經(jīng)歷痛苦科展,所謂因興趣而生,也都是能撫慰這個(gè)痛苦過程的嗎啡而已糠雨。

那么怎樣才能成為卓越的程序員呢才睹?我提供的觀點(diǎn)是:不怕麻煩、代碼潔癖甘邀、成為模仿者琅攘。

先說不怕麻煩,學(xué)編程和其他技術(shù)的過程松邪,前方就是崎嶇的山路坞琴,平坦的路不多,除非你選擇放棄或安于一隅逗抑。我記得十幾年前安裝 Debian Linux 的時(shí)候剧辐,只給個(gè)基系統(tǒng),需要配置內(nèi)核與硬件的參數(shù)邮府,運(yùn)行起來才是熟悉 apt-get荧关,我深刻的記得我第一次 Debian 安裝成功我用了整整三天,特別是晚上褂傀,頭皮都發(fā)麻羞酗,可是成功跑起來 Gnome 后,我了解到 Linux 的軟件包體系都有什么了紊服。

還有一次 2010 年開發(fā)應(yīng)急指揮系統(tǒng),需要整合多少技術(shù)呢胸竞?Swing欺嗤、EJB3、MQ卫枝、語音調(diào)度設(shè)備(CTI煎饼、IVR)、MQ校赤、觸摸屏吆玖、WAS筒溃、DB2、語音識(shí)別沾乘、CentOS怜奖,麻煩吧!大半年的時(shí)間為團(tuán)隊(duì)夜以繼日的搭建調(diào)試翅阵,當(dāng)有一天看到身邊 10 個(gè) IP 電話通過 API 調(diào)用同時(shí)響起歪玲,并組成會(huì)議時(shí),觸摸屏的模擬電話狀態(tài)乖乖跟隨設(shè)備變化時(shí)掷匠,那種激動(dòng)無比的心情滥崩。

再說代碼潔癖,前面我聊過讹语,我對(duì)自己代碼方法體的要求極為嚴(yán)苛钙皮,不能超過 100 行,平均 10-20 行顽决,這不是寫到一大堆才干短条,而是寫一點(diǎn),實(shí)現(xiàn)一點(diǎn)擎值,再重構(gòu)一點(diǎn)慌烧。我現(xiàn)在寫代碼,只看 Log 輸出鸠儿,從不用調(diào)試屹蚊,很多功能代碼都是一次寫完就單元測(cè)試通過,大量的測(cè)試精力都留給了集成環(huán)境的反復(fù)測(cè)試进每。

還有一次是好幾年前我負(fù)責(zé)的系統(tǒng)是從內(nèi)網(wǎng)通過網(wǎng)閘實(shí)時(shí)取外網(wǎng) Kafka 的數(shù)據(jù)汹粤,當(dāng)時(shí)團(tuán)隊(duì)使用 Spring Streaming,海量數(shù)據(jù)下有 Bug田晚,不穩(wěn)定嘱兼,我就替代重寫了數(shù)據(jù)采集和流式處理框架,表現(xiàn)挺穩(wěn)定贤徒,正當(dāng)我跟客戶炫耀的時(shí)候芹壕,客戶也很懂啊,就問我:“你咋不用 Spark 流計(jì)算呢接奈,費(fèi)那么大勁”新娜?我猛然醒悟:“呀未蝌!太著急,忘了!”

當(dāng)你編程能力精益到了一定程度锣光,開發(fā)技術(shù)框架都是自然而然隨需而生。

最后說說成為模仿者,黑客社區(qū)有句經(jīng)典:“尋找大師, 跟隨大師, 模仿大師, 洞察大師, 成為大師”。我最早盯上 Joshua Bloch行剂,模仿 Collection 集合設(shè)計(jì);后來又偷學(xué) Rod Johnson 早期 Spring 代碼...钳降,當(dāng)你進(jìn)入到大師的作品中時(shí)厚宰,你可能就是下個(gè)踩在巨人肩膀上的人。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牲阁,一起剝皮案震驚了整個(gè)濱河市固阁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌城菊,老刑警劉巖备燃,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異凌唬,居然都是意外死亡并齐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門客税,熙熙樓的掌柜王于貴愁眉苦臉地迎上來况褪,“玉大人,你說我怎么就攤上這事更耻〔舛猓” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵秧均,是天一觀的道長食侮。 經(jīng)常有香客問我,道長目胡,這世上最難降的妖魔是什么锯七? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮誉己,結(jié)果婚禮上眉尸,老公的妹妹穿的比我還像新娘。我一直安慰自己巨双,他們只是感情好噪猾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著筑累,像睡著了一般畏妖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疼阔,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼婆廊。 笑死迅细,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的淘邻。 我是一名探鬼主播茵典,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼宾舅!你這毒婦竟也來了统阿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤筹我,失蹤者是張志新(化名)和其女友劉穎扶平,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔬蕊,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡结澄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了岸夯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片麻献。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖猜扮,靈堂內(nèi)的尸體忽然破棺而出勉吻,到底是詐尸還是另有隱情,我是刑警寧澤旅赢,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布齿桃,位于F島的核電站,受9級(jí)特大地震影響鲜漩,放射性物質(zhì)發(fā)生泄漏源譬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一孕似、第九天 我趴在偏房一處隱蔽的房頂上張望踩娘。 院中可真熱鬧,春花似錦喉祭、人聲如沸养渴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽理卑。三九已至,卻和暖如春蔽氨,著一層夾襖步出監(jiān)牢的瞬間藐唠,已是汗流浹背帆疟。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宇立,地道東北人踪宠。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像妈嘹,于是被迫代替她去往敵國和親柳琢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容