首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

冒號課堂§1.0:開班導言——程序員的四層境界與批判精神

     編輯:Java 相關知識

授人以魚不如授人以漁:一場關於成長的對話

冒號開班首言:「姓冒名號字解之,叫老冒便好。編程多年,小有所成,不敢專藏,開班共享。一家之言、一孔之見,若能拋磚引玉,何懼方家之哂?」

四層境界:從「知其所然」到「我為人用」

階段內涵角色定位
學會(知其所然)掌握具體編程知識初級程序員
會學(知所以然)快速深刻理解技術、舉一反三中級程序員
會用(人為我用)靈活運用所學於實際設計高級程序員
被用(我為人用)設計廣為人用的應用、庫、框架系統分析師/架構師

更高層次——發明主流設計模式、算法、語言、理論,可稱計算機專家。本班旨在助諸位向更高階提升。

傳統課堂 vs 現代課堂:學習方式的範式轉移

傳統課堂:知識系統完備貌似終極、單向被動傳輸、注重現狀而非起源歷程未來。中國學生最擅長考試、最習慣考試、最厭倦考試。告別學生生涯踏上職業旅程——恭喜脫離苦海,悲告掉進火坑:時時學習無老師,時時考試無標準答案,直到老板通知「明天起放長假」。

若沿用封閉被動學習,在瞬息萬變的 IT 業難生存發展。本班風格不同:

  • 知識不一定系統完備,但生動鮮活——挖掘泉眼、探究曲線、捕捉火花、前瞻軌跡
  • 問題不一定預設,結論不一定終極甚至不一定正確,但有的放矢、發人深思
  • 學習方式開放多元、雙向互動

知識之上是思想,思想之上是精神

「越喧囂世界,越需寧靜思考。編程無速成大法、必殺之技、錦囊秘笈、終南捷徑,只有思考、實踐、再思考、再實踐。中國 IT 界過於浮躁急功近利,盲從且自大,缺乏務實與研究、獨立與合作、批判與自省精神。沾染此風氣,再好學習方法也與『優秀』絕緣。」

優秀程序員除迅速掌握知識、善於領悟思想外,必須具備六大精神:

  • 務實精神
  • 研究精神
  • 獨立精神
  • 合作精神
  • 批判精神
  • 自省精神

首輪提問:真正的老師是你自己

問號打破沉默:「老師——」冒號打斷:「別叫我老師,真正老師是你自己。師生角色模糊,自主學習、相互啟發、教學相長。」

問號問:「計算機語言這麼多,到底學哪個好?」冒號列出 TIOBE 2008年9月排名前12語言(Java、C、C++、VB、PHP、Python、Perl、C#、JavaScript、Delphi、Ruby、D),總佔有率超90%。

引號、逗號質疑 ASP、JSP、HTML、XML 缺席。冒號澄清:ASP/JSP 是模板/框架/腳本環境非新語言;PHP 是語言;HTML/XML 是標記語言屬數據格式標準;XSLT 含變量邏輯、圖靈完備屬程序語言;CSS 是樣式語言非程序語言;RSS 是數據交換規范;AJAX 是多語言綜合技術非語言。句號糾正:「老冒偷換概念——問的是計算機語言。」冒號點頭:「不僅學語言,還要熟悉開發環境工具,最重要的是學習其中的思想。」

歎號嘆:「學完頭發白了,程序員吃青春飯。」冒號:「缺乏靈感激情才覺吃青春飯。開放言論才能解放思想,思想解放才生靈感激情。無激情作氧氣,靈感火花注定轉瞬即滅。」

語言選擇:合適的就是好的

問號追問:「僅憑流行度分優劣?」冒號:「流行度非唯一指標。語言優劣因人而異,答案在你們自己身上——真正老師就是你自己。」

以兵器喻語言:威武的刀、靈活的槍、飄逸的劍……評判優劣撇開使用主體與對象皆空談。句號悟:「好語言就是適合編程者和解決對象的語言。」引號反駁:「高手十八般兵器樣樣精通。」冒號:「趙雲使錘、李元霸使槍,武力恐大打折扣。」

計算機語言五代演進史

代數名稱代表
1GL機器語言0/1 二進制
2GL匯編語言IA-32 Assembly, SPARC Assembly
3GL高級語言Fortran, Pascal, C, Java, VB
4GL面向問題語言SQL, SAS, SPSS
5GL人工智能語言Prolog, Mercury, OPS5

引號概括:機器語言難記維護→匯編用助記碼但無主見不變通→高級語言配編譯器/解釋器優化指令,程序員勞動力解放,效率大增。冒號大讚:「精彩!精當!一氣呵成!」

4GL 更專注業務邏輯,程序員負責分析描述問題,最初希望非專業者也能開發。逗號驚:「我們要失業?」冒號寬慰:助手本身是軟體需專業開發,理想全面實現任重道遠。

5GL 繼承 3GL 通用性與 4GL 優點(重目標輕過程、重描述輕實現),如無人駕駛智能汽車——輸入目的地自動尋路變速駛至終點。但目標遙不可及:超級計算機贏國際象棋冠軍,圍棋卻弱智。

低級、高級、中級語言的定位

前兩代稱低級語言,後稱高級語言。從低到高:離機器遠、離人類近,易讀寫調試維護、安全通用移植性強、開發效率高、更抽象宏觀;但速度效率降、用法功能局限性大。兵器喻:高級語言如長兵器威力強長於大型應用「一寸長一寸強」;低級語言如短兵器輕便靈活長於底層「一寸短一寸險」。

C 語言兼具高級抽象移植性與低級指針位字段底層操作甚至內嵌匯編,稱中級語言。影響力最大,幾乎所有操作系統和高級語言用它實現,C 家族佔主流半壁江山。兵器喻:C 是劍輕靈銳利,武將腰懸寶劍;不會 C 如不會使劍的武將,缺憾。匯編如小刀匕首,機器語言近乎赤手空拳。

初識範式:程序王國的世界觀與方法論

冒號:「高級語言近千種,選擇過多反無所適從。逗號以為學會 Java/C++/C#/VB 就是合格程序員?」連珠炮反問:「知不知它們為何流行?會不會被取代?如果會怎麼辦?如果不會又怎麼辦?」逗號語塞。

「掌握語法工具技巧只相當於學會兵器招法,更重要是心法。招法重形,心法重意。得形忘意捨本逐末;得意忘形游刃有餘。下面談的就是心法:編程範式。」

範式譯自 paradigm,指編程基本風格或典范模式。哲學術語:每個編程者創造虛擬世界,範式是其自覺不自覺採用的世界觀與方法論。

句號:「我們都是虛擬世界創造者,創造自己的黑客帝國?」冒號動情:「難道不是?只不過帝國有大小優劣。編程時進入自己創造的世界,注入想像力創造力激情才有生機。寫的豈止代碼還有樂曲,敲的豈止鍵盤還有琴鍵,跑的豈止程序還有世界。優美旋律奏起,世界翩然起舞,莫名滿足充溢全身。」眾被詩化語言感染。

OOP 是範式,「對象導向」比「面向對象」更貼切

引號問:「面向對象編程就是範式吧?」冒號點頭,順便吐槽:有本書《面向對象方法》暢銷因學生當戀愛指南買。將 Object-Oriented 譯為「對象導向」雖拗口但更貼切——範式引導帶著傾向分析解決問題,這就是「導向」;「面向」賓語往往預先確定目標,強調靜態結果;「導向」強調動態趨勢,更生動符合編程特質。句號金句:「找對象是『對象導向』,去約會是『面向對象』。」全班再倒。

範式與語言:心法與招法的關係

範式抽象,需具體語言體現。世界觀體現於語言核心概念,方法論體現於表達機制。一種範式可在不同語言實現,一種語言可支持多種範式。語言設計傾向某些範式、回避某些範式,形成不同語法特征風格。

軟件技術:實用還是時髦?框架、設計模式、架構與範式的關係

問號問:「框架、設計模式、架構呢?」冒號說出眾人心聲:想聽具體實用能立馬解決問題的,或時髦花哨不學心裡不踏實的。老冒明知卻偏扯範式。

「自以為懂的未必真懂,自以為不懂的未必真不懂。背得爛熟用得爛熟不代表真掌握;看起來新奇可能新瓶裝舊酒。」引號不服:「用得爛熟不算掌握,難道只有發明才算?」冒號:「用得爛熟≠用得恰到好處,能解決問題≠無後顧之憂。」

框架:帶來約束的「陣法」

引號答框架定義:「一組協同工作的類,構建可重用設計,側重設計重用;庫/工具包側重代碼重用。」冒號補充:框架不限 OOP,可為協同函數。複雜應用:宏觀用框架控制結構流程,微觀用庫/工具包解決細節。框架意義:特定領域整體設計不重造輪子;庫/工具包意義:擺脫底層編碼專注業務邏輯。

問號問:「框架/庫/工具包都是代碼集合都提供 API,何以不同?」冒號核心差異:庫/工具包帶來自由,框架帶來約束。庫/工具包提供武器裝備;框架用控制反轉(IoC)機制統一調度,剝奪程序員全局掌控權,使其成手執武器聽候調遣士兵。框架是語法規則外施加的又一層枷鎖,但無規矩不成方圓——程序員是兵,框架是陣。

句號:「框架設計者把最甜部分啃掉了?」冒號點頭。逗號不甘心:「我就想啃最甜的。」冒號:「當心崩掉牙。第一沒本事,第二沒機會,第三有本事有機會重新設計框架未必好選擇。Struts 成事實標準,公司易招人低成本快見效,非因更優秀而是更普及。多數開發以金錢非技術為中心。」

設計模式是戰術,架構是戰略

設計模式:針對常見問題的有效設計方案,側重思想重用,比框架更抽象普適但限於局部,無框架整體性。慣用法類似但側重實現、與語言密切相關、更底層具體。架構:系統最高層整體結構規劃,可能包含多框架,框架可能包含多設計模式。

冒號為何不談三者?架構太高談之過早;框架太多無從談起(不同領域不同框架,同領域多選擇,不同語言不一樣),且框架不高深可無師自通關鍵在領會思想多實踐;設計模式就那幾十個,GoF 書足矣自己啃。簡言之:一個談之過早,一個無從談起,一個不必多談。

培養編程語感:範式是關鍵

冒號以英語學習比喻:背單詞靠記憶,練句型語法靠練習,講地道英語靠語感培養。國內英語教學圍繞單詞句型轉,缺乏語感培養,導致「中式英語」。同理,慣用 C 者快寫 C++ 但若只注重語法不培養 OOP 語感,寫出「C 式 C++」,不如直接用 C。

語感 = 對語言敏銳感知力,反映整體直覺把握能力。語感強者聞弦外之音、說雙關之語、讀隽永之作、寫曉暢之文。培養語感關鍵在理解語言背後文化背景思維方式——編程範式正體現編程思維方式,是培養編程語感的關鍵。

「範式關乎語感,需慢慢培養滲透,不可能一蹴而就。不太明白沒關系,現在撒種子,慢慢生根發芽長成大樹。到時你們個頂個都是內外兼修武林高手。準備好了嗎?」眾齊聲:「準備好了!」冒號狡笑:「準備好就下課吧。下節課再談。」


[1] IoC:控制反轉,好萊塢法則「別打電話給我們,我們會打給你」。
[2] GoF:《Design Patterns》四位作者合稱。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved