提到編程,固然要知道編程思想的進化史,而半路出家又特別是自學編程的人每每沒有通過系統專業培養,這部分每每會被忽視,但「是思惟習慣指導着行動」,瞭解程序編寫的發展歷史才能瞭解進化思路。
做爲我入手的VB6並非完美的面向對象的高級語言,但已算是比較合適學習的優秀的面向過程的高級語言了,初學之,從歸提煉代碼,養成面向過程——造成養成寫可重複使用的塊的好習慣,也是編程路上必不可少的階段。
我本身做爲一名小學老師深知:思惟習慣的造成很是緩慢,絕非說今天想到今天就能夠作到,是不斷在反覆的反饋刺激後才能固定下來的思惟迴路,最終才能夠在不經主觀強化約束的狀況下默認執行。剛開始必須反覆糾正之,反覆重構之。
一開始寫代碼,舉個例子,鏈接ACCESS數據庫,按鈕一的點擊代碼中須要打開數據庫的某個表進行操做,而後關閉它;按鈕二的點擊代碼中也須要打開這個數據庫的另外一個表進行另外一些操做,而後再關閉它(這兒只是簡單舉例,初學者可關注,高手請繞道)。那麼查閱本身過往做品,特別是能找到的初期做品,就發現一個問題:兩個按鈕的點擊事件中的代碼都是按照以下流程走的:
兩個按鈕中加粗顯示的部分能夠發現是重複的,若是在兩個按鈕的點擊事件中都寫這些代碼,將形成重複勞動,固然事實上是複製粘貼,但又形成另外一個問題,出了錯,將要修改兩處,若是找不到錯誤在哪兒就更慘——這種事在個人過往經歷中常常發生,每每花個通宵甚至都沒法找到到底錯在哪兒。
其實咱們能夠將上面加粗顯示部分的操做,分別放到兩個可調用 的 程序 塊中,稱之爲 函數的東西里,使用時直接調用之就能夠了。
而事實上上面兩個按鈕的單擊事件中,斜體顯示的部分,雖然操做的是兩個不一樣的表,但基礎操做是同樣的:都是打開某一張表,則也能夠放到一個程序塊中,只是在調用塊時,須要告訴這個程序塊,你給我打開哪張表就好了。
可是,日後過了將近一年,這種不是面向過程的思惟習慣才被慢慢改正過來,可見一個思惟習慣的造成是多麼艱難。日後查看一些做品源代碼,就可見如上例中的程序流程就變成了這樣:
程序塊一_我是負責鏈接那個ACCESS數據庫文件的()
程序塊二_我是負責斷開與那個ACESS數據庫文件的()
程序塊三_我是負責打開想要打開的表(這兒告訴我要打開哪一個表)
程序塊四_我是負責關閉想要關閉的表(這兒告訴我要關閉哪一個表)
正是保證學習的思惟天天都有進步和改變,也正是堅持天天都改變本身一點點,這種面向過程的編程思惟就造成了一種習慣思惟,每次開始寫具體控件(如按鈕就是一種控件)時,都會先自發地想到是否 些代碼能夠單獨放到一個 程序 塊中?獨立的程序 塊(就是專門供別人笑呼叫使喚的程序 塊)多了,是否是能夠專門創建 一個模塊文件保存起來?
經過這樣天天進步一點點,天天改變一點點,終於完成了編程思惟徹底的完成面向過程編程的轉變。
後來,當學習JAVA等時,又天然地養成了面向對象的思惟習慣的轉變,一下手,就會自覺地習慣地想到:把這些要反覆和到的功能看成一個獨立的類吧,讓它本身作什麼,有什麼特色,有什麼可自上繼承的等等,這樣,思惟一到,代碼竟活了起來,編程竟天然有趣起來。
由於日子天天在改變,世界天天在改變,只有讓本身天天都有新的改變與進步,纔可能適應這個變化 的世界,那就是天天進步一點點,一年,十年,變化 就至關驚人了。轉變思惟,跟上時代的思惟才能讓本身永遠走在時代的前列。
記得讀書時代,教我畫國畫的老師講過一個小事,他說他有個鄰居很喜歡畫國畫,但好多年來,每次下筆畫小雞等,筆法順序基本同樣,只只小雞都差很少,雖然確實是特別愛畫畫,但多年來畫做幾乎數年如一日,沒有二致,還處處賣弄本身的做品——旁人不語,但實在可悲。
這個故事當時給我巨大的觸動,這些年來,給願意向我學習的徒弟們,我多數並不會教他們具體要怎麼去寫代碼,要作些什麼,我只告訴他們要達到什麼目標,其他讓他們本身去探索,只是上面那個故事是要常常做爲鞭子鞭策他們的。不少徒弟們進步仍是很是之大,迅速實現了自個人不斷蛻變,這即是從心培養思惟,由心裏思惟的轉變而驅動外在行動變化 的力量。
若是說編程學習除了改變了我粗心大意的行動習慣以外還給我帶來了什麼的話,最大的收穫即是——改變了人思惟的習慣,使思惟能夠如水般隨時適應時代這個容器的任何變化 。