從打醬油問題看程序員基礎(chǔ)知識的重要性
程序員的成長速度取決于兩點:
第一:基礎(chǔ)知識.
第二:后天的努力.
本人以一個例子說明基礎(chǔ)知識對于程序員發(fā)展的重要性:
分油問題:
兩個小孩去打油,一人帶了一個一斤的空瓶,另一個帶了一個七兩和一個三兩的空瓶。原計劃各打一斤油,可是由于所帶的錢不夠,只好合打了一斤油,在回家的路上,二人想平分這一斤油,可是又沒有其它工具?,F(xiàn)只用這三個瓶子(一斤、七兩、三兩)精確地分出兩個半斤油來。
當(dāng)時我看到這個問題,在紙上畫了一陣,一頭霧水.最后只有放棄,正確的答案思路是這樣的:
通過分析題目并結(jié)合深度優(yōu)先、廣度優(yōu)先和迭代加深搜索的算法的特點以及有缺點,這里選擇廣度優(yōu)先算法來求解該分油問題。如果采用深度優(yōu)先算法搜索,由于其盲目性導(dǎo)致搜索陷入局部陷阱,并不一定能求得解即使得到解也不一定是最優(yōu)解,因此并不采用此算法。迭代加深搜索則是在固定的深度上進(jìn)行深度和廣度搜索結(jié)合的策略來進(jìn)行搜索,這樣避免了單一的深度搜索無法得到解的缺點,但是找到的解并不一定是最優(yōu)解。廣度優(yōu)先以犧牲空間代價和時間代價來換取保證取得最優(yōu)解。由于該問題并不復(fù)雜,即使使用廣度優(yōu)先算法也不會占有太多的空間和時間,因此為了取得最優(yōu)解這里選擇廣度優(yōu)先算法來求解。
原來是應(yīng)用了數(shù)據(jù)結(jié)構(gòu)中的算法.如果你在大學(xué)期間沒有上好數(shù)據(jù)結(jié)構(gòu)這課的話,這個問題要想解決可能存在不小的問題,起碼本人就是其中的一個.
本人是自考出生,學(xué)習(xí)期間難免沒有正規(guī)在校學(xué)生學(xué)的系統(tǒng),起碼學(xué)習(xí)環(huán)境上比較差.學(xué)習(xí)期間學(xué)了C,數(shù)據(jù)庫原理,數(shù)據(jù)結(jié)構(gòu),但印象都不深,自己根本就不太會編寫C程序,只是明白些基本的語法.至于數(shù)據(jù)結(jié)構(gòu)這方面當(dāng)然就只算是聽過課,談不上理解,更談不上實際應(yīng)用.例如比較經(jīng)典的算法題;大牛生小牛的問題,如果你對遞歸算法沒有特別深入的理解的話,你很難想到用遞歸算法去解決。想到用什么方案后,你的問題基本已經(jīng)解決一半.
在一次去書店的時候,我發(fā)現(xiàn)在有的書名叫asp.net,我覺的好奇,因為我學(xué)的是ASP,覺得asp.net非常有意思,當(dāng)時看了下內(nèi)容,一下子就被DataGrid強大的功能給征服了,因為我發(fā)現(xiàn)用DataGrid可以非常方便的實現(xiàn)分頁,當(dāng)時馬上決定學(xué)習(xí).net,就這樣我開始認(rèn)識.net,當(dāng)然主要是ASP.NET這方面.
剛開始在工作中應(yīng)用DataGrid,分頁特別爽,不用寫太多的代碼,后來同事告訴我說這種要頁方式不好,是假分頁。后來經(jīng)過指點才知道,DataGrid分頁的原理,知道了它的原理后你才知道它的優(yōu)點和缺點,才能寫出以后的自定義分頁。.net編程并不是簡單的拖放幾個服務(wù)器控件,要清楚服務(wù)器控件是如何運行的,如何自定義服務(wù)器控件,以及擴展原有的控件。
在我后來的學(xué)習(xí)當(dāng)中讓我明白了一個道理,基礎(chǔ)太重要。如果你對OOP,OOA,OOD不是特別了解的話,你很難寫出擴展性強,維護(hù)性,可閱讀性強的程序.
現(xiàn)在很多的技術(shù)雖然我會,但是不一定能夠用書面的方式描述清楚,因為缺少理論知識.這讓我想起了有人說學(xué)校的知識沒有的話,其實并不然,學(xué)校學(xué)的固然不能當(dāng)飯吃,但它是一個重要的思想,只有具備了這種思想人才具備解決某種問題的能力.就像上面打油的問題,如果你對那些數(shù)據(jù)算法不太清楚的話,想找出答案我怕花的時候會多很多,想對了方向才會事半功倍。
在原文中提到了一點:2.盡量縮小研究范圍
本人有自己的觀點:覺得要看你所處的環(huán)境。
如果你身在一個大公司,開發(fā)的都是特別大的項目,團隊成員多,而且技術(shù)都強,那么你此時就要縮小研究范圍,只有你在某方面有成就你才有生存的空間。
如果你身在一個小公司,團隊就那么幾個人,這時,你必須會相對多的技術(shù),小項目用的技術(shù)可能會非常多,但不會太難,太深,太復(fù)雜,所以會要求你的知識面廣但并不要求特別精通。
所以我覺得要根據(jù)自己當(dāng)下的項目開發(fā)環(huán)境,決定你研究的知識范圍。
在原文的評論中,大家對于程序員追求新技術(shù)給出了相應(yīng)的看法,認(rèn)為不要盲目的去追求新技術(shù),掌握現(xiàn)在技術(shù)的同時關(guān)注新的技術(shù)。我個人也非常認(rèn)可。
本人自我覺得是個對新技術(shù)特別熱衷的程序員,有什么新的技術(shù)書籍出來了我都會去買,但往往因為和實際開發(fā)環(huán)境不太匹配,說白點就是有的項目根本就用不上,這樣會大大的降低我學(xué)習(xí)的積極性。所謂實踐出真知,老是寫demo......,而且新技術(shù)的速度太快,人非圣人,我想大部分分程序員都不可能全學(xué)會。況且如果你什么都會的話,那團隊就失去它的作用了。一味的追求還會出現(xiàn)園友們說的現(xiàn)象,每種技術(shù)都停留在表面,每方面都是學(xué)而不精。
【編輯推薦】