ACM 與 軟件開發

有同窗提問:
==================================================
楊中科老師你好,我想向你諮詢下工做的事情。
先介紹個人狀況 普通本科大二學生,,以前一直在練acm的題,也得到了一些大賽的獎項,有一天有我的問我,叫我作一個小軟件,我發現我不會。。更慘的就是我好像什麼軟件都不會作(這裏指的是基於c/c++的開發),,除了console的一些算法題,,而後我和本身說練acm夠了,應該開始學開發工具的運用和一些庫類(函數)的使用了,,這樣2個星期下來,我翻了不少關於商業程序開發資料,我發現商業程序代碼真的不多涉及到高效算法和一些特殊的數據結構,並且我也問了幾個如今在公司上班的師兄,他們也說工做中真正用到acm的知識是不多不多的。如今一系列的ACM比賽又差很少開始了,我如今一直沒準備。。
老師我想問的就是 以你多年的工做經驗來看,具備ACM背景的人的優點在哪,,還有優點大嗎?還有假如我若是如今(大二)拿ACM的獲獎證書和帶上以前開發一些小軟件的實例 去找工做的話,,人家會很輕易的接受我嗎?
===================================================
個人回覆:
你說的「商業程序代碼真的不多涉及到高效算法和一些特殊的數據結構」這是實際狀況,由於並非全部的公司的產品都是理論性很強的產品,就像造山寨手機的人不須要懂太多芯片設計等方面的知識,只要會把大公司製造的手機芯片拼裝起來,而後裝一個外殼就能夠了。「高效算法和一些特殊的數據結構」已經由IBM、微軟等大公司解決了,制形成了一些類庫、應用服務器、數據庫服務器之類的「零件」,商業程序開發者只要把這些零件按照須要拼裝起來就能夠了。在大公司工做的人是少數的,因此你問的師兄估計也都不是在這些大公司工做的,因此他們說「工做中真正用到acm的知識是不多不多的」也是能夠理解的。
ACM被譽爲計算機界奧林匹克,每一年的獲獎者都幾乎被google、微軟、IBM、百度等大公司哄搶一空,不少大公司贊助ACM賽事的目的就是「近水樓臺」,可以比其餘競爭對手籠絡更多的人才。
ACM能夠看作是「聰明者的遊戲」,在ACM題目研究深刻的人一般有很是高的數學素養、計算機算法素養以及很是強的分析問題、解決問題以及動手的能力,可以處理各類高精尖的難題,這是各大公司哄搶ACM人才的主要緣由。
ACM的程序開發和開發商業軟件的不一樣點就在於寫ACM程序是研究(Research),而寫商業程序是開發(Development),這就是研發(Research&Development)兩個字的含義,「研發」就是「研究開發」,像微軟、IBM等這樣的公司都將研發人才分爲兩種:研究性人才和開發性人才。以微軟爲例,在中國,微軟設立了微軟亞洲研究院,同時微軟亞洲研究院下設微軟亞洲工程院,微軟亞洲研究院中的人主要的工做就是出paper(論文),根據微軟總部下達的研究方向進行核心技術的研究,而後將研究成果轉換爲能夠實施的方案,由微軟亞洲工程院的工程師進行實際的開發,簡單的講就是微軟亞洲研究院的人負責研究課題,而後由微軟亞洲工程院的工程師根據研究結果開發出實際可用的商業化產品。所以微軟亞洲研究院的人都是擁有很強科研實力的人,而微軟亞洲工程院的人 則是有很強開發能力的人。像google、IBM等大公司也有相似的部門職位劃分。對於一些次一級的大公司來講,好比百度、網易等,也在職位上進行着相似的劃分。
他們的區別就像研究動力學的人和設計汽車的人的差異同樣,研究動力學的人只負責從研究一些理論,不負責實際的汽車設計,而是由專門的汽車設計工程師來負責根據研究成果進行實際的產品設計。好比對於作搜索引擎來講,研究性人才負責研究檢索方面的理論,得出一些公式、算法、理論,而後由開發性人才負責根據這些研究成果寫程序,而後變成能夠實際使用的搜索引擎。
研究性人才對智商要求比較高,處於人才金字塔的頂端,所以收入、待遇各方面都更高一些,職業發展就是「科學家」;而開發性人才的優點則在於理論轉化爲產品的能力,所以開發性人才中獨立創業的比例更高。
看了公司的職位劃分你就能明白白商業化軟件開發和寫ACM題的區別在哪裏了,你就知道作ACM題背景的人和掌握商業程序開發技能的人的不一樣定位了。若是ACM成績很是好,那麼進入這些國際性大公司的機率會很是高,哪怕去不了大公司,中小型公司也很是歡迎這種基礎理論紮實的人才,由於他們能夠解決別人解決不了的難題,可是這類人才一般要價比較高,不少中小型公司難以承受,同時中小型公司並無獨立的研究部門,因此這類人才進入公司之後一般都是兼有研究和開發兩重責任,固然也是處於公司人才金字塔的頂端,享受特殊待遇;開發性人才則是各個類型的公司都須要的,相對來講選擇面廣一些,可是初始階段的收入會比研究性人才低一些。你須要根據你的狀況來給本身定位,若是是作研究性人才,那麼就繼續把ACM弄好,多參加ACM大賽,特別是正式的國際性ACM大賽,爭取拿獎,同時作好進行研究生學習的的準備(ACM成績好的話通常都會被科研院所免試錄取),在研究生階段進行進一步的理論研究和培養本身的科研能力,這種方向的話不須要管什麼java web開發、Windows程序開發這類的實現性技術,只須要把算法、模式識別等理論課程學好便可;若是你的定位是開發性人才則把主要精力放到java web開發、Windows程序開發等上邊來,若是從事這個方向,由於你已經有必定的ACM的基礎了,因此應付面試筆試中的那些算法難題不在話下,那麼就在把一部分精力繼續投入在ACM的學習上的同時,把更多的精力投入到這些商業程序開發的技術上去。
相關文章
相關標籤/搜索