知乎熱議:算法被吹上天了嗎?程序員刷題只爲面試?

{"type":"doc","content":[{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"算法只是面試敲門磚?"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"俗話說,“語言只是工具,算法纔是程序的靈魂”。對於程序員來說,算法始終是一個繞不開的門檻。近兩年,越來越多的互聯網公司在招聘環節注重算法的考察。但對於程序員來說,真的有必要死磕算法嗎?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"近日,知乎上一條關於"},{"type":"link","attrs":{"href":"https:\/\/www.zhihu.com\/question\/488192031","title":"xxx","type":null},"content":[{"type":"text","text":"程序員是否要死磕算法"}]},{"type":"text","text":"的討論熱度頗高。題主自稱自己在剛入門編程前認爲算法很重要,但在入門之後卻發現算法用處不大,因爲題主在實際業務中遇到的問題和已經解決的問題都跟算法不沾邊。那麼問題來了,如果只是做編程的話,是不是沒必要死磕算法?"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"不同崗位對算法的掌握程度不同"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於這個問題,有網友認爲,如果只是想做好眼前的編程工作,比如只是實現一些簡單的業務邏輯,不考慮性能(效率、內存、功耗等)的話,那麼學習算法確實“沒用”,也有網友稱,“95% 的公司並不需要算法,在需要算法的那 5% 的公司裏寫代碼,寫的代碼 95% 是業務代碼,和算法沒啥關係”。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"網友軒轅之風認爲,算法雖然重要,但不同崗位需要掌握的程度不一樣。如果做前端、客戶端開發,或是做後端只寫 API、對接口、做 CRUD,掌握一些算法基礎就足夠了。但如果做的是脫離接口層的後端,經常爲了性能,要與 CPU、緩存、內存、I\/O 等東西死磕,就需要多刷 LeetCode,把算法學精學透。這些系統性能每提升 0.1 個百分點,都可能會對業務帶來巨大的提升。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"谷歌 AI 研究員沈卓然認爲:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"實際工作中絕大多數內容都完全用不到算法,更多是增刪查改、對接 API、調整數據格式之類的。更進一步的工作,通常也是和系統設計關係更大,而不是算法。只有在做比較底層、比較尖端、或者非常性能敏感的場景下才可能涉及自己實現算法,但這些場景所需求的也遠遠不僅是算法。實際上,在工作中反而需要注意不要過度使用算法。軟件工程的目的是寫出易懂、易合作、易維護的代碼,而不是看上去很“聰明”的,或者是效率高一點卻複雜很多的代碼。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不過這並不是說算法不重要。我認爲在實際工作中算法知識最重要的作用是知道某些算法是存在的,這樣才能夠理解系統的底層原理,或者在需要的時候找到合適的算法實現並引用。"}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"算法在面試中承擔“智力題”的作用"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"雖然大家對於算法的重要性觀點不一,但一個共識是:越來越多的互聯網公司,尤其是大廠,在面試中注重算法能力的考覈。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此前有脈脈用戶表示,硅谷大廠,無論是應屆生還是工作幾年的程序員,只要是一個寫代碼的崗位,都特別重視手撕代碼(數據結構與算法,LeetCode 類型題目)這個環節,這個環節表現不好,面試官可能就沒有興趣去了解其他的能力,他們很忙。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"獲得高贊回答的答主 Xinyu Chen 認爲:面試裏的算法題是美國大科技公司(主要是早年的 Google)帶起來的一股歪風,後來其他公司漸漸效仿。同時求職者爲了在面試中取得競爭優勢,就開始通過刷題來訓練自己解決面試算法題的能力。LeetCode 這類網站也是在這種形勢下產生並逐漸流行起來的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"谷歌 AI 研究員沈卓然則認爲,算法題在現在的程序員招聘中基本上承擔着智力題的作用,因爲計算機科學的知識深度比較淺,培養起來不難,所以大公司招初級員工的時候更看重聰不聰明、潛力怎麼樣,而不是現在會不會某種技術。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"至於互聯網大廠爲什麼喜歡考覈求職者"},{"type":"link","attrs":{"href":"https:\/\/www.infoq.cn\/article\/eMUhiN8ja3XsGcz1ww6q","title":"xxx","type":null},"content":[{"type":"text","text":"算法能力"}]},{"type":"text","text":",答主華中科技大學計算機應用技術碩士夏天總結了以下三點原因:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"numberedlist","attrs":{"start":1,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","text":"算法能力能夠準確辨別一個程序員的技術功底是否紮實。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"text","text":"算法能力是發掘程序員的學習能力與成長潛力的關鍵手段。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":3,"align":null,"origin":null},"content":[{"type":"text","text":"算法能力能夠協助判斷程序員在面對新問題時,分析並解決問題的能力。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"也有網友認爲,算法只是一種高效率的篩選人才方式,評價體系比較單一,只需要看對方有沒有寫出正確的(甚至最優的)解法。此外,算法能力的考覈相對比較公平,求職者也難以作弊。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當然,並不是所有的公司都適合在面試環節着重考察求職者的算法能力。答主 Xinyu Chen 認爲,算法題作爲面試題本身的效用,更適合大公司。公司招人,尤其是初級的開發者,並不需要他們具有特定的技能,所以面試考算法題普適性更高,反之,面試官需要花費大量的精力去準備特定領域的面試,成本更高。而小公司更多的時候需要掌握特定技術的人,如果只面算法題的話,誤差會很高。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"學算法,真正學到的是算法思維"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對於另一部分程序員來說,學習算法不單是爲了通過大廠面試,而是爲了提升自己的算法思維。有觀點認爲,算法中最有價值的就是“算法思維”。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"所謂"},{"type":"link","attrs":{"href":"https:\/\/time.geekbang.org\/column\/article\/299180","title":"xxx","type":null},"content":[{"type":"text","text":"算法思維"}]},{"type":"text","text":",指的是用算法去解決問題的思維方式,算法在被設計出來之前,設計者究竟在想什麼?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"至於算法思維是否“有用”,原百度高級算法研發工程師、極客時間專欄作者胡光認爲:算法思維不是爲了我們傳統意義上的“有用”而服務的,而是爲了提升你的境界,提升你解決問題的能力。就拿刷題來說,題目總是刷不完的,每天都會有無數的新題產生,那你能找到合適的老師去學習所有新題的解法和技巧嗎?當然是找不到的。這個時候,算法思維就能保證在碰到了新問題時,你可以有辦法去解決它。"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章