程序員做業余項目、記筆記和寫博客的重要性【經典】
編程是一種創造過程,業余項目允許程序員在沒有截止日期或各種限制的條件下,以探索形式編程。業余項目之所以重要,有以下幾個原因。
探索新技術
每天都會不斷有新技術出現,而業余項目則是最佳的試驗場。作為業余項目,你不必為bug或者性能問題擔心,即使網站崩潰也沒有問題,因為你不靠它來領薪水。
從頭創造
我所從事的大多數都是為現有的產品做一些維護,增加一些新特性,修復bug,解決性能問題,重構現有代碼。雖然我也從頭編寫過一些軟件,但這些基礎工作只需要一兩個月,接下來我又進入維護模式了。
業余項目經常需要從頭構建。我喜歡這個步驟,因為我不但復習了已經掌握的所有東西而且把它們應用到創建一個新的(更好的)項目中。
易于啟動
進行業余項目也是一項避免分析癱瘓(analysis paralysis)的練習。如果你從頭開始會有各種各樣的可能性。避免的方法是給出一個短列表上面列出所有必須具有特性,接下來啟動一個beta版本實現那些特性,即所謂的最小可行性產品。
編注1:分析癱瘓:對某個問題由于過度分析或過度思考某種情況,以至于沒有作出決定或者采取行動。在不同的領域,分析癱瘓有具體的解釋,詳見維基百科Analysis paralysis詞條。
編注2:最小可行性產品:指發布所必須的最小功能集合,通常作為產品原型發布給樂于嘗試并提供反饋的客戶。
避免精疲力盡
為你的熱情工作,為樂趣而工作。如果你是一個開發人員,但由于不喜歡現在所從事的工作而感到精疲力盡,試著去做一個屬于自己的業余項目吧。它會讓你回味為什么編程是如此的有趣。
保持你的技能不會落伍
也許你日常工作使用的是過時的技術。也許你對自己目前掌握的技能感到厭倦,想要去學一些新技術。業余項目是跟蹤軟件最新潮流的最佳辦法。沒有嘗試過node.js?太好了,用它去做一個小的項目。突然之間,你會發現你有新學會的技術可以炫耀了。
完成你的業余項目
對于業余項目,一個問題是它們可能始終沒有完成。剛開始的時候你充滿熱情,但是2個月之后你甚至不記得上一次做項目是什么時候了。盡管如此,還是應當將項目向前推進并完成它。寫完這些,我要去完成自己業余項目了。
?
最近在整理2011年學習筆記的時候,發現很多以前接觸過的東西,了解的知識、邏輯,寫過的代碼,到現在去看的時候,有些居然看不懂,都忘得差不多了;
所以養成勤記筆記,多寫寫,多記記應該是程序員必不可少的習慣吧!
不要想一輩子埋頭搞技術混飯吃,但技術創業會成為將來創業的主流的
我個人不贊成下面人的看法,覺的搞技術完全沒前途, 我身邊就有很多靠技術起步,做老板做老總的。世事無絕對,自己要多注意培養自己各方面的能力,同時技術其實也很重要,因為中國正在大轉變,不能只看眼前,創新有眼光有能力的技術人員也會越來越吃香,如果各方面能力和條件比較成熟,也可以自己干,技術創業會成為將來創業的主流的。
?
別人的看法:
我現在是自己做,但我此前有多年在從事軟件開發工作,當回過頭來想一想自己,覺得特別想對那些初學JAVA/DOT .NET技術的朋友說點心里話,希望你們能從我們的體會中,多少受點啟發(也許我說的不好,你不贊同但看在我真心的份上別扔磚頭啊)。
一、在中國你千萬不要因為學習技術就可以換來穩定的生活和高的薪水待遇,你千萬更不要認為哪些從事市場開發,跑腿的人,沒有前途。
不知道你是不是知道,咱們中國有相當大的一部分軟件公司,他們的軟件開發團隊都小的可憐,甚至只有1-3個人,連一個項目小組都算不上,而這樣的團隊卻要承擔一個軟件公司所有的軟件開發任務,在軟件上線和開發的關鍵階段需要團隊的成員沒日沒夜的加班,還需要為測試出的BUG和不能按時提交的軟件模塊功能而心懷忐忑,有的時候如果你不幸加入現場開發的團隊你則需要背井離鄉告別你的女友,進行封閉開發,你平時除了編碼之外就是吃飯和睡覺(有錢的公司甚至請個保姆為你做飯,以讓你節省出更多的時間來投入到工作中,讓你一直在那種累了就休息,不累就立即工作的狀態). 更可怕的是,會讓你接觸的人際關系非常單一,除了有限的技術人員之外你幾乎見不到做其他行業工作和職位的人,你的朋友圈子小且單一,甚至破壞你原有的愛情(想象一下,你在外地做現場開發2個月以上,卻從沒跟女友見過一面的話,你的女友是不是會對你呲牙裂嘴)。
也許你拿到了所謂的白領的工資,但你卻從此失去享受生活的自由,如果你想做技術人員尤其是開發人員,我想你很快就會理解,你多么想在一個地方長期待一段時間,認識一些朋友,多一些生活時間的愿望。
比之于我們的生活和人際關系及工作,那些從事售前和市場開發的朋友,卻有比我們多的多的工作之外的時間,甚至他們工作的時間有的時候是和生活的時間是可以兼顧的,他們可以通過市場開發,認識各個行業的人士,可以認識各種各樣的朋友,他們比我們坦率說更有發財和發展的機會,只要他們跟我們一樣勤奮。(有一種勤奮的普通人,如果給他換個地方,他馬上會成為一個勤奮且出眾的人。)
二、在學習技術的時候千萬不要認為如果做到技術最強,就可以成為100%受尊重的人。
有一次一個人在面試項目經理的時候說了這么一段話:我只用最聽話的人,按照我的要求做只要是聽話就要,如果不聽話不管他技術再好也不要。隨后這個人得到了試用機會,如果沒意外的話,他一定會是下一個項目經理的繼任者。
朋友們你知道嗎?不管你技術有多強,你也不可能自由的騰出時間象別人那樣研究一下LINUX源碼,甚至寫一個LINUX樣的杰作來表現你的才能。你需要做的就是按照要求寫代碼,寫代碼的含義就是都規定好,你按照規定寫,你很快就會發現你昨天寫的代碼,跟今天寫的代碼有很多類似,等你寫過一段時間的代碼,你將領略:復制,拷貝,粘貼那樣的技術對你來說是何等重要。(如果你沒有做過1年以上的真正意義上的開發不要反駁我)。
如果你幸運的能夠聽到市場人員的談話,或是領導們的談話,你會隱約覺得他們都在把技術人員當作編碼的機器來看,你的價值并沒有你想象的那么重要。而在你所在的團隊內部,你可能正在為一個技術問題的討論再跟同事搞內耗,因為他不服你,你也不服他,你們都認為自己的對,其實你們兩個都對,而爭論的目的就是為了在關鍵場合證明一下自己比對方技術好,比對方強。(在一個項目開發中,沒有人愿意長期聽別人的,總想換個位置領導別人。)
三、你更不要認為,如果我技術夠好,我就自己創業,自己有創業的資本,因為自己是搞技術的。
如果你那樣認為,真的是大錯特錯了,你可以做個調查在非技術人群中,沒有幾個人知道C#與JAVA的,更談不上來欣賞你的技術是好還是不好。一句話,技術僅僅是一個工具,善于運用這個工具為別人干活的人,卻往往不太擅長用這個工具來為自己創業,因為這是兩個概念,訓練的技能也是完全不同的。
創業最開始的時候,你的人際關系,你處理人際關系的能力,你對社會潛規則的認識,還有你明白不明白別人的心,你會不會說讓人喜歡的話,還有你對自己所提供的服務的策劃和推銷等等,也許有一萬,一百萬個值得我們重視的問題,但你會發現技術卻很少有可能包含在這一萬或一百萬之內,如果你創業到了一個快成功的階段,你會這樣告訴自己:我干嗎要親自做技術,我聘一個人不就行了,這時候你才真正會理解技術的作用,和你以前做技術人員的作用。
小結
基于上面的討論,我奉勸那些學習技術的朋友,千萬不要拿科舉考試樣的心態去學習技術,對技術的學習幾近的癡迷,想掌握所有所有的技術,以讓自己成為技術領域的權威和專家,以在必要的時候或是心里不暢快的時候到網上對著菜鳥說自己是前輩。
技術僅僅是一個工具,是你在人生一個階段生存的工具,你可以一輩子喜歡他,但最好不要一輩子靠它生存。
掌握技術的唯一目的就是拿它找工作(如果你不想把技術當作你第二生命的話),就是干活。所以你在學習的時候千萬不要去做那些所謂的技術習題或是研究那些帽泡算法,最大數算法了,什么叫干活?
就是做一個東西讓別人用,別人用了,可以提高他們的工作效率,想象吧,你做1萬道技術習題有什么用?只會讓人覺得酸腐,還是在學習的時候,多培養些自己務實的態度吧,比如研究一下當地市場目前有哪些軟件公司用人,自己離他們的要求到底有多遠,自己具體應該怎么做才可以達到他們的要求。等你分析完這些,你就會發現,找工作成功,技術的貢獻率其實并沒有你原來想象的那么高。
不管你是學習技術為了找工作還是創業,你都要對技術本身有個清醒的 認識,在中國不會出現BILL GATES,因為,中國目前還不是十分的尊重技術人才,還僅僅的停留在把軟件技術人才當作人才機器來用的尷尬境地。(如果你不理解,一種可能是你目前僅僅從事過技術工作,你的朋友圈子里技術類的朋友占了大多數,一種可能是你還沒有工作,但喜歡讀比爾。蓋茨的傳記)。
分析為什么中國的大多程序員技術偏低--都是被逼的
首先來說一個高級程序員并非靠自己讀幾本書寫幾萬行代碼就能練就的,我更關注于低層的環境,也就是程序員實實在在的工作環境。因為程序員的高低還得從實際的工作來衡量,而非其它。所以我想說的是,中國的軟件公司的性質直接導致程序員的水平的高低。而我所說的軟件公司,不是指某個或者某幾個,而是指主流的軟件公司,大眾型的軟件公司。所以我希望那些已經步入一個理想的公司的程序員理解我這篇文章的定位。
軟件公司的無償加班對程序員的影響:
國內的軟件公司中程序員是常常加班的,每日加,周未也常加。基于這種性質,出現了一種很莫名其妙的現象:每天程序員的實際下班時間總是要晚于規定下班時間,至于晚一個小時還是兩個小時還是更多這就另說,總之,程序員這份工作,如果按時下班反而自己感覺自己像是做賊似的。表面上公司并沒有強迫誰加班,但實際上在潛移默化中有一種威懾力,要求你要多為公司工作幾個小時,而且表面上你所工作的這幾個小時還是你自己愿意的。正因為是“自己愿意的”,所以公司更有理由認為是無償的。
還有就是周未加班,一般周未加班是因為“忙”(關于這個帶引號的“忙”,見“軟件公司的‘忙’對程序員的影響”)。但周未加班一般是無償的,至于法律所規定的那種“償”就更嘗不上了。不過一般公司是這樣規定的:周未加班可以倒休。關于倒休,一般是周未的班真的加了,倒休卻遙遙無期,原因很簡單,公司“忙” 嘛!
這種情況對程序員的影響:消極、軟弱無主見、虛偽、對前途渺茫。
軟件公司的“忙”對程序員的影響:
軟件公司的“忙”其實有時也是真忙,從原因來說,軟件公司認為是程序員(其實也有其他員工,但本文不涉及討論)造成的,程序員認為公司造成的。而根據“一個巴掌拍不響”原則來看,應該是公司與程序員合作不協調出現的惡性循環造成的。深層原因大家自己研究去吧。不過從我這里的表象來看,這種“忙”有這么幾點,這幾點如果不代表大家的意見,大家可以補充:
**項目開發與計劃脫節,表現為項目開發慢于計劃。
**突如其來的事件。
**為某種說不清道不明的原因,像是作秀。
**假忙。
**真忙。
上面說的第一種情況最常見,這涉及到軟件工程的話題,其實也是軟件公司做不大,程序員水平提不高的核心。而“軟件公司做不大”已有前輩文章《淺談:國內軟件公司為何無法做大做強?》中說過了,而“程序員水平提不高”本文所言即是,所以這個原因大家讀完這兩篇自己體會吧。
上面說的第二種情況也常有,比如偶爾趕個標書,比如客戶那里突然出現了BUG,急著去改等等。
第三種情況就很讓人暈菜了,有點無病呻吟的感覺,比如不知道從哪里冒出一個會議,開到個七八點;
第四種情況很特別,也比較常見,大家同室坐、彼此各自心。一片共同耕作的美好景象,但果實見不到兩顆豆呢。這可是大家齊心虛度時光。程序員可以拿出這個時間提高自己嗎?當然不可以了,你表面上還是得干活呢。
第五種情況就不說了,因為這是正根。
總之軟件公司是“忙”的,一般是以上三種“忙”,偶爾這三種都沒有了,第四種就馬上出來的。
這種情況對程序員的影響:混亂無序、怨由心生、虛偽做作、學習時間少。
軟件公司的流程不規范對程序員的影響:
無像樣的需求、無像樣的設計、沒有測試、沒有文檔、沒有維護(所謂維護也大都是客戶測試出BUG來改一改)。
其實說到需求這一塊也并非完全是軟件公司的問題,大多數情況下,客戶也是根據程序員直接上來編碼后暴露出來的問題才漸漸明白自己的需求是什么的。
“什么都沒有”的問題在于,什么也不清楚,如果寫一堆以不變應萬變的代碼,第一,時間不允許,第二,難度太大。要是稀里糊涂去實現,擴展與維護性又差,整個一堆豆腐渣工程,總之是沒法下手。長了一堆“打鐵”技巧,神不像神,程序員不像程序員的。
這種情況對程序員的影響:無規劃性、代碼質量低、手忙腳亂、技術永遠停留在“打鐵”水平。
軟件公司對程序員員工的“全能型”要求對程序的影響:
裝系統、修打印機、寫文檔、編代碼、見客戶、掃地搬桌子、接網線,在國內軟件公司中程序員做什么事都有可能。單單說技術方面,也是要求事事能做,看一下招聘要求就知道了。
這種情況對程序員影響:術業無專攻
軟件公司的工資拖欠對程序員的影響:
很悲哀,這是存在的。我向來認為一個員工與公司合作的最底線應該是按時按量發工資。但很多公司打破了這個底線。一個朋友開玩笑地說過:“家庭有錢,誰干程序員呀!”這話雖只可信一半,但是從國內情況來看,程序員的生活質量還是不高的,工資的拖欠直接影響到程序員的心態,甚至影響到程序員的生活。
這種情況對程序員影響:低調、迷茫、心態不穩、思想徘徊、生活困難。
軟件公司對軟件開發的要求對程序員的影響:
軟件公司對軟件開發的要求一般是實現即可。如果說寫一個和記事本一樣的程序,公司感覺程序員應該在一天內搞定;如果寫一個WPS,公司也就感覺程序員應該在兩到三個月搞定。這不是浮夸,事實就是這樣的。公司所著眼的點在于“就這么一點功能”,而非在于“怎么實現這‘一點’功能。
這種情況對程序員的影響:開發難度大、維護難度大、壓力大、難溝通。
軟件公司的承諾對程序員的影響:
國內軟件公司一般實際行動能力差,但沒理難說話,他們也知道自己沒理,所以比較愛承諾,把實際問題拋向以后解決。然而承諾也只是口頭的,有一點“我以人格擔保”的意思。不過一般情況下,國內的程序員還是比較有忍耐能力的(從上文來看不忍耐還能混嗎),但公司層面的“人格”卻是不可信,多承諾少兌現,員工面試時聽到的說話到干了兩年走了都沒做到的事根本不少見。然而路遙馬乏力,日久人變心,這樣的結果往往是使公司與員工走入惡性循環。
這種情況對程序員的影響:不滿、被動、拿不起放不下、進退兩難。
結論:
消極、軟弱無主見、虛偽、對前途渺茫、混亂無序、怨由心生、虛偽做作、學習時間少、無規劃性、代碼質量低、手忙腳亂、技術永遠停留在“打鐵”水平、術業無專攻、低調、迷茫、心態不穩、思想徘徊、生活困難、開發難度大、維護難度大、壓力大、難溝通、不滿、被動、拿不起放不下、進退兩難。
上面這些短語概括了程序員的性格、心態、生活環境、工作環境等方面,它們就像毒素一樣,日久能把一個健康的程序員毀掉。在這樣的環境下,還問為什么你的技術這么低?太搞笑了。
寫給程序員--程序員每年要做的10件事
還剩不到一周的時間,我們將迎來2012年。我知道這是老生常談,但今年你曾經有過什么樣重要的經歷?很自然的,我們現在正處于為新年許下目標的時候。也許你可能有“真實”生活中的一些目標,但是你的程序員生涯呢?
1、學習一種新語言,框架或方法
我們必須保持學習最新的技術。
Web開發唯一不變的是變化。以NodeJS為例:兩三年前它并不存在,只有很少(如果有的話)的JavaScript代碼運行于服務器之上。現在,你離不開它。每個Web開發人員都希望留在自己的作品里。要做到這一點,我們必須不停學習最新的技術。如果你是一個后端開發,這可能代表著學習 JavaScript和Node.js,類似于Ruby和Rails。對于前端開發,則可能意味著真正理解CSS3或掌握HTML5新的API。當然,這并不意味著你必須經常使用它,只需要保持自己不斷學習。
按照同樣的思路,對于重新評估你的工作流程、學習更好的和不同的工具以更快速地完成工作來說,現在是一個很好的時間。
2、讓你掌握的內容更精深
程序員新年要做的10個決定
也要預留一段時間來關注現有的語言和軟件。
當然,保持鋒利比學習新的內容有更大意義。它也包括改善你使用日常工具的方式。我知道自己一直堅持使用熟悉的的模式和方法而不是學習在某個特定情形下更佳的方案是不對的。你知道關于JavaScript設計模式的那些事嗎?你對PHP的面向對象和面向功能編程是否有扎實的理解?你是否曾經使用過 SQL連接?你使用的文本編輯器里是否有沒有用過的功能?這些都不是新技術,但是如果你不使用它們,它們對你來說就是全新的!也要在關注現有的語言和軟件上預留一段時間。
3、探索一個新的領域
這項內容與第一項并不相同。學習一種新的語言、框架,或自己領域里的方法是重要的,甚至對你的日常實踐來說可能會有用。但如果你像我一樣,你會迷上網絡上的每一部分。要嘗試探索新的領域。對后臺開發來說是深入研究前端開發,而對前端來說是探索可用性或用戶體驗。如果你喜歡寫作,你可能會對內容策略或培養設計靈感感興趣。在網絡上有幾十個不同的領域,繼續探索!
4、參與社區
把它叫做參與,把它叫做結網,把它叫做任何你想要的。
該網站極度令人不可思議:我想不出有任何其他的現象,人與人之間相隔那么遠,卻結下如此深厚的友誼。2012年,你為什么不更多的嘗試參與到這個令人驚訝的團體中呢?在Twitter上與他們交談,閱讀他們博客的文章和評論,或者通過自己寫文章來作為回應;通過Github或其他代碼共享網站貢獻自己的代碼。或者加入自由討論會,用戶組和各種會議。把它叫做參與,把它叫做結網,把它叫做任何你想要的,但有一點是肯定的:它會在大多數情況下讓你和其他人受益。此外,建設新的重要人際關系,你可能會獲得新的轉機!
5、教導他人
最有益的評論是傷害你感情的那些。
你應該認同我們之前的觀點,在2012年更多的教導他人。為什么呢?它將會帶來些什么呢?“教導是最好的學習”?我已經為Nettuts +寫作了近三年,我可以證明,這種說法是完全正確的。寫下一個原理是如何工作的能夠迫使你完全理解它,當你嘗試教導別人時,你會驚訝對這個話題更了解了多少。最重要的是,當你知道曾經幫助別人學習新的技能時你會有不可思議的感覺。毫無疑問,你將遇到幾個反對的聲音,例如指出你語法的錯誤(或只是一些害群之馬的評論)。不用有太多的擔心;教學是一個學習的過程,你這樣做會提高你自己。最有益的評論是傷害你感情的那些。
6、更好地照顧自己
我們是網絡的受害者。
我們作為Web開發似乎非常自豪,因為我們獻出自己的勞動。我們工作時間超長,弓著腰在黑暗中使用計算機,我們忘記了洗澡或吃飯。我們是網絡的受害者,忍受著痛苦來讓互聯網更加美好。
聽起來很勇敢,但確實不是這樣。
為你的風險考慮,我建議你在2012年照顧好自己。除了睡得好,吃得好,確保你的工作場所符合人體工學。按理說,如果你花了生命中的三分之一在辦公室,使其盡可能舒適是很有道理的!
7、更好的管理自己的時間(以及其他資源)
也許我并不是指這和Web開發人員有很大關系,但盡管如此,幾乎每一個“知識工作者”可以做得更好。對于我們里的很多人,尤其是自由職業者來說,你要用你的時間來做的事可能是燈紅酒綠和饑腸轆轆之間的差異。記住所有的這些樂趣,以及我向你推薦學習的Web新技術了嗎?好了,不要讓它們的引誘限制你的學習時間。當然互聯網越大越會有更多誘惑。我敢肯定,你最近看到了下面的內容,當我這么做時它給了一個暫停。
在過去的一年里,超過1萬億美元的視頻在Youtube上被觀看。
假設平均YouTube視頻是2 – 3分鐘之久,我們正在尋找的東西可以花上一整天的時間。在知識方面我還沒有足夠精深。
當然,“只是工作,不要娛樂”,完全按此行事是正確的嗎?我不建議你成為客戶的一個奴隸或者是不能忍受沉悶的工作狂。我只是說,我們需要更明智的來明確了解我們每小時是如何度過的,并努力的更好利用時間。
8、采用更好的編程實踐
過度的文檔永遠不會是壞事。
不,我不是在用兩個不同的詞匯重復同一個決定。這一次,我談論的做法圍繞編碼本身的實踐。我不能告訴你我有多少次熱切地開始了新的項目,然后一個半小時后說,“嗯。。。我要為嘗試這個功能創建一個分支。噢,等一下,我忘了開始時初始化Git。。“確保我記得從一開始就使用代碼版本是我在2012年還要去面對的工作,它能使你的項目歷史更清晰。
另一個我經常忽略的基本編碼實踐是注釋。我可以變出許多行巧妙的代碼,然后在剩下的時間里為其他事情分心。第二周我回到工作里時花了20分鐘試圖弄清楚它。這會困擾你嗎?請你給自己幫個忙,為自己和其他人留下有用的注釋。文檔和注釋是同樣正確的事情。我最近在學習Dojo,我發現它的代碼文檔是無價的。當然,文件的水平將取決于你的項目的公開程度,但是我認為過度的文檔永遠不會是壞事。
9、產生被動收入
我猜Nettuts +的絕大多數讀者做客戶端的工作,無論是作為一個自由職業者或以其他方式。那么為什么不另外獲取一些被動收入呢?Envato(譯者注:自由職業者創建的著名公司,旗下有銷售類、教程類和博客類的網站)有十個市場,在這里任何具有合適技能的人都可以獲利。為ThemeForest(譯者注:國外知名設計網站)構建一個主題,為CodeCanyon寫一個腳本,其潛在價值永無止境。當然,如果你的技能不適合Envato市場,或者即便可以,還有其他許多方法可以產生被動收入。例如如果你是一個作家,可以試試Tuts+ Premium(譯者注:一個學習設計、Web開發技術的網站)。他們一直在尋找充滿激情的新教師。
在市場或個人網站上銷售項目是一個聰明的方式,可以被動地獲取一些額外的現金,同時你還能做自己享受的事情。
10、給自己放個假
戴上一頂完全不同的帽子…在有些時候
到目前為止,前面的每一個決定是你可以做的一些事情來改善你作為開發者的技能。我會密切指出,你要成為一個優秀開發者可以做的最好的事情之一就是不要成為一個開發者。。。在有些時候。有時候需要戴上一頂完全不同的帽子。保持甚至和開發毫不相關的一項愛好,而且最好不要涉及電腦。玩某種樂器,閱讀,寫作,開拓廚藝。不管你做什么,留下一些放松的時間。當你這樣做時會發現,編程問題的解決方案往往出現在休息時間。
我曾經用在開車回家路上的思考解決了許多代碼問題。
當然,定時休息是很重要的,還有那些一年幾次更長時間的休假。此外扔了那些年度計劃!
你的決定?
好了,這就是Web開發者應做的十項決定的清單。你覺得有哪些不在我的名單上?讓我們在評論中來聽聽這些意見!