正常情況下,你大學學的是數學,計算機,電子資訊,通訊工程等這些專業都可以自學軟體程式設計。
一般情況下,學有所成加上你的本科學歷,並且對開始的薪資要求不高,在北上廣深找一份初級軟體工程師的工作不難。但如果你沒有本科學歷,並且是初學者,那麼想要得到一份Offer的難度就比較大了。
如果你目前是還未上大學,要報考計算機專業,那基本上沒有什麼問題。但不知道你對程式設計本身有沒有熱情,像我,在90年代中期天天蹲在遊戲廳裡迷那個的時候,被家人揍的死去活來,也沒改變我想弄明白為什麼電視上那個小人會通過手杆的操作動起來。
我當時玩歸玩,但是真的想弄明白,於是大學並未學計算機專業,但畢業後仍自學的軟體程式設計,進了這一行。
軟體開發難學嗎?軟體開發需要學習多久?
經常有人問我“軟體開發專業難,怕學不會”之類的問題,今天藉此機會我就統一回答一下這個問題。
提到軟體開發,很多人立馬想到的是一串串“天書”般的程式碼,或是架著高度近視眼鏡、不修邊幅的“程式猿”,儘管軟體開發工程師動輒10K+的高薪讓人豔羨,但對這門看上去很艱深的技術,很多人還是望而卻步。
首先,凡事需要一分為二地來看,你為什麼要學軟體開發?
回答這個問題之前請大家先回答一下我的一個提問“你究竟學這個軟體開發專業的目的是什麼?”是圖名?還是圖利?我想應該都不是,說白了,我看莫過於希望學完軟體開發之後想做個軟體開發人員,想找到一份相對滿意的工作,工作環境好一些,待遇高一些,生活舒適一些,還有可能的目的就是把技術學到手,日後自己開公司,做老闆,我想大概就這些吧,所以你希望求學深造。
其次,為什麼你會覺得學習軟體開發會很難?
1、為什麼軟體開發給人“很難學”的印象呢?主要原因可以歸結為,對普通福斯而言,對這一領域通常無法取得直觀的認知。不同於用色彩、圖形說話的藝術設計類IT專業,以程式碼為“語言”的軟體開發給人“看上去很厲害”的印象。
2、軟體開發專業,不同於其他專業學生基礎的參差不齊,或是專業、非專業人士之間的界限模糊,對軟體開發專業而言,不論年齡、學歷,很多人的基礎和起點都是一樣的,所以,如果想要從零開始學一門技術,軟體開發是一個不錯的選擇。
3、要在一個完全陌生的領域學到一定程度,肯定是有一定難度的,這對於任何專業而言都是如此。但回報總是和付出成正比的,尤其軟體開發人才在市場上具有極強的專業性和不可替代性,這也是軟體開發工程師的薪資水平普遍高於其他職業的原因。
4、我相信這個年代一個有意從事軟體開發的人極少極少不會開機關機吧?不會上網、不會打字吧?這難道不是技術,可能有人說當然是技術了,但光靠這個還達不到我的目的呀,why?
有人可能會說這些技術靠不住啊!這年頭誰不會這個呀?由此說明技術和技術也不一樣,那麼一個簡單技術好找工作待遇高呢?還是一個高階技術有難度的技術好實現你的目標呢?一個滿大街人都會的技術,我覺得也沒必要指望他幫你找到工作!找到好工作!
5、因此我覺得學習軟體開發這個專業有難度是好事,一個沒多少技術含量的技術,你花好多錢好多時間好多精力去學她有必要嗎?學完了能找到好工作嗎?我看能找到份工作就謝天謝地了,別指望什麼好的了。同樣的時間精力學費你覺得學個技術含量高的技術有前途呢?還是學個大家普遍都會的所謂的技術前景好?
由此來說不要怕難,難有難的好處,難有難的甜頭,隨著學習的循序漸進,大膽去學,有不懂的問大神們,他們會幫你搞定這個技術,今後的日子大大地舒適!
軟體開發要學多久?
對於有意向學習軟體開發的人士來說,學習時間是首要考慮的一個問題。根據學習語言的不同以及課程實際難度和本人的學習能力,學習的週期也因人而異。簡單來說,如果有一些計算機程式語言的基礎,那麼短短3個月左右便能迅速進入軟體開發的大門,如果沒有基礎,個人適應能力和悟性不是很好,那麼邊實習,邊學習,在專案實戰中積累經驗,這樣1年左右也能學會軟體開發。不過對於非專業人士來說,最快的捷徑就是在軟體開發專業培訓的幫助下學習,這樣能快速入門到精通,花最少的時間,做最有效的事情。
為什麼學了程式語言還是不會做軟體?
馬上大學畢業了,其實沒感覺自己學會什麼,即使學了資料結構演算法,也不知道該去如何寫個東西,一些思路沒有,什麼都不懂,請問該如何走下去,就是一些改到實戰上的東西缺什麼都不懂,只懂基礎的語法,求您請教。
開發一個有一定規模的軟體,需要以下幾方面的知識、技能和能力:
這還不夠,還有很多我沒列出來的。所以從這個列表看,你現在只具備了“程式語言、演算法、資料結構”這部分最最基礎的東西,做不出來成型的軟體是自然的,非常正常。千萬不要因此而妄自菲薄。
為什麼說這是正常的?因為程式語言這類東西,充其量只是一把螺絲刀,你拿了一把螺絲刀,造不出來航空母艦,這很正常。
我們在初學時都覺得,我掌握了Java語法,學會了SSM,就應該能做出淘寶那類電商系統的後臺。但實際上,不是這樣子的。
順序反啦!
正確的順序是:
注意到了嗎?做軟體必須從上帝視角出發,從全知全能到一磚一瓦。
但我們上學、我們去培訓,都是先反著教我們語言、演算法、資料結構、工具,所以我們學了那些玩意兒,也不會做一個能解決現實問題、有實際價值的軟體。
只有按照正確的思維來琢磨開發軟體這個事情,你才可能真的做出軟體來。
那怎樣訓練,才能具備從頭到尾開發一款軟體的能力呢?
學開車的過程是這樣的:
在這個過程中,老司機就是那個開了上帝視角的人,他心裡車、有路、有路況、有應對各種路上的肌肉記憶和應急方案。他幫我們照顧著全域性,所以我們可以在某個細節上慢慢學習。
學了一個又一個細節後,打火、起步、直角轉彎、倒庫、變速、停車,細分步驟一個一個都掌握了,我們才到真實的環境中去練。練得多了,實踐得多了,這些東西才能融合在一起,成為一種完整的能力:駕駛。
軟體開發能力也是這麼個訓練過程。
當你學習了程式語言、演算法、資料結構這些東西后,只相當於你懂得了如何打火、如何抓握方向盤、如何掛擋這些紙面上的知識。接下來你要做的是:
注意,你現在要做的是第4步,也就是別人分配好任務,甚至把類的介面都定義好了、方法名字都起好了,你去填寫方法內的程式碼。
等第4步練熟了,你就是一個能出點活的、入門級的程式設計師了。這個時候,你能夠理解別人為什麼這麼拆分模組和任務,能夠在別人的指點下完成一個軟體的子模組。
然後,你就可以嘗試著往第3步走。
再然後,可以往第2步走……
再再然後,往第1步走,給別人當教練……
有人說,我找不到教練啊,怎麼辦?
我曾經非常喜歡一本書,它在沒人指點我時,給了我自己練習的指南,這本書的名字是Unix/Linux程式設計實踐教程,不知道現在還有得賣沒。這本書會教你編寫 who 、cp 、 ls 、pwd 等 Linux 系統命令,非常贊。
這類書,提供了一個自我練習的思路,就是:從小而完整的問題著眼,慢慢遷移到大而複雜的問題。
沿著這種思路,我還找了幾個替代的辦法,供你參考:
2.找開源的專案,研究它某一個子模組,嘗試著自己去實現。比如 ffmpeg ,研究它的 demux 模組,嘗試著自己去解析 mp4 、mkv 等檔案格式。
3.檢視作業系統的自帶軟體和命令,比 notepad 、copy、dir、檔案瀏覽器、ls、mv、cat、head、tail、find等,嘗試自己去實現。
找一本專案實戰類的書,操練書中專案。
找實戰類視訊課程,跟著練。
問你身邊的人或者觀察自己的生活,看有什麼問題,是能通過軟體解決的,嘗試著自己去做。
最後,祝你早日踏入軟體開發的領域,找到自己的一片天地。
正常情況下,你大學學的是數學,計算機,電子資訊,通訊工程等這些專業都可以自學軟體程式設計。
一般情況下,學有所成加上你的本科學歷,並且對開始的薪資要求不高,在北上廣深找一份初級軟體工程師的工作不難。但如果你沒有本科學歷,並且是初學者,那麼想要得到一份Offer的難度就比較大了。
如果你目前是還未上大學,要報考計算機專業,那基本上沒有什麼問題。但不知道你對程式設計本身有沒有熱情,像我,在90年代中期天天蹲在遊戲廳裡迷那個的時候,被家人揍的死去活來,也沒改變我想弄明白為什麼電視上那個小人會通過手杆的操作動起來。
我當時玩歸玩,但是真的想弄明白,於是大學並未學計算機專業,但畢業後仍自學的軟體程式設計,進了這一行。
軟體開發難學嗎?軟體開發需要學習多久?
經常有人問我“軟體開發專業難,怕學不會”之類的問題,今天藉此機會我就統一回答一下這個問題。
提到軟體開發,很多人立馬想到的是一串串“天書”般的程式碼,或是架著高度近視眼鏡、不修邊幅的“程式猿”,儘管軟體開發工程師動輒10K+的高薪讓人豔羨,但對這門看上去很艱深的技術,很多人還是望而卻步。
首先,凡事需要一分為二地來看,你為什麼要學軟體開發?
回答這個問題之前請大家先回答一下我的一個提問“你究竟學這個軟體開發專業的目的是什麼?”是圖名?還是圖利?我想應該都不是,說白了,我看莫過於希望學完軟體開發之後想做個軟體開發人員,想找到一份相對滿意的工作,工作環境好一些,待遇高一些,生活舒適一些,還有可能的目的就是把技術學到手,日後自己開公司,做老闆,我想大概就這些吧,所以你希望求學深造。
其次,為什麼你會覺得學習軟體開發會很難?
1、為什麼軟體開發給人“很難學”的印象呢?主要原因可以歸結為,對普通福斯而言,對這一領域通常無法取得直觀的認知。不同於用色彩、圖形說話的藝術設計類IT專業,以程式碼為“語言”的軟體開發給人“看上去很厲害”的印象。
2、軟體開發專業,不同於其他專業學生基礎的參差不齊,或是專業、非專業人士之間的界限模糊,對軟體開發專業而言,不論年齡、學歷,很多人的基礎和起點都是一樣的,所以,如果想要從零開始學一門技術,軟體開發是一個不錯的選擇。
3、要在一個完全陌生的領域學到一定程度,肯定是有一定難度的,這對於任何專業而言都是如此。但回報總是和付出成正比的,尤其軟體開發人才在市場上具有極強的專業性和不可替代性,這也是軟體開發工程師的薪資水平普遍高於其他職業的原因。
4、我相信這個年代一個有意從事軟體開發的人極少極少不會開機關機吧?不會上網、不會打字吧?這難道不是技術,可能有人說當然是技術了,但光靠這個還達不到我的目的呀,why?
有人可能會說這些技術靠不住啊!這年頭誰不會這個呀?由此說明技術和技術也不一樣,那麼一個簡單技術好找工作待遇高呢?還是一個高階技術有難度的技術好實現你的目標呢?一個滿大街人都會的技術,我覺得也沒必要指望他幫你找到工作!找到好工作!
5、因此我覺得學習軟體開發這個專業有難度是好事,一個沒多少技術含量的技術,你花好多錢好多時間好多精力去學她有必要嗎?學完了能找到好工作嗎?我看能找到份工作就謝天謝地了,別指望什麼好的了。同樣的時間精力學費你覺得學個技術含量高的技術有前途呢?還是學個大家普遍都會的所謂的技術前景好?
由此來說不要怕難,難有難的好處,難有難的甜頭,隨著學習的循序漸進,大膽去學,有不懂的問大神們,他們會幫你搞定這個技術,今後的日子大大地舒適!
軟體開發要學多久?
對於有意向學習軟體開發的人士來說,學習時間是首要考慮的一個問題。根據學習語言的不同以及課程實際難度和本人的學習能力,學習的週期也因人而異。簡單來說,如果有一些計算機程式語言的基礎,那麼短短3個月左右便能迅速進入軟體開發的大門,如果沒有基礎,個人適應能力和悟性不是很好,那麼邊實習,邊學習,在專案實戰中積累經驗,這樣1年左右也能學會軟體開發。不過對於非專業人士來說,最快的捷徑就是在軟體開發專業培訓的幫助下學習,這樣能快速入門到精通,花最少的時間,做最有效的事情。
為什麼學了程式語言還是不會做軟體?
馬上大學畢業了,其實沒感覺自己學會什麼,即使學了資料結構演算法,也不知道該去如何寫個東西,一些思路沒有,什麼都不懂,請問該如何走下去,就是一些改到實戰上的東西缺什麼都不懂,只懂基礎的語法,求您請教。
開發一個有一定規模的軟體,需要以下幾方面的知識、技能和能力:
程式語言、演算法、資料結構應用框架開發工具業務分析架構設計任務拆分程式設計想象力工程能力規劃計劃專案管理能力溝通產品思維這還不夠,還有很多我沒列出來的。所以從這個列表看,你現在只具備了“程式語言、演算法、資料結構”這部分最最基礎的東西,做不出來成型的軟體是自然的,非常正常。千萬不要因此而妄自菲薄。
為什麼說這是正常的?因為程式語言這類東西,充其量只是一把螺絲刀,你拿了一把螺絲刀,造不出來航空母艦,這很正常。
我們在初學時都覺得,我掌握了Java語法,學會了SSM,就應該能做出淘寶那類電商系統的後臺。但實際上,不是這樣子的。
順序反啦!
正確的順序是:
看到了一個問題(需求)腦海中孵化出一個產品(服務)來解決問題用軟體開發技術把這個產品(服務)實現出來注意到了嗎?做軟體必須從上帝視角出發,從全知全能到一磚一瓦。
但我們上學、我們去培訓,都是先反著教我們語言、演算法、資料結構、工具,所以我們學了那些玩意兒,也不會做一個能解決現實問題、有實際價值的軟體。
只有按照正確的思維來琢磨開發軟體這個事情,你才可能真的做出軟體來。
那怎樣訓練,才能具備從頭到尾開發一款軟體的能力呢?
學開車的過程是這樣的:
一個會開車的老司機在車上指點我們在老司機的指點下,打火、掛擋、起步、轉彎在老司機的帶領下,到路上去練在少車的路上,自己練在車少的路上,慢慢開在正常的路上,慢慢開想怎麼開怎麼開在這個過程中,老司機就是那個開了上帝視角的人,他心裡車、有路、有路況、有應對各種路上的肌肉記憶和應急方案。他幫我們照顧著全域性,所以我們可以在某個細節上慢慢學習。
學了一個又一個細節後,打火、起步、直角轉彎、倒庫、變速、停車,細分步驟一個一個都掌握了,我們才到真實的環境中去練。練得多了,實踐得多了,這些東西才能融合在一起,成為一種完整的能力:駕駛。
軟體開發能力也是這麼個訓練過程。
當你學習了程式語言、演算法、資料結構這些東西后,只相當於你懂得了如何打火、如何抓握方向盤、如何掛擋這些紙面上的知識。接下來你要做的是:
找一個具備開發軟體能力的人給你當教練讓他給你設計一個實際的軟體讓他幫你把軟體拆分成一個一個的模組、一個一個的開發任務你在他的指點下,一個一個去完成與你當下能力匹配的小任務注意,你現在要做的是第4步,也就是別人分配好任務,甚至把類的介面都定義好了、方法名字都起好了,你去填寫方法內的程式碼。
等第4步練熟了,你就是一個能出點活的、入門級的程式設計師了。這個時候,你能夠理解別人為什麼這麼拆分模組和任務,能夠在別人的指點下完成一個軟體的子模組。
然後,你就可以嘗試著往第3步走。
再然後,可以往第2步走……
再再然後,往第1步走,給別人當教練……
有人說,我找不到教練啊,怎麼辦?
我曾經非常喜歡一本書,它在沒人指點我時,給了我自己練習的指南,這本書的名字是Unix/Linux程式設計實踐教程,不知道現在還有得賣沒。這本書會教你編寫 who 、cp 、 ls 、pwd 等 Linux 系統命令,非常贊。
這類書,提供了一個自我練習的思路,就是:從小而完整的問題著眼,慢慢遷移到大而複雜的問題。
沿著這種思路,我還找了幾個替代的辦法,供你參考:
1.找足夠小的問題來解決。比如統計文字檔案中的單詞個數、記事本、重新命名檔案、定時任務、待辦事項列表、靜態網站、部落格、圖片瀏覽器、複製命令、dir或ls命令等等。2.找開源的專案,研究它某一個子模組,嘗試著自己去實現。比如 ffmpeg ,研究它的 demux 模組,嘗試著自己去解析 mp4 、mkv 等檔案格式。
3.檢視作業系統的自帶軟體和命令,比 notepad 、copy、dir、檔案瀏覽器、ls、mv、cat、head、tail、find等,嘗試自己去實現。
找一本專案實戰類的書,操練書中專案。
找實戰類視訊課程,跟著練。
問你身邊的人或者觀察自己的生活,看有什麼問題,是能通過軟體解決的,嘗試著自己去做。
最後,祝你早日踏入軟體開發的領域,找到自己的一片天地。