寫在程式設計師轉讀博士第四年
06年畢業後為了養家餬口沒有繼續讀博士,轉去公司做軟體開發了,2012年覺得生活還可以就去中科院讀書去了。
對程式設計有狂熱的愛好,最長的程式設計時間是24*3小時,中間除了上廁所,吃盒飯沒有任何停頓。不是計算機專業,只是愛好,希望寫這篇部落格鼓勵喜歡從事程式開發,並且熱愛程式設計的人。
不要因為自己不是計算機專業的或者軟體開發專業的學生而自卑。很多因素會影響人的心理 與決策,但凡有興趣,人是可以克服環境因素的,專業只是某個時間點你可以主觀或者客觀的被要求做一件事,而且不用花費多大力氣。真正的計算機愛好者應該是這樣的人,有事沒事願意擴大自己在計算機方面的知識面,去讀書去搜刮一些自己不清楚或者還不瞭解的技術或理論。但凡下定決心做一件事,5年即可成為這個領域的專家或者專業人士。做軟體是我的愛好,學習是做好軟體的第一方法,興趣是能夠長期堅持下來的第一動力。
什麼事真正的程式設計師?並不限於寫程式碼,而是在於領域知識的轉化。如果一直停留在程式碼的細節上,只能成為一個熟練的程式碼工人,可以掙到差不多的錢,但是不會有太多的發展。真正的程式設計師是一種信仰,能夠轉化需求,能夠抽象需求為領域模型,用抽象能力的高低度量程式設計師之間的差異,程式設計師自身所處不同階段的差異是最有效的。抽象能力是建立程式的基礎,但凡離散數學,組合數學,又或者是兩者基礎的集合論,都是通過最本質的抽象來解決問題的。能夠通過邏輯組合,解決複雜問題的過程就是抽象具體問題為模型的過程。但凡棘手的問題都能對映到某類數學問題那就是程式設計師能力的體現。除此,無它。
如何訓練自己計算機程式設計方面的能力?功夫在不在程式設計的訓練,而在對問題的感悟。所謂感悟即對問題抽象為數學問題的思考。大學階段的程式設計是命題式程式設計,給出題目,用一些常規的思路解決。博士階段很少程式設計,而主要關注如何理解問題,把複雜問題轉化為一些數學命題,求解這些估計有解的命題。大學階段拼命閱讀的是關於類庫與模式的書,從北京大學出版社的win32程式設計,到清華大學出版社的資料結構,又到馬丁福勒的企業級開發,再到四人幫的模式設計,又或者是posa系列,這些都是我特別想了解的,也許很多人認為到此就可以沾沾自喜,但是這僅僅只是個開始,掌握這些,只能說可以做一個稍微高階的程式設計師。
什麼是最優秀的程式設計師?看到問題共性與特性的程式設計師。現代科學研究的發展已經轉向實證,即通過實驗結果反應理論的正確性。如果是程式設計師道理同樣適合,只是程式設計師不能通過實驗,而是通過專案來驗證自己的理論。為什麼越是優秀的程式設計師價值越高,因為失敗專案的成本更高。模式只能在形式上給出粗泛的共性,真正的本質是由數學原理精確定義的。不同領域知識決定了特性。這種特性可以是語義的不同可以是形式的不同。
博士階段的學習與本科階段的學習對程式設計師能力的不同影響。形式化與求解是永恆的主題。我個人認為計算機專業和數學專業的學生博士階段的工作就是一種對形式化工作的努力,以及在此形式化基礎上的求解方法的需求。不再被演算法束縛,而是對演算法的更深入的理解。最好的例子是人工智慧的發展,Luger的人工智慧一書中,對讀者的稱呼就是程式設計師,在演繹推理方面追求形式化的證明與遞迴求解,在歸納推理方面追求符號表示,連線表示,由此產生符號推理,分類和聚類方法的發展。
本科和工作階段較多的關注如何使用或精通一種程式語言,程式設計的時間更多;可是在博士階段,我感覺最多考慮的是如何設計一種我需要的語言,思考的更多。
寫給周圍的年輕人,不要認為讀書無用,只是抽象的層次太低會阻礙思考的深度。