How to Become a Programmer(程序員如何提升自我修養)譯文

Becoming a programmer is a cumulative process that builds up your skills day after day and year after year, and programming can be fun and rewarding (mentally, spiritually and financially). This guide does not promise to give a magically easy way to becoming a programmer, and the ordering of the steps is not sacred, but you'll get a general outline of how to become a programmer in one of the modern programming fields.javascript

掌握程序員修煉之道,要成爲一名工資待遇很好,有職業前景的程序員,初級編程人員就必須經歷漫長的過程,並且隨着日積月累提升專業技能,編程也會帶來愉悅和回報(精神方面、物質方面、心靈方面)。雖然本文不能保證你輕鬆的邁向程序員隊伍,但會對你的編程領域有所幫助。
步驟:


html

一、Take an introductory course in one (or both) of the following disciplines:java

  • Logic
  • Discrete mathematics

學習瞭解下列的一個(或兩個)入門級學科:
邏輯學
離散數學
 
二、Learn database concepts such as tables, views/queries and procedures. You can use any simple database package to do this, such as:git

瞭解數據庫的概念。可使用任何簡單的數據庫軟件包作到這一點,例如:
程序員

  • MS Access
  • DB V
  • Fox Pro
  • Paradox
  • MySQL is a good database to learn because it’s free, commonly used, and databases are commonly accessed with SQL queries

三、Decide what type of programmer you want to be. Programmers generally fall under one of the following categories:web

  • Web programmer
  • Desktop application programmer
    • Operating system (OS) oriented programmer(tied to a single operating system or set of operating systems)
    • Platform-independent programmer
  • Distributed applications programmer
  • Library/platform/framework/core programmer
  • System programmer
    • Kernel programmer
    • Driver programmer
    • Compiler programmer
  • Programming scientist

須要決定你想要當哪種程序員,程序員通常分爲以下幾種:
 
l Web程序
l 桌面應用程序
1、 面向對象的操做系統程序(依賴於一個單一或複雜的操做系統) 
2、跨平臺程序   

分佈式應用程序
庫/平臺/組件/底層核心程序
系統程序員
1、內核程序員
2、驅動程序員
3、編譯程序員
探究將來編程算法



四、Learn the technologies and programming languages related to your programming field of choice. The following sections break down the tasks for different types of programming.shell

你須要瞭解有關你選擇的編程領域語言以及相關技術。它分解爲不一樣類型的編程任務例如:
 
Method 1 of 6: Web Programming 任務之一: Web 程序

 
一、Know what Web programming entails. Web applications are software components designed to work on top of the internet architecture. This means that the applications are accessed through a web browser software such as Firefox or Internet Explorer. Being built on top of the Internet architecture does not necessarily require an active connection to the internet. It means that Web applications are built on top of standard web technologies such as:數據庫

你須要瞭解什麼是Web編程的延伸技術。Web應用程序由完成特定任務的各類Web組件構成,並經過Web將服務展現給外界,它是典型的瀏覽器/服務器架構的產物。 這就意味着Web應用程序通常藉助IE等瀏覽器來運行。 話又說回來,Web應用程序又有本身獨特的地方,就是它是基於Web的,而不是採用傳統方法運行的。例如:編程

二、Browse many diverse websites to learn about how they usually look. (Right click, then click View Source or press F12.) Look for diversity in the type/content of the website, not the quantity of websites visited. Generally, you will need to visit at least one of each of the following types of websites:

  • Corporate presence sites (commercial corporations, not-for-profit corporate/organizations, governmental organizations)
  • Web indexing engines (search engines, meta search sites, specialized search engines, directories)
  • Data mining sites
  • Personal sites
  • Informational/encyclopedic pages (wikis, data sheets, technical specifications, and manuals listing directories, blogs and journals, news and news agencies sites, yellow pages, etc.)
  • Social sites (social portals, bookmarking sites, note-taking sites)
  • Collaborative sites (this includes other categories mentioned above, such as wikis and blogs)

瀏覽不一樣的網站,以瞭解它們平時的運營狀態。 (右鍵單擊,而後查看源文件或按F12),搜索對比不一樣網站的類型和內容,而不是隻注重網站權重。通常狀況下,你至少須要訪問兩個一樣類型的網站,例如:
 
l 企業網站(盈利機構、非盈利機構、政府組織)
l 網頁搜索引擎(搜索引擎、元搜索引擎、專業的搜索引擎,目錄)
l 數據挖掘網站
l 我的網站
l 信息/百科全書的網頁(維基,數據表,技術規格和手冊列出目錄,博客和雜誌,新聞和新聞機構的網站,黃頁等)
l 社交網站(社交門戶網站,書籤網站,論壇)
l 社會化書籤(包括上面提到的其餘類別,如維基和博客)
 
三、Learn at least one brainstorming technique/method and a software that is used to implement that method. For example: brainstorming diagrams and MS Visio.

學習下列其中至少一個技術或者方法,並且能夠用軟件來實現它。例如:頭腦風暴和微軟圖形制做的軟件 。


四、Get familiar with website structuring. This is creating conceptual web diagrams, site-maps, and navigation structures.

熟悉網站結構。這是創造概念的網絡圖,網站地圖和導航結構。


 
五、Take a crash course on graphics design. Try to learn at least one graphics editing/manipulation software package (optional, but strongly recommended)

參加圖形設計速成班,努力學習圖形編輯或者處理軟件(你能夠選擇只學一個,最好能夠二者都學)
 
六、Learn the basics of the internet infrastructure. This includes getting a basic idea about:

  • Base Web services protocols (HTTP, FTP, SMTP, and POP3 or IMAP4)
  • Web server software (preferably, one for the platform you will be working on mostly)
  • Web browsing software.
  • Email server and client software

瞭解互聯網的基礎。這包括弄懂一個最基本的規則,例如:
 
l 相應的Web服務協議(HTTP, FTP, SMTP, and POP3 or IMAP4)
l Web服務器軟件(最好是一個你將要開展的主要平臺)
l 網絡瀏覽軟件
l 電子郵件服務器和客戶端軟件
 
七、Learn the HTML and CSS languages. You might also want to get the "What You See Is What You Get (WYSIWYG)" software package for editing HTML.

學習HTML和CSS語言。你可能爲了編碼HTML去搞懂「所見即所得」的軟件包。



八、Learn XML and XML related technologies, such as XSL and XPath (optional but recommended).

瞭解XML和XML相關的技術,如XSL和XPath(推薦二者都學習)。


九、Create simple static websites until you are familiar with and comfortable around HTML.

除非你已經熟悉瞭解HTML了,不然你就建立簡單的靜態網站。
 

十、Learn a client-side scripting language. Most users either learn Javascript or VBScript, but some learn Perl and DHTML.

學習客戶端腳本語言。大多數用戶都學習JavaScript或VBScript,但也有一些學Perl和DHTML。
 
十一、Familiarize yourself with the client-side scripting language you learned. Try to reach your potential using only that language. Only go to the next step after you've at least become familiar with your client-side scripting language.

不斷熟悉你學到的客戶端腳本語言。嘗試只使用該語言來激發本身的潛力。在你至少熟悉你的客戶端腳本語言以後,才能夠進行下一步。
 
十二、Learn at least one server-side programming language. If you choose to restrict yourself to one server software, learn one of the programming languages supported by that software. If not, learn at least one programming language on each server software.

至少學習一種服務器端編程語言。要麼侷限於一臺服務器上的軟件,學習由軟件支持的編程語言之一。要麼學習在每一個服務器軟件上的一種以上的編程語言。
 
1三、Create a pilot project for yourself after you finish learning the server-side programming language.

本身學習的服務器端編程語言後,嘗試建立一個試驗項目。
 
1四、Obtain your own website and start experimenting online within your own page.

創建本身的網站,並開始嘗試運營。

 

Method 2 of 6: Desktop Application Programming

方式之二:桌面應用程序


 

1 Know what you're getting into with desktop application programming. Most desktop programmers write code for business solutions, so getting an idea about businesses, their organizational and financial structure will be a big time-saver.
其目的是什麼,大部分是爲了節省行政和財政管理時間,以及解決商業問題編寫代碼。
大部分桌面應用程序員編寫代碼是出於解決商業問題。因此,有一個關於企業的創意,他們的組織和金融結構將可以節省大量的時間。
 


2 Learn about the different computer hardware architectures. An introductory level course in digital circuits design and another in computer architecture is useful; however, some see it as being advanced for a starting point, so reading two or three tutorial articles (such as this one and this one) might suffice. Then you can go back to this step later, after you learn your first programming language.
瞭解不一樣的計算機硬件體系結構,入門級數字電路課程設計和其它課程在計算機體系結構是很是有用的;然而,也有些觀點認爲這是一個比較高級的起點,因此閱讀兩個或三個教程文章可能就足夠了。當你學習你的第一門編輯語言以後,能夠返回來再進行這一步.
 
3 Learn an entry-level (kids') programming language[1]. Don't be shy to learn such a language just because you're older than being called a "kid". These programming languages can ease up the pain in learning your first programming language tremendously. However, this step is optional. It can also be done before the preceding step
首先學習一門初級編程語言,不要由於年齡太大而感到難爲情。它能夠緩解初級菜鳥的痛苦,固然你能夠選擇步驟2與步驟3調換。
 
4 Get an introduction to the procedural, object oriented, and functional programming paradigms.
本文主要介紹面向對象的操做系統程序。
 
5 Take an introductory course in one of the procedural programming languages. No matter what language you choose later to be your language of choice, it will require procedural programming at some level. Also, procedural programming is reported by most programmers to be the easiest to use as a starting point to get the idea of programming in general.
無論未來選擇哪種編程語言,都有必要學習一門初級程序編程。何況,廣泛認爲它就是了解編程的開端。
 
6 Learn at least one advanced modeling technique such as UML or ORM.
瞭解至少一種先進的建模技術,例如UML或ORM。



7 Start writing some small console or console-like applications. You can make use of common small exercises in programming languages books. For this, choose a tool for writing programs in the programming language you are writing in.
開始寫小的主機或者相似於主機的應用程序。能夠參考常見的編程語言書籍,和適合的編程工具。
 


8 Take a more advanced course in your chosen programming language. Make sure you understand the following concepts well and that you can apply them with relative ease before going forward:

  • Inputting and outputting information to users of a program.
  • The logical flow and the execution flow of programs in procedural languages.
  • Declaring, assigning and comparing variables.
  • Branching programming constructs such as if..then..else and select/switch..case.
  • Looping constructs such as while..do, do..while/until, for..next.
  • Your programming language syntax for creating and calling procedures and functions.
  • Data types and manipulating them.
  • User defined data types (records/structs/units) and their use.
  • If your language supports overloading functions, understand it.
  • The memory accessing methods of your language of choice (pointers, peeking, etc.)
  • If your language supports operators overloading, understand it.
  • If your language supports delegates/function pointers, understand it


學習更高級的編程課程,必須瞭解如下的概念,才能夠應用自如:
用戶的輸入和輸出信息
編程語言中的邏輯和方案執行流程
申報、分配、和比較變量
編程語言的分支語句,例如as if..then..else and select/switch..case.
循環結構,例如such as while..do, do..while/until, for..next.
編程語言的語法
數據數據而且重組他們
已經定義的數據類型(記錄/結構/單位)及其使用
若是你的語言支持函數重載,要了解這個。
訪問內存(pointers, peeking等) 
若是你的語言支持操做符重載,要了解這個。
若是你的語言支持委託/函數指針,要了解這個。
 
9 Apply the advanced techniques you've learned.

  • Object-oriented paradigm.


熟練掌握上述技術
面向對象的操做系統程序
 

10 Take an introductory course in at least one more programming language in another programming paradigm. It is recommended to learn one programming language of each paradigm, and most advanced programmers do, however, you usually start with one, work for a while applying your knowledge and practicing it, then learn the other later on, after you already had a real-life experience in programming. Try one of the following language areas:

  • Logic programming paradigm.
  • Functional programming paradigm.

除了本身掌握的,再瞭解一下別的編程語言。一般高級程序員都會這麼作,用本身知識儲備去實踐其餘的技術,這纔是真正的工做編程。嘗試下列其中一個:
邏輯編程範式。 
函數式編程範式。



11 Try to compare the two programming languages you learned so far. Evaluate the strengths and weaknesses of each one. Usually this is done by:

  • Taking simple samples of your early work in the first programming language and re-write it using the second programming language.
  • Creating a new project and try implementing it using both languages. Sometimes, depending on your choice of project and languages, you might not be able to implement the project in one of the languages!
  • Writing a cheat-sheet or summary-table comparisons between similar constructs in the two languages and features unique to each of the languages.
  • Try finding ways to mimic features that is unique to one of the two languages using the other language.

比照一下你目前學習的兩種語言,分析優劣勢。下列爲分析方法:
互換兩種編程語言,去從新寫早期的做品;
使用兩種語言去實現一個新的項目,也許你不會成功;
用備忘錄或者彙總表進行比較兩種語言的功能和結構;
儘可能互相轉化和模仿;
 
 
12 Learn visual programming concepts using one of the languages you learned. Almost all programming languages have versions/libraries that support visual programming and others supporting console or console-like programming. This can be accomplished by:

  • Get an introduction to event-driven programming. Most visual programming relies in some level on events and events handling (using the programming language you choose).
  • Try as much desktop software as you can and understand what the software does. Most software development companies offer beta-testing versions of their products which you can use to test the software. Keep up-to-date on user interface advancements.
  • Read some articles or tutorials on graphical user interfaces.

瞭解可視化編程,幾乎全部的編程語言都支持可視化編程和支持主機或主機類編程版本/數據庫。方法:
簡單介紹一下驅動編程。大部分的可視化編程在必定水平上,依賴於對事件和事件處理(使用你選擇的編程語言)。
瞭解、嘗試桌面軟件。大多數軟件開發企業提供本身的產品,你能夠用它來測試軟件,與時俱進。
閱讀圖形用戶界面的一些文章或教程。
 
 


13 Start applying your knowledge on small software projects you design. Try applying your programming expertise on problems you face in your day-to-day life. For example, write programs that rename files in mass, compares text files visually, copies the names of files in a directory to memory/text file, and things like that. Keep it simple at first.
嘗試小型軟件項目,應用知識去設計和解決生活中面臨的問題。例如:編寫重命名文件的程序;對比文本文件;爲了存儲/文本文件之類的東西,在目錄中拷貝文件。
 


14 Create a virtual graduation project. Complete this to the end, applying the techniques of visual programming you learned so far.
建立一個虛擬的畢業設計。用應用可視化編程的技巧來完成它。
 
 
15 Widen your understanding of the visual framework/library/package you learned before by taking advanced courses, paying extra attention to detail and learning more tips and tricks for your framework from online resources.
學習更高級的課程,來拓寬你的視覺框架/數據庫。掌握更多在線資源的框架的技巧而且要格外注意細節。
 



16 Search for other packages/libraries of visual elements for your programming languages and learn them.
完善視覺因素,掌握所需的數據庫/安裝包。
 
17 Take a course in graphics (not graphics design). It will be very helpful for programmers wanting to write appealing user-interface elements.
學習圖形課程(不是圖形設計)。若是想要吸引人的用戶界面,它很是有用。
 
 
18 Become a games programmer (optional). Game programming is considered, in most of its parts, desktop programming. If you intend to become a games programmer, you will need to learn more about game programming after you finish these steps. A graphics course is a must for game programmers and the second language of choice in the preceding steps should be a logic/functional programming language (preferably Prolog or Lisp).
在大部分地區,遊戲編程被認爲是桌面編程。遊戲程序員須要瞭解更多,例如圖形課程,並且上述步驟中,第二語言應該是一個邏輯/功能的編程語言(最好是rolog或Lisp)。

 

Method 3 of 6: Distributed Applications Programming

方法之三:跨平臺程序

 

1 Tackle distributed applications programming.Distributed application programming is considered by many to be one of the hardest to learn and requires diverse knowledge in computer and communication technologies.
先掌握跨平臺分佈式應用程序開發 。
廣泛認爲本文所陳述的方法是最難的,它須要掌握計算機和通訊技術多樣知識。

2 Take a speed introduction to telephony systems and their hardware. This step is optional. However, it is very useful in understanding network topologies.
接着瞭解它們的通話系統和硬件設施。
建議別忽略這一步驟,由於它能夠幫助瞭解網絡拓撲結構。
 

 
Familiarize yourself with networking hardware architectures and devices such as hubs, switches and routers.
熟悉硬件架構和設備,如集線器,交換機和路由器。
 
 
4 Take a course in networking protocols and essentials. You need a good understanding of the Open Systems Interconnection (OSI) model, Ethernet, IP, TCP, UDP and HTTP before you start programming distributed applications.
瞭解網絡協議和規則。在開始分佈式應用程序開發以前,仔細研究開放系統互連(OSI)模型,以太網、IP、TCP、UDP和HTTP。
 
 


5 Learn the XML language and familiarize yourself with it.
學習瞭解XML語言。
 
6 Start by learning a shell scripting language. For Windows-based programming, that would be any script that works with Windows Scripting Host. For Linux-based programming, Bash scripts and Perl will be sufficient. Javascript is strongly recommended for this in both platforms for the following reasons:

  • It is supported by almost any scripting host in any operating system (Windows Scripting Host supports javascript by default, most Linux distributions has a package for javascript scripting console support).
  • It is considered to be easier to learn by many developers.
  • It has an ALGOL derived syntax which familiarizes you with much more other programming languages when you need to choose a second programming language (C, C++, C#, Java and J# all have ALGOL derived syntax).
  • By learning javascript, you familiarize yourself with client-side scripting of web pages which is a bonus side-effect!

先學習shell腳本語言,它適用於Windows程序。bash和Perl腳本應用於Linux編程,而Javascript 同時兼容上述兩個平臺。緣由:
它在任何腳本主機中,支持任何操做系統(默認狀況下Windows腳本宿主支持JavaScript,大多數Linux發行版都有一個包的javascript腳本控制檯支持)
它被許多開發者認爲更容易學習。 
它有一個ALGOL衍生語法,當須要選擇第二個編程語言時(C,C+ +,C#,Java和J#中已有ALGOL衍生語法),也能夠熟悉更多的其餘編程語言。 
經過學習JavaScript,熟悉反作用網頁的客戶端腳本。
熟悉客戶端的網頁腳本,這是一個額外的反作用
 

 
7 Apply only procedural programming using your scripting language of choice at first. Later, you can use more advanced programming techniques and paradigms according to your scripting language and what it supports. All scripting languages have some procedural programming aspects at some level.
首先,選擇只適用於過程化編程的腳本語言;其次,您能夠根據本身的腳本語言,採用更先進的編程技術和範式。在某必定程度上,全部的腳本語言都遵照過程化編程的理念。


8 Use the scripting language you learned to write scripts that perform communications between machines. Learn what is necessary for doing that. Simple communications will suffice.
用你所學到的腳本語言創建起電腦之間的通訊。 瞭解必需要作的內容,來實現簡單的通訊就足夠了。


9 Make a transfer to a desktop scripting/programming language. Preferably, one that is a multi-paradigm language such as Python. Take a simple introduction to that second language. Java is considered by most programmers to be the language of choice for many reasons. However, C# is gaining momentum fast in this field. Java and C# are preferred for the following reasons:

  • They are object oriented programming languages which shields programmers in large teams from implementation details as they both supports components (units of code, pre-compiled, that perform a certain task and can be used in other programs).
  • They support event-driven programming, as well as OO and procedural programming at some level.
  • The framework that the language is built upon is distributed by nature (in the case of Java).
  • The availability of many ready-made packages that deal with networking, both as open-source code and framework built-in packages; this makes it easier for programmers to build upon the work of others.

編寫轉換到桌面的腳本/編程語言。最好是像Python同樣的多範式語言,如今簡單介紹一下第二語言:雖然通常狀況下首選Java,可是C#也有快速上升的勢頭。 
選擇二者的緣由以下: 
它們是面向對象的編程語言,支持大型團隊的程序員去實現細節,由於它們都支持組件(代碼,預編譯單位,執行必定的任務,能夠在其餘程序中使用);
它們支持驅動編程,以及在必定程度上,面向對象和過程化編程;
該語言是創建在由天然界分佈(在Java中的狀況下)的框架;
該語言框架創建在分佈式特徵上(在Java中的狀況下)
許多現成包處理網絡的實用性,包括asopen源代碼開源代碼和內置包框架,使程序員在其餘人的工做的基礎上更容易操做。
 

10 Concentrate more on the core features of the language, especially those supporting networking. Pay less attention to user-interface elements such as outputting, window design and techniques, and user-interface elements.
多注意語言的核心特徵,尤爲是支持網絡的那些。少關注一些用戶界面元素,例如輸出,窗口的設計和技術。
 
11 Take a course on distributed applications design and architectures. This can be done using books, online tutorials or academic courses. However, understanding the architecture of distributed applications and its concepts is necessary.
參加分佈式應用程序設計和架構的課程,例如書籍,在線教程或學術課程。並且,必須深刻研究。
 
12 Learn about building serviced components and services using your programming language of choice.
用你所學的編程語言,嘗試組建服務。
用你所學的編程語言,嘗試組建服務組件和服務。
 

 
13 Learn one or more of the following technologies. It is recommended that you get at least an introduction to all of them. Most distributed application programmers do not stop at one or two programming languages, but learn at least one programming language on each operating system. That is because if you want your application to be "distributed", you should provide a version of it at least for each major operating system.

深刻研究如下技術,建議至少所有了解一下。大多數分佈式應用程序的程序員不會知足掌握一兩種編程語言,由於每一個操做系統上至少有一種編程語言。若是想要本身的應用程序「分佈各地」,至少爲每一個主要的操做系統提供版本。 
公共對象請求代理體系結構(CORBA) 
簡單對象訪問協議(SOAP) 
異步JavaScript和XML(AJAX) 
分佈式組件對象模型(DCOM) 
NET遠端處理 
XML 網頁服務

 

Method 4 of 6: Library/Platform/Framework/Core Programming

方法之四:庫/平臺/組件/核心程序
1 Know what core programming is. Core programmers are merely advanced programmers who made the transfer from programming applications to programming code units to be used by other programmers.
瞭解核心編程。實際上是高級程序員把應用程序編碼成他人也能夠用的編程代碼。
 


2 Learn a programming language that supports building reusable components/packages, if you have not done so already.
首先你要學習一門支持構建可重組組件的編程語言。



3 Take an advanced course in UML and ORM. Most library developers use one or both of them.
研究UML 和 ORM。大部分的數據開發者都用這兩個。
 

4 Take a course in software engineering.
瞭解軟件工程。
 
 

5 Learn at least modular, component-based, object-oriented, and event-driven programming techniques and concepts. The more programming paradigms and languages you cover, the more successful you become as a library/package programmer.
至少學會模塊化、組件化、面向對象和驅動編程技術和概念。你掌握更多的編程模式和語言,就離成爲優秀的數據庫/包程序員更進了一步。
 


6 Learn more about the different operating systems and programming frameworks supported by these operating systems.
研究不一樣操做系統,以及這些系統支持的編程框架。
 

7 Focus your learning efforts on platform-independent frameworks, programming languages and technologies.
專一於跨平臺的框架努力學習編程語言和技術。
 

8 If the programming languages you learned so far have ANSI/ISO/IEEE/W3C standard versions, master the standards. Try to use standard code whenever possible.
若是學會了包括ANSI / ISO/ IEEE/ W3Cstandard版本的編程語言,而且嚴於標準。能夠嘗試使用標準的代碼。
 

9 Try to mimic simple, already established libraries, especially open-source ones. This is useful during the early phase of becoming a library/package programmer. Start with simple packages like units conversion and intermediate scientific calculations packages. If you are a college student, make use of your non-programming courses by trying to implement their equations and scientific core as libraries.
試着模仿簡單的、已經創建的數據庫,尤爲是開放源碼的。這在成爲數據庫/包程序員的早期階段很是有用。先從簡單的包開始,好比單位轉換、中間的科學計算包。若是你是一名大學生,去嘗試去實現他們的方程和科學核心庫,將你的非編程課程利用起來
 
 

10 Search for and try open-source packages in your field of programming. First download binaries/executables of the package. Try to use it and find its strong and weak points. After you've done that, download the source and try to figure out how it was done. Try to recreate those libraries or parts of them. At first, do that after you've seen the code and later before you see the code. At later phases, try improving those libraries.
在你的編程能力以內,搜索並嘗試開源軟件包。先下載二進制/可執行的文件,使用並分析利弊,而後下載源代碼並試圖找出原理,重建它們的庫或者部分庫。前期階段,在看到代碼的先後能夠這麼作。後期階段,就要就要改善這些庫。

 

11 Learn the different approaches used to distribute and deploy components to programmers.

  • Usually, library/package programmers tend to think recursively and/or iteratively of all problems they are presented with. Try to think of each problem as a collection of smaller problems (a sequence of simpler tasks) or as a repeated process of reducing the problem's scope to smaller scopes and then piling those scopes upon each other.
  • Library/package programmers tend to generalize. That is, when presented with a simple specific problem, they usually think of a more general problem and try to solve that general problem which will automatically solve the smaller one.


瞭解分發和部署組件的不一樣方法。程序員傾向於遞歸而且/或者迭代考慮他們遇到的全部問題。試圖把一種狀況做爲小問題的堆積(更簡單的任務序列)或減小故障的可能範圍,最後堆放無論。而且他們一律而論,也就是說當面對特殊狀況,他們一般會想的很簡單,並期待系統自行解決。

 

Method 5 of 6: System Programming

方法之5:系統編程

1 Understand what system programming entails. System Programmers deal with the science of programming not the specific implementations of it. Do not tie yourself to a specific platform.
瞭解系統編程的真正涵義。它須要你掌握核心科學,而不是具體的細枝末節。不要禁錮本身。
2 Follow the first three steps for Desktop Applications Programmers.
操做桌面應用程序須要按照前三個步驟進行。
3 Take an introductory course in Linear Algebra.
開始學習線性代數。
 
4 Take a course in Calculus.
學習微積分。
 
5 Take a course in Logic and/or Discrete Mathematics.
學習邏輯學或離散代數。
 
6  Introduce yourself to different bare operating systems.
              This can be done by:
              • Getting an idea on how operating systems are installed.
              • Learning how to install different operating systems on one PC (optional, but recommended).
              • Installing more than one operating system. Do not install any helping packages on the systems; instead, use the bare functionalities provided by the operating systems.
              學習不一樣的裸操做系統。作法:

              開始安裝操做系統;

            學習怎麼在PC機上安裝不一樣的操做系統(可選的,但推薦)
            安裝不止一個操做系統,不要安裝任何幫助包,取而代之的是,用操做系統提提供的基礎功能
7 Take a course (or alternatively, read books) on computer hardware architecture.
學習一門計算機硬件體系結構課程
8 Develop an understanding of the different computer hardware platforms.
深刻理解不一樣的計算機硬件平臺。
9 Get an introductory familiarization with the assembly language of the hardware platform/operating system of choice.
   You will later learn the assembly of other platforms/systems.
先選擇熟悉的硬件平臺/操做系統的彙編語言。而後再學習其餘平臺/系統的組裝。
10 Learn the ANSI C and C++ languages, along with the concepts of procedural programming.
編程過程當中,能夠慢慢了解ANSI C和C+ +語言。
 
11 Understand and practice C/C++ standard libraries on the platform of choice.
          Pay particular attention to Standard Template Library (
STL
          ) and maybe Active Template Library (
ATL
            ).
            首先,理解和實踐C / C+ +平臺上的標準庫。要特別注意標準模板庫(STL)和活動模板庫(ATL)。
12 Search online resources, books and courses to get an understanding of the C-flavor of your specific platform.
搜索網上資源、書籍和課程, 搞懂在特定平臺的C-flavor。
13 Practice creating advanced code with C and C++.
實踐用C和C+ +語言建立高級代碼。
 
14 Learn more advanced Assembly.
 瞭解更多先進的裝配。
15 Take a course in operating systems design.
參加操做系統設計的課程。
 
16 Find and read documentations of your specific platform of choice.
            This will be easier if you choose a Unix-based operating system. Understand the system you will be working with later very well.
            查找並閱讀特殊平臺的文檔,最好是基於Unix的操做系統。瞭解你將要用到的系統也不錯。
17 Practice your acquired knowledge.
          First create small system utilities. It is usually useful to:
          • Trying to recreate small tools that are already there on your system.
          • Trying to port utilities available in other operating systems to yours.
          • 練習你學到的知識。首先創建小型的系統工具。對於如下幾點是有用的: 
            重建已經存在你的系統上的小工具。 
            在其餘操做系統上找到可用的端口。
18 Learn languages in the most helpful order.
        This is the only place where the first programming language matters. Learn ANSI C first, not C++, not C#, not Java and not D. Then learn C++.
        • Restricting the first language to C and C alone is because systems programming requires that the programmer be familiar with the following concepts:
          • Real and full compilation of source code.
          • Low-level object output files.
          • Linking binaries.
          • Low-level machine-language/assembly programming. The C language is said to be a disguised/easier to learn assembly by some. It also supports inserting assembly language code in code whenever you please and it is only procedural (like assembly).
        • 學習語言是最有用的。第一種編程語言的出現就在這裏。學習ANSI C最重要,其次是C + +。 
          限制第一語言C,是由於系統編程要求程序員必須熟悉如下概念: 
          源代碼的真實和完整的編譯。 
          低層次的目標輸出文件。 
          連接的二進制文件。 
          低層次的機器語言/彙編語言編程。 C語言被認爲是一種變相的/更容易一些學習彙編。插入代碼彙編語言代碼,它是惟一還支持的程序(如組裝)。

Method 6 of 6: Programming Science

方法之6:編程科學

1 Know what a programming scientist does.
        Programming scientists are very advanced programmers who, instead of working on developing applications, work on developing computing technologies such as encryption, programming languages and data mining algorithms. This level is seldom achieved without academic study and dedication.
        知道一個編程科學家是幹什麼的,編程科學家是很是高級的程序員。他們替代了開發應用程序,開發計算技術例如加密、編程語言和數據挖掘算法。想要達到這個級別,離不開學術研究和奉獻。
2 Accumulate the scientific knowledge equivalent to a four-year degree in computer science.
      This can be done either by:
      • Taking an actual academic degree (which is what usually happens).
      • Getting the courses' outlines for such a degree from one of the modern universities and taking the courses either by self-study or as separate courses. This could be achieved theoretically, but the recommended path is the first.
      • 學習至關於計算機科學四年制的知識:
        一般是取得學士學位;或者從現代大學的程度,自學或者選擇性的報選課程。上述兩種方法理論上都是能夠實現的,可是強烈建議選第一種。
 
3 Decide a field of specialty.
      The more specific, the better. This depends on your preferences. However, here is a list of some of the major topics in computer programming science:
      • Algorithm design (searching, sorting, encryption, decryption and error detection in communications are some examples)
      • Programming languages/compiler design/optimization
      • Artificial intelligence fields (pattern recognition, speech recognition, natural language processing, neural networks)
      • Robotics
      • Scientific programming
      • Supercomputing
      • Computer aided design/modeling (CAD/CAM)
      • Virtual reality
      • Computer graphics (Computer graphics is usually wrongly confused with graphical design or graphical user interface design. Computer graphics is the field of studying how to represent and manipulate graphics in computer systems.)
      • 根據你的喜愛決定專業領域,越具體越好。如下列表是計算機科學編程的主要議題:
        算法設計(搜索,排序,加密,解密和通訊錯誤檢測是一些例子)
        編程語言/編譯器設計/優化
        人工智能領域(圖形識別,語音識別,天然語言處理,神經網絡)
        機器人
        科學規劃
        超級計算機
        計算機輔助設計/建模(CAD / CAM)
        虛擬現實
        計算機圖形(一般被認爲是圖形設計或圖形化的用戶界面設計,但它實際上是研究如何表示和處理圖形的計算機系統領域。)
4 Consider getting a higher academic degree.
        You might wish to pursue a master's degree or a doctorate.
        考慮得到更高的學位,成爲碩士或博士。
5 Learn the technologies and programming languages related to your programming field of choice.
深刻研究選擇編程領域的技術和語言。
相關文章
相關標籤/搜索