本文是我作為乙個入門兩年的半生不熟者給剛剛入門的新人的一些建議。主要針對的是新人開發過程中遇到的問題,發表的一些建議。針對的問題主要是問題的難易,基本概念的認識,以及系統框架的認識,文章初步對這些問題進行了**。
1.
難與易的關係
庖丁解牛,是乙個眾所周知的故事。游刃有餘,這個詞語,幾千年來,是人們在各個行業追求的乙個目標。面對一頭牛,對於乙個才開始學習宰牛的人來說,那簡直是乙個渾然一體的複雜的東西,簡直無從下手。在接受一門新的技術或者是新的學科的時候,很多人也會跟那新學徒有同樣的感嘆。
軟體開發,這個領域,對於很多門外人來說,也是乙個神奇的領域,高深莫測。即使是很多在本行業的人,也會發出同樣的感慨。蜀道難,難於上青天,李白感嘆,是因為他缺乏交通工具,缺乏徒手攀登的技巧和準備…我們感嘆的人缺乏什麼?
從實踐的角度看,我們中的很多人缺乏一種視角。那就是如何看待難的問題。世界上幾乎任何乙個難題,難度之大,很多時候不是它本身有什麼奇異,而在於我們的認知的方法和程度。去找問題裡或者說領域裡的規律,掌握這些規律,那麼我們就能把握這個問題,真正理解這個領域。這裡說的理解把握,是很籠統地口號式的方法,但我們要看到,它為我們指出了方向,也僅僅是指明了方向:事物自由它的規律。軟體行業裡,小的方面,比如語言(比如c),大的方面比如軟體的發展趨勢,自有其發展的規律。如果我們能夠知道語言是為了更好的表達,在把握某種語言,我們就能夠不被各種天花亂墜的語言所迷惑,如果你能夠綜合歸納這些語言,那麼你也許能夠也去發明一種語言。如果你能夠明白,軟體是為人服務,是一種工具,那麼你就能夠明白,它的複雜性不在它本身,而在於它服務的行業的複雜性和特徵。
規律並不會告訴我們,我們仍然無法操作,難題仍然是難題。具體操作的時候,關鍵還是我們首先要去掉畏難的心理,去除那些神秘的想象,這樣其它相應成章的事情就能夠順利進行。
一種方法是化整為零。我們可以看到,很多時候,或者經驗告訴我們,很多問題,都是我們一步步去解決的。這也就意味,這些問題是能夠細分的。而我們面對這些小的問題的時候,相對就會容易得多。這時候,複雜的問題也就變得簡單了。比如乙個演算法,一段複雜的程式,乙個複雜的專案,我們同樣可以看到這種相似的細分的痕跡。複雜的演算法,可以分成幾個簡單的小演算法。複雜的程式,可以分為幾個簡單的模組,乙個複雜的專案,可以劃分為幾個小的專案等等,都貫穿了一種化整為零的思路。化整為零,也就是展現了一種我們面對難題,所應該採取的方法。
一種方法是先易後難。這似乎是乙個很好懂的道理。但在具體的實踐中,我們發現,我們總有乙個一攬子解決某個問題的傾向。我們這裡不去追究這種傾向的內部根源,但這種傾向往往是造成我們面對難題束手無策的局面,或者更有甚者是徒勞無功。先易後難,其實是我們一直以來認知事物的一種方法。面對難題,我們如何採用這個方法?自視很強的我們,還是先拋開那些無關緊要的問題,動手或者思考乙個簡化的問題,然後把這個問題逐步的複雜化:加入各種限制的條件,各種邊界處理,各種以外的情況,逐步使得這個簡單的問題接近實際的問題,從而使得問題能夠得到解決。如此,當我們按照這樣的思路解決問題的時候,會覺得很容易。
化整為零適合那些我們有所理解的系統,而先易後難,適合對付那些很複雜而我們根本沒有經驗的問題。
總之對於乙個問題,我們應該先分析,而不是用難字作為我們懶惰或者逃避的藉口,而是應該積極地去面對,克服畏難的心理。容易簡單的工作,同樣也能逐步解決複雜的問題,或者說難題是由簡單的問題的有機結合。擁有這樣的視角和態度,那麼難題,也會迎刃而解。
2.重視基本概念
從大的方面而言,是概念締造了文明這座巨塔。小而言之,概念,是我們表達思維的一種基本的方式。概念對於軟體行業而言,它們是一系列的規範。基於這些規範,我們建立乙個複雜的軟體的世界。
由於我們現在的工具越來越智慧型,我們的概念之概念越來越花哨,很多時候,我們似乎可以在一知半解的情況下,搭建一些
令我們自己挺得意的東西。但當問到細節,我們很多人不甚了了。也許對於我們一些自娛自樂的東西,這樣做沒有什麼大不了的。但當這些東西真正需要發揮效能的時候,我們會發現,我們常常陷入一種迷宮,迷宮裡有很多很多神秘的東西。我們不知道錯誤所在,不知道如何解決。
問題在**?不知道我們是不是都有這樣的經驗,當我們在發現自己的錯誤的時候,我們發現我們錯誤不是我們不知道一些繁瑣的東西,而是在於我們一些基本概念的似是而非的理解。
人們對於新概念和看似繁瑣的東西的追逐,而對於一些小的東西的忽視,這是這個時代的通病。而基本概念,可以說是乙個行業的基礎。如果忽略它,漠視它,會使我們在解決問題的時候,走更多的彎路;會讓一座大廈建立在流沙之上。因此,對於真正想從事軟體行業,或者其它行業的人來說,基本概念,這種行業基石,不能忽略,遺棄。否則,如果能夠成功,那也只是僥倖。
3.系統框架的理解
一葉障目不見松林。這說的是我們常常被一些細枝末節的東西蒙蔽,而沒有看到整體,正如盲人摸象裡的道理。作為乙個經常外出的人,知道一張地圖的作用,而乙個深諳某個領域的人的頭腦裡會有乙個清晰的脈絡,他明白這個領域的過去和現在,以及未來。作為乙個初次接觸某個新事物的人,很容易在新事物的細枝末節裡迷路,或者說很容易被一些東西迷住,而忘記去了解這個事物的根本性的結構,很多時候,這無可厚非。因為,這是乙個過程,只是這個過程有長短之分,知道樹葉來自松林總是好的。通過這個過程,我們才能獲得一些感性的認識,為以後更進一步的了解打下基礎。下一步怎麼走?
人們常說,人需要有夢想,我們可以把這個夢想看作是乙個的基本的框架。從而他的所做所為很大一部分將來自對這個夢想的逼近。那麼,系統框架,從某種意義而言,是一張地圖。它能夠給我們指引乙個方向,給出我們能夠做什麼,並且能夠達到什麼程度的標準,同時也是我們理解這些系統的基礎。對於軟體開發而言,這裡的系統框架可以從兩方面去理解,一種是我們需要開發軟體環境某部分的系統框架,一種是我們開發的軟體的系統框架。開發環境的系統框架,是支撐應用軟體的平台,它給出了理解系統架構的思路以及關鍵技術和設定。比如區域網系統的系統構架,比如作業系統構架等等。
我們中有一種趨勢,恨不得自己很快了解和掌握整個系統的所有的東西,人的求知慾和新鮮感讓我們樂此不疲,再加上我們這個時代的傳染病,很多人給自己制定很多的計畫,埋頭苦幹等等,希望一夜之間成為大師級的人物。這也是乙個夢想,但我要說這個夢想幾乎總是破滅的,這個夢想本身就不切實際。這裡有兩種結果,一種是眼高手低,滔滔不絕,卻一無所成;有一種,使一知半解,半瓶子的水,幾年下來可能,差不多成為口頭禪。我們這裡不去分析這裡的種種原因,只是指出其中的一點,那就是很多人對於系統框架的忽視,沒有方向。我們需要在林子裡探路,我們更需要常常爬上一顆大樹或者是山嶺上去辨別方向。在軟體行業,那就是要常常注意各種系統框架,更要注意開發軟體的系統的框架,否則就會在那知識的或者**或者細節的森林裡迷路,徒耗人力物力。
下面是乙個系統框架圖(agilelabs enterpriseframework):
(圖略)
這是乙個典型的系統框架結構。我們通過它可以很快了解這個框架的方方面面,但不是細節,細節是實施過程的關鍵,那是另外的乙個話題。 4.
參照,
參照再參照
方法亦無常法,是要根據不同的情況,採取不同的方法,這裡只有乙個是共同的,那就是要解決問題。我們很多人束手無策,不是因為我們頭腦不聰明,而是我們的頭腦不夠智慧型,缺少一種變通,換句話,就是不夠的靈活。
剛出校門的我們,很容易進入乙個誤區,在學校,我們習慣於乙個人啃著筆頭,去解決乙個問題。如果我們乙個問題不是啃筆頭啃出來的,那麼我們就惶惶不安,一是我們長期以來培養起的考試教育的自信,一是我們害怕會有某些很多難以預料的結果。我們卻不知道,憑我們小小的腦袋,想去獨自理解或者重新建立乙個領域或者是系統,如果我們能夠看到那些系統或者領域是很多很多人經歷幾十年或者幾百年為建立完善這個領域或者系統而努力,那麼我們就知道自己有多麼的可笑。我們必須去搜尋,去學習,去實踐。
在軟體行業,我相信,我們如果不能做什麼,或者難以理解乙個概念或者是知識點,那麼,我們的方法是什麼?
有人會到書店買大部頭的書,一頁頁的啃;有人獨自鑽研,不停地按照自己的方式去試驗;有人卻到網上搜尋解決方案,在幫助文件裡尋找解釋,在自己的鍵盤上啪啪的敲擊小的示例。結果我們可以預料,那就是啃書的,很長時間還是一籌莫展,得出書很好的結論,僅此而已。埋頭鑽研的人,頭髮都白了,最終說:這個東西太難太難,然後灰心地走開了。最後乙個很快就拿出方案,問題得到解決,雖然還不夠圓滿。一段時間下來,進步最大的也是他。
上面提到的情況完全是來自於現實中的人,問題在**?書要看,鑽研也必須,問題在於,我們沒有意識到,軟體開發是一門實踐的科學(很多學科都是實踐的科學,管理更是如此)。只有在實踐中才能成為乙個比較合格的開發人員。有人會說,書,網路,等等,是不是不需要,恰恰相反,這些東西,是別人的實踐,是寶貴的財富,但那僅僅是別人的,如果你不去理解,不自己動手去實踐,那也還是別人的。比較合適的態度,對於我們這些平凡的人來說,最好多看別人寫的東西,多聽別人的意見,多動手去實踐印證想法,我們時間有限,那麼我們就要吸取別人的實踐;我們無從下手,就要去動手,從最基本的做起。只有這樣,我們才能取得進步。
現在是乙個資訊發達的世界,各種資料,在書店,在網際網路,比比皆是。學習能力成為最重要的能力之一。上面的方法,簡單地說,就是多參照幫助,多參照他人的文章,多參照他人的**,並且不斷地將這些得來的知識轉化為自己掌握的東西。
致初學者!! 電子方面
日期 2004 12 16 字型 大 中 小 讀了你的信,首先為你的上進心感到高興!你說的沒有方向,其實這也是許多人的困惑,有的人甚至一生都沒找到方向。無論你從事什麼工作,你都要去想一件事,而且一定要很清晰 你將來準備要做什麼,你的目標是什麼。其實從事什麼行業不重要,重要的是你能否成為這個行業的精英...
致初學者!! 電子方面
日期 2004 12 16 字型 大 中 小 讀了你的信,首先為你的上進心感到高興!你說的沒有方向,其實這也是許多人的困惑,有的人甚至一生都沒找到方向。無論你從事什麼工作,你都要去想一件事,而且一定要很清晰 你將來準備要做什麼,你的目標是什麼。其實從事什麼行業不重要,重要的是你能否成為這個行業的精英...
致Python初學者 Anaconda入門使用指南
魚心fishstar 打算學習 python 來做資料分析的你,是不是在開始時就遇到各種麻煩呢?相信大多數 python 的初學者們都曾為環境問題而頭疼不已,但你並不孤獨,大家都是這麼折騰過來的。為了在入門時少走彎路,並且讓高漲的積極性不至於太受打擊,這裡推薦使用 anaconda 來管理你的安裝環...