如何成爲一名程序員?

成爲程序員是一個日積月累的過程,須要日復一日年復一年的技能增加。編程自己是有趣的,而且有回報(腦力層面、精神層面、經濟層面)。這份指南不能保證你輕鬆當上程序員。不要神化下面這些步驟,從中你大概能瞭解在現今編程界如何成爲一名程序員。html

 
  步驟
  1. 以38720 1爲標題的圖片
    1
    學習下列這些學科中一兩門引導性課程:
    • 邏輯學
    • 離散數學
     
  2. 2
    學習數據庫概念,好比表,視圖/查詢和進程。你可使用任何簡單的數據庫包來完成這些,好比:
    • MS Access
    • DB V
    • Fox Pro
    • Paradox
    • MySQL是一個很值得學習的數據庫,由於它免費且通用,數據庫經常用於SQL查詢。
     
  3. 3
    想好你要成爲哪一種程序員。一般程序員會是下面某一種:
    • 網絡程序員
    • 桌面軟件程序員分佈式程序設計員
      • 操做系統程序員(有單系統,也有多系統)
      • 獨立平臺程序員
    • 庫/平臺/框架/核心程序員
    • 系統程序員編程科學家
      • 內核程序員
      • 驅動程序員
      • 編譯程序員
     
  4. 以38720 4爲標題的圖片
    4
    瞭解你的編程領域內相關技術和編程語言。下面的部分詳細給出了成爲不一樣類型程序員所需的步驟。
     
     
 
方法1

網絡編程

  1. 以38720 5爲標題的圖片
    1
    瞭解網絡編程的含義。網絡應用是指設計在網絡結構頂層的軟件部分。這就意味着這些應用是經過諸如火狐或IE之類的瀏覽器來處理的。架構於網絡結構的頂層並不必定要鏈接到網絡。這就是說網絡應用創建在以下標準網絡技術的頂層:
    • HTTP
    • FTP
    • POP3
    • SMTP
    • TCP
    • IP協議
    • HTML
    • XML
    • Coldfusion
    • ASP
    • JSP
    • PHP
    • ASP.NET
     
  2. 2
    瀏覽不一樣的網站,瞭解它們的外觀。(右擊,選擇「查看源」或按F12。)尋找網站類型/內容的多樣性,而非數量。一般你須要訪問如下網站類型中至少一種:
    • 團體網站(商業公司,非營利機構/組織,政府組織)
    • 網絡索引引擎(搜索引擎,meta搜索網站,專業化搜索引擎,目錄)
    • 數據挖掘網站
    • 我的網站
    • 信息/百科全書式網頁(維基,數據單,技術規格,人工列表目錄,博客和日誌,新聞和新聞機構網站,黃頁,等等。)
    • 社交網站(社交門戶,書籤網站,記錄筆記網站)
    • 合做網站(這包含了上面說起的目錄,好比維基和博客)
     
  3. 3
    學習至少一種頭腦風暴技術/方法,並學習一個用來實現頭腦風暴的軟件。例如:頭腦風暴圖和微軟Visio。
     
  4. 以38720 8爲標題的圖片
    4
    熟悉網站結構。指的是建立概念化網絡範式、網絡地圖和導航結構。
     
  5. 以38720 9爲標題的圖片
    5
    趕忙學一門圖形設計的課程。儘可能學習至少一個圖形編輯/操做軟件包(不是必須的,但強烈推薦)
     
  6. 6
    瞭解網絡下部構造的基本狀況。包括瞭解如下:
    • 基本網絡服務協議(HTTP,FTP, SMTP和POP3或IMAP4)
    • 網絡服務器軟件(最好其中一個就是你之後主要工做的平臺)
    • 網絡瀏覽軟件
    • 郵件服務器和客戶端軟件
     
  7. 7
    學習HTML和CSS語言。或許你還想要「所見即所得」軟件包來編輯HTML。
     
  8. 以38720 12爲標題的圖片
    8
    學習XML及其相關技術,好比XSL和XPath(不是必需,僅做推薦)。
     
  9. 以38720 13爲標題的圖片
    9
    先創建簡單的靜態網站,直至你熟悉並習慣HTML語言。
     
  10. 以38720 14爲標題的圖片
    10
    學習客戶端腳本語言。多數人要麼學Java,要麼學VB,但也有一些人學習Perl和DHTML。
     
  11. 11
    熟悉你所學的客戶端腳本語言。潛意識裏提醒本身只用你學的那個語言。中國歷史故事,只有在你熟悉你的客戶端腳本語言以後才能進入下個步驟。
     
  12. 12
    學習至少一種服務器端腳本語言。若是你只用一種服務器軟件,那就學其中一種編程語言。不然,你得每一個服務器軟件都學至少一種編程語言。
     
  13. 13
    學完服務器端編程語言以後就開始建立一個試驗項目。
     
  14. 14
    得到你的網站,開始用你本身的網頁實驗。
     
 
方法2

桌面軟件編程

  1. 以38720 19爲標題的圖片
    1
    弄清楚桌面軟件編程是怎麼回事。多數桌面軟件程序員都是編寫商務須要的代碼,WIN2008系統安裝IIS7配過ASP後打開ASP網站爲500錯誤的解決辦法,因此好好了解一下商業及其組織和經濟結構將對節省時間、提升效率大有裨益。
     
  2. 以38720 20爲標題的圖片
    2
    瞭解不一樣的電腦硬件結構。看看數字電路設計和電腦結構的入門級課程,可是也有人認爲這對於剛起步來講太超前了,因此看兩三篇說明的文章(好比 這一篇 和 這一篇)就夠了。學完第一種編程語言後你能夠再返回這個步驟。
     
  3. 3
    學習一種入門級(小孩子學的那種)編程語言。[1]不要由於你不是個小孩子就很差意思去學。這些入門級語言能大大減輕你正式學習第一門編程語言時的痛苦和壓力。然而這一步也不是必須的。你也能夠在上一步以前完成。
     
  4. 4
    學習程序化、面向對象、函數設序設計規範的入門。
     
  5. 5
    學習一種程序化程式設計語言的入門課程。不管你之後選擇何種編程語言,在某種程度上它都要求程序化程式設計。此外,據多數程序員反映,程序化程式設計總的來講是瞭解編程的一個很好的切入點。
     
  6. 6
    學習至少一種高級建模技術,好比UML 或ORM。
     
  7. 以38720 25爲標題的圖片
    7
    開始編寫一些小的主控臺應用程式或相似的應用程式。你能夠利用編程書中的常見小練習。選擇一個工具,用你所學的編程語言編寫程序。
     
  8. 以38720 26爲標題的圖片
    8
    學習一門你選擇的編程語言的更高級課程。確保進展以前先理解下列概念,並能熟練運用。
    • 對程序用戶輸入輸出信息。
    • 程式化設計語言寫成的程序中的邏輯流程和執行流程。
    • 聲明、分配和比較變量
    • 編程結構分支,好比if..then..else 和 select/switch..case.
    • 循環結構,好比while..do, do..while/until, for..next.
    • 建立、調用程序與函數的編程句法
    • 數據類型及如何操控
    • 用戶定義數據類型(records/structs/units)及其使用
    • 若是你的語言支持超載函數,理解它。
    • 你選擇的語言的內存處理方式(指針,變量窺視,等等。)
    • 若是你的語言支持運營商超載,理解它。
    • 若是你的語言支持delegates/函數指針,理解它。
     
  9. 9
    應用你所學的高級技能
    • 面向對象的規範
     
  10. 以38720 28爲標題的圖片
    10
    至少再學習一門編程語言規範的入門課程。推薦學習每種範式的編程語言,多數高級程序員確實是這麼作的,然而,一般你開始時只學一種,應用所學知識訓練了一段時間,得到了編程的鮮活經驗,而後接着學習另外一種。試試下面的語言:
    • 邏輯編程範式
    • 函數編程範式
     
  11. 以38720 29爲標題的圖片
    11
    試着比較你所學的兩門編程語言。評估各自利弊。一般可按如下方法完成
    • 拿出你在學習第一門編程語言時編寫的簡單範例,如今用第二門語言從新編寫。
    • 建立一個工程,儘可能用上兩種語言完成它。有時取決於你選擇的工程和語言,你可能僅用一門語言還沒法完成這個工程呢!
    • 寫一份兩種語言之間類似結構和獨特之處對比的速查表或一覽表。
    • 儘可能使用另外一門語言找到模仿這兩門語言中獨特之處的辦法。
     
  12. 12
    利用你學過的一種語言來學習可視化編程概念。幾乎全部的編程語言都具備支持可視化編程和其餘支持控制檯或相似控制檯編程的版本/庫。同時進行的包括:
    • 初步瞭解事件驅動編程。在某種程度上,多數可視化編程依賴事件及事件處理(用上你選擇的語言)。
    • 儘量多的嘗試桌面軟件,理解軟件是作什麼的。多數軟件開發公司會提供產品的測試版,你能夠拿來測試軟件。在完善用戶界面方面保持更新。
    • 閱讀關於圖形用戶界面的文章或教程。
     
  13. 以38720 31爲標題的圖片
    13
    開始把你所學的知識運用到你設計的軟件小工程中。儘可能把你的編程專業知識運用到你平常生活中的問題上。好比,編寫程序,批量重命名文件,視覺上比較文本文件,複製目錄裏的文件名到內存/文本文件之類的東西。剛開始簡單一點。
     
  14. 以38720 32爲標題的圖片
    14
    建立一個虛擬的「畢業工程」。把這個放到最後完成,用上你到目前爲止學到的可視化編程技術。
     
  15. 15
    經過學習更高級的課程、更加註意細節以及在網上學習搭建架構的技巧,來加深對你學過的可視化架構/庫/包的理解。
     
  16. 以38720 34爲標題的圖片
    16
    搜索其餘含可視化元素的包/庫並學習它們。
     
  17. 17
    學習圖形學課程(而非圖形設計)。對於想要寫出吸引人的用戶界面元素的程序員來講,這將大有裨益。
     
  18. 18
    成爲遊戲程序員(不是必須的)。很大程度上游戲編程是被看成桌面編程的。若是你想成爲遊戲程序員,完成這些步驟後你須要進一步學習遊戲編程。對於遊戲程序員而言,圖形學課程是必須的,後續步驟中第二門語言應該選擇邏輯/函數編程語言(最好是Prolog或Lisp)。
     
 
方法3

分佈式程序設計

  1. 以38720 37爲標題的圖片
    1
    處理分佈式應用編程。分佈式應用編程被許多人認爲是最難學的一種,它要求計算機和通訊技術中的不一樣知識。
     
  2. 2
    快速瞭解通訊系統及其硬件。這個步驟不是必須的,可是對於理解網絡拓撲結構頗有用。
     
  3. 以38720 39爲標題的圖片
    3
    熟悉網絡硬件結構和設備,好比集線器、接線臺和路由器。
     
  4. 4
    學習網絡協議的課程。在你開始分佈式應用編程以前,你須要好好理解「開放系統互聯 (OSI) 」模型、以太、IP、TCP、UDP和HTTP 。
     
  5. 以38720 41爲標題的圖片
    5
    學習XML 語言,並熟悉它。
     
  6. 6
    開始學習一門shell腳本語言。對基於Windows的編程,能夠是任何能與Windows腳本宿主兼容的腳本。對基於Linux的編程,Bash腳本和 Perl就夠了。對這兩個平臺都強烈推薦Java,緣由以下:
    • 幾乎全部操做系統的都支持腳本宿主(Windows 腳本宿主默認支持java ,大多數Linux發行版都有支持java腳本控制的包)。
    • 許多開發者認爲它很容易學。
    • 當你須要學第二門編程語言(C,C++,C#,Java和J#都有ALGOL開源句法)時,它擁有的ALGLO開源句法就能使你熟悉更多編程語言
    • 經過學習java,你會熟悉網頁的客戶端腳本,這可謂一大福利!
     
  7. 以38720 43爲標題的圖片
    7
    開始時用上你學的腳本知識,只運用程序化程式設計。以後,根據你的腳本語言和它所支持的,你能夠用上更高級的編程技巧和範式。全部的腳本語言在某種程度上都有程序化程式設計的一些方面。
     
  8. 以38720 44爲標題的圖片
    8
    使用你所學的腳本語言,寫出實現機器之間通訊的腳本。學習完成這個所必需的東西。簡單的通訊就足夠了。
     
  9. 以38720 45爲標題的圖片
    9
    轉移到桌面腳本/編程語言。一個比較好的是多範式語言,好比Python。簡單瞭解第二門語言。有許多理由讓多數程序員選擇java。然而,在這個領域內C#正在得到多數優點。Java和C#被青睞的緣由以下:
    • 它們是面向對象的編程語言,使大量程序員免遭實現細節之苦,由於它們都支持組成部分(代碼單元、預編譯,它們能夠執行特定任務,並被用到其餘程序中)。
    • 它們支持事件驅動編程,在某種程度上還支持OO和程式化程序設計。
    • 創建語言的架構按屬性分佈(好比Java)。
    • 有許多現成的包來處理。社交網絡同時做爲開源代碼和架構內置包,這使得程序員繼續其餘人工做更加容易。
     
  10. 以38720 46爲標題的圖片
    10
    專一於語言的核心部分,尤爲hi那些支持網絡。少注意用戶界面元素,好比輸出,窗口設計和技術等。
     
  11. 11
    學習分佈式應用設計與結構的課程。能夠經過書本、網上教程或學術課程來完成。然而,十分有必要理解分佈式應用的結構及其概念。
     
  12. 12
    使用你所學的編程語言來了解服務部分建構和服務。
     
  13. 以38720 49爲標題的圖片
    13
    學習以下技術中一種或更多。推薦你每一種都瞭解如下。多數分佈式應用程序員不會止於一兩門編程語言,他們會每一個操做系統各學至少一種語言。這是由於若是你但願你的應用「分佈式」,你應該至少爲每一個主要的操做系統各提供一個版本。
    • 公共對象訪問代理體系結構(CORBA)
    • 簡單對象訪問協議(SOAP)
    • 異步JavaScript和XML(AJAX)
    • 分佈式組建對象模型(DCOM)
    • .NET遠程處理
    • XML 網絡服務
     
 
方法4

庫/平臺/框架/核心編程

  1. 1
    瞭解什麼是核心編程。核心程序員幾乎都是高級程序員,已經從編寫應用轉變爲給其餘程序員編寫代碼彙編。
     
  2. 以38720 51爲標題的圖片
    2
    學習一門支持建立可重複使用內容/包的編程語言,若是你還沒學過的話。
     
  3. 以38720 52爲標題的圖片
    3
    學習一門UML 和ORM的高級課程。多數庫開發者使用其中一種,或兩種都用。
     
  4. 4
    學習軟件工程的課程。
     
  5. 5
    學習至少一個模塊,基於內容的、面對對象的和 事件驅動編程技術和概念。你所學覆蓋越多編程範式和語言,你就能成爲越成功的庫/包程序員。
     
  6. 以38720 55爲標題的圖片
    6
    進一步瞭解不一樣的操做系統及其支持的編程架構。
     
  7. 7
    集中學習獨立平臺架構、編程語言和技術。
     
  8. 以38720 57爲標題的圖片
    8
    若是到目前爲止你學習的編程語言具備ANSI/ISO/EEE/W3C標準版本,那麼掌握這些標準。不管什麼時候儘量使用標準代碼。
     
  9. 9
    嘗試模擬簡單的、已經創建的庫,尤爲是開源的庫。這在成爲庫/包程序員的早期階段十分有用。從簡單的包開始,好比單位轉換和中間科學計算包。若是你是大學生,利用你的非編程課程,嘗試把這些課程的方程式與核心科學用做庫。
     
  10. 10
    在你的編程領域內尋找開源的包。首先下載包的二進制/可執行文件。儘可能去用,並發現它的利弊。以後,下載源,儘可能弄明白它是怎麼完成的。嘗試再創造這些庫或其部分。剛開始,看完代碼再作;以後,先作再看代碼。後期階段,嘗試完善那些庫。
     
  11. 以38720 60爲標題的圖片
    11
    學習不一樣方法。給程序員分發、配送內容。
    • 一般,庫/包程序員傾向於以遞歸和/或迭代的思想來思考他們面臨的全部問題 。儘可能把每一個問題看成一個小問題的彙編(一系列更小的任務)或一個重複的不斷縮小問題範圍直至把這些更小的範圍彼此堆到一塊兒的處理過程去思考。
    • 庫/包程序員傾向於歸納化。也就是說,當面臨一個特定的簡單的問題時,他們一般會想到一個更爲歸納的問題,並努力解決這個更歸納的問題,如此,小問題便不攻自破。
     
 

 

方法5

系統編程

  1. 1
    瞭解系統編程的定義。系統編程處理的是編程的「科學」,而不是具體的編程實現。不要把你本身栓到特定平臺上。
     
  2. 2
    跟着「桌面應用程序員」的前三個步驟。
     
  3. 以38720 63爲標題的圖片
    3
    學習線性代數的入門課程。
     
  4. 以38720 64爲標題的圖片
    4
    學習微積分課程。
     
  5. 以38720 65爲標題的圖片
    5
    學習邏輯學和/或離散數學課程。
     
  6. 以38720 66爲標題的圖片
    6
    瞭解不一樣的「準操做系統」。這能夠經過如下途徑完成:
    • 瞭解操做系統是如何安裝的。
    • 瞭解在一臺PC上如何安裝不一樣的操做系統(不是必須的,但做爲推薦)
    • 安裝不止一種操做系統。不要在系統中安裝任何輔助包,相反,僅利用操做系統自己提供的函數。
     
  7. 7
    學習計算機硬件結構的課程(或者做爲替代,看看書)。
     
  8. 8
    深刻理解不一樣的計算機硬件平臺。
     
  9. 9
    初步熟悉你所選擇的硬件平臺/操做系統的彙編語言。稍後你會學習其餘平臺/系統的彙編。
     
  10. 10
    學習ANSI C 和 C++ 語言,還有程序化程式設計的一些概念。
     
  11. 以38720 71爲標題的圖片
    11
    在你選擇的平臺上理解並實踐C/C++標準庫。尤爲注意標準模板庫(STL)和活動模板庫(ATL)。
     
  12. 12
    搜索網絡資源、書籍和課程來理解你的平臺獨特的C風格。
     
  13. 13
    用C/C++練習編寫高級代碼。
     
  14. 以38720 74爲標題的圖片
    14
    學習更高級的Assembly。
     
  15. 15
    學習操做系統設計的課程。
     
  16. 以38720 76爲標題的圖片
    16
    尋找並閱讀你所選擇的平臺的相關文章。若是你選的是基於Unix的操做系統就會容易得多。充分理解你從此將要用來工做的系統。
     
  17. 17
    練習你已經掌握的知識。首先建立小的系統軟件。以下一般頗有用:
    • 試着重創你係統中已有的小工具。
    • 試着把其餘系統中的應用移植到你的系統裏。
     
  18. 以38720 78爲標題的圖片
    18
    以最有益的順序學習語言。此處是惟一強調第一門編程語言的地方。首先學習ANSI C 而不是 C++、C#、Java 、D。而後學習 C++。
    • 限制你第一門語言僅爲C是由於系統編程要求程序員熟悉以下概念:
      • 源代碼真實、徹底的編譯
      • 低級對象輸出文件
      • 連接二進制
      • 低級機器語言/彙編編程。C語言被某些人認爲是僞飾過的/更容易學習的彙編語言。只要你願意,它還支持插入彙編語言代碼,而且它只是程序化的(像彙編)。
     
 

 

方法6

編程科學

  1. 1
    瞭解編程科學家是作什麼的。編程科學家是十分高級的程序員,他們不開發程序,但他們研究計算科學,好比密碼學、編程語言和數據挖掘算法。沒有深刻的學術研究是很難達到這個水準的。
     
  2. 2
    累積和四年制計算機科學學歷同等多的科學知識。可經過以下其中一種完成:
    • 得到真實的學術學歷(這也是一般狀況)。
    • 從現代大學中得到該學歷要求的課程大綱,自學課程或 分開一門門學。理論上這樣作也能夠,但仍是推薦第一種作法。
     
  3. 以38720 81爲標題的圖片
    3
    選擇特定的領域。越具體越好。這取決於你的偏好。可是這裏給出計算機編程領域中一些主要的課題:
    • 算法設計(例如搜索、分類、密碼、解碼、錯誤檢測 等)
    • 編程語言/編譯器設計/最優化
    • 人工智能領域(模式識別,語音識別,天然語言處理,神經網絡)
    • 機器人技術
    • 科學編程
    • 超級計算
    • 計算機輔助設計/模式(CAD/CAM)
    • 虛擬現實
    • 計算機圖形學(計算機圖形學一般和圖形設計或圖形用戶界面設計混淆,計算機圖形學是研究如何表示和操控計算機系統中的圖形的領域)
     
  4. 以38720 82爲標題的圖片
    4
    考慮獲取更高級的學歷。或許你想追求碩士學歷或博士學歷。
     
  5. 5
    瞭解你選擇的編程領域的相關技術和編程語言。
     
 

 

  • 無論你想嘗試哪一種編程,無論你想達到何種水平,考慮去學校或本地社區大學上課。不要被諸如「計算機科學」一類的術語嚇到。你參加的任何不須要預備課程的課程都應該集中教一些編程的基礎知識。在上課以前先諮詢一下老師或客服,確保這門課是你想要的,像「計算機文化」這樣的課頗有可能更多地集中在教你更熟悉辦公應用之類。
相關文章
相關標籤/搜索