如何向親戚朋友解釋自己是搞演算法的?
(並不局限於演算法競賽)
(有些答主答題先腦補,把提問者批判一番,造個大新聞,那您水平是很高噢?)
演算法就是用計算機模擬現實中的東西。
比如說,演算法可以模擬出一坨屎。
根形的:
環形的:
螺旋形的:
蛇形的:
坨形的:
同事看後對我說:「你的屎有點上火呀!」
我答道:「沒品味,這屎里蘊含著特效!」
為什麼我會用演算法生成屎呢?本來我是要生成星球的,畢竟我的理想也是星辰大海。結果生成出來的星球,別人都說像屎。為了讓我生成的星球好看一些,於是我就生成出屎來。對比一下,我的小星星就好看多了。
在我看來,搞演算法的有這麼六類人:
- 從事廣義的理論研究,定義理論問題或者給出演算法的那一類「理論計算機科學工作者」
- 專門的演算法工程師(以實際的工作內容來判斷),無論是搞機器學習演算法、還是並行演算法,會在實際的工作中頻繁的應用各種演算法的技巧優化解決問題的性能和效率的人
- 在研究中應用演算法,對具體的問題提出形式化模型,應用理論研究的成果解決問題的人
- 在演算法競賽中,針對一大類問題提出明確的新技巧,並且這種技巧成為大家廣泛應用的新姿勢的人(一定要新,給舊概念重命名,無論是不是獨立發現都不算)
- 用了大量的精力參加各種演算法競賽,以獎金作為主要收入謀生的人
- 以ACM/OI等演算法競賽的教練/出題人/講課人為職業,並且自身有足夠能力在演算法上指導選手的人
這六類人,從上到下按照和「搞演算法」的契合程度降序排列(後兩類已經很不適合「搞」這個字了),OI/ICPC選手絕對不算搞演算法的人。甚至,在我看來,OI選手認定自己是搞演算法的人,是一件很令人惋惜的事。道理很簡單,「搞演算法」,是要搞出東西來,以此謀生的人。而一場演算法競賽,問題是人家形式化好的,解也早就有了,就算你獨立的做出來,也不過是重複人家走過的路而已,作為比別人更早的在演算法上入了門(很多人就算學了計算機,都一輩子入不了演算法的門)如果滿足於此,真的是一件非常可惜的事情,明明計算機科學和技術中還有許多你聞所未聞的領域和黑姿勢等著你呢,你卻搞得像是高中畢業就要去就職一樣。
「搞個演算法」,不是寫個程序,跑個數據跑的挺快就行了。第一要有充足的創造性,第二要有夠嚴謹。創造性上肯定有人不服氣,覺得自己也是獨立思考出題解的,而且自己作的東西確實很難。但是難不意味著新,而且獨立思考和獨立思考不一樣,在接受了相應的預備教育、對問題有沒有解心裡有了底的基礎上,想出一個東西來和從零開始是完全不一樣的。而且幾個小時,最多不過幾天就能想清楚的東西,你說它難,又能難到哪裡去呢?另一方面來說,你說自己能搞演算法,不能只是寫個演算法的流程,然後就說自己這個對,得能夠證明才算數。就好像90年代國內那篇SPFA的垃圾文章,現在普通的高中選手看了都知道他們瞎扯淡,就算這個姿勢被大家重新發現了價值,他們能算正經的搞演算法嗎?事實上,很多OI/ICPCer選手在「懂演算法」上都還差了臨門一腳,只不過是知道演算法而且會用。不信的話大家可以去完整的證明一下基本的網路流演算法,不需要dinic、ISAP,證個EK就好,恐怕也有不少人是寫不出來的(難度並不是特別難,但是以我有限的水平來看,真的非常繁瑣),而EK不過是1970年的,複雜度高達O(VE^2)的演算法, 80年代搞ISAP的Orlin老爺子13年都已經把這個問題改進到O(VE)了。看過寫好的演算法流程,然後按照別人的複雜度說明記清楚演算法的性能,不能說是「懂演算法」的境界,更談不上「搞演算法」了。
最後再說幾句,有些人覺得演算法競賽很有內容,比工程甚至普通的研究還有難度。我覺得這個是比較方法不太合適,寫個小爬蟲、做個個人網站、弄個C--編譯器,這種入門的東西當然簡單,但是我們搞競賽的時候入門的是什麼?A+B?高精度加減法?一樣水的很。你不能拿一個領域高級的東西去和另外一個領域入門的東西比。搞競賽搞得極致的巨巨當然很厲害,但他們身上不是只有競賽選手這麼一個標籤,他們的成就也不是只靠搞競賽就搞出來的。況且,就像碼農群體大多是每天死於業務邏輯的搬磚工,科研群體很多時候都是浪費咖啡的灌水機一樣,競賽選手這個群體,更多的人是那些做不出來題的,讓大家拿金牌銀牌的那個基數(不要看不起基數,要是有一天這些基數決定不參加競賽了,大家一起玩完)。如果說搬磚灌水還填補了一些巨巨大牛沒有時間去做的東西,萬一銅鐵牌回家,除了鍛煉了自己的能力,我們敢說我們創造了什麼東西嗎?不能說麗潔姐姐搞過競賽,你也搞過競賽,你就搞過麗……(不對劃掉)你就也是麗潔姐姐這個水平了。我們是競賽選手,是演算法愛好者,在演算法上有了入門的機會,不去想著有朝一日去建模沒有人解決好的問題,也不想著將來如何去處理許多人想也不敢想的複雜或是大量的數據,過早的給自己固化一個標籤,滿足於這種答題的模式,我真的是覺得非常可惜。
利益相關:一個內心深處其實還是隱約的想搞演算法,但是清楚自己不是那塊料,省隊都進不去,算上邀請賽才敢說自己金銀銅鐵都拿過的退役OI/ICPCer
跟老婆解釋過很多次了,每次她和別人介紹我都說:「我老公是搞算術的。」(?_?)
傳統演算法我不知道怎麼解釋,我是做機器學習演算法模型的,回家親戚長輩們問我:你做什麼的呀?
這時候我一般不會直接說我是搞數據挖掘或者機器學習的,而是給他們舉幾個例子。
例子1:您平時用百度搜索吧?其實您每次搜索的內容都會被記錄下來,然後時間久了我們就可以通過您的這些搜索記錄推測出您的性別、年齡段、學歷等信息,這個叫「用戶畫像」,我們就是干這個的。
例子2:您在淘寶上瀏覽了某個商品後,是不是發現他以後會經常給您推薦類似的「你可能喜歡」的東西呀?其實這個叫「推薦系統」,也是我們乾的,我們就是根據您之前的瀏覽記錄和購買記錄推斷您現在可能會購買的,然後把它推送給您。
例子3:您用手機看新聞嗎?您有沒有發現它推送給您的都是您比較喜歡看的?這個還是我們乾的,巴拉巴拉……
然後長輩打斷我,說:「哦哦,我知道了,你們是不是當特務的呀?……」
我:「…………」謝邀。
OI蒟蒻一隻。春節回家的時候,有個在科技企業(電子產品相關)上班的親戚,跟我聊天的時候問我:你平常用不用演算法啊?
我:(?.?;)用啊
親戚:我聽說現在這個演算法可厲害了,什麼都要用演算法。你以後大學要學的專業哪門課講演算法啊?
我:(?_?;)演算法這個概念挺廣的,很多課都會涉及吧...
親戚:這個演算法是什麼東西啊?跟那個數學建模是不是一個東西啊?
我:(;一_一)可能...不能算是一回事吧...
然後就講了一下菜譜的比喻,感覺好像刷新了他對演算法的認識...
所以可能對沒有相關知識的親戚來說,演算法這個概念都比較陌生,還不如說自己是修電腦競賽的呢.....(霧
不用說演算法,就說計算機理論研究就好了(滑稽謝謝,不會修電腦。
A:你是做什麼的啊我:搞演算法的A:演算法啊,就是那種做算數的對吧,那你上了這麼久學,1+1那種還用你來做?水平真不行
我......
(A是跟我關係不大好的一個人)——你學的這是個啥玩意?——信息學奧賽。——都學什麼?——學一些演算法之類的東西。——哦,那學這玩意有什麼用呢?可以用演算法寫lol不?王者榮耀也行——……——你不會寫?——不是,我不是這個意思,這和你想的不一樣_(:з」∠)_——哦好吧,那你繼續學吧,反正我什麼也不懂。
——……
我校某大佬說他在過年與親戚打牌的時候使用DP貪心等演算法,然後贏了之後向親戚朋友們介紹
你居然想要嘗試去解釋...看來你真適合當程序員...
不要提演算法就說自己是學信息學競賽的就好了_(:3」∠)_
怎麼把數排序?每次選最小的?呵呵... Naive!(雖然是有這種演算法但親戚想到的肯定不是)
你知道那些dota啊農藥角色是怎麼移動的嗎?不知道? 唉.... 還是too young!之類的... 想到什麼東西隨便套就行了,反正親戚不會(假定親戚里沒有碼農(霧
什麼?你還問我學了有什麼用?你問的問題呀,都too simple!可以上清北啊由於不知道怎麼解釋,那就轉移話題,就直接說我學化工的,然後學了點編程。然後他們就會問化工幹啥的。。
我其實很好奇。你到底搞出了啥演算法?
我猜,你其實就是個代碼搬運工。
大家心裡都明白。何必自欺欺人,把自己說的那麼高大上呢?
哎,不讀研究好多年。現在基本告別研究了。但是評論區竟然能吵起來。
引用:acm新手有絕大部分都自己寫出了冒泡排序或選擇排序,只不過他們那時候不知道這些排序方法有這些專有名字。這可是在不知道的情況下自己寫出來的,總不能算搬運吧?
這種人,按我導師的話說。連搬運工都不如。
就好像一個人,因為沒接觸到大學的知識。在一個小村子裡。獨立推導出牛頓萊布尼茲公式。然後他對你說,他說他是搞數學的。推到出了一個神奇的公式。你是不是覺得好笑。還是覺得他是神經病?
這種人是非常可悲的。
做學問:一定是定位問題。然後去理解前人對這個問題得研究成果。在掌握的基礎上再創新。
就好像我最近寫了一個分詞系統。數據結構使用的是 Trie樹 。實現用的是雙數組結構。論文看的是 《基於雙數組Trie樹演算法的字典改進和實現》。計算概率用的是動態規劃。
沒有一個是我自己發明的。都是把前人的成果搬運過來。
所以你說你是搞演算法的。我肯定會問。你搞出了什麼演算法。寫了什麼論文。發表在哪一篇期刊上?
就好像一個搞數學的。一篇論文都沒有發表。同行不會認為他是搞數學的。最多算是個數學學習者。
搞,就一定要搞出成果。
不然研究生為什麼要寫論文才能畢業?
經驗之談,先強調自己不會修電腦
如果你在大學或研究所做研究,直接說「我是大學教授/副教授/研究員/講師」就行了,或者就籠統地說大學老師。我跟閑人也一般不去細分,就說大學老師。
先說明,我不會修電腦
這不很簡單嘛,舉個例子就好了小學時教的減法 156 - 98 = 156 - 100 + 2 就是個很好的例子,一種解法是直接算,一種是先減100再加2。再不懂的人也明白了
無論如何解釋,在他們看來,你都在說:我是修電腦的。
演算法就是解決問題的方法。。。。。比如你上班走哪條路,晚上怎麼做飯還有怎麼哄老婆。。。。。的問題。。。哦對了,哄老婆不是演算法可以解決的
推薦閱讀:
※你最難忘的一次ACM/OI比賽經歷是什麼?
※為什麼說acm比賽的含金量在下降?
※如何評價2017年ACM/ICPC北京區域現場賽?
※如何看待《微微一笑很傾城》的男主的 ACM 經歷?
※你覺得 ACM 給你了什麼?ACM 什麼地方吸引著你?畢業後繼續 ACM 的理由是什麼?