作為一個低級碼農,該怎樣跳到一個演算法崗位?

或許我題目描述不是太準確,作為一個低級碼農,面對的都是增刪改查,已經一年多了,覺得已經膩了,而自己卻又是深愛這個職業才入行的。

我今年(去年?)22歲,18歲入社會,沒讀過大學。20歲的時候進了某xx培訓學校一年(未讀完,原本是兩年),21歲艱辛的入行。如今已經跳槽到一家公司一個半月了,6k。

目前一切都很好,老大也看重我。但是我卻清清楚楚的明白,這不是我想要的。我已經厭倦了增刪改查,這種工作沒有任何成就感,我不喜歡穩定,不想要人生過的沒意義(曾深入思考過這個問題)。

而且我也算是看透了,不跳出這個怪圈,大概我一直都不會快樂。那麼問題來了,作為一個沒學歷,經驗少,技術渣的人,我能找一份怎樣的工作?大概只有增刪改查了吧!

所以我決定用一年時間來跳出這個怪循環,幸好在目前的公司待的很舒服,有足夠空閑時間去努力。只是我的眼界始終是有局限性的,因此在方向上面,希望大家能給點指導性的建議,謝謝!

ps: 我從培訓機構中了解到有C#這麼一門語言,於是跟著微軟走到現在。當初沒搞java是因為我不知道java是什麼gui?我卻知道微軟是什麼。

現如今自己的瓶頸在於演算法和數學(英語也算吧,不過好歹能看懂些),但是方向上面還是迷茫,不過我潛意識裡始終覺得手機端不是我的方向,看到別人ios上萬我心裡一點羨慕都沒有,甚至都不會嫉妒。

是的,我嫉妒那些讀過大學的人。但不怨恨。


謝大家的熱情邀請……

作為一個在崗的90後本科學歷的演算法工程師,跟題主的年齡也相仿,簡單說一下我這一路走來的路程吧。

小學學了VB和C,拿到了微軟ATC和國家二級證書,事實證明這些證書都沒啥用。

初中自己折騰了一個網站,混了某個黑客論壇的版主玩,拿到了杭州市的計算機應用競賽一等獎,可以保送杭高,遂棄而參加中考,考入杭二中。

高中開始折騰信息學競賽,突然覺得身邊好多大牛,跟很多初中就開始搞競賽的比起來,我弱爆了。

高三有點孤注一擲的味道,仍去參加了比賽,結果寫在了這裡,就不想回味了:作為程序員,你在編程時吃了哪些數學的虧? - SimonS 的回答

大學仍不死心,參加ACM,最後拿到省賽金牌,亞洲賽regional銀牌,成績平平,未能加入大Google,只在12年的時候拿到阿里校招的演算法崗位Offer。

現在在一家創業公司做演算法,工作內容可以看這裡:Python 工程師在公司工作體驗如何? - SimonS 的回答

我認識的同學現在在搞演算法的,他們的資歷都不比我差,當然也有比我資歷好的去做後端開發的,這就完全看個人的發展意願了。

所以如果題主真想搞演算法,你覺得你要花多久的時間來追上比你早學5年甚至10年的人?

當然,只要肯學,都不會晚,1年和5年的經驗差距或許很大很大,但10年和15年的差距卻不那麼大。

=====================================================================

如果前面說的都沒打擊到你自信心反而讓你更堅定地選擇走演算法這條路,這是我給你的一個簡單的方向。

關於演算法的基礎學習:

程序員必須掌握哪些演算法? - SimonS 的回答

我在這裡寫的幾個演算法面試題,基礎紮實的話應該是秒答的:

互聯網公司最常見的面試演算法題有哪些? - SimonS 的回答

然後呢,你得跳出微軟的坑(求別艾特輪子哥),目前互聯網公司幾乎都是Linux的天下,好好學習C/C++(不太建議Java,有996的風險),可以考慮學習Python和Go,但不強求,看你自己需求。

再往後的路你就可以自己選了,數據挖掘、互聯網金融、機器視覺等等眾多領域都有很強的演算法需求,每個領域都有其對應的演算法體系,我在這層次還是個新手,就不展開了,萬變不離其宗的還是機器學習(Machine Learning)。

共勉。


挺難,要去演算法崗位先努力讀個相關專業碩士或博士吧。

當然你不想做增刪改查也不必去寫演算法么,搞好技術去大公司做點正經項目是跟切實的做法。


如果你」已經厭倦了增刪改查,這種工作沒有任何成就感「,有沒有想過寫個什麼工具程序把這個過程自動化了,於是你原來1天的工作量壓縮成了5分鐘然後連測試都省了,然後剩下的時間摳腳怎麼樣?

// 拿著這份經歷你出去給面試官講你自己怎麼琢磨出來的,他一定給你高薪。

剛才掃了一眼樓上的答案,說真的,企業應用坑還是挺大的,普通的增刪改查有很多變種,玩法還是挺花的,各種架構各種模式。如果要是不複雜,那你平時也不會忙啊,不忙肯定沒有成就感啊,還有啥好抱怨的。

順便多說兩句關於方向的事,別太糾結,悶頭干。技術沒什麼高低,問題是你要花時間和精力。涉獵廣也不錯,鑽研深也不錯。你說是越高級越牛逼還是越底層越牛逼?其實都很牛逼。就你現在能接觸到的東西,就有好多可以鑽研的:

.NET框架你懂多少?

VS你懂多少?(IDE)

你點一次編譯,VS都在幹啥?(Compiler)

C#的優缺點是什麼?(Programming Language)

你現在在用的框架你懂多少?

你用的資料庫你懂多少?(Database)

資料庫里的數據到底怎麼存怎麼取的?

操作系統你懂多少?(Operating System)

你提交一次代碼後台都發生了什麼?(Version Control)

退一萬步,你們公司的業務你懂多少?如果現在讓你創業搶了你老闆的生意你有信心嗎?

。。。

上述每一個領域都有改變世界的東西出現。

加油干吧,我堅信這個世界的未來是碼農的。


自己的經歷和題主的經歷比較類似,我猜樓主應該也是做企業應用的吧(沒有黑做企業應用的意思,我自己也深陷其中),也工作幾年了。我做的是Java,我也很厭倦只做一些增刪改查的操作,甚至寫的代碼都是Controller、Service、Dao這三層就完了,雖然都在說面向對象,但根本就沒有理解到它的精髓。我相信其實在中國有很大一部分軟體公司就是干這做事情的。除了我們能叫得上名字的一些公司或者是互聯網的一些公司(這應該只是少部分)他們做的確實不一樣更有挑戰性,那也是業務場景驅動的(本質上應該也是做增刪改查吧)。再說下自己這幾年的感受吧。:

1、重視基礎,很多東西也只是在基礎上演變而來的不會平空出現。可以通過一些經典的書籍學習(這也分全語言通用的,象你說的演算法。還有就是特定語言象你現在做的C#)

2、有意識的鍛煉自己的思維能力,拿一個簡單的功能來說做之前能不能想明白這個要怎麼做會遇到哪些坑,有沒有什麼解決的方法。做完了可以再復盤一下。我自己平時如果遇到某個比較麻煩的問題就喜歡下班路上想想,很多時候想的過程當中已經有偽代碼了。其實這一點真的很重要,這是你自己的一種無形的能力。我接觸的一些同事當中也發現一些人其實沒這個意識。(這種能力你不去大公司也可以鍛煉,但沒這意識去了大公司也鍛煉不起來)

3、以興趣驅動去學習,看你也是喜歡這個行業(應該是喜歡編程吧)才進入的。其實已經比大多數人領先很多了,很多人只是覺得這個行業看起來工作資高就進入了其實更本就談不上喜歡,每天就是上班、下班沒有一點激情。

4、多關注你所在領域的前輩或技術大牛(通過各種渠道blog、github),這些人經歷得多技術上肯定能給你一些啟發。

5、有時間和經歷可以多了解一些不同的編程語言(最好是和你已經會的語言差距比較大的,如:你用靜態編程語言那就去了解一門動態編程語言),不要對語言存有偏見,了解其他語言也是對自己的思維方式的一種擴展。了解他們適用和不適用的應用場景,而不是誰好誰不好。

6、彆氣餒,雖然可能我們還是只能做增刪改查的操作。但能幹著自己喜歡的事(雖然增刪改查不太好,但能編程已是極好的了,我自己是這樣認為的)已經很幸福了。每天看著這個技術那個技術的出現,解決了這樣那樣的問題。可能我自己也用不上,但心裡就他媽有一種莫名的興奮。哈哈

暫時就這些吧,可能都有點虛,希望能對你有所幫助吧。


刷成就吧

既然沒有科班的入場券,現在可能最好的辦法就是刷SO,leetcode之類的東西,至少還是有人看的。如果這步能完成我覺得至少可以脫離增刪改查。


說說演算法工程師都是幹些什麼工作吧,你看看這是否適合你與是你想要的並且可以勝任的工作:

1、看論文,多是英文的文獻,晦澀的英文會很多,需要有相當好的英文功底

2、實現演算法,論文中的涉及到的演算法需要實現,這個考察層面比較多,需要你不僅了解本學科的很多的知識,還需要對數據結構,演算法等有很深的了解,並且要有很強的演算法實現能力

3、改進演算法,或者創造新的演算法,這個毫無疑問很考驗的你的大學,研究生期間的基礎水平,工作業務中的能力等,真的是很需要聰明的孩子

4、寫論文,寫專利,這個主要看你的英文水平,而且考驗你的科研水平,這也就可以解釋了為什麼一般做這個的都是碩士博士了。

5、把演算法運用到實際的工作中去,使性能,效率,等等某方面帶來某種突破,當然有可能沒有任何的進展,這時候就重新從第一步開始閱讀新的論文,有突破了,還是從第一步開始閱讀更加先進的paper,或者創造更加先進高效的演算法

備註:以上每一步可能涉及到多個人工作,但是卻是涵蓋了演算法工程師的基本上的所有工作


才22歲,還年輕,不如讀書,大家都走過的坑,你不走,很難往上爬啊,進大公司更別想了。讀得一身頸椎病的人嫉妒你好身體,讀得一身優越感的人嫌棄你,so,不如讀書,先成為他們一樣的人。


我建議,首先你要先把本職工作做好,然後適當的和老大表示你的水平可以接受更高水準的工作,這樣的話可以在公司內部得到培養的機會。

你現在專門學演算法我個人覺得不太適合,原因在於:

1:演算法需要很強的數學基礎,

2:現在演算法崗對學歷要求也比較高

3:真正的演算法能力需要在實際項目中鍛煉,如果脫離項目,會變成刷題這種形式。


跟題主想法基本一致,做了五年的增刪改查,太沒意思了,準備轉行演算法從零開始。

我的做法:1,想辦法在工作中接觸這方面的項目,先有個入門了解,知道自己差多遠

2,本人三本學渣,需要光鮮的簡歷,去年考了清華的在職研究生,一定要好好跟著學。

3,複習基礎,演算法,數學,總結項目經驗

4,有目標的話認準目標堅持一定會好的,共勉

最近準備過完年離職在家複習,目標阿里演算法工程師,還在準備階段

還是不匿了,沒啥擔心的


即將畢業的程序員一枚。

贊同上面所說的:可以自己寫工具來自動化生成。軟體不就是來做重複性的人不願意做的工作的嘛。

自己暑期實習,做的是j2ee。做到第三個功能就受不了了,在寫sql語句配置文件的時候,表中欄位太多,不想一個個去敲。就寫了一個小程序來自動從資料庫取出欄位名,填上表名,一下全生成了,爽。

java代碼功能相似的話,也可以把java代碼也自動生成。再然後呢,好吧,我是print輸出,複製粘貼的,我們可以配置一下文件路徑,直接寫在文件里。

最後呢,可以寫個配置面板,表名,路徑,文件名等,來個複選框,都要什麼功能隨便勾,確定,搞定。

任務完成,看點自己喜歡的,逛個論壇什麼的。坐等下班啦。

當然,在這個過程中,肯定會出很多bug,但是,每一次都會讓自己的工具更完善的。然後,可以拿給你們團隊用,提高整個團隊的效率,畢竟時間就是金錢啊。然後,老闆:」小王啊,乾的不錯,我們最近有個新項目,就由你負責吧「。然後就升職加薪迎娶白富美當上CEO了。啪啪,醒醒了


和題主差不多,畢業來公司快半年。

工作的話說的好聽是做數據處理,實際也就是增刪改查吧,儘管很枯燥,但是確實可以把基礎練紮實。

我也是學C#的,平時工作沒事也會自己寫寫小東西,刷leetcode之類的,還會看看python。這樣至少不會覺得工作就是刷熟練度,畢竟增刪改查是比較無聊,但是又離不開這幾樣。既然題主喜歡編程,認為還是在打牢基礎之餘,多找自己感興趣的技術學學。

上個月買了本《CLR via C#》(厚的不行),雖然看的比較緩慢,不多還是會堅持看下去的,也推薦給題主。

另外畢竟都還年輕,不用這麼急躁吧。

共勉之。


做演算法門檻很高,即使是上過大學的人也很少做演算法的。我同意樓上說的「考慮向底層走走」。你不願意做增刪改查是因為這樣的工作沒有成就感,我認為你可以考慮一下後台方面的工作。你說羨慕上過大學的人,你看我軟體工程專業大三,我們與計算機關係最密切的幾門課是演算法,計算機網路,數據結構,操作系統,C,C++,這些就是後台工作的基礎,你需要熟悉這些知識但並不必把他們做到非常專業。而你厭倦增刪改查,說做這樣的工作沒有成就感,說白了是因為這種工作沒什麼技術含量,而做後台是比較有技術含量的,因為它涉及的東西比較多,當你利用你豐富的知識解決工作中的問題的時候,你的成就感自然就來了。


先看一些演算法相關的書,找找感覺

看清楚理想和現實之間的距離再做打算


就是拓寬知識增加競爭力唄?不一定局限於演算法。要不往底層走走?


為什麼要盯著演算法崗,這個沒個碩博文憑沒戲,非演算法專精的碩博也沒戲。


不建議搞演算法,本人雖然大三,但是大二搞了一年的項目(java方向的),確實,正如樓主所說,單純的增刪改查確實很乏味。但是,哪怕在乏味的,都有樓主應該值得探究的,比如資料庫設計方向,樓主想過如何去設計更精彩的數據關係嗎?還有目前開發的過程中,大部分在使用框架嘛,樓主想過,不同框架之間的優劣嗎?以及自己如何去設計一個好的框架的想法過嗎(哪怕不會設計,你也可以學設計思想呀。)?所以,如果,樓主只看到了應用層只是增刪改查的話,那就說明樓主的計算機體系結構,根本就很不完整,建議平時去慢慢的去完善自己的It體系結構,很多底層的東西都是非常有用的。 那至於為什麼不建議你搞演算法是因為,演算法聽起來很高大上,但是特別磨時間,難度也很大(至少我的數學一直都算好的)。我從大一開始一直磨到現在,依然沒什麼效果。只能說是一個低級acmer。 如果,樓主真的要往高走的話,那我給你個一個建議:1、培養一個愛好:建議是數學,也可以是資料庫設計2、培養一個特長:(我培養的是演算法)你覺得在軟體開發中最重要的那個。3、弄通開發的體系結構。4、做項目的時候,多琢磨琢磨。靜下心來,日積月累個幾年,基本上,你哪怕沒讀大學,都可以成為大神了。


我就是個學生,沒啥經驗,但老師告訴我,演算法導論,可以改變你的人生


其實演算法也就那麼回事,我們公司一幫演算法都轉產品了. ps: bat的一隻。


演算法其實也要做增刪改查的。剛從演算法轉到架構的人留。


刷刷oj,hdu。好吧,樓主已經是社會人了。


非常困難,因為科班的供應量即便不說飽和,也是相當充裕的。不過還是給你加油


技術積累是需要時間的,題主看起來是太心急了。

普通人,在大學裡有4年時間在學習基礎和實踐,畢業後仍然只是一個新人。

你在培訓學校都沒上完,所以我建議你在業餘時間先把基礎打牢,既然是做C#相關方向的,那知乎有名的「趙三本」,可以先看看。

同時多接觸一些有經驗的前輩來開闊眼界。


先看看大學數學能不能看懂,如果不能就忘架構方面走,別想演算法了


推薦閱讀:

對於各進位之間的轉換有什麼好方法嗎?
UUID是如何保證唯一性的?
程序員能20分鐘徒手寫出一個沒bug的快速排序嗎?(可以調試)
如何在最短的時間內搞定數據結構和演算法,應付面試?
如果按國家分,哪個國家編程最厲害?有沒有代表人物?

TAG:微軟Microsoft | 程序員 | 演算法 | 職業發展 | 人生 |