Google工程師:如何看待程序員普遍缺乏數據結構和算法知識?

出處:極客時間《數據結構與算法之美》

很多技術人都很迷茫,覺得自己做的項目沒有技術含量,成天就是賣苦力。技術的東西,日新月異,有些人總在忙于追求熱點新技術,東學學、西學學,平時泛泛地看技術書籍、技術文章,但始終根本抓不住技術的本質,干了三五年之后,感覺并沒有積累到什么東西,跟剛畢業的大學生能力差不多,因此深深的感到焦慮。

實際上,本質的原因,還是我們沒有掌握到,做為程序員,我們該積累什么東西?是各種知識、技術本身嗎?我覺得不是,我覺得最應該積累的是“能力”。

能力就像是內功,而知識就像是招式。知識會過時,而能力永遠都不會過時。初級程序員才比招式,高級程序員只看內功。

對于一個程序員來說,如何修煉內功呢?首要是打好基本功,比如掌握操作系統、編譯原理、數據庫理論等,但最基礎的應該就是扎實的掌握數據結構和算法了。

不過,雖然道理都懂,但你可能還是會有很多困惑,比如下面這些:

  • 總感覺數據結構和算法是“屠龍技”、“虛招式”,除了面試,工作中根本用不著;
  • 不懂算法,只要編程語言API、開發框架用得熟練,代碼照樣寫得“飛”起來。

實際上,如果你做的只是簡單的業務邏輯翻譯工作,開發的系統沒有性能壓力,那你確實只需要掌握API、框架用法就足夠,但是,你真的就甘心做一個天花板很低的CRUD碼農嗎?

如果你開發的業務比較復雜,你就需要設計復雜的架構來應對,進而就要用到各種復雜的技術、中間件、框架。要想更好地用好這些東西,你就需要了解它們的底層原理。而為了保證性能、擴展性等,它們底層使用了大量的數據結構和算法,比如我們常用Redis的有序集合來實現排行榜功能,但你知道它底層是依賴什么數據結構和算法嗎?為什么要用跳表和散列表兩種數據結構來構建索引呢?扎實的數據結構和算法功底,可以幫助你快速的讀懂源碼,更加從本質上理解它的設計原理。

如果你開發系統有很高的性能壓力,那一個簡單的數據存儲結構的選擇問題(比如是用數組來還是鏈表),就可能會產生成千上萬倍的性能差別。這個時候,數據結構和算法的價值就完全凸顯出來了。而且,即便你是用編程語言提供的現成的類來開發,但如果你不知道這些類庫背后的原理,不懂得時間、空間復雜度分析,那你又如何有信心能用好、用對它們?你又該如何評估代碼的性能和資源的消耗?

不過,你可能會說,我是一個有追求的程序員,我知道數據結構和算法很重要,但是,國外有這么多經典的數據結構和算法書籍、視頻、動畫,為啥要花錢來學習這個專欄呢?

盡管有很多書籍講的通俗易懂,也有很多書籍全面、經典,但是大部分都偏理論,書中的例子也大多脫離真實的軟件開發。看完書之后,很多人只是死記硬背了一些知識點而已。這樣填鴨式的學習,對于鍛煉思維、開拓眼界并沒有太多作用。而且,從基礎理論到應用實踐,有一個非常大的鴻溝要跨越,這是大學教育的普遍不足之處,這也是為什么我們常常覺得大學里學過的很多知識都沒用。

所以,我并非只是單純地把某個知識點講清楚,而是結合我的理解、實踐和經驗來講解,力爭成為一個跟所有國內、國外經典書籍都不一樣的專欄,一個可以長期影響一些人的專欄。

我的專欄最大特色就是,列舉大量實際軟件開發中的場景,給你展示如何利用數據結構和算法解決真實的問題。我掰著指頭數了下,整個專欄會涵蓋100多個算法真實項目場景案例。我還手繪了一些清晰易懂的詳解圖(總共有300多張),讓晦澀難懂的算法變得輕松有趣。

\"\"

手繪圖—出自《數據結構與算法之美》

現在,專欄已經更新完畢,72篇文章27萬字,這期間也陸陸續續有 48000+ 程序員加入學習,是極客時間訂閱量最好、好評最多的專欄之一。很多讀者對我評價都很高,覺得我真的不只是技術好、邏輯性強,還很會講,能夠點出技術的本質、算法的本質,娓娓道來,聽得十分過癮。很多學員都跟追劇一樣,每天早上第一件事就是看我的更新。說實話,我自己都沒想到會這么受歡迎。

留言區贊美的話太多了,現在我截取很少的一部分,展示給你。如果你感興趣,可以試讀一下專欄中“結束語 | 送君千里,終須一別”那篇文章,里面的留言足以看出讀者對我的無比認可!

\"\"

我是誰?

王爭,前Google工程師,之前從事谷歌翻譯相關的開發工作。在業余時間,持續研究數據結構和算法,幾乎讀過所有的數據結構和算法書籍,切過上千道算法題目。除此之外,我一直沒有脫離一線編程工作,所以有大量的數據結構和算法的實戰經驗,希望我的專欄能開啟你算法學習之門。

你能獲得什么?

1.掌握常用的數據結構與算法的由來、原理、實現、特點
不僅讓你搞懂每種數據結構和算法的原理和實現,還讓你知道,他們的歷史背景和由來。真正弄明白我們為什么需要這個數據結構和算法,它是為了解決什么樣的問題才被創造出來的。掌握每個數據結構和算法的本質,也就能掌握創新的源頭。

2.鍛煉邏輯思維、算法思維,提高編碼質量、編程能力
邏輯思維,對于一個程序員來說是非常重要的,而算法思維,對于寫出高性能的代碼也是非常關鍵的。專欄不僅僅是數據結構和算法知識的一種填鴨式的灌輸,更加側重于對你邏輯思維、算法思維的訓練。通過72篇文章,跟隨著我的邏輯講解,潛移默化地提高你的邏輯思維、算法思維。

3.教會你如何將算法應用于實戰,如何在實戰中應用算法
我在講解每種數據結構和算法的時候,都會配合一到兩個真實軟件開發中的問題來講解,同時還會配合一到兩個非常考驗你思維的課后思考題,加深你的理解。除此之外,我還通過幾個大的實戰項目,完整的給你展示了,在一個大項目中,如何利用數據結構和算法,來解決問題,提升性能。

可以點擊《數據結構與算法之美》試看專欄內容,下面是專欄目錄:

\"\"

戳我試讀或訂閱

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275445.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275445.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275445.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android guide 中文版,Sky Guide

Sky Guide是一款能讓小伙伴們觀察銀河的手機軟件,尤其是喜歡行星、星座的小伙伴們來講,這款軟件能很好的幫助小伙伴們觀看這些,讓小伙伴們體驗不一樣的觀星樂趣,因此想要觀看的小伙伴們,趕緊來試試吧。軟件介紹&#x…

Kinect for Windows SDK發布

轉載請注明出處為KlayGE游戲引擎,本文地址為http://www.klayge.org/2011/06/17/kinect-for-windows-sdk%e5%8f%91%e5%b8%83/ 前一段時間Microsoft研究院宣布了Kinect for Windows SDK。在眾人的期盼下,Kinect for Windows SDK Beta終于發布了&#xff01…

layui選項卡嵌套選項卡_在ProtoPie中使用嵌套組件構建選項卡欄

layui選項卡嵌套選項卡One of the powerful features of ProtoPie is the ability to build fully portable and interactive UI components. We are going to make use of nested components, SVG icons, and layout constraints to build a tab bar UI component that is sel…

50行代碼串行Promise,koa洋蔥模型原來這么有趣?

1. 前言大家好,我是若川,最近組織了源碼共讀活動《1個月,200人,一起讀了4周源碼》,感興趣的可以加我微信 ruochuan12 參與,長期交流學習。之前寫的《學習源碼整體架構系列》 包含jQuery、underscore、lodas…

如何定位死循環或高CPU使用率(linux)

如何定位死循環或高CPU使用率(linux) 確定是CPU過高 使用top觀察是否存在CPU使用率過高現象 找出線程 對CPU使用率過高的進程的所有線程進行排序 ps H -e -o pid,tid,pcpu,cmd --sortpcpu |grep xxx 得到如下結果,其中線程2909使用了7.8%的CPU. 2907 2913 0.0 ./xxx 2907…

js 用迭代器模式優雅的處理遞歸問題

2019獨角獸企業重金招聘Python工程師標準>>> 什么是迭代器 循環數組或對象內每一項值,在 js 里原生已經提供了一個迭代器。 var arr [1, 2, 3] arr.forEach(function (item) {console.log(item) })實現一個迭代器 var iterator function (arr, cb) {fo…

如何抓取html請求,請求獲取網頁的response,獲取網頁的html 怎么那么慢

HttpEntity multipart builder.build();httppost.setEntity(multipart);long start System.currentTimeMillis();// 發送請求response httpclient.execute(httppost);long end System.currentTimeMillis();System.out.println("查詢upsfreight消耗的時間是(毫秒):&quo…

Serverless 究竟是什么?

大家好,我是若川。說起 Serverless,我想你應該并不陌生,作為一種云開發的架構模式,在近兩年里,伴隨著云原生概念的推廣愈發火爆。作為一名 Serverless 的擁躉,在跟大家推薦的過程中,我經常能看到…

instagram.apk_評論:Instagram Reels vs.TikTok

instagram.apkWith all the attention to the newly debuted Instagram Reels from Facebook and the hilarious, bizarre world of TikTok, here’s a first impression on the two platforms and how they compare from a designer’s perspective.所有人都在關注Facebook新近…

240多個jQuery常用到的插件

概述 jQuery 是繼 prototype 之后又一個優秀的 Javascript 框架。其宗旨是—寫更少的代碼,做更多的事情。它是輕量級的 js 庫(壓縮后只有21k) ,這是其它的 js 庫所不及的,它兼容 CSS3,還兼容各種瀏覽器(IE 6.0, FF 1.5, Safari 2.…

華為首款鴻蒙設備正式入網,華為首款鴻蒙設備正式入網:麒麟9000+挖孔全面屏,價格感人!...

作為國內電子產品領域的巨頭之一,華為這兩年的快速發展是大眾有目共睹的,除了手機業務外,華為的平板業務同樣有亮眼表現,無獨有偶,在近期各方媒體的不斷披露之下,又有一款華為平板被基本確認,這…

早上讀英語

#早上讀英語# Keep your eyes on the stars and your feet on the ground. 轉載于:https://www.cnblogs.com/da3j/p/10646531.html

myeclipse深色模式_完善深色模式的調色板

myeclipse深色模式Apps largely have a limited color palette which may already map well to dark mode. However, some colors produce optical vibrations when viewed on a dark background, straining the user’s eyes. So, certain apps need to map to a slightly des…

微軟悄悄發布了 Web 版的 VsCode

大家好,我是若川,最近組織了源碼共讀活動《1個月,200人,一起讀了4周源碼》,感興趣的可以加我微信 ruochuan12 參與,長期交流學習。在8月31日,微軟發了一個介紹他們新發布的功能的帖子介紹&#…

html中樣式表的三種形式,CSS樣式表有幾種存在方式

外部樣式:將網頁鏈接到外部樣式表。內頁樣式:在網頁上創建嵌入的樣式表。行內標簽樣式:應用內嵌樣式到各個網頁元素標簽內。每一種方法均有其優缺點:當要在站點上所有或部份的網頁上一致地應用相同樣式時,可使用外部樣…

figma設計_設計原型的最簡單方法:Figma速成課程

figma設計It doesn’t matter if you haven’t used any prototyping tools before or you’re transitioning from other ones (like Sketch, Adobe XD); This guide is for beginners and professionals alike. So for a university assignment, I had to prepare a presenta…

《大話數據結構》讀后總結(九)

線性表 順序存儲結構的插入與刪除 獲得元素操作 #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status; /* Status是函數的類型,其值是函數結果狀態代碼,如OK等 */ /* 初始條件:順序線性表L已存在,1≤…

關于router name 的url重寫 --frontname rewrite frontname重寫!

對于tag 也就是在url中有tag的url&#xff0c;希望改成wholesale等其他方式&#xff0c; 1 參看blog插件方式&#xff1a; 在etc/config.xml中添加事件&#xff1a; <events> <sitemap_add_xml_block_to_the_end> <observers> …

初中級工程師如何快速成長和尋求突破

大家好&#xff0c;我是若川&#xff0c;最近組織了源碼共讀活動《1個月&#xff0c;200人&#xff0c;一起讀了4周源碼》&#xff0c;已經有超50人提交了筆記&#xff0c;群里已經有超1200人&#xff0c;感興趣的可以加我微信 ruochuan12 參與。前言寫這篇文章的初衷是因為看到…

ajax使用html()后樣式無效,jquery.ajax使用字符串拼接后內聯css樣式失效

問題所在:是這樣的,我使用ajax調用了一串json數據,使用字符串拼接的方法動態插入div容器.結果css并沒有對動態插入的內容加css樣式.代碼描述:css使用的內聯,在head部分, jquery使用外聯,在body后.我嘗試過:$(function(){}) //入口函數加載window.onload function(){} //原生do…