成為軟體工程師的前兩年我學了什麼?

看了這篇文章:成為軟體工程師的前兩年學了什麼? (What I Learned in My First Two Years as a Software Engineer) 個人也蠻有感而發。

其實我進入職場前兩年,完全與「軟體」這兩字無關。退伍後沒多久先到如同資策會的資訊機構,花了半年時間上了關於 MCSE、Novel CNI/CNI 等與系統管理面的認證養成班。我算是很積極的,上完課的同時就去考認證,接連考取了上述的認證執照 (共 10 來個科目)。

當年認證是很夯的,也還沒有被搞爛 (一堆考古題),所以我找相關系統管理的工作是還蠻容易的。不過我後來選擇擇了一家從事 Client/Server 系統開發的公司,他們在應徵資料庫管理師。因為我對該公司採用 Oracle 資料庫系統極感興趣,起因是上 MCSE 有一門 SQL Server 科目,我對裡面有個範例 (圖書館資料庫表格結構設計) 非常好奇與納悶,為何表格分析可以這樣環環相扣? 問了當時的講師他也不知道。 :)

總之,一進入該公司後,我向經理提出要到 Oracle (當年位於民生東路) 上相關資料庫管理的課程。經理也很乾脆,當年這類課程 (MCSE、Novel CNE) 要價可不斐,至少 5 萬以上起跳。我可是很積極的,從完全不懂所謂的資料庫是做什麼,到考取 Oracle DBA 的專業認證,只花了不到三個月 (每上完一堂課就馬上去考,共有五門科目),這期間 K 的原文教材可是有 3000 多頁,只不過當年學習熱忱洋溢,可說是相當享受那種成就感。

當年我可還是全台灣第五個考上 Oracle DBA 的認證,甚而 Oracle 台灣訓練中心經理想要挖我過去那邊上班,不過當年我還是樂於待在那家公司,也可說是感謝那位經理能給我教育訓練的預算讓我上課充實技能。

不過這樣待了一年,老實說,我對與「系統 (OS/Network/資料庫)」的相處發現興趣不太大,工作上只要把關好兩件事:備援與效能調校,那就相當輕鬆了。所以閒暇之餘,想要自行寫一個圍棋 (學生時代最熱愛的棋藝,也在圍棋協會昇上業餘初段) 對弈的軟體。我還記得第一個自學的程式語言就是 Java,為此我又在工作期間花了一個月時間買書用力 K 相關語法,然後又去考取了一張 SCJP 認證。雖然勉強可以「寫出來 (那時我還是用 Java Applet 寫的)」,但程式碼卻是「落落長」,非常沒有成就感。

就是那個時候我才第一次聽到所謂的 OO (Object-Oriented) 物件導向這類神秘的技藝,聽說會了它就可以解決軟體許多相關的問題。 (能解決什麼問題我也不知道 !^^)

反正當年我還特別跑到重慶南路位於2F的「巨擘書局」,買了五本 OO 原文的書籍,當然沒有一本看得懂。那時國內也出了一本「世紀末軟體革命」,賣得嚇嚇叫,理所當然也跟風買了一本,用力研讀內容覺得好像很神,應該是技術能力要相當高深才能看得懂,總之當年我就是看不懂在寫什麼。現在當然可以理解了,然後也才知道這本書內容其實言之無物的。 >_<

閱讀全文 »

軟體工程師與軟體設計師有什麼不同?

*** 本文同步發表於 FB 社團-軟體設計鮮思維 ***

看到這篇文章:「What’s The Difference Between a Developer and an Engineer?」。這篇文章試圖比較 "軟體工程 (engineer)師" 與 "軟體開發 (developer)師" 的不同點與各自所需技能為何。

Software Developer 我覺得也可以稱為 Software Designer,同為設計原意。

若是我個人的解讀,軟體工程師比較著重在 "How-to" 的實作面。他會深入探究各類技術框架與工具的使用,舉凡 UI端 Javascript-based 框架、底層系統層級的技術框架、甚而包括了 3rd party 的 utiltiy 類型的 library 等;同時還有各種開發工具的精通。

軟體設計師,則會比較關注在 "What & Why" 的思考創意面。文內有提,設計師更會加強在心智上的修煉,包括自我學習、探討、觀察、閱讀等軟性功夫上 (不一定馬上就能應用到實務工作上)。

閱讀全文 »

因為 AlphaGo 太完美,所以世界圍棋冠軍不甘心的在對局中哭了~

毫無懸念,這個月中 (23-27日)為期五天的 AlphaGo 對上人類最頂尖棋手的賽事中,所有對局全都輕鬆取勝!這有別於去年 AlphaGo 初登場時,人們不相信 AI 得以戰勝人類最高智慧結晶的博奕遊戲—圍棋,然後從驚愕中逐漸接受,到年初時 AlphaGo 化名為 Master 大師在網路圍棋對奕狂砍60局連勝後,到本月對上世界圍棋第一人柯潔,所有人士已認為人們不可能打敗 AI 了,這鉅大的轉變也才歷經一年的時間而已!!

當然這三局棋的直播我是從頭看到尾,Youtube 的直播全都有英文與中文各一組人在解說的。其中尤其是前中國第一人古力的解說,他生動的說明與犀利的擺上大型的變化圖,好幾手甚至與 AlphaGo 不謀而合,無怪乎與他的搭當主持張璇還笑稱古力叫 Alpha古。 🙂

共三局 AlphaGo 與目前世界圍棋第一人柯潔的對局比賽,第一局好像是極細小的落差 (僅輸半目)輸掉 (AlphaGo 優勢時會放水讓棋局盡量簡明到終局),但其實從棋的內容來看卻是完敗,從頭到尾柯潔毫無勝機,這在職業圍棋比賽中可稱為「安樂死」,是最忌諱的下法。

第二局最精彩,序盤一開始就高潮迭起,戰鬥連綿不已,前一百手勢均力敵、維持均勢。所以 DeepMind 執行長還發了一則推特,稱讚柯潔的表現不可思議,「根據 AlphaGo 的評估,柯潔此時表現得非常完美。」不過最終因柯潔漏算一枚劫材,導致棋局突然急轉而下,中盤不得已認輸。據柯潔事後說,當他在中盤以為有機會領先 AlphaGo 時,內心還狂跳不已,這在轉播時看到他摀著胸口就知道,柯潔是多麼盼望能贏 AlphaGo 一盤啊。

而第三局則是柯潔表現最差的一盤。因為序盤就下出了惡手 (其實是緩著),導致局面早早就不利。「我擔心 AlphaGo 會這樣下的,它都想到了:而反之有一半我沒有想到的,AlphaGo 卻是這樣下,而再仔細推敲卻發現那是好棋。」…。「總之,這就是實力上的巨大差距。」—柯潔賽後這樣說。

印象對我最深刻的是,第三局的中盤稍後,柯潔不甘於又是安樂死,所以打入了黑陣 (柯潔持白)作最後的一博。這裡的打入非常非常的複雜,若是對上一般的頂尖職業棋手,一個應對不妥就有可能翻盤的。但問題是 AlphaGo 仍是輕描淡寫,每手棋落子不超過 30秒。當時我看到直播影片中中國圍棋隊總教練俞斌還正在擺這局部的複雜變化時,AlphaGo 不假思索的下了這第 121手 (J17),而正常人類的直覺是不會下一手位置的,一般會在右一路的 K17 貼住白子。
AlphaGo vs 柯潔 第三局

閱讀全文 »

天才無限家觀後感-對公式 (formula)的體悟

星期五晚上與蓁妮一同到位於松煙的「誠品電影院」觀看「天才無限家 (The Man Who Knew Infinity)」影片。描述的是印度近代的天才數學家—拉馬努金一生的傳記電影。

拉馬努金天生就是數學家。1914年當時仍為英屬印度公司的低薪職員且從未受過任何高等教育,卻毛遂自薦將他對當代高等數學依他的直覺所導出的數學公式整理成的筆記,寄給當時最頂尖的數學家,劍橋大學的教授哈代,而後就此坐上航向英國的郵輪從事數學研究。

不到五年的時間,拉馬努金就已獲得英國皇家學會、劍橋大學三一學院的首位印度裔院士頭銜。但他孱弱身體卻不適應英國倫敦濕冷的天候,最終得不治之症並返回印度一年後過逝,結束他如閃亮彗星般短暫的一生,享年僅32歲。但他遺留下的筆記本,在近百年後的現在仍是人工智慧、電腦科學、黑洞理論等先進研究的無價遺產。

這麼饒富傳奇的天才人物,不過老實說,這部片導演拍攝的手法甚不精彩。對劇中人物無法表現出深刻的描述,片中劇情大都處於沉悶,實在可惜了飾演劍橋數學家哈代—傑瑞米·艾恩斯的演技,他可是位極為資深的實力派性格演員。倒是我家蓁妮看得卻是興致盎然,直說好看,蠻訝異的~。

不過在此我並不想評論劇情,反而在觀賞影片當中,突然,我對所謂的「公式 (formula)」有了一番體悟。

先看看目前 Wiki 對「公式」的解釋:
「在科學中,公式是一種把資訊準確地以符號表達的方法,就像是數學公式或化學式那樣」。
「在數學中,廣義上的公式是指在特定的形式文法下,把數學符號組合而成之結果」。

老天,我從小到大就是被這樣的解釋給污染了,所以一直以為公式就是一種硬生生要諸多學子去背誦,卻從未思考各類公式背後所蘊藏的道理。

當下看完電影我就有了自己對「公式」的解釋:「它是一種定理,一種根本」。

閱讀全文 »

[文摘] 工程師12年工作經驗-能解決問題的不是工具而是思考

** 本文同步發表於 FB 社團-軟體設計鮮思維 **

這一篇關於軟體工程師綜合了12年的工作實務經驗,有感而發所自省整理出的12條工作經驗。

他寫的每一條教訓與體會,正是個人在這個軟體業界全都碰過,但卻少有人真正能像該位工程師這般得以內省而後想改變自己的。

嗯,業界的通病大概是這樣的情境:

  • 管理者想要找工具或方法來解決軟體開發的問題,但卻不從根本做起。
  • 開發人員總會說,我想要進步,但公司文化與環境不允許,所以我只能自艾自憐。 (其實自己本身早已同化而不自知)

記得啊~ 以下12條教訓不是口號,而是確實要從過程中實踐與體會。「獨善其身後,才得以兼善天下。」

  1. 工具不能代替思考。
  2. 除非管理小組能夠真正懂得敏捷「轉變」的價值,否則它就不能發揮作用。
  3. 學習需要一個安全的環境。
  4. 每個人都可以成為領導者。
  5. 架構師去寫代碼往往能作出最佳決策。
  6. 改變需要勇氣。
  7. 建立信任的關鍵是言行一致。
  8. 成功的結對程式設計與良好的協作相關。
  9. 多模式思維促進更強大的結果。
  10. 認識到每個人都有不同的優勢。
  11. 終身制學習。
  12. 積極的影響迸發幸福感。

有趣的人機對奕第四局-AlphaGo 從棋神突然變為手足無措的小白

第四局人類棋王李世石終於贏了,但卻是在中盤幾乎棋勢甚為絕望的情況下,因為下出了一著連電腦都無法解析的妙手,然後 AlphaGo 就突然「秀逗」般下了大概只有初學小朋友才會下的棋著,結果李世石總算後半盤很輕鬆也莫名其妙的贏了這盤棋。

其實下完前三局,我想李世石應該鬥志全失,完全找不到 AlphaGo 的「罩門」。但真的我們必須為李世石鼓掌致敬,雖然幾乎每局都一路挨著打,但他奮鬥不懈的精神從轉播上看得歷歷在目;更重要的是他每局都會嘗試幾種策略,來刺探 AlphaGo 的弱點在哪裡,即使是一些會被大陸頂尖職業棋士們的尖酸與批判的著手。他真的不愧是一個真性情的好漢子、超一流的勝負師。

話說這第四局李世石持白,前幾十手的開局與纏鬥,AlphaGo 就已經很明顯的佔了上風。大陸諸多高手的棋評解說,都一致認為這局棋李世石又無望了。到第 78 手以前,即使是普通的九段上來替代 AlphaGo 來下,都可以很輕鬆的贏得這局對奕。

但李世石就是李世石!他在幾乎絕望的局勢下,下出了中國前幾年的棋王-古力,譽為本局棋「神之一手」的妙著。第78手在黑璧內一團黑子的一挖,竟然 AlphaGo 不知道如何應對,因為從超龐大的雲端資料庫,找不到類似對應的策略。甚至又下了近10手後,AlphaGo 才知道它下錯了,然後就一路攪局。但其手法相當粗糙幼稚,也就是說 AlphaGo 看來還沒有成熟到可以應付劣勢下的處理。後面兵敗如山倒,AlphaGo 在判斷完全無望後,中盤推秤認輸。

人機對奕第四局

閱讀全文 »

軟體思維顧問

專職軟體輔導與教育訓練的獨立顧問。輔導企業資訊單位如何有效組織系統開發與維護;輔導開發人員達成有效的專業分工。傳授如何把軟體作軟 (Keeping Software Soft)的技能,得以提昇系統的彈性/延展,並進而創造系統的再利用價值。

Personal