程序设计/选择

维基教科书,自由的教学读本

选择编程语言[编辑]

很多人在下定决心要从事程序编写工作的时候会想“我要学哪种语言?”,或者“哪种语言比起其他语言更好?”。实际上,他们更应该想的是“我如何才能成为一个好的程序员?”,或者换种说法,“一个好的程序员需要哪方面的知识和素质?”。

在编程语言的选择上,如果仅是泛泛而谈的话,一种语言对于另外一种语言,一般不会有绝对的优势。但是各种编程语言最初都是为了特定的目的而设计的,这也就是说,你如果要判断一门编程语言优劣的话,一定要根据你所要进行的开发的种类而定。举个例子来讲,如果你的程序工作在dos环境下并且要很多地和硬件交互的话,那么C语言可能会是一种不错的选择,但是假如你现在只想写一个网页,那么你就必须学习HTML了。当然维基百科所使用的php语言也是一种选择。python和java近些年来也非常热门。

对于初学者来讲,一般都希望可以选择一种容易理解的,或者是比较流行的语言进行入门。下面我们从几个方面来对目前的语言作一个大略的比较。

入门问题[编辑]

一个初学者应该如何入门呢?

在这里,我们所说的“初学者”是指那些以前从来没有接触过程序开发或者很少接触程序开发的人。对于一个初学者来讲,可能他们对于编程语言的理解仍然处于非常懵懂的阶段。在这种情况下,如果有人向你推荐从汇编语言开始入门,那么一定不要相信他的话。

虽然目前有各种类型的语言,比如结构化的语言,面向对象的语言,等等。但是如果没有特定的目的而只是想学习程序设计基本理论的话,我们推荐你从一门结构化的高级语言开始入门,比如Pascal或者BASIC

为什么不从更为流行的Java或者功能更为强大的C语言开始入门学习呢?

首先,我们知道,各个语言之间都存在一些相通的元素,比如都有变量和常量的定义,都有一定的程序控制流,大部分的语言都有函数定义,等等。如果你能够熟悉一门语言的这些要素,再去学习其他的语言时候就会事半功倍。

其次,越是功能强大的语言,也就意味着它的复杂度越高。对于一个头脑中只有很少程序开发概念的人来讲,在这些复杂的特性面前,他们往往会感到不知所措:哪里才是应该重点理解的内容呢?看起来仿佛每个特性都很重要,结果很可能是什么都难以深入理解。而且过早的学习一些特性比较多的语言容易使初学者产生挫折感,从而丧失掉继续学习的动力。

所以我们推荐初学者从一些简单的语言开始学习。在能够把握住一些语言中的要素之后,再循序渐进地学习那些功能更强大,复杂度也更高的语言。

当然,世界上没有绝对的事情,并不是每个人都需要从最简单的学起。只要你有足够的智慧和决心,你就可以按照你自己的想法去学习。

如何成为一名好的程序员[编辑]

这是一个很多人关心的问题。实际上并没有标准的答案。

这个问题的关键是,什么样的程序员才是足够“好”?在现实中,我们接触到各种各样的人。什么样的人是一个“好”人呢?可能1000个人会有1000种不同的回答。在程序员的问题上,也是同样的情况。

通常来讲,一个“好”的程序员首先要掌握一门或者很多门的编程语言(否则他可能并不是一个程序员)。并且在开发中,他能够运用所掌握的语言灵活地解决各种问题。

好的程序员应该是善于思考的人,很多人在脑子里想象程序员时会认为他们是编程的机器,但是实际上,写程序并不是一个机械性地活动,而是需要思考,创造的。

好的程序员还应该是一个善于交流,能够融入到开发团队中的一个人。现代软件的开发,已经不再是过去那样仅仅凭借一两个人就可以做到的事情了。在现实中,十几人,几十人甚至上百人的软件开发团队随处可见,所以在衡量一个人是否适合程序开发工作时,往往把“团队协作精神”放在很重要的位置。

好的程序员应该是一个勇于实践,探索和学习,并且能够勇敢地进行自我否定的人。在信息行业,技术更新的脚步越来越快。也许在一夜之间,一场新的技术浪潮就会扑面而来,带来的效应是大量的旧技术被淘汰,这就要求处于这个行业中的人要不断的学习,充实自己。同时不能够守旧,因为技术始终是在向前发展的,它不会停下脚步来等待你,如果你不紧随它的脚步,就只能被时代所抛弃。

如果我们把上述几点作为“好”的程序员的特征的话,那么我们知道,想要成为一名好的程序员,就要善于思考,要具备团队协作精神,同时要不断地学习和进步。此外,还需要敬业,勤奋,等等。

简介:目前比较流行的几种语言[编辑]

在这一小节中,我们将会介绍几种目前比较流行的编程语言。

目前来讲,被使用最多的几种语言应该包括C语言C++Java,以及微软平台下基于.NET的几种语言。

和很多的结构化语言相比,C语言更加接近于硬件底层。这种特性也使得C语言比其他的结构化语言,比如BASIC或者Pascal更加难于学习。C语言的这种特性使得它在很长一段时间内被认为是功能最强大,也是使用最多的高级语言。现在由于软件项目中大量使用面向对象的语言,C语言作为一种结构化的语言使用范围也越来越小,但是在一些特定的领域内,C语言仍然是很好的选择。

在很多人看起来,C语言和C++很相似,而且,C++支持C语言语法。所以如果你会使用C语言,那么用一个C++的编译器编译你所写的ANSI C语言程序,一般都可以顺利通过。但是C++并不只是一个C语言的扩展版本。实际上,在C++和C语言之间存在着一个很大的区别就是面向对象和结构化的思想之间的区别。C++具有几乎全部的面向对象的特征,而C语言则是一种标准的结构化语言。C++在标准化之后迅速成为了程序开发的主流语言。

另外一种非常流行的程序语言是Java。Java的优点之一是它的跨平台特性,即借助于运行于不同平台上的Java虚拟机(JVM),用Java编写的程序可以在多种不同的操作系统甚至硬件平台上运行。这是由于Java编译器并不把程序编译成为可以直接在机器上运行的二进制程序文件,而是编译成“字节码”,在执行Java程序的时候,系统利用Java虚拟机将这种“字节码”翻译成本地机器可以识别运行的可执行代码。这也使得Java程序比起C++或者其他语言编写的程序执行相对要比较慢一点,而且Java程序更容易被反编译。Java的语法和C++具有很多相似的地方,因此,如果你在学习Java之前就已经对C++比较了解,可能会感觉比较容易一些。不过C++有一些特性却是java没有的。

BASIC(比如Visual Basic或者QBasic)的使用也很广泛。由于Visual Basic的易用性,直到今天,它仍然被非常普遍地使用着。Visual Basic.Net是Microsoft为了让Basic能利用.Net的各种特性,对传统的Basic进行改造而产生的,它和传统的Basic却已经有了很大的区别。

我们在前面提到过,由于Basic是最容易学习的语言之一,它常被用来当成学习程序设计的入门语言。

汇编语言在今天已经不再像过去一样被普遍地使用了,但是学习汇编语言会帮助你明白计算机是如何工作的,在你使用高级语言编程时,使用汇编语言的经验也可以让你明白什么样的代码在机器上运行更加高效。尽管如此,如果你不是确实有需要或者有兴趣,我们不推荐你从汇编语言开始学习程序设计。关于计算机体系结构以及如何编写高质量代码的知识你完全可以从相关的书本上得到。

C#. 为了适应.Net的各种特性,Microsoft为它量身定做了一门全新的程序设计语言C#。C#语法同样继承于C, C++, 以及Java,吸收了它们的很多优点,完全面向对象,良好的内存管理,能够充分利用.Net提供的各种特性。C#的标准化工作进行得很好,提交给ECMA,标准号为ECMA-334。C#在很多地方都学习了Java,语法简洁,而在很多细节上设计得很体贴程序员,比如delegate, 继承中类方法的重写,out, ref等关键字。通过非托管的代码,甚至可以直接使用指针等底层特性,直接进行内存操作等。但由于这些细节的设计,也增加了一定的语言复杂度。与Java相比,在跨平台方面也有一定能力,目前开源的Mono项目正努力使.Net能够在不同的操作系统平台上运行,取得了相当的成功。总而言之,C#简单易学,易于使用,而又功能强大,是一门值得学习的新型语言。(小插曲:C#的创始人是Anders Hejlsberg,他也是Delphi的创始人,可能是这个原因,Delphi和C#有很多相似的地方。)
(注:由于我对.Net体系下各种语言不是很熟悉,所以希望熟悉.Net的朋友能够帮助续写一段.Net平台下各种语言的大概介绍)。

概论[编辑]

在本章中,我们将介绍学习程序设计过程中些需要关注的一些问题以及大多数程序语言都具有的一些共有元素。

如果你只希望学习一门特定的语言的话,你可以跳过本章直接阅读你希望学习的那门语言的相关教程,但是我们推荐初学者快速浏览一下本章以获得一个总体的印象。

编程语言[编辑]

程序设计语言根据执行方式的不同,分为三大类:编译型语言、解释型语言、半编译型语言。

编译型语言[编辑]

编译型语言是指将源文件编译成本地执行的二进制文件,执行的就是本地二进制代码,效率非常高,但平台可移植性比较差。比如传统的汇编、C语言等。

解释型语言[编辑]

解释型语言通常称为脚本语言,用这种语言编写的程序不需要进行编译,通过它的解释器就可以直接执行,这种语言往往语法不是非常严格,在不同平台中易于移植,使用灵活,但执行效率较低。比如JavaScript、Perl、TCL/TK等。

半编译型语言[编辑]

半编译型语言则介于二者之间,需要经过编译,但不编译成本地二进制码,而是一种中间代码,独立于CPU,因此具有一定的平台独立性,使用近年来快速发展的JIT技术,执行效率也比较高。比如Java、.Net下的各种语言。由于半编译型语言依靠JIT技术获得巨大成功,很多解释性语言正考虑或者已经开始向半编译型语言转型。

应用模式[编辑]

不同平台上的开发[编辑]

程序开发架构[编辑]

What's New?

作者