程式教育漫談


這年頭,連美國總統都在提倡程式教育的重要性。

不過身為台灣「程式寫得好,要飯要到老」的小小碼農來說,看到這些趨勢,總是有點淡淡的哀傷…硬體為主的產業,軟體幾乎總是被邊緣化─程式可以跑就好,品質怎麼樣、容不容易維護、有沒有最近流行的開發「SOP」、使用者介面好不好用…who cares?

話說回來,想想自己的程式學習之路,也似乎總是在雲山霧沼裡摸索。

一開始只是高中課餘時光喜歡DIY,玩玩硬體,看看遊戲的聲光效果;雖然在計算機課程會碰到一些code,但印象中都是一些QBasic之類的小程式,寫完了會動,沒什麼感覺,也許那時的娛樂效果比起現在差得太遠。不過還是喜歡玩遊戲,所以上了大學開始有真正硬底子的程式課程,也開始過著學期第一個月打電動,後面就是沒完沒了的念書考試寫程式到期末的生活…

但儘管是這樣從HTML、PASCAL、C、C++、Java、Assembly、Shell Script的一路走過來,大學時沒機會修軟體工程,自己翻閱GoF的Design Pattern,仍直如天書一般的難以理解,更別提那些硬體方面的課程…我想這大概就是凡人跟天才之間的差距吧。你說那時候的我算不算會寫程式? 以我現在的標準來說,不算,連pointer都搞不清楚的人,大概只稱得上是code maintainer。

不過也許是因為從Turbo C跳到GNU/UNIX的環境,make/gcc/gdb這些東西玩多了,來本APUE聖經 (Advanced Programming in the UNIX Environment) 也是一定要的,研究所的時候突然就搞懂了pointer的用法,以及一些語言的共通及差異。我個人覺得這段期間蠻重要的,大量的累積實作經驗,似乎是把大學未完成的部分補足,真正打好了程式設計的基礎。

只是CGI寫著寫著,第一份工作變成了MIS,Delphi、Database (MySQL/Microsoft SQL Server/Oracle)、PL/SQL、PHP、JSP、Jave Servlet、XML/XHTML、JavaScript…玩了一大堆東西,code沒寫幾行,人倒是接觸了不少,擔心自己的競爭力下降,又跳回了C++。

坦白說,在第二份工作之前,物件導向程式設計 (OOP,Object-Oriented Programming) 及真正C++程式的撰寫,其實是似懂非懂的。不是沒接觸過,也寫過Java,但多多少少還是用Procedural Programming的概念去寫,C++的外皮底下可能包含了一大堆C code。但這次認真回頭看C++ Primer、Effective C++、UML、Code Complete,再跟之前自己自修的Software Engineering、工作碰到的CMMI互相參照,終於可以看懂Design Pattern…也許終於是經驗到了吧。

從澳洲回來後,斷斷續續的再看了一些C++ Template/STL的東西,碰了一些OSGi,前陣子在玩Python,現在也想玩玩看Functional Programming…你說寫程式的經驗很美好嗎? 不盡然,多的是一個人拼命coding的深夜時分,十幾年下來,或廣義的說超過二十年,花在這上面的時間應該早就超過了一萬個小時,但也只是這樣而已。一樣,凡人就是凡人,努力之後也不會成為天才。

但我想各行各業都是這樣的,很多東西要花時間下去鑽研,不可能美國搞了個Hour of Code,突然間programmer就滿街跑。不過相對而言,英語系國家學寫程式仍舊有著幾項先天優勢:

  1. 絕大多數的Programming Language都是英文。容易維護的原始碼,高度的可讀性多半就來自於良好的變數命名跟程式風格 (Naming Rule & Coding Style) ,這對英文相對沒那麼流利的人來說,門檻就在那裡,我也是,總是在那邊為了naming傷腦筋。但寫得好的原始碼,看起來就像文件一樣的優雅而令人愉悅。
  2. Programming Language的網路資源,也多半都是英文。舊的語言可能還找得到翻譯,但新一代的語言,最新的軟體業界趨勢,勢必得從原文開始研讀。還記得大一拼命找教科書的翻譯本,到大二已經看不下去那些爛翻譯,逼自己去看原文書…

只是除了這些個人以為的外部因素之後,最重要的內部原因,應該還是─「到底要怎麼學會寫程式? 」

老實說,我到現在也還在想這個問題。

也許分水嶺是在研究所的實作經驗,但跨越的門檻…現在猜測,可能是慢慢從實作上去理解Von Neumann Architecture吧。一開始coding,動不動就碰壁的時候,會以為是一堆電腦上難以理解的靈異現象;但自從跨過那一步之後,就知道沒有什麼無法解釋的東西,純粹是因為自己的無知而已。Memory leakage, Dangling pointer…乃至可以多型的pure C,千變萬化的軟體世界…

引起小朋友對coding的興趣是一回事,一萬個小時的孤獨又是另一回事─沒有一條路是輕鬆易行的,從來都沒有。

見過好幾個自學的天才,我想,在這個有Google的年代,這樣的人最容易成為傑出的軟體工作者。或者說,日新月異的軟體世界,如果把學習視為悲哀,那可能也很容易被時代所淘汰…糟糕,不知道說到哪裡去了。結果我還是沒什麼domain know-how,純粹就是對programming language的好奇而已。

該怎麼說呢,總之,程式的門越來越是敞開,如果願意,就進來吧─

走在一條永無止盡的學習道路上,擁抱創造的力量。

About David Yang

David Yang, like sports, nature, reading, music and...traveling. I am not good at sports, but like watching basketball, baseball and tennis games. I am not very strong, but like hiking, bushwalking and riding bicycle into the nature...Although I am a software engineer. Not only continue to read and gain knowledge, I also want to walk around every corner of the world. Here are some stories about my itineraries: https://dflucifer.wordpress.com/ I come from Taiwan...no matter where you meet me, either I am traveling, or just preparing for next trip :-)
This entry was posted in 產業現況及社會觀察, 軟體工程 and tagged , , , . Bookmark the permalink.

5 則回應給 程式教育漫談

  1. carljian 說:

    我覺得並不盡然…倒是雲端虛擬化之後,大型硬體設備的走向趨勢,反而開始被依依取代掉,包含許多系統服務,也開始模組化方便管理。

    相信不變的仍然是對於code的開發與優化的倚重,而系統與硬體設備的走向,依舊會是追著你們跑

    • dflucifer 說:

      欸? 寫到後來我好像沒下什麼結論😄 程式教育的門是打開了,但門檻還是在那哩,願者上鉤~看來您也有研究啊,不是同行喔? ^_^

      • carljian 說:

        應該可以歸類於同行吧?只是小弟資質差,只能從硬體與系統面切入,程式部
        份真的是沒辦法。
        只是對於目前的資訊教育,大多好像都
        還是著重於程式與開發,反而像系統與
        硬體,網路…等等這些相關的學術,並沒有太多著墨…實在有點可惜

      • dflucifer 說:

        不好意思周末跑回家忘了回覆 (汗)

        別這樣說,我一開始也是從硬體跟系統開始玩的啊,程式是可以學的─只是在台灣學了也不知道到底是好事還是壞事…
        台灣是真的太偏門了,其實不管是程式開發,硬體,網路這些東西其實是一體的,國外甚至有的CS/EE (Computer Science/Electrical Engineering) 是同一個科系。但到了業界,台灣卻又極端不注重軟體,那些程式開發的資訊教育機構也顯得很奇怪…要寫那些光怪陸離的現象說來話長啊~

  2. 通告: 2015年度回顧:夢醒時分 | 山頭斜照卻相迎

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s