當前位置:首頁 » 編程軟體 » 從零開始編譯原理

從零開始編譯原理

發布時間: 2024-05-14 10:25:45

1. 如何從零開始學編程


在你學習編程之前思考一下你的目標,當你有最終目標時道路會更加的清晰。那麼,你想要寫什麼?網站?游戲?iOS或者Android應用?或是你是想自動化完成一些乏味的任務讓你有更多的時間看窗外的風景?也許你只是想更具有就業競爭力找個好工作。所有的這些都是有價值的目標,這些目標都是你編程學習推動力的一部分,沒有推動力的人,是無法在略顯枯燥的漫長學習之旅中走遠的。


不要浮躁

Badprogrammingiseasy.EvenDummiescanlearnitin21days.,meswithit.

不管是在線下還是線上的書店,滿目都是《21天學通java》這種速成書目,它們都承諾在很短一段時間內就讓你能夠學會相關技術。MatthiasFelleisen在他的著作HowtoDesignPrograms,SecondEdition一書中明確指出了這種「速成」的趨勢並予以了以上的諷刺。

所謂的「捷徑」或者說「銀彈」是不存在的,智者說過,精通某個東西需要10年或10000個小時,也就是漢語中的「十年磨一劍」,所以不用著急,功不唐捐。

培養興趣

ionbythepublic,butbecauseitisfuntoprogram.

_LinusTorvalds

沉醉於編程,編程更是為了興趣。興趣是推動力的不竭源泉,保持這種充滿興趣的感覺,以便於你能將其投入到你的10年/10000小時的編程時間中。編程很有趣,那是探索的喜悅。那是創造的喜悅。看到自己親手完成的作品顯示在屏幕上很有趣。有人為你的代碼而驚嘆很有趣。有人在公共場合稱贊你的產品、鄰居使用你的產品、以及在媒體上討論你的產品很有趣。編程應該十分有趣,若並非如此,就找出導致編程無趣的問題,然後解決之。

在這里對於初學者有兩個大坑:

如果初學者們只與預先構建好的「發動機和組件」接觸(沒有理解和思考它們構造的原理),這會嚴重限制他們在將來構建這些東西的能力,並且在診斷解決問題時無從下手。

第二個坑沒有第一個那麼明顯:幼稚的「整體論」方法有些時候會顯得很有效,這有一定的隱蔽性與誤導性,但是一兩年過後(也許沒那麼長),當你在學習路上走遠時,再想回過頭來「補足基礎」會有巨大的心理障礙,你得拋棄之前自己狹隘的觀念,耐心地緩步前進,這比你初學時學習基礎知識困難得多。

但臘敏茄也不能矯枉過正,陷入還原論的大坑,初學時便一心試圖做宏大的理論,這樣不僅有一切流於理論的危險,枯燥和乏味還會讓你失去推動力。這種情況經常發生在計算機科班生身上。

為了更好理解,可以將學習編程類比為學習廚藝:你為了燒得一手好菜買了一些關於菜譜的書,如果你只是想為家人做菜,這會是一個不錯的主意,你重復菜譜上的步驟也能做出不賴的菜餚,但是如果你有更大的野心,真的想在朋友面前露一手,做一些獨一無二的美味佳餚,甚至成為「大廚」,你必須理解這些菜譜背後大師的想法,理解其中的理論,而不僅僅是一味地實踐。但拿猛是如果你每天唯一的工作就是閱讀那些厚重的理論書籍,因為缺乏實踐,你只會成為一個糟糕的廚子,甚至永遠成為不了廚子,因為看了幾天書後你就因為枯燥放棄了廚藝的學習。

總之,編程是連接理論與實踐的紐帶,是計算機科學與計算機應用技術相交融的領域。正確的編程學習方法應該是:通過自頂而下的探索與項目實踐,獲得編程直覺與推動力;從自底向上的打基礎過程中,獲得最重要的通用方法並鞏固編程思想的理解。

作為初學者,應以後者為主,前者為輪察輔。

啟蒙

「學編程應該學哪門語言?」這經常是初學者問的第一個問題,但這是一個錯誤的問題,你最先考慮的問題應該是「哪些東西構成了編程學習的基礎」?

編程知識的金字塔底部有三個關鍵的部分:

演算法思想:例如怎樣找出一組數中最大的那個數?首先你得有一個maxSoFar變數,之後對於每個數

語法:我怎樣用某種編程語言表達這些演算法,讓計算機能夠理解。

系統基礎:為什麼while(1)時線程永遠無法結束?為什麼int*foo(){intx=0;return&x;}是不可行的?

啟蒙階段的初學者若選擇c語言作為第一門語言會很困難並且枯燥,這是因為他們被迫要同時學習這三個部分,在能做出東西前要花費很多時間。

因此,為了盡量最小化「語法」與「系統基礎」這兩部分,建議使用python作為學習的第一門語言,雖然Python對初學者很友好,但這並不意味著它只是一個「玩具」,在大型項目中你也能見到它強大而靈活的身影。熟悉Python後,學習C語言是便是一個不錯的選擇了:學習C語言會幫助你以靠近底層的視角思考問題,並且在後期幫助你理解操作系統層級的一些原理,如果你只想成為一個普通(平庸)的開發者你可以不學習它。

下面給出了一個可供參考的啟蒙階段導引,完成後你會在頭腦中構建起一個整體框架,幫助你進行自頂向下的探索。

完成Codecademy的Python部分。這只是熱身部分,盡快完成它,因為你永遠只是在瀏覽器里,你不會學到如何搭建開發環境。在Codecademy這類的編程學習網站學到的那點兒東西,哪怕你只想做一個小的不能再小的項目,你都不知道該從哪兒開始。

完成MIT6.00.1x(中文化)(如果你英語不過關,完成麻省理工學院公開課:計算機科學及編程導論。MOOC是學習編程的一個有效途徑。雖然該課程的教學語言為Python,但作為一門優秀的導論課,它強調學習計算機科學領域里的重要概念和範式,而不僅僅是教你特定的語言。如果你不是科班生,這能讓你在自學時開闊眼界;課程內容:計算概念,python編程語言,一些簡單的數據結構與演算法,測試與調試。支線任務:

完成Python核心編程

完成HarvardCS50(如果你英語不過關:完成哈佛大學公開課:計算機科學cs50。同樣是導論課,但這門課與MIT的導論課互補。教學語言涉及C,php,JavaScript+sql,HTML+CSS,內容的廣度與深度十分合理,還能夠了解到最新的一些科技成果,可以很好激發學習計算機的興趣。支線任務:

閱讀《編碼的奧秘》

完成《C語言編程》

[可選]如果你的目標是成為一名Hacker:閱讀Hacker'sDelight

PS:如果教育對象還是一個孩子,以下的資源會很有幫助:

5-8歲:TurtleAcademy

8-12歲:PythonforKids

12歲以上:MITScratch或KhanAcademy

入門

結束啟蒙階段後,初學者積累了一定的代碼量,對編程也有了一定的了解。這時你可能想去學一門具體的技術,諸如Web開發,Android開發,iOS開發什麼的,你可以去嘗試做一些盡可能簡單的東西,給自己一些正反饋,補充自己的推動力。但記住別深入,這些技術有無數的細節,將來會有時間去學習;同樣的,這時候也別過於深入特定的框架和語言,現在是學習計算機科學通用基礎知識的時候,不要試圖去抄近路直接學你現在想學的東西,這是註定會失敗的。

那麼入門階段具體該做些什麼呢?這時候你需要做的是反思自己曾經寫過的程序,去思考程序為什麼(Why)要這樣設計?,思考怎樣(How)寫出更好的程序?試圖去探尋理解編程的本質:利用計算機解決問題。

設想:

X=用於思考解決方案的時間,即「解決問題」部分

Y=用於實現代碼的時間,即「利用計算機」部分」

編程能力=F(X,Y)(X>Y)

要想提高編程能力,就得優化X,Y與函數F(X,Y),很少有書的內容能同時著重集中在這三點上,但有一本書做到了——(SICP)《計算機程序的構造和解釋》,它為你指明了這三個變數的方向。在閱讀SICP之前,你也許能通過調用幾個函數解決一個簡單問題。但閱讀完SICP之後,你會學會如何將問題抽象並且分解,從而處理更復雜更龐大的問題,這是編程能力巨大的飛躍,這會在本質上改變你思考問題以及用代碼解決問題的方式。此外,SICP的教學語言為Scheme,可以讓你初步了解函數式編程。更重要的是,他的語法十分簡單,你可以很快學會它,從而把更多的時間用於學習書中的編程思想以及復雜問題的解決之道上。

PeterNorvig曾經寫過一篇非常精彩的SICP書評,其中有這樣一段:

Touseananalogy,ifSICPwereaboutautomobiles,,howtheyarebuilt,andhowonemightdesignfuel-efficient,safe,.highway,justlikeeveryoneelse.

如果你是文中的前者,閱讀SICP將成為你銜接啟蒙與入門階段的關鍵點

雖然SICP是一本「入門書」,但對於初學者還是有一定的難度,以下是一些十分有用的輔助資源:

):由上文提到的Google研究主管PeterNorvig主講,教學語言為Python,內容有一定難度。

HowtoDesignPrograms,SecondEdition:HtDP的起點比SICP低,書中的內容循循善誘,對初學者很友好,如果覺得完成SICP過於困難,可以考慮先讀一讀HtDP。

UCBerkeleySICP授課視頻以及SICP的兩位作者給Hewlett-Packard公司員工培訓時的錄像(中文化項目)

ComposingPrograms:一個繼承了SICP思想但使用Python作為教學語言的編程導論(其中包含了一些小項目)

SICP解題集:對於書後的習題,作為初學者應盡力並量力完成。

完成了這部分學習後,你會逐步建立起一個自己的程序設計模型,你的腦子里不再是一團亂麻,你會意識到記住庫和語法並不會教你如何解決編程問題,接下來要學些什麼,在你心裡也會明朗了很多。這時候才是真正開始進行項目實踐,補充推動力的好時機。

關於項目實踐:對於入門階段的初學者,參與開源項目還為時過早,這時候應該開始一些簡單的項目,諸如搭建一個網站並維護它,或是編寫一個小游戲再不斷進行擴展,如果你自己的想法不明確,MegaProjectList中選取項目。總之,務必在這時拿下你項目實踐的第一滴血。

與此同時,別忘了繼續打好根基。為了將來的厚積薄發,在下面這幾個方面你還要繼續做足功課(注意:下面的內容沒有絕對意義上的先後順序):

計算機系統基礎

有了之前程序設計的基礎後,想更加深入地把握計算機科學的脈絡,不妨看看這本書:《深入理解計算機系統》ComputerSystemsAProgrammer'sPerspective。這里點名批評這本書的中譯名,其實根本談不上什麼深入啦,這本書只是CMU的「計算機系統導論」的教材而已。CMU的計算機科學專業相對較偏軟體,該書就是從一個程序員的視角觀察計算機系統,以「程序在計算機中如何執行」為主線,全面闡述計算機系統內部實現的諸多細節。

如果你看書覺得有些枯燥的話,可以跟一門Coursera上的MOOC:TheHardware/SoftwareInterface,這門課的內容是CSAPP的一個子集,但是最經典的實驗部分都移植過來了。同時,可以看看TheCProgrammingLanguage,回顧一下C語言的知識。

完成這本書後,你會具備堅實的系統基礎,也具有了學習操作系統,編譯器,計算機網路等內容的先決條件。當學習更高級的系統內容時,翻閱一下此書的相應章節,同時編程實現其中的例子,一定會對書本上的理論具有更加感性的認識,真正做到經手的代碼,從上層設計到底層實現都瞭然於胸,並能在腦中回放數據在網路->內存->緩存->CPU的流向。

此外,也是時候去接觸UNIX哲學了:KISS-KeepitSimple,Stupid.在實踐中,這意味著你要開始熟悉命令行界面,配置文件。並且在開發中逐漸脫離之前使用的IDE,學會使用Vim或Emacs(或者最好兩者都去嘗試)。

閱讀《UNIX編程環境》

閱讀《UNIX編程藝術》

折騰你的UN*X系統

數據結構與演算法基礎

如今,很多人認為編程(特別是做web開發)的主要部分就是使用別人的代碼,能夠用清晰簡明的方式表達自己的想法比掌握硬核的數學與演算法技巧重要的多,數據結構排序函數二分搜索這不都內置了嗎?工作中永遠用不到,學演算法有啥用啊?這種扛著實用主義大旗的「碼農」思想當然不可取。沒有扎實的理論背景,遭遇瓶頸是遲早的事。

數據結構和演算法是配套的,入門階段你應該掌握的主要內容應該是:這個問題用什麼演算法和數據結構能更快解決。這就要求你對常見的數據結構和演算法了熟於心,你不一定要敲代碼,用紙手寫流程是更快的方式。對你不懂的數據結構和演算法,你要去搜它主要拿來幹嘛的,使用場景是什麼。

供你參考的學習資源:

《演算法導論》:有人說別把這本書當入門書,這本書本來就不是入門書嘛,雖說書名是IntroctiontoAlgorithms,這只不過是因為作者不想把這本書與其他書搞重名罷了。當然,也不是沒辦法拿此書入門,讀第一遍的時候跳過習題和證明就行了嘛,如果還覺得心虛先看看這本《數據結構與演算法分析》

CourseraAlgorithms:DesignandAnalysis[Part1]&[Part2]:Stanford開的演算法課,不限定語言,兩個部分跟下來演算法基礎基本就有了;英語沒過關的:麻省理工學院公開課:演算法導論

入門階段還要注意培養使用常規演算法解決小規模問題的能力,結合前文的SICP部分可以讀讀這幾本書:《編程珠璣》,《程序設計實踐》

編程語言基礎

.,.Additionally,,

-ThePragmaticProgrammer

此外還要知道,學習第n門編程語言的難度是第(n-1)門的一半,所以盡量去嘗試不同的編程語言與編程範式,若你跟尋了前文的指引,你已經接觸了:「干凈」的腳本語言Python,傳統的命令式語言C,以及浪漫的函數式語言Scheme/Racket三個好朋友。但僅僅是接觸遠遠不夠,你還需要不斷繼續加深與他們的友誼,並嘗試結交新朋友,美而雅的Ruby小姑娘,Hindley-Milner語言家族的掌中寶Haskell都是不錯的選擇。但有這么一位你躲不開的,必須得認識的大夥伴—C++,你得做好與他深交的准備:

入門:C++Primer

[可選]進階:

高效使用:EffectiveC++

深入了解:《深度探索C++對象模型》;C++Templates

研究反思:TheDesignandEvolutionofC++;對於C++這個NecessaryEvil,看這本書可以讓你選擇是成為守夜人還是守日人。

現實是殘酷的,在軟體工程領域仍舊充斥著一些狂熱者,他們只掌握著一種編程語言,也只想掌握一種語言,他們認為自己掌握的這門語言是最好的,其他異端都是傻X。這種人也不是無葯可救,有一種很簡單的治療方法:讓他們寫一個編譯器。要想真正理解編程語言,你必須親自實現一個。現在是入門階段,不要求你去上一門編譯器課程,但要求你能至少實現一個簡單的解釋器。

供你參考的學習資源:

《程序設計語言-實踐之路》:CMU編程語言原理的教材,程序語言入門書,現在就可以看,會極大擴展你的眼界,拉開你與普通人的差距。

Coursera編程語言MOOC:課堂上你能接觸到極端FP(函數式)的SML,中性偏FP的Racket,以及極端OOP(面向對象)的Ruby,並學會問題的FP分解vsOOP分解、ML的模式匹配、Lisp宏、不變性與可變性、解釋器的實現原理等,讓你在將來學習新語言時更加輕松並寫出更好的程序。

:熱熱身,教你寫一個簡單的瀏覽器——其實就是一個javascript和html的解釋器,完成後的成品還是很有趣的;接下來,試著完成一個之前在SICP部分提到過的項目:用Python寫一個SchemeInterpreter

其他

編程入門階段比較容易忽視的幾點:

學好英語:英語是你獲取高質量學習資源的主要工具,但在入門階段,所看的那些翻譯書信息損耗也沒那麼嚴重,以你自己情況權衡吧。此外英語的重要性更體現在溝通交流上,LinusTorvalds一個芬蘭人,一口流利的英語一直是他招募開發者為linux幹活的的法寶,這是你的榜樣。

學會提問:學習中肯定會遇到問題,首先應該學會搜索引擎的「高級搜索」,當單靠檢索無法解決問題時,去StackOverflow或知乎提問,提問前讀讀這篇文章:Whathaveyoutried?

不要做一匹獨狼:嘗試搭建一個像這樣簡單的個人網站,不要只是一個孤零零的About頁面,去學習Markdown與LaTeX,試著在Blog上記錄自己的想法,並訂閱自己喜歡的編程類博客。推薦幾個供你參考:JoelonSoftware,PeterNorvig,CodingHorror

小結

以上的內容你不應該感到懼怕,編程的入門不是幾個星期就能完成的小項目。期間你還會遇到無數的困難,當你碰壁時試著嘗試「費曼」技巧:將難點分而化之,切成小知識塊,再逐個對付,之後通過向別人清楚地解說來檢驗自己是否真的理解。當然,依舊會有你解決不了的問題,這時候不要強迫自己——很多時候當你之後回過頭來再看這個問題時,一切豁然開朗。

此外不要局限與上文提到的那些材料,還有一些值得在入門階段以及將來的提升階段反復閱讀的書籍。ThePragmaticProgrammer就是這樣一本程序員入門書,終極書。有人稱這本書為代碼小全:從DRY到KISS,從做人到做程序員,這本書教給了你一切,你所需的只是遵循書上的指導。

後記

如果你能設法完成以上的所有任務,恭喜你,你已經真正實現了編程入門。這意味著你在之後更深入的學習中,不會畏懼那些學習新語言的任務,不會畏懼那些「復雜」的API,更不會畏懼學習具體的技術,甚至感覺很容易。當然,為了掌握這些東西你依舊需要大量的練習,腰還是會疼,走路還是會費勁,一口氣也上不了5樓。但我能保證你會在思想上有巨大的轉變,獲得極大的自信,看老師同學和csdn的眼光會變得非常微妙,雖然只是完成了編程入門,但已經成為了程序員精神世界的高富帥。不,我說錯了,即使是高富帥也不會有強力精神力,他也會懷疑自己,覺得自己沒錢就什麼都不是了。但總之,你遵循指南好好看書,那就會體驗「會當凌絕頂」的感覺。


首先要想學編程,選一門合適的計算機語言就十分重要了,怎麼去選擇就顯得尤為重要了,這要根據自己的興趣愛好及每個語言的特性來選擇,比如說PHP適合做web開發,易學習,易上手,非常流行的一門計算機語言了,我個人比較推薦php語言。

java可以做web開發,做安卓app開發也用的是java,在學習程度上上可能比php稍微難上手一點,不過也是沒問題的,如果對java感興趣可以嘗試一下。

python是目前比較火的一門語言了,比較適合做人工智慧領域,另外寫網路爬蟲類的程序,用python也是非常合適的了,看個人興趣來選擇了。

c,c++,c#這些語言就不推薦給了,特別是c#,已經是比較過時的一門語言了,即使學習好了,也不太適合去找工作,c與c++並不是十分適合初學者來學習,因此也是沒必要進行考慮了,還有一些更小眾的語言,更是沒有必要去考慮,因此關於語言的學習就從上面3種語言去選擇一門自己所感興趣的吧!

研發搭建環境

如果選擇好計算機語言,那麼接下來就是研發環境的搭建了,因為只有研發環境搭建好了,才可以進行後續的編程工作,比如說PHP,那麼就從網路上搜一下如何安裝PHP環境,能搜出一些簡單的教程,初學者按照教程一步一步來,頂多半天時間就可以把研發環境裝好了,如果是java,就需要先安裝jdk,進行環境變數的配置等,網上也有相關的教程,也是十分容易的,相信大家只要按照教程來做,都可以很輕易的把研發環境搭建起來的

選好視頻和書籍,輔助學習。既然是零基礎學習,就需要進行系統的學習,而不是到處網路零基礎的知識點進行學習。

代碼練習

跟隨教程一個一個章節的進行學習,需要注意的一點就是不能只是去看,那樣不行,要對每一個章節的知識點要親自用代碼敲一遍,運行一下試試效果才行,這樣才能提高自己的動手能力,才開始會覺得有一點生疏,慢慢的就會熟練起來,逐漸會增加編程的興趣。這個過程就是需要反復的進行練習,大量的代碼練習才行。這個過程是5步中最關鍵的階段了,重在代碼親自練習,對編程中有的章節不明白的地方,千萬不要放過去,可以在網上找一些相關的編程交流群,參加進去,在線上咨詢一些過來人,也許就可以輕松幫你解決疑問了,對你的學習十分幫助,並且整個過程也都是免費的。

項目實戰

如果說基礎教程都按部就班的都實踐過一遍了,那麼你就有一定的編程的基本功了,那麼自己就可以嘗試著做一些小項目,把學到的知識給串起來,進入項目實戰階段,比如說自己設計一個學生管理系統,並把它完成,如果不了解怎麼設計,可以去網上搜索。慢慢就有思路了。

我也在學習這方面,視頻書籍看過不少,最推薦的還是北京尚學堂的學習資料,Java.300集,Python400集,都是很經典的入門基礎教程,而且是結合項目學習的,很有意思,干貨滿滿,還都是免費的,推薦你可以去看看,相信可以帶你走進變成的世界。


從零開始學編程,第一關就是要選擇你所要學習的編程語言。面對著琳琅滿目的編程語言,初學者常常一籌莫展,拿不定主意,不知該選哪

2. 如何學好計算機編程

問題一:從零開始學習計算機編程應該怎麼學 樓主注意一下 如果想學計算機的話需要很強的自學能力和耐性 如果這兩點沒有最好別學。
如果想學第一步需要學習一門編程語言推薦C語言 樓主可以查下編程語言排行榜C一直穩居第一名
從基本的C語言語法入手,邊學語法邊寫程序不要忘記做一下書籍的課後編程練習題,然後可以學習下java語言,java有自己的很多程序庫可以直接調用,買本java的教程看看可以寫寫小程序了。然後如果想深入你還需要學習操作系統、計算機組成原理、計算機網路、編譯原理、還有數學(離散數學很重要),當然了還學要學別的東西,太多了一下子說不全。我是軟體工程專業,課程基本自學的,純經驗之談。

問題二:電腦編程怎麼樣?學的人多不多,好不好就業? 學的話比較難,c++還是要有一定我的英文水平的,就業是可以的還是看你學的怎麼樣,比較耗腦子,

問題三:零基礎學計算機編程有什麼好的書籍推薦 下面這個可以參考一下,具體還要看個人的情況。
我覺得應該根據你的工作需要或者說你的發展方向而定。基本上兩大類吧:C/C++和Java。比如,如果你要做企業級應用的你應該學習Java和C#;如果你想做嵌入式,那麼應該學好C語言;其他情況下,在你不知道要做什麼之前你可以選擇學習C/C++。學會這兩大類中的一類,對於你學習其他語言都將是比較輕松,包括腳本語言,動態語言??呵呵,這里想就自己的學習經歷和情況給大家一個建議,僅供參考。
1、我的入門是從學習C語言開始的(其實課程是C++),這是我們學校的公共課,我上課比較認真(雖然老師講得很差,而且一段時間後,我就發現自己的基礎掌握比她好,當然理解深度沒她好),因此,我認為對於完全沒有基礎的人而言,聽別人講比較容易入門。當時的教材是學校自己編的,挺爛的。
建議一(以C/C++為例),對於剛想進入編程的人(就是從來都沒有接觸過編程的人),最好是聽課的方式(自己看的話估計要很慢,而且很痛苦),可以找視頻或者培訓等。C語言推薦入門教材:譚浩強的C語言,最新版是第三版,不過第二版應該也可以了(藍色的)。說明一下:堅決不同意直接看K&R的《The C programming language》,這本書絕對不是初學者可以看懂的,裡面講語法的並不多,語法都是合在程序裡面講。不過這本書非常好,入門以後一定要看的一本書。
當然可以從C++直接入門,C++之父強烈推薦從C++直接入手。C++推薦入門教材:錢能的C++(紅色的,清華大學出版),這本書第一版不是ISO C++,不過比較經典,作者現在也出了第二版了,第二版好像不是太好。國外的最好的入門教材據說是:《Acclerated C++》作者是Koenig和Moo夫婦,非常厲害。他們的著作還有《c陷阱與缺陷》《c++沉思錄》。《Acclerated C++》這本入門的書我沒有看過,我覺得還是先找本國內的書好好看,看的差不多了,國外的經典書籍隨便看就會覺得很有味道,否則你可能會很受打擊。入門的書至少要看兩三遍(要徹底理解哦 ):)。如果是C++,我建議後面類的部分至少要理解三到五遍。說明一下,c++模板的部分可以先不用看,如果有興趣的話,等把c++學的差不多了,我覺得可以把模板、STL、泛型編程結合起來學習,這個又是一個很大的工作量了,又得下很大的功夫。所以說,C++博大精深啊。
建議二、學習過程中要結合簡單的演算法,像冒泡還有類似c語言程序百例這樣的小例子做做;更進一步應該做點大一點的項目,最好是控制台程序。或者你已經著手學習win32、MFC或linux,你也可以結合平台做點小的項目。
2、第一階段是最苦的,接下來相對就知道應該怎麼去學習了。這時候假設你已經有了扎實的c++基礎。這是你可以選擇也應該選擇發展方向了,做企業級應用,還是系統開發,嵌入式設計或者游戲開發?? 那時我其實並沒有考慮那麼多,因為我不是學計算機的,因此我就把參加一些計算機之類的考試當作學習目標。我當時其實C++語言基礎已經很不錯了,但是上機實踐很少(那時我沒有電腦),因此參加省計算機二級,全國計算機三級和全國計算機四級考試,結果上機都沒有通過。我很郁悶,二級的時候是我不知道怎麼樣進那個DOS界面把題目調出來,三級的時候是很快就編好了,也通過運行了,可是成績出來卻不及格,四級的時候是編好了,可能是我那題目比較難,好像用了兩次循環,結果那破機器竟然承受不了。後來一亂就毀了(當然主......>>

問題四:學好計算機編程可以從事什麼工作! 1 可視化編程
掌握程序設計方法及可視化技術,精通一種可視化平台及其軟體開發技術。獲取Delphi程序員系列、Java初級或VB開發能手認證。
就業方向:企業、 *** 、社區、各類學校等可視化編程程序員。
2 WEB應用程序設計
具有美工基礎和網頁動畫設計能力,掌握互動式網頁程序的設計技術,能進行網站建設和維護。獲取Macromedia多媒體互動設計師或Delphi初級程序員或Delphi快速網路開發工程師認證。
就業方向:企業、 *** 、社區、各類學校等WEB應用程序員。
3 軟體測試
掌握軟體測試的本原理、方法和組織管理,精通軟體測試工具。獲取ATA軟體測試工程師或Delphi初級程序員或Java初級程序員認證。
就業方向:企業、 *** 、社區、各類學校等軟體測試員。
4 資料庫管理
能應用關系範式進行資料庫設計,精通SQL語言,勝任資料庫伺服器管理與應用工作。獲取Oracle資料庫管理或SQL Server資料庫應用或Windows XP應用認證。
就業方向:企業、 *** 、社區、各類學校等部門的中、大型資料庫管理員。
5 圖形圖像製作
精通國際上流行的圖形/圖像製作工具(如CorelDraw、Photoshop、Pagemaker等)。獲取平面設計師相關的認證。
就業方向:廣告製作公司、建築設計公司、包裝裝璜設計公司、居室裝修公司、出版印刷公司。
6 網路構建技術
熟悉網路結構和組網方式,掌握建網方法,能利用工具分析和排除常見網路故障。獲取Cisco路由配置或華為網路工程或AMP應用工程師認證。
就業方向:企業、 *** 、社區、各類學校等網路構建工程師。
7 網路系統管理
掌握網路系統管理的基本知識與應用技能,能進行網路系統的安全設置。獲取Window2000 Server或TurboLinux TLCE或Cisco路由配置專家認證。
就業方向:企業、 *** 、社區、各類學校等網路系統管理員。
8 多媒體製作
具有多媒體程序設計與多媒體製作策劃的能力。基本掌握面向對象程序設計與建模、造型設計、場景設計、分鏡頭原理等技能。獲取多媒體設計師相關的認證。
就業方向:多媒體設計與製作公司、動畫美術製作出版公司、廣告製作公司。

問題五:准備自學計算機編程,這幾個哪個易學,哪個就業前景好 對於計算機,無論你學那個語言,那個語言的技術,C語言是一個無比重要的基礎。
以Java為例
如果你沒有C語言,Java的學習將無比困難。而java是Android基礎中的基礎。不學C語言的指針,不知道動態內存分配,你將幾乎無法理解Java中關於類的一切知識。
如果不學C語言,Java將會被認為無比復雜。僅僅一個HelloWord就要各種關鍵字 4 個之多。所謂「面向過程」、「面向對象」等重要概念更是無從說起。
C語言是一個基礎,是一個經驗。Java和C語言是走向所有編程語言的通行證。絕不可單一不變,融會貫通是關鍵。學精任意一門,都將前途無量。
隆重推薦
郝斌的各種編程教程(包括JAVA)
以下來自網路貼吧:
之前發過一次帖子... ...不過好像沉下去了, 看到好多人需要, 再發一次吧... ... 手機自帶的播放器是不可以播放的, 各位若一款播放器不行就換幾款常用的播放器試試看, 肯定有 *** 播放的.
郝斌c語言avi格式教程:pan./s/1kTsuSbt?密碼:z7y8
郝斌SQL 2005教程avi格式:pan./s/1i31mz8T
郝斌java教程avi格式:pan./s/1sjLVted
郝斌數據結構教程avi格式:pan./s/1hqAbUPQ。
原帖自:
tieba./...&pn=0&
我就是從這里開始的,祝你好運。

問題六:如何學習電腦編程入門。 編程與數學成績的好壞沒有什麼直接聯系,如果想學好編程,最好不要一開始就學高級語言(比如VB之類的),那會讓你以後的編程水平沒進步。
第一步,可以先從《微機原理與匯編技術》開始,有了基本的計算機基礎,你才會對整個計算機編程的原理以及來龍去脈有個大致的了解。
第二步,把C語言學好,可以不要求精通,但是一定要掌握的全面一點。C語言的編碼軟體很多,比如borland C,網上很多,網路可以找到。
第三步,c++。可以先接觸Borland C Builder V6.0。學習的教材有 「C++程序設計譚浩強100%25完整・清華大學」,網上有其電子書。
第三部學好C++之後,可以陸續瀏覽下C#,VB之類的高級語言,只有學好了一門語言,其他語言才會一通百通。

問題七:在哪裡學電腦編程好 你好,學電腦介意去正規專業的電腦學校學習,在好的學習環境里能有更好的收獲。

問題八:如何學好計算機,需要什麼條件? 學計算機首先是數學要好,因為計算機編程必須要藉助數學思想來進行建模,有就是英語,程序代碼都是英文的。計算機很枯燥,所以必須要下苦工才能成功,和那些打游戲之類的不同。

問題九:想學電腦編程從什麼開始學起好? 我個人的學習過程(供參考) 最早是要有對計算機的興趣:看了許多雜志和報紙,當然都是些硬體知識和軟體的使用技巧,這是啟蒙書 後來我利用高三暑期自學了編程,是VB,快開學的時候我基本算是小通VB了 來到大學,我的專業是計算機,於是在學校學了C語言,這個時候我就發現,傳說中過時的VB竟對我學C語言帶來了極大的幫助,因為我已經有了編程的思想了,之後我學習 POWER BUILDER , VB.NET , ASP.NET , JAVA等編程語言,真的是越學越順.... 說到這里我就不繼續吹牛了,我只想再說一句:經驗都有它的特殊性,有學准有用,別聽別人扯蛋

問題十:從零開始學習計算機編程應該怎麼學 樓主注意一下 如果想學計算機的話需要很強的自學能力和耐性 如果這兩點沒有最好別學。
如果想學第一步需要學習一門編程語言推薦C語言 樓主可以查下編程語言排行榜C一直穩居第一名
從基本的C語言語法入手,邊學語法邊寫程序不要忘記做一下書籍的課後編程練習題,然後可以學習下java語言,java有自己的很多程序庫可以直接調用,買本java的教程看看可以寫寫小程序了。然後如果想深入你還需要學習操作系統、計算機組成原理、計算機網路、編譯原理、還有數學(離散數學很重要),當然了還學要學別的東西,太多了一下子說不全。我是軟體工程專業,課程基本自學的,純經驗之談。

3. 如何學好編程

要想學好編程,首先要學好編程的基礎語言及常用的各種語法規則,其次就是要多次實踐應用驗證,最後就是不斷的進行經驗積累。

4. 浠庨浂寮濮嬪︾紪紼嬭佸嚑騫

緙栫▼闂ㄦ涘叾瀹炲苟涓嶉珮錛岃嚜瀛﹀嚑涓鏈堝氨鍙浠ュ叆闂錛屼絾鏄鍒濈駭紼嬪簭鍛樿繘闃跺嵈寰堥毦錛岄渶瑕佸︾殑鐭ヨ瘑寰堝氬緢澶氥傛墍浠ヨ嚜瀛︾紪紼嬫兂鍏ラ棬錛屽緢綆鍗曪紝鍙瑕佽嚜宸辮兘鍔鍔涳紝鑳藉潥鎸侊紝鍑犱釜鏈堜互鍚庝綘灝卞凡緇忓湪璺涓婁簡銆傚敖綆¤繖涓榪囩▼寰堥毦錛屼綘浼氳糠鑼銆佸洶鎯戱紝浣嗘槸浣犺佸潥淇″姫鍔涘繀灝嗘湁緇撴灉銆

鎺屾彙鍩虹鐨勮娉

鎴戜滑鏈緇堢洰鐨勬槸灝藉揩鐨勫﹀畬鐩稿叧鐭ヨ瘑錛岀劧鍚庢壘鍒頒竴浠藉伐浣滐紝榪涘叆榪欎釜琛屼笟銆傛垜浠榪欓噷鐨勬柟娉曞氨鏄蹇閫熸帉鎻$煡璇嗚繍鐢ㄣ備絾鏄寮鍙戠殑榪欎釜琛屼笟浣犲叾瀹為渶瑕佸︿範鐨勭煡璇嗗疄鍦ㄥお澶氬お澶氾紝浣嗘槸鏅閫氬叕鍙哥殑涓涓鍒濈駭宸ョ▼甯堝彧瑕佽兘淇濊瘉浼氱敤涓氬唴閫氱敤鐨勬嗘灦錛岃兘瑙e喅鐨勫熀鏈鐨勪笟鍔¢棶棰樺氨濂姐傛墍浠ユ垜浠榪欓噷瀛︿範榪囩▼蹇呴』鐨勫厛鍋氬噺娉曘傝繖涓榪囩▼涓鎴戜滑鍏堜笉鐢ㄥ幓瀛︿範綆楁硶錛屾嗘灦婧愮爜浠涔堢殑錛屽厛鍘誨︿範宸ヤ綔涓闇瑕佺敤鍒扮殑鐭ヨ瘑錛岀瓑鎴戜滑榪涘叆琛屼笟鍐嶅幓瀛︿範銆

鑷瀛︾殑絎涓姝ワ紝鎴戜滑鍏堟帉鎻¤璦鐨勫熀鏈鐭ヨ瘑鐐廣傛垜浠涓嬮潰鎷 Java 涓句緥銆

瀛︿範 Java錛屾帹鑽愪嬌鐢ㄨ嗛戝姞涔︾睄瀛︿範銆

鑷充簬涔︾睄錛岃繖閲屾帹鑽銆孞ava鏍稿績鎶鏈(鍗1):鍩虹鐭ヨ瘑銆嶏紝銆孞ava緙栫▼鎬濇兂銆嶃備袱鏈涔﹂兘鏄緇忓吀濂戒功錛屽挨鍏跺悗闈涓鏈鏇存槸緇忓吀涓緇忓吀銆傝繖閲屽垏璁頒竴鐐癸紝鍒囧嬁涔 銆寈x 鍏ラ棬鍒扮簿閫氥嶃併21 澶╁甫浣犲︿細 xx銆 緋誨垪涔︾睄錛屽敖綆¤繖綾諱功綾嶉攢閲忓緢濂姐

涓嶆帹鑽愮洿鎺ョ湅涔﹀︿範銆傚洜涓轟綘濡傛灉鍗曠函鐪嬩功錛屼綘寰堝規槗浼氬洶涔忥紝鑰屼笖寰堝規槗鎶撲笉浣忛噸鐐廣傝繖涓榪囩▼寰堝規槗浼氳╀綘澶卞幓鍏磋叮銆傝岀粨鍚堣嗛戝︿範錛屼綘鍙浠ヨ窡瑙嗛戣繘搴﹀︿範錛岃繘鑰岃兘鎺屾彙鑷宸卞ぇ姒傚︿範榪涘害銆傝繖涓瀛︿範榪囩▼涓錛屼綘鍏堢湅瀹岃嗛戱紝鐒跺悗鍔ㄦ墜緇冧範瑙嗛戜腑鐨勪唬鐮併

涓瀹氳佸姩鎵嬬粌涔狅紒

涓瀹氳佸姩鎵嬬粌涔狅紒

涓瀹氳佸姩鎵嬬粌涔狅紒

浠g爜鏄闇瑕佸姩鎵嬬粌涔狅紝鎵嶈兘瀛扮敓宸с

瀛﹀畬 Java 鍩虹錛岀敤瀛︾殑鐭ヨ瘑鍘誨畬鎴愪竴涓灝忛」鐩錛岃繖閲屼細璁╄嚜宸辨湁浜涘皬鎴愬氨錛岃繖鏍瘋兘鏇村ソ瀛︿笅鍘匯

Java 鍩虹鐭ヨ瘑涓嶇敤鍘誨 awt錛宻wing 絳夊浘褰㈠寲緙栫▼銆

濡傛灉榪欑涓姝ラ兘鍧氭寔涓嶄笅鏉ワ紝閭e叾瀹炵湡鐨勬斁寮冨惂銆傚悗闈浣犲彧浼氳秺瀛﹁秺鍥伴毦

鑱婅亰閫夋嫨鐨勯棶棰

鑷瀛︾浜屾ワ紝閫夋嫨浠庝簨鐨勬柟鍚戙

瀛﹀畬 Java 鍩虹錛屼綘灝遍潰涓磋嚜宸變互鍚庨渶瑕佷粠浜嬪紑鍙戠殑鏂瑰悜銆傚 Java 鏉ヨ達紝涓鑸鍒嗕負鏈嶅姟絝寮鍙戜笌瀹㈡埛絝寮鍙戱紝鏂瑰悜涓嶅悓錛屾帴涓嬪幓瀛︾殑鐭ヨ瘑鐐瑰氨浼氫笉鍚屻傛墍浠ヨ繖閲岄夋嫨闇瑕佹厧閲嶆濊冦

榪欓噷鍙浠ヤ嬌鐢ㄤ竴涓鏂規硶錛屾垜浠浠庝簨浠剁殑浠峰煎嚭鍙戱紝鍒楀嚭涓涓浼樼己娓呭崟琛ㄣ傛瘮濡備綘瑕侀夋嫨鏈嶅姟絝寮鍙戣繕鏄瀹㈡埛絝寮鍙戱紝浣犲厛鍘誨厖鍒嗕簡瑙h繖涓や釜鏂瑰悜錛岀劧鍚庡垪涓鍒嗕紭緙烘竻鍗曡〃鏍礆紝鎶婁簡瑙e埌姣忎竴涓鐐歸兘鍐欎笂鍘伙紝鎵撲竴涓鍒嗘暟錛屽垎鏁板垎涓 -10 鍒 10 鍒嗐傛渶鍚庢垜浠緇熻′竴涓鎬誨垎錛岀劧鍚庨偅涓鍒嗘暟杈冮珮鐨勬柟鍚戙

鎺屾彙鏁版嵁搴

鐢變簬鏈浜轟粠浜嬫湇鍔$寮鍙戱紝涓嬮潰璇磋存湇鍔$寮鍙戝︿範鐨勮繃紼嬨

鏈嶅姟絝寮鍙戱紝闇瑕佸︿範鐨勪笢瑗誇細寰堝氾紝涓嶈繃涓嶇敤鎷呭績錛屾垜浠涓涓涓璇淬

棣栧厛鎴戜滑鍏堣存暟鎹搴撱傛暟鎹搴撳逛簬鏈嶅姟絝寮鍙戱紝涓瀹氳佸︿細鐨勬妧鏈錛屾墍浠ヨ繖涓鎴戜滑闇瑕佺潃閲嶅︿範銆

棣栧厛鎸夌収緗戜笂鏁欑▼錛岃嚜宸卞湪鐢佃剳涓婃惌寤轟竴涓鏁版嵁搴擄紝榪欓噷鎺ㄨ崘 MySQL銆傛惌寤轟箣鍚庯紝鍐嶄笅杞戒竴涓鏁版嵁搴撳㈡埛絝綆$悊宸ュ叿錛屽 Navicat錛孌ataGrip銆傚紕瀹岃繖浜涘熀紜璁炬柦涔嬪悗錛屾垜浠榪欓噷鎺ョ潃鍘誨︿細 SQL 鐨勮娉曘傝繖閲岀潃閲嶅︿範鍗曡〃澧炲垹鏀規煡鐨勮娉曪紝璺ㄨ〃鐨勮繛鎺ユ煡璇㈢瓑銆傜綉涓婃壘涓涓渚嬪瓙錛屽傚彲浠ヨ嚜宸辨瀯寤轟竴涓瀛︾敓璇劇▼淇℃伅琛錛屽仛鍒板彲浠ョ敤浠ヤ笂瀛︿範鍒扮殑璇娉曘

瀛︿範瀹屾暟鎹搴擄紝鎺ョ潃鎴戜滑灝遍渶瑕佸︿範Java JDBC 鐨勭煡璇嗐傚︿範鐨 JDBC 灝辨槸璁╂垜浠浜嗚В錛屽備綍浣跨敤 Java 鎿嶄綔鏁版嵁搴擄紝榪愯 Mybatis鐨勫炲垹鏀規煡鐨勮鍙ャ

鎺ョ潃鎴戜滑鍙浠ュ幓瀛︿範鐩稿叧 ORM 鐨勬嗘灦錛屽 Hibernate 鎴 Mybatis錛岃繖閲屾帹鑽 Mybatis銆傚︿範妗嗘灦錛屾垜浠瑕佸仛鍒版帉鎻℃嗘灦鐨勪嬌鐢ㄦ妧宸у氨鍙浠ャ

榪欎釜榪囩▼浣犲彲鑳戒細鍙戠幇錛孧ybatis 榪欑被妗嗘灦榪欎箞濡傛ょ畝鍖栧紑鍙戱紝涓轟粈涔堟垜浠涓嶇洿鎺ュ︿範 Mybatis 錛

瀛︿範 JDBC 鐨勭洰鐨勶紝鍏跺疄灝辨槸璁╀綘浜嗚В榪欎簺 ORM 鐨勫熀紜銆

瀛﹀畬榪欎釜闃舵碉紝鎴戜滑鎺ヤ笅鍘誨氨瑕佽繘鍏 WEB 寮鍙戙

WEB 寮鍙

榪欎釜榪囩▼鎴戜滑棣栧厛瀛︿範涓浜涘墠絝鐭ヨ瘑錛屽 HTML錛孋SS,JavaScript錛岀劧鍚庡啀鍘 Jquery 絳夊墠絝妗嗘灦錛屽仛鍒拌兘瀹炵幇涓浜涚畝鍗曠殑鍔熻兘銆傛垜浠涓嶉渶瑕佽窡浣犱笂闈涓鏍風簿閫氾紝鎴戜滑鍙瑕佷簡瑙d竴浜涙傚康鍗沖彲銆

鎺ヤ笅鍘繪垜浠瀛︿範 Servlet錛屽仛鍒拌兘浣跨敤鍘熺敓 Servlet + Jsp 鑳借繍琛屼竴涓 WEB 紼嬪簭銆

鍚庨潰鎴戜滑鍐嶅幓瀛︿範 Spring 妗嗘灦錛屼嬌鐢 SpringMVC 浜嗚В MVC 鐨勬傚康銆傛渶鍚庣敤 SpringMVC+Spring+Mybatis+MySQL 瀹屾垚涓涓綆鍗曠殑綆$悊緋葷粺銆

鍏朵粬

瀛﹀畬浠ヤ笂鍐呭癸紝鍩烘湰涓婂凡緇忓︿範瀹屽伐浣滀腑瀛︿範鍒扮殑鎶鏈鏍堛傝繖涓榪囩▼浣犺繕闇瑕侀濆栧︿範涓浜涘伐浣滀腑鐢ㄥ埌鍏朵粬鐭ヨ瘑銆

浣犻渶瑕佸幓瀛︿範鍗忓悓寮鍙戠殑宸ュ叿錛屽 Git錛孲VN銆乤picloud studio澶氱緙栬瘧銆傚仛鍒頒簡瑙e備綍鏂板緩鍒嗘敮錛屽備綍鎷夊彇浠g爜錛屽備綍鍚堝苟浠g爜鍗沖彲銆

浣犺繕闇瑕佸幓瀛︿範涓浜 Linux 鐨勫懡浠ゃ

鎬葷粨

瀛﹀畬涓婅堪鍐呭癸紝浣犲疄闄呭氨宸茬粡鎺屾彙鍒濈駭寮鍙戞墍闇瑕佺殑鎶鏈錛屽凡緇忓熀鏈涓婂彲浠ヤ粠浜嬩竴涓鍒濈駭寮鍙戠殑宀椾綅銆傛垜浠涓婇潰璁茬殑閮芥槸浣跨敤鎶宸э紝浣嗘槸闈㈣瘯鐨勬椂鍊欏彲鑳戒細闂浣犱竴浜涘師鐞嗘х殑鍐呭癸紝鎵浠ュ湪鎴戜滑鍘繪壘宸ヤ綔涔嬪墠鎴戜滑榪橀渶瑕佸幓浜嗚В涓浜涘師鐞嗘х煡璇嗐傝繖鏂歸潰鐨勫唴瀹歸氳繃鎼滅儲寮曟搸鎼滅儲鍗沖彲銆

榪欎釜榪囩▼浣犲彲鑳戒細紕板埌寰堝氶棶棰橈紝榪欎釜榪囩▼涓瀹氬杽浜庝嬌鐢ㄦ悳緔㈠紩鎿庛

5. 要成為一名專業的程序員,從零開始需要怎麼一步步來比較好,要把最底層的先學精通嗎(個人認為)求學長

前言
你是否覺得自己從學校畢業的時候只做過小玩具一樣的程序?走入職場後哪怕沒有什麼經驗也可以把以下這些課外練習走一遍(朋友的抱怨:學校課程總是從理論出發,作業項目都看不出有什麼實際作用,不如從工作中的需求出發)
建議:
不要亂買書,不要亂追新技術新名詞,基礎的東西經過很長時間積累而且還會在未來至少10年通用。
回顧一下歷史,看看歷史上時間線上技術的發展,你才能明白明天會是什麼樣。
一定要動手,例子不管多麼簡單,建議至少自己手敲一遍看看是否理解了里頭的細枝末節。
一定要學會思考,思考為什麼要這樣,而不是那樣。還要舉一反三地思考。
註:你也許會很奇怪為什麼下面的東西很偏Unix/Linux,這是因為我覺得Windows下的編程可能會在未來很沒有前途,原因如下:
現在的用戶界面幾乎被兩個東西主宰了,1)Web,2)移動設備iOS或Android。Windows的圖形界面不吃香了。
越來越多的企業在用成本低性能高的Linux和各種開源技術來構架其系統,Windows的成本太高了。
微軟的東西變得太快了,很不持久,他們完全是在玩弄程序員。詳情參見《Windows編程革命史》
所以,我個人認為以後的趨勢是前端是Web+移動,後端是Linux+開源。開發這邊基本上沒Windows什麼事。
啟蒙入門
1、 學習一門腳本語言,例如Python/Ruby
可以讓你擺脫對底層語言的恐懼感,腳本語言可以讓你很快開發出能用得上的小程序。實踐項目:
處理文本文件,或者csv (關鍵詞 python csv, python open, python sys) 讀一個本地文件,逐行處理(例如 word count,或者處理log)
遍歷本地文件系統 (sys, os, path),例如寫一個程序統計一個目錄下所有文件大小並按各種條件排序並保存結果
跟資料庫打交道 (python sqlite),寫一個小腳本統計資料庫里條目數量
學會用各種print之類簡單粗暴的方式進行調試
學會用Google (phrase, domain, use reader to follow tech blogs)
為什麼要學腳本語言,因為他們實在是太方便了,很多時候我們需要寫點小工具或是腳本來幫我們解決問題,你就會發現正規的編程語言太難用了。
2、 用熟一種程序員的編輯器(不是IDE) 和一些基本工具
Vim / Emacs / Notepad++,學會如何配置代碼補全,外觀,外部命令等。
Source Insight (或 ctag)
使用這些東西不是為了Cool,而是這些編輯器在查看、修改代碼/配置文章/日誌會更快更有效率。
3、 熟悉Unix/Linux Shell和常見的命令行
如果你用windows,至少學會用虛擬機里的linux, vmware player是免費的,裝個Ubuntu吧
一定要少用少用圖形界面。
學會使用man來查看幫助
文件系統結構和基本操作 ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip …
學會使用一些文本操作命令 sed/awk/grep/tail/less/more …
學會使用一些管理命令 ps/top/lsof/netstat/kill/tcpmp/iptables/dd…
了解/etc目錄下的各種配置文章,學會查看/var/log下的系統日誌,以及/proc下的系統運行信息
了解正則表達式,使用正則表達式來查找文件。
對於程序員來說Unix/Linux比Windows簡單多了。(參看我四年前CSDN的博文《其實Unix很簡單》)學會使用Unix/Linux你會發現圖形界面在某些時候實在是太難用了,相當地相當地降低工作效率。
4、 學習Web基礎(HTML/CSS/JS) + 伺服器端技術 (LAMP)
未來必然是Web的世界,學習WEB基礎的最佳網站是W3School。
學習HTML基本語法
學習CSS如何選中HTML元素並應用一些基本樣式(關鍵詞:box model)
學會用 Firefox + Firebug 或 chrome 查看你覺得很炫的網頁結構,並動態修改。
學習使用Javascript操縱HTML元件。理解DOM和動態網頁(Dynamic HTML: The Definitive Reference, 3rd Edition - O'Reilly Media) 網上有免費的章節,足夠用了。或參看 DOM 。
學會用 Firefox + Firebug 或 chrome 調試Javascript代碼(設置斷點,查看變數,性能,控制台等)
在一台機器上配置Apache 或 Nginx
學習PHP,讓後台PHP和前台HTML進行數據交互,對伺服器相應瀏覽器請求形成初步認識。實現一個表單提交和反顯的功能。
把PHP連接本地或者遠程資料庫 MySQL(MySQL 和 SQL現學現用夠了)
跟完一個名校的網路編程課程(例如:http://www.stanford.e/~ouster/cgi-bin/cs142-fall10/index.php ) 不要覺得需要多於一學期時間,大學生是全職一學期選3-5門課,你業余時間一定可以跟上
學習一個javascript庫(例如jQuery 或 ExtJS)+ Ajax (非同步讀入一個伺服器端圖片或者資料庫內容)+JSON數據格式。
HTTP: The Definitive Guide 讀完前4章你就明白你每天上網用瀏覽器的時候發生的事情了(proxy, gateway, browsers)
做個小網站(例如:一個小的留言板,支持用戶登錄,Cookie/Session,增、刪、改、查,上傳圖片附件,分頁顯示)
買個域名,租個空間,做個自己的網站。
進階加深
1、 C語言和操作系統調用
重新學C語言,理解指針和內存模型,用C語言實現一下各種經典的演算法和數據結構。推薦《計算機程序設計藝術》、《演算法導論》和《編程珠璣》。
學習(麻省理工免費課程)計算機科學和編程導論
學習(麻省理工免費課程)C語言內存管理
學習Unix/Linux系統調用(Unix高級環境編程),,了解系統層面的東西。
用這些系統知識操作一下文件系統,用戶(實現一個可以拷貝目錄樹的小程序)
用fork/wait/waitpid寫一個多進程的程序,用pthread寫一個多線程帶同步或互斥的程序。多進程多進程購票的程序。
用signal/kill/raise/alarm/pause/sigprocmask實現一個多進程間的信號量通信的程序。
學會使用gcc和gdb來編程和調試程序(參看我的《用gdb調試程序》)
學會使用makefile來編譯程序。(參看我的《跟我一起寫makefile》)
IPC和Socket的東西可以放到高級中來實踐。
學習Windows SDK編程(Windows 程序設計 ,MFC程序設計)
寫一個窗口,了解WinMain/WinProcere,以及Windows的消息機制。
寫一些程序來操作Windows SDK中的資源文件或是各種圖形控制項,以及作圖的編程。
學習如何使用MSDN查看相關的SDK函數,各種WM_消息以及一些常式。
這本書中有很多常式,在實踐中請不要照抄,試著自己寫一個自己的常式。
不用太多於精通這些東西,因為GUI正在被Web取代,主要是了解一下Windows 圖形界面的編程。@virushuo 說:「 我覺得GUI確實不那麼熱門了,但充分理解GUI工作原理是很重要的。包括移動設備開發,如果沒有基礎知識仍然很吃力。或者說移動設備開發必須理解GUI工作,或者在win那邊學,或者在mac/iOS上學」。
2、學習Java
Java 的學習主要是看經典的Core Java 《Java 核心技術編程》和《Java編程思想》(有兩卷,我僅鏈了第一卷,足夠了,因為Java的圖形界面了解就可以了)
學習JDK,學會查閱Java API Doc Java Platform SE 6
了解一下Java這種虛擬機語言和C和Python語言在編譯和執行上的差別。從C、Java、Python思考一下「跨平台」這種技術。
學會使用IDE Eclipse,使用Eclipse 編譯,調試和開發Java程序。
建一個Tomcat的網站,嘗試一下JSP/Servlet/JDBC/MySQL的Web開發。把前面所說的那個PHP的小項目試著用JSP和Servlet實現一下。
3、Web的安全與架構

學習HTML5,網上有很多很多教程,以前酷殼也介紹過很多,我在這里就不羅列了。
學習Web開發的安全問題(參考新浪微博被攻擊的這個事,以及Ruby的這篇文章)
學習HTTP Server的rewrite機制,Nginx的反向代理機制,fast-cgi(如:PHP-FPM)
學習Web的靜態頁面緩存技術。
學習Web的非同步工作流處理,數據Cache,數據分區,負載均衡,水平擴展的構架。
實踐任務:
使用HTML5的canvas 製作一些Web動畫。
嘗試在前面開發過的那個Web應用中進行SQL注入,JS注入,以及XSS攻擊。
把前面開發過的那個Web應用改成構造在Nginx + PHP-FPM + 靜態頁面緩存的網站
4、學習關系型資料庫
你可以安裝MSSQLServer或MySQL來學習資料庫。
學習教科書里資料庫設計的那幾個範式,1NF,2NF,3NF,……
學習資料庫的存過,觸發器,視圖,建索引,游標等。
學習SQL語句,明白表連接的各種概念(參看《SQL Join的圖示》)
學習如何優化資料庫查詢(參看《MySQL的優化》)
實踐任務:設計一個論壇的資料庫,至少滿足3NF,使用SQL語句查詢本周,本月的最新文章,評論最多的文章,最活躍用戶。
5、一些開發工具
學會使用SVN或Git來管理程序版本。
學會使用JUnit來對Java進行單元測試。
學習C語言和Java語言的coding standard 或 coding guideline。(我N年前寫過一篇關C語言非常簡單的文章——《編程修養》,這樣的東西你可以上網查一下,一大堆)。
推薦閱讀《代碼大全》《重構》《代碼整潔之道》
高級深入
1、C++ / Java 和面向對象
我個人以為學好C++,Java也就是舉手之勞。但是C++的學習曲線相當的陡。不過,我覺得C++是最需要學好的語言了。參看兩篇趣文「C++學習信心圖」 和「21天學好C++」
學習(麻省理工免費課程)C++面向對象編程
讀我的 「如何學好C++」中所推薦的那些書至少兩遍以上(如果你對C++的理解能夠深入到像我所寫的《C++虛函數表解析》或是《C++對象內存存局(上)(下)》,或是《C/C++返回內部靜態成員的陷阱》那就非常不錯了)
然後反思為什麼C++要干成這樣,Java則不是?你一定要學會對比C++和Java的不同。比如,Java中的初始化,垃圾回收,介面,異常,虛函數,等等。
實踐任務:
用C++實現一個BigInt,支持128位的整形的加減乘除的操作。
用C++封裝一個數據結構的容量,比如hash table。
用C++封裝並實現一個智能指針(一定要使用模板)。
《設計模式》必需一讀,兩遍以上,思考一下,這23個模式的應用場景。主要是兩點:1)鍾愛組合而不是繼承,2)鍾愛介面而不是實現。(也推薦《深入淺出設計模式》)
實踐任務:
使用工廠模式實現一個內存池。
使用策略模式製做一個類其可以把文本文件進行左對齊,右對齊和中對齊。
使用命令模式實現一個命令行計算器,並支持undo和redo。
使用修飾模式實現一個酒店的房間價格訂價策略——旺季,服務,VIP、旅行團、等影響價格的因素。
學習STL的用法和其設計概念 - 容器,演算法,迭代器,函數子。如果可能,請讀一下其源碼
實踐任務:嘗試使用面向對象、STL,設計模式、和WindowsSDK圖形編程的各種技能
做一個貪吃蛇或是俄羅斯方塊的游戲。支持不同的級別和難度。
做一個文件瀏覽器,可以瀏覽目錄下的文件,並可以對不同的文件有不同的操作,文本文件可以打開編輯,執行文件則執行之,mp3或avi文件可以播放,圖片文件可以展示圖片。
學習C++的一些類庫的設計,如: MFC(看看候捷老師的《深入淺出MFC》) ,Boost, ACE, CPPUnit,STL (STL可能會太難了,但是如果你能了解其中的設計模式和設計那就太好了,如果你能深入到我寫的《STL string類的寫時拷貝技術》那就非常不錯了,ACE需要很強在的系統知識,參見後面的「加強對系統的了解」)
Java是真正的面向對象的語言,Java的設計模式多得不能再多,也是用來學習面向對象的設計模式的最佳語言了(參看Java中的設計模式)。
推薦閱讀《Effective Java》 and 《Java解惑》
學習Java的框架,Java的框架也是多,如Spring, Hibernate,Struts 等等,主要是學習Java的設計,如IoC等。
Java的技術也是爛多,重點學習J2EE架構以及JMS, RMI, 等消息傳遞和遠程調用的技術。
學習使用Java做Web Service (官方教程在這里)
實踐任務: 嘗試在Spring或Hibernate框架下構建一個有網路的Web Service的遠程調用程序,並可以在兩個Service中通過JMS傳遞消息。
C++和Java都不是能在短時間內能學好的,C++玩是的深,Java玩的是廣,我建議兩者選一個。我個人的學習經歷是:
深究C++(我深究C/C++了十來年了)
學習Java的各種設計模式。
2、加強系統了解
重要閱讀下面的幾本書:
《Unix編程藝術》了解Unix系統領域中的設計和開發哲學、思想文化體系、原則與經驗。你一定會有一種醍醐灌頂的感覺。
《Unix網路編程卷1,套接字》這是一本看完你就明白網路編程的書。重要注意TCP、UDP,以及多路復用的系統調用select/poll/epoll的差別。
《TCP/IP詳解 卷1:協議》- 這是一本看完後你就可以當網路黑客的書。了解乙太網的的運作原理,了解TCP/IP的協議,運作原理以及如何TCP的調優。
實踐任務:
理解什麼是阻塞(同步IO),非阻塞(非同步IO),多路復用(select, poll, epoll)的IO技術。
寫一個網路聊天程序,有聊天伺服器和多個聊天客戶端(服務端用UDP對部分或所有的的聊天客戶端進Multicast或Broadcast)。
寫一個簡易的HTTP伺服器。
《Unix網路編程卷2,進程間通信》信號量,管道,共享內存,消息等各種IPC…… 這些技術好像有點老掉牙了,不過還是值得了解。
實踐任務:
主要實踐各種IPC進程序通信的方法。
嘗試寫一個管道程序,父子進程通過管道交換數據。
嘗試寫一個共享內存的程序,兩個進程通過共享內存交換一個C的結構體數組。
學習《Windows核心編程》一書。把CreateProcess,Windows線程、線程調度、線程同步(Event, 信號量,互斥量)、非同步I/O,內存管理,DLL,這幾大塊搞精通。
實踐任務:使用CreateProcess啟動一個記事本或IE,並監控該程序的運行。把前面寫過的那個簡易的HTTP服務用線程池實現一下。寫一個DLL的鉤子程序監控指定窗口的關閉事件,或是記錄某個窗口的按鍵。
有了多線程、多進程通信,TCP/IP,套接字,C++和設計模式的基本,你可以研究一下ACE了。使用ACE重寫上述的聊天程序和HTTP伺服器(帶線程池)
實踐任務:通過以上的所有知識,嘗試
寫一個服務端給客戶端傳大文件,要求把100M的帶寬用到80%以上。(注意,磁碟I/O和網路I/O可能會很有問題,想一想怎麼解決,另外,請注意網路傳輸最大單元MTU)
了解BT下載的工作原理,用多進程的方式模擬BT下載的原理。
3、系統架構
負載均衡。HASH式的,純動態式的。(可以到Google學術里搜一些關於負載均衡的文章讀讀)
多層分布式系統 – 客戶端服務結點層、計算結點層、數據cache層,數據層。J2EE是經典的多層結構。
CDN系統 – 就近訪問,內容邊緣化。
P2P式系統,研究一下BT和電驢的演算法。比如:DHT演算法。
伺服器備份,雙機備份系統(Live-Standby和Live-Live系統),兩台機器如何通過心跳監測對方?集群主結點備份。
虛擬化技術,使用這個技術,可以把操作系統當應用程序一下切換或重新配置和部署。
學習Thrift,二進制的高性能的通訊中間件,支持數據(對象)序列化和多種類型的RPC服務。
學習Hadoop。Hadoop框架中最核心的設計就是:MapRece和HDFS。MapRece的思想是由Google的一篇論文所提及而被廣為流傳的,簡單的一句話解釋MapRece就是「任務的分解與結果的匯總」。HDFS是Hadoop分布式文件系統(Hadoop Distributed File System)的縮寫,為分布式計算存儲提供了底層支持。
了解NoSQL資料庫(有人說可能是一個過渡炒作的技術),不過因為超大規模以及高並發的純動態型網站日漸成為主流,而SNS類網站在數據存取過程中有著實時性等剛性需求,這使得目前NoSQL資料庫慢慢成了人們所關注的焦點,並大有成為取代關系型資料庫而成為未來主流數據存儲模式的趨勢。當前NoSQL資料庫很多,大部分都是開源的,其中比較知名的有:MemcacheDB、Redis、Tokyo Cabinet(升級版為Kyoto Cabinet)、Flare、MongoDB、CouchDB、Cassandra、Voldemort等。

6. 從零開始學編程需要多久

從零開始學編程一般需要4-6個月。

入門編程應該先學入門C語言或者python :
C語言語法簡單,有良好的邏輯抽象,如果是要更全面、深入地學習語言本身就C。python語法更加簡單簡潔易學,而且有各種強大的庫,擴展庫,如果是為了通過編程這一手段來迅速地做出有用、實用的程序和界面可以學python。現代很多語言都是從C語言發展而來的,所以可以以C語言做跳板進階其他面向對象的高級語言。慢慢接觸C++,或高級編程語言(如:Net,Java 等),網頁設計相關的語言(HTML+CSS+Javascript)。如果想做一個程序員,在沒有基礎的情況下,買書自學是一個辦法,但是大多數人會因為沒有相關的基礎知識,導致看書看得一知半解,在不了解的時候,買的書不一定合適。比較速成的辦法還是去報名一個培訓班,推薦【達內教育】,系統的學習一下基礎知識,然後選擇一個發展方向,再具體的針對性地買點書籍來學習。

想了解更多有關編程的詳情,推薦選擇【達內教育】。該機構獨創TTS8.0教學系統,企業雙選會。達內OMO教學模式,全新升級,線上線下交互學習,滿足學生多樣化學習需求。對標企業人才標准,制定專業學習計劃,囊括主流熱點技術。理論知識+學習思維+實戰操作,打造完整學習閉環。實戰講師,經驗豐富。→感興趣的話點擊此處,免費學習一下

熱點內容
linux重裝linux 發布:2024-11-27 09:46:25 瀏覽:557
電腦玩雲伺服器 發布:2024-11-27 09:19:22 瀏覽:66
蘋果什麼助手能和安卓互通 發布:2024-11-27 09:18:47 瀏覽:57
android花屏 發布:2024-11-27 09:18:38 瀏覽:124
phpnginx負載均衡 發布:2024-11-27 09:18:36 瀏覽:623
刀片伺服器如何設置網路交換機 發布:2024-11-27 09:17:23 瀏覽:475
eve腳本挖礦 發布:2024-11-27 09:12:25 瀏覽:566
模板平方演算法 發布:2024-11-27 08:56:15 瀏覽:268
系統緩存文件 發布:2024-11-27 08:52:15 瀏覽:913
40乙腈水溶液怎麼配置 發布:2024-11-27 08:52:03 瀏覽:63