導航:首頁 > 源碼編譯 > 編譯器開發架構師

編譯器開發架構師

發布時間:2022-07-19 13:14:37

編譯器是由誰來長期維護和組織以及更新的

有CPU的製造商(例如 Intel 有 icc),也有其他的開源組織(例如 GNU 的gcc),或者其他的公司(例如 Microsoft 的 MSVC)。
如果有國際標准或者事實標準的話,編譯器一般會對這些標准給點面子 —— 當然 Intel 之類的本身就有制定標准讓別人認可的能力。

CPU的製造商會提供這種CPU使用的指令集,以及其他一些關於CPU的架構的信息。例如網上可以找到 Intel 的 manual 。依照這些就可以寫出具有特定功能的二進制指令。

上面說的 icc、gcc、MSVC可以從各自的網站下載,此外一些操作系統會自帶編譯器(例如 Linux 系統通常會自帶 gcc )

❷ 做一個java高級程序員甚至架構師 應該掌握哪些技術

1、語法:

Java程序員必須比較熟悉語法,在寫代碼的時候IDE的編輯器對某一行報錯應該能夠根據報錯信息知道是什麼樣的語法錯誤並且知道任何修正。

2、命令

必須熟悉JDK帶的一些常用命令及其常用選項,命令至少需要熟悉:

appletviewer、HtmlConverter、jar、java、javac、javadoc、javap、javaw、native2ascii、serialver,

如果這些命令你沒有全部使用過,那麼你對java 實際上還很不了解。

3、工具:

必須至少熟練使用一種IDE的開發工具,

例如Eclipse、Netbeans、JBuilder、Jdeveloper、IDEA、JCreator或者Workshop,

包括進行工程管理、常用選項的設置、插件的安裝配置以及進行調試。

4、API:

Java的核心API是非常龐大的,但是有一些內容筆者認為是Java程序員必須熟悉的,否則不可能熟練的運用Java,

包括:

java.lang包下的80%以上的類的功能的靈活運用。

java.util包下的80%以上的類的靈活運用,特別是集合類體系、規則表達式、zip、以及時間、隨機數、屬性、資源和Timer.

java.io包下的60%以上的類的使用,理解IO體系的基於管道模型的設計思路以及常用IO類的特性和使用場合。

java.math包下的100%的內容。

java.net包下的60%以上的內容,對各個類的功能比較熟悉。

java.text包下的60%以上的內容,特別是各種格式化類。

熟練運用JDBC. 8)、java.security包下40%以上的內容,如果對於安全沒有接觸的話根本就不可能掌握java.

AWT的基本內容,包括各種組件事件、監聽器、布局管理器、常用組件、列印。

Swing的基本內容,和AWT的要求類似。

XML處理,熟悉SAX、DOM以及JDOM的優缺點並且能夠使用其中的一種完成XML的解析及內容處理。

5、測試:

必須熟悉使用junit編寫測試用例完成代碼的自動測試。

6、管理:

Java程序員必須熟悉使用ant完成工程管理的常用任務,

例如工程編譯、生成javadoc、生成jar、版本控制、自動測試。

7、排錯:

應該可以根據異常信息比較快速的定位問題的原因和大致位置。

8、思想:

必須掌握OOP的主要要求,這樣使用Java開發的系統才能是真正的Java系統。

9、規范:

編寫的代碼必須符合流行的編碼規范,

例如類名首字母大寫,成員和方法名首字母小寫,方法名的第一個單詞一般是動詞,包名全部小寫等,這樣程序的可讀性才比較好。

10、博學:

Java程序員除了精通Java意外,還要掌握J2EE 、Oracle 、WebLogic、Jboss、Spring、Struts、Hibernate
等流行技術,掌握軟體架構設計思想、搜索引擎優化、緩存系統設計、網站負載均衡、系統性能調優等。

想要學好Java技術,成為一名優秀的程序員,鄭州的童鞋,可以選擇尚學堂


❸ 編譯器的發展史

編譯器
編譯器,是將便於人編寫,閱讀,維護的高級計算機語言翻譯為計算機能識別,運行的低級機器語言的程序。編譯器將源程序(Source program)作為輸入,翻譯產生使用目標語言(Target language)的等價程序。源程序一般為高級語言(High-level language),如Pascal,C++等,而目標語言則是匯編語言或目標機器的目標代碼(Object code),有時也稱作機器代碼(Machine code)。

一個現代編譯器的主要工作流程如下:

源程序(source code)→預處理器(preprocessor)→編譯器(compiler)→匯編程序(assembler)→目標程序(object code)→連接器(鏈接器,Linker)→可執行程序(executables)
目錄 [隱藏]
1 工作原理
2 編譯器種類
3 預處理器(preprocessor)
4 編譯器前端(frontend)
5 編譯器後端(backend)
6 編譯語言與解釋語言對比
7 歷史
8 參見

工作原理
翻譯是從源代碼(通常為高級語言)到能直接被計算機或虛擬機執行的目標代碼(通常為低級語言或機器言)。然而,也存在從低級語言到高級語言的編譯器,這類編譯器中用來從由高級語言生成的低級語言代碼重新生成高級語言代碼的又被叫做反編譯器。也有從一種高級語言生成另一種高級語言的編譯器,或者生成一種需要進一步處理的的中間代碼的編譯器(又叫級聯)。

典型的編譯器輸出是由包含入口點的名字和地址以及外部調用(到不在這個目標文件中的函數調用)的機器代碼所組成的目標文件。一組目標文件,不必是同一編譯器產生,但使用的編譯器必需採用同樣的輸出格式,可以鏈接在一起並生成可以由用戶直接執行的可執行程序。

編譯器種類
編譯器可以生成用來在與編譯器本身所在的計算機和操作系統(平台)相同的環境下運行的目標代碼,這種編譯器又叫做「本地」編譯器。另外,編譯器也可以生成用來在其它平台上運行的目標代碼,這種編譯器又叫做交叉編譯器。交叉編譯器在生成新的硬體平台時非常有用。「源碼到源碼編譯器」是指用一種高級語言作為輸入,輸出也是高級語言的編譯器。例如: 自動並行化編譯器經常採用一種高級語言作為輸入,轉換其中的代碼,並用並行代碼注釋對它進行注釋(如OpenMP)或者用語言構造進行注釋(如FORTRAN的DOALL指令)。

預處理器(preprocessor)
作用是通過代入預定義等程序段將源程序補充完整。

編譯器前端(frontend)
前端主要負責解析(parse)輸入的源程序,由詞法分析器和語法分析器協同工作。詞法分析器負責把源程序中的『單詞』(Token)找出來,語法分析器把這些分散的單詞按預先定義好的語法組裝成有意義的表達式,語句 ,函數等等。 例如「a = b + c;」前端詞法分析器看到的是「a, =, b , +, c;」,語法分析器按定義的語法,先把他們組裝成表達式「b + c」,再組裝成「a = b + c」的語句。 前端還負責語義(semantic checking)的檢查,例如檢測參與運算的變數是否是同一類型的,簡單的錯誤處理。最終的結果常常是一個抽象的語法樹(abstract syntax tree,或 AST),這樣後端可以在此基礎上進一步優化,處理。

編譯器後端(backend)
編譯器後端主要負責分析,優化中間代碼(Intermediate representation)以及生成機器代碼(Code Generation)。

一般說來所有的編譯器分析,優化,變型都可以分成兩大類: 函數內(intraproceral)還是函數之間(interproceral)進行。很明顯,函數間的分析,優化更准確,但需要更長的時間來完成。

編譯器分析(compiler analysis)的對象是前端生成並傳遞過來的中間代碼,現代的優化型編譯器(optimizing compiler)常常用好幾種層次的中間代碼來表示程序,高層的中間代碼(high level IR)接近輸入的源程序的格式,與輸入語言相關(language dependent),包含更多的全局性的信息,和源程序的結構;中層的中間代碼(middle level IR)與輸入語言無關,低層的中間代碼(Low level IR)與機器語言類似。 不同的分析,優化發生在最適合的那一層中間代碼上。

常見的編譯分析有函數調用樹(call tree),控制流程圖(Control flow graph),以及在此基礎上的 變數定義-使用,使用-定義鏈(define-use/use-define or u-d/d-u chain),變數別名分析(alias analysis),指針分析(pointer analysis),數據依賴分析(data dependence analysis)等等。

上述的程序分析結果是編譯器優化(compiler optimization)和程序變形(compiler transformation)的前提條件。常見的優化和變新有:函數內嵌(inlining),無用代碼刪除(Dead code elimination),標准化循環結構(loop normalization),循環體展開(loop unrolling),循環體合並,分裂(loop fusion,loop fission),數組填充(array padding),等等。 優化和變形的目的是減少代碼的長度,提高內存(memory),緩存(cache)的使用率,減少讀寫磁碟,訪問網路數據的頻率。更高級的優化甚至可以把序列化的代碼(serial code)變成並行運算,多線程的代碼(parallelized,multi-threaded code)。

機器代碼的生成是優化變型後的中間代碼轉換成機器指令的過程。現代編譯器主要採用生成匯編代碼(assembly code)的策略,而不直接生成二進制的目標代碼(binary object code)。即使在代碼生成階段,高級編譯器仍然要做很多分析,優化,變形的工作。例如如何分配寄存器(register allocatioin),如何選擇合適的機器指令(instruction selection),如何合並幾句代碼成一句等等。

編譯語言與解釋語言對比
許多人將高級程序語言分為兩類: 編譯型語言 和 解釋型語言 。然而,實際上,這些語言中的大多數既可用編譯型實現也可用解釋型實現,分類實際上反映的是那種語言常見的實現方式。(但是,某些解釋型語言,很難用編譯型實現。比如那些允許 在線代碼更改 的解釋型語言。)

歷史
上世紀50年代,IBM的John Backus帶領一個研究小組對FORTRAN語言及其編譯器進行開發。但由於當時人們對編譯理論了解不多,開發工作變得既復雜又艱苦。與此同時,Noam Chomsky開始了他對自然語言結構的研究。他的發現最終使得編譯器的結構異常簡單,甚至還帶有了一些自動化。Chomsky的研究導致了根據語言文法的難易程度以及識別它們所需要的演算法來對語言分類。正如現在所稱的Chomsky架構(Chomsky Hierarchy),它包括了文法的四個層次:0型文法、1型文法、2型文法和3型文法,且其中的每一個都是其前者的特殊情況。2型文法(或上下文無關文法)被證明是程序設計語言中最有用的,而且今天它已代表著程序設計語言結構的標准方式。分析問題(parsing problem,用於上下文無關文法識別的有效演算法)的研究是在60年代和70年代,它相當完善的解決了這個問題。現在它已是編譯原理中的一個標准部分。

有限狀態自動機(Finite Automaton)和正則表達式(Regular Expression)同上下文無關文法緊密相關,它們與Chomsky的3型文法相對應。對它們的研究與Chomsky的研究幾乎同時開始,並且引出了表示程序設計語言的單詞的符號方式。

人們接著又深化了生成有效目標代碼的方法,這就是最初的編譯器,它們被一直使用至今。人們通常將其稱為優化技術(Optimization Technique),但因其從未真正地得到過被優化了的目標代碼而僅僅改進了它的有效性,因此實際上應稱作代碼改進技術(Code Improvement Technique)。

當分析問題變得好懂起來時,人們就在開發程序上花費了很大的功夫來研究這一部分的編譯器自動構造。這些程序最初被稱為編譯器的編譯器(Compiler-compiler),但更確切地應稱為分析程序生成器(Parser Generator),這是因為它們僅僅能夠自動處理編譯的一部分。這些程序中最著名的是Yacc(Yet Another Compiler-compiler),它是由Steve Johnson在1975年為Unix系統編寫的。類似的,有限狀態自動機的研究也發展了一種稱為掃描程序生成器(Scanner Generator)的工具,Lex(與Yacc同時,由Mike Lesk為Unix系統開發)是這其中的佼佼者。

在70年代後期和80年代早期,大量的項目都貫注於編譯器其它部分的生成自動化,這其中就包括了代碼生成。這些嘗試並未取得多少成功,這大概是因為操作太復雜而人們又對其不甚了解。

編譯器設計最近的發展包括:首先,編譯器包括了更加復雜演算法的應用程序它用於推斷或簡化程序中的信息;這又與更為復雜的程序設計語言的發展結合在一起。其中典型的有用於函數語言編譯的Hindley-Milner類型檢查的統一演算法。其次,編譯器已越來越成為基於窗口的交互開發環境(Interactive Development Environment,IDE)的一部分,它包括了編輯器、連接程序、調試程序以及項目管理程序。這樣的IDE標准並沒有多少,但是對標準的窗口環境進行開發已成為方向。另一方面,盡管近年來在編譯原理領域進行了大量的研究,但是基本的編譯器設計原理在近20年中都沒有多大的改變,它現在正迅速地成為計算機科學課程中的中心環節。

在九十年代,作為GNU項目或其它開放源代碼項目的一部分,許多免費編譯器和編譯器開發工具被開發出來。這些工具可用來編譯所有的計算機程序語言。它們中的一些項目被認為是高質量的,而且對現代編譯理論感性趣的人可以很容易的得到它們的免費源代碼。

大約在1999年,SGI公布了他們的一個工業化的並行化優化編譯器Pro64的源代碼,後被全世界多個編譯器研究小組用來做研究平台,並命名為Open64。Open64的設計結構好,分析優化全面,是編譯器高級研究的理想平台。

編譯器是一種特殊的程序,它可以把以特定編程語言寫成的程序變為機器可以運行的機器碼。我們把一個程序寫好,這時我們利用的環境是文本編輯器。這時我程序把程序稱為源程序。在此以後程序員可以運行相應的編譯器,通過指定需要編譯的文件的名稱就可以把相應的源文件(通過一個復雜的過程)轉化為機器碼了。

編譯器工作方法
首先編譯器進行語法分析,也就是要把那些字元串分離出來。然後進行語義分析,就是把各個由語法分析分析出的語法單元的意義搞清楚。最後生成的是目標文件,我們也稱為obj文件。再經過鏈接器的鏈接就可以生成最後的可執行代碼了。有些時候我們需要把多個文件產生的目標文件進行鏈接,產生最後的代碼。我們把一過程稱為交叉鏈接。

❹ 開發平台,集成環境,編譯器,有什麼區別,為什麼c++有那麼多的平台

這個區別也太大了
編譯器:將高級語言編譯成機器碼,你這里說的是C++就是將C++代碼編譯成計算機可以識別的2進制代碼,顯然計算機是不認識C++代碼的,C++只是為了程序員便於編寫程序而產生高級程序語言。

集成環境:就是所謂IDE,你可以是認為用來做程序的一個軟體,這個軟體包含了從寫程序到生成可執行程序的所有組件,也包括調試等其他功能。簡單的對比,就如你寫文檔用的WORD一樣,IDE就提供對應的類似功能。

開發平台:開發平台一般包括IDE,系統,資料庫版本,編譯器版本等一系列與開發相關的信息,即軟體是在這樣的計算機環境下開發的。

為什麼C++有那麼多平台:回答很簡單,因為計算機大家使用的系統等不同,有的用LINUX,有的用WINDOWS,有的是嵌入式平台,也可以從CPU角度說,有X86架構的,有X64的。即使是同一個系統,也有不同版本。每個平台下的文件格式、每個CPU的指令不同等等都造成了平台多,不只是C++的問題。

❺ 現在程序員有前途嗎我一直想從程序員做起,然後構架師什麼的,我不是學計算機專業的,學編程就是自學的

作為一個不是科班出身、沒有正規學習過計算機知識的架構師,想在這里把我這幾年學習的經歷體驗和大家分享一下,談談自己對架構師成長之路的一些感想。
奠定扎實的理論基礎
千里之行,始於足下!技術不是一蹴而就的事情,而是長時間積累的成果。扎實的基本功是做好所有事情的開始。到現在我還記得對我影響非常大的幾本書:
■《C++編程思想》
■《深入淺出MFC》
■《Windows 核心編程》
■《數據結構》《編譯原理》
我學習計算機正是按照這幾本書的順序,之前學習C的經歷就不必說了,而轉折點正是《C++ 編程思想》——它讓我感覺到程序和語言竟然這么有意思,至今仍對虛表的概念記憶猶新,尤其指針的用法,對我以後學習Java語言有很大的幫助,對多態和語言的特性也有了很高的認識。
《深入淺出MFC》這本書,記憶最深刻的還是其中強大無比的宏定義和對象層次設計。然而學習MFC的過程中,我遇到的最大問題就是:很多東西都是黑盒的,這引發了我刨根問底的慾望。所以後來我學習了《Windows核心編程》,這本書給我的最大收獲,就是了解了很多操作系統底層的知識,操作系統是如何運行的。不過遺憾的是,如果當時從Linux 或者Unix 開始學習,應該會了解得更系統一些。
之後我深入學習了《數據結構》和《編譯原理》。這是我經過了很多實踐以後,又回過頭來重新學習。拿《編譯原理》來說,以前對這門學科的了解非常有限,後來為了實現一個東西,要用到腳本語言,找來找去找到了Velocity(後來想想使用Groovy 應該更好一點),用了以後覺得很好。以前修改程序邏輯,是需要重新編譯或者修改配置重新發布才能OK,而現在只需要編輯然後保存一下,就能得到自己想要的結果。這令我著迷,於是想知道它是如何實現的,翻看源代碼才曉得原來還有 JavaCC這個東西。就這樣,我從解釋語言入手,逐漸開始了瘋狂學習編譯原理的過程,越發覺得編程語言非常有意思。
回頭想想以前和現在學習的語言,感覺程序語言就是在不斷抽象:從匯編、C、C++, 再到Java、C#,再到更動態一點的語言如Perl、Python、Ruby 等等。不管它再怎麼變、再怎麼抽象,還是編譯原理應用的產物。
講了這么多,就是想強調理論基礎知識的重要性!雖然我們現在使用的框架如此之多,但是如果你有了扎實的基礎理論知識,這些東西就跟玩具一樣。基礎就是一個無招勝有招的殺手工具。
培養完善的抽象思維
抽象的能力也是作為一名好的程序員必須具備的能力。我們在考慮問題的時候可能會遇到錯綜復雜的場景,從這些迷霧中找到一條明路是我們做好程序員的關鍵。這些年來學習了很多框架,回過頭來想想自己都有點後怕,這也令很多初學者望而生畏。但認真想想,真的有那麼可怕嗎?
讓我們從語言層面逐漸剖析這個問題,應該很容易做出解釋。程序語言就是我們在某種場景下交流的工具,匯編是機器語言;C和C++ 是編譯型語言,它們是一種針對匯編的高級抽象;而Java 和 C# 就是更高級的抽象了,甚至於抽象了一層虛擬機出來(這個產生的影響就是,之後的很多高級語言評判標准,都是「是否支持虛擬機」),再到後面的許多動態語言,那就是更抽象了。說到這里你會問到,講這么多語言類的東西和學習框架有什麼聯系?讓我慢慢道來。
我們使用一種語言就是用它的語法進行編程,而學習一個框架實際也是為了用這個框架所提供的語言來寫程序:Struts——我們使用很多配置還有 Action 和Form ;Spring——我們使用Bean 模型,這是它的最基本模型(現在 Spring 已經龐大得讓很多人無法學習了);iBatis——我是用它的XML-SQL 模型;JBPM——使用它所謂的GOP模型(面向圖元的編程);Web flow——是在使用它的頁面流模型。這樣的例子我可以舉出很多(這也是DSL現在如此流行的原因)。
很多人會說:學習這么多我已經暈掉了!不妨想想,為什麼會有這么多東西存在? Struts 是為了解決Web編程的困擾;iBatis、Hibernate 是為了解決在資料庫編程時的麻煩;原有的Web頁面編程都是獨立的具體單元,Web flow能夠讓這些頁面形成流的形式,讓開發更順其自然;從JBPM的GOP可以看出,JBoss 的開發人員對抽象的理解度很深。我舉這么多例子,實際是讓大家不要害怕現有的這些框架,有了扎實的基礎,抽象的概念是很容易理解的!缺乏抽象的能力,你就不能更快更好地解決問題。
實際抽象能力衍生出來的一點就是,需要我們對已學過的知識定期進行梳理。這樣能讓你鞏固已有的知識,為以後的學習做好准備。知識就好比一棵生物進化樹,最終目標都是一樣的,關鍵是看如何選擇進化的路線,讓自己的知識結構能夠有機的結合在一起。做到學以致用。過一段時間就梳理一下,你會有更多的發現。
擴充現有的知識層面
在鞏固原有知識結構的前提下,我們更需要擴充現有的知識面。井底之蛙,看到的永遠是井口大的那片天,只有跳出來,才能看見無限美好的藍天白雲。我曾經也常常局限在自己已熟悉的那塊領域沾沾自喜,但是走出來以後才發現,自己原本是多麼膚淺!學習的知識越多,對新事物的洞察力將會越准確!這樣有助於你鞏固已有的知識,系統地學習新的知識。
那我們是否需要無限平行式的學習知識呢?我的答案是「No」。人的知識面是有限的,我們需要一個T型的知識結構。你的知識面要廣,但是對於某些技術點要專,這才是做好一個架構師的關鍵。有時 「專」可以讓你對很多「廣」的知識產生觸類旁通的感覺。
實踐也是非常重要的一環,不要有畏難心理,覺得這個東西太難,我無法完成!有時候事情的結果可能是糟糕的,但是過程是非常寶貴的,其中可以學習到很多東西,同時也可以讓自己避免輕浮的心理。
還要著重培養自己良好的溝通與解說能力。架構師面對客戶群具有多樣性,有技術工程師、業務人員、公司管理層,甚至直接面對客戶等。要把一個高度抽象又復雜的系統說清楚,這對於架構師來說也是一種挑戰。所以架構師必須掌握技巧,應用多種表達方式來闡述架構與產品設計、與具體業務、與公司戰略之間的關系等。培養良好的溝通能力,多和周圍的人進行溝通,你能夠學到更多的知識!
「平衡」是架構設計的藝術,我們設計一個東西,就是在平衡各方面的利益。平衡有可能是時間上的,比如需要支持多少年的系統可用性;平衡有可能是縱向的,比如要支持系統的向下兼容性,要保證程序員編程模型上的簡單性等等。這種平衡就是因人因時因地而異了。平衡的把握很可能就是評判一個架構師架構水平的標准!架構師在設計的時候應該權衡維度、整體性和擴展性,考慮問題時不要局限於自己的一畝三分地。多種點田,會長出很多莊稼的!
擁有一個扎實的基礎,不斷擴充自己的知識面、完善知識體系,在對現有知識抽象的基礎上,不斷去溝通實踐,你將獲得更強的架構平衡能力。最後我還要說,業務知識非常重要,這個是你實踐的關鍵!

❻ 軟體開發工程師是什麼

軟體工程師(Software Engineer)是從事軟體職業的人員的一種職業能力的認證,通過它說明具備了工程師的資格。軟體工程師是從事軟體開發相關工作的人員的統稱。
軟體工程師(Software Engineer)是從事軟體職業的人員的一種職業能力的認證,通過它說明具備了工程師的資格。軟體工程師是從事軟體開發相關工作的人員的統稱。軟體工程師是一個廣義的概念,包括軟體設計人員、軟體架構人員、軟體工程管理人員、程序員等一系列崗位,工作內容都與軟體開發生產相關。軟體工程師的技術要求是比較全面的,除了最基礎的編程語言(C 語言/C++/JAVA 等)、資料庫技術(SQL/ORACLE/DB2 等)等,還有諸多如 JAVASCRIPT、AJAX、HIBERNATE、SPRING 等前沿技術。此外,關於網路工程和軟體測試的其他技術也要有所涉獵。
能力要求
對於軟體工程師,不太重視學歷,但並不是對學歷沒有要求,重點關注項目的經驗和學習知識的能力,能否利用軟體工程專業知識來解決問題,根據崗位不同,對軟體工程師的要求也有所不同。具體能力要根據崗位和自己的興趣愛好選定自己的職業規劃方向,一方面要詳細了解軟體工程師的要求,可以關注企業的招聘信息;一方面自己要貯備通用的知識技能,廣泛閱讀相關的計算機材料對自己以後的發展大有幫助。可以確定的是軟體工程師的前途在未來的發展依然是不斷升溫的職業,比較需要有技術和良好前景的專業之一。
分級
一般情況下都是分 4 級:
1、軟體技術員
2、助理軟體工程師
3 、軟體工程師
4 、高級軟體工程師
工作內容
1、 指導程序員的工作;
2、 參與軟體工程系統的設計、開發、測試等過程;
3 、協助工程管理人保證項目的質量;
4 、負責工程中主要功能的代碼實現;
5 、解決工程中的關鍵問題和技術難題;
6 、協調各個程序員的工作,並能與其它軟體工程師協作工作。
7、還要編寫各種各樣的軟體說明書,如:需求說明書,概要說明書等
8、考試科目工程師是中級職稱,考試的題目包括了計算機體系結構、軟體工程、資料庫、數據結構、編譯原理等計算機學科的基礎課程

❼ 跟程序員相關崗位有哪些

1.技術+技術(深入階段)
這算是一條純技術路線,具體又可以分3個方向:
技術(2年以上編程經驗)+技術(軟體測試,或系統分析師,或系統架構師)
有軟體開發的工作經驗,再加軟體測試,比剛開始就進入軟體測試行業的人要更具競爭優勢。軟體測試工作經驗越多越好,可以干到退休,不用擔心年齡問題。
如果選擇「系統分析師,系統架構師」,則首先要打好扎實的「理論基礎」(可以通過考證書,比如參加軟考),以保證自己「後勁力十足」,這樣等有了4,5年的工作經驗後,才有可能能沖上這個高端領域。平時工作中要不斷的鍛煉自己的「發散思維」,培養善於發現業務需求的「眼光」。
2.技術+管理 :比如 項目經理。
像雷軍說的那樣:「程序員象木工一樣,熟能生巧。程序員必須寫足夠代碼量(8萬行以上)的程序,才會有感覺,這是一個苦力活,沒有任何捷徑可走。」項目經理大多是從「優秀」的程序員里挑選出來,想走這條路,平時就要瘋狂的編碼,迅速累積豐富的編程經驗,然後再補充一些管理方面的知識。(本人打算走這條路,呵呵)
3.技術+銷售:比如 技術銷售工程師,技術支持工程師。
這類工作要有一定的技術背景(入門級也可以),具備較好的語言表達,溝通能力。工作比較輕松,月薪待遇主要看個人銷售業績等,個人收入差別可能比較大。
4.當培訓老師
如果你「樂於分享」工作經驗,傳授知識,或者覺得自己年齡比較大,精力不夠充沛,且往上升又比較困難的話,可以選擇去培訓機構當老師,就目前而言,當老師工作輕松,待遇也不錯。

❽ 軟體系統架構師必修內容是什麼

對於任何一個軟體開發人員來說,架構師都是一個令人嚮往的角色。就連世界首富比爾蓋茨在2000年卸任公司CEO的同時,也擔任了微軟公司的榮譽角色「首席軟體架構師」,可見「架構師」這一稱謂的吸引力。架構師是公司的「金領」,有著非常高的收入,很少需要考慮生存的問題,從而有更多的精力思考關鍵技術問題,形成「強者愈強」的良性循環。部分優秀的開發人員在工作了一定時間後,就要開始考慮自己的未來到底向哪個方向發展。如果開發人員的溝通能力強過技術能力,在補充一定的項目管理知識後,可以向技術管理的方向轉型。如果其對技術一直很感興趣,而溝通能力也不弱,則可以試著進一步加強技術修養,以期向架構師的方向發展,最終「修成正果」。
那麼,到底什麼是架構師呢?所謂的架構師,應該是一個技術企業的最高技術決策者。他主要負責公司軟體產品或軟體項目的技術路線與技術框架的制訂。好的架構師都是善良的獨裁者,具有很強的技術、良好的寫作能力、良好的口頭表達能力,能夠在各個層次進行溝通。從開發人員到架構師的成長應該是階梯式的,一般來講開發人員在剛剛開始工作時只能開發簡單的獨立軟體模塊,慢慢的隨著經驗的增長,他開始接觸一些相互之間有信息傳遞的模塊,而後來,他會發現自己接到的開發任務已經不是一個獨立的單體,這些任務由一些專門的軟體部分組成,可能包含資料庫,工作流引擎,消息服務等等各種功能模塊,可能分布在不同的伺服器上,所有的部分協同起來,完成軟體功能。而這時候,體系結構的好壞將直接決定了系統的性能和可擴展性,而就在這時候,這名優秀的開發人員也開始思考架構師應該思考的問題了,或者說,他向成長為架構師的道路邁出了一大步。
什麼是架構師最具價值的技能呢?就是要了解不同的知識,做一個「雜家」或者說「博學家」。當然,如果你的資料庫技術非常棒,或者你在工作流引擎方面具有不可超越的專家知識,那也是很不錯的。好的架構師有好多都是從專家成長過來的。但是,這不是架構師應該做的事情,架構師應該做的是了解所有的東西,既了解技術的宏觀面,又了解技術的細節。真正的架構師不僅僅要了解軟體,也要了解硬體,在關鍵的部位使用合適的硬體來取代軟體,可以成倍甚至成百倍的提高整個系統的效率。下面我將會以互聯網行業對的架構師的要求為例,向大家講解作為架構師應該具備的知識。
互聯網行業是當前最激動人心的行業之一,很多的創新都來自於這個行業,而每一個大型的網站如Google,Yahoo,Myspace等都需要解決一個非常復雜的問題,就是網站的分布式向外擴展(Scale Out)的問題。解決這個問題,需要最優秀的架構師對業務進行剖析,利用軟硬體將網站進行重構,甚至根據業務研發相應的分布式技術,解決網站復雜的分布式計算的問題。如果你想在這個行業中成為一名架構師的話,需要至少掌握網路知識,硬體,軟體,網站優化等方方面面的知識:
網路知識
當前的軟體已經絕對不是那種僅僅跑在一台單機上的孤立應用了。不僅僅是在互聯網行業,任何一個行業的軟體,都要求其具有網路功能。因此,網路知識是架構師必備的知識。我們所說的網路知識,不僅僅包括TCP/IP,http等互聯網行業常用的軟體協議,也包括網路規劃,甚至更具體的說,根據網站應用所處的地理環境進行網路規劃。比如人們常說:「這世界上最遠的距離不是生與死的距離,而是電信到網通的距離」(笑)如果應用是建立在中國的,就要考慮電信用戶和網通用戶訪問網站的速度應該都比較快才可以。這時候的解決方案可能有多種,比如採用CDN(Content Delivery Network內容分發網路)使得網站的內容發布到離用戶最近的伺服器,又可以採用把伺服器放在一些所謂的雙線機房中,甚至將幾種方案結合起來使用。這些都統統歸到網路知識中。做為公司的架構師,要對這些知識都有所了解,才有助於在遇到問題時找到最佳答案。
硬體知識
了解硬體的極限,是架構師的基本功。我見過一些人,他們的眼中軟體硬體都是沒有極限的,需要資源就申請,系統性能下降了就買更高級的設備。然而,硬體的性能有很大一部分取決於I/O設備。而這些I/O設備依靠的都是機械物理運動,這種運動是有極限的。因此當資源訪問量增大到一定的程度時,這種物理運動將成為瓶頸。比如說,在開發網站的過程中,記錄訪客的狀態是一件很重要的事情,一般來說可以使用HttpSession來記錄。而HttpSession的存儲問題將是一個很大的挑戰,尤其是多機共享Session時,將HttpSession存成文件並通過多機共享或網路備份的方式來解決分布式的問題是常用的方案,然而,架構師必須考慮到這種方案是有I/O極限限制的,很難擴展到超過一定規模的大型網路。同時,架構師應該了解目前最近的硬體發展是否對軟體系統會造成一定的影響,比如在多核的條件下是否對軟體編程有新的要求,是否會對運行在虛擬機和非虛擬機上的程序有影響等等。
軟體知識
軟體知識所包含的范圍就更加廣泛了。對於互聯網行業來講,架構師要了解操作系統,資料庫,應用伺服器等各方面的知識。比如說,如果網站使用的操作系統是Linux,就要了解這個Linux版本的性能與局限性,比如說最多可以存放的單個文件為多大。有的資料庫的數據是以單個文件來存放的,雖然我們很少見到資料庫中的數據多到不能再放入一條記錄的情況,但是作為架構師,請時刻注意,這種可能性是有的。而且如果你有幸在一家高速成長的互聯網企業中,而你所負責的應用又沒有經過優化的話,可能你會很快見到這種現象。這種現象的發生可能是由於操作系統不支持大文件的原因,也可能是資料庫不支持大文件。不論如何,架構師應該在這種現象發生之前就把一切都准備好。對資料庫中表的拆分是架構師應該遇到的另外一個困難。一般來說增加應用伺服器比較簡單而增加資料庫伺服器則是比較復雜的問題,如果一個站點由多個資料庫支持,架構師需要考慮如何在保證數據一致的情況下,讓多個資料庫分擔壓力。有些解決方案是將資料庫的讀寫分開,使得大多數的查詢sql不經過核心資料庫,而只是訪問資料庫的副本,但事實上,這種方式也只能維護規模不大的網站。對於大型的網站來說,把業務分散到不同的資料庫中,只共享必要的數據,才是合理的提高網站擴展性的解決方案。
其他知識
作為系統架構師,可能還需要對分布式系統,負載均衡,網路安全,數據監控等等各方面都有所了解。不僅僅是了解理論知識,也要對相關的產品和業界進展有一定的認識。比如說做負載均衡最好的產品是那種。目前最常用的備份策略是什麼,有什麼缺點。如何使用緩存,如何做好日誌分析等等。
剛剛談到的是架構師需要掌握的知識,然而,冰凍三尺非一日之寒。這個過程需要我們慢慢的積累。如果你已經進入到公司進行軟體開發,請時刻關注你所開發軟體的性能與可擴展性,而不僅僅局限在功能上,時刻想著任何一個簡單的問題:我開發的模塊如果放在多人並發的環境下會怎樣,慢慢的就會有所心得。如果你還是一個在校學生,不要想著自己離架構師這個職位還很遙遠。要知道,成為架構師的修煉之路是很長的,甚至可以說是終身的,因此早點進入學習狀態,不斷修煉自己。在學校期間學好離散數學,數據結構,操作系統,編譯原理,體系結構,資料庫原理等關鍵課程,並積極尋找機會到外面實習,增長自己的工作經驗。如果有機會去到一些技術主導的公司中工作,就一定不要放棄這種機會,慢慢就會成長起來。最重要的,你會養成關注技術,勤於思考的好習慣。當有一天你發現自己對任何技術難題都可以一眼看到其本質,並能夠將其分解為一個個可輕松解決的模塊,你會由衷的感覺到知識給你帶來的快樂,或許那一天,你已經是一個架構師了。

❾ 程序員往上做是什麼軟體分析師、架構師、工程師有什麼區別

程序員往上做是軟體分析師、架構師這些高級技術人員。要說層級關系軟體分析師、架構師、工程師比程序員高級,這些都是從基礎程序員做起的。


(9)編譯器開發架構師擴展閱讀

對於軟體工程師,不太重視學歷,但並不是對學歷沒有要求,重點關注項目的經驗和學習知識的能力,能否利用軟體工程專業知識來解決問題,根據崗位不同,對軟體工程師的要求也有所不同。

具體能力要根據崗位和自己的興趣愛好選定自己的職業規劃方向,一方面要詳細了解軟體工程師的要求,可以關注企業的招聘信息;一方面自己要貯備通用的知識技能。

可以確定的是軟體工程師的前途在未來的發展依然是不斷升溫的職業,比較需要有技術和良好前景的專業。


參考資料

網路—軟體工程師

網路—程序員

網路—系統架構設計師

網路—系統分析師

❿ 匯編語言編譯器是怎麼編寫的

編譯器自舉!搜索這個關鍵字
程序都是編譯器編譯的。這個是肯定的
至於第一款X語言編譯器是不是直接1010101010自己寫的那就不知道啦

一般開發編譯器的話。有兩條路選擇
1.利用yacc(或者其變種)&lex(詞法分析)-等工具自己生成語法模板
詞法語法都可以使用這些工具自己生成
然後自己編寫生成的中間碼和生成的機器碼就可以了
一般做編譯原理類似試驗都是如此的。許多編譯器也的確是這樣

2.自己寫詞法分析和語法分析。可以參考一些開源的編譯器
lcc-這個是ANSI C99標準的編譯器是開源的
或者nasm,watcom等編譯器到www.sf.net上不少開源的編譯器

總的來說。高級語言編譯器比較難寫
如果想快速寫出一個的話
可以採用第一種做法。利用工具生成語法詞法模板
先寫一個簡單的匯編編譯器比較簡單
開源的有nasm,jwasm(支持masm語法開源的編譯器)
http://www.japheth.de/JWasm.html
fasm(這款編譯器是自舉的.就是自己可以編譯自己),
http://flatassembler.net/

剩下的就是自己做好語言規則關鍵字map
引用高手的話。語言map做好了你的編譯器也做好一半了
剩下的都是機械性的工作了。
生成x86或者arm指令。

優化工作這個很難解釋.根據你所需要的做吧
畢竟可以做出一個無錯,又XX的編譯器已經很難得

你可以選擇使用現有的編譯器開發自己的編譯器
然後等到你的編譯器支持相當數量指令和成熟度的時候
使用自己的語法重新寫一遍編譯器.
這樣你就可以用自己的編譯器開發自己的編譯器了(是不是很邪惡?)

另外舉幾個例子
Delphi的編譯器是C++ Builder開發的。
而C++ Builder的IDE是Delphi開發的
C++ Builder的編譯器是C++ Builder開發的-這個就是編譯器自舉了。。Delphi和C++ Builder共享一個後端化優化器。
Delphi 早期的版本的編譯器是tasm直接編譯的。可見Anders的匯編功力多強悍(Anders也就是後來VJ++,C#,.NET工程的核心架構師.最關鍵的靈魂級人物)

VC++的編譯器是VC++開發的。很明顯這都說明了編譯器自舉
自己開發自己。如果一個編譯器可以做到自己編譯自己。那基本上就可以實現任何功能了。

關於編譯器開發的書籍可以看一下
龍書《編譯原理(第二版)》
虎書《現代編譯原理-C語言描述》
鯨書《高級編譯器設計與實現》
建議從鯨書看起。然後是龍書
再來是虎書--虎書裡面描述了許多現代編譯器(正如其名)技術
例如面向對象啦,優化,垃圾回收等等.
鯨書看完基本上就可以實現一個簡單的Tiny C編譯器了
然後在龍書鞏固,讀一下語言規范,自己看一些開源的匯編編譯器代碼
自己就可以嘗試做一個匯編語言編譯器了.等到技術提高了
在嘗試做一些高級語法識別,參考LCC代碼做一下ANSI C99的
C語言編譯器。再來就看你自己的興趣和領悟度拉
如果想支持C++的話就得要對編譯器做許多方便的研究

類似Java那種跨平台或者Ruby,Python等動態語言
虎書中也有描述。當然看自己功力了

閱讀全文

與編譯器開發架構師相關的資料

熱點內容
鎖定伺服器是什麼意思 瀏覽:375
場景檢測演算法 瀏覽:607
解壓手機軟體觸屏 瀏覽:338
方舟pv怎麼轉伺服器 瀏覽:99
數據挖掘中誤差值演算法函數 瀏覽:118
php開發套件 瀏覽:190
伺服器的spi板是什麼 瀏覽:896
解壓縮全能王中文密碼是什麼 瀏覽:80
javaftp伺服器上傳文件 瀏覽:103
演算法設計中文版pdf 瀏覽:81
視頻壓縮形式怎麼改 瀏覽:368
perl程序員 瀏覽:789
電子表格對比命令 瀏覽:610
php循環輸出數組內容 瀏覽:750
電腦加密能不能強制關掉 瀏覽:616
趣味單人解壓桌游 瀏覽:212
oppo手機谷歌伺服器無法核實什麼 瀏覽:320
軟體怎麼加密華為 瀏覽:222
掃地機怎麼安裝app 瀏覽:319
考研結合特徵值計演算法 瀏覽:516