一位phper的經驗

光陰似箭,不知不覺做軟件就已經過了六年了,相對於剛開始學編程的人來說還算是老手,但我總不敢稱自己是高手,因爲和我心目中真正的高手們比起來,還差的太遠。世界上並沒有成爲高手的捷徑。正如愛迪生所說“天才就是百分之九十九的汗水加百分之一的靈感”。真的大牛應該都是日積月累,長期堅持的自然結果。
   
其實我只是一個程序員,在這裏和大家一起分享下自己幾年程序生涯的一點點體會,純屬個人觀點。如果有哪裏說的不恰當的地方,還望批評指正。如果有一點點對你有用的地方存在,那將是對我莫大的安慰。

 

1、什麼是程序員的基本功?


      
廣義來說就比較多了,拋開數據結構、算法、編程思想、設計模式等不說,豐富的想象力,縝密的邏輯思維、學習能力、恆心和毅力、溝通能力....太多了,這些都算是基本功。
    
所謂基本功,就是說抽空都要練習的。就像一個學武之人一樣,每天早上要跑步、扎馬步,也像一個京劇演員樣,一大早就要吼幾嗓子,我們程序員也得每天練習基本功。
    
廣義的基本功涉及到生活的方方面面,時時刻刻都能練習。這裏着重強調下狹義的基本功:數據結構,基本算法、編程思想和設計模式、至少精通一門語言等。
    
程序員都知道程序=數據結構+算法,可見數據結構和算方法對我我們程序員來說是何等重要。
    
編程通俗一點說就是,想個辦法把一堆舊數據按照要求整理整理變成另一堆新數據。首先要想好的就是把舊數據放好,你可以把計算機的存儲設備想象成一個大的盒子。我們要想辦法佔用盡量小的空間(少用內存),把這些舊的數據放好。(當然還要考慮整理這些數據的方便性,比方說移除掉,或者新增數據等。)放好了舊的數據,現在就要開動大腦,想出個好方法-----如何操作才能使得整理的時間儘量的短(少用CPU)。編程其實就是這個目的,所以我們程序員常常思考的問題就是這兩個了:1、如何放置數據  2、用什麼方法處理速度快。
   
一般來說,我們不需要太苛求佔用儘量少的內存和CPU。畢竟現在的機器性能不是制約我們的主導因素,現在制約我們的主導因素是,“用盡量少的時間把需求合理的完成”。可以說,絕大部分企業對程序員的要求並不高,他們僅僅要求你按照需求在規定的時間做出來即可,並不是非常關心你佔用多少計算機資源,硬盤不夠,買,內存不足,補。但是這個並不意味着我們可以肆無忌憚的濫用計算機資源。
   
舉個實際的例子,假如瀏覽一個網頁,本來需要1秒的時間能夠打開,結果由於程序員的失誤或粗心,或者說基本功力不足,使得整個過程變成2秒,你可能認爲這個無所謂,不就是多了一秒麼,應該沒什麼大不了的。如果你真這麼想就大錯特錯了。
   
就拿個一般的網站舉例,每天1W PV,那麼浪費的時間就是每天166.67分鐘,1年就浪費60834.55分鐘。約等於42個晝夜。你說這42個晝夜的時間幹什麼不好,非要浪費在計算機上,而且這個對計算機的損耗,以及浪費的電能等都還沒有計算。
   
可能有人說,對於這種普通的站點,一年42個晝夜也算不了什麼,但是請注意我的例子只是說系統的一個地方,假如一個系統有不止一個這樣的地方那就更誇張了。
   
對於大型的互聯網網站,這個就更誇張了,類似百度和google這樣的企業,一天都有上億的PV。就按1億計算。大約是321.4天!
   
對於我們做開源程序的程序員來說,這個尤其值得關注。要知道並不是每個HDWiki系統都是可以隨意使用計算機資源的。大部分空間對內存和存儲空間都有很高的要求,你必須在一定的範圍內實現你的程序。而且一個地方出現疏漏,影響的是千千萬萬個網站,而不是某一個站點。這個就對我們的開源技術人員提出了更高的要求,我們在編寫程序的過程中,必須更加嚴格和認真,我們應該做到的是“用盡量少的時間把需求完美的完成”!

 

2、重視解決問題的思路和事物的本質

 

重視思想、重視問題的本質,不要浮在表面看待問題。例如我面試人的時候常常問一個web開發基礎問題:說說session的原理。這個對於搞web開發的人來說,是個很基本的問題。如果連session的原理都搞不清楚,說明這個人不是很喜歡思考。平時開發肯定都用別人說的,別人怎麼說,他就怎麼做。至於爲什麼一個用戶能夠登錄成功,他始終是不清楚的。當然,不明白session的原理不是說就不能搞程序開發,一個項目也需要一些純的coder。純的coder就是按照要求填寫代碼的,基本不需要思考。我相信每個有追求的程序員都不會甘願成爲一個純的coder,那麼,請在遇到實際問題的時候,多深入思考思考,多問幾個爲什麼,一直深入到問題的本質。這樣堅持下去,你絕對是一個有思想的程序員。碰到問題就很容易拿出一個靠譜的方案。
      
可能會有人說,我怎麼感覺平時沒什麼問題好問的,好像自己什麼都知道了。知識就像是車輪,學得越多,這個車輪就越大,轉一週所需要的行程就越長,而你會發現,車輪變大的同時,所接觸的東西也是越來越多了,然後猛然發現,不會的東西變得更多了。如果一個人沒有問題問,只能說明知道的太少了。
        
在我們的日常工作中,需要問的東西太多了。爲何我們要用框架hibernate有什麼用,用了有什麼好處,用了有什麼壞處?java爲何是編程第一流行語言?Ruby爲何突然火爆起來了?PHP還能火多少年?HDWiki能超過Discuz麼?Lucene這個東西爲何命名爲Lucene?丁磊爲何要養豬?......
       
重視思想和本質帶給我們什麼好處呢?首先,作爲一個瞭解本質的程序員,心裏就很踏實,和其他技術人員交流,不會被鄙視。第二,能夠讓我們能夠知其所以然,而不至於內心痛苦。例如數據庫索引,大家都知道,建立了索引後,SQL查詢條件"="的時候,速度就提高很多。如果我們把這個當作經驗背誦下來,你會馬上碰到一個反例。例如當你的表有個標識字段,1表示有效0表示無效。這時候如果在這個字段上建立了索引,按照經驗,我們肯定認爲速度會提高很多,但是實際上,基本沒有變化。這個時候自己就很鬱悶了。如果想做一個快樂的程序員,就一定要搞清楚索引的本質,爲何索引建立後就快了。如果明白這個本質,就不會有這樣的疑慮了。第三,能夠讓我們提高工作效率。第四,讓自己更加清醒,不會被表象所迷惑。

 

3、簡單就是美,我們都是藝術家

 

   什麼是美?我想是事物給人無論是哪種感官上的體驗都還不錯,這就是美了。比如夕陽柔和的餘輝灑在眼中,呼吸帶着草味兒的空氣,要做的事情做好了,靜坐着享 受美好的一刻。簡單的東西不會使人厭煩,就好象天邊幾片單調的雲彩,徐徐清風拂面,帶來的是心情舒暢,頭腦冷靜,能給自己一個澄澈的思維空間。
  
在程序的世界裏,同樣遵循這一原理。一個程序如果寫的漂亮,很容易讓別人看懂。程序不是寫給機器看的,程序是寫給人看的。當一個程序出問題了,我們希望迅速解決問題。如果程序寫的很美,隨便一個技術人員都能夠看的懂,那麼就非常有利於我們解決問題。
舉個例子: 計算每個月中的天數。
代碼1
switch(month){
case 1,3,5,7,8,10,12:
day=31;break;
case 4,6,9,11:
day=30;break;
case 2:
day=28;break;
}
代碼2
var days=[31,28,31,30,31,30,31,31,30,31,30,31];
day=days[month-1];

實現了同樣的功能,你覺得哪段代碼容易看懂些?
再看看下面的兩段代碼,我相信你一定知道那段更美吧!
代碼A
function isStringEmpty(str){
    if(""===str) {
        return true;
    }else{ 
        return false;
    }
}
代碼B
function isStringEmpty(str){
    return ( ""===str );
}
   
有大牛說過 “對於軟件這種東西,寫一遍它可能OK(做到這點也不容易),寫十遍就是一個偉大的作品,再寫一遍它就更偉大些。” 我很贊同這個觀點。第一次很難寫出一個漂亮的程序,但是我們可以不斷的思考去重構我們的程序。讓我們的程序更加簡單,更加漂亮!程序員的目標,絕對不是拼湊一個能實現功能的垃圾軟件,是創造一件偉大的藝術品!我們都是藝術家!

 

4、多模仿別人,養成良好編碼習慣

   

  普遍認爲,東方人模仿能力很強,但創造能力差。我對這一點即不贊同也不支持。但是有一點大家應該都贊同,那就是模仿肯定比創造簡單。咱暫時創造不出來,可以先去模仿!
   
要知道,模仿也是一種能力。騰訊大家都知道吧,基本就沒有創新過。全部都是模仿。國外有個ICQ,騰訊就開始搞OICQ,國內搞淘寶,騰訊就有了拍拍,有 百度知道,就有騰訊愛問,有浩方對戰平臺,就有QQ對戰平臺,有土豆網,就有了QQ視頻,....馬化騰自己也說:模仿也是一種成功!現在他用鐵的事實來證實了這一點。
   
對程序員來說,模仿能力也很重要。比方說我們要做一個彈出式DIV,這個時候你千萬不要自己去從頭開始去做。首先,我們要想辦法找找看,看看是否有適合我們的已經存在的。如果有,我們直接下載,然後就可以用了。如果沒有,可以找找類似的,然後再改改,還是可以爲我所用。這樣的話,可以爲我們節省不少時間。 項目的進度有可能會提前。
   
一個程序員剛進入一個公司的時候,短時間內還難以瞭解系統的整體構架。這個時候也不要發怵。怎麼辦呢?咱模仿項目組的其他老同學,模仿別人的開發流程、模仿別人的代碼結構,模仿別人的命令規則......只要你模仿能力強,肯定把大家怔住了。給你的評價就很不錯。爲什麼會這樣呢,因爲項目組的老同學正用的 肯定是目前比較合理的,只要你模仿着做,基本就不會有問題,你說你過試用期還會有問題?
   
模仿能力就類似於段譽的“吸星大法”。吸星大法修煉起來的難處有兩點:難處一,是要散去全身內力;難處二,散功之後,又須吸取旁人的真氣。模仿和這個不同的地方就是,模仿只是複製,並不需要毀滅別人。從這個角度來說,模仿應該比吸星大法更加人道主義些。模仿有時候也得暫時忘掉或者放棄自己的然後再學習別人的。只有敞開心扉才能容納萬物!
   
總之,模仿不僅能給我們節省不少的時間,還能夠讓我們迅速找到解決問題的正確思路和方法,正如牛頓所說“我之所以站得高,是因爲我站在巨人的肩上”,模仿也是站在別人的肩膀上,能夠省卻我們不少的體力,何樂而不爲呢?
關注技術趨勢,熱愛學習
作爲專業的程序員,技術趨勢不能不關注。IT行業發展迅猛,新的思想和新的東西不斷湧現。如果我們不睜大雙眼去觀察,去了解,我們就會被逐漸淘汰。
   
每天都有新的軟件產品誕生,有新的版本發佈,也有新的解決問題的方法出現。如果我們抽空關注下,我們很可能會有意外收穫。例如今天,你看到一條消息,PHP5.3版本開始支持閉包。這個意味着什麼呢?意味着你的程序寫法可以進行更優美的改造。再如你看到消息說MySQL推 出了一種新的引擎,你就要看看這個引擎有什麼特點,以後對我的工作有什麼幫助。
   
就是這樣,我們在一點一滴中積累,每天堅持修煉自己的基本功,長期的堅持。我們會發現自己一天比一天快樂,因爲我們每天都能夠輕鬆的像藝術家一樣說笑間就完成了自己的工作,你怎能不快樂?


   
這些是我這幾年程序員生涯的一點體會,希望能夠給大家有所幫助。也希望大家能夠分享下自己的經驗,讓我們一起提高,都成爲高手、高手、高高手!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章