Topcoder

Posted by Mr. Sunday

Mr.Sunday在數個月前看了一則美商聘請一名21歲中國在學的女學生為亞洲區副總裁的新聞,於是才認識了所謂這個topcoder的網站與公司。 不論這位學生的實力如何,我相信這樣的招募,的確是有極大的廣告效益,因此似乎整則新聞就在大陸廣為流廣了…. 而這則新聞也成功地讓好奇的我加入topcoder一試究竟。

Topcoder是一家專門提供線上程式比賽的網站,使用者只要灌了Java Runtime之後,就可以利用Java Applet在電腦面前與全球的Coder即時的一起競賽,你可以選擇C++, C#, Java或是VB來比賽。

撰寫軟體牽涉了許多的領域、面向、流程等。 不同的產品專案大小、功能性質、時程與參與其中的所有人都有極大的關係,其實有時候很難去評斷一個人的軟體技術能力,或是說太複雜了,而這個topcoder提供的比賽,我覺得提供了一個不錯的方向與開始。 在topcoder裡面以程式設計大概分為algorithms, software design, software developement與software assembly。 第一個就是比演算法,例如在每次75分內的選手較勁三個題目,解題又快又準的人將會得到最高的分數。這類的比賽我不清楚在準備前置作業的effort多大,不過在最後比較結果的時候是十分單純的,因為可以直接用預先準備許多的test case直接用電腦去測試所有比賽者的程式。 第二、三類我沒有去玩過,不過我大概看過幾個範例,例如可能給你二星期的時間請你設計或是開發一個軟體元件或是功能。 topcoder會提供spec,而比賽的人要在時程內提供可能如design文件,說明書與最後的程式碼, 而最後會有一些reviewer打分數。software assembly的話是比賽者想辦法組成一個team一起開發一個較大的專案。

而這些比賽其實大部份都是會有獎金的,雖然範圍大多是都是台幣幾十萬,不過也是一筆數字,用來鼓勵全世界各國的coder一起來參加。

Mr.Sunday也玩了這個topcoder一二個月,所以把一些自己個人的想法寫上來……

1. 行行出狀元,其實可以看的到許多成員都會專精在的一個領域比賽,所以對於軟體一個如此多面向領域的東西,會看到有些人特別喜好或是某個領域十分擅長,但不一定在另一個領域可以很傑出。 當然也有人在各個比賽領域都達到很好的成績,但是真的都要囊括前幾名是一件難的事。 :p

2. 比algorithm需要兩項很好的能力。第一項就是很清楚的思考能力,能快速地分析題目、排除不對的方法,找到可行的解法,第二項就是寫程式的熟練度與技術。 algorithm比賽十分殘酷,只要一個test case沒過,就是零分…所以經過幾次的挫敗之後,真的會有顯著的進步,寫每一行程式都會格外小心,然後也會盡量保持程式邏輯的清楚性,否則在時間的壓力下,一旦頭腦開始紊亂,除了更慢解出來外,最後還會心血白費,得了一個大鴨蛋。

3. 其實比完賽之後,其實都會難免十分沮喪… 曾經有一次比賽,一個外國人得到一個很不好的成績之後,很感嘆地說了一句「we are stupid or what!!!」 我聽了之後,真是心有戚戚..

4. 參賽的coder在比賽之後,都會根據當時的表現,調整你的成績(rating ),所以如果你一直在比賽的話,你會得到一張很有趣的表格,看出你這段時間的表現,究竟是進步或是退步 …. 另外會有另一個機車的表格,會把你在所有coder分析之後,告訴你現在落在那一個區間 (可以參考一下現在algorithm的第一名Petr的表格)

5. 這家公司靠什麼來賺錢呢? 看起來似乎可能有二個model….

第一個是為軟體公司徵才,在比賽的時候,常常會有許多不同的軟體公司徵才的廣告,也會有許多代表到線上跟全球的coder聊天,談談他們公司的現狀什麼的….. 另外像是Google每年都會辦的Google Jam程式比賽,似乎也是委託topcoder來辦理。 所以他們可以代理徵才與舉辦比賽的服務

第二個是「軟體外包」…. 其實我常常在算一家公司要養一個工程師一年得花多少錢….我想在台灣,可能是在一百萬上下,那在美國我想應該會是三百萬以上…. 天呀,若是一個專案需要數十個工程師,那費用不就十分可怕。 現在許多的軟體外包公司來減輕開發的費用,例如可以外包到費用較低的印度等等。 但我覺得topcoder正在朝著外包一步步走去。 想想software design跟developement的比賽,其實一個比賽的獎金全部加起來我想至多也是一二百萬,可是他們會有全球的優秀的coder幫他們寫程式,集眾人之智選中最好的作品。 另外外包你會害怕得到的程式又沒有辦法maintain? 我想大家或許都有經驗,就算是隔壁team的剛離職的工程師,你可能都沒辦法maintain他的程式了,有時候在比較沒有制度公司,可能也沒有文件參考。 而在topcoder,除了拿到一份source code之外,還有漂亮的設計跟說明文件,所以不見得會比較難維護。 另外可能耦合型極高的大型專案可能也不適合這個方法….除非有可能將大專案切割成許多小專案,而且彼此之間的設計互動得有效的設計或是管理,才能leverage全球的coder。

6. 在topcoder上所一位coder都有來自的國家跟是否在學…. 可以看的到有大多數的人都還在學,另外也可以觀察到特別有些國家的人比較多,例如俄羅斯、中國、烏克蘭、波蘭….etc。 當然也不乏有美加的人,不過相對而言比較少,我在想或許與工作機會與國家富裕程度、或是軟體業發不發達有些許的關係。 如果在美國,真的那麼會寫程式的人,我想許多人寧可去好好賺錢找工作,或是創業,應該其實也不會在意這幾千美元吧。 這些比較富裕國家的人來,我想主要是求名或是求一份刺激或是練習的機會。 如果是對於一個國民所得低的國家而言,不論是學生或是上班族,如果有這份才能與空閒,能賺一份這樣的所得也是一個不錯的選擇,而且若能得到好的成績,或許可以獲得許多外商的青睞。

7. 因為每一位曾比賽的coder都會有一個rating,長期下來,其實那個rating的確是一個在特定領域很好的分數指標,所以以這個觀點來看的話軟體工程師的工作似乎就不像是一個畫家、作家或是創作者的領域,比較像是殘酷舞台的圍棋界或是相撲界。 勝負與成績就是最好的實力證明。

8. Marathon & Studio Contest

另外我漏提了二個比賽。 topcoder為了兼顧有些coder天生不是那種喜好刺激在短時間寫出程式的人,而是那種天生的慢工出細活卻能寫出最好的結果的coder,所以有一種比賽叫馬拉松式的競賽。比賽者可以在一定的時間內多次交出程式,而系統與給你一個分數,你可以一直去修正你的程式,讓他達到一個更完美的境界。 例如有一次的比賽就是比誰的小精靈可以活的比較久 (PacMan),你要一直去修正演算法去躲章魚,跟想辦法吃大力丸…….. 另一個是Studio Contest,這比賽跟程式比較無關,是讓許多designer能參與的比賽例如許多他們的網頁就是讓designer去設計,最後讓所有的topcoder的member去選擇最好的web design作品

9. 如果topcoder能一步步地把軟體外包所遇到的挑戰與困難解決的話,我想所有的軟體工程師都要更格外小心謹慎了… 「世界是平的」這句話,就會漸漸實現,衝擊著全球的軟體工程師,而未來的大型軟體公司,可能會變成產品創意與行銷中心…. 而每一個coder,身上都帶著一個的殘酷的分數(rating)在電腦面前尋找著可以接手的外包工作,努力地。 ( just kidding….. :p )

這是目前大概想到的一些想法,之後有新的心得再跟大家分享…………

喜歡這篇文章嗎? 分享出去給作者一點鼓勵吧!