首要之首:不要急於選擇一種語言新手們有一個常見的錯誤就是猶豫於判斷哪明睜種編程語言是做好的、最該先學的
我們有很多的選擇,但你不能說那種語言「最好」
我們應該理解:說到底,什麼語言並不重要
重要的是理解數據結構、控制邏輯和設計模式
任何一種語言—甚至一種簡單的腳本語言—都會具有所有編程語言都共有的各種特徵,也就是說各種語言是貫通的
我正在攻讀我的計算機學學位,我編程使用Pascal,匯編,和C語言,事實上我從來沒有把它當成職業以求獲得回報
我一直在自學編程,工作上用不到它,我使用現有的知識,參考各種文檔和書本,學習它們的用法
因此,不要急於選擇何種編程語言
找出你想要開發的東西,使用一種能夠完成這項任務的語言,這就可以了
根據各種開發平台的不同,有很多不同的軟體開發形式可供你選擇:從網站應用到桌面軟體到智能手機軟體到命令行腳本工具
這篇文章里,我將重點介紹一些很受歡迎的入門教程和資源,它們能幫助你學會如何在各種主流的平台上編程開發
我先假設你是一個悟性很強的讀者,但對於新手,當我談論程序代碼時還是要按照入門級的水平
因為即使是你自己看一篇編程入門手冊,如果發現都能理解時,心情自然會很高興,這樣利於你進一步學習
桌面腳本想要動手在Windows里或蘋果系統里編程,最簡單的方法是從一種腳本語言或宏語言開始,例如AutoHotkey(Windows)或Automator(蘋果系統)
如今一些硬體程序員沖著他們的屏幕大喊大叫,說AHK和AppleScript並不是「真正」的編程語言
也許他們說的是對的—技術上,這些種類的語言只能做一些上層的編程
但是對於那些只是想來脫盲、想在他們的電腦里實現一些能自動運行的程序的新手來說,這些語言會是一個絕妙的入門入口—而且你會吃驚於它們豐富的功能
例如,大家都喜愛的Texter就是Adam使用AutoHotkey開發的能獨立運行的Windows應用程序,所以說這種腳本語言遠不是只能開發小規模腳本軟體
如果你想從AutoHotkey入手,可以參考Adam的指導:(然後,你可以下基亂載Texter源代碼看看這個功能齊全的使用AHK開發的Windows應用程序的內部結構)
Web開發HTML和CSS:開發網站,你第一件要知道的事情就是HTML(網頁就是由它組成的)和CSS(一種讓外觀更好看的樣式標記)
HTML和CSS並不是編程語言—它們只是頁面的結構和樣式信息
然而,在開始開發web應用程序之前你必須要學會如何手工的編寫簡單的HTML和CSS,web頁面是任何webapp的前端顯示部分
這個HTML指導是你入手的好地方
JavaScript:當你可以通過HTML和CSS構建一個靜態頁面後,事情就開始變得有趣了—因為到了該學JavaScript的時候了
JavaScript是一種web瀏覽器上的編程語言,它的魔力就是能在頁面里製造一些動態效果
JavaScript可以做,腳本,和Ajax,所以它是web上各種好東西的關於因素
學習JavaScript從這里開
伺服器端腳本:一旦你學會了網頁里的知識,你就要開始對它添加一些動態伺服器操作—為了實現這些,你需要把目光轉移到伺服器端腳本語言,例如PHP,Python,Perl,或Ruby
舉個例子,如果想要製作一個網頁形式的聯系方式表單,根據用戶的輸入發送郵件,你就需要使用伺服器端腳本來實現
像PHP這樣的腳本語言可以讓你跟web伺服器上的資料庫進行溝通,所以如果你想搭建一個用戶可以登錄注冊的網站,這樣的語言正是你需要的
Webmonkey是一個優秀的web開發資源網站,裡面有大量的各種web編程語言的指導手冊
閱讀一下他們的PHP初學者指南
當你感覺差不多了的時候,看看WebMonkey』sPHPandMySQLtutorial學習如何使用PHP跟資料庫交互
網上最好的要數PHP語言官方的在線文檔和函數參考了
每個知識點上(例如strlenfunction這個)都在後面列出來用戶的評論注釋,這些對於文檔的本身是非常有價值的
(我很喜歡PHP,但還有很多其他種伺服器端的腳本語言你們都可以選擇
)Web框架:過去數搏槐檔年裡,web開發人員在開發動態網站的過程中不得不一遍又一遍的針對重復遇到的問題寫出重復的代碼
為了避免這種每次開發一些新網站都會重復勞動一次的問題,一些程序員動手搭建了一些框架,讓框架替我們完成重復性的工作
非常流行的RubyonRails框架,作為一個例子,它利用Ruby編程語言,為我們提供了一個專門面向web的架構,普通的web應用程序都能使用它來完成
事實上,Adam使用Rails開發了他的第一個正式的(而且是嘆為觀止的!)web應用程序,MixTape
me
這就是他的如何在沒有任何經驗的情況下搭建一個網站
還有一些其他的web開發框架包括CakePHP(針對PHP編程者),Django(針對Python編程中),以及jQuery(針對JavaScript)
WebAPIs:API(應用層序編程介面)是指不同的軟體之間相互交換的程序途徑
例如,如果你想在你的網站上放一個動態的地圖,你可以使用GoogleMap,而不需要開發自己的地圖
TheGoogleMapsAPI可以輕松的讓你通過JavaScript在程序中引入一個地圖到你的頁面上
幾乎所有的現代的你所知道的和喜愛的web服務都提供了API,通過這些API你可以獲取到他們的數據和小工具,在你的應用程序里就可以使用這些交互過來的東西了,例如Twitter,Facebook,GoogleDocs,GoogleMaps,這個列表遠不止這些
通過API把其他web應用集成到你的web應用里是現在富web開發的前沿地帶
每個優秀的主流的web服務API都附帶有完整的文檔和一些快速入手的指導(例如,這個就是Twitter的)
瘋狂吧
命令行腳本如果你想開發一個程序,讓它讀取文字或文件、輸入輸出一些有用的東西,那麼,命令行腳本語言將是個不錯的選擇
然而它並不像web應用程序和桌面應用程序那樣有吸引力和好看的外觀,但是作為快速開發的腳本語言,你卻不能忽視它們
很多的在linux平台上運行的web腳本同樣能以命令行模式運行,例如Perl,Python和PHP,所以如果你學會了使用它們,你將能在兩種環境中使用它們
我的學習道路一直沒離開Perl太遠,我自學Python使用的是這本優秀的在線免費書DiveintoPython
如果成為一個Unix高手也是你學習的目標,那麼你絕對要精通bash這個腳本語言
Bash是Unix和Linux環境下的一種命令行腳本語言,它能夠為你做所以的事情:從自動備份資料庫腳本到功能齊全的用戶交互程序
起初我沒有任何使用bash腳本的經驗,但最終我用bash開發了一個全功能的個人代辦任務管理器:Todo
txtCLI
插件(Add-ons)如今的web應用程序和瀏覽器都可以通過一些擴展軟體來豐富自己的功能
由於一些現有的軟體,例如Firefox、WordPress越來越受到開發人員的關注,插件的開發也日益流行,人們都在說「ButifonlyitcoulddoTHIS」只要你掌握了HTML,JavaScript和CSS,你就可以在任何的瀏覽器里開發你想要的很多東西
,scripts,和Stylishuserstyles這些軟體都是用的更普通頁面一樣的語言寫成的,這幾個東西都值得你去研究一些
更高級的瀏覽器擴展程序,例如Firefox的擴展,它們可以幫助你很多
開發Firefox的擴展,舉個例子,需要你精通JavaScript和XML(一種標記語言,類似HTML,但具有更嚴格的格式)
早在2007年我就寫下來howtobuildaFirefoxextension,這是我在笨手笨腳的研究網上的一些學習資料後獲得的成果
很多免費的、受歡迎的web應用程序都提供了擴展框架,例如WordPress和MediaWiki
這些應用程序都是用PHP寫成的,所以只有對PHP熟悉你才能做這些事情
這個就是如何編寫WordPress插件
而想駕馭GoogleWave前沿技術的開發人員可以從使用HTML,JavaScript,Java,和Python寫小組件和小工具開始
我寫的第一個Wavebot是跟著這個一個下午時間的快速入門指導開始的
開發桌面上的Web應用程序學習編程最好的結果是你在一個環境下學的東西可以應用到另外的環境中
先學習開發web應用程序的好處就是我們有一些方法可以讓web應用程序直接在桌面上運行
例如,AdobeAIR是一個跨平台的即時運行平台,它能讓你編寫的程序運行在任何裝有AIR的操作系統的桌面上
AIR應用程序都是由HTML,Flash,或Flex寫成的,所以它能讓你的web程序在桌面環境中運行
AIR是開發部署桌面應用程序的一個優秀的選擇,就像我們提到過的10個讓你值得去安裝AIR的應用程序
移動應用開發能在iPhone或者Android智能手機上運行的手機應用程序的開發如今正呈現井噴之勢,所以你也可以夢想一下如何在iTunes應用商店裡通過你的天才程序大賺一筆
但是,作為一個編碼新手,直接奔向移動開發所經歷的學習曲線可能會很陡,因為它需要你熟悉高級的編程語言,例如Java和ObjectiveC
然而,你當然應該看看iPhone和Android編程究竟是什麼樣子的
閱讀這個簡單的iPhone應用開發例子可以初步認識一下iPhone程序的開發過程
Android程序都是由Java寫成的,這有一個簡單的視頻教程教你如何開發第一個」HelloAndroid「程序(註:可能需要代理才能看這個視頻)
耐心,刻苦,嘗試,失敗好的程序員都有一個不達目的誓不罷休的品質,他們會驚喜於通過長期推敲和失敗換來的一點成績
學會編程會有很好的回報的,但是學習的過程可能會是飽受挫折和孤獨的
如果有可能,最好找個伴一起陪你做這件事
想精通編程,這和其他事情一樣,需要堅持,反復嘗試,獲得更多的經驗
『貳』 程序員入門:如何自學編程
為了方便能看明白,我用使用比較廣泛的C語言和X86架構去舉例
API:程序員編程時用到的庫函數像C的stdio.h中的printf()函數。api可以大大提高程序的開發效率,縮短源碼。你在編程時直接引入庫文件#include
ABI:是一個規則或者說標准吧,他規定了數據類型,存放方式,函數/方法(參數,返回值,返回地址,變數的存放位置和做早格式)等等,例如X86的函數激山參數存放在DI,SI,DX,CX幾個寄存器中,返回值存放在AX中,小端格式存放等等。作用是為了方便同一平台不同系統明胡中的軟體移植吧。
我自己覺得這個ABI可以把它納入ISA指令集架構的范疇了(這個只是我為了方便題主你理解啊,ISA的定義並不包含ABI哈~)。。因為同一個ISA的ABI都相同。。。
我嘗試舉個通俗點的例子,api有點「前人栽樹後人乘涼」的味道(編譯器製作初期編寫函數,開發者使用時直接調用函數名)。ABI就像是前人留下來的一些定理(你必須按照這定理去做,不然將會有大麻煩)。
『叄』 程序員自學編程的6種方法,高效學習
1、最好的學習方式
對干初學者來說,可以採用視頻+書籍的方式進行學習。這兩種方式形成互補關系。另外閱讀代碼也可以幫助你解決問題,了解最佳做法,這里的閱讀代碼是指書籍,指芹皮博客文章,開源代碼等等。編程教學視頻可以讓你迅速掌握編程語法等等,但通常比較生動、淺顯,不成系統。而書本是比較系統,深入,但是枯燥,所以最好的方法是書和視頻結合。
但在閱讀代碼後,你需要自己實際去寫代碼。可以是任何東西。可以是小的編碼任務或者是一個小模塊,必須確保你能將之付諸干實踐,並用某種方式使用你學到的東西。如果你不這樣做,你會發現自己面對編輯器會無從下手。知識等待使用的時間越長,知識這把斧頭就越鈍。等待學習新知識的時間越久,你就越難以將其融入到代碼中。
2、入門期堅持學習
自學編程難免遇到這種現象:學了一兩個月,發現自己會的不多。編程在一開始不會有那麼大的反饋,這種現象非常正常!關鍵是你要堅持個三個月到半年的時間,熬過這個艱難的入門期。推薦三件事情以避免僵局。第一是試著閱讀更多關干技術的文章,並總體掌握正在發生什麼。通常,當你陷入困境時,意味著你對需要澄清的事情做出了不正確的假設。
第二是咨詢互聯網。這一點很顯然是值得一提。在網上查找並詢問有過這個問題的人是一個非常重要的技能。Stackoverflow可以說是互聯網上最好的網站。不要害怕在那裡問自己的問題。通常,只要盡力正確地闡述你的問題就OK7。小編的第三個建議是向你認識的人請求幫助。
3、初學者盡量不要鑽牛角尖
對幹人生來說,其中任何目標的實現都離不開耐心。編程學習就如其它任何學習任務一樣,都需要反復努力並投入大量時間。如果遇到難題,耗了半天時間還是沒弄懂,可以暫時跳過,知識積累到一定程度,回頭再進行解決你會發現簡單多了。不要一味的去鑽牛角尖,一定要解決,這樣會耗費大量的時間與精力。
4、尋找良師益友
學習編程的一個很好的方法就是和其他的程序員交談。不必談論任何特定的內容。可以是你正在學習的東西,也可以是你認為很酷的東西,更可以是你正在工作的東西,皆可。你會發現很多程序員並不喜歡只是聊編程。這樣做可能會讓你學到很多關干庫,伺服器,編程語言和模式方面的知識。
但是,最重要的是,你將了解到其他人是如何看待編程的。你會發現,你認為理所當然或從來沒有考慮的事情在人與人之間是非常不同的。還有你遇到的那些小問題,已經有無數前輩也曾遇到過,他們總結了並分享在互聯網上了,前人的經驗是你的寶貴資源,要善干利用谷歌等軟體。
5、有目的的練習
不要想著學習完就可以賺1W+這樣很容易放棄編程,編程語言是一個很大的知識庫,需要你不斷的學習。最好是奔著一個小項目而學習編程,當你把作品做出來了,有7成就感,同時基本上具備找工作的能力,就找個初級的開發崗位,再進階,你的自學之路功與名都有了。沒有什麼可以與工作干自己的項目以學習編程更有用的了。
有了一個點子並試圖實現這個點子是非常具有挑戰性的。它需要很強的自律心及耐心。但是,通過嘗試實際做一件事情,你可以學到如何分解問題並應用技術。你面對的各種問題,以及你如何解決它們才真正是唯差所謂的編程。此外,想要完成項目的驅動力首毀是繼續學習的動力。從業余項目獲得的滿足感遠遠超過你在抽象中學習東西的滿足感。
6、完美主義者和搬運工的區別
編程是一門手藝,需要反復練習,脫離書本和視頻看是否能獨立實現?學到最後的境界無非就是:我亦無他,惟手熟爾。有兩種類型的程序員,完美主義者和搬運工。有些人希望一切都是正確的,他們希望完美,他們希望遵循所有的最佳實踐,並寫出漂亮的優雅的代碼。
他們想要理解每一行代碼。有別干那些不管三七二十一,只要自己的代碼能工作即可,即使對代碼庫有損害的人。平衡這兩種技能是非常重要的。有時你應該深入鑽研一個問題或項目,看看發生了什麼。有時你應該讓它工作即可,即使你不知道發生了什麼。