如何自學(xué)編程
學(xué)習(xí)編程是一門苦差事,尤其是剛?cè)腴T的時(shí)候,對(duì)著哪些它認(rèn)識(shí)你,你不認(rèn)識(shí)它的代碼別提是多么痛苦的一件事情了,很多朋友可能受不了這種痛苦從而放棄了學(xué)習(xí),因?yàn)楹芏嗳藳](méi)有那個(gè)耐心和毅力。當(dāng)然學(xué)習(xí)編程除了耐心和毅力之外還是需要一些方法和技巧的,下面就跟隨學(xué)習(xí)啦小編一起來(lái)看看如何自學(xué)編程吧。
自學(xué)編程
首要之首:不要急于選擇一種語(yǔ)言
新手們有一個(gè)常見(jiàn)的錯(cuò)誤就是猶豫于判斷哪種編程語(yǔ)言是做好的、最該先學(xué)的。 我們有很多的選擇,但你不能說(shuō)那種語(yǔ)言最好。 我們應(yīng)該理解:說(shuō)到底,什么語(yǔ)言并不重要。 重要的是理解數(shù)據(jù)結(jié)構(gòu)、控制邏輯和設(shè)計(jì)模式。任何一種語(yǔ)言甚至一種簡(jiǎn)單的腳本語(yǔ)言都會(huì)具有所有編程語(yǔ)言都共有的各種特征,也就是說(shuō)各種語(yǔ)言是貫通的。 我正在攻讀我的計(jì)算機(jī)學(xué)學(xué)位,我編程使用Pascal,匯編,和C語(yǔ)言,事實(shí)上我從來(lái)沒(méi)有把它當(dāng)成職業(yè)以求獲得回報(bào)。 我一直在自學(xué)編程,工作上用不到它,我使用現(xiàn)有的知識(shí),參考各種文檔和書本,學(xué)習(xí)它們的用法。 因此,不要急于選擇何種編程語(yǔ)言。 找出你想要開(kāi)發(fā)的東西,使用一種能夠完成這項(xiàng)任務(wù)的語(yǔ)言,這就可以了。
根據(jù)各種開(kāi)發(fā)平臺(tái)的不同,有很多不同的軟件開(kāi)發(fā)形式可供你選擇:從網(wǎng)站應(yīng)用到桌面軟件到智能手機(jī)軟件到命令行腳本工具。 這篇文章里,我將重點(diǎn)介紹一些很受歡迎的入門教程和資源,它們能幫助你學(xué)會(huì)如何在各種主流的平臺(tái)上編程開(kāi)發(fā)。 我先假設(shè)你是一個(gè)悟性很強(qiáng)的讀者,但對(duì)于新手,當(dāng)我談?wù)摮绦虼a時(shí)還是要按照入門級(jí)的水平。 因?yàn)榧词故悄阕约嚎匆黄幊倘腴T 手冊(cè),如果發(fā)現(xiàn)都能理解時(shí),心情自然會(huì)很高興,這樣利于你進(jìn)一步學(xué)習(xí)。
桌面腳本
想要?jiǎng)邮衷赪indows里或蘋果系統(tǒng)里編程,最簡(jiǎn)單的方法是從一種腳本語(yǔ)言或宏語(yǔ)言開(kāi)始,例如AutoHotkey (Windows) 或 Automator (蘋果系統(tǒng))。 如今一些硬件程序員沖著他們的屏幕大喊大叫,說(shuō)AHK和AppleScript并不是真正的編程語(yǔ)言。 也許他們說(shuō)的是對(duì)的技術(shù)上,這些種類的語(yǔ)言只能做一些上層的編程。 但是對(duì)于那些只是想來(lái)脫盲、想在他們的電腦里實(shí)現(xiàn)一些能自動(dòng)運(yùn)行的程序的新手來(lái)說(shuō),這些語(yǔ)言會(huì)是一個(gè)絕妙的入門入口而且你會(huì)吃驚于它們豐富的功能。
例如,大家都喜愛(ài)的Texter就是Adam使用AutoHotkey開(kāi)發(fā)的能獨(dú)立運(yùn)行的Windows應(yīng)用程序,所以說(shuō)這種腳本語(yǔ)言遠(yuǎn)不是只能開(kāi)發(fā)小規(guī)模腳本軟件。 如果你想從AutoHotkey入手,可以參考Adam的指導(dǎo): how to turn any action into a keyboard shortcut using AutoHotkey(然后,你可以下載 Texter源代碼 看看這個(gè)功能齊全的使用AHK開(kāi)發(fā)的Windows應(yīng)用程序的內(nèi)部結(jié)構(gòu))。
Web開(kāi)發(fā)
除了把自己約束在特定的編程語(yǔ)言和特定的操作系統(tǒng)上,你還可以在瀏覽器里開(kāi)發(fā)你的殺手锏程序,讓它在互聯(lián)網(wǎng)上運(yùn)行,這就是webapp。 歡迎來(lái)到奇妙的web編程世界。
HTML 和 CSS:開(kāi)發(fā)網(wǎng)站,你第一件要知道的事情就是HTML(網(wǎng)頁(yè)就是由它組成的)和CSS(一種讓外觀更好看的樣式標(biāo)記)。 HTML 和 CSS 并不是編程語(yǔ)言它們只是頁(yè)面的結(jié)構(gòu)和樣式信息。 然而,在開(kāi)始開(kāi)發(fā)web應(yīng)用程序之前你必須要學(xué)會(huì)如何手工的編寫簡(jiǎn)單的HTML和CSS,web頁(yè)面是任何webapp的前端顯示部分。 這個(gè) HTML 指導(dǎo) 是你入手的好地方。
JavaScript:當(dāng)你可以通過(guò)HTML和CSS構(gòu)建一個(gè)靜態(tài)頁(yè)面后,事情就開(kāi)始變得有趣了因?yàn)榈搅嗽搶W(xué)JavaScript的時(shí)候了。 JavaScript是一種web瀏覽器上的編程語(yǔ)言,它的魔力就是能在頁(yè)面里制造一些動(dòng)態(tài)效果。 JavaScript可以做bookmarklets, Greasemonkey 腳本, 和 Ajax, 所以它是web上各種好東西的關(guān)于因素。 學(xué)習(xí)JavaScript從這里開(kāi)。
服務(wù)器端腳本:一旦你學(xué)會(huì)了網(wǎng)頁(yè)里的知識(shí),你就要開(kāi)始對(duì)它添加一些動(dòng)態(tài)服務(wù)器操作為了實(shí)現(xiàn)這些,你需要把目光轉(zhuǎn)移到服務(wù)器端腳本語(yǔ)言,例如PHP, Python, Perl, 或 Ruby。 舉個(gè)例子,如果想要制作一個(gè)網(wǎng)頁(yè)形式的聯(lián)系方式表單,根據(jù)用戶的輸入發(fā)送郵件,你就需要使用服務(wù)器端腳本來(lái)實(shí)現(xiàn)。 像PHP這樣的腳本語(yǔ)言可以讓你跟web服務(wù)器上的數(shù)據(jù)庫(kù)進(jìn)行溝通,所以如果你想搭建一個(gè)用戶可以登錄注冊(cè)的網(wǎng)站,這樣的語(yǔ)言正是你需要的。 Webmonkey 是一個(gè)優(yōu)秀的web開(kāi)發(fā)資源網(wǎng)站,里面有大量的各種web編程語(yǔ)言的指導(dǎo)手冊(cè)。 閱讀一下他們的 PHP 初學(xué)者指南。 當(dāng)你感覺(jué)差不多了的時(shí)候,看看WebMonkeys PHP and MySQL tutorial 學(xué)習(xí)如何使用PHP跟數(shù)據(jù)庫(kù)交互。 網(wǎng)上最好的要數(shù)PHP語(yǔ)言官方的在線文檔和函數(shù)參考了。 每個(gè)知識(shí)點(diǎn)上 (例如strlen function這個(gè))都在后面列出來(lái)用戶的評(píng)論注釋,這些對(duì)于文檔的本身是非常有價(jià)值的。 (我很喜歡PHP,但還有很多其他種服務(wù)器端的腳本語(yǔ)言你們都可以選擇。)
Web框架:過(guò)去數(shù)年里,web開(kāi)發(fā)人員在開(kāi)發(fā)動(dòng)態(tài)網(wǎng)站的過(guò)程中不得不一遍又一遍的針對(duì)重復(fù)遇到的問(wèn)題寫出重復(fù)的代碼。 為了避免這種每次開(kāi)發(fā)一些新網(wǎng)站都會(huì)重復(fù)勞動(dòng)一次的問(wèn)題,一些程序員動(dòng)手搭建了一些框架,讓框架替我們完成重復(fù)性的工作。 非常流行的 Ruby on Rails 框架,作為一個(gè)例子,它利用Ruby編程語(yǔ)言,為我們提供了一個(gè)專門面向web的架構(gòu),普通的web應(yīng)用程序都能使用它來(lái)完成。 事實(shí)上,Adam使用Rails開(kāi)發(fā)了他的第一個(gè)正式的(而且是嘆為觀止的!)web應(yīng)用程序,MixTape.me。這就是 他的如何在沒(méi)有任何經(jīng)驗(yàn)的情況下搭建一個(gè)網(wǎng)站。還有一些其他的web開(kāi)發(fā)框架包括 CakePHP (針對(duì) PHP 編程者), Django (針對(duì) Python 編程中), 以及 jQuery (針對(duì) JavaScript).
Web APIs: API (應(yīng)用層序編程接口) 是指不同的軟件之間相互交換的程序途徑。 例如,如果你想在你的網(wǎng)站上放一個(gè)動(dòng)態(tài)的地圖,你可以使用Google Map,而不需要開(kāi)發(fā)自己的地圖。 The Google Maps API 可以輕松的讓你通過(guò)JavaScript在程序中引入一個(gè)地圖到你的頁(yè)面上。 幾乎所有的現(xiàn)代的你所知道的和喜愛(ài)的web服務(wù)都提供了API,通過(guò)這些API你可以獲取到他們的數(shù)據(jù)和小工具,在你的應(yīng)用程序里就可以使用這些交互過(guò)來(lái)的東西了,例如Twitter, Facebook, Google Docs, Google Maps, 這個(gè)列表遠(yuǎn)不止這些。 通過(guò)API把其他web應(yīng)用集成到你的web應(yīng)用里是現(xiàn)在富web開(kāi)發(fā)的前沿地帶。 每個(gè)優(yōu)秀的主流的web服務(wù)API都附帶有完整的文檔和一些快速入手的指導(dǎo)(例如,這個(gè)就是 Twitter的)。 瘋狂吧。
命令行腳本
如果你想開(kāi)發(fā)一個(gè)程序,讓它讀取文字或文件、輸入輸出一些有用的東西,那么,命令行腳本語(yǔ)言將是個(gè)不錯(cuò)的選擇。 然而它并不像web應(yīng)用程序和桌面應(yīng)用程序那樣有吸引力和好看的外觀,但是作為快速開(kāi)發(fā)的腳本語(yǔ)言,你卻不能忽視它們。
很多的在linux平臺(tái)上運(yùn)行的web腳本同樣能以命令行模式運(yùn)行,例如Perl,Python和PHP,所以如果你學(xué)會(huì)了使用它們,你將能在兩種環(huán)境中使用它們。 我的學(xué)習(xí)道路一直沒(méi)離開(kāi)Peal太遠(yuǎn),我自學(xué)Python使用的是這本優(yōu)秀的在線免費(fèi)書Dive into Python。
如果成為一個(gè)Unix高手也是你學(xué)習(xí)的目標(biāo),那么你絕對(duì)要精通bash這個(gè)腳本語(yǔ)言。 Bash是Unix和Linux環(huán)境下的一種命令行腳本語(yǔ)言,它能夠?yàn)槟阕鏊缘氖虑椋簭淖詣?dòng)備份數(shù)據(jù)庫(kù)腳本到功能齊全的用戶交互程序。 起初我沒(méi)有任何使用bash腳本的經(jīng)驗(yàn),但最終我用bash開(kāi)發(fā)了一個(gè)全功能的個(gè)人代辦任務(wù)管理器: Todo.txt CLI。
插件(Add-ons)
如今的web應(yīng)用程序和瀏覽器都可以通過(guò)一些擴(kuò)展軟件來(lái)豐富自己的功能。 由于一些現(xiàn)有的軟件,例如Firefox、WordPress越來(lái)越受到開(kāi)發(fā)人員的關(guān)注,插件的開(kāi)發(fā)也日益流行,人們都在說(shuō)But if only it could do THIS
只要你掌握了HTML,JavaScript和CSS,你就可以在任何的瀏覽器里開(kāi)發(fā)你想要的很多東西。 Bookmarklets, Greasemonkey user scripts, 和 Stylish user styles這些軟件都是用的更普通頁(yè)面一樣的語(yǔ)言寫成的, 這幾個(gè)東西都值得你去研究一些。
更高級(jí)的瀏覽器擴(kuò)展程序,例如Firefox的擴(kuò)展,它們可以幫助你很多。 開(kāi)發(fā)Firefox的擴(kuò)展,舉個(gè)例子,需要你精通JavaScript和XML(一種標(biāo)記語(yǔ)言,類似HTML,但具有更嚴(yán)格的格式)。 早在2007年我就寫下來(lái) how to build a Firefox extension, 這是我在笨手笨腳的研究網(wǎng)上的一些學(xué)習(xí)資料后獲得的成果。
很多免費(fèi)的、受歡迎的web應(yīng)用程序都提供了擴(kuò)展框架,例如WordPress 和 MediaWiki。 這些應(yīng)用程序都是用PHP寫成的,所以只有對(duì)PHP熟悉你才能做這些事情。 這個(gè)就是 如何編寫WordPress插件。 而想駕馭Google Wave前沿技術(shù)的開(kāi)發(fā)人員可以從使用HTML, JavaScript, Java, 和 Python 寫小組件和小工具開(kāi)始。 我寫的第一個(gè)Wave bot是跟著這個(gè) 一個(gè)下午時(shí)間的快速入門指導(dǎo)開(kāi)始的。
開(kāi)發(fā)桌面上的Web應(yīng)用程序
學(xué)習(xí)編程最好的結(jié)果是你在一個(gè)環(huán)境下學(xué)的東西可以應(yīng)用到另外的環(huán)境中。 先學(xué)習(xí)開(kāi)發(fā)web應(yīng)用程序的好處就是我們有一些方法可以讓web應(yīng)用程序直接在桌面上運(yùn)行。 例如, Adobe AIR 是一個(gè)跨平臺(tái)的即時(shí)運(yùn)行平臺(tái),它能讓你編寫的程序運(yùn)行在任何裝有AIR的操作系統(tǒng)的桌面上。 AIR應(yīng)用程序都是由HTML, Flash, 或 Flex 寫成的,所以它能讓你的web程序在桌面環(huán)境中運(yùn)行。 AIR是開(kāi)發(fā)部署桌面應(yīng)用程序的一個(gè)優(yōu)秀的選擇,就像我們提到過(guò)的 10個(gè)讓你值得去安裝AIR的應(yīng)用程序。
移動(dòng)應(yīng)用開(kāi)發(fā)
能在iPhone或者Android智能手機(jī)上運(yùn)行的手機(jī)應(yīng)用程序的開(kāi)發(fā)如今正呈現(xiàn)井噴之勢(shì),所以你也可以夢(mèng)想一下如何在iTunes應(yīng)用商店里通過(guò)你的天才程序大賺一筆。 但是,作為一個(gè)編碼新手,直接奔向移動(dòng)開(kāi)發(fā)所經(jīng)歷的學(xué)習(xí)曲線可能會(huì)很陡,因?yàn)樗枰闶煜じ呒?jí)的編程語(yǔ)言,例如Java和Objective C。 然而,你當(dāng)然應(yīng)該看看iPhone 和 Android 編程究竟是什么樣子的。 閱讀這個(gè) 簡(jiǎn)單的iPhone應(yīng)用開(kāi)發(fā)例子 可以初步認(rèn)識(shí)一下iPhone程序的開(kāi)發(fā)過(guò)程。 Android 程序都是由Java寫成的,這有一個(gè) 簡(jiǎn)單的視頻教程教你如何開(kāi)發(fā)第一個(gè)Hello Android程序(注:可能需要代理才能看這個(gè)視頻)。
最后:耐心,刻苦,嘗試,失敗
好的程序員都有一個(gè)不達(dá)目的誓不罷休的品質(zhì),他們會(huì)驚喜于通過(guò)長(zhǎng)期推敲和失敗換來(lái)的一點(diǎn)成績(jī)。 學(xué)會(huì)編程會(huì)有很好的回報(bào)的,但是學(xué)習(xí)的過(guò)程可能會(huì)是飽受挫折和孤獨(dú)的。 如果有可能,最好找個(gè)伴一起陪你做這件事。 想精通編程,這和其他事情一樣,需要堅(jiān)持,反復(fù)嘗試,獲得更多的經(jīng)驗(yàn)。
看過(guò)“ 如何自學(xué)編程 ”的人還看了: