幼儿音乐绘本动物狂欢节
服務支持
app開發資訊
小程序開發資訊
軟件開發資訊
業界動態
公司動態
聯系我們

了解更多詳細信息請致電

4000-670-790

或給我們留言

在線留言

您所在的位置: 首頁 > 服務支持 > 知識中心 >

個人如何自學軟件開發

作者:深圳軟件開發公司 點擊量: 2019-11-07 18:24
內容導讀: 不要懷疑自己的背景,任何人都可以學習軟件開發,現在就去動手做,不再害怕,暫時放起自己的想法,自學的時候要像個傻瓜。 ...

  不要懷疑自己的背景,任何人都可以學習軟件開發,現在就去動手做,不再害怕,暫時放起自己的想法,自學的時候要像個傻瓜。

軟件開發

  睡好覺,咖啡抵不住困

  現在不管做什么,前提都得要睡好。我睡眠一直還行,不過有時候手欠,晚上如果有點工作要做,就想喝個咖啡。工作做完以后會很興奮,加上咖啡因起作用,眼睛雪亮像狼一樣,過于興奮就會晚睡,但是咖啡因又讓我比平時早起一兩小時。

  一遇到這種情況我就知道,今天一定是費掉了,覺得虧了,還不如前一天少做一會。因為早起那一兩小時,腦子里的垃圾沒清理干凈,一直有困意。但又不想浪費一天時間,就會再喝個咖啡,然后又會補上兩杯。發現沒什么效果,又想著補個覺。但是咖啡因起作用了,又有困意,又興奮的睡不覺,這種感覺很難受。

  咖啡只能在你清醒的時候讓你更清醒,更專注,但它絕對不是困意的對手。我說的困,還不是真正的困,就是你會感覺有種物質在腦袋里面,可以想成是垃圾,又像是一種力量在拽著你要開工的大腦,它會影響大腦的正常工作。這種狀態下,我幾乎什么都做不了,即使是不需要太多思考的事情,甚至是讓我看個喜歡的電影也不行。

  像這種情況每個月都會有兩次,也沒什么好的辦法,只能等咖啡因跑掉,晚上再睡個好覺。不過今天我想應該可以用點酒來稀釋咖啡因的作用,我喝點酒就會困,但很多人是越喝越興奮。寫到這里感覺好一些了。

  二十幾歲的時候體能恢復的比較快,喜歡很晚睡,第二天也會有精神。不過三十以后,我就發現自己是決對不能熬夜的,對我來說熬夜工作很虧,因為會搭上白天一整天時間。而且情緒低落,還易怒,可愛的女兒說 “ I Love U 爸比”,我都不想理會,直接拿了鑰匙出門。騎著電動車跑出去轉一圈,跑到河邊,還查查地圖,看看檀抱泉在哪,一看還有 40 公里,算了,電動車騎不到啊。

  不管學習還是工作,都要睡好,不能睡得太早或太晚,也不能起的太早或太晚。如果 12 點睡,第二天 8 點左右起來正正好。保證充足的睡眠,再配上杯咖啡,心情愉悅,效率倍增。不要在困的時候,或者睡覺前 6 小時喝咖啡。困了就去睡會。

  別害怕,任何背景的人都可以

  我很清楚地記得當初考慮是否要學一下開發。那年 30,現在后悔了,后悔當初的決定有點晚。我一直都對網絡與 Web 有興趣,也經常會嘗試一些東西,但都是想圖省事,大部分都是去修修改改別人做好的一些東西。可能覺得這樣更簡單,也是一種找捷徑的心理吧。

  對于軟件開發,我是有想法要學一下,不過一直都有一種恐怖心理,覺得這是一件挺難的事兒,自己可能學不會。很多年前,曾經嘗試著學習 PHP,幾次都放棄了。后來接觸了 Drupal 以后,驚嘆功能之強大,又讓我認為學習開發完全沒有必要,點點鼠標就能完成的事情,為什么要去費事寫幾行代碼呢。

  直到決定要做寧皓網的時候,我還不懂 PHP,CSS 也沒完全理解。但 Drupal 真的是強大,讓我這種不懂開發的人也能搞個網站出來。后來我是因為寧皓網需要 CSS 課程,我才真正弄明白它。

  寧皓網前兩三年的課程,主要還是以應用為主,怎么用 Joomla,Drupal,WordPress 做個網站出來。課程做的都很用心,也挺受歡迎。也是因為環境,還有自己的見識問題,一直沒有機會看到能寫幾行代碼會有多么強大,多么了不起。

  后來也是為了豐富網站上的課程,才決定要真正去學習一門程序語言(JavaScript)。但當時也并不認為學習開發有什么必要性。這種觀念今年我才完全轉變過來,我覺得任何人都應該給軟件開發一次機會,試著去寫幾行代碼。不管怎么樣,都要試一下,當個業余愛好也好。如果能投入一兩年時間,任何人都可以基于軟件開發去建立一份自己的事業。

  如果你是一個技術愛好者,業余時間做點技術相關的工作賺些外快,喜歡拿別人的東西簡單的修修改改,覺得這樣做是最省事的,并且從來沒把開發當回事。現在你要做的就是給開發一次機會,下決心學一下。到某個程度的時候,我保證你的思維方式會發生巨大的變化,很多以前看起來不可能的事情,現在變得沒那么難了。

  如果你一直恐懼開發,認為自己專業不對,學歷不行,水平不夠。不用克服恐懼,直接把它扔了就行了。任何能長時間面對電腦的人,都可以成為一名軟件開發者。開發肯定不是一件容易的事,但決對不是一件不可能的事,任何人都有機會。

  陌生的詞

  對于初學者,一開始最怕的就是面對一堆陌生的技術詞匯。這些詞如果出現在現實生活中,你可能知道它的意思,但把它放在技術領域,你就懵了,這是因為你想多了。其實很多技術領域的詞匯是模擬現實的,就是借用了現實的用法。

  比如Container 這個詞,在現實中它表示的就是一種裝東西的容器,一個杯子,一個盆子都可以裝東西,所以都可以看成是個 Container。在技術領域,這個詞表示了很多東西,可能指的是一個 HTML 標簽,一個 Flutter 的小部件,一個運行軟件的容器,一個裝了很多軟件服務的東西。不過它出現在哪里,它的本意跟現實中的意思是差不多的,指的就是一個可以盛東西的容器。

  再比如 Stack 這個詞,它在現實中指的就是 “A stack of things”,一疊,一堆,或者叫一摞東西。這個詞如果出現在軟件開發上面,比如它可能指的是一種數據的類型。別想太多,Stack 在這里還是有一摞的意思,只不過這里指的就是一摞數據。

  先考慮一個現實場景,你把一些盤子一個一個地摞在一起,就得到了一摞盤子。想一下這摞盤子的特點,就是我們只能把新的盤子摞在所有這摞盤子的最上面(push)。要從這摞盤子里取走一個盤子,一般也只能從這摞盤子的最上面取走一個(pop)。這其實就描述了 Stack這種類型的數據的特點。我們把數據一個一個的摞到一塊兒,新放進來的數據會在所有數據的最上面,拿走數據的時候,拿走的也是這摞數據里的最上面那個。

  所以,遇到一個陌生的技術類型的詞匯,首先可以把它跟現實的用法做類比。當然還是會遇到很多無法類比的詞匯,比如 Git ,在軟件開發領域,它指的可不是 “渾蛋”,而是一種源代碼管理工具或者叫版本控制工具。這時候要做的是不要抵觸,這些名詞被發明出來不是為了唬人的,而是在開發者之間建立的一種溝通的語言。認識一段時間以后,一切都會變得和諧自然。

  學會自學

  至今我學到的所有技術相關的知識,除了五筆打字是在學校里學的以外,其它都是通過自學獲得的。我也聽說有很多開發者都是自學的,自學可能是技術領域的一種文化。因為這個領域變化很快,我們需要不斷地給更新自己的知識,給自己打補丁,添加新的功能,所以自學也是唯一可行的辦法。

  謹慎地考慮參加培訓學校。你可能準備花兩三萬用半年時間在一家培訓學校讓你快速成為一名開發者。我覺得不要太依賴培訓學校,要盡早學會自學,這是開發者必備的本領。如果你是那種必須得有人培訓才能學習的人,我建議在去之前先把基本的東西學一下,比如程序語言的基本語法,基本的工具,比如 Git(源代碼管理)。這些東西要是去培訓學校學的話就太浪費了。而且你要目標非常明確,知道去學校要學什么,而不是幻想著只要進去轉一圈就什么都會了,這種事情永遠都不會發生。

  參加一些線下活動也是比較好的學習進步的方法。技術類的社區格外活躍且友善,你所關注的技術門類一定會在線下舉行一些活動,不過一般都在發達的城市舉行,但也沒啥,高鐵很方便,就當旅游了。如果你幸運地生活在一線城市,那就再好不過了。

  準備學習資料

  圖書,文檔,視頻。自學的話,就這三種形式的學習資料,獲取的方式是通過搜索引擎。一開始你可能會更喜歡找一本圖書,比如學 JavaScript,就找一本厚厚的 《JavaScript 權威指南》,學 Git ,就買一本厚厚的《Git 權限指南》。圖書其實會給我們一些錯覺,首先你會覺得一本厚厚的 “權限指南” 里面一定有你需要的所有內容,有了這本書,就有了學會 JavaScript 語言的可能性。另一面你又會想,我靠,學個 Git 工具需要看 500 頁的書才行嗎?放棄!

  圖書里面一般會有很多廢話,因為出版社一定有要求,書不能太薄,字數越多越好。

  還有人可能喜歡把書捧在手里的那種沉甸甸的感覺,要是捧個文學小說之類的書找找感覺還行,或許在咖啡館,地鐵,公交上故意露出書的封面給對面的女生/男生看,顯得我們很文雅。但你捧本技術書,封面一般都不太好看,所以除了沉真的沒有其它的感覺了。

  如果你能找到一本能看著舒服的書,那你很幸運,其實能看得下去就已經是非常好的書了。最好選電子書,技術類的紙制書是非常浪費的,不能做筆記,不能搜索,又不能復制粘貼。而且出版周期很長,所以書里面肯定會包含些過時的內容,紙制書又不能及時更新。將來應該會出現更多更敏捷的電子書出版商,可以做到快速出版及時更新,而且敢出只有 25 頁內容的書。

  我經常會在找書上花很多時間,很多又是只看了幾頁就不能繼續下去了。轉了一圈最后發現,其實官方的文檔可能寫的更清楚,更容易理解所學的東西。在學習前端開發框架 React.js 的時候,我就深有這個體會。不要被圖書的可能提供的完整性所迷惑,初學者要的可能不是完整,而是快速地理解,這是什么,它是怎么工作的,我能拿它做什么。

  當然如果你能幸運地在初學某樣技術的時候,找到了精心制作的視頻教程(比如寧皓網的視頻教程:),那就更好了。視頻是最容易理解的一種形式。視頻內容要簡單,直接,沒廢話。把技術教學類的視頻做成娛樂節目應該不是什么好想法。

  像個傻瓜

  在自學的時候,我經常犯的錯就是太貪心,還有就是太早有自己的想法。初學某樣東西,因為我們不可能對它有一個全局的認識,所以從哪里開始你都會覺得有問題,都覺得不夠,不全面,肯定還有更好的。看著這本書,想著另一本,然后又覺得文檔不錯,又可能想再看看這個視頻。如果我來回頻繁切換不同的學習資料,基本上什么都學不會,而且感覺非常疲憊。

  初學者應該先把自己的想法放一放,像個傻瓜一樣,跟著你現有的某一個學習資料去做練習,上面說讓干嘛就干嘛,一開始自己的想法越少越好。舉個例子,比如視頻里面說要創建一個表示文章列表的數據,名字叫 posts,你覺得這名字不好聽,非要換成 articles,entries,這種嘗試通常都沒什么意義,不值得浪費思考能量。

  跟著內容作者的思路,你得知道他在制作內容的時候也花了很多時間思考,要用什么樣的例子講明白一個什么概念或方法。

  癮

  學習的過程中大部分時間都很痛苦,一個小問題可能要憋很久才能解決,但又是什么讓我們不斷地嘗試這件痛苦的事?我覺得學習可能是一種癮,當我們學會一個什么東西的時候,大腦會給一點愉悅感作為獎賞。一個問題花的時間越久,解決之后獲得的快樂也就越多一些。

  我記得有天下午,終于學會了怎么用 Drupal 的一個模塊去完成一個動作(Flag 模塊觸發執行定制的某個規則)。晚上騎著車子出去的時候,迎著微風,吹著口哨,哼著歌,感覺自己很帥很厲害。原來學習是一件很快樂的事兒,這種感覺在短暫的求學經歷中從未獲得。在中學的時候語文老師有個作文命題叫《學習是一種享受》,這篇作文還是個系列,連續寫了一段時間。但那時我從來沒覺得學習真的是一種享受。

  切入點

  我們會無數次地成為初學者,在初學某樣新東西的時候總得有個切入點,就是決定到底要從哪里開始。一開始我們對這個主題(學習的對象)一無所知, 不可能知道到底從哪里開始是最正確的選擇。所以殺到哪里就從哪里開始,不用想太多,不要求全面。知識面都是由一個點一個點連接形成的,沒人能一下子學到一個面。你可能分散的學了某些看起來不相關的幾個點,就這樣學著學著,在某個時刻你會突然有種開竅的感覺,這就是你的點與點之間互相有了聯系,形成了一個面。這種感覺非常神奇。

  我現在做視頻的時候就會想著,在每個視頻里面只包含一兩個點,每個視頻的目標都極為明確。壓縮視頻時長,一兩分鐘就要完成傳達的意圖,讓用戶得到一兩個點,十幾個視頻一組,一二十分鐘就要解決某個問題,用戶能得到一個知識塊,十幾組這樣的練習,用戶就能獲取一面。

  比如最近你可以嘗試《Node.js 應用開發》這個系列,連續性與完成度也很高,完全能跟著寫每一行代碼。完成所有的練習,你會獲得一個后端應用開發的知識面,也會伴隨著很大的滿足感。正在制作的《Flutter 移動應用》也值得一試。

  動手

  學習的人有幾種類型:視覺型,聽覺型,觸覺型。我好像從來沒有只看不做就學會了某種新的技術。有些視頻是給你觀念的啟發,并不會真正教會你什么,但會讓你有個印象,讓你對某種事情產生興趣,讓你興奮。這種視頻只看只聽就行,不用動手,因為也沒什么可動的。如果你想真正學會個什么,那就必須要動手做,打開編輯器寫幾行代碼,打開終端執行幾行命令...

  有時候我會想,我先只瀏覽一遍視頻,有個大概的印象也行。不過看著看著就把自己看丟了,思維開始阻塞,完全聽不下去,只感覺有人在“#¥%……%&%……&……&([email protected]#¥%……&*&”,然后就睡著了。我猜可能就是懶,腦袋根本不愿意組織視頻中介紹的場景,也不想思考,就是懶。

  動作可以幫助理解抽象的概念。有時候某些概念,方法,光看的話,不容易理解,一但動手做了某些相關的練習,就會有 “哦,原來是這么回事” 的感覺。我無法從科學的角度解釋為什么會這樣,我猜應該是動作與思維之間有很奇妙的關系,思維控制動作,動作也能影響思維。

  遺忘,其實是存檔

  你開心的學會了一門技術,但中間隔了一段時間沒機會使用,時間不用很長,幾天就夠了。幾天以后你會覺得自己之前白學了,全都忘了。這種現象經常在我身上發生,但是我發現,那不是真的忘了,而是被大腦把那部分知識存檔了。因為如果你理解了一樣東西,基本上不太可能把它完全忘了。

  把已經存檔的東西重新再找出來需要花點時間。我會有一個當前狀態,比如最近做移動應用相關的東西,我的當前狀態就在移動應用這里。這時候如果讓我解決個前端問題我可能要想一會,而且非常不愿意去想。我覺得應該可以同時提取幾個狀態,不過我還沒有試過。用大塊的時間集中解決一個主題,我覺得這樣效率更高一些,當然代價就是把其它的東西全都存檔了。

  實際應用

  有人說最好的學習方法就是在實際應用。自己有明確的目標,比如想開發個 App,這個 App 提供的功能你非常清楚,甚至 App 的標志,界面的樣子都已經想好了。帶著強烈的目標去學習,效率可能會更高。一個是因為有很強的學習意愿,因為你知道你要解決哪些問題,還有就是你不會學習多余的東西。當時要做寧皓網的時候,我并不知道什么是 Linux 服務器,也不懂開發,全都是現用現學。再做不出來就快沒飯吃了,所以也是拼了。

  大方向

  我推薦一個大體的學習方向,供您參考。

  學會設計 Web 界面。

  第一門要學的程序語言:JavaScript。

  學會基于 Node.js 的后端應用開發。

  學會基于 Vue.js / React.js 的前端應用開發。

  學會基于 Flutter 的移動端應用開發。

  學會在 Linux 系統上搭建各種服務。

  設計 Web 界面

  先學會 Web 界面的設計。打開瀏覽器訪問一個地址,顯示那個頁面就是 Web 界面,這個界面的組成主要用了三種材料,HTML,CSS 還有 JavaScript。用 HTML 組織界面結構與內容,然后用 CSS 去裝飾界面的結構與內容。什么東西多長,多寬,用什么背景顏色,圓角,陰影,顯示的位置等等,這些都要使用 CSS 控制。

  界面需要一此交互功能,這些交互功能要用JavaScript 語言來設計。比如按了這個喜歡按鈕要去做什么,怎么驗證用戶在表單里輸入的內容等等。我們給 Web 界面寫的 JavaScript 代碼,會直接在瀏覽器上運行,因為瀏覽器都有一個 JavaScript 引擎可以處理這種代碼。

  學習 Web 界面的設計是非常值得的,也是一開始就要學會的。以后不管做什么,多少都會用到你在設計 Web 界面時學到的知識。

  程序語言

  開發應用至少要學一門程序設計語言,我推薦你的第一門程序語言選擇學習 JavaScript。這門語言的用途廣泛,設計 Web 界面時需要用到,開發后端,前端應用的時候也會用到。你也可以用它開發桌面或者移動端應用。打開瀏覽器,新建一個標簽,打開瀏覽器的開發者工具,就可以學習 JavaScript 了。當然最好是在編輯器上練習,比如使用 Atom 或者 VS Code 編輯器。

  后端應用

  后端指的是服務器這頭,對應的前端指的是瀏覽器那頭。在服務器上運行的應用就叫后端應用,我們經常說的網站就是一種后端應用,移動應用需要的接口也是后端應用提供的。后端會響應前端的請求,為前端提供需要的資源,處理前端請求或者發送的數據等等,這些都是后端要做的事情。

  很多語言都可以開發后端應用,比如 PHP,Ruby,Python,Go,還有 JavaScript(基于 Node.js)。這里我推薦大家選擇基于 Node.js 的后端應用開發。你不需要單獨再學一門程序語言,因為你之前已經學了 JavaScript。Node.js 就是讓你可以在服務器上運行 JavaScript 代碼。

  Node.js 起步學習的成本很低,在自己電腦上安裝一個 Node.js 就行了,不需要配置復雜的開發環境,打開編輯器直接就能開始。Node.js 有非常活躍的社區,超級多的可用的功能包。大廠小廠都在用,阿里還專門出了個開源的 Node.js 應用框架叫Egg.js。Uber 公司估值 500 億的時候用的還是非常早期版本的 Node.js。所以開始不用太擔心它的擴展性問題,當你真正需要擔心的時候,那時候你應該已經非常強大了。

  學習使用 Node.js 開發后端應用,你先要理解 Node.js 是怎么回事,然后去選擇一款應用框架,基于框架去開發你想要的后端應用。

  數據庫

  后端應用的數據處理能力要配合一種數據庫,所以你還得再花點時間學會使用一種數據庫, 比如關系型的數據庫系統,像 MySQL / MariaDB / PostgreSQL,這些都屬于關系型數據庫。這種類型的數據庫會使用一種叫 SQL 的語言來處理數據,你的后端應用可以連接到數據庫,然后通過代碼執行用 SQL 語言寫的查詢任務去處理數據庫里的數據,比如把數據從數據庫里提取出來,或者把數據放到數據庫里存起來等等。

  前端應用

  開發 Web 應用,現在比較流行的做法是,把網站的前端還有后端分離開,后端只負責為前端提供數據的處理能力。這就需要你單獨再去開發一個前端應用,這種應用的使用體驗比傳統的前后結合到一塊兒的網站更好一些。一般我們會用 Vue.js,React.js,Angular.js 這種前端應用框架去開發這樣的應用。

  移動端應用

  移動端現在主要是兩大平臺:蘋果(iOS) 與 安卓(Android)。打算為 iOS 平臺開發,就要學一下 Xcode 工具,Swift 語言。要開發安卓平臺的應用,需要學一下 Kotlin / Java,還有 Android Studio 開發工具。這是原生應用的開發方法。成本會高一些,因為要學兩套開發方法,還要維護兩套應用代碼庫。

  還有一種選擇是開發混合型的移動端應用,就是應用里面包含了一些原本應用的功能,比如重力感應,相機等等。還有一部分是來自一個內置的瀏覽器(webview)。就是你可以把一個前端應用,套上一個移動應用的殼子,打包成一個能安裝在 iOS 與 Android 平臺上的應用。比如 Cordova 就能做這件事。

  我們也可以選擇另一種創建原生應用的方法,比如基于Google 的 Flutter 去開發。一套代碼庫,生成兩種平臺的原生應用。Flutter 應用要使用 Dart 語言編寫,所以多少還是要學一下這門語言,不過如果你有JavaScript 語言的基礎,可以很快理解并使用它去開發。Flutter 提供了大量的界面組件,可以讓我們很快開發出漂亮的 iOS 與 Android 原生應用。

  搭建服務

  這里說的搭建服務主要是為應用的后端,比如后端應用的 Web 服務,數據庫服務等等。我們要把在本地寫好的后端應用,放到遠程的服務器上去運行,這樣才能讓所有人使用我們開發的應用。這些服務一般要運行在 Linux 操作系統上。阿里云,騰訊云都會提供這種遠程服務器。

  Linux 有很多發行的版本,比如 CentOS,Ubuntu 等等。不同的發行版都有各自的一些特點。選擇使用哪一種發行版本都可以,你只要能理解其中的一種就行。在服務器上運行的 Linux 操作系統不會給你提供圖形界面,也就是你要做的所有的任務都必須通過命令行界面執行命令來完成。這種工種方式需要適應一陣子,但是這也是非常值得做的事情,也是必須要掌握的一門技術。

  總結

  自學絕對不是一種特別容易的事情,但又充滿了樂趣。根據自己的習慣構建出一套適合自己的自學方法,你將無法阻擋。

創新夢想:www.klyoa.club】個性化軟件定制開發專家!提供專業的軟件開發、手機APP開發、微信開發、小程序定制服務!

本文關鍵字: 軟件開發
業務咨詢
咨詢在線客服
合作咨詢
咨詢在線客服

我們的微信

我們的微博

點擊圖標進入幫助中心
v 幼儿音乐绘本动物狂欢节 1501859423204993057980294781013854758548244528375142546140865120795428302439734846958518525585461600 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();