為什麼剛入門的程式設計師沒有感覺到演算法和資料結構的重要性?

時間 2021-05-07 03:13:05

1樓:hzldds2020

演算法和資料結構屬於內功了,太多的人想的是怎麼把功能做出來就好了,並不會糾結於細節。對於剛入門的程式設計師而言,有太多的東西都半生不熟,而且大多數程式設計師在工作中也很少需要去解決演算法和資料結構的問題。

而且有太多的工具庫可以用了,比如List Set Map大多數語言都實現好了。

輪子太多,也太好用了,如果讓他們手擼個HashMap這類的東西,有不少混日子的老鳥都可能中招的。

2樓:

因為根本不需要。。

我們現在用的輪子已經做了各種效能上以及安全的優化(雖然有些輪子做的還不行),各種工具的迭代演進就是為了降低我們的擼碼開發成本,所以也不是不需要了,是我們一部分人做的工作不需要了。

3樓:

不光是剛入門的程式設計師。

小公司的程式設計師都會面臨這種問題。

在當今的算力情況下,演算法和資料結構如果日訪問量沒有上千萬的時候,很難體會到他的價值。

即使訪問量大,但是你做不到主程,演算法和資料結構也不是你考慮的問題。

最終導致大家寫的程式得過且過。

4樓:

發現現在程式設計師越來越像領導了說話都是廢話套話張嘴都是巨集觀這個我看沒人敢回啊

看了一大堆回答長得一模一樣跟領導講話似的

我就想問個直白的:除了做遊戲和搜尋引擎的。

麻煩您把您日常的,做專案中,用到的演算法和資料結構(我指的是,你自己手寫實現啊,別跟我說用到的庫里包含),比如:二叉樹,DFS, BFS, 最短路等等,給我舉幾個實用例子好不好?

麻煩別舉別人家的,別舉那些檔案系統啥的例子。

5樓:

這麼說吧,演算法和資料結構是當今幾百萬人數碼農崗位的屠龍技巧。

但是如果你不想淪為幾百萬級數,就得學。

因為幹的增刪查改的活,確實不需要這個知識。

比如計算機到底如何執行乙個程式,稍微細緻深入的理解一下,這個環節現在可以省略,因為輪不到你去幹。

6樓:

舉個很簡單的例子,前段時間準備把模型訓練過程搞得通用一點。就寫了個把資料拉取,處理,過濾,模型訓練,評估,部署抽象成節點,然後根據配置生成圖,根據要跑的節點從圖上拉取依賴節點,整個執行一遍,新增模型或者不同的資料處理過程,不同的評估方式,只需要實現不同的類,通過配置插進去就行了。這裡面就用到了有向圖,圖的遍歷,拓撲排序這些基本的演算法和資料機構知識點。

有了這個東西,我們大量的流程相似,稍有區別的模型就可以通過配置來構建訓練上線流程了,能節省比較多的精力。

7樓:肥瘦肉的角逐

完全無法理解為啥演算法不重要.......乙個程式設計師可以不懂很多的語言,但是資料結構這種東西一定要會額,你不會資料結構當啥程式設計師呀?html編輯員麼lmao。

可能因為開源的東西太多了很多人懶得自己去開發了,雖然我菜,可能比題主菜一萬倍,但是我依然認為演算法的重要性太大了,用多了開源的東西,一旦到自己開發新玩意的時候,感覺會書到用時方恨少吧.......(如果還有開源的話繼續當我沒說)

希望題主繼續學習,加油!

8樓:卡拉迦迪斯

境界不是乙個好定義

我覺得是因為你是全棧,並且還能全棧

等你需要和10個人配合,持續開發乙個中大型專案 3年的時候你就知道演算法和資料結構的重要性了

9樓:電磁爐的鍋

遇到的問題別人都遇到過。google、stack overflow 足夠,連 api doc 都不用看,更別說官網說明文件了。複製貼上就可以解決工作內容,不需要從頭搭框架,寫通用的工具包。

工作中又用不到,學了沒用,不用就忘,學它幹嘛。有這時間還不如追一些最新的框架,加到自己的簡歷上,為下乙份跳槽漲工資作準備。

這跟境界沒有關係,糙快猛的開發環境,誰管你用什麼資料結構,什麼演算法,提公升了多少效能。

幹就完了

10樓:

如果是剛入門,感覺不到很正常。

因為計算機的世界到今天已經有太多的知識,作為剛入門的你來說,剛開始接觸到的東西肯定是某些技術的應用。特別是如果你是全棧的話,不太可能一上來就給你來乙個底層資料結構實現。

不過隨著入行時間變長,當你熟悉了這些技術應用以後,慢慢就會感受到其實整個計算機世界跟我們現實世界完全是相通的,不同語言之間其實本質上要解決的問題也是相通的。不同的只是選擇路徑不太一樣,所謂條條大路通羅馬。

程式設計世界整個其實就是對現實世界的一種抽象或者說把現實世界搬到計算機世界中。資料結構在程式設計世界中的位置可以說對應我們現實世界中的各種事物(名詞),而演算法在程式設計世界中的位置可以對應我們現實世界中各事務的行為(動詞)。所以演算法和資料結構就是變成世界的基石。

有點扯遠了。回到你的問題。當作為乙個入行不久的全棧,能做到看懂各種技術,熟練運用各種技術解決問題就很好了。

而資料結構和演算法更多體現在對乙個程式的設計上,也就是我們說的「造輪子」。當你自己以後需要編寫設計各種框架時,你就會感受到其重要性了。

11樓:

同學,估計你還是面試面的少。

有空去爭取一下大廠的面試機會,BAT和FLAG都要試試,Microsoft也不要放過。他們會用問題告訴你資料結構和演算法有多麼重要。

12樓:Serendipity

@程墨Morgan 老師總結的很到位了:

有的程式設計師滿足於『把事情做出來』,他們想的不是『如何把事情做得更好』

我對上面這句話深有感觸

初入大學的時候,沒接觸過程式設計

大一的C語言,最大的成功就是把老師的要求做出來,得到標準的結果而已

其餘的都不在考慮範圍內,很多東西都是遍歷全部迴圈一遍來找的

直到後來學習了資料結構和一些比如動態規劃之類的思想,才慢慢對程式的時間和空間有了些感悟

真正印象深刻的是和同學一起參加比賽

那些題目對於所用時間和程式所占用空間的要求限制的如此之嚴,以至於我不得不思考該對資料結構和所採用的演算法做怎樣的篩選與處理。

確實,把事情做出來可以說是大部分人入門時的要求了,倘若你給自己規定了執行時間和占用空間的限制,那麼就相當於在問自己如何把事情做得更好。

這就是演算法和資料結構的意義

有時候不僅僅是做的好不好的問題,甚至關乎你能不能做出來!

13樓:

狹義的演算法對大多數程式設計師來說真的沒那麼重要。狹義的演算法指的是《演算法導論》書上的那種,不包括影象處理演算法、語音識別演算法、機器學習演算法、自然語言處理演算法等等。後面這些本質上都是線性代數、數學分析、概率論的組合。

比如遞迴,大多數網際網路公司的CRUD程式設計師,一年能有幾次需要自己寫遞迴?又比如動態規劃,除了刷LeetCode的時候,一輩子有幾次在工作中要自己實現乙個動態規劃演算法的?還有諸如網路流這些,除了特定的領域,CRUD業務用到的概率極小。

資料結構知道基本概念就行了。除了少數特殊的業務需求,一般人不應該需要自己實現常用的資料結構。標準庫里有的就應該用標準庫的,自己造輪子大概率沒有標準庫好。

就跟加密演算法一樣,密碼學第一堂課老師就說了,千萬不要自己實現加密演算法,因為你實現的一定是有漏洞的。

14樓:ydc

因為大部分公司沒太大需求,這由兩件事實導致:

第一是大多部分業務講究快速實現本質就是套m個for迴圈加hashmap和if-else 複雜度為O(n^m) 資料量不大情況下比不上io延時

第二是過早的優化是萬惡之源

結論是如果不寫基礎元件和庫(包括各種中介軟體) 不優化重構現有專案而只是快速開發那麼演算法和資料結構的確對公司不重要

對個人重不重要?看情況有的人一輩子演算法不太行照樣混的風生水起

15樓:不諳世事的吳同學

演算法和資料結構直接決定了伺服器成本。

純工程技巧,比如M:N使用者態執行緒,比如針對96核優化的記憶體分配,比如cache friendly的共享資料結構,比如simd,omp,低負載場景下的確可以顯著降低單個任務的latency,但對於計算密集型的大規模分布式離線批理或近實時流處理服務,吞吐量這一最關鍵指標的收益不算顯著。就算是flashmap那種核心優化,把page table直接對映到ssd,省去了page到inode,inode到block,block到物理位置的定址和中間不必要的sanity check和快取,也只是把效能提公升40%。

事實上我們絕大多數服務不能動核心,都是跑在普通linux上,絕大多數系統層面的提公升沒辦法跨越數量級,也就沒辦法顯著降低成本。

真正能讓所需機器數量減少一半,每天讓部門節省十幾萬成本,順便減少碳排放的,還是演算法和資料結構上的優化和改良。乙個比較大的演算法流程裡充滿了各種trade-off,不存在普遍意義上的最優解,對不同workload有不同的策略。沒有真實資料之前很難一次性設計出最佳策略,需要開發者掌握所有實用資料結構的緊湊性、讀時間複雜度、寫時間複雜度、併發效能,從諸多方面權衡判斷,並以此為基礎重構演算法流程。

16樓:牛博

演算法是靈魂,資料結構是靈魂的設計。

剛入門的程式設計師,就像三歲小孩搭積木,隨意亂放,一不高興就推倒,喜歡自已動手; 不喜歡爸爸、媽媽按說明書設計圖紙插手幫忙……(即使您有興趣指導)

程式設計師的高階,和小孩子的成長極其類似。

隨著年紀的增長,每個小孩搭個穩定的積木、畫個阿貓阿狗都不是問題,但要賦之以靈魂、設計達到迪斯尼樂園的水準,沒幾個能的。

程式設計師大多也是這樣,學了幾個月或幾年,不管是多麼難的語言 C/C++、 Perl,還是簡單的 Lisp、 Haskell……誰還不會寫兩行呢? 但要做乙個效能與設計都優雅到蘋果級別的產品,又有幾人能做到?

所以這東西重要不?非常重要!

能感覺到不?感覺不到......

沒關係,很正常!

未來您會越發感覺到它重要, 也很大可能放棄!

都沒關係,要麼細心體會、蓄積這方面的能力。

要麼趁早放棄,別再聽他人嘎吹其重要性……做好眼前的事!

17樓:

因為你「摸不著」「看不到」,不像helloword馬上就回給你輸出,給你反饋。而演算法和資料結構正好相反是需要積累的,不能馬上反饋給你。

18樓:孤狐無悔

對於全棧程式設計師,或者說大部分面向使用者的程式設計師,「演算法」確實看起來並不重要。

因為大部分演算法,都已經開發好並被包含在庫中了,程式設計師只要呼叫即可。

當我學習演算法時,核心就是「查詢」「排序」和「搜尋」三項,而現在常用語言的基本庫就已經包含了查詢排序這兩類函式的實現,完全不需要自行實現演算法。「搜尋」類的演算法,如果不是解特定問題,基本也很難遇到。

再說資料結構。其實只要忽略效能,沒啥是陣列實現不了的。就算要考慮效能,常用資料結構也都在基本庫中有實現,程式設計師只要記住什麼情況用哪個即可,至不濟挨個試一次,也總能找出好用的那乙個。

但是即使對於這類程式設計師,資料結構和演算法也是需要掌握的。了解了各種資料結構和演算法的實現原理,就可以在使用時更加高效。

典型的例如資料庫,其內部是用樹加桶排序的,熟悉樹排序和桶排序,在加上一些其他資料庫基礎知識,就可以在建索引時進行優化,使得查詢和交易耗時減少。

如果到需要實現演算法,甚至要研發演算法的程度,也就是所謂的「演算法工程師」職位,這對大多數普通程式設計師來說是很困難的,也是大多數普通程式設計師不會接觸到的。

但是千萬不要因此輕視了資料結構和演算法,即使是普通程式設計師,說不定什麼時候,就會在什麼地方要用到。掌握了基礎知識,目的就是「有備無患」。

40歲的我,沒有存款只有負債,也沒有感覺到壓力大,是我病了?

清風徐來 我覺得你心態挺好的,我每天都愁的睡不著,而且我一開始都不知道徵信有那麼重要,我是後來才知道原來徵信影響那麼大,找人幫忙想恢復徵信的時候發現這個根本就沒有辦法去修復,愁的我皺紋都增加了好多,真的好迷茫啊。 壹先生 我覺得您可以開班了,傳授心得。別說40歲了,30歲的人,有多少有存款的壓力大的...

有沒有感覺到刷知乎,事業心增強的同時,自己變得更自私了?

Vader 開心點小兄弟。你以為知乎er們整天仁義道德就是好人了,其實不過是一群披著仁義外衣的精緻利己主義者而已。前幾天那個女童眼部得病的事,數知乎上說的最真,不知道的還以為他們有調查,反轉之後也是數知乎上罵的最兇。那些高喊始作俑者吃人血饅頭,何嘗不是也在吃?你以為他們是區別於貼吧微博的高素質網民?...

胎兒20周了我都還沒有感覺到胎動,這是什麼原因呢?

Blake福 而懷第二胎以上的媽媽,則可能因為曾經懷過孕,子宮的彈性和空間變寬,胎兒可以活動的範圍變大,所以通常懷孕到第十六周開始就可以感覺到胎動,到了懷孕第三十六週時,因為胎兒太大了,子宮內可以活動的空間縮小,胎動也會變得比以前少。胎兒和媽媽之間的連繫非常緊密,很多胎兒動得比較多的時候,媽媽通常就...