首页 如何自學編程從入門到進階

如何自學編程從入門到進階

举报
开通vip

如何自學編程從入門到進階如何自學程式設計從入門到進階作者:No子│2016-07-2906:15:03│贊助:46│人氣:1225自從大學畢業後常常有人問起該如何學習寫程式。有些人是職場需求,有些是興趣使然,而且這些人總是來自各行各業,不論是以前是社會組或者自然組的人都有。我來分享一下個人的心法,以及學習過程給大家參考,這篇適合給還沒寫過任何程式,卻對這個領域有興趣的人,或者是已經學會一些基礎,但是卻卡關了,不知該如何往下一步前進的人的一個指引。本文的內容可能很主觀,但就是我個人的學習經驗,你可以只當做參考。這篇文章不會教你學會任何程式,...

如何自學編程從入門到進階
如何自學程式設計從入門到進階作者:No子│2016-07-2906:15:03│贊助:46│人氣:1225自從大學畢業後常常有人問起該如何學習寫程式。有些人是職場需求,有些是興趣使然,而且這些人總是來自各行各業,不論是以前是社會組或者自然組的人都有。我來分享一下個人的心法,以及學習過程給大家參考,這篇適合給還沒寫過任何程式,卻對這個領域有興趣的人,或者是已經學會一些基礎,但是卻卡關了,不知該如何往下一步前進的人的一個指引。本文的內容可能很主觀,但就是我個人的學習經驗,你可以只當做參考。這篇文章不會教你學會任何程式,而是告訴你該怎麼學,該學哪一些東西,學習的順序為何,而要學習這些東西該看那些書,或者有哪些資源可用。可能有些人覺得程式就是把那些語法弄熟即可,但是事實並非如此,很多學科十分的重要,這就是所謂的門檻,每跨過一階就是晉升到另一個境界。老實說程式設計這東西,要有熱情很快,消磨的也快,原因是什麼?因為他與大部分人想象的有所落差,老實說我自己也是有這種想法,像是為什麼學了老半天我的程式都沒有界面,總是在黑盒子中執行?或者是人家都說學了一個語言,另一門就學超快,為什麼我都無感,覺得其他語言好可怕?之類的,每個人都有自己的理由,讓我們來一一突破吧。有任何問題也歡迎問我,假如我會的話會盡量回答的,要我教學的話假如時間夠多或許可行吧...大綱1.該從什麼語言開始學起2.路線規劃3.出發1.該從什麼語言開始學起程式語言幾百種,到底該學什麼語言比較好,老實說沒有一個正確的解答。每種語言都有其特色,要看開發者是什麼訴求,例如你要跑圖表用Matlab寫只要3行,用C寫卻寫的要死要活,根本就是自找麻煩,但是我們卻不能否認C與電腦底層的互動優良,其他語言要做到就很困難了。這裡我提供幾個準則給大家參考。·路線1:從基礎練起這是需要花最長的時間的一條路線,也是這篇文章從第二章開始主要探討的一條路線,適合給有興趣深入研究的人,並且想要面面俱到甚至讓程式變成你的主要的生財工具的人。基本上,走到後來,語言選擇已經不是問題了,兩三天就學會一門語言了。·路線2:根據所需來選擇對於一些領域的人來說,他們沒有力氣與精神來慢慢磨練程式底子,此時選擇對那個領域有優化的語言能夠事半功倍,如魚得水。例如:統計上使用R, 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 上使用Matlab,設計上選擇Javascript之類的。·路線3:想靠程式來解決生活的一些小問題就好假如你不想花太多時間在研究上,也沒有特別需求,單純想玩玩看程式,或者希望程式幫你完成一些重複性的工作來讓生活變得更美好,那我覺得Python是一門十分不錯的語言,輕鬆易上手,加上很多好用到炸開的package,規律的語法也讓你很好模仿以及讀懂他人的程式。另一個語言則是Ruby,和python一樣的易用性,但是語法自由,寫起來除了爽還是爽。要我比喻的話Python就是中規中矩的戰士,Ruby就是施放華麗魔法的魔法師。(可以直接跳到下面去看關於如何學習這兩門語言)2.路線規劃基本上以前一章節的路線1為基礎,當中涵蓋了路線2與3的語言。大圖鏈接下一章節開始會講解每一個部分該如何學習,以及該了解那些知識才是最重要的。3.出發首先最重要最重要的一句話請銘記在心。程式語言不是K完書就會了解了,找到合適的練習內容,並且親自寫過一次才是真的學會。這也是自學難的地方,因為沒有人督促就不會有動力去完成,書中總有練習一定要自己解決他才可以,不然即使拿到一本天書也於事無補。定個時間表和朋友一起學,如此一來有競爭與討論會學的超級快。讓我們開始來講解每一個能力所要了解的內容吧。1.基礎英語能力-逃不了的宿命這個能力很現實,寫程式就是必須使用英文寫,語法是英文就算了,當你有問題時,到網路查資料,解答80%以上也都是英文,各種文件也都是以英文撰寫居多。英文能力不需要真的頂呱呱,至少要能做不逃避英文網站,真的不懂就丟到google翻譯,我想這應該大家都會。這個項目能力不是重點,心態的調整更為重要。◎StackOverflow是最常使用到的一個程式問答網站。2.編輯器-工欲善其事必先利其器編輯器是個很有趣的議題。這裡我的選擇很簡單也很主觀,各種花俏的編輯器都先擺一邊,自動補全, 模板 个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载 什麼的,等到程式底子到一定的程度時再來想這些偷懶的步騶,一開始一步一腳印每個字都自己打,慢慢體會程式的道理是最好的。這邊我私心推薦使用vim來當做編輯器,可能會有人覺得他是上個世代的產物,但是他仍是目前程式設計師最愛的編輯器,可以參考這個。Vim與其說是一種編輯器,他更是一種習慣,養成後你會戒不掉,其他編輯器也都會支援Vim的編輯模式,在Linux的純文字界面也可以來去自如。假如真的不習慣就用sublimetext或者atom來代替吧。分享一下我的新手推薦的配置,把它貼在使用者目錄的_vimrc(*nix是.vimrc)就會生效了。這邊提供幾個學習Vim的好文章與書籍:1.鳥哥的Linux私房菜  第九章(中文)2.Vim快速圖解3.Abiteofvim(英文,超級棒的教學。我在此獲益良多)4.笨 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 學Vimscript(進階設定的部分,可以先不看)3.C-凡是起頭難終於進到了大家關心的部分,也就是程式語言的第一個挑戰C,為什麼我會選擇C當做是最早該學習的語言呢?因為C可以磨練底子,大部分的功能必須要自己實現,知道什麼時候該用迴圈,什麼時候該令 关于工期滞后的函关于工程严重滞后的函关于工程进度滞后的回复函关于征求同志党风廉政意见的函关于征求廉洁自律情况的复函 式,還有宣告變數該用什麼類型,是這個時期最重要的,也就是寫程式的sense該從這培養。C有一個大門檻也是他的特色,也就是指標Pointer,跨過去第一階段基本上就算完成了。假如你是像我說的使用純文字編輯器(vim或sublimetext)來寫code,那就必須自行下載編譯器,可以去下載mingwx64,這也是另一個很棒的練習,如何使用指令來編譯程式,以後有助於擴建龐大的專案時自己寫Makefile。這裡提供大家幾個學習C非常好的書籍:1.TheCProgrammingLanguage(英文,最棒的教科書之一,我是從這開始寫程式的)2.TheCProgrammingLanguage  中文版(翻譯本)3.C語言教學手冊(朋友們有些買這本)4.資料結構-跳脫以管窺天的程式資料結構是一門相較起來比較學科的項目,當你的C語法使用的相當順手時,千萬別以為這樣就夠了,因為懂得語法只是會造句,寫得出好文章才是更重要的,資料結構就是這麼一門學問,學完後會覺得自己的視野寬闊許多,甚至生活上也可以得到印證。他教你如何把一堆資料進行儲存與取用,搜尋與排序,寫程式的格局自然就變大了,是超級無敵重要的學問,難度也不高。學習資源:1.FundamentalsofDataStructuresinC(英文,詳細的告訴你程式碼該如何實現,以及適量的習題)2.FundamentalsofDataStructuresinC中文版3.DataStructureVisualizations(資料結構的實現圖解,可以拿來驗證答案,超實用)其他網路上應該也很多學習資源5.C++/Java從這開始是更進階的一個部分了,也是第二門我所推薦的程式語言,選擇這兩個語言是因為我們即將進入一個新的階段了,【物件導向】,你可以選擇其中一門來學習即可,我個人當初選擇的是C++,Java也沒啥機會去了解,所以不是很熟。題外話,可別再認為C和C++差別是printf和cout的差別了!此時很多人會想說,我就會C就好,其他什麼的我不想學,但是差臨門一腳了,等學完C++後,因為概念被打通了,學其他程式語言就會覺得輕飄飄的,幾乎3天可以速成一門語言,基本上學完這裡之後的東西就是看個人興趣了,程式語言已經變成工具而不是學問了。物件導向是未來的一個很重要的趨勢,讓你的程式易於被他人維護與再使用,編輯器也能對他做最佳化的補全,當然還有很多其他好處。這階段當然不只有物件導向要了解,以下幾個課題也是這階段的任務!1.物件導向Class與Object的觀念2.C++的異常處理(exception)3.debugger的使用(會讓你抓bug變超快的工具)4.嘗試寫Makefile6.Git-時光機當你程式寫到一定程度,規模大到一定程度後,有時候改壞了,想要恢復以前的版本,就可以使用git來幫你完成,git另一方面也可以方便多人協作,適合大家一起完成一個大專案,git的應用很廣,推薦幾個資源給大家學習。1.連猴子都能懂的git入門教學(入門就靠他了)2.30天精通Git版本控管(詳細教學)3.官方的推薦書籍(超佛心,有中文)7.資料庫系統資料庫算是一門有趣的學科,以前你可能學習到要保存當前程式資料會自創一個自己懂得檔案格式,然後自己再來讀檔與想辦法處理,但是這是非常原始的方式,資料庫系統提供一個便民的語法讓開發者能夠儲存大量資料,查找也有最佳化,想要的話排序都可以直接做好,最重要的,每種程式語言幾乎都有實作各個資料庫的函式庫,使用起來比起自己處理文字檔方便太多了。資料庫系統另一個重點是該如何設計關係表格,怎麼設計能夠讓重複的資料降到最少,查找的邏輯也是這門學問的重點之一。參考書籍推薦:1.資料庫管理系統(中文翻譯本)自此為止所要學的基本上就都涵蓋住了,下面的內容就看開發者自己的興趣,我個人推薦幾個有趣的部分。·GUI設計寫了那麼多程式,幾乎都是主控臺程式,超不爽的啊,什麼時候可以寫出photoshop這種屌程式?老實說GUI並非程式設計的重點,但是你的程式有GUI給使用者一定更加userfriendly,也更像一個包裝好的產品。這邊推薦寫寫看C#,會讓你想寫GUI的衝動爆發再爆發,語法與C++很像,學習幾乎沒有難度,加上VisualStudio的輔助,寫起來如虎添翼,真的蠻爽的。·Python這門語言規規矩矩的,漂亮的排版,好用的函式庫,好用的資料結構,導致我真的對他愛不釋手,package多到不行,麻煩的功能都已經有人做好了,我們只要專注寫我們有興趣的事上即可,加上他真的很簡單,沒有語言基礎也可以輕鬆入門,難怪各個領域都需要會python的人才。線上的學習資源:1.Codecademy(英文,互動式學習,邊學邊寫)2.Exercism·Ruby美麗的魔女,百變的語言,想怎麼寫就怎麼寫,package也很多,喜歡他的自由度,難度比python高一點,但還是不影響其易用性。1.Codecademy(英文,互動式學習,邊學邊寫)2.Exercism·Web設計網頁設計真的重要嗎?我的藝術細胞不好是不是跟web設計無緣了呢?其實不盡然,因為網頁分為前端和後端,前端關注在網頁看起來漂不漂亮,特效是否炫狍,網站的功能還是得靠後端來完成,功能的部分就與藝術細胞沒有關係了,程式的邏輯才是關鍵。那為什麼需要寫網頁?因為網頁可以說是對你前面所學的一個包裝,你可以把她看成是GUI設計的一種,他能做到的事情超多,重要的是他可以無視掉使用者安裝的難度,因為現在應該很難找到沒有安裝瀏覽器的電腦吧!還可以從這學一下資訊安全方面的知識,以後就可以謝謝小外掛,繞過一些網頁的陷阱了。前端學習部分(HTML/CSS/Javascript):1.Codecademy(英文,互動式學習,邊學邊寫)2.W3School(英文,內容很豐富,可當做字典來用)3.W3School中文版(內容比較少,但基礎概念也都有)4.自強學堂(中國那邊的學習網站,課程蠻多的)後端其實什麼語言都可以但目前主流可以學學PHP/Rubyonrails/NodeJS/Go/Python持續更新中......關於自學程式的十件事PostedbyRyan原文:LifeHacker.com  圖片:takito  翻譯:Ryan Chung程式設計(Programming)是當前最有價值的技能之一,不論是就業考量或是結合創意激盪腦力,都是相當好的投資。如果你正想開始做這件事,以下提供給你一些可以參考的技巧與資源:1.先想清楚為什麼要學程式設計?在開始之前,請先問自己:1.為什麼要學習程式設計?2.我有多少時間可以投入?如果你想要成為一位專業的程式設計師,除了真的到大學去念資工系之外,你也可以參考Google的學習清單:·計算機概論(先有全面的概念性認識)·Udacity–introtoCScourse·Coursera–ComputerScience101·學習撰寫任何一種物件導向程式語言·Coursera–LearntoProgram:TheFundamentals·MITIntrotoProgramminginJava·Google’sPythonClass·Coursera–IntroductiontoPython·PythonOpenSourceE-Book(以下為進階)·Udacity’sDesignofComputerPrograms·Coursera–LearntoProgram:CraftingQualityCode·Coursera–ProgrammingLanguages·BrownUniversity–IntroductiontoProgrammingLanguages·再學其他語言來作比較·w3school.com–HTMLTutorial·CodeAcademy.com·Udacity–MobileWebDevelopment·Udacity–HTML5GameDevelopment·學會進行軟體測試(除錯、測試、拆解)·Udacity–SoftwareTestingMethods·Udacity–SoftwareDebugging·學習程式設計會用到的數學·MITMathematicsforComputerScience·Coursera–IntroductiontoLogic·Coursera–LinearandDiscreteOptimization·Coursera–ProbabilisticGraphicalModels·Coursera–GameTheory·加強演算法與資料結構(資料形態、排序、資料結構等)· MITIntroductiontoAlgorithms· CourseraIntroductiontoAlgorithms Part1 & Part2·ListofAlgorithms·ListofDataStructures·Book:TheAlgorithmDesignManual·對作業系統有所了解·UCBerkeleyComputerScience162·學習使用者經驗設計·Udacity–UXDesignforMobileDevelopers·了解人工智慧·StanfordUniversity– IntroductiontoRobotics·NaturalLanguageProcessing·MachineLearning·了解編譯器如何運作·Coursera–Compilers·了解密碼學· Coursera–Cryptography, Udacity–AppliedCryptography·了解平行運算·Coursera–HeterogeneousParallelProgramming·實作一個真實的專案·ApacheListofProjects·GoogleSummerofCode·GoogleDeveloperGroup·試著在一個大的專案中擔任一個角色,能夠看得懂別人寫的程式、讀懂別人寫的文件,並能夠除錯·Github·Kiln·訓練自己加入別人的專案,學習團隊合作·反覆練習建構自己的演算邏輯以及程式撰寫技巧·CodeJam·ACMICPC·擔任課程助教或時常幫助別人·教學相長·到軟體研發公司中實習而如果你想要的,是在閒暇之餘把程式設計當成娛樂,來做一些有趣的網站或遊戲,那麼一些線上的互動教學應該會更適合你。·CodeSchool·Codecademy·Code.org·TreeHouse2.挑一個程式語言下手這個世界上沒有所謂”最好的”程式語言,每一種語言都會有它的優點與缺點,重點在於你如何善用它們來達到你的目的。所以問題又回到同一件事,你的目標會決定你要先學什麼語言,要做APP還是做網站?要能快速上手還是想要紮實進修?3.耐心、勇敢地踏出你的第一小步不論你選擇了哪一種語言,就著手開始吧!在了解了一陣子之後,試著將書上的範例檔案挖空,自己寫一次試試看。把整個演算的步驟條列出來,稍微做一些修改。第一個方法不行就試試還有沒有別的方法,不要急著放棄。4.還是下不了手?試著玩玩設計給小朋友的程式開發軟體吧別在乎年紀,能學到東西最重要。試著玩玩這些設計給小朋友的開發環境(如Scratch),慢慢地把自己的”邏輯腦”召喚出來,想上課這邊也有(edX-ProgramminginScratch)。5.善用線上學習資源跟著線上學習資源,開始撰寫你的第一支程式,不論只是讓畫面上的一個物體移動,或是重新呈現資料,一旦開始就有機會讓你欲罷不能。6.選修一門課認真地上完一門線上課程跟做一些小練習是不同的。透過幾個月完整、堅持地學習,你能夠獲得更多。·IntroductiontoComputerScience·ComputerScience1017.找些書來看書的陳述方式能讓你對理論有更深刻的認識與思考。不論是電子書或是書本都好,找一些相關的參考書籍來看。8.從遊戲中學習現在有許多學習資源都做得跟遊戲一樣好玩!你也可以試試!·CodeCombat·CodingGame9.向前輩請教在學習程式開發的路上你並不孤獨!試著把你的問題丟到討論區上,或是寫封信給你的前輩,請他們給你一些建議,有時候你會發現,這個世界上熱心的人還是很多的!10.瀏覽、修改、再分享透過瀏覽別人的程式碼來學習不同的思維方式以及技巧。並試著分析相同的功能怎麼撰寫更有效率。當你能創造出你覺得更棒的撰寫方式時,記得也分享回社群,貢獻出自己的程式碼。Thisentrywaspostedin文章.Bookmarkthepermalink.如何自學程式設計您亦可在GooglePlay購買此本電子書。調整心態想要學習程式設計(programming),不外有兩種途徑1.學校課程、補習班、家教;2.自己找書、上網查資料、跟人討論。第一種方式的優點是有老師教,自己有問題也能直接問老師,真的對程式設計很有興趣也較能直接打破沙鍋問到底,老師可能丟資料或功課讓自己有個方向繼續深入研究,缺點可能是老師只教老師懂的東西。第二種方式的優點是完全自己學習,想要學什麼或知道什麼都自己弄清楚,無限延伸,缺點不外是自己得要有持續下去的動力。總歸兩類學習方式,學習者都要有強烈的好奇心,其次動手實作無論書上怎麼寫,網頁展示什麼樣的範例,又或著網路上的教學影音怎麼說,只有在自己動手實作,也就是打開電腦,把例子輸入電腦,實際執行之後,也就是要自己親身體驗才會對相關內容有所感覺,不然那些解釋或程式碼始終會跟自己保持距離。這個距離就是都嘛看得懂,問題是實際著手開發卻毫無頭緒,或是大概知道要怎麼做,真的要做了又做不出來做不好。因此一開始由第一種方式入門程式設計會比較得心應手,這樣就出現了第二個問題,就是程式設計這一領域進步跟改變的速度太快,不要說幾年,可能幾個月內就有太多新的東西需要學習,最後都會導向第二種學習方式,也就是自己找書、上網查資料、跟人討論等等。總而言之,想要吃程式設計這行飯,最關鍵的技能反而不是程式設計本身,而是對自學抱持的心態,永遠有新的東西要學,而且得要保持熱忱。所以記在心裡一個重點,不要以為看一看資料,然後想一想就可以弄懂,雖然電腦科學背後的原理很簡單,可是晶片設計越來越複雜,只用簡單的模式處理反而很累贅,於是歷來很多電腦科學家用不同的轉換方式來進行電腦工作,這就是下一個話題---------抽象化。抽象化電腦也稱為計算機,廣義而言就是計算裝置,現在的電腦就是數位化的計算裝置,至於講到數位化是依電壓的高低來記錄數字0跟1,電壓趨近於0之時就是數字0,而電壓趨近於預設電壓之時為數字1。那要怎麼進行計算工作呢?就是在晶片的電路設計工作了,像是邏輯閘(logicgate)、加法器(adder)、乘法器(multiplier)等等。如果要直接控制這些邏輯閘、加法器、乘法器等需要使用機器語言(machinelanguage),寫出來的程式碼叫做機器碼(machinecode),像是 00100001010010100000000000000001上面是32位元的機器碼,倒是開發大型軟體動輒數百萬行的程式碼,如果換成機器碼可能上億行,試想開發或維護都得看數億個0跟1,這是件非常辛苦的事,而且辛苦到難以讓軟體、遊戲、動畫等產業蓬勃發展說。因為只有0跟1太過於艱澀難以理解,所以很快地就有電腦科學家發明組合語言(assemblylanguage)取代,例如以上的機器碼轉換成組合語言如下 addi$t2,$t2,1共分成四個部分,所以該機器碼也可分成四個部分來看,這裡不細究組合語言與機器語言之間的聯繫,倒是已經可以看出相對機器語言的具體,組合語言已經跨出抽象化的小小一步,也就是讓機器碼變成我們直接看得懂的指令。機器語言跟組合語言因為直接跟機器相關,因此歸類為低階語言,進一步抽象化就是用高階語言來寫程式,像上面的程式可能會是以下C程式碼的一部分 i++;i是變數,++是運算子,這個運算子讓變數i遞增1,也就是i加上1,最後的分號;則是程式碼一行的結束符號。只是寫C程式可能還需要規劃記憶體使用,使用變數i得先宣告(declare)型態(type),好讓編譯器(compiler)預留記憶體空間,更複雜的程式像是資料結構(datastructure)之類,需要妥善的進行記憶體管理,這還是很麻煩,所以後來的程式語言如Python、Ruby等都不讓程式設計師操心,像以下Python的程式碼 i+=1同樣是變數i遞增1,不過Python不支援++運算子,然後使用變數前也不須先宣告,簡單說,Python的記憶體管理就交給直譯器(interpreter)處理,程式設計師不太需要關心這些細節,除非真的有效能考量的需求。事實上現在所有高階語言寫的程式想要在數位機器上執行,都必須翻譯成該平台機器語言的機器碼才可執行,像C使用編譯器(compiler)先行編譯程式碼,Python使用直譯器(interpreter)在執行時同步翻譯程式碼。這是進一步的抽象化,更進一步的抽象化是讓程式設計師可以依自己的需求定義需要的型態,新的型態加上其他程式碼組合成程式庫(library),這讓其他程式設計師可以直接運用裡頭的程式,無需重頭自己開發。什麼是程式設計?什麼是程式設計?我們先回到這個最根本的問題,要回答這個問題,就得從什麼是程式(program)談起。簡單講,程式的基本功能就是執行一些指令,並有如下圖的輸入(input)及輸出(output)凡是程式一定有輸入跟輸出,輸入可能只是使用者打了啟動程式的指令,作業系統給該程式起動的訊號,然後程式執行結束再回傳作業系統結束的訊號,啟動訊號跟結束訊號就是最基本的輸入跟輸出。像是作業系統好比一個龐大的程式,按下電腦的電源開關開機,就是傳遞啟動訊號給作業系統,執行關機程式也就是傳遞給作業系統結束的訊號。講到作業系統有點太複雜,先以下圖的簡單程式說明輸入輸出的概念,此程式計算十個數字的平均值,因此輸入為十個數字,輸出則是一個數字也可以改成十個任意數字,像是提供輸入介面 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 使用者輸入十個數字,再由程式計算出平均值後,顯示給使用者看,如下圖有沒有發現所謂的「程式」跟數學函數的觀念很接近,兩者都可輸入數個數字,然後輸出一個數字。是的,程式最早就是為了計算,因此很多觀念跟用詞都直接從數學轉移過來,不過換作程式進行工作,因需求而能有不同的彈性。知道程式設計是什麼了嗎?早期的電腦不外是單純的算術,時至今日,大量的資料都被數位化,無論是數據、文字、圖像、聲音、影片等等,所有處理這些數位化資料全都是透過計算。現在更是進一步把各種計算付諸各種應用,例如相機的人臉對焦,這是利用感光元件感測到的圖像資訊進行資料比對,只要該區域的圖像比對出跟人臉一樣,或相似達到一定的百分比,就會判斷那時不是人臉,再來對焦元件就跟著該人臉對焦。實際上人臉對焦需要頗複雜的演算法(algorithm),演算法也就是固定一套的計算模式,換言之就是程式,兩者在絕大多數場合的意義並沒有差很多,我們先需要瞭解兩個詞彙大致同義即可。該從哪一種程式語言著手?依據TIOBE網站在2016年3月1的調查,最熱門程式語言的前兩名為Java跟C兩者就佔了三分之一強,其他依次為C++,C#,Python,PHP,VisualBasic.NET,JavaScript,Perl,Ruby....以上看到的程式語言都是通用型語言,也就是這些程式語言可以做任何想做的工作,當然前提是電腦能完成的。那要挑選哪一種語言入門呢?這是個最簡單的問題,但也可能是最難回答的問題。如果是跟著老師學,就照著老師的吩咐去學即可,也就是說,老師教C就學C,老師教C++或PHP或Perl就跟著老師學,不管這語言的適用性如何,像是要拿C開發手機App很不容易好了,老師教C就先學C囉,因為這些通用型程式語言背後基本的道理都一樣,先要學會基本的道路,接下來才會觸類旁通,才能很快地學會其他種程式語言。話說直接拿C開發手機App是個艱鉅的任務,雖說不是不能,相較沒有Java、Objective-C或Swift容易跟簡單,還有就是Objective-C是C的擴充,C程式可以直接放到Objective-C的環境中執行,但反之不可,所以進入Objective-C後,切記兩者不是一樣的。換用方言的角度來看,C++、C#、Java、JavaScript、Objective-C、PHP、Swift都可看作是C的方言,因為這些語言的基本選擇、迴圈的語法都很類似,或是說幾乎完全一樣,可是方言就是已經有所不同才叫方言,像是英國、美國、澳洲、印度、加拿大、菲律賓、新加坡等等儘管都用英語當官方語言,可是英國人碰上美國人幾乎從腔調就能分辨從哪裡來,何況美國東岸、西岸已有不少不同了。講到此點是因為很多人仍然喜歡把C/C++或C/Objective-C混在一起講,但C/C++其實是指C++,C/Objective-C指的是Objective-C,C程式若加上C++或Objective-C語法的程式,往往無法通過C編譯器的編譯。如果是完全自學,就看手邊容易取得哪一種程式語言的資源了,像是用Mac電腦,可以下載免費的Xcode,用Xcode的環境可以學習Swift,用Linux電腦,預設安裝Python或Perl或Ruby的直譯器,就能直接執行這幾種已安裝直譯器的程式,而用MS-Windows電腦的話,也能找Visual系列的免費版,藉此學C#或Basic等等。或是特別想先學哪一方面的應用,就挑選想學的那一方面的先學,像PHP多是做網站伺服器,JavaScript做網頁應用,Java做AndroidApp,C寫作業系統或硬體控制等等,自學的好處就是想學什麼就學什麼,就自己決定囉!以下開始談些程式語言所具有的共通元素,首先,最引人注目的就是關鍵字(keyword)了。關鍵字關鍵字是程式語言中語法相關的保留字(reservedword),意思就是關鍵字都有特定用途,因此關鍵字不能拿來當變數(variable)名稱或識別字(identifier)來用。通常入門程式語言,也都是由基礎的關鍵字開始。關鍵字分成以下六大類·常數·型態·定義·運算子·修飾詞·陳述當然每一種程式語言細分大都不只這六大類,只是說幾乎每一種程式語言都有這六大類,所以就分這六大類來介紹關鍵字,其中定義、運算子(operator)跟陳述(statement)在下文介紹,這裡把常數、型態、修飾詞(modifier)各舉一個關鍵字當例子,然後介紹在VisualBasic、C、C++、C#、Java、JavaScript、Python、Swift適用的情況。首先,常數舉以下的關鍵字true當例子truetrue屬於布林值(Booleanvalue),同英文意思,就是邏輯上的「真」,因此程式裡面只要出現true就代表「真」,也可用條件成立來解釋,相對「真」是「假」,採用的關鍵字為false,也就是條件不成立的意思。VisualBasic、C++、C#、Python、Swift都把true當關鍵字,須留意在VisualBasic跟Python是首字母大寫的True,而Java、JavaScript把true當字面常數(literal)。所謂字面常數就是直接寫出來的數值,像是12、3.56等數字,或是'c'之類的字元(character)、"abc"之類的字串(string)。型態舉以下的關鍵字int當例子intint是integer的縮寫,就是整數的意思,表示這個型態是整數。VisualBasic、C、C++、C#、Java等程式語言在使用變數前都需要先宣告(declare)變數所屬的型態,所謂宣告就是在程式中明確標示該變數的型態,像是 inti;注意int跟變數i中間要空一格,結尾以分號結束。至於VisualBasic的語法比較不同,它是 DimiAsIntegerDim為dimension的縮寫,意思就是指定變數i的尺寸。而JavaScript跟Swift則是用關鍵字var宣告,例如 vari;var為variable的縮寫,意思同英文字面,其後指派什麼數值,該變數i就屬於所指派數值的型態。最後Python更簡單,完全不用宣告,要用變數就直接設定就好,例如 i=0同時Python也取消了變數的型態專屬的限制,給程式設計師更大的彈性空間。有沒有發現以上受歡迎的程式語言,很多基礎的方面都很相似,只是寫法或是關鍵字不太一樣。是的,以上除了C之外都是物件導向程式語言(object-orientedprogramminglanguage),而多數都是衍生自C的設計方式。雖有其他採用不同概念設計的程式語言,但為數不多,接下來我們繼續討論的也都是這些語言的相似點。修飾詞舉以下的關鍵字public當例子publicpublic的中文是公開的意思,這主要是用來修飾物件權限的關鍵字,因為物件導向程式設計是以設計物件為主,需要詳細規範各個物件之間的關聯,也就是現在設計的物件能否被其他物件再利用,用術語來講就是繼承(inheritance)機制。除了不是物件導向語言的C跟物件導向語言的Python外,其他都有關鍵字public,而Python沒有這個關鍵字的原因也很簡單,因為Python預設所有物件都是public的,所以相對要設定private,就採用了特殊的標記方式。接下來繼續討論運算子的部分,除了有些關鍵字被當作運算子外,鍵盤上眾多的符號也都拿來當成運算子用。運算子最常見的運算子就是四則運算用的加、減、乘、除了,這些都直接採用鍵盤上的符號,例如加為+減為-乘比較特別,用的是星號*除也比較特別,用的是斜線/這四個運算子在以上八種程式語言中都相同。也有程式語言如Basic、C++、Python直接拿關鍵字當運算子,例如布林運算中的「且」and換作符號則是&&這在C、C#、Java、JavaScript、Swift中都適用。有些特殊用途的運算子難以用特定符號或符號組合,就直接用關鍵字來標記了,例如C有sizeofsizeof用來計算變數所佔的記憶體空間,其他C++、C#都沿用了這個運算子。而Java、JavaScript因為需求也有instanceofinstanceof用來判斷特定物件(object)是否是某個類別(class)的子類別(subclass)。其他還有很多,這裡就不討論了,接下來繼續討論陳述,挑兩種以上八個程式語言都具有的陳述來討論,首先是選擇。選擇所謂的選擇(selection)就是讓程式依條件(condotion)而有不同的執行選項。我們直接以實例來說,上述八種程式語言都有以下關鍵字ifif跟elseelse以C程式為例,簡單的例子如下 intcondition=1; if(condition){    printf("Theconditionistrue.\n"); } else{    printf("Theconditionisfalse.\n"); }if後面小括弧中的變數condition就是條件,條件基本上是一個運算式(expression),if會依運算式回傳的值進行判斷,C的if陳述只會判斷條件為0或非0的數字,0就是邏輯上的假,所有非0的數字都是真。上面的例子由於condition等於1,屬於非0的數字,因此條件為真,所以程式會執行if底下大括弧圍起來的程式碼,大括弧的範圍稱為程式區塊(block)。反而條件為假的話,會執行else底下大括弧圍起來的程式區塊,else也是關鍵字之一,會跟if連用,代表一個程式執行分流。如果有多個條件,C可以把else跟if放在同一行,例如 elseif(condition){加入上面完整的if-else複合陳述,改寫成另一個例子如下 inti=5; if(i>10){    printf("Thefirstconditionistrue.\n"); } elseif(i<10){    printf("Thesecondconditionistrue.\n"); } else{    printf("Allaboveisfalse.\n"); }VisualBasic中需要額外加上Then,而elseif須連寫成ElseIf,例如 ElseIf(condition)ThenPython的elseif變成elif,條件後須加冒號,例如 elifcondition:Python只有if-elif-else一種選擇結構,VisualBasic還有多重選擇的Select-Case,其他則有switch-case,至於細節請看實際學習哪一種語言再深入研究囉!下面繼續討論另一種常見的陳述,也就是迴圈(loop)。迴圈所謂的迴圈(loop)是指重複執行固定的程式區塊,這八種程式語言都有關鍵字while構成的while迴圈while以C程式為例,簡單的例子如下 inti=0; while(i<5){    printf("Hello!\n");    i++; }此程式會印出5行Hello!,直到控制變數i遞增到5為止,屆時條件不成立,便會結束執行迴圈。迴圈是程式設計中很重要的概念之一,因為很多地方需要迴圈,就像打開電腦後所看到的畫面,就是好幾個不斷重複執行的迴圈維持顯示在螢幕上的。除了while迴圈外,以上八種程式語言還有for迴圈,至於for迴圈的用法不盡相同,也就留待學哪一種程式語言再深入研究囉!下面繼續討論定義方面的關鍵字,如何模組化(modularity)提供程式的重複利用。模組化一般而言,軟體開發用到模組(module)一詞,通常是指軟體架構中具有完整功能的元件,此元件通常是指已編入程式庫的程式檔案,至於每一種程式語言開發程式庫(library)的方式都不太一樣。這裡,我把模組化一詞的意義縮小,僅指可重複利用的程式碼。C的執行單位為函數(function),也就是說C程式是一個函數接著另一個函數來執行,程式執行的起點為main()函數,如下例 intmain(void){    task1();    task2();    task3();    return0; }程式設計用函數的英文原文跟數學用的函數英文原文相同,兩者都是function,某些作者或講師為了表彰程式設計的函數與數學的函數是不一樣的意思,所以把程式設計的function稱作「函式」,這跟沒什麼對跟錯,就不同人的習慣用詞而已。假若執行以上的C程式,作業系統先呼叫函數main(),接著呼叫task1(),task1()執行結束後再呼叫task2(),同樣的,task2()執行結束後呼叫task3(),等到task3()執行結束,main()的最後一行用關鍵字return回傳整數0給作業系統。由上可知task1()、task2()、task3()三個函數都可重複利用,並可依次呼叫安排執行順序。C亦可定義陣列(array)、結構(structure)、聯合(union)等衍生資料型態,這些資料型態的定義放在函數定義以外,能被各個函數重複利用。以下為結構定義的例子 structdmeo{    inti;    intj; };定義結構使用關鍵字struct,結構可包含多個型態的數值,此例的demo只定義兩個int型態的整數。如果結構中有定義指標(pointer)的話,就可讓指標指向相同識別字名稱的結構,使此結構能一個接一個,變成一種可資利用的資料結構(datastructure)。如何定義各種資料結構是進階課程了,話說很多程式語言都有已經定義好的資料結構,讓程式設計師可以直接利用,像是Python有串列(list) a=[1,2,3,'4',5.0]串列的字面常數(literal)為中括弧,所有在中括弧以逗號間隔的數值都是串列的元素(element),取出或重新設定元素也是用中括弧,例如以下將a的第2個元素重新設定為123 a[1]=123之所以為第2個元素,這是因為串列的索引(index)是從0開始的。像串列這樣的資料型態是用關鍵字class來定義的,以中文來說就是類別(class),類別也是定義物件的藍圖,除了可定義內含的屬性(attribute)外,也可定義像是函數的方法(method)。簡單的Python類別例子如下 classDemo:    a="9527"    defdo_something(self):       print("Hello,"+self.a+"!")此例定義了Demo型態的類別,其具有屬性a及方法do_something(),使用例子如下 a=Demo() a.do_something()結果就是印出Hello,9527!囉!屬性一詞在不同程式語言用了不同的英文詞彙,C++稱之為datamember,JavaScript、Python用attribute,C#、Swift用property,Java用field,其實這也是各自開發團隊的習慣用詞不同而已。除了類別外,每一種語言或多或少還可訂一些額外的內容,不過這些包括類別是模組化的進一步,再進一步就是怎麼組織程式檔案為程式庫(library)了。銜接到程式庫無論藉由哪一種程式語言學習程式設計,熟悉基本的語法後,接下來就是學習利用程式庫裡已經定義好的內容了,像是在C用到printf()函數,這在標準程式庫(standardlibrary)中的stdio.h中,使用前要先用前置處理器指令#include引入,例如 #include<stdio.h>標準程式庫是程式語言官方制定的標準,像是C最新標準為C11,舊標準為C99,不過這由提供直譯器或編譯器的團隊實作,因此不同開發團隊的直譯器或編譯器中可能會有不完全一樣的內容,倒是絕大部份相同,所以初學程式設計不太需要擔心。學習使用程式庫是一項基礎課程,至於學習開發程式庫則是較進階的課程,就像是學習使用工具跟學習製造工具的不同,不管怎麼樣,想要製造工具或對既有工具進行改善,得先熟練已有的工具,其實絕大多數的功能都可在標準程式庫中找到,或是有其他的第三方程式庫,因此無論想開發什麼,不妨先從程式庫找找有沒有相對應的功能。不同程式語言定義程式庫的方式不太一樣,以Java為例,Java用關鍵字package定義套件,編譯後每個套件的位元組碼(bytecode)都在特定的資料夾(路徑)中,例如下面定義了classdemo套件 packageclassdemo;假設classdemo中定義了ClassDemo類別,要在其他類別檔案中重複利用ClassDemo類別,就要利用關鍵字import引入 importclassdemo.ClassDemo;以上提到的程式語言各層面都淺嚐即止,真實開發情況可能會很複雜,最後再來談談開發囉!開發二三事大致上開發分成兩大類,人力銀行中找到程式設計的相關職缺大致上也分成這兩類·開發核心部分;·開發應用程式。以遊戲為例,核心部分好比遊戲引擎,其中又包含了很多部分,像是·視覺效果引擎(renderingengine);·音效引擎(audioengine);·物理引擎(physicsengine);·人工智慧(artificialintelligence)。裡頭又涵蓋非常多部分,基本上開發遊戲引擎就是開發一個大型程式庫,之後這個程式庫是給遊戲開發者用的。至於應用程式部分好比遊戲的主程式,也就是遊戲的進行方式,除了美工之外,著重在玩家介面、畫面控制、遊戲進程等等,簡單講,這部分是跟使用者直接相關的,開發應用軟體或手機App也都屬於這個部分。開發核心或應用程式,兩者有什麼不同呢?最大的差別是從事開發核心部分必須對所用的程式語言非常精熟,像是用C++的話,對C++的各個細節都得非常熟悉,因為目的是開發C++的程式庫,就必須完全用C++的思考方式工作。反倒開發應用程式部分,所關注的焦點在使用者上頭,因此熟悉使用者介面及應用程式介面(applicationprogramminginterface)變成首要之務,例如開發Android手機遊戲,核心部分交給遊戲引擎,開發者著重在遊戲本身的內容,所以得掌握AndroidAPI或遊戲引擎所提供API的各個細節,思考方式不外就更接近API,而非特定程式語言本身了。就像很多人說Qt雖然是C++的第三方程式庫(thirdpartylibrary),卻跟C++很不一樣,無論如何,倒是Qt還不錯用就是了。結語每一種語言都有很多細節需要學習,每一細節可能都有一些範例跟練習,跟著範例與練習都能寫些小程式,或是自己也能稍作修改,改成自己想要的執行結果,無論如何,會需要花不少時間跟直譯器或編譯器打交道,只要執行不如預期,程式中就有錯誤(bug),修正這些錯誤是學習程式設計重要的經驗之一。進一步來說,每個練習最好都當成可發展的專案,也就具有完整功能的小型軟體,可自己完成或是跟同在學習程式設計的同學或同好一起完成,學習團隊合作也是程式中重要的一環喔,而之後除錯(debug)也是發展專案中的重要環節,總之,專案中的每個部分都得分開測試無誤,最後再把每個部分組裝起來變成功能完整的軟體,再進行測試,確定一切都能順利運行後就發佈囉!討論到這裡告了一段落,總之想要自學程式語言到從事程式設計的工作只有不斷練習程式設計本身就是一項知識技藝,想要成就這項技藝,學習基本知識後,就只有不斷的練習,讓大腦跟雙手打程式碼時能完全同步,面對任何問題或困難才能處變不驚,深入了解問題或困難,冷靜思考應對解決的對策唷!註解1.TIOBE的程式語言調查網址為http://www.tiobe.com/tiobe_index,隨每一個月更新調查結果。回到原處想「轉行」靠寫程式吃飯嗎?一個自學程式語言幾乎將自己逼瘋的親身經歷–軟體工程師QuincyLarson·2015/4/17·Jewel·數位學習評論評論軟體工程師薪水正在逐年攀升中,2014年軟體工程師的平均年薪達$97098美元(台幣三百萬)之高1,學習寫程式的熱潮更是席捲全球,下自8歲上自80歲每天都有人「HelloWorld!」一下,看著矽谷創業公司迅速崛起、一夜致富的空前盛況,相信許多人都正在考慮學寫程式、轉行當軟體工程師。人人都能學寫程式,這點毋庸置疑。只是在你「轉行」之前,也許你會想聽聽QuincyLarson從朝九晚五上班族「轉行」軟體工程師的親身經歷。QuincyLarson現在是線上程式語言學習平台FreeCodeCamp的軟體工程師,前陣子他發表了一篇文章描述他自學程式語言而幾乎被逼瘋的過程,也在最後給真心想「轉行」的程式新手們一些過來人的意見。在此分享QuincyLarson的文章《ACautionaryTaleofLearningtoCode.Myown.》,本文非逐字翻譯,內文細節可能有筆者多加琢磨或改寫以便閱讀,請勿見怪。一個學寫程式的警世故事——我的親身經歷我是一個普通的上班族,平時穿西裝、坐辦公室,過著朝九晚五的生活,但腦裡一直有個模糊的創業想法。有一天我無意間在酒吧聽到隔壁桌的客人大肆討論著他藉由「Ruby」來自動化他的日常工作、大大提高了工作效率。我心想:「『Ruby』,是吧?」回家後我立馬上網搜尋「Ruby」,十五秒後我已經開始學起程式語言Ruby了。一個星期後,我參加了人生中第一個駭客空間(Hackerspace),聽大家討論著程式語言像是Scala、Clojure跟Go,太多新知需要吸收了,當天我抱了三本厚厚的程式語言書回家看,每本都看了50頁左右。身邊的一個朋友聽到我在學程式語言,他建議我應該要先把Emacs學好,在我學Emacs時,另一個朋友走過我身邊發現我在用Emacs,他跟我說:「你怎麼會選用Emacs呢?!難道你不知道Vim比較好?」於是我開始記Vim的鍵盤指令,這個時候的我覺得「下指令下得越快=寫程式寫得越快」,還甚至因此換了Dvorak鍵盤——程式開發者公認最有效率的鍵盤。一段時間後,我已經用Linux作業系統用得很順手,還在Udacity上學習
本文档为【如何自學編程從入門到進階】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_859850
暂无简介~
格式:doc
大小:3MB
软件:Word
页数:70
分类:互联网
上传时间:2017-07-27
浏览量:14