搞架構和搞演算法,哪個更牛一些?
架構這裡分三個層次:
1、基礎架構:操作系統、分散式系統、嵌入式系統、資料庫、網路等,主要是研發底層基礎設施,例如:Hadoop。2、中間件:主要研發是一些Framework或中間服務,例如.NET Framework,一些消息中間件,緩存中間件等,乃至類似Extjs的UI層框架。3、應用架構:設計系統的技術架構,利用各種技術保證系統的性能、穩定性、維護性、擴展性。另外這裡的演算法特指一些人工智慧(Machine Learning)、圖形學、密碼學等演算法,不是數據結構中的基礎演算法。
從工作的角度來分,如果按題目上的分法把程序員分成兩類,演算法研究與工程實施。那對演算法研究人員的要求應該是創造新的演算法或提高現有演算法的效率,這並不需要很多人去做;對工程人員的要求則是:合理地設計系統的整體架構,挑選合適的演算法解決實際中的問題,並正確編寫代碼,一個大工程會需要很多人。
二者所需要的技能可以說是基本不同,也就無從比較。人們往往認為,只有少數人做的,才是NB的,其實不然。從業人數只與社會需求有關,因為供需決定工資。
軟體工程,就是一門研究如何讓一群並不優秀的人在一起創造出卓越產品的藝術。
演算法研究,就是用最優秀的人類大腦衝破計算機領域各類極限的藝術。哪個更牛?見仁見智。
從個人情感上來講,我只是認為搞架構會更有趣些,會面對形形色色的問題。搞演算法,天天面對Paper,Machine和Teammate就夠了,想想就無聊。
附送吐槽:當我們在討論演算法的時候,我們實際上是在說什麼?我所見的面試中常見的所謂的演算法題,無非就是各種排序,各類字元串匹配,各種數據結構的實現與遍歷與編解,時間、空間複雜度分析。這其實不是演算法,只是計算機基礎知識。而像動態規劃,貪吃,退火,遺傳,機器學習之類的東西,或是改進現有演算法的漸近界到別人從未達到的新的境界,才和演算法沾上點邊。我以為,這個問題的答案不是「誰更牛」,而是應該(甚至必須)二者得兼。
先說說機器學習演算法的重要性。最近十年的IT行業是互聯網主導的。互聯網服務之所以稱為服務,就是要能了解、理解、服務好用戶。傳統行業如銀行、醫院、商場也是服務行業。互聯網服務和他們的區別在於——利用機器智能,回答長尾問題,服務大眾——用戶不需要是衣冠楚楚的就可以P2P貸款。這是人工智慧技術最近十年在互聯網行業發展起來的核心原因。也是大家能看到所謂」演算法工程師」的收入比其他工種相對高的原因。
人工智慧演算法和大學專業課「演算法」有一個本質區別:後者教大家如何用「人腦」,利用人的知識,想明白解法,然後描述成代碼,讓機器照著執行;而前者是讓機器去從數據里「學習」或者「總結」知識,然後來解決問題。
要想互聯網服務質量過人一等,能回答好的問題要更多,所以知識的量得更大,也就是說要能從更多數據中學習和歸納知識。這就是「大數據」的核心價值,也是「架構」技法的重要性。
用Python+NumPy、R、Matlab、Octave、甚至一台機器里的一兩個GPU、不具備容錯能力從而只能覆蓋幾十台機器的MPI,在很多情況下都不能搞定」大數據學習「問題。讀書的時候,用這些工具只是方便大家對人工智慧演算法儘快有個了解。實際情況是,最好在工作前,至少在工作中,要能掌握large scale system開發的思想和方法。
大數據學習支撐互聯網行業突破已經至少十年了。它悄悄帶來了很多革命性的變化:tenure的知名人工智慧教授們也面臨中年危機了;其中有遠見有執行力的人尋求進入公司發力(入Andrew Ng);有業界經驗的人開始進入大學執教(如Alexander Smola);架構高手跨界進入人工智慧演算法領域(如Jeff Dean);大數據存儲和處理相關的開源項目的興盛(如Hadoop、Spark、Mesos、CoreOS、Kubernetes。
如果在這樣的大潮前還看不到兩者得兼的必要性,還在二者選一,甚至通過迴避技術完備去談」商業模式上的突破「,在沒有做好log信息和第三方數據收集時自稱」我們沒有大數據「,都可能讓我們在不遠的未來會碰到尷尬。都是出來賣的,何必爭來爭去,有意思嗎?後腿肉嫌前腿肉便宜。
搞架構的設計大樓,搞演算法的造磚,搞工程的蓋樓
架構里有很多演算法的吧架構可以理解成大演算法?場景大一些而已不都是空間換時間,時間換空間那點事嗎?
演算法是讓機器跑起來效率更高,架構是讓人用起來效率更高。喜歡哪個就選哪個,實際開發中兩者都挺重要的,過度追求運行效率是不對的。
演算法架構師飄過,程序員解決的是1還是0的問題,架構師解決的是1到100還是million到billion的問題,演算法工程師解決的是60%還是80%還是90%的問題。
至於哪個牛,我覺得吧,物以稀為貴。演算法工程師編程能力可以稍欠,但是架構師寫程序必須超牛——像我這種兩邊都吃得開的,就特別能唬人。都很牛!
架構是很虛的東西,不需要自己實現,主要靠經驗和知識,國外好的樣版多了去了,你選一兩個改吧改吧,就是好架構了。演算法是要機器通過的,分析演算法的工作就很繁重了,還要優化代碼,還要消滅引入的bug,非常折磨人的事情。
但是,從階級上來說,架構師是管理層,比演算法工程師高。階級高就意味著干更輕鬆的活,拿更多的利益,古往今來都是這樣。 工作多年的工程師,資歷足夠,嘴皮子厲害,才能轉職做架構師。
架構不是你想搞,想搞就能搞。而且搞架構的,總是會把自己的工作捧得很高,歷史上的統治階級,不也是一樣一樣么?自己就日理萬機,別人就螺絲釘。所以,架構師遠比演算法工程師牛逼。不管哪個牛,反正沒我牛。
我是很認真的...................吹牛的!!!
其實術業有專攻,不同領域本來就沒法比較的東西,非得說牛不牛的,有病吧!構架都是抄 。 演算法不能全抄 。
架構這個東西更多是經驗的積累,初始系統慢慢演化過來的,需要有化繁為簡,同時對細節充分把握的能力,多擼代碼,多學習多參考,多寫bench mark,時間長了自然能力就上去了。演算法呢需要有一定的基礎,起碼在開搞前,熟悉這個方向的研究成果,少走彎路。無論演算法還是架構,其實對於碼農來說,都是工程實現問題,在糙快猛的互聯網行業 很快可能就被新系統替代掉了。這倆不能說哪個更牛,只能說擁有解決問題的能力更牛。
嵌入式系統已經包括了:硬體,驅動,操作系統,應用軟體!
當然是基礎架構,需要全面了解業務才能進行架構。中間層和上層應用,對做架構的人來說是手到拿來。你不會見到大公司的CTO每天去弄中間層和上層應用這種搬磚的活兒。技術境界不一樣
設計房屋的牛還是攻克房屋某項關鍵技術的人牛呢
不搞架構,單獨搞演算法,那就是在製造垃圾。。。(愛好演算法的准架構人員弱弱的飄過)
架構師搭好骨架,才能上不同演算法並優化演算法。。。
剛剛突然想通了 簡單自我答覆一下吧:首先做基礎架構的人實現了系統的最底層部分,這是一些應用程序的基礎。其次一些演算法研究者開發了一些基礎庫,比如圖形、加密、網路、人工智慧等等,作為上層應用的基礎。然後一些技術比較牛工程師做了一些應用開發框架,這些框架可以理解成是應用的半成品,我們需要藉助它快速的實現我們想要的界面、功能等等。最後應用開發者實現應用,同時利用一些應用設計模式來提高應用的維護性、擴展性。技術逼格層次一目了然。
我覺得普通演算法誰都能想出來,而絕絕絕大多數的需求只需要普通演算法,而好的架構確實每一個軟體所需求的,所以搞演算法是心理優越,搞架構是真正的優越。PS:你先問問自己,演算法你能想出來好的么?架構你能想出來好的么?都想不出來還是去小公司搞架構吧
你說的架構是設計房子,你說的演算法是蓋房子的工程或工具技術。你不覺得城市規劃更好嗎?
非要分個高下做什麼哦
我是搞演算法的,我覺得搞架構的牛。當年吳軍在soso有一句話,我把架構給你搭起來了,演算法你還搞不定么
推薦閱讀:
※用「機器學習」做「股票預測」能做到什麼程度?
※人工智慧是不是只是一場鬧劇?
※目前各大互聯網公司中,哪些AI團隊值得加入?
※如何量化評估推薦系統的推薦結果?
※能否解釋一下dummy encoding和one-hot encoding的具體使用和對自由度的影響?