python安卓手机编程入门自学_编程入门学习路线(附教程推荐)
本文送給勵志成為優秀程序員卻無從下手的朋友們。
編程從來不是一件無趣的事情,相反,它會帶給你無窮無盡的快樂。這是一種創造事物的快樂,就像上帝創造世間萬物一樣,在代碼世界里,你就是無所不能的造物主。
可是如何以最快的速度入門,這才是廣大新手最關心的問題。本文就來談談編程入門的學習路線。
本文適用對象:打算做軟件研發工作的人、無明確目標的在校學生。
如果你符合以上兩點中的任意一點,就請一定耐心讀完這篇文章,保證對你大有幫助。
我看到過很多推薦教程的文章,參考書列了一大堆,根本不是初學者能夠看得進去的。學編程需要一步一個腳印,循序漸進才能掌握牢固。私以為,沒有理解能力差的學生,只有寫的晦澀的書。只要有好的學習方式,每個人都可以輕松學會編程。
因此,本文針對每項技術只推薦最好的教程,這些教程一定是兼顧深度和趣味性的,保證你會愛不釋手地看下去。大部分推薦的教程(包括書和視頻)都是我學習過程中對比后選出的,有些老師講課的幽默程度堪比相聲,這才是真正的寓教于樂。
閑話少說,下面進入正題。
一、技術路線介紹
本節只介紹純IT領域的技術路線,而對于更高級的技術(例如計算機視覺、機器學習、人工智能等等)不予考慮。
技術路線是一條通往該行業的道路,掌握了處于這條路上的所有技術,就具備了該行業的從業能力。因此,我們可以從各個公司的招聘職位中找到技術路線的分類。
目前,軟件開發技術路線主要有:Web后端、Web前端、Android、iOS、Windows客戶端、數據庫、嵌入式等。本節我們將依次對這些技術路線作簡要介紹,具體的學習內容會放到后面章節細講。
1、Web后端
這是當今互聯網浪潮中軟件開發的主力軍。幾乎所有互聯網公司都要提供基于Web的服務(相對于基于客戶端的服務),這些服務的核心就在于Web后端,或稱為服務器端。
與Web前端相比,后端程序運行在服務器上,看不見摸不著,但卻扮演著至關重要的角色。日常生活中我們用百度搜索、發新浪微博、看騰訊視頻、在淘寶購物,這些功能都由后端程序來實現。
Web后端編程又可以根據編程語言的不同分為幾大類:Java、PHP、Node.js。
Java是種古老的編程語言,在Web后端的應用也足夠久,由于Java代碼通常架構清晰、可擴展性強,因此適用于大型Web項目,比如淘寶網就是用Java開發的。
PHP是一種專門用于Web后端的腳本語言,簡單易用,適用于小型Web項目。
Node.js是一項新興技術,采用JavaScript語言開發后端,輕量高效,性能好。
除了這三種主流技術外,使用Ruby on Rails、Python、ASP.NET也可以做后端開發,但并不常用,本文就不予考慮了。
2、Web前端
Web前端是個大一統的世界,就是我們常說的 HTML+CSS+JavaScript,最新的版本是HTML5+CSS3+JavaScript。所以前端程序員只要學好了這三門語言,就可以大有作為了。
3、Android
在移動互聯網時代,Android成為最廣泛使用的移動端操作系統,自然需要大量的開發人員。與Java Web類似,Android開發同樣使用Java語言。
4、iOS
iOS是蘋果手機的操作系統,由于iPhone推出之后在全球市場備受追捧,iOS開發的需求量也很高,而且通常薪資水平高于Android。iOS過去使用Objective-C開發,近年來蘋果公司發布了新的編程語言Swift,開始逐漸替代Objective-C,成為iOS系統的主流開發語言。
5、Windows客戶端
Windows操作系統幾乎占領了個人電腦的絕大部分市場,而Windows客戶端編程就是為你的個人電腦編寫桌面應用程序,我們日常使用的Office、電腦版QQ、迅雷影音、Photoshop等等都屬于這個范疇。
雖然我們每天都在用Windows客戶端程序,但在云計算日益發達的今天,客戶端已經不再是各個互聯網公司首先考慮的平臺。與Web相比,客戶端顯得太笨重,而且無法及時更新。只要是能夠通過瀏覽器提供的服務,就不必考慮開發客戶端軟件,只有那些運算量、數據量非常大的軟件,才需要開發客戶端版本。因此Windows客戶端開發的崗位需求并不大,主要集中在專業軟件領域,比如Adobe公司開發的各種圖像處理軟件、軟件編程IDE、大型企業內部的管理系統等等。
Windows客戶端開發的常用技術有:WinForm,Qt。
WinForm是微軟官方提供的Windows客戶端軟件開發框架,采用C#語言,屬于.NET框架的一部分。使用Visual Studio開發WinForm程序非常方便、快捷。
Qt是一個跨平臺的軟件開發框架,一套程序可以同時運行在Windows、Linux、Android、iOS、Windows Phone等主流操作系統上,功能非常強大。對于想開發跨平臺客戶端的公司來說,使用Qt的確可以節約很多成本。Qt主要使用C++語言實現功能,同時可以選擇使用QML語言描述界面。
除了這兩種技術,還有MFC、WPF。MFC是微軟早期的客戶端框架,由于年代久遠,開發效率低,現在用的不多了。WPF則是微軟推出的比WinForm更優秀的客戶端框架,但由于推廣不利,至今沒有得到廣泛使用。因此本文不再考慮這兩項技術。
6、數據庫
數據庫開發作為單獨的一條技術路線,似乎有些單薄。但鑒于各大互聯網公司都有數據庫工程師這一職位,所以也把它單獨列出來比較好。
實話講,數據庫這一技術路線我不太熟悉,按照我的理解,應該就是針對公司使用某一款數據庫系統,比如Oracle,做相關開發和性能優化。
7、嵌入式
嵌入式開發更偏底層,似乎離IT越來越遠了。但結合現在日益火熱的物聯網來看,嵌入式將迎來新的高潮。
如果有一些名詞你不了解它的意思,請在評論區提問,或自行百度,或者先放著也行。畢竟作為一個編程初學者,這些技術路線恐怕也不太好理解。所以繼續往下看吧,等知識積累到一定程度這些概念就自然明白了。本節只對這些技術路線做了大概的介紹,下一節讓我們開始踏上學習的道路。
二、編程語言
作為一個什么都不懂的小白,學習編程的第一步當然是掌握一門編程語言。本節就來介紹常見的編程語言的學習路線。
首先,先明確一個觀點,作為一個程序員,只會一種編程語言是遠遠不夠的。最好精通1~2門語言,基本掌握其它所有常見的語言。這聽起來有些嚇人,但其實沒那么困難。因為大部分編程語言都是很相似的,比如C語言、C++、C#、Java可以稱為類C語言,它們都是從C語言開始一步步擴展得到的,掌握了其中一種,其它的可以觸類旁通。
1、C語言
信息類專業的大學生通常都會在一年級上C語言這門課,也很可能是大學期間唯一的一門編程語言課。所謂師傅領進門,修行在個人,通過學習C語言邁入編程世界的大門是再合適不過了。雖然也有人提倡學習Python作為第一門編程語言,可我覺得那未免太浮躁了。剛開始應該打好基礎,而不是追求炫酷的效果。C語言是一門高級語言,又與計算機硬件息息相關,通過指針操作可以真切感受到數據的流動,這是Python無法做到的。因此,我的建議是,不管今后打算從事哪個技術路線,C語言都是必學的第一門語言。
然而遺憾的是,我由于是在課堂上學的C語言,所以這方面的優秀教材了解的也不多。無論是學校使用的各個版本的《C語言程序設計》,還是國外大牛寫的《The C Programming Language》,都未免太過枯燥。據說有一本科普性質的《啊哈C》寫的非常通俗易懂,麻煩讀過的同學點評一下是否真的如此。其它好的教程也希望同學們幫我補充。
2、C#
學完C語言很多人會產生疑問,不知道C語言能干什么。如果不及時消除這一顧慮,恐怕會讓大部分人喪失學下去的信心。然而C語言的用途對于初學者來說很難體現出來,所以下一步我們轉向C語言的增強版本——C#語言(讀音:C sharp)。
C#語言是微軟推出的面向對象編程語言。“面向對象”將是一個伴隨程序員一生的詞匯,因此從此刻開始,我們要隨時嘗試理解:什么是面向對象。
簡單來說,面向對象是相對于面向過程而言的。C語言是一個典型的面向過程語言,因為C程序的執行流程可以很容易地畫一張流程框圖來表示,它強調程序員編寫程序時是面向程序執行過程考慮的。而C#則是一個典型的面向對象語言,C#程序的執行流程通常很難用流程圖表示,這是因為程序員編寫C#程序時考慮的不是一個完整的從頭到尾的執行流程,而是各個對象之間的調用關系。
雖然我已經盡力了,但上面這段話肯定無法讓初學者真正理解面向過程和面向對象的關系。不過不要緊,編程思想從來不是紙上談兵得來的,必須經過充分的實踐才能領悟。
幸運的是我收集到了一套完整的C#視頻教程,以及后續的WinForm視頻教程。學完這兩個,就會對面向對象編程有一定的理解。雖然今后并不一定從事Windows客戶端的開發,但學習這兩個內容可以幫助更好地理解后續更深層次的Java Web和Android。看視頻的同時一定要照著在自己電腦上寫一遍,這樣才能印象深刻。
這是視頻教程鏈接:
C#基礎 密碼:87w5
WinForm 密碼:y6o1。這套視頻也許是我看過的最有趣的視頻了,希望大家不要錯過。
3、Java(建議精通)
如果學過C#再學Java,你會發現兩者驚人的相似。Java從難度上來說和C#一樣簡單(甚至更簡單),而用途卻比C#廣泛得多。這在很大程度上得益于Java的跨平臺特性,也使Java成為了Web項目的主力軍。
推薦的視頻教程:
【傳智播客黑馬訓練營Java基礎】
地址1 官網
地址2 百度網盤 密碼:fvvw
4、C++(建議精通)
并非每個同學都需要學習C++,Java和C++精通其中一門即可。但C++與Java并不是效能重復的編程語言,相反,它們分別統治著各自的領域,就像Java統治Web領域一樣,C++統治著性能敏感的基礎設施、視頻圖像處理等領域。精通Java或C++都不容易(特別是C++,堪稱最難編程語言),因此兩者擇一即可。
C++方面仍然沒能找到優秀的視頻教程,需要大家幫忙提些建議。倒是有比較優秀的書籍,比如《C++ Primer》,值得一看。
5、JavaScript(建議精通)
JavaScript是前端開發的利器,對于前端工程師來說,精通JavaScript是必須的。近年來JavaScript甚至蔓延到了后端編程,以Node.js為代表的后端JavaScript框架使它成為全能的編程語言,大有一統江湖之勢。
這是與Java和C++一樣建議精通的語言,當然只是對前端工程師有這個要求,后端工程師倒不必花太多精力在這上面。
5、Python(可選)
Python是近年來日益火爆的一門編程語言。隨著Python庫的層出不窮,Python在科學計算、Web、大數據與機器學習等領域都展現了驚人的實力。
與Java類似,Python也是一門優秀的面向對象編程語言,而且更簡潔。但這不是重點,與前面所有語言不同的是,Python是一門動態類型語言。
前面提到的四種語言C、C#、Java、C++都是靜態類型語言,它們需要一個稱作“編譯器”的東西,把源代碼編譯成機器碼,才能在計算機上運行。而這一特點導致了所有變量都必須事先規定類型,比如我們習以為常的寫法
int i = 0;
就事先規定了變量i是int類型。因此它們被稱為靜態類型語言,即類型是靜態的,不能改變。
以Python為代表的動態類型語言則打破了這個限制,我們完全可以直接這樣寫
i = 0;
i = "Hello";
既不用規定變量類型,又可以隨時給它賦不同類型的值,這就是動態類型語言的特點。這樣做方便了許多,但代價是Python代碼需要運行在Python解釋器上,而不是直接運行在CPU上,因此執行效率會低很多,也就是通常說的動態語言比靜態語言“慢”。
有了前幾種語言的基礎,學Python是很簡單的事情,因此不必推薦教程了,只要去網上隨便搜一篇介紹Python語法的博客看看就搞定了。
6、PHP(可選)
程序員中流傳著這樣一個說法——“PHP是世界上最好的編程語言”。從提出這句話的那一刻起,就免不了一場編程語言界的腥風血雨。以至于PHP似乎成了其它編程語言的敵人,備受人們攻擊。然而在這樣艱苦的環境中存活下來,而且能占據很大一部分Web市場,只能說PHP有其強大的優勢。PHP開發Web項目非常快,而且輕量,是一種腳本語言,嵌入到HTML里面就可以運行。因此小公司使用PHP很容易搭建起自己的Web業務。然而Web項目規模大到一定程度時,PHP就有些難以勝任了,需要Java這樣重量級的Web框架才可以支撐。因此,根據應用場景選擇合適的技術才是最重要的。
PHP教程尚待發掘...
7、Lisp
Lisp是一門古老的語言,老到大部分人早已忘記它的存在。我也是近兩年才了解到這門編程語言。隨著歷史消逝的編程語言數不勝數,能夠在50年后仍然保持活躍生命力的語言少之又少,Lisp是其中之一。1958年人工智能的先驅約翰·麥卡錫(John McCarthy)為了解決人工智能領域的問題而發明了Lisp語言,比C語言的發明早了14年。然而Lisp中包含的編程思想卻比現在最流行的語言早了幾十年。看看《黑客與畫家》的作者、硅谷創業之父保羅·格雷厄姆是怎么說的
如果我們把流行的編程語言,以這樣的順序排列:Java、Perl、Python、Ruby。你會發現,排在越后面的語言,越像Lisp。
Python模仿Lisp,甚至把許多Lisp黑客認為屬于設計錯誤的功能,也一起模仿了。至于Ruby,如果回到1975年,你聲稱它是一種Lisp方言,沒有人會反對。
編程語言現在的發展,不過剛剛趕上1958年Lisp語言的水平。
——《為什么Lisp語言如此先進?》,保羅·格雷厄姆
之所以我在這里提到Lisp語言,不是因為它多么有用(事實上Lisp的確沒多少實際的應用),而是因為它蘊含的強大的編程理念,一種完全不同于C系列語言的理念。然而我對Lisp的了解,或許根本談不上了解,僅僅局限于道聽途說,最早是通過王垠的博客,后來是《黑客與畫家》。這兩大高手對Lisp的強力推薦,使我想要做些嘗試。無奈一直沒能抽出時間專心研究,而且網上Lisp的參考資料又少得可憐。目前Lisp最流行的兩大方言是Common Lisp和Scheme,感興趣的朋友可以關注一下,如果遇到有好的教程也可以分享給大家。
8、其它語言
還有一些應用不那么廣泛但在特定領域非常流行的語言,比如Objective-C,Ruby,Go等等,它們都有著各自不可替代的作用。不過在初學階段,不必太關心這些小眾語言,因為從上面那些大眾語言轉到這些小眾語言上是很容易的。
三、計算機基礎
現在才學計算機基礎,是不是有點晚?
當然不是,現在剛剛好。有了上面的編程基礎,我們才能深入學習計算機體系結構、操作系統、計算機網絡、算法等知識,這些知識不像編程那樣能看到實際的效果,但卻是提升水平的關鍵。
1、計算機體系結構
計算機體系結構告訴我們計算機由哪些硬件組成,它們各自完成什么工作,如何結合成一個有機的整體。它們是物理上真實存在的東西,相當于計算機的骨架,支撐著位于其上的軟件系統。
對于程序員來說,這部分知識倒不必過于深入,推薦一本必讀書:
《深入理解計算機系統》 Randal E.Bryant,David R. O'Hallaron
建議閱讀英文版,因為讀過這本書后我深深感受到原來英語可以寫得這樣通俗易懂,甚至是一些讓我覺得無法用中文說清楚的地方。
最好買一本紙質書,這樣就能多做筆記,以后需要的時候也能翻看。如果經濟不允許的話,可以從這里下載電子版,但是掃描的質量很差,可能會影響閱讀心情。
我在閱讀這本書的過程中寫了一系列博客《深入理解計算機系統》,歡迎前來交流~
2、操作系統
操作系統是運行在計算機上的最重要的系統軟件,從一開機它就開始運行,直到關機才最后一個結束。操作系統對運行于其上的應用軟件是至關重要的,從而也導致了Windows和Linux兩大派系的世紀之爭。學習操作系統,才能更高效地開發應用程序,這一點應該不難理解。
操作系統方面的課程尚待補充。
3、計算機網絡
互聯網是這個時代最偉大的發明,學好計算機網絡才能勝任今后的各項工作,因為這些工作無一不與互聯網相關。
推薦一套計算機網絡視頻教程:
這套教程內容很多,講解非常詳細。耐心看完整套教程,你就能看透計算機網絡的本質。
4、算法
算法無疑是程序員的基本功,推薦書籍:
《算法導論》
這本書介紹的算法很全面,把它認真讀完并最好親手實踐每一個算法,一定會大有收獲。
5、其它
其它一些計算機基礎知識,比如數據庫技術、計算機圖形學、多處理器編程、網絡與信息安全,也都是很值得學的內容,但是大家都精力有限,沒必要樣樣精通,可以選自己感興趣的部分補強。
四、Java Web后端開發
學習了第二節和第三節提到的知識,基本上可以稱為一個合格的程序員了。下一步的發展就要根據市場行情,選擇一門專項技術,準備進入求職階段。
前面的內容可以稱得上是“九陽神功”,修煉你的內力,而后面的內容就是“九陰真經”,能夠征戰沙場的武器。兩者相輔相成,缺一不可。
本節從后端開發談起。第一節中講到主流后端開發有三種:Java Web、PHP和Node.js,三者的思想是一致的,只不過在實現方式上有所不同,因此我主要以Java Web為例介紹。
從簡單的C語言控制臺程序,到WinForm窗體應用程序,我們接觸到越來越復雜的軟件形式。而Web應用程序,又與前面兩種完全不同。我們習以為常的軟件都是通過一個Setup.exe安裝包在計算機上安裝得到的,因此它們稱為Windows客戶端。而另外一些軟件,比如百度搜索、騰訊新聞、淘寶網等等,我們習慣稱之為網站,但實際上,它們也是軟件,稱之為Web應用程序。這種軟件運行在服務器上(服務器就是放置在機房里的一臺高性能電腦),用戶通過瀏覽器訪問它們。
我們需要先搞懂Web程序的工作原理,為什么用戶通過瀏覽器可以訪問到服務器上運行的程序?它們如何利用HTTP協議通信?用戶數據存在哪里?弄明白這些基本邏輯,再學習如何寫程序實現想要的功能。
推薦一套Java Web視頻教程:
《黑馬程序員 30天輕松掌握JavaWeb》
鏈接:http://pan.baidu.com/s/1cmw16u 密碼:93kt
學習完這套教程,就能夠開發簡單的網站了,但還不足以應對實際工作的需求。
為了提高開發效率,市面上出現了許多優秀的Web開源框架。在Java Web領域,有三大框架之稱的——Spring、Struts和Hibernate為開發者提供了許多便利,基本是Java Web程序的標配。學習這三大框架,可以更深入地理解如何設計軟件架構,比如MVC、IOC等等。
需要提醒大家的是,Web技術發展日新月異,各種框架層出不窮,即使是三大框架,也有過時的一天(目前看來,其實大部分互聯網公司都已經轉向更輕量、高效的框架了)。所以我們學習并不是為了學會用一種工具,而是要掌握它們的設計思想,當你掌握了三大框架的設計理念,相信面對其它新興框架,就可以很容易透過現象看本質,找到共同的地方。
五、Web前端
Web前端與Web后端合作完成整個Web項目的開發。前后端分離也正是Web軟件最優秀的設計理念。
前端需要用HTML語言制作網頁,用CSS描述網頁的樣式,用JavaScript給網頁提供動態特性。這幾樣技術在第二節中已經給出了教程,很容易掌握,在邏輯方面并沒有后端程序那么復雜。
但前端技術不止于此。與后端類似,前端框架也是層出不窮,有過之而無不及。如今流行的各種框架例如React、Angular.js、Vue.js、Bootstrap等等,都需要我們多多嘗試,深入理解為何需要這些框架,它們能幫助我們做哪些事情。對各個框架有個基本的了解,才能在技術選型時游刃有余。由于前端水平有限,我就不做過多推薦了,有一篇非常好的文章推薦給大家看:
六、Android
安卓經過近些年的快速發展,成為目前世界上最優秀的移動端操作系統,至今仍活力不減。學習安卓,主要是學習使用Android SDK提供的API實現各種功能,同時深入理解Android的運行機制。
推薦一本參考書:
《第一行代碼Android》郭霖 著
這本書思路清晰,講解生動,很適合初學者閱讀。有了這些基礎,等到真正做實際項目的時候,當你遇到更多實際的問題,比如圖片緩存、界面卡頓、屏幕適配等等,到時候只要針對性地查找解決方案,或者利用現有的開發框架就可以了,經驗也會隨之慢慢豐富。
七、成為編程大牛
這篇文章從開始到現在,已經過去了幾個月,中間屢想終止,最后還是堅持寫完了。常常感到慚愧,因為我實在稱不上編程領域的大牛,卻斗起膽來寫這么一篇宏大的文章,豈不是誤人子弟。所以如果你看到了這里,請一定對本文的所有文字持保留態度,這里沒有真理,只是我的一些分享,不一定適合所有人。
當然,如何成為編程大牛,我更是一點經驗也沒有。不過經過這些年的摸索,還是想給大家提幾點具體的建議:
去公司做實際的項目,而不是在學校做簡陋的實驗品。找個靠譜的公司實習,接觸實際的項目,會學到遠多于在校期間的知識。
善于做記錄,不要學了新知識忘了舊知識。寫博客就是一個很好的方式,把看的技術書籍、項目中用到的技術、遇到的問題用博客的方式總結下來,會加深自己的理解,而且方便今后回顧。
最后,祝大家在技術的道路上勇往直前,成為編程大牛!
八、特別推薦:
編程學習網站:慕課網
參考資料
總結
以上是生活随笔為你收集整理的python安卓手机编程入门自学_编程入门学习路线(附教程推荐)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 欧姆龙PLC 通过CJ1W-EIP21实
- 下一篇: ext4文件系统的delalloc选项造