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