如何成为一名程序员?

成为程序员是一个日积月累的过程,须要日复一日年复一年的技能增加。编程自己是有趣的,而且有回报(脑力层面、精神层面、经济层面)。这份指南不能保证你轻松当上程序员。不要神化下面这些步骤,从中你大概能了解在现今编程界如何成为一名程序员。html

 
  步骤
  1. 以38720 1为标题的图片
    1
    学习下列这些学科中一两门引导性课程:
    • 逻辑学
    • 离散数学
     
  2. 2
    学习数据库概念,好比表,视图/查询和进程。你可使用任何简单的数据库包来完成这些,好比:
    • MS Access
    • DB V
    • Fox Pro
    • Paradox
    • MySQL是一个很值得学习的数据库,由于它免费且通用,数据库经常用于SQL查询。
     
  3. 3
    想好你要成为哪一种程序员。一般程序员会是下面某一种:
    • 网络程序员
    • 桌面软件程序员分布式程序设计员
      • 操做系统程序员(有单系统,也有多系统)
      • 独立平台程序员
    • 库/平台/框架/核心程序员
    • 系统程序员编程科学家
      • 内核程序员
      • 驱动程序员
      • 编译程序员
     
  4. 以38720 4为标题的图片
    4
    了解你的编程领域内相关技术和编程语言。下面的部分详细给出了成为不一样类型程序员所需的步骤。
     
     
 
方法1

网络编程

  1. 以38720 5为标题的图片
    1
    了解网络编程的含义。网络应用是指设计在网络结构顶层的软件部分。这就意味着这些应用是经过诸如火狐或IE之类的浏览器来处理的。架构于网络结构的顶层并不必定要链接到网络。这就是说网络应用创建在以下标准网络技术的顶层:
    • HTTP
    • FTP
    • POP3
    • SMTP
    • TCP
    • IP协议
    • HTML
    • XML
    • Coldfusion
    • ASP
    • JSP
    • PHP
    • ASP.NET
     
  2. 2
    浏览不一样的网站,了解它们的外观。(右击,选择“查看源”或按F12。)寻找网站类型/内容的多样性,而非数量。一般你须要访问如下网站类型中至少一种:
    • 团体网站(商业公司,非营利机构/组织,政府组织)
    • 网络索引引擎(搜索引擎,meta搜索网站,专业化搜索引擎,目录)
    • 数据挖掘网站
    • 我的网站
    • 信息/百科全书式网页(维基,数据单,技术规格,人工列表目录,博客和日志,新闻和新闻机构网站,黄页,等等。)
    • 社交网站(社交门户,书签网站,记录笔记网站)
    • 合做网站(这包含了上面说起的目录,好比维基和博客)
     
  3. 3
    学习至少一种头脑风暴技术/方法,并学习一个用来实现头脑风暴的软件。例如:头脑风暴图和微软Visio。
     
  4. 以38720 8为标题的图片
    4
    熟悉网站结构。指的是建立概念化网络范式、网络地图和导航结构。
     
  5. 以38720 9为标题的图片
    5
    赶忙学一门图形设计的课程。尽可能学习至少一个图形编辑/操做软件包(不是必须的,但强烈推荐)
     
  6. 6
    了解网络下部构造的基本状况。包括了解如下:
    • 基本网络服务协议(HTTP,FTP, SMTP和POP3或IMAP4)
    • 网络服务器软件(最好其中一个就是你之后主要工做的平台)
    • 网络浏览软件
    • 邮件服务器和客户端软件
     
  7. 7
    学习HTML和CSS语言。或许你还想要“所见即所得”软件包来编辑HTML。
     
  8. 以38720 12为标题的图片
    8
    学习XML及其相关技术,好比XSL和XPath(不是必需,仅做推荐)。
     
  9. 以38720 13为标题的图片
    9
    先创建简单的静态网站,直至你熟悉并习惯HTML语言。
     
  10. 以38720 14为标题的图片
    10
    学习客户端脚本语言。多数人要么学Java,要么学VB,但也有一些人学习Perl和DHTML。
     
  11. 11
    熟悉你所学的客户端脚本语言。潜意识里提醒本身只用你学的那个语言。中国历史故事,只有在你熟悉你的客户端脚本语言以后才能进入下个步骤。
     
  12. 12
    学习至少一种服务器端脚本语言。若是你只用一种服务器软件,那就学其中一种编程语言。不然,你得每一个服务器软件都学至少一种编程语言。
     
  13. 13
    学完服务器端编程语言以后就开始建立一个试验项目。
     
  14. 14
    得到你的网站,开始用你本身的网页实验。
     
 
方法2

桌面软件编程

  1. 以38720 19为标题的图片
    1
    弄清楚桌面软件编程是怎么回事。多数桌面软件程序员都是编写商务须要的代码,WIN2008系统安装IIS7配过ASP后打开ASP网站为500错误的解决办法,因此好好了解一下商业及其组织和经济结构将对节省时间、提升效率大有裨益。
     
  2. 以38720 20为标题的图片
    2
    了解不一样的电脑硬件结构。看看数字电路设计和电脑结构的入门级课程,可是也有人认为这对于刚起步来讲太超前了,因此看两三篇说明的文章(好比 这一篇 和 这一篇)就够了。学完第一种编程语言后你能够再返回这个步骤。
     
  3. 3
    学习一种入门级(小孩子学的那种)编程语言。[1]不要由于你不是个小孩子就很差意思去学。这些入门级语言能大大减轻你正式学习第一门编程语言时的痛苦和压力。然而这一步也不是必须的。你也能够在上一步以前完成。
     
  4. 4
    学习程序化、面向对象、函数设序设计规范的入门。
     
  5. 5
    学习一种程序化程式设计语言的入门课程。不管你之后选择何种编程语言,在某种程度上它都要求程序化程式设计。此外,据多数程序员反映,程序化程式设计总的来讲是了解编程的一个很好的切入点。
     
  6. 6
    学习至少一种高级建模技术,好比UML 或ORM。
     
  7. 以38720 25为标题的图片
    7
    开始编写一些小的主控台应用程式或相似的应用程式。你能够利用编程书中的常见小练习。选择一个工具,用你所学的编程语言编写程序。
     
  8. 以38720 26为标题的图片
    8
    学习一门你选择的编程语言的更高级课程。确保进展以前先理解下列概念,并能熟练运用。
    • 对程序用户输入输出信息。
    • 程式化设计语言写成的程序中的逻辑流程和执行流程。
    • 声明、分配和比较变量
    • 编程结构分支,好比if..then..else 和 select/switch..case.
    • 循环结构,好比while..do, do..while/until, for..next.
    • 建立、调用程序与函数的编程句法
    • 数据类型及如何操控
    • 用户定义数据类型(records/structs/units)及其使用
    • 若是你的语言支持超载函数,理解它。
    • 你选择的语言的内存处理方式(指针,变量窥视,等等。)
    • 若是你的语言支持运营商超载,理解它。
    • 若是你的语言支持delegates/函数指针,理解它。
     
  9. 9
    应用你所学的高级技能
    • 面向对象的规范
     
  10. 以38720 28为标题的图片
    10
    至少再学习一门编程语言规范的入门课程。推荐学习每种范式的编程语言,多数高级程序员确实是这么作的,然而,一般你开始时只学一种,应用所学知识训练了一段时间,得到了编程的鲜活经验,而后接着学习另外一种。试试下面的语言:
    • 逻辑编程范式
    • 函数编程范式
     
  11. 以38720 29为标题的图片
    11
    试着比较你所学的两门编程语言。评估各自利弊。一般可按如下方法完成
    • 拿出你在学习第一门编程语言时编写的简单范例,如今用第二门语言从新编写。
    • 建立一个工程,尽可能用上两种语言完成它。有时取决于你选择的工程和语言,你可能仅用一门语言还没法完成这个工程呢!
    • 写一份两种语言之间类似结构和独特之处对比的速查表或一览表。
    • 尽可能使用另外一门语言找到模仿这两门语言中独特之处的办法。
     
  12. 12
    利用你学过的一种语言来学习可视化编程概念。几乎全部的编程语言都具备支持可视化编程和其余支持控制台或相似控制台编程的版本/库。同时进行的包括:
    • 初步了解事件驱动编程。在某种程度上,多数可视化编程依赖事件及事件处理(用上你选择的语言)。
    • 尽量多的尝试桌面软件,理解软件是作什么的。多数软件开发公司会提供产品的测试版,你能够拿来测试软件。在完善用户界面方面保持更新。
    • 阅读关于图形用户界面的文章或教程。
     
  13. 以38720 31为标题的图片
    13
    开始把你所学的知识运用到你设计的软件小工程中。尽可能把你的编程专业知识运用到你平常生活中的问题上。好比,编写程序,批量重命名文件,视觉上比较文本文件,复制目录里的文件名到内存/文本文件之类的东西。刚开始简单一点。
     
  14. 以38720 32为标题的图片
    14
    建立一个虚拟的“毕业工程”。把这个放到最后完成,用上你到目前为止学到的可视化编程技术。
     
  15. 15
    经过学习更高级的课程、更加注意细节以及在网上学习搭建架构的技巧,来加深对你学过的可视化架构/库/包的理解。
     
  16. 以38720 34为标题的图片
    16
    搜索其余含可视化元素的包/库并学习它们。
     
  17. 17
    学习图形学课程(而非图形设计)。对于想要写出吸引人的用户界面元素的程序员来讲,这将大有裨益。
     
  18. 18
    成为游戏程序员(不是必须的)。很大程度上游戏编程是被看成桌面编程的。若是你想成为游戏程序员,完成这些步骤后你须要进一步学习游戏编程。对于游戏程序员而言,图形学课程是必须的,后续步骤中第二门语言应该选择逻辑/函数编程语言(最好是Prolog或Lisp)。
     
 
方法3

分布式程序设计

  1. 以38720 37为标题的图片
    1
    处理分布式应用编程。分布式应用编程被许多人认为是最难学的一种,它要求计算机和通讯技术中的不一样知识。
     
  2. 2
    快速了解通讯系统及其硬件。这个步骤不是必须的,可是对于理解网络拓扑结构颇有用。
     
  3. 以38720 39为标题的图片
    3
    熟悉网络硬件结构和设备,好比集线器、接线台和路由器。
     
  4. 4
    学习网络协议的课程。在你开始分布式应用编程以前,你须要好好理解“开放系统互联 (OSI) ”模型、以太、IP、TCP、UDP和HTTP 。
     
  5. 以38720 41为标题的图片
    5
    学习XML 语言,并熟悉它。
     
  6. 6
    开始学习一门shell脚本语言。对基于Windows的编程,能够是任何能与Windows脚本宿主兼容的脚本。对基于Linux的编程,Bash脚本和 Perl就够了。对这两个平台都强烈推荐Java,缘由以下:
    • 几乎全部操做系统的都支持脚本宿主(Windows 脚本宿主默认支持java ,大多数Linux发行版都有支持java脚本控制的包)。
    • 许多开发者认为它很容易学。
    • 当你须要学第二门编程语言(C,C++,C#,Java和J#都有ALGOL开源句法)时,它拥有的ALGLO开源句法就能使你熟悉更多编程语言
    • 经过学习java,你会熟悉网页的客户端脚本,这可谓一大福利!
     
  7. 以38720 43为标题的图片
    7
    开始时用上你学的脚本知识,只运用程序化程式设计。以后,根据你的脚本语言和它所支持的,你能够用上更高级的编程技巧和范式。全部的脚本语言在某种程度上都有程序化程式设计的一些方面。
     
  8. 以38720 44为标题的图片
    8
    使用你所学的脚本语言,写出实现机器之间通讯的脚本。学习完成这个所必需的东西。简单的通讯就足够了。
     
  9. 以38720 45为标题的图片
    9
    转移到桌面脚本/编程语言。一个比较好的是多范式语言,好比Python。简单了解第二门语言。有许多理由让多数程序员选择java。然而,在这个领域内C#正在得到多数优点。Java和C#被青睐的缘由以下:
    • 它们是面向对象的编程语言,使大量程序员免遭实现细节之苦,由于它们都支持组成部分(代码单元、预编译,它们能够执行特定任务,并被用到其余程序中)。
    • 它们支持事件驱动编程,在某种程度上还支持OO和程式化程序设计。
    • 创建语言的架构按属性分布(好比Java)。
    • 有许多现成的包来处理。社交网络同时做为开源代码和架构内置包,这使得程序员继续其余人工做更加容易。
     
  10. 以38720 46为标题的图片
    10
    专一于语言的核心部分,尤为hi那些支持网络。少注意用户界面元素,好比输出,窗口设计和技术等。
     
  11. 11
    学习分布式应用设计与结构的课程。能够经过书本、网上教程或学术课程来完成。然而,十分有必要理解分布式应用的结构及其概念。
     
  12. 12
    使用你所学的编程语言来了解服务部分建构和服务。
     
  13. 以38720 49为标题的图片
    13
    学习以下技术中一种或更多。推荐你每一种都了解如下。多数分布式应用程序员不会止于一两门编程语言,他们会每一个操做系统各学至少一种语言。这是由于若是你但愿你的应用“分布式”,你应该至少为每一个主要的操做系统各提供一个版本。
    • 公共对象访问代理体系结构(CORBA)
    • 简单对象访问协议(SOAP)
    • 异步JavaScript和XML(AJAX)
    • 分布式组建对象模型(DCOM)
    • .NET远程处理
    • XML 网络服务
     
 
方法4

库/平台/框架/核心编程

  1. 1
    了解什么是核心编程。核心程序员几乎都是高级程序员,已经从编写应用转变为给其余程序员编写代码汇编。
     
  2. 以38720 51为标题的图片
    2
    学习一门支持建立可重复使用内容/包的编程语言,若是你还没学过的话。
     
  3. 以38720 52为标题的图片
    3
    学习一门UML 和ORM的高级课程。多数库开发者使用其中一种,或两种都用。
     
  4. 4
    学习软件工程的课程。
     
  5. 5
    学习至少一个模块,基于内容的、面对对象的和 事件驱动编程技术和概念。你所学覆盖越多编程范式和语言,你就能成为越成功的库/包程序员。
     
  6. 以38720 55为标题的图片
    6
    进一步了解不一样的操做系统及其支持的编程架构。
     
  7. 7
    集中学习独立平台架构、编程语言和技术。
     
  8. 以38720 57为标题的图片
    8
    若是到目前为止你学习的编程语言具备ANSI/ISO/EEE/W3C标准版本,那么掌握这些标准。不管什么时候尽量使用标准代码。
     
  9. 9
    尝试模拟简单的、已经创建的库,尤为是开源的库。这在成为库/包程序员的早期阶段十分有用。从简单的包开始,好比单位转换和中间科学计算包。若是你是大学生,利用你的非编程课程,尝试把这些课程的方程式与核心科学用做库。
     
  10. 10
    在你的编程领域内寻找开源的包。首先下载包的二进制/可执行文件。尽可能去用,并发现它的利弊。以后,下载源,尽可能弄明白它是怎么完成的。尝试再创造这些库或其部分。刚开始,看完代码再作;以后,先作再看代码。后期阶段,尝试完善那些库。
     
  11. 以38720 60为标题的图片
    11
    学习不一样方法。给程序员分发、配送内容。
    • 一般,库/包程序员倾向于以递归和/或迭代的思想来思考他们面临的全部问题 。尽可能把每一个问题看成一个小问题的汇编(一系列更小的任务)或一个重复的不断缩小问题范围直至把这些更小的范围彼此堆到一块儿的处理过程去思考。
    • 库/包程序员倾向于归纳化。也就是说,当面临一个特定的简单的问题时,他们一般会想到一个更为归纳的问题,并努力解决这个更归纳的问题,如此,小问题便不攻自破。
     
 

 

方法5

系统编程

  1. 1
    了解系统编程的定义。系统编程处理的是编程的“科学”,而不是具体的编程实现。不要把你本身栓到特定平台上。
     
  2. 2
    跟着“桌面应用程序员”的前三个步骤。
     
  3. 以38720 63为标题的图片
    3
    学习线性代数的入门课程。
     
  4. 以38720 64为标题的图片
    4
    学习微积分课程。
     
  5. 以38720 65为标题的图片
    5
    学习逻辑学和/或离散数学课程。
     
  6. 以38720 66为标题的图片
    6
    了解不一样的“准操做系统”。这能够经过如下途径完成:
    • 了解操做系统是如何安装的。
    • 了解在一台PC上如何安装不一样的操做系统(不是必须的,但做为推荐)
    • 安装不止一种操做系统。不要在系统中安装任何辅助包,相反,仅利用操做系统自己提供的函数。
     
  7. 7
    学习计算机硬件结构的课程(或者做为替代,看看书)。
     
  8. 8
    深刻理解不一样的计算机硬件平台。
     
  9. 9
    初步熟悉你所选择的硬件平台/操做系统的汇编语言。稍后你会学习其余平台/系统的汇编。
     
  10. 10
    学习ANSI C 和 C++ 语言,还有程序化程式设计的一些概念。
     
  11. 以38720 71为标题的图片
    11
    在你选择的平台上理解并实践C/C++标准库。尤为注意标准模板库(STL)和活动模板库(ATL)。
     
  12. 12
    搜索网络资源、书籍和课程来理解你的平台独特的C风格。
     
  13. 13
    用C/C++练习编写高级代码。
     
  14. 以38720 74为标题的图片
    14
    学习更高级的Assembly。
     
  15. 15
    学习操做系统设计的课程。
     
  16. 以38720 76为标题的图片
    16
    寻找并阅读你所选择的平台的相关文章。若是你选的是基于Unix的操做系统就会容易得多。充分理解你从此将要用来工做的系统。
     
  17. 17
    练习你已经掌握的知识。首先建立小的系统软件。以下一般颇有用:
    • 试着重创你系统中已有的小工具。
    • 试着把其余系统中的应用移植到你的系统里。
     
  18. 以38720 78为标题的图片
    18
    以最有益的顺序学习语言。此处是惟一强调第一门编程语言的地方。首先学习ANSI C 而不是 C++、C#、Java 、D。而后学习 C++。
    • 限制你第一门语言仅为C是由于系统编程要求程序员熟悉以下概念:
      • 源代码真实、彻底的编译
      • 低级对象输出文件
      • 连接二进制
      • 低级机器语言/汇编编程。C语言被某些人认为是伪饰过的/更容易学习的汇编语言。只要你愿意,它还支持插入汇编语言代码,而且它只是程序化的(像汇编)。
     
 

 

方法6

编程科学

  1. 1
    了解编程科学家是作什么的。编程科学家是十分高级的程序员,他们不开发程序,但他们研究计算科学,好比密码学、编程语言和数据挖掘算法。没有深刻的学术研究是很难达到这个水准的。
     
  2. 2
    累积和四年制计算机科学学历同等多的科学知识。可经过以下其中一种完成:
    • 得到真实的学术学历(这也是一般状况)。
    • 从现代大学中得到该学历要求的课程大纲,自学课程或 分开一门门学。理论上这样作也能够,但仍是推荐第一种作法。
     
  3. 以38720 81为标题的图片
    3
    选择特定的领域。越具体越好。这取决于你的偏好。可是这里给出计算机编程领域中一些主要的课题:
    • 算法设计(例如搜索、分类、密码、解码、错误检测 等)
    • 编程语言/编译器设计/最优化
    • 人工智能领域(模式识别,语音识别,天然语言处理,神经网络)
    • 机器人技术
    • 科学编程
    • 超级计算
    • 计算机辅助设计/模式(CAD/CAM)
    • 虚拟现实
    • 计算机图形学(计算机图形学一般和图形设计或图形用户界面设计混淆,计算机图形学是研究如何表示和操控计算机系统中的图形的领域)
     
  4. 以38720 82为标题的图片
    4
    考虑获取更高级的学历。或许你想追求硕士学历或博士学历。
     
  5. 5
    了解你选择的编程领域的相关技术和编程语言。
     
 

 

  • 无论你想尝试哪一种编程,无论你想达到何种水平,考虑去学校或本地社区大学上课。不要被诸如“计算机科学”一类的术语吓到。你参加的任何不须要预备课程的课程都应该集中教一些编程的基础知识。在上课以前先咨询一下老师或客服,确保这门课是你想要的,像“计算机文化”这样的课颇有可能更多地集中在教你更熟悉办公应用之类。
相关文章
相关标签/搜索