1. 怎樣自學C++,以成為程序員
每個人的情況不一樣,我下面的描述可能並不適合每一個看到這篇文章的人。
一、C/C++語言
如果你的基礎很差, 建議不要一開始就學C++語言,從C開始學起,對程序有個初步的認識,循序漸進。C語言的書嘛,先買一本 300 頁以內的,把書中的每一個例子都通過鍵盤敲打進去到 Visual studio裡面去,然後單步執行,逐行調試去看各個變數的值。或者自行添加一些printf語句去輸出變數的值。這樣當你看完一本書後, 你就有編寫小程序的感覺了。
記住,千萬不要偷懶,不敲進去,自以為聰明, 能看懂, 或者直接從光碟復制。偷懶的代價是會花費更多的時間學習,最後還沒有學會,給自己的自信心造成巨大打擊,再也不想學程序了。
C語言看完一本書後,下來你就可以買一本C++的書看了。 C++的書也是一樣, 必須300頁以內的那種,不要一來就想學《C++ Primer中文版》這樣的好書, 因為太厚了,怕你沒有信心能夠看完,即使你很有信心,花費一年的時間才看完,不值得。這種經典的厚的好書, 適合作為資料查閱,不適合挨個細節都看。
還是要提醒各位,一定要把書中的例子挨個敲打到電腦裡面, 單步執行。一定不要從光碟復制, 一定要單步執行。
經過兩本書的磨練, 估計你對C/C++肯定有比較深入的了解了, 下來應該可以進入實戰了。
二、帶界面的應用程序
學會了C/C++語言本身,可能還沒有什麼成就感,畢竟都是控制台的程序, 老是輸出一串字元串, 整天面對各黑框框,成就感估計不是那麼爽。要是能搞個帶UI界面的程序就爽了。
下來就看個人的志向了, 如果走微軟路線, 那你下來學MFC好了,如果要走開源路線, 那開源跨平台的界面庫多得是。
通用的並且簡單的就是 wxWidget 了, 官方網站為 www.wxwidgets.org/ 。你下載後看具體的例子, 把裡面的例子程序敲到你的 visual studio 裡面, 去調試, 看運行的結果, 你也可以試著去修改例子, 添加按鈕,響應按鈕事件等。
走到這一步, 恭喜你,可以照葫蘆畫瓢的搞個小應用程序了, 還帶界面。
三、網路應用程序
語言搞懂了,UI程序也會了, 下來該學學網路咯, 現在那個程序不需要聯網啊,懂網路對你理解很多程序非常有幫助。但是網路應用程序從哪裡入手呢 ?
我來告訴你,從《UNIX網路編程》這本書入手吧,這本書可以教會你網路套接字的底層原理,把上面的例子好好學習,自己動手寫一個回應伺服器。寫一個伺服器端,在寫一個客戶端。伺服器端請務必學會 select 這個簡單的多路復用模型,這樣你才能慢慢的深入裡面 poll , epoll ,IOCP 之類的模型。
四、文件操作
所有的程序,基本都會用到文件的讀寫操作,windows系統有自己的文件操作API, 比如CreateFile, DeleteFile 等,請新手不要學windows的文件操作API, 新手請學標准C語言的文件操作函數,簡單易學還跨平台。就那麼幾個函數,三下五除二你也就學會了, fopen, fclose, fread , fwrite, fseek, ftell 就這么幾個而已。
五、深刻理解內存與指針的關系
作為一個C/C++程序員, 從學習程序的頭一天開始,就要和內存的分配釋放作斗爭。你必須理解內存與指針的關系。怎麼樣才能理解呢, 請大家去看 《高質量C/C++編程》裡面自帶的幾個經典例子吧。把那幾個例子搞得清清楚楚, 基本能夠理解其中的原理了。
六、仔細研究apache源碼
學程序非特別是C/C++程序,非3年之功可以出山,三年對一個C/C++程序來說是一個從量變到質變的過程,三年的項目實戰經驗,可以讓你接觸到一個完整的應用程序所需要具備的骨架。但是這個階段你寫的代碼,可能充滿BUG, 會宕機,運行效率很差,自己回頭看看一年前寫的代碼,可能自己都感覺惡心, 看不下去。沒有關系,這種感覺是每一個進步青年都會有的。要提高自己的代碼水平, 還是要像高手學習。你可能要問,公司同事的水平一般, 水平好的人家也不願意給我講。沒有關系,開源的代碼就是你像高手學習的最佳途徑,開源代碼是高手留下的練功秘訣, 你看了後你會突然感覺茅塞頓開, 感覺自己的水平差人家太遠了。我為何要推薦apache的源碼呢?
apache的源碼是高手中的高手寫的,執行效率和程序架構堪稱一絕。裡面的很多思想是所有程序都通用的,搞懂了, 很多模塊你也可以直接拿來使用。apache對內存池的使用, 對線程池的使用, 對模塊結構的封裝,非常具有實際意義。要是你能把apache的源碼吃個透徹,每一個細節都搞明白了為何人家要這么實現,我可以給你說,「恭喜你 , 你離傳說中的高手已經不遠了。」
七、修煉C++
我上面說的基本都是修煉C的, 要修煉C++, 還得再花3年功夫, 才有可能練成C++高手。C++太博大精深了,其中最復雜的莫過於泛型編程思想,不要以為能寫個模板類就認為泛型編程不過如此而已。仔細看看STL源碼, Boost 源碼, 你就知道泛型編程有多麼的博大精深了。修煉C++, 可以從用C++封裝的MFC, wxWidget入手, 看高手如何通過C++語言, 封裝這樣龐大的UI庫,裡面應用了很多的C++機制, 最典型的就是多態機制, 還有很多的設計模式應用可以研究。
八、深研設計模式
設計模式是程序設計的靈魂,是通用方法,當你面對一個大型項目的時候,如何設計一個有彈性的系統,是所有系統分析員應該掌握的技能。在設計模式的研究上,要結合實際的項目進行。
2. 現在程序員一個月的工資大概多少
你好,程序員的工資在不同公司不同職級都是不一樣的,以鵝廠為例,達到架構師的能力年薪會達到百萬,具體如下。
1、騰訊工程師崗位職級
鵝廠去年宣布調整職級,取消了原有的 6 級 18 等(1.1-6.3 級)的職級體系設計,將專業職級體系優化為14 級(4-17 級)。與之相對應的是,統一置換為「專業職級+職位稱謂」。
關於績效的考核,騰訊的績效考核分為 2 部分,業務評價和組織管理評價,一般一年2次考核(6月、12月),實行末尾淘汰制。
騰訊的技術晉升也不容易。在騰訊舊的職級體系下,T3-3 升 T4-1 是一個大坎,停留在 T3-3 超過 5 年的不在少數,停留 7 年的也有。一旦進入 T4 級別,就是騰訊的專家工程師了,騰訊研發人數將近 2 萬人,T4 級別的人數大概也不超過 500 人,這還是在近兩年 T3 到 T4 級別人數增多的情況下。
鵝廠T4架構師作為「IT架構靈魂人物」的角色,他們不僅做著架構師的本職工作,還同時做程序開發,寫核心代碼的工作。另外,架構師依舊是技術高手,編程能力依然是一流的。
但根據當前的市場需求,互聯網大廠們對於普通java開發人才需求逐年銳減,而對互聯網架構師人才的需求招聘量已經上升到50%,因此薪資更是不可同日而語。
對於想學習互聯網架構師的同學來說,北大青鳥、課工場等優秀品牌都是不錯的選擇。課程根據招聘需求制定,包含全部分布式微服務技術,對標鵝廠T4、阿里P8級別架構師。
希望我的回答對你有所幫助!
3. 如何成為一名程序員 6種方法來成為一名程序員
目錄方法1:網路編程1、了解網路編程的含義。2、瀏覽不同的網站,了解它們的外觀。3、學習至少一種頭腦風暴技術/方法,並學習一個用來實現頭腦風暴的軟體。4、熟悉網站結構。5、趕緊學一門圖形設計的課程。6、了解網路下部構造的基本情況。7、學習HTML和CSS語言。8、學習XML及其相關技術,比如XSL和XPath(不是必需,僅作推薦)。9、先建立簡單的靜態網站,直至你熟悉並習慣HTML語言。10、學習客戶端腳本語言。11、熟悉你所學的客戶端腳本語言。12、學習至少一種伺服器端腳本語言。13、學完伺服器端編程語言之後就開始創建一個試驗項目。14、獲得你的網站,開始用你自己的網頁實驗。方法2:桌面軟體編程1、弄清楚桌面軟體編程是怎麼回事。2、了解不同的電腦硬體結構。3、學習一種入門級(小孩子學的那種)編程語言。4、學習程序化、面向對象、函數設序設計規范的入門。5、學習一種程序化程式設計語言的入門課程。6、學習至少一種高級建模技術,比如UML 或ORM。7、開始編寫一些小的主控台應用程式或類似的應用程式。8、學習一門你選擇的編程語言的更高級課程。9、應用你所10、至少再學習一門編程語言規范的入門課程。11、試著比較你所學的兩門編程語言。12、利用你學過的一種語言來學習可視化編程概念。13、開始把你所學的知識運用到你設計的軟體小工程中。14、創建一個虛擬的"畢業工程"。15、通過學習更高級的課程、更加註意細節以及在網上學習搭建架構的技巧,來加深對你學過的可視化架構/庫/包的理解。16、搜索其他含可視化元素的包/庫並學習它們。17、學習圖形學課程(而非圖形設計)。18、成為游戲程序員(不是必須的)。方法3:分布式程序設計1、處理分布式應用編程。2、快速了解通信系統及其硬體。3、熟悉網路硬體結構和設備,比如集線器、接線台和路由器。4、學習網路協議的課程。5、學習XML 語言,並熟悉它。6、開始學習一門shell腳本語言。7、開始時用上你學的腳本知識,只運用程序化程式設計。8、使用你所學的腳本語言,寫出實現機器之間通信的腳本。9、轉移到桌面腳本/編程語言。10、專注於語言的核心部分,尤其hi那些支持網路。11、學習分布式應用設計與結構的課程。12、使用你所學的編程語言來了解服務部分建構和服務。13、學習如下技術中一種或更多。方法4:庫/平台/框架/核心編程1、了解什麼是核心編程。2、學習一門支持創建可重復使用內容/包的編程語言,如果你還沒學過的話。3、學習一門UML 和ORM的高級課程。4、學習軟體工程的課程。5、學習至少一個模塊,基於內容的、面對對象的和 事件驅動編程技術和概念。6、進一步了解不同的操作系統及其支持的編程架構。7、集中學習獨立平台架構、編程語言和技術。8、如果到目前為止你學習的編程語言具有ANSI/ISO/EEE/W3C標准版本,那麼掌握這些標准。9、嘗試模擬簡單的、已經建立的庫,尤其是開源的庫。10、在你的編程領域內尋找開源的包。11、學習不同方法。方法5:系統編程1、了解系統編程的定義。2、跟著"桌面應用程序員"的前三個步驟。3、學習線性代數的入門課程。4、學習微積分課程。5、學習邏輯學和/或離散數學課程。6、了解不同的"准操作系統"。7、學習計算機硬體結構的課程(或者作為替代,看看書)。8、深入理解不同的計算機硬體平台。9、初步熟悉你所選擇的硬體平台/操作系統的匯編語言。10、學習ANSI C 和 C++ 語言,還有程序化程式設計的一些概念。11、在你選擇的平台上理解並實踐C/C++標准庫。12、搜索網路資源、書籍和課程來理解你的平台獨特的C風格。13、用C/C++練習編寫高級代碼。14、學習更高級的Assembly。15、學習操作系統設計的課程。16、尋找並閱讀你所選擇的平台的相關文章。17、練習你已經掌握的知識。18、以最有益的順序學習語言。方法6:編程科學1、了解編程科學家是做什麼的。2、累積和四年制計算機科學學歷同等多的科學知識。3、選擇特定的領域。4、考慮獲取更高級的學歷。5、了解你選擇的編程領域的相關技術和編程語言。成為程序員是一個日積月累的過程,需要日復一日年復一年的技能增長。編程本身是有趣的,並且有回報(腦力層面、精神層面、經濟層面)。這份指南不能保證你輕松當上程序員。不要神化下面這些步驟,從中你大概能了解在現今編程界如何成為一名程序員。
方法1:網路編程
1、了解網路編程的含義。網路應用是指設計在網路結構頂層的軟體部分。這就意味著這些應用是通過諸如火狐或IE之類的瀏覽器來處理的。架構於網路結構的頂層並不一定要連接到網路。這就是說網路應用建立在如下標准網路技術的頂層:HTTP
FTP
POP3
SMTP
TCP
IP協議
HTML
XML
Coldfusion
ASP
JSP
php
ASP.NET
2、瀏覽不同的網站,了解它們的外觀。(右擊,選擇"查看源"或按F12。)尋找網站類型/內容的多樣性,而非數量。通常你需要訪問以下網站類型中至少一種: 團體網站(商業公司,非營利機構/組織,政府組織)
網路索引引擎(搜索引擎,meta搜索網站,專業化搜索引擎,目錄)
數據挖掘網站
個人網站
信息/網路全書式網頁(維基,數據單,技術規格,人工列表目錄,博客和日誌,新聞和新聞機構網站,黃頁,等等。)
社交網站(社交門戶,書簽網站,記錄筆記網站)
合作網站(這包含了上面提及的目錄,比如維基和博客)
3、學習至少一種頭腦風暴技術/方法,並學習一個用來實現頭腦風暴的軟體。例如:頭腦風暴圖和微軟Visio。
4、熟悉網站結構。指的是創建概念化網路範式、網路地圖和導航結構。
5、趕緊學一門圖形設計的課程。盡量學習至少一個圖形編輯/操作軟體包(不是必須的,但強烈推薦)
6、了解網路下部構造的基本情況。包括了解以下: 基本網路服務協議(HTTP,FTP, SMTP和POP3或IMAP4)
網路伺服器軟體(最好其中一個就是你以後主要工作的平台)
網路瀏覽軟體
郵件伺服器和客戶端軟體
7、學習HTML和CSS語言。或許你還想要"所見即所得"軟體包來編輯HTML。
8、學習XML及其相關技術,比如XSL和XPath(不是必需,僅作推薦)。
9、先建立簡單的靜態網站,直至你熟悉並習慣HTML語言。
10、學習客戶端腳本語言。多數人要麼學Java,要麼學VB,但也有一些人學習Perl和DHTML。
11、熟悉你所學的客戶端腳本語言。潛意識里提醒自己只用你學的那個語言。只有在你熟悉你的客戶端腳本語言之後才能進入下個步驟。
12、學習至少一種伺服器端腳本語言。如果你只用一種伺服器軟體,那就學其中一種編程語言。否則,你得每個伺服器軟體都學至少一種編程語言。
13、學完伺服器端編程語言之後就開始創建一個試驗項目。
14、獲得你的網站,開始用你自己的網頁實驗。
方法2:桌面軟體編程
1、弄清楚桌面軟體編程是怎麼回事。多數桌面軟體程序員都是編寫商務需要的代碼,所以好好了解一下商業及其組織和經濟結構將對節省時間、提高效率大有裨益。
2、了解不同的電腦硬體結構。看看數字電路設計和電腦結構的入門級課程,但是也有人認為這對於剛起步來說太超前了,所以看兩三篇說明的文章(比如 這一篇 和 這一篇)就夠了。學完第一種編程語言後你可以再返回這個步驟。
3、學習一種入門級(小孩子學的那種)編程語言。不要因為你不是個小孩子就不好意思去學。這些入門級語言能大大減輕你正式學習第一門編程語言時的痛苦和壓力。然而這一步也不是必須的。你也可以在上一步之前完成。
4、學習程序化、面向對象、函數設序設計規范的入門。
5、學習一種程序化程式設計語言的入門課程。無論你以後選擇何種編程語言,在某種程度上它都要求程序化程式設計。此外,據多數程序員反映,程序化程式設計總的來說是了解編程的一個很好的切入點。
6、學習至少一種高級建模技術,比如UML 或ORM。
7、開始編寫一些小的主控台應用程式或類似的應用程式。你可以利用編程書中的常見小練習。選擇一個工具,用你所學的編程語言編寫程序。
8、學習一門你選擇的編程語言的更高級課程。確保進展之前先理解下列概念,並能熟練運用。對程序用戶輸入輸出信息。
程式化設計語言寫成的程序中的邏輯流程和執行流程。
聲明、分配和比較變數
編程結構分支,比如if..then..else 和 select/switch..case.
循環結構,比如while..do, do..while/until, for..next.
創建、調用程序與函數的編程句法
數據類型及如何操控
用戶定義數據類型(records/structs/units)及其使用
如果你的語言支持超載函數,理解它。
你選擇的語言的內存處理方式(指針,變數窺視,等等。)
如果你的語言支持運營商超載,理解它。
如果你的語言支持delegates/函數指針,理解它。
9、應用你所學的高級技能 面向對象的規范
10、至少再學習一門編程語言規范的入門課程。推薦學習每種範式的編程語言,多數高級程序員確實是這么做的,然而,通常你開始時只學一種,應用所學知識訓練了一段時間,獲得了編程的鮮活經驗,然後接著學習另一種。試試下面的語言: 邏輯編程範式
函數編程範式
面向對象的範式
11、試著比較你所學的兩門編程語言。評估各自利弊。通常可按以下方法完成拿出你在學習第一門編程語言時編寫的簡單範例,現在用第二門語言重新編寫。
創建一個工程,盡量用上兩種語言完成它。有時取決於你選擇的工程和語言,你可能僅用一門語言還無法完成這個工程呢!
寫一份兩種語言之間相似結構和獨特之處對比的速查表或一覽表。
盡量使用另一門語言找到模仿這兩門語言中獨特之處的辦法。
12、利用你學過的一種語言來學習可視化編程概念。幾乎所有的編程語言都具有支持可視化編程和其他支持控制台或類似控制台編程的版本/庫。同時進行的包括: 初步了解事件驅動編程。在某種程度上,多數可視化編程依賴事件及事件處理(用上你選擇的語言)。
盡可能多的嘗試桌面軟體,理解軟體是做什麼的。多數軟體開發公司會提供產品的測試版,你可以拿來測試軟體。在完善用戶界面方面保持更新。
閱讀關於圖形用戶界面的文章或教程。
13、開始把你所學的知識運用到你設計的軟體小工程中。盡量把你的編程專業知識運用到你日常生活中的問題上。比如,編寫程序,批量重命名文件,視覺上比較文本文件,復制目錄里的文件名到內存/文本文件之類的東西。剛開始簡單一點。
14、創建一個虛擬的"畢業工程"。把這個放到最後完成,用上你到目前為止學到的可視化編程技術。
15、通過學習更高級的課程、更加註意細節以及在網上學習搭建架構的技巧,來加深對你學過的可視化架構/庫/包的理解。
16、搜索其他含可視化元素的包/庫並學習它們。
17、學習圖形學課程(而非圖形設計)。對於想要寫出吸引人的用戶界面元素的程序員來說,這將大有裨益。
18、成為游戲程序員(不是必須的)。很大程度上游戲編程是被當作桌面編程的。如果你想成為游戲程序員,完成這些步驟後你需要進一步學習游戲編程。對於游戲程序員而言,圖形學課程是必須的,後續步驟中第二門語言應該選擇邏輯/函數編程語言(最好是Prolog或Lisp)。
方法3:分布式程序設計
1、處理分布式應用編程。分布式應用編程被許多人認為是最難學的一種,它要求計算機和通信技術中的不同知識。
2、快速了解通信系統及其硬體。這個步驟不是必須的,但是對於理解網路拓撲結構很有用。
3、熟悉網路硬體結構和設備,比如集線器、接線台和路由器。
4、學習網路協議的課程。在你開始分布式應用編程之前,你需要好好理解"開放系統互聯 (OSI) "模型、以太、IP、TCP、UDP和HTTP 。
5、學習XML 語言,並熟悉它。
6、開始學習一門shell腳本語言。對基於Windows的編程,可以是任何能與Windows腳本宿主兼容的腳本。對基於linux的編程,Bash腳本和 Perl就夠了。對這兩個平台都強烈推薦Java,原因如下: 幾乎所有操作系統的都支持腳本宿主(Windows 腳本宿主默認支持java ,大多數Linux發行版都有支持java腳本控制的包)。
許多開發者認為它很容易學。
當你需要學第二門編程語言(C,C++,C#,Java和J#都有ALGOL開源句法)時,它擁有的ALGLO開源句法就能使你熟悉更多編程語言
通過學習java,你會熟悉網頁的客戶端腳本,這可謂一大福利!
7、開始時用上你學的腳本知識,只運用程序化程式設計。之後,根據你的腳本語言和它所支持的,你可以用上更高級的編程技巧和範式。所有的腳本語言在某種程度上都有程序化程式設計的一些方面。
8、使用你所學的腳本語言,寫出實現機器之間通信的腳本。學習完成這個所必需的東西。簡單的通信就足夠了。
9、轉移到桌面腳本/編程語言。一個比較好的是多範式語言,比如python。簡單了解第二門語言。有許多理由讓多數程序員選擇java。然而,在這個領域內C#正在獲得多數優勢。Java和C#被青睞的原因如下:它們是面向對象的編程語言,使大量程序員免遭實現細節之苦,因為它們都支持組成部分(代碼單元、預編譯,它們可以執行特定任務,並被用到其他程序中)。
它們支持事件驅動編程,在某種程度上還支持OO和程式化程序設計。
建立語言的架構按屬性分布(比如Java)。
有許多現成的包來處理。社交網路同時作為開源代碼和架構內置包,這使得程序員繼續其他人工作更加容易。
10、專注於語言的核心部分,尤其hi那些支持網路。少注意用戶界面元素,比如輸出,窗口設計和技術等。
11、學習分布式應用設計與結構的課程。可以通過書本、網上教程或學術課程來完成。然而,十分有必要理解分布式應用的結構及其概念。
12、使用你所學的編程語言來了解服務部分建構和服務。
13、學習如下技術中一種或更多。推薦你每一種都了解以下。多數分布式應用程序員不會止於一兩門編程語言,他們會每個操作系統各學至少一種語言。這是因為如果你希望你的應用"分布式",你應該至少為每個主要的操作系統各提供一個版本。公共對象訪問代理體系結構(CORBA)
簡單對象訪問協議(SOAP)
非同步JavaScript和XML(AJAX)
分布式組建對象模型(DCOM)
.NET遠程處理
XML 網路服務
方法4:庫/平台/框架/核心編程
1、了解什麼是核心編程。核心程序員幾乎都是高級程序員,已經從編寫應用轉變為給其他程序員編寫代碼匯編。
2、學習一門支持創建可重復使用內容/包的編程語言,如果你還沒學過的話。
3、學習一門UML 和ORM的高級課程。多數庫開發者使用其中一種,或兩種都用。
4、學習軟體工程的課程。
5、學習至少一個模塊,基於內容的、面對對象的和 事件驅動編程技術和概念。你所學覆蓋越多編程範式和語言,你就能成為越成功的庫/包程序員。
6、進一步了解不同的操作系統及其支持的編程架構。
7、集中學習獨立平台架構、編程語言和技術。
8、如果到目前為止你學習的編程語言具有ANSI/ISO/EEE/W3C標准版本,那麼掌握這些標准。無論何時盡可能使用標准代碼。
9、嘗試模擬簡單的、已經建立的庫,尤其是開源的庫。這在成為庫/包程序員的早期階段十分有用。從簡單的包開始,比如單位轉換和中間科學計算包。如果你是大學生,利用你的非編程課程,嘗試把這些課程的方程式與核心科學用作庫。
10、在你的編程領域內尋找開源的包。首先下載包的二進制/可執行文件。盡量去用,並發現它的利弊。之後,下載源,盡量弄明白它是怎麼完成的。嘗試再創造這些庫或其部分。剛開始,看完代碼再做;之後,先做再看代碼。後期階段,嘗試完善那些庫。
11、學習不同方法。給程序員分發、配送內容。通常,庫/包程序員傾向於以遞歸和/或迭代的思想來思考他們面臨的所有問題 。盡量把每個問題當作一個小問題的匯編(一系列更小的任務)或一個重復的不斷縮小問題范圍直至把這些更小的范圍彼此堆到一起的處理過程去思考。
庫/包程序員傾向於概括化。也就是說,當面臨一個特定的簡單的問題時,他們通常會想到一個更為概括的問題,並努力解決這個更概括的問題,如此,小問題便不攻自破。
方法5:系統編程
1、了解系統編程的定義。系統編程處理的是編程的"科學",而不是具體的編程實現。不要把你自己栓到特定平台上。
2、跟著"桌面應用程序員"的前三個步驟。
3、學習線性代數的入門課程。
4、學習微積分課程。
5、學習邏輯學和/或離散數學課程。
6、了解不同的"准操作系統"。這可以通過以下途徑完成:了解操作系統是如何安裝的。
了解在一台PC上如何安裝不同的操作系統(不是必須的,但作為推薦)
安裝不止一種操作系統。不要在系統中安裝任何輔助包,相反,僅利用操作系統本身提供的函數。
7、學習計算機硬體結構的課程(或者作為替代,看看書)。
8、深入理解不同的計算機硬體平台。
9、初步熟悉你所選擇的硬體平台/操作系統的匯編語言。稍後你會學習其他平台/系統的匯編。
10、學習ANSI C 和 C++ 語言,還有程序化程式設計的一些概念。
11、在你選擇的平台上理解並實踐C/C++標准庫。尤其注意標准模板庫(STL)和活動模板庫(ATL)。
12、搜索網路資源、書籍和課程來理解你的平台獨特的C風格。
13、用C/C++練習編寫高級代碼。
14、學習更高級的Assembly。
15、學習操作系統設計的課程。
16、尋找並閱讀你所選擇的平台的相關文章。如果你選的是基於Unix的操作系統就會容易得多。充分理解你今後將要用來工作的系統。
17、練習你已經掌握的知識。首先創建小的系統軟體。如下通常很有用: 試著重創你系統中已有的小工具。
試著把其他系統中的應用移植到你的系統里。
18、以最有益的順序學習語言。此處是唯一強調第一門編程語言的地方。首先學習ANSI C 而不是 C++、C#、Java 、D。然後學習 C++。限制你第一門語言僅為C是因為系統編程要求程序員熟悉如下概念:源代碼真實、完全的編譯
低級對象輸出文件
鏈接二進制
低級機器語言/匯編編程。C語言被某些人認為是偽飾過的/更容易學習的匯編語言。只要你願意,它還支持插入匯編語言代碼,並且它只是程序化的(像匯編)。
方法6:編程科學
1、了解編程科學家是做什麼的。編程科學家是十分高級的程序員,他們不開發程序,但他們研究計算科學,比如密碼學、編程語言和數據挖掘演算法。沒有深入的學術研究是很難達到這個水準的。
2、累積和四年制計算機科學學歷同等多的科學知識。可通過如下其中一種完成: 獲得真實的學術學歷(這也是通常情況)。
從現代大學中獲得該學歷要求的課程大綱,自學課程或 分開一門門學。理論上這樣做也可以,但還是推薦第一種做法。
3、選擇特定的領域。越具體越好。這取決於你的偏好。但是這里給出計算機編程領域中一些主要的課題:演算法設計(例如搜索、分類、密碼、解碼、錯誤檢測 等)
編程語言/編譯器設計/最優化
人工智慧領域(模式識別,語音識別,自然語言處理,神經網路)
機器人技術
科學編程
超級計算
計算機輔助設計/模式(CAD/CAM)
虛擬現實
計算機圖形學(計算機圖形學通常和圖形設計或圖形用戶界面設計混淆,計算機圖形學是研究如何表示和操控計算機系統中的圖形的領域)
4、考慮獲取更高級的學歷。或許你想追求碩士學歷或博士學歷。
5、了解你選擇的編程領域的相關技術和編程語言。
小提示不管你想嘗試哪種編程,不管你想達到何種水平,考慮去學校或本地社區大學上課。不要被諸如「計算機科學」一類的術語嚇到。你參加的任何不需要預備課程的課程都應該集中教一些編程的基礎知識。在上課之前先咨詢一下老師或客服,確保這門課是你想要的,像「計算機文化」這樣的課很有可能更多地集中在教你更熟悉辦公應用之類。
4. 現在程序員一個月的工資大概多少
根據北上廣深歷年數據來看維持在一兩萬左右但是這中間也看個人能力和水平進行薪資計算
對項目經理負責,負責軟體項目的詳細設計、編碼和內部測試的組織實施,對小型軟體項目兼任系統分析工作,完成分配項目的實施和技術支持工作。
世界上第一位程序員是英國著名詩人拜倫的女兒AdaLovelace,曾設計了巴貝奇分析機上解伯努利方程的一個程序。她甚至還建立了循環和子程序的概念。由於其在程序設計上的開創性工作,AdaLovelace被稱為世界上第一位程序員。
計算機科學發展到今天(21世紀初期),程序員從事的人群很多,分工也不相同,從大的方面可以分為以下幾類:asp程序員、web前端開發程序員、delphi程序員、php程序員、powerbuilder程序員、C程序員、linux程序員、net程序員、vb程序員、java程序員、javascript程序員、C++程序員、Python程序員、ABAP程序員、android程序員、iOS程序員。
30%的技術人員從門戶網站獲取開源技術信息,剩下的70%的技術人員都是從專業的開源社區和開源廠商的技術網站上獲取信息,包括有SourceForge、LinuxToday、OpenOffice和IBMdW等。
5. 找c++方面的職位越來越少,c++程序員的出路在哪
不認可C++方面的職位越來越少的說法。我是一名有十多年C++開發經驗的程序員。並沒有感到崗位少,反而是招聘越來越難了。
其實有這種感覺也不足為奇。最近幾年,程序員這個群體的數量急劇增長。各種培訓機構如雨後春筍般冒出來,大部分是教授JAVA或者前端技術,C++相關的培訓機構則寥寥無幾。其中最主要的原因,如果不是科班出身選擇C++語言,學習起來堪比天書。
隨著互聯網的發展,能短時間將某個idea落地變的越來越重要。JAVA、PHP、Python、GO等語言,甚至JS都以其框架多生態好,在競爭中占據領先地位。但是不容忽視的是,其他語言是各領風騷三五年,C++從來沒有跌出前五名。可見他們在業界內的地位,用常青樹來形容它都不為過。
C++語言最重要的優勢是內存自管理。這也是為什麼它的框架,乃至類庫都非常少的主要原因。內存自管理需要具備操作系統、計算機原理的理論基礎知識,是大家覺得它比較難的根本所在。在實時控制,高並發等領域,C++語言的優勢非常明顯。比如證券行業的交易系統,大多是由C++語言編寫。
了解到以上情況之後,題主應該就能明白具體的出路所在。
我們喜歡彎道超車,不喜歡做踏實的工作。所以,我們只關心現成的什麼框架啊什麼的,基礎的沒人做。
不得不承認,你說的這種現象確實存在,當今C++的職位確實不如以前,但也不不是說沒有出路,只要你夠專業,夠精通,任何一門語言都還是有用武之地
1.以前因為開發語言相對比較少,而且更多的是進行底層開發以及行業性軟體開發,所以c++應用應該說也非常廣,特別是visual c++在某段時期還是比較有熱度的。而c++在做底層硬體開發,服務程序開發都是有其獨特的魅力。這張圖是不是特別熟悉,又能做界面,又能做底層。
2.後來開發語言日益增多,而技術和應用也在不斷發展,比如後面應用廣泛的java,還有當今發展很快的python,無一不是 社會 不斷發展的產物,互聯網的發展催生了web開發,人工智慧的發展催生了python語言,所以其他語言相對而言熱度有所降低,導致很多人看不到未來,是不是需要轉語言等等。
3.不過c++還是有很多領域應用,很多細分領域和還在使用,另外做伺服器端開發還是不錯的,現在很多 游戲 伺服器都是c++開發的。另外,我不得不說的,語音、視頻這方面還是c++,現在很多語音聊天,視頻直播,不也是c++開發的嗎?所以c++不會過時,繼續在擅長的領域騰飛吧
C++語法太過度設計了,裡面一大堆平時很少用到的語法,語法又極其靈活很容易出現錯誤,對使用者的要求比較高。學習成本也很高,做一個C ++項目要有很嚴格的編碼規范來限制編碼,從而防範由於對語法了解不深導致的錯誤。編寫詳盡的編碼規范這也是一件很麻煩的事,加大項目的工作量。因此用c++的項目越來越少了
C++適合開發核心模塊,不適合開發應用邏輯為主的項目。
C++語言不會是正方向。怎麼說呢,C語言是最佳的的過渡底層學習。工作中都是c++的衍生工具軟體,qt幾年我學過的,需求在北京還不算少。或者就像大多數說的走嵌入式方向的底層開發,不過只會c++肯定是不夠的。總之就像你學java開發,只會java開源軟體坑定是不夠的,還需要框架項目介面的知識。服務期間怎麼連接的,傳輸過程之類的(我對java不算太了解,勿噴)。
一句話,核心演算法都是c++語言寫的,高層應用用c++的少了。但是話又說過來,如果你精通c++語言,學其他的語言,只是一星期的功夫而已。
開源項目越來越多,C/C++主要面向的基礎組件都比較成熟了,搬磚拿來會用就行。
沒有新的理論和平台,基礎的東西無需太多關注。只有新方向出現,才需要基礎組件的大量更新,這時候C/C++才會短暫性的繁榮。
從C++學 Java JavaScript C# python 都不過是幾個禮拜的事情,自己不願意學習坐在那怨天怨地?
因為golang開始慢慢蠶食c++
6. 學習軟體編程未來可以從事哪些崗位
學習軟體編程未來可以從事哪些崗位。首先學習軟體編程未來是可以從事軟體相關的工作,關系最為密切的就是軟體研發工程師,也就是俗稱的程序員,當然程序員還可以細分為前端程序員、後端程序員、移動端程序員、服務端程序員等等。還有比如軟體實施、運維、測試、設計、分析、咨詢、銷售等等,包括還有項目管理之類的。
學習軟體編程其次也可以從事互聯網行業相關的工作崗位,研發、設計、運營都可以。
希望對你有幫助。
7. 要做程序員需要學會什麼
其實簡單來說,程序員的工作就是使用編程語言,根據需求寫出一個程序。
但是,在這個過程中,涉及如下幾個方面:
使用的編程語言 程序員需要選擇一門或者多門語言來編程,不同的語言適合編寫不同的程序,目前主流編程語言包括,Java、JavaScript、Python、C++、php以及其他小語種等等,每種編程語言適合開發的程序有所不同。目前從程序應用分來,主要可以分為三類a 企業應用,主要用於解決企業業務。各種企業管理後台系統,銀行系統,公安系統,圖書管理系統等等。
b 互聯網應用,面向互聯網用戶,為互聯網用戶提供各類服務。比如現在的京東淘寶各類電商系統等。
c 移動應用,各類在移動端使用的APP,有面向互聯網用戶的APP,也有面向企業內部的APP。
目前相對而言,在移動應用和互聯網應用方面,資本投入比較熱的風口,程序員的薪資較高。企業應用,發展了很多年,相對平穩。
2. 明白需求,實現需求
需求就是編寫程序的要求。一個程序要編寫成什麼樣子,具備哪些功能,都是由需求來具體說明。程序員要需要能看懂需求文檔,並且能准確地使用編程語言,根據需求中的要求來編寫成程序。企業開發的項目,往往會由該程序的架構師提供一個程序框架,程序員在該框架的規范下進行編程,實現需求的功能,以確保程序的規范、可讀,以及可維護性。
3. 日常工作寫程序
一個軟體開發一般流程是產品經理根據用戶需求做一個項目出來,然後UI設計師做一些圖片設計,前端開發編寫頁面,後台開發編寫核心編程,然後介入一些大數據和人工智慧,通過測試之類上線實施,後期還有運維進行相關維護。
程序員一般大多指的是前端和後台寫代碼程序的開發人員,除了編寫代碼,可能還需要通過介面和其它系統對接,實現系統間的數據交換。像單體測試,是程序員對自己寫好的程序單元進行測試,檢測這個程序單元數據輸入和數據輸出是否符合預期等等。測試出來的問題,需要修改正確,然後再測試,直至沒有問題。和同事共同開發的時候也需要聯合測試,以及用戶測試過後如果存在BUG繼續進行修改。
8. 程序員崗位職責範本
程序員需要具有良好的溝通能力、理解能力及團隊精神,責任心強,能承受較大的工作壓力。那麼程序員 崗位職責 都有哪一些你知道嗎?了解相關精彩內容請參考我為大家精心准備的程序員崗位職責範本,希望對你有所幫助,如果喜歡可以分享給身邊的朋友喔!
▼▼▼ 相關推薦 ▼▼▼
★ 渠道銷售主管的崗位職責概述 ★
★ 關於銀行大堂經理主要工作崗位職責 ★
★ 酒店保潔員崗位職責 ★
★ 公司行政前台的崗位職責 ★
程序員崗位職責範本篇1
1. 負責公司產品PC、移動客戶端核心業務模塊代碼實現
2. 保證前端的運行性能,表現及研發質量
3. 獨立負責VR項目的研發
4. 與策劃人員、後端人員、美術人員進行有效的溝通協作
程序員崗位職責範本篇2
1. 熟練掌握HTML5、CSS3、JavaScript開發,熟練掌握切圖,布局等技術,對符合WEB標準的網站重構有豐富 經驗 ;
2. 熟練使用Angular,Vue,React中至少一種JS框架,並掌握ES6/ES7,能獨立開發常用組件;
3. 熟練使用各種調試、抓包工具,能獨立分析、解決和歸納問題;
4. 對CSS/Javascript性能優化、解決多瀏覽器兼容性問題有一定的經驗;
5. 熟悉各種常用設計模式和常用MVC框架;
6. 掌握用戶體驗和交互的操作流程和UI設計原則,在web交互方面有深刻的見解;
程序員崗位職責範本篇3
1、對項目經理負責,負責軟體項目的詳細設計、編碼和內部測試的組織實施,對小型軟體項目兼任系統分析工作,完成分配項目的實施和技術支持工作。
2、協助項目經理和相關人員同客戶進行溝通,保持良好的客戶關系。
3、參與需求調研、項目可行性分析、技術可行性分析和需求分析。
4、熟悉並熟練掌握交付軟體部開發的軟體項目的相關軟體技術。
程序員崗位職責範本篇4
① 根據需求文檔,或者功能清單,進行軟體功能設計;
② 根據功能設計,進行軟體代碼編寫;
③ 負責管理軟體開發的源代碼,記錄版本變化;
④ 負責軟體測試/開發環境的搭建與維護;
2) 參與公司對外合作的軟體開發工作
① 作為企業的程序開發人員參與軟體開發工作;
② 負責對接供應商的程序員,監督軟體開發的進度與代碼質量;
③ 負責接手供應商移交的代碼,並進行源代碼管理;
3) 在用軟體的維護工作
① 維護軟體運行的環境,定期檢查 操作系統 日誌;
② 維護軟體運行的系統參數;
③ 協同運維人員為HelpDesk團隊提供二級支持。
程序員崗位職責範本篇5
1、完成項目安排的開發任務和代碼編寫工作;
2、按照項目需求的詳細設計文檔和規范編碼;
3、對公司的軟體平台或項目相關模塊進行單元測試並通過;
4、修改軟體測試後反饋的缺陷與漏洞;
5、對公司現有的軟體平台日常的維護工作
6、對使用公司或部門產品/框架提出反饋意見;
7、完成 其它 與IT相關的輔助工作(軟體支持、系統檢測等);
8、軟體項目相關的文檔編撰和 說明書 製作演示等工作;
9、定期完成相關 工作 報告 (日誌、周報、月報等),向IT經理匯報。
程序員崗位職責範本篇6
1. 能理解業務邏輯,對業務模型進行設計,編寫出規范的設計文檔;
2. 按照 工作計劃 和進度完成系統模塊的開發任務,保證開發的質量;
3. 溝通需求和開發中遇到的相關問題;
4. 完成上級安排的其他工作。
程序員崗位職責範本篇7
1.根據系統設計文檔負責自己模塊的詳細設計;
2.負責模塊的代碼開發;
3.負責已開發模塊的測試及維護;
4.相關技術文檔的起草。
程序員崗位職責範本篇8
unity3d高級游戲程序員 1、使用unity3d引擎開發3d休閑、棋牌、卡牌游戲
2、與策劃、美術、產品人員討論開發需求及技術實現細節
3、編寫高效、穩定、安全的代碼
4、負責游戲上線後的優化與迭代開發
任職資格:
1、3年以上unity3d游戲開發經驗,有成功項目經驗者優先;
2、熟悉常用數據結構和演算法,有良好的代碼編寫習慣,結構清晰、命名規范、邏輯性強
3、熟練掌握3d渲染相關知識,對dx/opengl有一定了解,熟悉各種主流特效、3d效果的實現方式
4、對資源優化、內存及性能優化有一定的研究,了解常用設計模式
5、熱愛游戲,對游戲有自己的理解,做過卡牌,棋牌游戲的優先考慮
程序員崗位職責範本篇9
職責描述:
1、負責游戲核心玩法、游戲邏輯系統等開發工作;
2、負責底層通信系統、圖形系統、引擎及編輯工具相關開發,游戲客戶端程序性能優化。
任職要求:
1、計算機類或相關專業本科及以上學歷,兩年以上游戲或互聯網行業編程工作經驗;
2、熟練使用c/c++/java/c#/objective-c/python中的一種或多種,具備扎實的編程語言基礎,熟練掌握數據結構與常見演算法;
3、熱愛游戲,踏實肯干,工作態度積極向上;
4、有u3d相關項目經驗者優先;
5、具備手機游戲或客戶端游戲開發經驗者優先;
6、熟悉ios或android系統原理,熟悉移動終端環境特性及相關解決方案者優先。
程序員崗位職責範本篇10
主程序員-游戲開發lead software engineer 維塔士 上海維塔士電腦軟體有限公司,維塔士,維塔士 主程序員-游戲開發
lead software engineer
職責:
設計客戶端結構,編寫核心代碼
領導客戶開發團隊,確保產品滿足項目進度和質量要求
與客戶、設計和項目經理協調游戲的需求和技術
負責游戲客戶端各功能模塊的設計和監督執行
負責游戲客戶端的人員配置、進度和質量控制
負責初級和高級員工的培訓和發展
經理安排的其他工作
responsibilities:
design the structure of client side and write the core code
lead the client side development team, make sure that the proct can meet the project schele and quality requirements
coordinate with the client, design and project manager about the requirements and technique of game
responsible for the design and oversee implementation of each functional mole of the game client
responsible for the personnel allocation and schele and quality control of the client side of game
responsible for training and developing of junior and senior
other tasks assigned by the manager
任職要求:
計算機科學或相關領域的學士學位,或同等的培訓和專業經驗
對游戲開發有熱情,願意投身於技術工作
4年以上游戲客戶端開發經驗
至少一個流行的游戲引擎,如unity或unreal的使用經驗
精通游戲客戶端邏輯框架、系統架構、性能分析、測試、安全技術等
熟練掌握c++或c#,有人工智慧、圖形和渲染經驗優先,有管理經驗者優先
有手機游戲背景開發經驗者優先
深刻理解面向對象的設計與開發理念,熟悉設計模式,有豐富的實踐經驗
良好的溝通能力,高度的責任感和職業精神,能在高壓下工作
邏輯思維 能力強,思維嚴謹
有領導團隊的經驗
良好的英語讀寫能力,口語能溝通為佳
qualifications:
bachelor degree in computer science or related field, or equivalent training and professional experience.
have the enthusiasm for game development, willing to dedicate himself to the technical work
have 4 years or more experience of game client development.
experience with at least one of the popular game engines such as unity or unreal
proficient in game clients logic framework, system architecture, performance analysis, test, security technology, etc
proficient in c++ or c# ? experience in ai, graphics and rendering is a plus but not compulsory supervision ? management experience is a big plus
have mobile game background development experience is a plus
have a deep understanding of object-oriented design and development of ideas, familiar with design pattern and rich practical experience
good communication skills, high sense of responsibility and professional spirit, can work under high pressure
have a strong logical and rigorous thinking ability
experienced in leading a team
good at listening, speaking, reading and writing in english, fluent in oral english
程序員崗位職責範本相關 文章 :
★ 試用期職員工作總結範文10篇
★ 最新通用員工手冊範本7篇
★ 專業技術人員工作總結範文10篇
★ it個人工作總結範文精選10篇
★ 軟體部門職責最全合集
★ 程序員個人年終工作總結2021模板十篇
★ 程序員2021年終工作總結報告範文
★ JA軟體工程師崗位職責精選範本5篇
★ 程序員個人工作總結最新範文5篇
★ 程序員職業規劃範文(2)
var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm..com/hm.js?"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })();9. IT面試經驗:C/C++程序員需要掌握哪些知識
概括來說,開發中常用到的功能:串口通信、網口通信、資料庫訪問、數據加解密處理等等。這些方面的知識都要掌握的,細說的話主要有以下幾個方面:
一、語言相關
1、基礎(Basic)
(1)變數與基本類型:語言內置類型、常量、變數的初始化、變數的作用域、變數的 限定符、變數引用、枚舉; (2)typedef 和#define;
(3)數值與指針:數組定義與初始化、多維數值、指針操作;
(4)表達式:算術/邏輯計算、位運算、優先順序、類型轉換;
(5)語句:簡單語句、聲明/定義語句、復合語句、條件/循環控制語句、異常處理語 句;
(6)函數:函數聲明、參數傳遞、堆棧概念、函數重載;
(7)標准IO:條件狀態、緩沖區、文件流、字元流、本地化;
(8)類和數據抽象:類的定義與聲明、類的構造函數、靜態成員、拷貝構造函數、操 作符重載、類型轉換;
(9)面向對象編程:數據(封裝)抽象、繼承、多態(動態綁定);
2、進階(Advance)
(1)模板與泛型編程:模板定義、實例化、類模板成員、重載、特化; (2)智能指針:auto_ptr、shared_ptr、scoped_ptr;
(3)STL容器:順序容器(vector、list、deque、queue、priority_queue、string)和關 聯容器(map、set、multimap、multiset); (4)STL演算法:迭代器、演算法; (5)常用復雜數據結構:hash_map、boost.any、boost. array、boost. regex、boost. variant、 boost. multi_array、boost. pointer_container;
3、高級(Expert)
(1)高級泛型編程:表達式模板、模板元編程、Concept編程;
(2)程序架構,內存池,線程池;
(3)高級抽象:boost.mpl、boost.lambda、boost.fusion、boost.proto;
(4)範式應用:boost.spirit;
(5)應用程序庫:boost.asio 、boost.graph、blitz++、Loki、CGAL、uBLAS;
二、系統相關
1、基礎(Basic)
(1)Windows API之基礎服務:文件系統、注冊表、內存管理、DLL、多媒體;
(2)Windows API之內核對象:句柄、信號、線程、進程、互斥、事件、文件映射、 命名管道、郵槽、計時器、完成埠;
(3)Windows API之圖形設備介面:設備上下文、列印、字體、筆/刷、路徑、區域、 點陣圖;
(4)Windows API之圖形用戶界面:窗口、標題、菜單、狀態欄、消息、圖標、按鈕、 編輯框、組合框、列表框、滾動條、通用對話框;
(5)環境配置及Shell編程:環境變數、右鍵菜單、屬性、關聯; (6)Socket編程; (7)Web相關API; 2、進階(Advance)
(1)MFC/ATL:文檔視圖結構、對話框、通用控制項、OleDB、WinInet; (2)COM、自動化、ActiveX:Office開發、IE插件、VBA; (3)高級圖形系統:OpenGL、DirectX; (4)二次開發:ObjectArx;
三、計算相關
1、計算機圖形學
(1)向量:點積、叉積、求模、單位化、復合運算;(basic)
(2)矩陣:算術運算、平移/旋轉/縮放/錯切等變換、求逆、特徵值;(basic) (3)四元組合歐拉角:與其他表示轉換;(advance) (4)參數曲線/曲面:貝塞爾、(非)均勻有理樣條;(advance) (5)三維幾何體的構造與描述;(expert) 2、計算幾何
(1)幾何查找與判斷:點與線、線與線、點與多邊形;(basic) (2)多邊形:簡單多邊形、凸多邊形、多邊形三角剖分;(advance) (3)凸殼及其應用;(advance) (4)Voronoi圖/三角剖分及其應用;(advance) (5)多邊形的交與並;(expert) (6)平面圖;(expert) 3、數值計算
(1)數值計算的三大任務:求值、解方程(組)、函數逼近;(basic) (2)數值計算的誤差、適定性、穩定性;(basic)
(3)解線性方程組直接方法:Gauss消元法、三角分解法;(basic)
(4)解線性方程組一般迭代方法:基本迭代、Jacobi迭代、G-S迭代、SOR/SSOR迭代; (advance)
(5)解線性方程組的變分迭代法:共軛梯度、預處理共軛梯度法;(expert) (6)解非線性方程組迭代方法:Newton迭代法、Newton-Raphson迭代法、同倫演算法; (expert)
(7)求解矩陣特徵值:乘冪法與反乘冪法、Rayleigh商迭代法、QR法、Krylov子空間 法;(expert)
(8)插值:多項式插值、樣條插值;(advance) (9)數值積分:Simpson公式、Gauss積分;(basic) (10)解常微分方程:歐拉法、Runge-Kutta法;(advance) (11)解橢圓方程:有限單元法、有限差分法、邊界元法;(expert)
希望可以幫到您,謝謝!
10. 程序員要具備什麼技能
一名合格的程序員需要掌握哪些技能呢?
熟練掌握開發工具
做為一名程序員至少熟練掌握兩到三種開發工具的使用,這是程序員的立身之本,其中C/C++和JAVA是重點推薦的開發工具,C/C++以其高效率和高度的靈活性成為開發工具中的利器,很多系統級的軟體還是用C/C編寫。而JAVA的跨平台和與WEB很好的結合是JAVA的優勢所在,而JAVA即其相關的技術集JAVA One很可能會成為未來的主流開發工具之一。其次,能掌握一種簡便的可視化開發工具,如VB,PowerBuilder,Delphi,C Builder,則更好,這些開發工具減小了開發難度,並能夠強化程序員對象模型的概念。另外,需要掌握基本的腳本語言,如shell,perl等,至少能讀懂這些腳本代碼。
熟知資料庫
為什麼資料庫是如此重要?作為程序員,他們自然有自己的理由:很多應用程序都是以資料庫的數據為中心,而資料庫的產品也有不少,其中關系型資料庫仍是主流形式,所以程序員至少熟練掌握一兩種資料庫,對關系型資料庫的關鍵元素要非常清楚,要熟練掌握SQL的基本語法。雖然很多資料庫產品提供了可視化的資料庫管理工具,但SQL是基礎,是通用的資料庫操作方法。如果沒有機會接觸商業資料庫系統,可以使用免費的資料庫產品是一個不錯的選擇,如mySQL, Postgres等。
對操作系統有一定的了解
當前主流的操作系統是Windows,Linux/Unix,熟練地使用這些操作系統是必須的,但只有這些還遠遠不夠。要想成為一個真正的編程高手,需要深入了解操作系統,了解它的內存管理機制、進程/線程調度、信號、內核對象、系統調用、協議棧實現等。Linux作為開發源碼的操作系統,是一個很好的學習平台,Linux幾乎具備了所有現代操作系統的特徵。雖然Windows系統的內核實現機制的資料較少,但通過互聯網還是能獲取不少資料。只有對操作系統有一定的了解後,你會發現自己上了一個新的台階。
懂得網路協議TCP/IP
在互聯網如此普及的今天,如果您還沒有對互聯網的支撐協議TCP/IP協議棧有很好的掌握,就需要迅速補上這一課,網路技術已改變了軟體運行的模式,從最早的客戶/伺服器結構,到今天的WEB Services,再到未來的網格計算,這一切都離不開以TCP/IP協議棧為基礎的網路協議支持,所以,深入掌握TCP/IP協議是非常必要的。至少,你需要了解ISO七層協議模型,IP/UDP/TCP/HTTP等常用協議的原理和三次握手機制。
明白DCOM/CORBA/XML/WEB Services存在的意義
隨著技術的發展,軟體與網路的無縫結合是必然趨勢,軟體系統的位置無關性是未來計算模式的重要特徵之一,DCOM/CORBA是當前兩大主流的分布計算的中間平台,DCOM是微軟COM(組件對象模型)的擴展,而CORBA是OMG支持的規范。程序員需要做的不僅僅是利用商業的開發平台來開發軟體,而是要理解這些技術的初衷,即為什麼需要這項技術,如果你能理解了這一點,再回頭看這些技術的具體實現,就如庖丁解牛,迎刃而解。XML/WebServices重要性不言而喻,XML以其結構化的表示方法和超強的表達能力被喻為互聯網上的「世界語」,是分布計算的基石之一。
不要將軟體工程與CMM分開
現代大型軟體系統的開發中,工程化的開發控製取代個人英雄主義,成為軟體系統成功的保證,一個編程高手並不一定是一個優秀的程序員,一個優秀的程序員是將出色的編程能力和開發技巧同嚴格的軟體工程思想有機結合,編程只是軟體生命周期中的其中一環,優秀的程序員應該掌握軟體開發各個階段的基本技能,如市場分析,可行性分析,需求分析,結構設計,詳細設計,軟體測試等。一句話可以概括我的看法:「創意無限,流程保證」。
擁有強烈的好奇心
什麼才是一個程序員的終極武器呢,那就是強烈的好奇心和學習精神。沒有比強烈的好奇心和學習精神更好的武器了,它是程序員們永攀高峰的源泉和動力所在。