2016年12月14日 星期三

asp.net Web開發框架 (1) - 天下武功,唯快不破


講技術之前,先讓我說說最近發生的幾件事情…

這時代沒有什麼趨勢好說的…
前些日子,我在某個研討會當中,碰到一位學員,他在上課前找到了我,搶先問我先前提過要開的架構設計課程,最近一次何時會開呢? 我很高興他對這個課程有興趣,但是卻只能黯然地跟他說,今年實在不一定有空了。

除了時間的因素之外,其實也因為有另一個顧慮,就是這幾年的資訊科技變化實在不小,在頻繁的變化當中,要建構出相對穩定的架構確實不易,也因為有感於此,在這場研討會中,我很猶豫的要不要提更多我對於這幾年技術變化自己的看法。

別忘了技術的最終目的永遠是應用
前陣子有位大神問了我一個問題,當然,大神的功力都是很強的,問的問題當然也讓人無法小覷,所以沒多久我就投降了,我直接告訴他我不知道。原因很簡單,因為我沒用過,而沒用過最近也不會用到的東西,我大概不太會去碰。因為『吾生也有涯,而知也無涯。以有涯隨無涯,殆已。』數千年前,莊子就知道這件事了,我又何必勉強呢?

得知道,所有的技術都是為了應用,學技術本身當然是愉快的,如果學技術本身就可以賺錢,那何樂而不為?然而非也,技術能用到對的地方,才能賺錢。不是說賺錢很重要,而是玩物喪志恐怕也不是成年人可以一直走的路,也因此,誠實的面對自己的知與不知,選擇在有限的時間內,將有需要的技術盡快地掌握,是我這幾年來學習的原則。

捷徑只有一條
我曾經聽一位老師說過,在專案管理當中,只有一個方法能立即加快速度,那就是減少浪費。加人、進修、提升能力、凝聚向心力…都很可能治標不只本,再說一次,只有一條路可以真正的加速,那就是減少浪費。其實,學習也是。請原諒我這麼說,但這年頭很多的大學,四年的時間基本上是浪費了,你常常看到為何有些年輕人不需要念大學就可以有所成就,因為,雖然學習是重要的,但依照別人排好的時間表以及重點來學習,它不是為你量身訂做的,對學習者來說當然弊多於利。要知道,現行台灣的教育制度也不是培養人才的最佳解決方案。但沒辦法,對於一般人來說,恐怕這是唯一的路,所以莘莘學子跟著大家一起念大學,之後跟著大家一起找不到工作。如果你不想做『一般人』,就得要想辦法減少浪費,從學習到專案,都是如此。

新舊從來都不是問題
我有一個朋友,其實算是前輩了,他公司還是用Delphi開發系統。幾年前第一次聽到的時候我很是訝異,我不是訝異Delphi還活著,它活著我知道,但在這個技術一個月小改三個月大改的時代,怎麼會有勇氣一直用Delphi開發呢? 有好多好多的障礙和疑惑橫在我面前,客戶真的能接受嗎? 開發人員會不會覺得無法發揮或進步? 新的需求(例如行動裝置、雲端)能夠支援? 我有太多太多問題了…但幾次分享之後,我慢慢明白了。特別是當他告訴我,客戶有新的需求時,他們如果真的做不到,他就誠實地跟客戶說他們不會,做不到,客戶也不會為難廠商;但只要能解決客戶問題的,他們的回應速度始終很快,他們真正的在意客戶的需求、以及客戶的反饋,長期下來,客戶也發現資訊系統真正要能解決問題,用新技術或舊技術其實還真沒太大差別,反而不穩定的新技術或新玩具,在還沒帶給客戶實際效益之前,自己往往就先淘汰了。長遠來看,新技術對客戶一點意義都沒有。

這讓我認真地思考,在追逐新技術(玩具)的工程師本性之下,是否需要抓穩一條界線,讓團隊和企業(客戶)真正能夠得到效益,而並非因為好玩有趣,就把所有的技術塞到專案裡面。

故事講完了,所以呢?
所以,這幾年我花比較多的時間在團隊開發,不管是Agile/Scrum、VSTS、或是開發框架設計,背後的原因都是為了建構一個可長可久的團隊開發機制,這機制不僅僅是軟體或框架、還包含文化、習慣、規範…,因為我們很清楚的知道,一個人寫程式,和一堆人寫程式,是有很大很大的不同的。當我們一個人學習、一個人開發、大多狀況下都不需要太多的規範和框架,因為所有細節存乎一心,只要人夠強,那『管理』只是時間浪費,但,這是只有一個人的時候。

如果是一群人,那你的世界將會完全不同。因此,這一系列文章我想做的事情是,把這幾年團隊開發與框架設計的經驗,稍微做一些整理,希望幫助大家減少浪費,少走一些冤枉路。我常常說,上課需要喬出學員和講師彼此的時間,能不能和學員有直接的互動,我們得看緣分,緣分多一點,或許我們能夠面對面談這些問題,如果時間不夠,也只能先把這些經驗稍微做一些整理。當然,既然是經驗,就不一定放諸四海皆準,沒有完美的設計,任何的設計都有前提,都是依據當下的需求來評估的,因此,像是Scrum一樣,請別將其視為policy,他只是一個framework,既然是framework,你就可以調整、修改、擷取其中一部分來應用。從來沒有人規定,敏捷開發或是Scrum一定要如何如何,重點從來都不是如何,而是為何…(例如,當你學習Scrum,你該知道的是,為何要進行demo meeting、而非拘泥於如何進行demo meeting)

知道背景之後,從下一篇開始,我們來談談我自己的團隊中,Web專案的開發方式。

前面說道『天下武功、唯快不破』。但在這個變化莫測的時代,要練到很快,又談何容易? 我們也只能在這條路上少走冤枉的路,盡可能減少浪費,僅此而已。

2 則留言:

Terence Mak 提到...

感謝大大的文章。非常同意大大的理念,小弟寫APP快十五年了,從Foxpro Delphi,到現在的手機APP、RESTful design一路走過來。感覺其實天下武功各家各門各有所長,例如M$垂直整合度高,Java誇平台能力強,Python簡單易懂,JQuery解決了困難的UX部分,各門各派套路(code)雖有點不同,但是系統架構設計理念卻基本一致地進化。框架是減少開發錯誤的易拉罐,有人幫你想好了,只要了解理念直接用就好。好好掌握門派間一些共同的優異設計,比不斷學套路(code)更好。 我在facebook轉載了希望不要介意 :)

isDavid 提到...

@erence Mak

歡迎轉載。