Tech

明星程式設計師的十個特質

原文: Top 10 Traits of a Rockstar Software Engineer  http://0rz.tw/o7QTb

看到第一條我就安心了,我絕對不是明星程式設計師,因為「I hate coding」,雖然他列出的十個特質我想其他的九項我大概都有。特別是第十項,我現在翻那些大學資訊科學聖經本的頻率遠超過我大學時候對他們的使用率。

其實看到這篇,我又想到「做學問」跟「解決問題」的微妙差別。

其實這篇講的具備這十個特質的人,通常在學界會比較容易找到(雖然我懷疑學界是否需要多種程式語言的才藝),像是 ntucsie b86/87/88 這幾屆我覺得應該有這些特質的人們幾乎毫無意外地都繼續在學界發光。而比較偏向於致用的,也就是比較重視問題解決的人,對於繼續做研究相較之下是比較沒有興趣的。

「做學問」跟「解決問題」有個微妙的差別,那就是現實框架的存在與否,我並不是說「做學問」就會不食人間煙火,而是「做學問」現實的框架在必要的時候是必須要放棄的,也就是說「做學問」必要的時候可以先無視於現實,或甚至去突破「現實的桎梏」。

像在相對論跟量子力學之前,古典物理學者陷入了「乙太」的迷思,若沒有愛因斯坦假設性拋棄了乙太假說,假定光速是不變的而發展出狹義相對論,今天我們可能還活在古典物理框架的世界裡。(然後資訊科學領域的人就還沒有飯吃)

這是一個好例子,表達了「現實的框架」在必要的時候是必須被拋棄或無視的。而量子力學跟相對論到現在仍然無法「完美」解釋黑洞(或萬有引力)。(光速基本上是可解釋的,但是卻未必是我們觀測到而公設的定值,
  那可能是我們現實上現有物理的測量極限,或是我們這個系統的所能觀測到的最大值)

那「解決問題」呢?「解決問題」目的是在現實的框架中尋得一個「較佳解」而非「最佳解」,因此現實框架不但是前提,而且是個非常重要的前提。

用個方式來比喻,就是在遊戲規則下,怎麼去獲取遊戲中的較大利益。在這種情況下,「最佳解(或完美解)」是否存在?是的,存在。但這個「最佳解」在加入了一個變數之後卻未必然是最佳解。

跟我一樣有在研究程式交易的人大多會有一個體認,在不斷跑新的資料的情況,在 N+1 時獲利最多的的交易方式卻未必是在 N 時獲利最多的交易方式。用一個比較常聽見的說法就是「過去績效不代表未來績效」,買基金的時候常聽到。

舉這幾個例子,並不是要說解決問題特質比較強的人就追求不完美,而只是說,因為現實一直在變化,雖然有一個框架在那邊限制住,現在追求出來的完美卻依然有可能過了一陣子後就變成「不完美」的。特別是框架一直被打破的情況下,從 198x, 199x, 200x ,程式設計的理論跟技巧一直在改變再進化,而硬體限制的不斷突破,也使得一些在當時是最佳的解的解法到現在有可能變成了一個笑話之類的。

從電腦系統資源不足,到資源過剩(所以我看過很多人開 int array 都開超大),到現在又資源不足(因為物理的限制一解除,問題的 scale 又變了),我一直算有點憂心的是一些我接觸到的學弟妹對硬體方面無視甚至敵視的態度。(其實精確度的問題以及大數的問題很大一部份跟硬體有關)

我自己是在電腦系統資源過剩的時候念大學的,所以當時對於為什麼要學硬體架構跟學最(較)佳化(這個時候就會覺得對岸用語「優化」比較到位)有著根本上的抗拒。但是現在出來工作,卻覺得這種東西實在很重要,特別是我需要的是較佳的解的時候。
講一講,又覺得沒有什麼重點。不過保持一定程度的不完美,通常比較能夠應對各種不同情況的變化,以及各種彈性,當然前提是,知道自己在做什麼。

Tech
murmur
reading
workship

Comments (0)

Permalink

我的創業思維路(參)

(花了兩篇在講人事的問題,而且第二篇還不斷增添,也隔了快一個月才繼續這個系列… )

今天我想要寫一些跟實務有關的經驗,我想總有一天想創業的大家都會遇到的。那個東西叫做「外包」。(OEM、ODM、OBM,換了英文名詞有沒有發現好像原本看起來很不怎麼樣的東西變成很專業?)

今天如果我們遇到一個公司的技術能力無法處理的東西,或是公司本身就沒有這個技術能力可以完成產品,在考量自己養一個團隊不合成本以後,通常會考慮就直接外包。

聽起來外包好像是個很便宜的投資,反正我也不懂,然後就轉包出去,接著就會有非常甜蜜的回報回來--這是幾百次外包才一次會有這樣的好結果。

通常沒經驗的人外包會失敗,而且會失敗的一敗塗地。不為什麼,因為你不懂「問題點在哪裡」。外包可不是把要求開一開,錢灑出去,就能獲得想要的產品回報的。因為我看你也不懂,我就隨便作,然後拿簽的合約要你付錢也是常有的事情。

一個能夠成功的外包案,得規定非常詳盡的規格,行為,例外處理,有的時候開發過程發生的問題回報之後,就得修改規格。如果發包的對象不懂技術,能夠開出合適的規格嗎?

舉例來說,一個登入介面,單純發包出去一個「登入介面」,跟「一個登入介面,需要使用 SSL 作 session 的保護,背後連結登入資料庫採用 PostgreSQL ,需符合 SQL 2008 標準,常態編碼為 UTF8 ,需有如附件等欄位,並保留 XXX 等功能待日後擴充」(我不是這方面的專家,我亂寫的)。哪一個比較有機會不會被亂作?

要開出適合的規格需要一定程度的技術能力,就算沒有也得有一定的技術知識台灣的廠商常常外包亂七八糟的一個很大的原因就是,不知道怎麼開規格,邊作邊修改規格,結果到最後作的亂七八糟就算了,還常常搞到自己公司天怒人怨,對方公司滿腔怨氣。

為什麼我這樣義憤填膺呢?我所處的這間公司,因為這樣的事情有以萬計的美金的貨款,就因為由不懂的人主導外包,結果收不回來,也被對方開了一個遠超過市場的價,而且被卡料,也造成了成本一直無法降低。而這樣的事情曾經造成公司人事的地震,包含主力研發人員的大量出走,以及資金調度上曾經出問題。這樣的財務漏洞,終於在最近漸漸收尾了。

中間花了九個月收尾,並且花了比原本預定付出的貨款多出數倍的資金才解決這麼一件錯誤的外包。也是因為這件事情,使得我從一個普通的工程師,到現在實際接手公司許多生產線,並且有了大量本來我的年資、經歷、能力無法學習到的經驗。

這類型錯誤的外包,在公司大的時候其實不太會有大影響,但是在創業小資金的時候這樣的失敗是可能造成金錢流的大漏洞的,而創業其實就是考驗財務管理跟執行企畫的能力,任一個環節不足或是失誤,往往會造成不可預料的後果。

期望創業者不可不慎。

Tech
innovation

Comments (0)

Permalink

我的創業思維路(貳)

創意創業不是一場兒戲,想要別人跟你一起創業,你就必須要有好的口才、好的願景,還要有實際一點的營運跟行銷計畫。齊聚實現這個創意需要的人才(通常想不到的層面還蠻多的,而且這是假定每個人都是名符其實的情況下),然後,就算齊聚了這些條件,也才只有 33.3% 的成功的機會。

創業很難一直順順利利風風光光的,只要在市場一直失敗,願景再怎麼樣美好都會讓人心志動搖。創業過程最難過的,並不是外部的挑戰,而是內部的攻擊。沒有人是全能的,再怎麼樣聰明怎麼樣仔細的人都有可能會做出最後失敗的決策。

然後只要有人在的地方,意見就會紛雜,若是無法好好處理這種情況,那其實,不要創業比較好。因為創業是要一群人往不確定的方向前進,若是無法好好溝通,或是不能撫平不滿(包含使用金錢或是承認自己的失誤等等),那麼久了以後,內部管理的問題就會發生。

而且更糟糕的是,創業是階段性的,有些人適合在創業一開始合作,但是過了某個時間點後,有的時候會發現那個人在公司是完完全全的呆帳,那個時候,身為人事的總負責人,要怎麼處理?處理的不好,就可能引發員工的大量出走,萬一走掉的是當時很倚重的人才,那又更麻煩。

而這個人事上的挑戰並沒有一個公式的解法,你可能保了這個結果引發不滿的人的離職潮,也可能 fire 了這個人但是原本不滿他的人也不領情紛紛求去,各種情況都有可能發生。要怎麼樣維持住士氣,又能繼續邁向實現創意的目標?這不是光靠喊喊夢想的口號就能處理的。

這個時候,創業的人格特質跟管理能力備受考驗,而且更多的時候,創業的人並不會想把人事管理的事情假手他人,於是造成自己與團隊的衝突。更何況,有些創業的人本身就是衝突的核心,管到他人專門的領域而引發不滿。會想創業的人,通常本身很有才幹,也很有自信,但是這些自信一不小心,就會輕視他人的專業。

例如說,我就算再怎麼能力不夠,我還是受過完整的資訊工程體系的教育出來的,而且我自己愛東碰西碰,也有大量的實做經驗,對我來說,學習一個新的程式語言並不是那麼困難的一件事。

但是當我說:「喔,這個好像不難」的時候,不代表這對一般人就不難,也不代表這是個簡單的技術,而只是「受過將近十年的專門訓練,同時有約五年實際工作或實習經驗的工程師覺得不難」而已。

但是其實大多數的人都很容易忽略掉那些前提,而對自己充滿自信的人又更不會這樣細心。除非創業的人對自己有自信的同時,又能尊重別人的專業領域,不然人事管理會一直有大問題。

而這偏偏是大多數有創業雄心的人會遇到的大問題。在很多時候我們並不會清楚地意識到一個表面的問題可能來自另一個深層的問題,例如說,一間經營人事危機四伏的公司,人事的問題可能僅僅來自於「不肯認錯」。老闆不肯認錯自己用錯了人作錯了決策(反正老闆也不能 Fire 掉自己),通常旁人來看,就引躬自責就好了吧?

可是老闆們通常會選擇另一條路, Fire 掉當初指出錯誤的員工,然後繼續踏錯下去。

其實有的時候,真的也不得不如此,畢竟把已經花了的成本跟踏錯的那一步承認失敗完全放棄,大概很多人也心有不甘,搞不好咬牙撐下去,在某一天突然原本錯誤的決策就變成正確的了,然後就變成「具有先見之明」。

運氣好的時候啦,其實還蠻多這樣的例子的。但是這要真的知道自己在作什麼,才有這樣的機會。因為一次的錯誤,是不能用另外的錯誤去矯正的。若是不知道自己在作什麼,而一直做出連自己也不見得知道自己在作什麼的決策,就很容易變成一種萬劫不復的好傻好天真。

知道自己踏錯了一步,並且承認(不管公開或非公開承認),往往是自己能夠補救的開始。

這篇最後,我要給所有想創業的人(包含我自己)一句話:「認錯,沒有那麼難。」

當然,實際領導過,就會知道,認錯真的很難。不管是對自己的自尊,其他人的評價,部屬的服從。

Tech
innovation

Comments (0)

Permalink

我的創業思維路(壹)

在這之前,我想先講講「創意」(innovation,其實翻成創新比較好…)這個東西。

很多時候,這個名詞被一些趨勢專家、管理專家、名家給神話了 。「創意」並不是天馬行空無邊無際的想像。例如說看看最吃創意的時尚產業好了,有人以為畫畫圖然後剪剪貼貼就可以當個成功的設計師嗎?時尚設計師要學會剪裁,學會每個不同配件的特性,不同材質的特性,不同顏色的特性,甚至還要學一些裁縫力學--要不然衣服根本不能維持衣服的形狀。

室內設計師、建築設計師,還有現在在台灣很不被重視的工業設計師都是如此,他們並非僅僅有「創意」就夠了 ,需要學很多的熱力學、力學等等,要不然就會看到美則美矣的殼子,但是因為沒考慮到散熱所以完全不能使用,或是一個看起來金碧輝煌的房子,結果一個地震就倒塌。

在實體上,我們都能理解這件事,那為什麼在網路創業上這件事情就變得不重要

舉了這些例子,其實是要說,創意並非無邊無際的天馬行空式的想像,而是在現實的基礎上,尋找出不同的想法、組合方式去做出來自己想像中的東西

雖然聽起來是很死腦筋的工程師想法,但是這是我走過這麼一段日子來,曾經跟許多不同行業、不同創意事業的人交流的感想。

想要有創意,多跟不同的領域交流是很重要的,因為那是最容易把兩個看起來不相關但實際上可以結合起來的東西結合的機會。但是,這並不是無視或是貶低他人的專業,而是懂得尊重他人的專業領域,才會有機會獲得那個人願意為你嘗試看起來成功率不高的創意

而就我個人接觸過的,其實大多數自認有創意的人,做得最糟糕的就是這一點,憑什麼你覺得你的創意其實很簡單就可以做?別人花了十幾年在專門的領域浸淫鑽研的成果與能力,為什麼要被這樣貶低?而且沒跨入那一個領域,通常根本不知道那要花多少心思多少時間去研究去構思。

舉個例,我喜歡做菜,但是我作菜常常做出一些奇怪的作品。也許有人會想「啊做菜不就把東西放到鍋子裡面炒一炒就好了?我看那些大廚都這樣做啊?」可是實際上呢?火候怎麼調,刀工怎麼切,調味怎麼調,放菜的順序與調味的順序要怎麼弄才能引出最好的味道?

這些都是專門的學問的。像有一樣愛做菜的朋友烤雞腿一直失敗,太乾太老太硬,我在問清楚步驟以後,建議他先用大火煎熟雞腿表面,然後再入烤箱慢烤,果然烤出了香嫩多汁好吃的烤雞腿。那個時候我就覺得:「啊,我在廚房這麼多的失敗經驗的結果,終於有幫到人了。」

但是如果那個人一直不肯承認自己想的料理方式是失敗的,而一直怪罪到材料不好、香料不好、烤箱不好呢?也許那些真的有不好,但是明明普通的材料、普通的香料、普通的烤箱可以作的出來風味極佳的烤雞腿-只要多一個看起來完全不相干的「煎」的步驟就好了-那麼,他的烤雞腿永遠只會烤失敗。

舉了這個例子,目的只是要說,創意並不是那樣一直線簡單就可以到達的。創意需要大量的背景知識、大量的靈活思考,甚至偶而遇到一個有經驗的人的配合,才有機會成功

把上面那個例子中的烤雞腿改成創意,把材料、香料、烤箱比喻成資金、技術、硬體設施等等,每次自己的創意失敗就歸咎到資金不足、技術人員不配合、硬體設施不夠好,而忽略了自己找的這些東西可能不足-「缺少一個精通於某技術的技術人員」,那麼創意一直 failed 也不是多困難的事情。

那你怎麼知道某個人精於某種技術?或者知道還欠缺哪個技術?機緣吧。但更快的作法是,去聽、去學,把你的交友群拓展到這些人,並藉由自己的所學的一點皮毛去知道「這個人到底行不行」,畢竟,說得一口好技術的大有人在,但是有沒有真才實學總是得實際接觸、並且自己有一定的程度才會知道。

兩個所學完全沒有交集的人,很難發揮 1+1 = ∞ 的效果,甚至不要 1+1=0 都已經很困難了。因為你根本不知道你的合作伙伴到底行不行,有這種疙瘩,就不可能完全放心讓對方自由發揮,也不可能判斷對方的建言到底是肺腑之言,還是只是招搖撞騙的推託,在互相猜忌貶低甚至卸責之下,為什麼你會覺得自己的創意會成功?

Tech
innovation

Comments (0)

Permalink

我的創業思維路(零)

這幾天,因為要過年把工作大部分整理到一定程度後就沒有進展,所以比較閒(謎之音:「你每天都在網路上混還說很忙?」),所以這幾天終於有得空去看看為什麼那麼多前輩一提到某位網路趨勢大師就那麼痛心疾首-看完之後,我一直在醞釀要寫些東西,不過一直沒時間打字,今天好像沒有什麼雜務,所以就來寫一些想法。

我不是一直這麼有時間,基本上,我閒暇花在色欲娛樂的時間遠比想這些事情來得多,這個部落格也不是拿來放這種艱深看起來很有為的主題的,充其量只是我個人的喃喃自語。所以,看看就算了,反正也不會有什麼太有意義的東西,而且也不一定會寫完。

我現在在某家系統整合 startup,也出資並偶而幫忙建議我姊的自行創業,有著一份還算 ok 的薪水,以及許許多多好與不好的經驗。我想,我應該還算 ok 可以講講跟創業有關的事情。

那下一篇,就來講講正題。

Tech
innovation

Comments (0)

Permalink

Windows 7 beta 初體驗

因為之前的電腦(Athlon64 3000+, 2G ram)的 CPU 風扇怪怪的,加上在學一些 multicore 的程式設計技巧,所以上週花了不少錢去購置了新的電腦(感謝 zcecil 這次手下留情沒有勸敗太多東西,然後我終於又成功抵擋住 FFXI 的誘惑了)。

怎麼說呢,比起我第一次用 Vista, me 比起來,這東西目前給我的感覺非常好

甚至可能比當初第一次使用 Windows XP 的感覺還要好。也許是因為 beta 版的關係,安裝速度跟運作速度都超乎我想像的快速跟平順 ,雖然因為很多 driver 都還沒有支援的關係,所以影音效果沒辦法測試,但是目前光是系統預設的,就已經讓我驚豔了。

目前無法確定加上一堆常駐程式後會變成什麼樣,不過只能說,感覺蠻好的,而且比起 Vista那種包山包海但是很多東西一點用都沒有的肥大又慢,目前 Windows 7 beta比較接近我會想用的作業系統。

不過系統吃的資源也很嚇人,剛裝好機系統就被吃掉了約 10G的硬碟空間,然後什麼都還沒作, 4-core 的 CPU 就常駐了 1.2G 左右的 RAM 。

看起來我新電腦應該會先裝 XP-64 ,然後等 Windows 7 正式出來應該會換過去吧。終於可以不用忍受被推銷偽裝成正式產品的 Vista 了。

Tech
workship

Comments (0)

Permalink