數據結構學好了會對前端開發有什麼幫助?

今天和同事聊到這個話題,他也表示不知道。

我和他都是前端開發。他是學數學出身的,我是學電影出身的,完全是因為興趣愛好進入了IT行業。我們並沒有受過良好的計算機科學的高等教育。

所以現在各自規划了路線正在自學。

我現在正在學數據結構和演算法以及C語言,我感到很有趣。

但是其中畢竟有迷惑,因為這些東西似乎離我的工作所需有些距離。

所以我想請教知乎的前輩們:

1.數據結構學好了對前端開發有什麼幫助呢?

2.那麼對於我這樣的新人來說,各位前輩是否可以給我一些學習路線的建議呢?


以全端工程師為目標的我來看,數據結構不管怎樣都用得到,你做一個對象一個組件一組數據,最起碼要考慮怎樣設計才最合適時間空間最優,這些都要數據結構知識!

不懂數據結構怎麼可以!!!

話說,我面試開發者的時候,問了一些最基礎的數據結構問題,能答上來的寥寥無幾的時候,我都感到很崩潰 QAQ


關於數據結構我在這個回答下面 數據結構學好了會對前端開發有什麼幫助? - 何靖豪的回答 已經和答主討論過了,希望大家可以先看看這個回答和評論內容。

之後我再提供幾個數據結構很容易通過搜索得到的官方定義:

https://zh.wikipedia.org/zh-cn/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84

數據結構_百度百科

之後希望大家在閱讀下面得答案之前先對這個概念有個簡單的認識,在帶入到我下面舉得例子中,之後我也希望更多學習過數據結構的前輩們,能夠把實際工作中對數據結構應用到編程里的一些實際例子舉一下。這樣可能更對大家有幫助。

通過這個問題,我學到了不少東西,感謝大家!

相關問題也可以參考這個 如何將數據結構和演算法應用到實際之中? - 編程

裡面一些例子舉得都挺好,比較淺顯易懂。前端也有用到比如自己設計一些與後端獨特的協議,遇到一些問題知道Stack,Queue,Tree一類的東西的概念和功效,而解決更具象的需求。

還是那句話,我其實挺反感的,為什麼非要把自己限定為前端開發程序員。。我也承認數據結構我沒有系統的學習過一遍,下面得答案得自我工作幾年來的經驗,如果有誤導先說對不起啦,等我系統學完後,再回來update。

除了第一個例子,後面下文的其他例子和數據結構沒關係,如果你真的認真讀了,我應該文中也強調了,那是比較基礎的數學知識應用。。

-------------

我說個實際的例子,我們需要在不同終端展示不同的樣式,所以我們需要做到數據和展現形式的分離,這算常見得一種需求了。

就拿前端而說,用戶通過某種手段(比如前端的富文本編輯器)錄入信息,我們簡稱元數據。

這個時候,我們如何保存這些數據呢,我們可以直接存成html,再加上一些class之類得,看起來挺完美的,那麼我們最終獲得的展示效果其實也就是只有一種。

還有一種解決方法,前端把用戶錄入的元數據保存成一種非html的數據結構,比如json,或者xml或者隨便你編個什麼結構。

之後我們通過不同終端,對這個數據結構做不同的顯示處理,是不是更好。

那麼我們怎麼設計這個數據結構呢,類似htmlToJson這麼一個函數(或者說htmlStringToJsonData),如何實現,這個json是什麼結構,如何對html字元解析,html是樹形結構吧,有子父關係,轉換成json格式怎麼轉快,怎麼取快,更方便?

prolificinteractive/node-html-to-json · GitHub

你之前學的這個數據結構就派上用場了。

不知道你懂了沒。。

數學幾何的話,其實也經常會遇到,前端方面做業務,見過截圖的插件吧?我們平時截圖都是截取一個正方形或者長方形,取x,y,w,h就行了,那麼現在產品一拍腦袋,我要做個三角形的,我要做個圓的截圖!

是不是,你得回去看看高中課本了呢- -。

還有在css3里的transform的matrix,雖然不是什麼複雜的玩意,但是這些東西你沒點數學能力也看不懂吧。。

或者今天運營來了,讓你在活動頁面做個小迷宮遊戲,地圖生成怎麼做?

說白了,我記得之前有一個很好的回答,忘記出處了,未來的趨勢就是,所有的語言和程序最終未來都得在web上來一遍,我覺得這個時代馬上就來了,那些偽前端如果不好好學學,努力成為一個真正的程序員,下崗是早晚的事兒了。

最近在讀遊戲開發物理學 (豆瓣),又買回了大學的課本。雖然我也不知道能不能學完。。。

這只是一部分,我買了14本全套的高數和計算機基礎課本,慢慢啃唄。那些年丟的東西,早晚你得撿回來,不是今天,就是明天。一起加油。(我大學是學美術的,大家應該都知道了吧……)


你首先得知道如何計算時間複雜度吧。知道了之後再看看自己的前端業務邏輯都是什麼複雜度的,如果是O(n2)看看有沒有辦法搞到O(n),O(n)能不能搞到O(logn),能不能搞到O(1)。不能也別花太長時間糾結(下面有個例子可以看看),但是如果你是複雜度是O(n^3),O(2^n)這種變態複雜度,還一定要花時間搞一搞。數據結構可以看看有哪些邏輯結構,比如線性表,樹,圖,他們都是用來處理什麼業務場景的。

話說有時候不止是演算法,你寫的習慣不好也很影響性能,比如

for(let i=0;i&

let len = document.getElementsByTagName(div).length;
for(let i=0;i&

最後說一句,很多東西沒你想像的那麼難,都是入門簡單深入難,重不重要你入了門之後不就知道了。有些說著這非常重要那非常重要的一般都是沒學好的,人類天生都對未知而感到敬畏。


你是說技術層面的底層數據結構,還是演算法層面的數據邏輯結構?前者主要涉及效率優化,後者的話,我只能說數據結構是業務邏輯的另一個觀察角度


人家說的是數據結構,你們說的都是數學,數學和數據結構是兩回事

請看看數據結構相關書籍

json數據,xml結構這些這麼簡單的東西根本不需要學數據結構,它們和數據結構裡面說的完全是兩碼事

用處會有,但是目前在中國公司的需要情況,用處目前來說可能有0.1%,除非你學node.js,但node.js實際也算不上前端工作

不過它能有助於你理解其他員工的工作,還有和他們的交流,除此之外,並沒有看到在前端的其他太大用處


我大學期間學的是針對考研的C語言數據結構,很多排序演算法;

畢業之後做前端開發三年了,可能我做的前端比較初級吧,到目前為止,我還從未在前端工作中用到數據結構的任何知識;


該怎麼說呢,數據結構和演算法是一個碼農的內功,畢竟不可能以後只寫前端。

一個在這方面基礎好的coder寫出來的東西是幹練而整潔的,看他的代碼會有賞心悅目的感覺,甚至你會驚訝於他對某些細節的巧妙處理。


數據結構對SDE重要麼?

需要回答么?


很多前端人員是平面設計師轉型的,很多對基本的編程思維都不懂


分享一個朋友遇到用到數據結構/演算法的例子吧。

當時的需求是這樣的,有若干張固定高度的圖片,寬度不固定,要求顯示多行圖片,且儘可能使得把網頁寬度佔滿。

這不就是一個背包問題嗎,於是很愉快地解決了。


感覺是你和伺服器的開發者溝通起來比較方便


沒做過前段,反正我鄙視哪些不懂數據結構的程序員。


讓你寫個樹形菜單,你至少也得知道怎麼遍歷一棵樹吧,哈哈


互聯網產業的工作就是讓信息更加有效的流動,從而創造價值

我覺得,不能簡單的去考慮數據結構對前端開發有什麼短期的好處而決定是否要去學。

很多半途出家的開發者,跟相關專業出身的開發者的最大區別就是因為基礎差而潛力不夠,導致在處理一些相對複雜的項目的時候不得其法,也沒法做大項目。

基礎就是房子的地基,如果沒有夯實了,就沒法建高層建築:地基不穩肯定會倒塌。

對於計算機軟體來說,最基礎的幾個東西,我認為是線性代數、離散數學、操作系統、編譯原理、數據結構、軟體工程、演算法,整個軟體開發都是以這幾門課程為基礎上搭建的。

前面四個決定了你對於整個計算機系統的基本運作,對於軟體的運行原理有多麼深刻的了解,了解了這些你學習其他的東西才會更加有效率。

後面三個影響了你的代碼質量、開發效率能達到什麼程度。

雖然說數據結構後端開發的接觸頻率更高(數據持久化),但如果前端開發者完全不理解後端的數據組織和使用原則,肯定會造成一些溝通困難。


推薦閱讀:

你為什麼從文思海輝(pactera)離職?
Windows 8 系統盤下的 hiberfil.sys、pagefile.sys 和 swapfile.sys 是什麼文件?
minecraft story mode (我的世界故事模式)承包給TTG是微軟的一個重大戰略失誤嗎?
區塊鏈有很多腦洞大開的應用場景,哪些已經應用,哪些是有希望在未來實現的?有沒有相關行業的人來講解一下?

TAG:前端開發 | 信息技術IT | 數據結構 | 自學編程 |