A. 程序員是學什麼專業
可以選擇以下:
1、計算機運行原理與發展歷史:計算機運行原理與發展歷史與普通程序員關系不大,只要有一台配置高一點的電腦就可以編程,這是很多程序員正常想法,所以很少有人去了解計算機的結構。計算機運行原理與發展歷史可以讓一名從程序員更好了解程序運行的條件與原理。
2、編程語言:學習一門編程語言這是作為程序員必備的條件。選擇一門自己感興趣與喜歡的編程語言,每種編程語言都有它的優勢,所以不管你學習哪種編程語言都有競爭力。
3、學習前端技術:也許很多程序員會問,這是前端工程師技術范圍,我們要知道開始接觸編程都是從前端技術開始,前後端技術是聯系在一起的,了解前端基本課程,這也是方便你以後編程開發方便與前端工程師交流。建議必學javaScript與簡單了解HTML5。
4、資料庫結構與使用:資料庫與後端工程師關系最密切,資料庫是所有數據保存的空間,正常情況都是後編程語言處理這些數據。
5、學習演算法:過去幾年或未來一段時間人工智慧都不會被人們遺忘,更何況像大數據處理,復雜程序結構,終端開發等都需要演算法。
其實程序員應該學計算機與技術專業,而程序員是一個辛苦的職業,每時每刻就都堅持學習,做為一名專業的程序員都應該學習以上五門課程。
B. 程序員需要學些什麼
程序員的崗位需求很多,例如大型網路公司、軟體開發公司等等都需要程序員。
程序員需要學習:
1、掌握數據及其轉換、數據的機內表示、算術和邏輯運算,以及相關的應用數學基礎知識;
2、理解計算機的組成以及各主要部件的性能指標;
3、掌握操作系統、程序設計語言的基礎知識;
4、熟練掌握計算機常用辦公軟體的基本操作方法;
5、熟練掌握基本數據結構和常用演算法;
6、熟練掌握C程序設計語言,以及C++、Java、Visual Basic中的一種程序設計語言;
7、熟悉資料庫、網路和多媒體的基礎知識;
8、掌握軟體工程的基礎知識,了解軟體過程基本知識、軟體開發項目管理的常識;
9、了解常用信息技術標准、安全性,以及有關法律、法規的基本知識;
10、了解信息化、計算機應用的基礎知識;
11、正確閱讀和理解計算機領域的簡單英文資料。
程序員必備技能:
1、熟練開發工具
做為一名程序員至少熟練掌握兩到三種開發工具的使用,這是程序員的立身之本,其中C/C++和JAVA是重點推薦的開發工具,C/C++以其高效率和高度的靈活性成為開發工具中的利器,很多系統級的軟體還是用C/C++編寫。
而JAVA的跨平台和與WEB很好的結合是JAVA的優勢所在,而JAVA即其相關的技術集JAVAOne很可能會成為未來的主流開發工具之一。
其次,能掌握一種簡便的可視化開發工具,如VB,PowerBuilder,Delphi,CBuilder,則更好,這些開發工具減小了開發難度,並能夠強化程序員對象模型的概念。
另外,需要掌握基本的腳本語言,如shell,perl等,至少能讀懂這些腳本代碼。
2、熟知資料庫
作為程序員,他們自然有自己的理由:很多應用程序都是以資料庫的數據為中心,而資料庫的產品也有不少,其中關系型資料庫仍是主流形式,所以程序員至少熟練掌握一兩種資料庫,對關系型資料庫的關鍵元素要非常清楚,要熟練掌握SQL的基本語法。
雖然很多資料庫產品提供了可視化的資料庫管理工具,但SQL是基礎,是通用的資料庫操作方法。如果沒有機會接觸商業資料庫系統,可以使用免費的資料庫產品是一個不錯的選擇,如mySQL,Postgres等。
3、了解操作系統
當前主流的操作系統是Windows,Linux/Unix,熟練地使用這些操作系統是必須的,但只有這些還遠遠不夠。
要想成為一個真正的編程高手,需要深入了解操作系統,了解它的內存管理機制、進程/線程調度、信號、內核對象、系統調用、協議棧實現等。
Linux作為開發源碼的操作系統,是一個很好的學習平台,Linux幾乎具備了所有現代操作系統的特徵。雖然Windows系統的內核實現機制的資料較少,但通過互聯網還是能獲取不少資料。懂得網路協議TCP/IP。
在互聯網如此普及的今天,如果您還沒有對互聯網的支撐協議TCP/IP協議棧有很好的掌握,就需要迅速補上這一課,網路技術已改變了軟體運行的模式。
從最早的客戶/伺服器結構,到今天的WEBServices,再到未來的網格計算,這一切都離不開以TCP/IP協議棧為基礎的網路協議支持,深入掌握TCP/IP協議是非常必要的。
至少,需要了解ISO七層協議模型,IP/UDP/TCP/HTTP等常用協議的原理和三次握手機制。
4、明白DCOM/CORBA/XML/WEBServices存在的意義
隨著技術的發展,軟體與網路的無縫結合是必然趨勢,軟體系統的位置無關性是未來計算模式的重要特徵之一,DCOM/CORBA是當前兩大主流的分布計算的中間平台,DCOM是微軟COM(組件對象模型)的擴展,而CORBA是OMG支持的規范。
XML/WebServices重要性不言而喻,XML以其結構化的表示方法和超強的表達能力被喻為互聯網上的「世界語」,是分布式計算的基石之一。
5、不要將軟體工程與CMM分開
大型軟體系統的開發中,工程化的開發控製取代個人英雄主義,成為軟體系統成功的保證,一個編程高手並不一定是一個優秀的程序員。
一個優秀的程序員是將出色的編程能力和開發技巧同嚴格的軟體工程思想有機結合,編程只是軟體生命周期中的其中一環,優秀的程序員應該掌握軟體開發各個階段的基本技能。
如市場分析,可行性分析,需求分析,結構設計,詳細設計,軟體測試等。
6、需求理解能力
程序員要能正確理解任務單中描述的需求。在這里要明確一點,程序員不僅僅要注意到軟體的功能需求,還應注意軟體的性能需求。
要能正確評估自己的模塊對整個項目中的影響及潛在的威脅,如果有著兩到三年項目經驗的熟練程序員對這一點沒有體會的話,只能說明他或許是認真工作過,但是沒有用心工作。
7、模塊化思維能力
作為一個優秀的程序員,他的思想不能局限在當前的工作任務裡面,要想想看自己寫的模塊是否可以脫離當前系統存在,通過簡單的封裝在其他系統中或其他模塊中直接使用。
這樣做可以使代碼能重復利用,減少重復的勞動,也能使系統結構越趨合理。模塊化思維能力的提高是一個程序員的技術水平提高的一項重要指標。
就業方向:
1、網路開發
現在網路已經成為世界通訊的一座橋梁,好像Javascript、PHP、Ruby這幾類開發語言大部分是用作網路開發方面。
2、企業軟體開發
JAVA、C#、VB這幾類開發語言都實現了面向對象開發的目標,更多時候用於企業系統的開發。
3、系統軟體
C語言、C++、Object-C這些軟體更多是用在系統軟體開發,嵌入式開發的方面。
當然,這分類不是絕對,像JAVA、C#、VB很多時候也用於動態網站的開發。在很開發項目都會使用集成開發的方式,同一個項目裡面使用多種開發語言,各展所長,同步開發。
但所以在剛入門的時候,建議先為自己選擇一種合適的開發工具,「專注地投入學習,全力一擊」。
會編程、會計算機語言就能加入互聯網發展大潮中,享受數字經濟發展的紅利,一時間社會上的程序員培訓機構都變得格外火爆。
但是現在,專家的數據分析結果告訴你:若想跟上數字經濟發展的步伐,光會編程可不行,這個行業現在緊缺高端的、綜合型人才。
11月22日下午,清華大學經管學院互聯網發展與治理研究中心與領英聯合發布《中國經濟的數字化轉型:人才與就業》,揭示我國數字人才現狀與趨勢。
報告顯示我國數字經濟發展面臨人才短缺的挑戰,但這種短缺主要體現在擁有中高級專業技能數字人才的比例不高,擁有人工智慧、智能製造等前沿技術的人才更是少之又少。
與美國、英國、加拿大等國家相比,中國的數字人才儲備尚有很大差距。
此外,報告根據對人才需求的數據分析,結果顯示我國數字人才的技能需求不再強調單一編程技能,更加看重技術、管理和領導力等綜合技能。
2015年,我國從事信息傳輸、軟體和信息技術服務相關工作的人數約350萬,但其中中高端人才,特別是前沿技術的數字人才並不多。根據領英中國智庫的研究,在人工智慧領域,美國的從業者數量在85萬人以上,印度15萬,英國14萬,中國只有5萬多人。
報告負責人、清華大學經濟管理學院副院長陳煜波教授表示,我國目前在大數據與人工智慧領域人才缺口明顯。
他解釋說,目前中國85%以上的數字人才分布在產品研發類,而深度分析、先進製造、數字營銷等職能的人才加起來只有不到5%,存在較大缺口,新興技術人才和創新型人才培養方面存在滯後和不足。
這份研究報告的基礎數據來自領英在中國的3600萬個人用戶,這些用戶畢業於1.5萬多所國內外院校,分布在36.4萬家企業,擁有超過2.3萬項技能。
陳煜波研究團隊從中篩選了72萬數字人才,多維度提取用戶畫像並跟蹤其職業軌跡,以此預測不同地區的人才流向、僱傭率、受僱主歡迎的技能等人才趨勢層面的信息。
陳煜波說,根據數據分析結果,整體來看,雖然編程技能和數據分析技能需求占據主導,然而隨著數字產業走向成熟,企業除了強調編程技能,也逐步更加看重人才的技術、管理和領導力等綜合技能。
近年間,項目管理、產品運營等「技術+管理」類技能的需求呈現出明顯的上升趨勢,懂技術、懂管理的人才被認為是「一將難求」。
領英中國代理總裁曾志恆也提醒,如果你有興趣向數字職能轉型,不能僅僅專注於自己的技術能力,溝通和領導力等軟性技能將成為你脫穎而出的關鍵。
陳煜波希望這些研究結果能為教育行業和政府部門提供借鑒。他說,教育行業可根據職位的供需趨勢更好地規劃人才培養的方向,政府也可更好地了解人才流動方向、技術缺口等,以此制定有針對性的引才策略。
程序員崗位職責:
1、對項目經理負責,負責軟體項目的詳細設計、編碼和內部測試的組織實施,對小型軟體項目兼任系統分析工作,完成分配項目的實施和技術支持工作。
2、協助項目經理和相關人員同客戶進行溝通,保持良好的客戶關系。
3、參與需求調研、項目可行性分析、技術可行性分析和需求分析。
4、熟悉並熟練掌握交付軟體部開發的軟體項目的相關軟體技術。
5、負責向項目經理及時反饋軟體開發中的情況,並根據實際情況提出改進建議。
6、參與軟體開發和維護過程中重大技術問題的解決,參與軟體首次安裝調試、數據割接、用戶培訓和項目推廣。
7、負責相關技術文檔的擬訂。
8、負責對業務領域內的技術發展動態進行分析研究。
相關書籍:
很多程序員響應,他們在推薦時也寫下自己的評語。 以前就有國內網友介紹這個程序員書單,不過都是推薦數 Top 9的書。
其實除了前9本之外,推薦數前30左右的書籍都算經典,筆者整理編譯這個問答貼,同時摘譯部分推薦人的評語。
下面就按照各本書的推薦數排列。
1、《代碼大全》 史蒂夫·邁克康奈爾
2、《程序員修煉之道》
3、《計算機程序的構造和解釋》
4、《演算法導論》
5、《重構:改善既有代碼的設計》
6、《設計模式》
7、《人月神話》
8、《計算機程序設計藝術》
9、《編譯原理》(龍書)
10、《活著》
C. 軟體編程常用術語
1. XML 首先,你要了解XML。我不是說僅僅是XML規格本身,還包括一系列相關的基於XML的語言:最重要的是XHTML、XSLT、XSL、DTDs、XML Schema (XSD)、XPath、XQuery和SOAP。那些在過去5年內從未碰過鍵盤的人,可能不知道XML為何物。XML是一種文本文件,使用與HTML類似的標記。XML能定義一個樹狀結構,並能描述所含的數據。 XML最好的一點是既能存結構化數據也能存非結構化數據。它既能存貯和描述「規格的」(regular)表格數據,也能容納和描述「粗糙的」(ragged)文件數據。 XHTML是現今寫HTML的首選方法。因為它是形式完好(well formed)的XML,比起古老的、通常是畸形(malformed)的HTML文件,XHTML格式的文件更容易處理。 XSLT和XSL是用於把XML文件轉成其它格式的語言。可轉換的格式包括:文本文件、PDF文件、HTML、以逗號為分隔符的文件,或其它XML文件。 DTD和XML Schema描述XML文件所能包含的內容的類型,並讓你「驗證」XML文件內容的合理性,而不用寫特殊代碼以確保內容符合規則要求。 XPath和XQuery是用於從XML文件中抽取單個項目或一組項目的查詢語言。XQuery擴展了XPath,因而更重要。XQuery與XML的關系正像SQL與關系資料庫的關系。 SOAP是Web服務之間的一個標准通訊協議。盡管你不需要對SOAP標准一清二楚,你應該熟悉一般的schema和它的工作原理,以便能應用這門技術。 2. Web服務 Web服務是XML流行後的一個直接產物。因為你能用XML描述數據和物件,因為你能用schema確保XML文件內容的合理性,因為XML是基於文本的規范,XML為跨平台通訊標准提供了一個極其方便的基本格式。如果你還從來沒碰到Web服務,你可能很快就會碰到,在未來5年內,你幾乎肯定會碰到。熟悉Web服務十分重要,因為它是目前所有跨不同機器、不同語言、不同平台和不同地點的通訊協議中最簡單的一個。不管你需要與否,Web服務是邁向互用性的重要一步。 XML工作組主席John Bosak曾說XML「給Java一些事做」。實際上,Web服務讓所有語言都有了一些事做。Web服務讓在大型機上運行的COBOL應用軟體能調用在手持設備上運行的Java應用程序、能讓Java applet與.NET伺服器交談、能讓微機軟體與Web伺服器無縫連接,並提供了一個相對容易的方法,讓企業不光能向外界提供數據,還能提供功能,而且是一種與語言、平台和位置都獨立的方法。 3. 面向對象的編程 很多程序員仍認為OOP是象牙塔里的技術。但如果你想一下是什麼語言在過去的10年裡佔主導地位,你就會理解OOP不是象牙塔里的技術。OOP從Smalltalk開始,傳到C++和Pascal (Delphi)。Java使OOP大踏步地邁向主流,幾年後的VB.NET和C#則完全確立了OOP的優勢地位。盡管這些語言中的多數並不要求你必須會OOP,但我覺得如果你不了解OOP的基本概念也不知道如何應用這些概念,你能找到的編程工作將越來越少。 4. Java、C++、C#和VB.NET 我把這些語言列在一起,並不是建議你成為每一種語言的專家。我的理由是:學習編程最有效的方法之一是看代碼,而你能看到的大量的代碼很可能不是用你所喜愛的語言編寫的。 在過去幾年,各語言的能力越來越接近。現在,你可以用VB.NET寫Windows服務、Web應用程序或命令行程序。即使你只使用一種語言,你也應該學一些其它語言,以便能看懂那些樣例,並將其翻譯到你所用的語言。這4種語言是基本核心,還有其它一些滿足不同需要、頗具用途的語言,如FORTRAN、COBOL、APL、ADA、Perl和Lisp。 5. javascript 盡管名字有些相像,但Java與javascript並無關聯。為什麼一個腳本語言會如此重要呢?因為所有主流瀏覽器都用javascript。如果你需要寫Web應用程序,你就有足夠的理由學javascript。javascript可以用作ASP或ASP.NET的伺服器語言,也可以當做用於擴展XSLT的功能語言(functional language)。javascript是Mozilla/Netscape中用於激活基於XUL的程序介面的首選語言。javascript的一個變種ActionScript是Flash MX的編程語言。將來,javascript很可能成為新設備的編程語言,以及大型應用軟體中的宏語言。 與javascript相對照的是VBScript。盡管Microsoft的軟體對VBScript有良好的支持,但VBScript在未來的開發工作中很可能是一個糟糕的選擇。就是Microsoft也傾向於用javascript(或Microsoft自己的變種:JScript)寫客戶端程序。在選擇腳本語言時,請選擇javascript。 6. 正則表達式(Regular Expressions) 查尋關系資料庫可以用SQL,查詢XML可以用XPath和XQuery,查詢純文本文件則可以用正則表達式。例如,你可以用一個命令從一個HTML文件中查找並刪除所有的注釋。各種開發語言內置的一些簡單的文本查詢功能,如"IndexOf"函數或VB中經典的"InStr"函數或"Like"操作符,根本不能與正則表達式相提並論。現在,各種主要的開發語言都提供使用正則表達式的途徑。盡管正則表達式本身既難懂更難讀(是回到早期計算機時代的一種倒退),但它卻是一個功能強大而且未被充分利用的工具。 7. 設計模式 正像OOP通過把對象分類以簡化編程一樣,設計模式對一些普遍的對象之間的交互進行分類,並賦予一個恰當的名稱。OOP用得越多,設計模式就越有用。一些最常用的模式的名稱已經變成了軟體開發領域共同使用的術語,所以要跟上信息的主流,你就要對設計模式有相當的理解。 8. Flash MX 如果你需要在客戶端得到比HTML和CSS更多的圖形和更強的編程功能,Flash是你的答案。用Flash編程比開發Java applets或寫.NET代碼要快得多,也容易得多。 在最新版本 (MX) 中,Flash不僅僅是畫圖和製造動畫的工具,它已經成為一個編程功能強大的開發環境:能調用SOAP Web服務,也能調用遠端伺服器上的ColdFusion、Java或.NET程序。Flash無處不在。它的引擎存在於世界上大多數客戶端計算機,包括手持設備、置頂盒、甚至是新的書寫板電腦。所以使用Flash能大大擴展你的程序的應用范圍。 9. Linux/Windows 熟悉Linux。在一台舊機器或新機器上安裝Linux。下載圖形用戶界面,在其基礎上寫一些程序。安裝Apache,寫一個Web應用程序。這個世界不再僅僅是屬於Windows,這種趨勢可能還會持續下去。如果你是一名中堅的Linux開發人員,那就拋棄你對Windows的憎惡,看看你能否做一些Windows編程。Windows能繼續在台式電腦上稱王是有其原因的,這不僅僅是因為Microsoft控制了這個市場。 沒人知道你們公司會在什麼時候決定從Linux轉向Windows(或從Windows轉向Linux),或者你想跳到一家用另一種平台的公司,或者你想出了開發一個殺手軟體的好主意,所以你要爭取擁有在不同操作系統上的編程經驗。 10. SQL 盡管SQL不像本文討論的其它技術那樣新,而且SQL的重要性在未來10年內很可能降低,但它仍然是一項基本技能。很多開發人員還沒有掌握這門技術,或掌握得不夠,不足以有效率地使用它。不要依賴具有圖形用戶界面的SQL生成器替你做事情,你要自己手工地寫查詢命令,直到你熟悉基本的SQL語法為止。了解SQL不僅能幫助你日後學習XQuery,你還有可能馬上發現能簡化或改進目前項目的方法。 培養好奇心 最後,(對,我意識到這是第11門技術),好奇心是你最重要的技能。要去嘗試各種東西。新語言或新技術對你當前或將來的工作可能有用,也可能沒用,但並不是你所學的每一件事都是為了工作。不要害怕失敗,萬事開頭難,學新技術也是如此。大多數失敗是因為人們希望太快地學到太多的東西。要對每一點進步感到滿意,不要讓時間(或缺乏時間)妨礙你。相反,你要安排時間留心、研究、試驗新的開發技術和工具。 你可能永遠也沒有必要成為這些技術的專家,而且我的選擇可能根本不適合你的特殊情況,但通過培養好奇心,你將會發現你應該了解的東西。