計算機專業學生的困惑,該如何規劃?
我在一所211大學就讀,我是在大二開始轉專業進入計算機學院,也是在大二才開始接觸計算機,接觸編程,學習了一年的時間(目前大三),在這一年的學習過程中,我總是感到很迷茫,我感覺自己一直在學,但總是覺得沒學到點子上,以下是我的困惑:
1.該如何提升自己?我看到很多說做項目,我不知道該如何下手,我目前自學了python django以及java servlet,也寫了一些小項目(簡單的web服務),都是自己一個人寫的,請問做這些小項目有意義嗎?或者說這算項目嗎?我總是感覺重複寫在浪費時間,又不知道如何提高。2.關於做演算法題的問題:我在大二下學期學習了一些演算法方面的知識,也從那個時候開始在leetcode上做題,但我感覺自己還是沒有很大的提高,碰到難一點的題還是不會做,特別是dp方面的問題,我也找不到同學問。做演算法題是否有必要,該如何提高?3.關於專業課的學習。說實話,我每一門專業課考試成績還不錯(基本都是90以上),但是,我覺得我根本沒學到什麼,浮在表面,老師講課也是很水,總是念ppt,我經常看到說是要學好基礎(比如數據結構,操作系統等),相比而言,我就覺得數據結構學的稍微好點,其他專業課學的都很渣,我自己在課下也不知道該如何提升,或者說學得很累,摸不到頭腦(比如計算機組成原理)。我想問,這些專業基礎知識該如何提升?或者說現階段有必要一頭扎在裡面嗎?是不是等到以後用的多就會清晰?我的問題可能有點多,也比較亂,我內心很迷茫,我很希望自己有更多的時間學習計算機的內容,學習編程,但是要學的知識真的很多,不知道如何下手,又害怕學習某些東西浪費時間,希望大家可以幫忙指點一下,謝謝!
謝邀。
我來分享我的一個學計算機同學的故事,希望對題主有些幫助。
因為對計算機感興趣,高中畢業填志願時他全都選的計算機專業,不服從調劑,當時他告訴我要是沒有被錄取就再來一年。雖然高考成績不算太好,但他也算是順利的被國內一所普通的大學錄取了。
大一上半年,和大多數學計算機的同學一樣,不知路在何方,那時候他還是一個不逃課的好學酥。
到了大一上半年結束的時候,他跟我說他想做手機開發,原因是他感覺課上學的東西很不實用,他希望能做些立竿見影的東西。
大一上半年結束的那個寒假,他自學了c#,開學後他就正式走上了wp之路,在此後的一段時間內每次和他聊天時,從他的言語之中,我都能感覺到他對wp開發的興趣。大約是在大一下快結束的時候,他寫出了他的第一個應用,我記得名字是Crazy ABCD創意是我另外一個同學的,那會2048非常火,他的那個小遊戲其實和2048有點像。
我記得那會他的QQ昵稱是「請叫我開發者」,每次看到我都想笑,不是嘲笑,只是感覺這個昵稱和他一貫的風格相差甚遠。應用才上架的時候,每次他給我講今天有多了幾個用戶,對沒聽錯是幾個,我心想就幾個用戶嘛,看把你小子激動的。認識他這麼多年,能讓他這麼高興的事情好像還真沒幾個。當時他還跟我說他想要成為wp的頂尖開發者,我鼓勵他繼續加油,祝他的小小願望早日實現!
隨著他在wp開發上投入的時間越來越多,慢慢的他就開始了逃課生涯,一開始是只要有時間盡量去上課,後台演變為必修課選逃,選修課必逃,再後來就是想去就去不想去就不去。老師如果點名了,如果查的不嚴,就讓同學代答;有些老師是通過課堂作業的方式來點名,他就讓同學替他寫一分;遇到上課回答問題被抽到就只能怪命苦了。
就這樣到了大二的時候,他告訴我他加入了msp,雖然我至今也沒搞清楚這是個什麼組織,他還說他認識了高他一屆的學長,那個學長又給他介紹了以為大神級存在的人物,就是屬於那種每門課成績都是90以上,關鍵是還寫的一手代碼的大神。我說,你的意思是成績好就不能寫得一手好代碼了嗎?他告訴我,他們專業的很多學霸是基本不寫代碼的。
那會我記得他還加入了一個團隊,好像是做類似超級課程表之類的,他負責wp版本的開發。他的第二個應用好像是叫掌控校園。
大二下半年,在李克強總理的號召下,創業之風盛行,他告訴我他們團隊也創建了公司。那段時間他好像很忙我們也很少聊天。
我記得大二的暑假,他好像沒有回家,聽說是在學校寫他自己的一個應用,應該是一個電台之類的應用。聽他說,從什麼後端到客戶端都是他自己在寫,好像還有pc端的,雖然我也沒有用過。但是那個應用的名字,我記得是追夢,也是現在他的QQ昵稱。
大三上半年他告訴我他有一門課重修了,我說怎麼搞的,平時不是考試前找大神培訓下,做一下往年的題不就過了。他說可能是課逃的太多了。好像也是在大三上半年,他告訴我他們團隊解散了,我也沒有多問。之前他在寫的應用也因為工程量太大加上他對自己寫的東西不夠滿意,也暫時擱置了。
那段時間他精神狀態不是太好,可能算不上抑鬱。他告訴我,他既不寫代碼也不去上課,每天也不知道自己在幹啥。我也不知道該怎麼開導他,所以只是靜靜的聽他講,扯些有的沒的。
接近年底的時候,他告訴我他在做win10開發,而且正在寫一個慕課類的應用,準確的說是移植了一個安卓應用。他告訴我那是他第一個下載量過萬的應用,而且只用了不久的時間就過萬了。
寒假的時候我問他,這都大三了,準備找工作還是繼續讀書啊,他說沒想好,還是先找份工作吧,最好是win10開發的工作,我知道他說最好是的意思就是只找win10開發的工作,他用詞一項很保守。
大三下半學期,他說他搞了個大新聞,把他開發了知乎的uwp版本,聽說下載量比之前的學堂在線好多了。而且他還說搞到了去網易實習的機會,好像是做網易雲課堂和中國大學MOOC吧。
去了網易之後他告訴我說,計劃有變,網易只打算做中國大學MOOC了,只做一個版本試水,而且不是由網易來發布,而是用他個人的開發者賬戶。他顯然有些失望,而且因為不是重點對象,很多資源都無法及時跟進,諸多原因,他在網易的時間只有一個月,當時他也擔心能否如期完成開發任務。
實習結束的時候,他說在老司機的幫助下順利的完成了開發工作 ,那會他說只完成了桌面版本開發,手機版本的適配可能要開學後在做了。
從網易回來後他第一次告訴我,他想繼續讀書了,當時我也有些驚訝,他說是因為他感覺工作挺累的,而且大多時候就是在搬磚。
我感覺他已經不是當初那個認為寫得了一手代碼就天下無敵了的少年了。
大四開學後,他依然在做些win10開發的工作。他告訴我他的成績保研肯定是沒戲的,能正常畢業就不錯了,到是他認識的比他高一屆的都保研了。我說那你不趕緊準備下,他說今年實習去了來不及了,明年再說吧!
然後就過上課大四不考研,天天像過年的生活,這可能是他大學過的最快樂的一年。
今年畢業後他開始了考研的準備工作。
才畢業的時候,他告訴我說,東野圭吾的《秘密》中,直子曾感慨,年輕的時候要是能多讀寫書就好了,後來直子真的獲得了一次重新來過的機會,而這一次直子也確實把握住了。
他說小說中的直子真的有了重新來過的機會,但是現實生活中,這種情況顯然是不存在的。
他說他總是一個後知後覺的人,他錯過了很多東西,他不知道曾經自以為無所不能的少年終於認識到愚蠢和無知之後是否還有迎頭趕上的機會。
最近看他微博發了一句歌詞,「可為何我翻起這些塵封過往,透過字裡行間看見你的淚光」。
前兩天問他快考試了準備的怎麼樣,他說時間有些緊張。
而現在,他在回去現場確認的火車上寫下這篇回答。
祝他好運。建議你學一些實用的技術,比如手機開發、Web開發等,自己先寫一些小項目練手,然後找實習機會。
當你接觸到真正的軟體硬體開發工作,很多困惑將不復存在,而你也會在這個過程中找到自己的發展方向。
我強烈建議四年本科生涯中,至少要有一次到真正的IT公司實習的經歷,並且這個實習是實打實地跟著幹活,學校不提供,就自己找。
呆在學校里閉門讀書,自行腦補很多理論與技術的應用場景,空對空地學習,……,肯定會困惑的,沒人能例外。
其實造輪子本身就能迅速提高自己的能力,不過什麼帖子都留下一句「造輪子」,大家也不知道到底要造什麼,那今天我就來說一下我的見解。
如果你沒遇到問題,你根本不懂怎麼解決問題
在編程這個行業中,這句話極端的適用。記住,我們每一行的代碼都是為了解決某個問題而存在的,哪怕是把代碼寫得好看,用優雅的方式寫代碼,同樣是為了能讓我們更好的維護項目。
基於這幾點,我們可以得知,我們想要提高就一定要遇到問題。看了一圈答案,都告訴你去公司實習,其實根本目的就是讓你能在一個真實的環境中遇到問題,然後解決,然後提高自己。其實這種實習的提高是有瓶頸的,說幾點:
- 技術不怎麼好的時候,去不了什麼好公司,碰到的問題都非常基礎,三下兩下就解決了,你很快就失去了興趣,這是常態。
- 很多初創型公司缺的其實就是碼農,訪問不大,但是需求非常多,所以需要找一個能鋪代碼的人去鋪代碼,實現業務。
我並不是說不應該腳踏實地的去公司里練習我們碼農的能力,我只是想說,我們不應該得依靠一個外界的力量去迫使我們去學習,去碰見問題。想要脫穎而出,還是得自己給自己製造麻煩,製造問題。
我以學習python和學習django之類的為例子,很多人跟著網上的教程把代碼敲一遍,就認為自己沒什麼可以學了,還有一些比較勤快一些的,能自己做出一點小項目,然後就覺得自己好像啥都懂了,可是真的如此嗎?
以用django+python+linux搭建自己的網站為例子:
- 搭建好博客這是第一步,包括註冊,登錄,寫文章,富文本,支持查看文章閱讀等基本功能。這些還是很簡單的。
- 在我們搭建博客之中,我們其實會碰到一些非常蛋疼的地方,假設我們使用的是原生的方式去寫資料庫,我們就得一條一條的select * from ......,這很麻煩,而且在我們創建表的時候,我們很可能會去寫一長串的表的創建create ¥%……*,這也很麻煩。試想,我們如果在工業中,也用這種方式去創建表,寫sql,那就會浪費時間和低效率。因此,這時候你可以看一看是否要引入一個ORM,來提高自己管理表的能力?(關鍵詞:ORM)
- 博客搭建完畢,我的博客代碼想要高效的進行版本維護,那這時候我是不是要學習一下如何使用Git?(關鍵詞:Git)
- 我們編寫一個函數,api的時候,我們總會進行一些手工的測試。我們都知道,一套好的代碼一定是一鍵測試,一鍵發布,那我是不是要引入一套單元測試的框架或者是自動化測試來測試我們的介面,我們的api?(關鍵詞:自動化測試)
- 博客完成以後,我寫了不少文章,然後發現回來複習的時候或者有時候記錄筆記,想進行查找,發現博客還沒有搜索功能,那我是不是要引入一下某個演算法對我的博客文章進行搜索以便我自己查詢或者別人查詢?(關鍵詞:搜索演算法)
- 當我博客的文章寫得多的時候,或者忽然哪一天我的博客訪問的人多的時候,然而我的博客里又有大量的靜態文件,如圖片,網頁本身等,我是不是要引入一個靜態伺服器幫我處理這部分內容?(關鍵詞:nginx,cdn)
- 有一天,我的博客想要換伺服器,因為我一開始的伺服器非常的卡。我現在碰到的一個問題就是我要如何高效的把我的伺服器迅速移動到另外一個伺服器?這時候是不是要考慮一下使用隔離環境?(關鍵詞:docker)
- 都做完以後,然後我發現,我非常的熟悉django的業務了。那django怎麼幫我實現這些內容的呢?我是不是應該去看一看django內部是怎麼實現的?或者說太難了,我要不要找一個類似的,迷你一點的框架進去看看,這些框架到底怎麼實現的?(關鍵詞:讀源碼!)
我隨便列舉一下,真的只是隨便列舉一下就能寫出一大堆需要學習的東西,這些東西都搞懂了嗎?有啥好迷茫的,你以為進公司是去幹嘛呢?大部分的時候公司項目都不會有這些東西,這些東西都得自己去學習,自己去看。
回答一下你的問題
- web小項目有用嗎?其實沒啥用,但是你可以對其進行組合,使之成為一個中型項目,那意義就非凡了。就像我上面說的那幾樣。
- 演算法題可以先不做,找工作前做都可以。
- 如果老師太照本宣科,那就要另謀出路了。(當然,出路就是我之前說的,給自己製造麻煩,並且解決)
最後,祝好。
「重複寫代碼」是一個常態化行為,編程如果沒有興趣,很容易對這種重複性工作產生枯燥無味的感覺。日復一日的編碼是提升的唯一途徑。但是在編碼過程中也要懂得思考。比如你寫Java Web應用,需要考慮層次結構——Service、DAO、BO等各種角色是否合理?其間就涉及到MVC、設計模式等知識點,再如Login時密碼的安全問題?與客戶端間交互是否需要Token?等等等等的知識點。還有,如果你做完一個Java實戰項目,那麼,下一步是否考慮一下前後端分離的方式再實現一遍呢?如此的重複折騰,相信日後必有所成。
演算法、數據結構理解不深,則可能確實需要一個過程,但個人不要急躁冒進,還是要多動手親力親為去寫代碼一個個演算法試一試。同時看一些經典的演算法書。
專業課摸不著頭腦,主要是因為抽象,沒有太多眼見為實般的實實在在接觸,比如計算機的指令集,一開始可能感到抽象,但一學期、一學期的課上下來,很多內容是可以上下左右串起來並且可以做到觸類旁通的。
最後,實踐很重要,實踐是消化知識體系、加深知識體系的基本活動。找老師跟著做實踐、找外部實習機會,都是你需要去思考的事情。
第一個問題。 如果你接下來想去工作的話,建議多做項目,多參加比賽,這對於找工作是加分項。我剛進大學時就是以找工作為目的而學習的,到大三快結束的時候,我參加了一些國內公司的面試,基本上都能順利通過。感覺這些公司還是比較注重項目能力以及獲獎的。
但是如果你想去繼續讀研究生或博士的話,就盡量不要浪費太多時間去搞比賽和與科研無關的項目了,例如寫網站這些東西。這些能提高你的編程能力,但提升很有限,同時對你的科研能力幾乎沒啥幫助。早點近實驗室發論文才是最重要的。
第二個問題。演算法對於找工作很重要,對於以後繼續深造幫助不大。除非你能拿金牌,或者進acm final,對申請才有幫助。但找工作是一定一定要演算法能力的。
第三個問題。好多專業課其實意義不大。因為我們只會做某個特定的方向,所以不是所有的都能用到。你對於喜歡的課,建議多學學,不一定局限於老師講的。對於不喜歡的課,建議拿高分,不必太多的擴展。
#該如何提升自己
1.學基礎課
計算機問題怎麼分析
編譯原理
數據結構
演算法導論
操作系統
計算機組成原理
計算機網路
2.動手
選一條好的學習路線
設計一個更好的計算機學習曲線,W系升級路線
M系路線(午休不睡覺寫的)
#實踐出真知,去實習
如何找實習:大三應該干點啥
去創業公司實習,你會發現組裡人少。
去一線互聯網公司實習,你會發現什麼是,多人協作。
對你好對人真不多。
#互聯網公司內部是怎麼樣的,給自己選個職位
小F君:IT行業都有哪些職位,初學者(0基礎,新人)該如何選擇,才能夠快速進入這個行業?
#戰略上的勤奮,才能戰術上懶惰
比如學iOS的競爭壓力可能要比安卓小。學機器學習的人可能比寫業務的人少,當然也需要高學歷。可能追溯回去考個好大學比較有用。總的來說選擇很重要。比如當年買了比特幣可能就不用上班了。趕上移動大潮進了個nb的創業公司可能就財務自由了。寫一輩子程序可能你加十年班依然是個開發,去過的公司連著倒閉可能和你技術沒啥關係。如果本科出來搬磚可能多攢了好二十萬,可以去招聘自己同學,研究生學了個機器學習學的好,可能出來一年的錢把三年都補上了。其實最近感覺搬磚也有不同,寫業務的和寫演算法的差別比較大,寫前端的可能比寫後端的需求變化快多了。
上學還是工作?上學的利害是什麼?
如果是以就業為目標,就找個自己感興趣的職位和公司,然後去拉勾網等招聘網站看該公司對於相應崗位的技能要求,有針對性學習。校招一般對於演算法、 數據結構、網路等基礎要求較高。沒事刷刷題目、做做項目、寫技術博客、實習經歷等在招聘的時候都是很好的加分項。
我花了十幾分鐘的時間閱讀了你的描述,卻沒能找到你的目標是什麼?
你說:
我總是感到很迷茫
目標都沒定下來,當然迷茫啊。
你第一件要做的是:為自己定一個目標,短期的、長期的都 ok。
目標沒定下來,就別談如何提升自己,也別說怎麼學好演算法,更別說專業知識如何深入學習的問題了。
因為說不定:
- 你的目標是考個公務員呢?
- 又或者考計算機研究生呢?
- 再或者你畢業後想從事產品經理呢?
- 更甚者,你是想做測試開發呢?
目的確立後,接下來要做的是:分析如何實現目標。
如果你定的目標是考計算機相關的公務員:
- 那就只需要準備考公的知識點了,不用學計算機專業知識了。
如果你定的目標是考計算機研究生:
- 那就只需要用心學考研的專業知識課程了,不用去學建網站的技能知識點了。
如果你定的目標是畢業後從事產品經理:
- 那就只需要對計算機專業知識了解皮毛了,更多的是去學產品方面的知識點了。
如果你定的目標是做測試開發人員:
- 除了基本的開發知識要學習,還需要學習測試方面的只是,學會寫自動化測試代碼。
了解如何實現目標後,腳踏實地的去學習相關知識就行了。
因為有了目標,學習才會有方向性及側重點。
不斷的學習,離目標越來越臨近,你才能越來越不迷茫。
最後,感謝邀請。希望我的回答能為你或更多有相關困惑的人帶來幫助。
首先有進步的意願值得肯定。寫servlet,python django 手機開發東西快,實用,但是那樣的技術很快會過時。作為專業的計算機系的學生在本科階段花太多時間做那些,是浪費(個人意見) 。演算法,數據結構,離散數學,操作系統,網路那樣的基礎課是真正區分專業和業餘的界限。
當然計算機學習不能只看課本(特別是垃圾教材,去看名校mooc),在本科階段如果你能開始把所學的(比如某個演算法)解決一些問題發布成開源軟體。是非常不錯的學習方法。
此外找到自己在計算機領域自己感興趣(還有適合自己和有價值)的領域,不斷吸收相關知識,學好英文看原始資料。
歸根結底,打好理論基礎加學以致用,培養自我學習的熱情和習慣是在計算機科學成功(別的領域可能也一樣)
你好,當初和你一樣迷茫著,大二下學期才明白,參加了一些比賽後,漸漸地計算機在腦中越來越清晰。建議是1.學好演算法數據結構,進大廠基本條件.2.選擇一個方向去學習,移動端開發,前端,後端,大數據,嵌入式,底層開發,人工智慧,安全。3.多參加比賽,慢慢的就知道自己可能對哪方面感興趣。4.選擇一門語言深入學習,用合適的語言做合適的事情。加油,很看好你!
關於提到的三個問題,我分開來做解答,希望對所有有共同疑慮的同學有所幫助。
一,如何提升自己?
總所周知,做項目是提升自己的最好方式,前提是你懂得做項目的正確姿勢。
何謂正確姿勢?
Don"t repeat yourself!這句話原意是"不要重複造輪子",我想用在個人提升方面,可以解釋成讓你每個項目都加入一些新的變化。
比如,一個簡單的web項目,你可以每次都用不同的方式去完成,相當於每一個項目都是一個全新的挑戰。
假如你用的是Java,你可以按順序嘗試以下幾種方式:
1,servlet+jsp2,ssm(spring+spring mvc+mybatis)+jsp3,ssm+jsp+jq4,ssm+vue以上是針對前後端框架的不同搭配,當然還有更多種選擇,你可以再去了解,後端也可以試著加入hibernate validator,lombok,spring boot,aop等,給自己帶來一些挑戰,總之,不要重複你曾經做過的事,即使是使用spring,你也可以採用xml或java config或annotation等多種方式來完成。
按照這種方式做項目,也許並不能讓你越做越快,畢竟學習成本擺在那裡,但卻能讓你學習到更多實用的技術。
二,演算法是否有必要?
演算法之於程序員,就像數學之於生活。
沒有系統地去學習演算法,對大多數程序員而言,並不會影響其完成工作,但正如數學的作用,它可以用來篩選出更優秀的人。
許多高端的IT崗位,對演算法都是有要求的,比如大數據,AI等,沒有紮實的演算法基礎,你可能一輩子也接觸不到。
如何學習演算法,這方面我目前還不是行家,為避免誤人子弟,不做概述,希望評論區有相關大神指點。
我能夠建議你的,就是去參加ACM。
拿到獎牌,等於拿到一流IT企業offer的敲門磚。
三,是否有必要深入專業基礎學科?
除非你對這方面非常痴迷,否則不建議。
對於應用層的工作者而言,除了數據結構與演算法這門課程,其他的專業學科,僅需了解就好,即使你學得再好,在你前幾年的工作中也不會有太大幫助。
這類學科,只能算是錦上添花類型的,幫助你理解計算機的本質,但在以應用為市場的環境中,這些並不能起到太大作用。
計算機的基礎已經非常穩定成熟了,如果你不打算從事底層硬體相關的工作,你幾乎不會碰到需要深入學習這些知識才能夠解決的問題。
所以就本科階段的學習而言,我建議不要花太多的時間和精力在這上面。
以上。不單單是你這個轉專業到計算機會感到迷茫,我當時大二開始也跟你差不多有個迷茫期,感覺安分守己地跟著學校的教學計划走,到大四肯定找不到好工作呀。所以我建議你分兩手抓,一手抓專業知識,把計算機基礎打牢,當然不是讓你把老師的ppt或教科書看好幾遍考個好分數就完事了,而是拓展地看一些經典書籍,不要因為老師劃重點時說不考就忽視某些知識點。重點學好計算機網路,操作系統,資料庫,編譯原理,計算機組成原理這幾門核心專業課。演算法也是很重要的,即使不搞ACM的,也建議能適度訓練一下自己的演算法能力(注意是適度,這個度 因人而異)。另一手抓你應用方面的技能,如前端,服務端等等。找一個自己感興趣的方向,用好GitHub社區上的資源,多看看這些優秀的開源代碼,將好的設計模式運用到實際的編碼上。如果你找不到好的項目可做,GitHub上這麼多優秀的框架,這麼多好項目,你完全可以試著造些輪子,甚至能仿一個也行呀,但一定要有自己的創新,或者優化的點。如果你大學在北上廣深,那想方設法去公司實習呀。一個靠譜的實習經歷,比你在學校寫一百個helloworld要好得多,比你做十個外包項目能學到的東西更多。我認識一個深圳大學的朋友,大二開始就在學校旁邊的百度實習了,平時沒課就去,眼界跟同齡人比就高下立見了。你說你專業成績還不錯,那恭喜你還是有機會保研的,祝你好運吧。就寫這麼多吧,目前作為鹹魚在學校的大四狗,希望我的建議對你有一丁點兒用。
題主寫了一大堆,感覺重點有點飄......我來給你總結一下你的問題先。
你的問題無外乎兩個,第一個就是不知道計算機領域想要成為一個優秀的人才具體應該走哪條路,所以你嘗試了很多東西,包括開發app,刷letcode,甚至包括刷課本。第二就是懷疑自己所做的事情是否在未來能夠讓自己成為一個優秀的計算機領域者。這也就是為什麼你開發時app沒有一心扎進去搞個大新聞,學習演算法也沒有像acmer一樣放棄一切夜以繼日的刷演算法。而專業的基礎課,例如組成原理,編譯原理,也沒能一鼓作氣徹底學到融會貫通的地步。總的來說就是缺乏前瞻性和足夠的信心。那麼我先來大概說一下從你大三到你畢業你可能會遇到的選擇,以及在上述的知識中,你到底需要學些啥。首先,計算機領域的優秀人物,主要分為科學家,演算法工作者以及架構師。計算機科學家,對應你現在要做的事情就是準備好一路讀博以及極有可能的出國博士後研究。重點需要做的,一是成績一定要高,二是數學一定要好,三是要有一定的代碼能力,作為科學家而言不需要太高,你可以不懂軟體工程,但是演算法和debug能力得有。演算法工作者,意味著你要在ai,圖形,圖像,大數據,硬體等一個領域有特別深入的了解。對應你現在要做的事情就是要在這些領域中選一個你感興趣的,然後準備讀研。軟體架構,意味著你要親自上手去帶領大家開發規模宏大且用戶量龐大的軟體。這就需要你有豐富的開發經驗,以及足夠紮實的軟體工程和程序基礎。如果對這個方向感興趣你就得不斷的去開發和重構軟體。接下來再說你做的這些工作。首先,演算法和數據結構,無論你是要做什工作,都極度重要。但是你不需要單純的花特別多的時間在上面,把必要的數據結構,排序,搜索,圖論等學清楚了就可以了。除非你想通過acm獲獎這條路來找工作。但是這些知識的重要性類似於加減乘除之於數學,在你寫代碼的時候是極度基礎且重要的。接下來就是課程知識,學校課本所闡述的,就是整個計算機領域的一個縮影,你覺得學完跟沒學一樣其實是沒錯的,因為一本課本的確說不了個啥,甚至連科普都嫌不夠。但是你真想把他們學到懂得很徹底(例如有實力做一個系統,搞一個編譯器這樣的水準),每一門課光入門都值得你學好幾年。所以你只能找自己感興趣的方向去深入學習。如果你想做某一領域的演算法研究或者以後讀博走學術路線,那麼你就趕快選你的方向就好了,越早動手學越好。然後就說關於你的app開發吧,寫工程的確是一個鍛煉代碼能力的好辦法。在開發項目之前你要做的是先問問自己,這玩意做出來有沒有成就感,對自己有沒有挑戰,夠不夠出去裝X。唯獨不要問能不能寫出來。然後,覺得差不多了就可以開寫了。前面三個問題就是為了讓你能選足夠困難的題目,以及能夠持續的堅持下去。接下來的東西其實就水到渠成了,隨著工程的日益複雜,你也會隨之學會很多複雜的編程與架構技巧,設計模式等等。當然,這些知識只對你本科畢業找開發工作有幫助,如果你志不在此,那麼其實這項目不練也罷。總的來說,你得先堅定自己要的是什麼,是科學家的路,還是專業演算法工程師的路,還是一般架構師的路。然後在這個方向上該刷分就刷分,該深入研究就深入研究,該搞項目鍛煉就搞項目鍛煉。這樣你看著自己一步步的在向目標邁進,就會產生正反饋,你也就不會有時間迷茫了。我漸漸地感受到知乎裡面規則的弊端了。
首先,問問題的根本不知道啥狀況。
然後是,凡是贊很多的回答的問題,要麼是一個人脈很廣,會講故事。
其實他們就是在造夢。安撫。
看起來像一個大家長。
事實上,樓主的已經被慣壞了,如果不能醒過來,怎麼能成長?
怎麼能在瞬息萬變的編程界,兵來將擋水來土掩呢?
也罷,有人群的地方,就有一群 蠱惑人心的人。
能轉行嗎?
能轉就早轉。
不能的話,就將錯就錯吧。
基本上,你的走向, 在我們這些從業十多年的人來看,也就那麼回事吧。
這麼多年來,30來歲轉行的人太普遍了。
所以也不給你建議了。因為大部分人不想花大價錢給自己的知識架構進行投資。
總想培訓半年,就想月薪過萬。
你讓我們這些10歲開始學編程,到40了,還每半年更新一次知識庫的人,情何以堪啊。
clang出來,我們學clang,golang出來我們學golang
boost火的時候,我們看boost。協程冒出來的時候,我們學習協程。
等等吧。
這條路未來是光明的,只不過,你想跟前輩們合作,打下手,打輔助,你是否心甘情願了。
題主,我錯了,我應該安撫一下你,認可一下你,然後鼓勵你繼續前行。
反正是對是錯,只是說說而已,到時候你不信,那才好了。少了一個強有力的競爭對手嘛。
呵呵,這叫做什麼?在好話反著說。讓題主產生排斥心理,就不會選擇我的議題。就不過走我建議的分支。然後也不去思考,我說的這些東西。這樣,我才能夠在業界長期保有話語權
我真佩服我自己。翻臉比翻書還快。
哇,感覺和題主的經歷很相似,但題主的條件要比我好一些
我普通雙非一本,現在也大三,大一大二隻學了C,C++,還有數據結構,計算機網路,組成原理,資料庫什麼的,雖然考試成績也都90分左右,但是考試的內容太水了,自己也覺得不是很紮實。大二的時候刷過100題的HDU OJ,但是很多都不會,都是百度的答案,感覺沒什麼用。還用Qt做過一些小程序,但是沒有涉及到網路層面的,感覺很水。現在大三,感覺技能點幾乎沒有,學的C++也是半吊子狀態,現在也做不出什麼東西。現在還在啃core java和演算法第四版,刷刷leetcode和hiho,寫寫博客,大三下還打算考研。感覺自己大一大二什麼都沒做,學的什麼都不精,真的是迷茫的不行,唉有點答不對題,發泄一下,不好意思了我覺得樓主和我的情況基本差不多,本人大三,也是某211,學生物,由於生物在我們學校是王牌專業,四年的課程壓縮到了三年,所以我沒有轉專業。雖然我和你一樣很喜歡計算機,但是,我可能和你不一樣,因為我小姨爹是烽火的高級工程師,我有前人引路。一開始我也是和你一樣,不喜歡看理論知識,看了n多web,Java,c#,甚至還去看了古老的CGI,但是我小姨爹就對這些很不以為然。他老是推薦我看彙編,於是我開始了自己的彙編學習,真正學過才發現,自己的知識是不夠的,看完一本8086彙編,你會發現你需要n多知識,包括硬體的,系統的,數據的,以前覺得索然無味的東西現在很有意思,而且對計算機的認識更深刻了,也更加覺得其實寫代碼沒有意義,不然多讀理論。我覺得理論知識這種東西,就是在你找到了學他的突破口才變得意義無窮的,而我的突破口可能就是我一開始學彙編的時候看的關於反彙編和逆向的教程,雖然我現在水平一般,但我覺得很有滿足感,樓主不妨一試。
對於題主的問題我有一些建議:
1. 基於 Python 框架或 Java 寫的一些demo,也只能簡單的了解或入門,很容易忘記,如果對這些框架感興趣的話,不妨去 Github 上探索一番,尋找一些實用性較高(有趣)且比較完善的項目,前端用上一個主流 js 框架,後端 Python flask 或 django ,再寫個爬蟲去抓取數據,以前在 v2ex 上看到過一個這樣實現,一個漫畫站,做的就挺不錯。
2. 關於演算法題,從功利角度上看,現在並不用急,如果題主不是搞演算法競賽的話。如果對演算法很感興趣,可以讀一些演算法經典書籍:《演算法導論》《演算法》等等,如果覺得有困難,不妨去 Coursera 上兩門相關的公開課。(但是其實個人感覺不如自己看書來的快,遇到問題去網上找博客,搜搜 Stack Overflow)
3. 關於計算機相關知識的學習,推薦按照自己的興趣來,去豆瓣搜書單,去圖書館找書,一本本的翻,遇到感興趣的就讀並記下來(我一直覺得這種在書海中尋找自己鐘意的書籍的過程充滿了成就感與幸福感),對於感興趣的書,一定要適當做一些書中的習題。仍然可以去看看公開課,選擇自己感興趣的看一看,在線教育平台上有哪些讓你相見恨晚的計算機或互聯網課程?。
4. 其實題主完全可以去問問老師有沒有合適的項目,在項目中學習,基於項目去制定自己的學習計劃。比如老師有項目要上 SSM 框架,你就跟著去學,看看學長老師是怎麼開發一個完整的項目的。
5. 題主大三,我認為現在還是多去讀一些計算機領域經典的書籍(CSAPP、SICP)。談談 SICP,這本書現在只讀了前三章,但是真的很有趣,千萬不要被它的名聲嚇到,它們面向的是幾乎無計算機基礎的學生。學習的過程中這兩本書的習題是必不可少的,避免眼高手低。另外「雜書」 推薦看看劉未鵬的《暗時間》,他的blog:http://mindhacks.cn ,作為一個學生去讀,啟發還是挺大的。
6. 其實很多人迷茫的原因都是因為無法從當前所做的事情中獲得成就感,做一個完整的項目(Github)、吃透一本書或摸索一門技術並寫下自己的感悟(Blog)、幫助別人解決問題(Stack Overflow),只要用心去做,一定可以幫助到別人,獲得別人的認同,成就感也就隨之而來了。(雞湯了)
7. 上面其實也省略了不少,但根據關鍵字去搜,大體都能找出來。畢竟善用谷歌百度才是入門第一步。
其實 12345 幾乎都不衝突,就看具體怎麼利用時間了。
先定目標,我當初就抱著做外掛的想法。然後就知道努力的方向了
發現有這種困惑的不只我一個人了。
好專業就是不錯,迷茫於不知道應該選擇哪條路!哪像我們專業,不知道哪裡有路可走。
推薦閱讀:
※演算法與IT就業的聯繫?
※CS專業工資那麼高為什麼大家不都去學CS?
※K-means聚類演算法如何應對數據的噪音和離散特徵處理的問題?
※圖的鄰接矩陣/關聯矩陣的秩有什麼直觀的幾何意義嗎?
※Yann LeCun、Geoffrey Hinton或Yoshua Bengio能得圖靈獎嗎?