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.

掌握程序员修炼之道,要成为一名工资待遇很好,有职业前景的程序员,初级编程人员就必须经历漫长的过程,而且随着日积月累提高专业技能,编程也会带来愉悦和回报(精神方面、物质方面、心灵方面)。虽然本文不能保证你轻松的迈向程序员队伍,但会对你的编程领域有所帮助。
步骤:


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

  • Logic
  • Discrete mathematics

学习了解下列的一个(或两个)入门级学科:
逻辑学
离散数学
 
2、Learn database concepts such as tables, views/queries and procedures. You can use any simple database package to do this, such as:

了解数据库的概念。可以使用任何简单的数据库软件包做到这一点,例如:

  • 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

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

  • 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 桌面应用程序
一、 面向对象的操作系统程序(依赖于一个单一或复杂的操作系统) 
二、跨平台程序   

分布式应用程序
库/平台/组件/底层核心程序
系统程序员
一、内核程序员
二、驱动程序员
三、编译程序员
探究未来编程



4、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.

你需要了解有关你选择的编程领域语言以及相关技术。它分解为不同类型的编程任务例如:
 
Method 1 of 6: Web Programming 任务之一: Web 程序

 
1、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的,而不是采用传统方法运行的。例如:

2、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 社会化书签(包括上面提到的其他类别,如维基和博客)
 
3、Learn at least one brainstorming technique/method and a software that is used to implement that method. For example: brainstorming diagrams and MS Visio.

学习下列其中至少一个技术或者方法,而且可以用软件来实现它。例如:头脑风暴和微软图形制作的软件 。


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

熟悉网站结构。这是创造概念的网络图,网站地图和导航结构。


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

参加图形设计速成班,努力学习图形编辑或者处理软件(你可以选择只学一个,最好可以两者都学)
 
6、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 电子邮件服务器和客户端软件
 
7、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去搞懂“所见即所得”的软件包。



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

了解XML和XML相关的技术,如XSL和XPath(推荐两者都学习)。


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

除非你已经熟悉了解HTML了,否则你就创建简单的静态网站。
 

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

学习客户端脚本语言。大多数用户都学习JavaScript或VBScript,但也有一些学Perl和DHTML。
 
11、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.

不断熟悉你学到的客户端脚本语言。尝试只使用该语言来激发自己的潜力。在你至少熟悉你的客户端脚本语言之后,才可以进行下一步。
 
12、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.

至少学习一种服务器端编程语言。要么局限于一台服务器上的软件,学习由软件支持的编程语言之一。要么学习在每个服务器软件上的一种以上的编程语言。
 
13、Create a pilot project for yourself after you finish learning the server-side programming language.

自己学习的服务器端编程语言后,尝试创建一个试验项目。
 
14、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.
深入研究选择编程领域的技术和语言。
posted @ 2014-08-20 16:30  帽子戏法  阅读(594)  评论(0编辑  收藏  举报
全部 html css js Linux php MySQL seo web git other 联系 管理