我如何成為了一名合格的程序員

私信“1024”,獲取30本免費經典編程書籍

本文共7900字,深度好文,閱讀大約需要5~7分鐘

為什麼會有這篇文檔?

之前有幸看過Eric Raymond(埃裡克·史蒂文·雷蒙德)寫的一篇文章《如何成為一名黑客》,感覺像黑夜裡的燈塔一樣,能夠給人很多的啟迪。在計算機這條道路上,無論是程序員,黑客,網管,還是其他任何相關的角色,有一個老司機帶你,能讓你看清自己的方向,不至於迷失自我。記得在初二那一年因為老師的一句很看不起人的話,走上了編程這條路。高中,大學,不斷的更換自己所學的語言。這期間我學習了VB,Java,Perl,Python,C#,C,C++,彙編,原因就是因為自己不知道該學什麼好,究竟應該學什麼才是對的,怎麼樣才能更好的在編程這條路走的更遠,我學習VB的時候看到別人說Java如何的厲害,學Java的時候又聽別人說Java不能做大型遊戲和操作系統…那一刻我是真的迷茫了。這是我下定決定要寫這篇手記的初衷,我不奢望它能成為像《如何成為一名黑客》這樣被人稱為黑客入門寶典的文章,只希望能讓看到這篇手記的你,不再迷茫。

什麼是程序員?

程序員在外行人看來,可能是一個帶著厚鏡片眼睛,滿臉的胡茬,大T恤,人字拖,雙眼無光,整天坐在電腦前噼裡啪啦的敲代碼,凡是電腦相關的問題,他都要會。

其實並不是那樣的,從計算機誕生之初,世界上第一臺計算機出現的那一刻,就意味著世界上已經有了第一批程序員。如果非要我說程序員是什麼的話,我只能說,計算機就像無所不能的阿拉丁神燈,而程序員則懂得如何與它交流溝通的辦法,在網絡的世界中,如果說駭客是破壞神,那麼程序員就是創世神。(ps:這裡不用黑客是因為,傳統意義的黑客,像俠客一樣,他們不會做無意義的破壞,他們只是樂於追求技術的巔峰和分享自己的技術。)

程序員可以創造任何你所能想到的程序,任何不可思議的東西,任何在別人看來魔幻的東西,程序員都能通過不斷的超越自我來一一實現,虛擬現實和人工智能技術的突破,已經說明了這一切。有很多人認為自己是程序員,我想說不,其實你不是,你只是一個碼農。而有很多人自嘲自己是碼農,其實他們才是真正的程序員。

程序員和碼農真正的區別在於,碼農只會每天無休止的工作,今天重複昨天的任務,明天覆制今天的生活。一年又一年,一個項目又一個項目,同樣的框架,同樣的配置文件,同樣的結構,甚至同樣的接口和底層代碼。每天他們所做的就是Ctrl+C,Ctrl+V。甚至,從來不去關心技術,也不會去分享自己的技術,他們閉門造車,生怕自己的技術被公司的新人,被其他的同行學去。自己寫的項目要裡三層外三層的繞來繞去,防止別人偷竊自己的代碼。

而程序員,他們樂於分享,追求技術的巔峰,不斷超越自我。碼農所關心的是如何儘快完成一個項目,程序員關心的是如何讓一個項目更加的優雅穩健。

程序員的態度

  1. 這個世界充滿了問題,等待我們去解決。
  2. 不要重複的製造輪子
  3. 崇尚自由
  4. 編程使人快樂
  5. 樂於分享
  6. 正如你所看到的,程序員的態度和黑客的態度驚人的相似。實際上程序員和黑客之間並沒有太多的不同之處,首先他們都是編程高手,只不過他們所專注的領域不同,黑客研究的是如何讓軟件擁有更強大的破壞力,而程序員所研究的是軟件如何承載更高的併發,如何去抵擋黑客的攻擊。

和所有創造性的藝術一樣,成為大師的最有效方法,就是模仿大師的精神——智力上的模仿還不夠,還要從感情上進行模仿。

修行之道:

關注大師的言行,

跟隨大師的舉動,

和大師一併修行,

領會大師的意境,

成為真正的大師。

引用自《如何成為一名黑客》

1. 這個世界充滿了問題,等待我們去解決。

程序員就是為解決問題而生的,如果這個世界不存在任何問題,那麼就不需要程序員。當人們需要通訊,需要溝通的時候,誕生了MSN,QQ,Skype。當人們需要社交的時候誕生了FaceBook。當人們需要網絡購物的時候,誕生了亞馬遜,天貓。就和所有先有雞還是先有蛋的問題一樣,到底是什麼先需要網絡通訊後誕生的通訊軟件,還是先有的通訊軟件,後來人們才適應了網絡通訊。這些問題,人們不得而知,但是上面提到的每一個人,他們如今都在福布斯富豪榜位列前茅。你所發現的問題,或者你所要解決的問題,他的受眾面有多廣,那麼你對於人類的貢獻就有多大,而你的名字也會被篆刻在歷史的豐碑上。這個世界擁有無數的問題,即使百度,騰訊,阿里,拿掉了所有的技術,依然有無數的問題等待我們去發現,去解決。你要相信,即使是谷歌的產品經理,也不如一個專修平房漏水的大爺更瞭解他所在行業的問題。從你最熟悉的環境出發,發現問題,並解決它。

2. 不要重複的製造輪子

對於已有的東西,程序員不會去重複的創造它,除非之前的東西非常的差。如果他是一個開源項目,應當提出你的修改意見,或直接貢獻你的代碼。除非它毫無亮點可言,否則你不需要重複製造輪子的過程。要相信一句話,最出色的程序員,也不如一個社區的人共同努力所創造出來的產品完美。你應當將時間和精力放在更有意義和價值的事情上。

3. 崇尚自由

如果你跟我說,程序員是沒有自由的,那麼我想你可能是在生活的壓力下迷失了自我。自由並非是來去自如,而是你的工作崗位可以由你自己去支配,你可以選擇是在天台或者坐在滑滑梯上,甚至是在家裡辦公。要記住一句話,自由永遠是屬於強者的,為了追尋自由,你必須不斷的突破和超越自我。還要記住自由並非是不工作,事實上如果能夠處在一家偉大的公司,和一群偉大的人共事,那將是一件非常令人愉快的事情。

4. 編程使人快樂

你是否每天上班以後,打開電腦和你的編程工具以後,就開始了自己一天的工作,渾渾噩噩直到吃午飯。下午繼續重複這一過程,日復一日,你已經忘記了你的初心,忘記了你一開始學習編程時的那種激情和夢想。沒錯,並非每個人都有夢想,也並非每一個夢想都可以實現,更不是說每一個程序員都要去實現自己的夢想。我認為,程序員最大的夢想就是快樂的編程。試想一下,在一天的清晨,一杯青檸檬茶和一個機械鍵盤,聽著你所喜歡的音樂,跟著歡快的節拍敲打著。就好像多年前的那個深夜,一個人,一架鋼琴,一輪明月,一杯苦酒,造就了永世流傳的月光交響曲。

5. 樂於分享

如果你覺得程序員都應當牢牢地保護好自己的代碼,那麼絕對不會有今天的Github這種開源項目託管的網站。更不會有一個個流傳至今還被人使用著的項目,可能有人會說某些著名的產品都沒有開源。相信我,他們不開源是因為他們的代碼寫的太爛,如果被別人看到就沒有人敢使用他們的產品了。一個人,一個團隊,一個公司的力量,絕對比不上全世界的程序員。計算機之所以發展的如此迅猛,就是有無數的樂於分享的你們,這些分享並非僅限於你某個項目的源碼,也可以是一篇文章,甚至是一次回答,這對於你來說,都是分享,這一過程將使你得到快樂,並獲得行業其他人的認同。

程序員的基本技能

  1. 學習如何編程
  2. 學會使用互聯網
  3. 能夠看懂英語

1. 學習如何編程

如果你是一個新手,對於編程一無所知,恭喜你,你將在這裡找到你的路。如果你是一個入門者,對於編程略有了解,恭喜你,你將在這裡堅定你的路。如果你是一個老鳥,對於編程早已融會貫通,同樣恭喜你,你將在這裡成為開拓者。

在過去的幾年裡,我學習了多門編程語言,我發現其實他們都大同小異,一旦你掌握其中一門,想學習其他任何一門都會很容易,是真的非常的容易,我可以毫不客氣的說,你可以一週之內就學會別的語言。除非你並沒有真正的掌握編程的思想,我們總是強調思想,這就像小說中的法則一樣,領悟其中一門法則,再去領悟其他法則,可能還不是特別的快,但是參考起來還是比新手要快。但是一旦領悟了法則的本質,那麼再領悟其他任何一門法則都會很輕鬆。你並不需要苦惱你不理解這些,放鬆你的心態,學習和工作中,一切都會水到渠成。

編程語言眾多,條條大路通羅馬,忘記你在任何位置看到的任何關於某個語言不好的地方,也忘記你看到的任何關於某個語言的優勢,那些都是毫無意義的。實際上你點開任何一個語言的官網,他總有一個與其他語言的對比圖,對比的結果它總是比其他語言更有優勢,那麼這些毫無意義的評價又有什麼價值呢。

即使是世界上人口最少的冰島,那裡的人民使用他們獨有的語言,依舊能夠快樂幸福的生活著。

不管我下面說了什麼,如果你已經決定或者正在學習一門語言的話,堅定的走下去,如果今天因為我的話而放棄你目前的所學,你還是趁早離開這個行業吧。如果你還沒有選擇一門語言,那麼你或許可以參考我的建議。

在我學習的多門語言中,從來沒有哪一門語言能讓我感到驚豔,或者說,像彈鋼琴一樣的寫代碼,Python做到了。最初接觸Python是因為要寫一個網絡爬蟲,當時看了一些參考資料就寫出來了,而且代碼十分的簡潔,只有短短的三十多行代碼。不過但是並沒有太大的驚喜,只是覺得,哎呦,這個語言,不錯哦。因為Java我也完全可以自己整合一個包,只用幾句代碼,也能完成這一切,但是當時想到這個時候,我忘記了一個很嚴重的問題,那就是我在自己造輪子。

Python帶給我的驚喜遠遠不止於此,又一次偶然的機會讓我使用Django(Python的一個開發網站的框架),這一次我是徹底的被它的簡單,優雅而吸引。很多人推薦初學者學習Java,C++,甚至是VB和彙編。

實際上,我曾經也經常推薦想學習編程的朋友,去學習Java,因為它沒有像C++那麼難以理解的東西。但是Java的面向對象的思想,足夠沒有編程基礎的人喝一壺了,所以我不建議新手學習Java。而Python被列為黑客必須要掌握的技術之一,同樣,我認為程序員也必須掌握Python。因為它真的非常的簡單和強大。有人稱Python為瑞士軍刀,還有人稱它為膠水語言,在國外很多學校都是以Python作為教學的語言。Python擁有龐大的用戶群和社區,Google,NASA。所有你耳熟能詳的公司,他們或多或少都在使用著Python。事實上,Perl也同樣簡潔,而且它對於正則表達式的支持是難以置信的,但是它的用戶群體並不多,而且不夠活躍,選擇一個用戶群體活躍的語言,將會讓你語言問題時,獲得更多人的幫助。

而學習編程,最好的方法就是閱讀,不管是官方的文檔還是別人寫的教程,如果是視頻教程就更好了。一開始學習的時候,不要太過於糾結底層的原理,就像你開車一樣。一開始你只是學習怎麼開這個車,你並不瞭解內部的構造,所以你不會修理它,但是隨著你經驗的加深,你開得多了,對它內部的瞭解就多了,慢慢的你也可以修理它了。

最後強調一次,堅持你目前所學的。

2. 學會使用互聯網

身為一個程序員,如果你不會使用互聯網,那就太弱了。學會使用百度和翻牆,這對於每個程序員來說是必備的技能。

3. 能夠看懂英語

英語對於你來說是必要的,如果你的英語不好,你不必苦惱。編程這麼難的東西,你都敢於學習它,英語又算得了的什麼?26個字母分開認識,組合起來一樣能夠認識,更何況還可以藉助翻譯工具。這並非讓你在學習編程之初就需要掌握英語,而是在你編程達到一種比較高的層次以後可以考慮的事情。英語可以讓你和國外眾多的高手交流心得,同時還可以讓你參與國外大型的開源項目開發。

提高自己在編程圈中的地位

  1. 貢獻開源項目
  2. 幫助測試並調試開源項目
  3. 發佈有用的信息
  4. 幫助新人

和其他行業不同,程序員想要提高自己在圈中的地位,並不需要多麼驚世駭俗的經歷,甚至不需要多麼厲害的技術。提高自己的地位,可以讓你在求職或創業過程中,獲得更多同行業的幫助,你的付出都會得到回報,相信我。

1. 貢獻開源項目

永遠不要以為在Github上貢獻一個項目有多麼的困難,一次機緣巧合之下,我發現Python中一個很大的開源項目Requests文檔中有一句代碼書寫錯誤,於是我修改了它,我的提交得到了項目管理團隊的認同,他們收錄了我的修改。就是這麼的簡單,細心和簡單的英語水平,就能讓你貢獻一個幾百萬人使用的項目。甚至,你可以自己發起一個開源項目,正如我所說的,程序員都是樂於分享的,如果你發起某個項目,並且說的足夠的詳細,一定會有人非常樂意和你一起開發和維護這個項目的。

2. 幫助測試並調試開源項目

如果你費盡心機也沒有能夠貢獻一個開源項目的話,千萬不要灰心,你還可以幫助開源項目進行測試和調試。如果發現其中的問題,可以去他們的主頁提出問題,如果能夠給出解決意見,那真是太好不過了。幫助測試開源項目是一件非常容易的事情,在Github任何一個項目的主頁中,他都擁有當前穩定版本和測試版本以及過去版本。當前穩定版本就相當於正式版,是經過測試沒有問題,發給用戶使用的。測試版本就是目前正在開發的版本,修改或增加了很多新的內容,但是沒有經過詳細的測試,開發團隊也不確定會出現什麼問題,於是發出來希望有經驗的開發人員能夠協助他們共同去測試。

3. 發佈有用的信息

你還可以活躍在各大程序員社區,慕課網是一個不錯的選擇,在這裡有很多的新人,也有很多的前輩。無論發佈任何的信息,都會幫助到別人。無論你是新人還是老手,都可以發佈手記,這可以是你學習的心得體會,也可以是你面試的經歷,還可以是你學習編程之路的微笑與眼淚,或是你工作中的所見所想。都會得到大家的閱讀,不會有任何人會出言不遜或否定你的技術,即使寫錯了也不用擔心,別人會指出你的錯誤,這樣才能一直進步。永遠不要擔心別人指正你的錯誤,除非他說的是不對的。

4. 幫助新人

你曾經和他們一樣,永遠不要忘記這句話,當新手提問一些在你看起來非常可笑的問題時,要告訴自己,曾經我和他一樣。不要去嘲笑他,在解答他問題的同時,記得告訴他,如何學會排查這些問題,以及如何更好的使用搜索引擎去尋找答案。要記住,你輕蔑的回答,可能毀滅了一個和曾經的你一樣有夢想的人。工作之餘和假期無聊的時候,瀏覽一下別人的問題,選擇一些回答,這都可以幫助你提升自己的技術和地位。記住,這是一件長期的事情,一天回答一百個問題,然後九十九天不回答,不如一百天每天回答一個問題,你說呢?

最後幾點疑問

我需要掌握數學嗎?

我希望你今天能夠記住我說的這幾句話,程序員的工作和數學真的沒有太大的關係,只要你能夠了解加減乘除,大於小於這些基本的關係就足夠了。就像那些年中柯景騰說的,“就算十年後我連log都不知道是什麼,一樣可以活的很好”。我們程序員同樣如此,就算你不知道什麼叫做正弦餘弦,一樣可以很好的編程。真正需要數學來做的工作,都是那些博士的工作,我們的任務只是改變世界而已,所以我們不需要數學的基礎。當然,如果你擁有這個技能,也不會影響什麼,相反它還會讓你在理解程序邏輯的時候簡單一些。

程序員就要會修電腦嗎?

沒有任何人下過這個規定,修電腦是網管的任務,程序員所要思考的就是如何更優雅的工作。

程序員都很內向嗎?

這取決於個人,我覺得學習的同時應當不要忘記健身和娛樂,週末可以約幾個朋友一起出去唱唱歌,吃個燒烤什麼的。不是說某個行業的人都要內向,我身邊很多同事都特別的外向,並且桃花運不斷。

怎麼樣才能知道自己已經是一個合格的程序員了?

恭喜你,當你對自己問這個問題的時候,你已經是一個合格的程序員了,接下來你所要做的就是,把你所決定的付諸行動。從今天開始,分享一個學習的小心得,回答一個小問題。請記住,這並不需要你有多麼高深的技術,哪怕你今天才開始學習編程,依舊可以寫出一篇文章來,向人們分享你成長的同時,還可以給其他人以幫助。程序員圈子是一個樂於分享和有愛的圈子,請分享你每一次成長的經歷,一定會得到別人的贊同,而如果有人出言不遜,你不必理會,他一定是一個沒有素質的人。

我需要一臺高配置的電腦嗎?

實際上是不需要的,你只要擁有一個搭載512MB內存和單核的處理器,以及一塊50G硬盤的電腦足以。當然,它可能不足以讓你運行大型的開發工具,但是小型的sublime或是Vim,也是一個很不錯的選擇,至少他們比文本文檔漂亮的多。

我的家人建議我去學習其他行業,我該去嗎?

再從頭看一遍我們的文章,然後問自己,我想要做一個程序員嗎?如果你得到的答案是確定的,那麼我為你感到驕傲,無論誰的否定,都不能阻擋你在這條路走下去。你不僅不能放棄,反而要努力拼搏,擁有一片屬於你的天空,讓否定你的人刮目相看。而如果你得到的答案是否定的,那麼我為你感到遺憾的同時,我建議你選擇一個你真正喜歡的行業,即使這個行業不是程序員,我也會為你喝彩。你是一個獨立存在的人,所以,你要自己決定你未來的路,不管你喜歡的職業是什麼,走下去,別回頭。

我該從哪裡開始學習?

如果你想尋找一個友好免費全面的學習平臺,那麼我建議你選擇慕課網,這真的不是在安利什麼廣告,事實上你在這裡看到這篇手記,已經說明你在這裡學習了。我接觸過許多的學習網站,他們擁有很多的問題,比如說太多的收費內容,以及社區不夠全面化。慕課網則不同,不僅有用大量的免費課程,還有便宜的實戰課程,要知道的是,實戰課程通常都是大型項目,看完以後對於之前基礎知識的整合是非常有幫助的,而非實戰內容,都是免費的。並且還有猿問和手記能夠幫助成長。

同時Github,Google+和stackoverflow也是非常好的,能夠幫助你成長的平臺,但是這三個平臺都需要有一定的英文基礎。其中Github能夠和許多開源項目的作者面對面交流,而Google+則擁有很多的社區,能夠找到你所學習語言的社區,並且其中有很多的大神,至於stackoverflow則號稱如果它裡面都沒人能解決的問題,那你的問題一定是無法解決的,可想而知它的魅力之所在。

人工智能會讓我丟失工作嗎?

至少,在我們活著的時候,不需要擔心這個問題。人類的大腦又豈是簡單的算法能夠完成的?

開源是否會讓我得不到任何的收入?

我想這個問題,Linux之父從來沒有擔心過,因為他一份簡歷投去任何一家公司,上面只需要寫一行字:我創造了Linux。他所得到的工資恐怕是數以千萬而且還有公司的股權,這難道不比一個收費軟件賺得多嗎?更何況他得到的遠不止於此。

我已經年紀很大了,現在學習是不是晚了?

從來沒有人給程序員入門限定一個年齡,以前沒有,現在沒有,未來更不會有。

我需要多久才能掌握?

這取決於你的努力程度和你的聰明程度,雖然我不想提到這個問題,但是我不得不說,聰明才智也是一個重要因素。值得慶幸的是,我們大部分人的智商都是差不多的,只有個別智商超群的人,那是他們的天賦。我們只要付出更多的努力,同樣可以超過他,勤能補拙不是說著玩的。通常情況,能在半年內使用一門語言進行開發,兩年內能夠對一門技術有非常高的瞭解。但是真的想在這個行業達到令人尊敬的地位,你需要一生去學習。

最後說幾句

  1. 永遠不要嘲笑新手
  2. 記住你的初衷
  3. 任何時候都不要忘記代碼的美觀
  4. 優雅高效
  5. 樂於分享

感謝能夠看到最後的你,希望這篇文章,能夠給你帶來一些幫助,起碼能讓你覺得不再迷茫,我的目的就達到了。你可以將本文以文字或是鏈接的形式分享到任何地方,如果可以的話,我希望你能夠直接分享文章的地址或者是在轉載的時候加上出自哪裡,以便更多的人加入我們這個大家庭。世界的未來,依靠各位去改變,記住我所說的,從現在開始行動,從碼農轉變為真正的程序員。從今天開始,樂於分享,快樂編程。

我如何成為了一名合格的程序員


分享到:


相關文章: