優(yōu)秀的程序員都具備哪些特質(zhì)?

作為一個(gè)程序員,我經(jīng)常會(huì)問自己一個(gè)問題:
優(yōu)秀的程序員都具備哪些特質(zhì)?
  我總結(jié)過很多特質(zhì),例如:

  1. 有解決問題的能力
  2. 有獨(dú)立思考的能力
  3. 有好奇心、有探索精神
  4. 邏輯清晰,能夠用通俗的語言把技術(shù)問題講清楚
  5. 有良好的英文閱讀能力
  6. 數(shù)學(xué)好,算法好
      經(jīng)過一段時(shí)間的觀察,我發(fā)現(xiàn)這上面的所有特質(zhì),都可以由一種行為習(xí)慣衍生出來,也就是如果你有以下習(xí)慣,那么你可能擁有且不限于以上所有的特質(zhì)
    觀察大多數(shù)程序員的行為,朝相反的方向走
      這句話也可以借用一本書的標(biāo)題(《少有人走的路》)來描述:少有程序員走的路。是的,這句話的邏輯也很明顯,和“優(yōu)秀的人總是少數(shù)一樣”
    優(yōu)秀的程序員總是少數(shù)
      如果你的行為和大多數(shù)程序員一樣,那么你很可能不會(huì)成為一個(gè)優(yōu)秀的程序員。
      所以,如果你想成為一個(gè)優(yōu)秀的程序員,你首先需要拿出一個(gè)本子,記錄一下大多數(shù)程序員的特質(zhì),然后分析下,反向行事是否會(huì)讓自己更有競(jìng)爭(zhēng)力,下面我說幾個(gè)我觀察到的現(xiàn)象:
      大多數(shù)程序員都喜歡談?wù)摼幊陶Z言
      編程語言是程序員談?wù)摰米疃嗟脑掝},他們喜歡討論哪個(gè)編程語言更有優(yōu)勢(shì),關(guān)注編程語言的排行,正因?yàn)榇耍幸徊糠秩藭?huì)以不斷學(xué)習(xí)新的編程語言為樂,以此作為區(qū)別于普通程序員的憑證。相反,另一部分人由于經(jīng)驗(yàn)不足,區(qū)分不了具體哪個(gè)語言才是最適合自己的,從而遲遲不肯行動(dòng),陷入無限的糾結(jié)中。有時(shí)不同編程語言的陣營(yíng)間還會(huì)產(chǎn)生口角,這種現(xiàn)象被視為對(duì)各自信仰的捍衛(wèi),進(jìn)而還會(huì)引起大多數(shù)人的圍觀。
      大多數(shù)人都把注意力放在編程語言這一層面上,最大的原因可能是因?yàn)榫幊陶Z言是通往程序世界的大門,它也是最實(shí)用的工具,學(xué)會(huì)了一門編程語言,就可以用一種新的方式和計(jì)算機(jī)進(jìn)行交互了。
      但這和現(xiàn)實(shí)世界不同,現(xiàn)實(shí)世界中,學(xué)好一門外語,相當(dāng)于打開了一個(gè)新的世界,例如學(xué)好了英語,你便可以自由穿梭在以英語為母語的國(guó)家中,了解他們的文化和歷史,掌握第一手外文知識(shí),從而能夠幫助你更好的決策,可以說多掌握一門外語能讓你的認(rèn)知獲得線性增長(zhǎng)。相反,在計(jì)算機(jī)世界,你多學(xué)一門語言,它不會(huì)給你帶來1+1=2的效果,因?yàn)楸举|(zhì)上,我們的目的不是學(xué)更多編程語言,而是利用計(jì)算機(jī),幫助我們完成具體的任務(wù),要知道同樣的一個(gè)任務(wù),甚至可以用好幾種不同的語言來實(shí)現(xiàn)。
      曾經(jīng)看過一個(gè)問題,提問人可能是新人,他問:我想學(xué)編程,但不知道先學(xué)Python還是Javascript?;卮鸬娜司透嬖V他:你用來糾結(jié)的這些時(shí)間,說不定早就可以學(xué)會(huì)其中一門了。
      是的,優(yōu)秀的程序員不會(huì)把大量的時(shí)間放在編程語言上,因?yàn)樗麄儠?huì)把注意力放在更重要的事情上。
      大多數(shù)程序員都不重視基礎(chǔ)
      有句話在業(yè)界特別流行,那就是
    從小不努力,長(zhǎng)大做IT
      這句話的意思是,IT行業(yè)的門檻非常低,任何人只要學(xué)完一門編程語言就可以入行了,更深層次的意思是IT工作都是重復(fù)性的勞動(dòng),并不需要太有創(chuàng)造力的人才。
      聊天時(shí)經(jīng)常會(huì)聊到算法的話題,例如“算法在工作中到底重不重要”,很多人給出的答案是不重要,理由是因?yàn)槿粘9ぷ髦谢居貌坏?。這又是一個(gè)典型的實(shí)用主義答案,同時(shí)它也極具迷惑性,因?yàn)椤叭粘9ぷ髦杏貌坏健钡拇_是事實(shí),但這個(gè)事實(shí)并不能推導(dǎo)出算法不重要這個(gè)結(jié)論。
      算法很重要,就像數(shù)學(xué)是所有學(xué)科的基礎(chǔ),所以數(shù)學(xué)很重要一樣,算法是一個(gè)系統(tǒng)的靈魂,是不同軟件之間拉開差距的籌碼,最典型的例子就是谷歌搜索引擎,它當(dāng)年就是依靠著名的PageRank算法使其與市場(chǎng)上的其他搜索產(chǎn)品拉開差距的,該算法直接影響的是搜索體驗(yàn),大概率的把人們想要的結(jié)果排在前面。
      提升算法能力不僅可以幫軟件提升競(jìng)爭(zhēng)力,而且還可以提升我們的邏輯思維能力,人和人之間的差異其實(shí)就在于思維能力的差異,如果你每天都在敲if ... else這類的代碼,你的思維能力不會(huì)有多大的變化,但在人工智能時(shí)代,你時(shí)不時(shí)琢磨一下監(jiān)督學(xué)習(xí),非監(jiān)督學(xué)習(xí)中的算法,我想你的未來一定會(huì)更美好吧。
      算法只是基礎(chǔ)中的一類,操作系統(tǒng)的原理、TCP/IP協(xié)議、MySQL中的Innodb引擎、Redis實(shí)現(xiàn)原理、Reactor網(wǎng)絡(luò)模型等都屬于基礎(chǔ),你可能覺得這些都很難啃,但據(jù)統(tǒng)計(jì),基礎(chǔ)知識(shí)只占一個(gè)人所學(xué)全部知識(shí)的3-5%,牢牢掌握這些基礎(chǔ)知識(shí),是你在日新月異的知識(shí)海洋中以不變應(yīng)萬變的法寶。
      大多數(shù)程序員不重視效率的提升
      如果你在一個(gè)互聯(lián)網(wǎng)公司,你可能會(huì)這樣調(diào)侃你的程序員同學(xué):
    你工作不飽和啊,bug解完了嗎?
      下面的對(duì)話也是常有的:
    A:在干嘛呢?
    B:苦逼加班解bug呢。
      你也許看出來了,大多數(shù)程序員常常受限于解bug的惡性循環(huán)中——以前版本的bug還沒解完,新功能上線又出現(xiàn)一堆bug。解bug是一件特別阻礙生產(chǎn)力的事情,它是一件副產(chǎn)品,理論上員工應(yīng)該把大部分精力都用在開發(fā)上,而大多數(shù)公司卻在維護(hù)軟件的穩(wěn)定性上付出了巨大的成本。
      很多員工都抱怨自己工作那么辛苦,工資卻不高,但他們卻沒有想過這個(gè)結(jié)果是怎么造成的,他們可能沒有考慮過自己投入的時(shí)間能給公司帶來多大的收益,如果把大部分時(shí)間都用來解bug,其實(shí)產(chǎn)出不僅是零,還是負(fù)的,你說公司會(huì)給你漲工資嗎。
      以我觀察的來看,真的是這樣的現(xiàn)象,開發(fā)過程中我們特別在乎一個(gè)產(chǎn)品的開發(fā)時(shí)間,希望盡可能的完成開發(fā)并發(fā)布產(chǎn)品,例如希望一個(gè)月完成,但卻忽略了產(chǎn)品發(fā)布后,可能需要十個(gè)月甚至更多的時(shí)間來維護(hù)它,這真的是一個(gè)本末倒置的怪圈。
      相反,如果每個(gè)人都有意識(shí)提升自己的工作效率,提升自己的出品質(zhì)量,把更多時(shí)間投入到有價(jià)值的事情上,我想公司的業(yè)績(jī)不會(huì)差,公司賺錢了,你的工資也不會(huì)低。你可能會(huì)問如何才能提升工作效率,其實(shí)也很簡(jiǎn)單,做每件事之后,都要反思:
    還有更簡(jiǎn)單的方法嗎?
    我該如何才能減少bug的數(shù)量呢?
    做這件事有通用的解決方案嗎?
      大多數(shù)程序員都不利用業(yè)余時(shí)間進(jìn)行探索
      探索和人的一個(gè)重要的特質(zhì)相關(guān),就是自主性(initiative),不僅是我,我相信大多數(shù)領(lǐng)導(dǎo)都喜歡和有自主性的下屬一起共事,不僅是因?yàn)樗麄兿∪?,同時(shí)還因?yàn)檫@樣的下屬會(huì)主動(dòng)去解決問題,可以在組織中極大的減少溝通和管理成本。
      剛開始工作時(shí),我就發(fā)現(xiàn)公司鮮有人會(huì)利用業(yè)余時(shí)間學(xué)習(xí)了,當(dāng)時(shí)以為換一個(gè)技術(shù)更好的公司會(huì)有所改變,技術(shù)學(xué)習(xí)氛圍會(huì)好一些,誰知道這些都是自己的幻想,糾其原因可能是因?yàn)槿硕枷矚g過得安逸一點(diǎn),或者以平時(shí)已經(jīng)很忙了為借口,在工作之外就不再學(xué)習(xí)了。平時(shí)不學(xué)習(xí)會(huì)造成什么后果呢,最直接的就是解決問題的能力低下,這些人只能解決領(lǐng)導(dǎo)規(guī)定范圍內(nèi)的問題,超出這個(gè)范圍,一旦出現(xiàn)問題,要么掩蓋,要么規(guī)避,反正不會(huì)及時(shí)的從根本上去解決,不是因?yàn)椴幌?,是因?yàn)閴焊筒粫?huì)。
      對(duì)于程序員來說,學(xué)習(xí)包括看書和看代碼,如果你每天抽一個(gè)小時(shí)時(shí)間看書,估計(jì)你可以超過90%的人,同時(shí)你花時(shí)間去研究github上優(yōu)秀的代碼,那么剩下的人群中的90%也會(huì)被你甩在身后。
      在這方面,我自己是有切身體會(huì)的,剛參加工作前,我是個(gè)零代碼量的人,由于經(jīng)驗(yàn)非常欠缺,我?guī)缀醢阉袠I(yè)余時(shí)間都用來研究同事寫的代碼上了,看完這些代碼,業(yè)務(wù)邏輯是很清楚了,但仍然無法判斷這些代碼是否寫得足夠好,因?yàn)槲也恢篮玫拇a是怎么樣的,當(dāng)時(shí)還沒有g(shù)ithub這樣好的學(xué)習(xí)環(huán)境,只能從書中找答案。隨后便花了不少時(shí)間讀完了《C++ Primer》、《Unix環(huán)境高級(jí)編程》、《設(shè)計(jì)模式》、《深入淺出MFC》這4本書,最后在第二年,我憑借一己之力在2個(gè)月內(nèi)把部門的核心代碼重構(gòu)了,由于覆蓋了大量的單元測(cè)試,幾乎沒有給我?guī)硎裁碽ug,要知道在這之前這些代碼是4個(gè)人花了2個(gè)季度才完成的,不僅如此,這些成績(jī)還幫我在新的公司收獲了“工資翻倍”。
      讀優(yōu)秀的代碼可以讓自己獲得飛速的成長(zhǎng),就像游戲中的打怪升級(jí),優(yōu)秀的代碼是大boss,一次可以讓你提升10個(gè)等級(jí)。這個(gè)過程不可逆,因?yàn)槊客瓿梢淮?,你都非常清楚的知道自己再也不?huì)寫以前那種爛代碼了,這根本就是碾壓過去的自己。當(dāng)你“升級(jí)”后,再回過頭去看公司里大多數(shù)人的代碼,就可以得出和我一樣的結(jié)論——他根本就沒讀過好的代碼。
      總結(jié)
      “看大多數(shù)程序員的行為,然后朝相反的方向走”,其實(shí)是一個(gè)更為抽象的方法論,能幫你把不同的特質(zhì)聯(lián)系起來,從而可以更方便的不斷提醒自己不要走偏。類似的行為遠(yuǎn)不止這四個(gè),例如大多數(shù)程序員英文都不好,大多數(shù)程序員不擅長(zhǎng)溝通,大多數(shù)程序員不學(xué)他們認(rèn)為的“無用之學(xué)”(例如哲學(xué)、經(jīng)濟(jì)學(xué)、管理學(xué)等),大多數(shù)程序員不寫B(tài)log,大多數(shù)程序員沒有自己的產(chǎn)品等等。
      一般擁有自己的產(chǎn)品,程序員生活都會(huì)很美好,這里的例子舉不勝舉,例如微信之父張小龍就是以Foxmail一舉成名的,說到這里,我好像也沒做到:)所以,下一次你問我在干嘛,我肯定不會(huì)說我在解bug:我在琢磨自己的產(chǎn)品呢。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文把程序員所需掌握的關(guān)鍵知識(shí)總結(jié)為三大類19個(gè)關(guān)鍵概念,然后給出了掌握每個(gè)關(guān)鍵概念所需的入門書籍,必讀書籍,以及...
    dle_oxio閱讀 11,387評(píng)論 6 244
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,058評(píng)論 25 709
  • 作為一個(gè)程序員,我經(jīng)常會(huì)問自己一個(gè)問題: 優(yōu)秀的程序員都具備哪些特質(zhì)? 我總結(jié)過很多特質(zhì),例如: 有解決問題的能力...
    程序員在深圳閱讀 3,889評(píng)論 9 32
  • 文/北陜 我就這么看著一群布爾什維克戰(zhàn)士變成 神棍,準(zhǔn)貪婪者,道士,和尚, 面相師,手相先生,SM愛好者,AV演員...
    北陜閱讀 428評(píng)論 1 1
  • 最近有個(gè)問題總在我腦子里轉(zhuǎn):人活著,為了什么? 大概因?yàn)榻诜彩虏惶樞?,還老著急上火,生活得很疲憊。 回家也難得...
    糊涂少女心閱讀 2,823評(píng)論 6 8

友情鏈接更多精彩內(nèi)容