很多時候,一門門檻很低的編程語言對於初學者的幫助是非常大的,從而決定這個人的技術路線的選擇。
在經歷過大一下學期對C,和C++的迷茫之后,在大二上學期,學校在搞一個網頁設計比賽,正好和兩個朋友一起參賽。開始接觸網頁設計,學習html語言。
剛開始接觸html的時候,覺得這一門語言真神奇啊,寫幾行代碼,直接用瀏覽器打開,就可以看到效果了。對於學了一個學期的C和C++都沒有辦法脫離命令行程序的我,看到是如此的興奮,那一個月,無論上什么課,都是那一本html教程在哪里看,白天學語法和標簽,晚上做demo。由於設計到動態的腳本,又接觸了asp這一門語言,有了C的基礎,學起來也非常快,倒是html反而學了有一段時間,主要是這一門語言並不是真正意義上的編程語言,只是用類似xml的標簽來展現界面,而解釋html腳本的正是瀏覽器。
根據標簽來生成界面技術,在目前各個平台都有蹤影,例如android里面通過xml文件進行頁面的布局,在ios里面的通過加載xib文件進行頁面展現。在VB里面,貌似用的是屬性文件格式例如:A=B,目前還有一些通過json格式來保存頁面信息。這些設計都是基於元數據編程,在《程序員修煉之道》里面有提到過,這個技術非常重要,用得好完全可以提高系統設計能力。
當然了,以上只是現在感悟,那個時候那里只是知道html相當神奇,能夠很快的做出原型界面,再加上asp動態語言的幫助,在很短的時間內,也就是兩周,做出一個選課系統,那個時候大受鼓舞,能夠在短短兩周之內,就做出一個可以用的網站來,已經完全出乎無意料。不過現在想想,主要還是因為有C語言做基礎,大多數面向過程的語言都是命令式的,無非就是變量類型,條件語句,循環語句,數據結構 ,以及表達式。
最終,設計了一個學校的主頁,可以注冊和登陸,就這么簡單的功能,竟然獲得了校三等獎(由此可見,我們學校夠垃圾的)
技術的選擇
軟件 vs “硬件”
大二上學期主要學習了asp和javascript,html這三門語言。使用場景也比較簡單,不過這段時間也面臨一個選擇。這段時間很多培訓機構到我們學校搞宣傳,思科比較多,說的是CCNA,CCNP考試。那段時間正好也面臨選擇,到時做軟件還是做硬件,那個時候對網絡管理員的理解就是做硬件。后來想想,自己根本沒有錢去買他們的產品,只是學理論課,不能實踐,也不能做出點牛逼的東西,就放棄了。現在想想,做運維挺苦逼的,手機不離手啊,經常通宵搞發布。
而且我現在也不建議大學就去考一些CCNA相關的認證,計算機這個行業,最重要的是實踐,大學生條件有限,不太有機會維護網絡設備,要知道那些網絡設備都是比較貴的,你也不可能自己買一個組網實踐,你沒有那么多的錢,況且思科相關的認證都和其產品綁定的非常死,現在除了電信相關以及大型互聯網公司,其他一般很少會使用思科的產品。不過網絡協議相關的規范和設計還是可以深入學習的,這一些基礎理論保鮮度還是很長的。
C# vs java
做“硬件” 還是 “軟件” 如果說是自己思考來決定的,那么 C# 和 java的選擇就完全是戲劇性的。當時一個哥們說,asp已經過時了,現在流行java和C#, 我們要選一門語言學習。當時也正好發現asp用的很熟練了,覺的說的有道理,就比較猶豫到底學C# 還是 java,其實說白了,到底是跟着sun 還是跟着微軟。當時他說,師兄都在搞C#,我們也搞好了,跟着微軟沒有錯。而另外一個高中就搞編程的哥們說,別跟着微軟,這家伙太壟斷了,而且微軟sdk里面常量太多了,都是微軟自己定義的,而且好多他都幫你實現了,你就是調用一下,不利於提高編碼能力。
以當時的理解能力,當時記住的就兩點:
1 微軟太壟斷
2 學微軟提高不了編程能力
當時對編程了解還不多,那個時候年輕,比較追求自由,也比較憤,討厭壟斷,接受不了,就選擇了java。選擇真有戲劇性啊。
當時說的第一個點,應該說微軟比較封閉,很多都是基於windows之上,都是商業產品,產品基本上也都是閉源的,從這個角度來看,我是接受不了的,也是喜歡自由導致的,就像圖形社區對老趙的采訪所說的——“理論上說,在微軟你不可以讀開源的代碼。微軟害怕你在看了開源的項目之后,會不知不覺地在工作中應用到開源東西,產生法律糾紛。這點真的很可惜” 。
至於第二點,編程語言首要的就是提高效率以及解決問題,這個是最基本的要求,微軟在這一方面座的比較好。至於編程能力,是和語言沒有關系的。編程能力的提升主要是 多看,多寫,多思考。
多看:嘗試着看自己經常使用的產品的源代碼,了解其設計思想以及代碼編寫的技巧。這個是最便宜也是最簡單的方法,但是很實用。
多寫:如果程序員寫的代碼少,即使看的再多,也沒有效果。寫代碼能夠把“偷來”思想去實踐,然后發現是否用在合適的地方。
多思考:如果一直寫代碼,機械套用一些模式,不會由成長。成長最重要的反思,我代碼寫的好嘛,能夠滿足需求嗎,通用嗎,重復率高嗎,是否還能有更好的方法?一個coder高手,一定是一個對審美要求極高的人的。如果發現自己的代碼重復率太高,自己就會覺得不舒服,看上去非常啥。同一段代碼,你一個月后,一年后,三年后再去看,肯定有不同的感覺,會發現很多問題,如果發現不了問題,說明要么代碼很完美,要么自身沒有任何長進。
相反,java的發展壯大離不開開源社區,全世界有無數的工程師在貢獻自己的代碼。如果提高編程能力,最好的一個途徑都是閱讀開源的代碼,看看別人代碼是怎么設計,有哪一些思想值得借鑒。如果一個java工程師,沒有閱讀過任何一款開源產品的源代碼,那只能說他是一個不合格java的工程師。有這么好的條件,為啥不利用了。