2008年10月30日星期四

编程学习初体验(3. 语言的选择)

编程语言的选择应该说是学习编程时碰到的第一个问题,并且这个问题会在今后相当长的一段时期(一年到几年)内一直萦绕在你身上。根据我自己的认识, 对于这个问题,没有人能给你一个确定的答案,但是你会发现身边的人一直在为这个问题在论战。至于我, 我也同样没办法给出一个放之四海而皆准的答案,我能说的只有三点:
1. 每种现存的语言都有其存在的合理性;
2. 没有任何一种语言是能够包打天下的;
3. 编程入门应该根据自己以后的发展需要来选择。

就第一点合理性而言,是很显而易见的。 实际上, 在这个世界上曾经出现过的编程语言的种类远远超过目前依然存在的数目。语言本身就在经历一个优胜劣汰的过程。 剩下的语言本身就具有其不可替代性,因此具有其一大批使用者和信众。因此武断地认定某种广为流行的语言是否时髦是没有意义的。
其次, 从我自己对各种语言的尝试经历来看,的确是没有任何一种语言能够一统江湖的,现在没有,以后也没有。 我想,其原因在于不同的语言的设计和与之想对应的应用领域是相关的。例如汇编语言多用于硬件相关的开发, C语言和汇编语言多用于操作系统底层相关的开发以及C++,Java和C#用于应用程序开发三个不同的领域。 这三个不同应用领域有着不同特征和对语言表达能力的相应要求,因此是没办法互换的。 硬件相关的开发注重的是性能和实时性,对于逻辑的复杂性没有太大要求;操作系统的开发既需要考虑硬件问题,有需要对上层应用程序提供一个统一,方便和有效的接口界面;而应用程序的开发往往需要包含复杂的逻辑和体系结构。 因此,如果你说java比汇编好,因为java语言清晰快捷;或是汇编语言比java好,因为汇编语言是所有语言的基础支持,那么你说的都是正确的,但是都是没有意义的。因为谁也不可能取代谁,他们之间的关系是:各司其职;而非谁吃掉谁。
最后回到语言的选择这个问题上,初学入门应该学什么语言。我觉得总体而言,不同领域的初学者应该选择不同的语言。电子工程专业出身的人,应该以汇编和C语言的学习作为入门,因为这两个语言和今后的工作最为密切相关,也是以后赚钱的“金刚钻”的所在。而计算机专业出身的初学者就相对复杂一些,如果是学系统结构专业的,应该主攻C和C++语言。如果是学习软件工程的,则Java和C#是不二之选。 当然,这这里我不讨论个人兴趣问题,学电子的对java有兴趣也没什么错。

2008年10月24日星期五

编程学习初体验(2. 上路)

新手上路,最重要的一点是对基础掌握的扎实。这包括两个重点:基础和扎实。基础指的是编程中最核心的知识:从我个人的认识来看,基础主要包括程序语言本身,数据结构和算法三者。扎实指得是学习的态度和途径;扎实是和基础相应的,打基础如果抛不开浮躁,以后就不要指望能在这行有所成就。

基本态度

我说讲的编程开发是指职业化的程序员的技能,不包括其他行业比如统计和金融行业所需要的非专业编程能力。既然是作为职业,那么仅仅对编程有兴趣和热情是远远不够的。编程是一个永远需要学习的行当,需要付出大量的脑力劳动,而且往往极其枯燥。 因此刻苦和毅力是第一位的。
和其他所有技能一样,扎实的基本功是学习过程中唯一的要求。技术在不断发展,现在的IT和10年前我刚了解这行已经完全不同。但是编程的核心内容没有变,对编程语言的掌握,算法设计能力,对程序设计框架的熟练永远是不可丢弃的。 到现在,我依然庆幸当年对pascal语言和数据结构的学习的扎实。这部分基础让我现在受益匪浅。当年我能用pascal语言在合起书本的情况下把数据结构里面所有算法凭记忆全部写出来;虽然现在pascal早已过时, java和c#成为主流,但是无论什么语言,我只需要花2天时间熟悉一下语法,就能上手立刻开工。无论用java, C#, Python, perl, 核心的思想还是没有多少变化,所以在入门的时候多些耐心,多些琢磨,这些精力和时间绝对是值得付出的。 当然,仅仅有这些入门的知识是完全不够的,很多新的东西需要不断去学习,但是第一步是以后所有其他部分的根本。

2008年10月23日星期四

编程学习初体验(1. 开篇)

玩编程已经有快十年了,从linux到windows,从c, c++, perl, shell, java, python基本上都抓来玩过。但是由于一直在学校的缘故,所以每样都玩的不是很精通。唯有在linux下c语言我玩的时间比较长,用了大概6年的时间,也开发了几个项目。但是老实说,自己一直是处于开发的初级阶段,对比与自己在业界的朋友的功力,实在是自叹不如。原因我也说了,还是因为自己在学校而非企业,老板都是只会做学问而不懂实际开发的主,想到什么就让你做什么,怎么谈得上让你“术业有专攻”呢。虽然十年下来,自己练成了废人一个,但是还是有不少关于编程的入门体会可以与大家一起分享的。

开博

开博测试贴