不想通這些道理,只能一輩子做低階碼農(一)——學演算法有什麼用
“演算法都是封裝好的,學了有什麼用?”,這是幾年前一個試用期員工問我的問題。
他有一年工作經驗,基礎一般跟過幾個專案,屬於可以幹活的人。來了以後就問我,要快速提升應該學什麼。面試的時候覺得他演算法功底不太好,就推薦他把演算法好好學一學。結果他反問:“演算法都是封裝好的,學了有什麼用?”。
一直認為演算法是程式設計的基礎,學好演算法是毫無疑問的事情。就好像學寫字就要把橫豎撇捺學好一樣,但被人問起來,發現自己確實沒有好好思考過這個問題。
還沒過試用期,他就自己離職了。他說想做底層開發,而我分配給他的任務都是簡單的應用邏輯,覺得沒成長。
1級的玩家技術好可以打2級的怪,但要打100級的Boss恐怕會死得很慘。沒有哪個公司會冒這樣的風險讓演算法都不懂的新人開發底層模組。
故事講完了,那麼學演算法到底有什麼用呢?除了演算法,其實我還被問過:
我不寫編譯器,學編譯原理有什麼用?
我不做計算機,學計算機組成原理有什麼用?
我不寫作業系統,學作業系統有什麼用?
總結來說就是:基礎知識(原理),工作中用不上,學了是不是浪費時間?
磨刀到底誤不誤砍柴工?這個問題其實很難講清楚,但我還是嘗試講幾點。
1. 知識的普適性
所謂普適性,或者說通用性,是指一項知識到了其他領域是否適用。
我們學了加減乘除,物理能用上,化學能用上,生物也能用上,所以加減乘除具有很強的普適性。
學美術的同學,與其學“手的100種畫法”,不如研究一下解剖和骨骼結構,因為掌握了這個可以隨意畫1000種手,所以手的100種畫法這個知識不具有普適性,但骨骼結構有。
學程式設計的同學,學各種時髦技術,各種框架API,流行技術框架每幾年換一次,就得重新學,那之前學的到底是有用還是沒用呢?這些知識具有普適性嗎?
基礎知識和原理,雖然很少會直接用到,但它們有強大的普適性,無論做哪個領域的開發歸根結底都繞不開那些基礎。
2. 成熟的、可借鑑的方案
很少有人能從0到1發明新的東西,所謂的創新通常是站在巨人的肩膀上,從1到1.1做了一些改進。我們寫的程式碼、解決問題的方案有多少是自己發明的?
基礎知識和原理,包含了大量經典問題的解決方案和思維框架,越是做底層開發,越是能理解這一點。資源管理、記憶體管理、執行緒排程,不學一學作業系統能玩得轉這些開發?靠自己的腦子可以想得出完善的方案?
3. 解決疑難問題
面試過幾個號稱主程的,用xxxx庫為公司搭建了網路框架,認為自己精通網路開發。問他如何處理粘包問題,他:“什麼粘包”。我想他們公司的專案可能活不過半年吧。
但凡要做一些基礎架構,不懂基礎知識將是致命傷。使用開源庫可以幫你快速完成工作,但若是出現開源庫未涉及的內容、或對庫理解不足導致出現bug,而程式設計師又不懂基礎原理,那就只能蒙圈了。
4. 造輪子
程式設計師都知道不要重複造輪子,使用穩定的庫肯定是比自己擼程式碼來得高效安全。越是低階程式設計師越不需要造輪子,他們大多寫應用層邏輯,各種庫拿來用就行了。
當你級別越高,越是需要造輪子。公司需要積累自己的核心技術、別人的輪子不適用與自己專案的場景等等各種原因,你總是需要自己造輪子或改別人的輪子。你不懂基礎知識和原理造不了輪子?那公司找高手來造輪子,你去寫簡單的邏輯,當低階碼農就好了。
----------
如果覺得對你有幫助,請用力點贊
個人公眾號:ACM演算法日常
專注於基礎演算法的研究工作,深入解析ACM演算法題,五分鐘閱讀,輕鬆理解每一行原始碼。內容涉及演算法、C/C++、機器學習等。
相關推薦
不想通這些道理,只能一輩子做低階碼農(一)——學演算法有什麼用
“演算法都是封裝好的,學了有什麼用?”,這是幾年前一個試用期員工問我的問題。 他有一年工作經驗,基礎一般跟過幾個專案,屬於可以幹活的人。來了以後就問我,要快速提升應該學什麼。面試的時候覺得他演算法功底不太好,就推薦他把演算法好好學一學。結果他反問:“演算法都是封裝好的,
sqlserver安裝後不管理器不能用IP登入,只能用機器名登入的問題
電腦作業系統是Win7中文版,新裝的英文版SQL Server2014,純預設安裝,沒有做任何改動。 裝完SQL Server 2014之後,發現只能用預設的機器名來登入: 用127.0.0.1登入會出現錯誤 第一步,開啟TCP/IP。因為裝完SQL之後這項協議預設是不開
EF的連線字串,不想用config中,想寫到程式碼裡,總是報錯不支援的關鍵字 data source
用WPF寫一個小東西,EF連線資料庫的字串是寫在app.config裡的,明文。網上找了很久,倒是有加解密的文章。我覺得太複雜了。 事實上只要不顯示明文就行了。 修改了EF的建構函式,在程式碼裡對connectStrings賦值。明明是複製的原來工作正常的app.config中的connectstring
如果你不想走管理路線,程式設計師職涯要如何成長?
在你的一生中,持續待在軟體工程師這個職位是一個好的職涯選擇嗎?或是你必須轉換到管理職位以繼續攀登工程生涯的階梯?這就是最近在 Quora 上工程師想知道的事,並且這是一個重要的且值得解決的問題。特別是那些對於管理群眾不會感到興奮的人。 好訊息是持續擔任軟體工程師的職位並且不用選擇管理這個職位是一個很好的職涯
C# 除錯技巧 跳過不想除錯的程式碼,(執行但不除錯)
當你使用F11進行dubug工作時,經常會進入到一些不想進入的property或method內部。比如有下面的程式碼: public string Word { get ; set ; } 並且你
阿里碼農:不想帶團隊了,幾個月才寫幾十行程式碼!網友:碼農思維
做為一名程式設計師,大多數都有著自己的規劃,比如幾年之後由一線碼農能晉升到技術管理者的職位,或者所能成為一名架構師等,這也是最普遍的兩種規劃吧,可是有沒有人仔細想過,成為技術管理者後,與以前的工作有沒有什麼變化,自己需要做一些哪些行動上的改變,或者在思維上需要有哪些變化,怎麼才能成為一名優秀的技術管
關於“鎖”的問題,專案比較大的情況下不能直接隨便的加樂觀鎖,不想麻煩改資料庫,不想用lock排隊等
private static Dictionary<int, object> lockObj = new Dictionary<int, object>(); private object getObj(int bedId)
如果你不想走管理路線,程式設計師職涯要如何成長? 原
在你的一生中,持續待在軟體工程師這個職位是一個好的職涯選擇嗎?或是你必須轉換到管理職位以繼續攀登工程生涯的階梯?這就是最近在 Quora 上工程師想知道的事,並且這是一個重要的且值得解決的問題。特別是那些對於管理群眾不會感到興奮的人。 好訊息是持續擔任軟體工程師的職位並且不用選擇管理這個
m檔案不能雙擊開啟,只能從matlab裡面開啟-解決辦法
方法一(借鑑): cwd=pwd; cd([matlabroot '\mcr\toolbox\matlab\winfun\private']); fileassoc('add',{'.m','.mat','.fig','.p','.mdl',['.' mexext]});
科普 | 睡覺不想被手機打擾,開啟這個手機功能就能安心睡了
隨著生活節奏的加快,我們都把更多的時間投注在工作上,加班也成了常事。所以在結束一天忙碌的工作之後,最想做的事就是回家葛優躺睡個天昏地暗,尤其是週末,睡個安心覺是再幸福不過的了。但是睡覺的時候,又會因為資訊通知或者電話來訪被各種打擾,實在是不堪其憂。 其實,手機裡有幾
Ajax傳值丟失問題&&ajax傳值的時可能會多出不想要的符號,為何這樣呢,原因是賦值時候多了某些標點。。。
Ajax傳值丟失問題 部落格分類: Ajax Ajax傳值中斷 閱讀更多 使用Ajax傳送資料時,當資料中存在加號(+)、連線符(&)或者百分號(%)時,伺服器端接收資料時會丟失資料。分析Ajax傳送資料的格式與Javascrip
python中的a+模式下寫入不支援指定位置寫入,只能在最後累加
先使用a+的模式儲存在檔案中寫一段程式碼,並列印目前的指標位置:f = open('test.txt', 'a+', encoding='utf-8') f.write('123456789\n') f.write('987654321\n') # 得到f檔案現在的指標 p
不想花錢買書,我教你免費拿
關注我的朋友都知道,我每篇文章都會送電子書,所以,最近後臺聯絡我要書的人也比較多,因此我必須寫一篇文章關於如何免費閱讀好書。 一來是覺得授人以魚不如授人以漁,讓我的讀者都知道要去哪些渠道去獲取你想看的書。 二來也想減輕我的負擔,粉絲太多,我有些忙不過來,不能
如何理解 4G LTE 網路不能承載語音通話,只能提供資料服務?
這個問題要從移動核心網的角度來理解。我們平時說的WCDMA、TD-SCDMA、TD-LTE其實通常指空口技術,即從手機到基站的通訊技術。而行動通訊的核心控制部分,則由核心網完成——如何在兩個基站間建立起語音連線?何時給撥號方返回嘟嘟的線音?何時給接收方發出振鈴?如何判斷一個使用者是否開通了來電轉駁業務,如何
你,該成為怎樣的碼農?
targe 變化 認識 logs 格局 的人 操作 介紹 方向 【僅是草稿,各位看官勿噴!!!謝過~~~】 我是一名涉世不深的小IT,一名從上大學開始就在這行摸打滾爬,漫無目的,胡亂瞎搞的幻想者!寫這篇文章主要是為了警示自己,不忘初心、互勉! 其實我希望每位能看到這
Java架構師分享自己的技術體系,程序員如何從碼農到專家
https 都是 全面 height contain auto 線程 for analysis 一、源碼分析 源碼分析是一種臨界知識,掌握了這種臨界知識,能不變應萬變,源碼分析對於很多人來說很枯燥,生澀難懂。 源碼閱讀,我覺得最核心有三點:技術基礎+強烈的求知欲+耐心。 我
踐行無界零售,京東要做物流產業鏈的一股“青流”?
產業升級,物流行業邁入發展新階段 今時今日,物流行業已然成為支撐國民經濟和社會發展的基礎性、戰略性產業。隨著雲端計算、大資料、人工智慧等新技術的運用以及新型的業務模式、生態環境的變化,物流已經從連線生產端與銷售端的工具,逐漸脫變成為廠商和終端消費者、虛擬經濟與實體經濟之間的重要紐帶,在社會系統中發揮著不可
Java開發者不會這些永遠都只能是三流程序員,細數一下你是不是?
java 分布式 程序員 編程語言 面試 源碼系列 手寫spring mvc框架 基於Spring JDBC手寫ORM框架 實現自己的MyBatis Spring AOP實戰之源碼分析 Spring IOC高級特性應用分析 ORM框架底層實現原理剖析 手寫Spring MVC框架實現 手把
學了Python不想去給別人打工,那就做做這些事兒吧!
很多學習計算機開發的小夥伴自己學習了很久的語言開發,具有一定的開發功底,技術什麼的都不在話下,但是其中有相當大一部分的程式設計師小夥伴不想進公司給別人打工,不想每天束縛在公司規章制度的牢籠中,那就看看下面的文章吧,肯定對你有所幫助。 學習Python中有不明白推薦加入交流
男人不想打工一輩子,再忙也要讀這10本書,提高情商智商
作為一個男性,在社會總要承擔很多很多,來自於家庭,社會的壓力,常常讓人喘不過氣來,而作為家庭的主心骨,我們必須養家餬口,因為你不努力,沒人替你撐住這片天。 是啊,男人太累了,但是身為男人,累是不能抱怨的,因為這就是我們的責任,身為男人就要努力去拼搏,為自己為家人贏得一份幸福感,相信每一個真男人都有