前言
当我写这篇文章的时候,2012年已经开始10天了,貌似世界依然是静悄悄的,没有玛雅人预言的那些大风大浪。
然而,即使很平静,也是对于整体的形态而言,事实上世界几乎每分每秒都在发生变化。而对这个世界影响最大的行业,就是互联网。
是谁在改变互联网?
神?执政者?企业家?
都不是,而是在背后默默无闻的程序员。
好吧,让我们走进程序的世界。
程序员是干什么的?
曾几何时,是否简单的以为程序员就是做软件做网站的?而你所谓的软件就是桌面上那些实实在在能双击的软件?像qq、酷狗音乐、魔兽争霸这样?
那么,可曾想过卫星是怎么发射的?
或者往小一点说自己是否留意过眼前的电视和手里的mp3是怎么跑的?
如果你刚进入程序的世界并继续学习那我相信不久以后你会发现程序员的能力会比曾经的你所能想象得到的要强大得多。
那么下一段话希望能让你对程序员有个新的印象。
我们知道,网络使人类进入了信息时代,信息时代的发展速度远远在工业时期之上。然而信息在蒸汽机面前是多么抽象,因为打通世界使信息能够传播的网络是个虚拟的世界,它没有实体。程序员们丰富和完善了这个虚拟世界,消除了空间上的障碍。也许现在的你已经不能体会到当人类第一次发送邮件给远方的亲人时那种激动的心情?但你必须知道是程序员为此做出了巨大的贡献.。
如今的世界,各种电子产品已经融入了人们的生活,例如计算机、电视、冰箱、空调、摄像机、MP3、还有银行里屡次让你心情低落的自动取款机。也许在此之前你一直都以为只有计算机里那些虚拟的东西才是程序员的作品,那么从现在开始你要认识到,几乎所有需要用电的设备都包含了一套由程序员设计的系统,事实上这些电子产品的本质也是计算机。
通过以上的阐述我想表达的是:程序员在操纵着一切与电相关的产品。
其实上面我这么说范围有些大了,那么我们说点贴切一点的,程序员通常做什么呢?
例如,做一个网页,例如写一个手机应用,例如做一个人们上班用的那个打卡系统。
当然厉害的你也可以去做发射卫星的工作。
我们也可以明确的说,改变世界的不是神,执政者也只是参与了世界的改变工作,只不过他们的影响比普通人大了些。而我们正处于信息科技高速发展的时代,在这个时代程序员的影响力要高于其它许多职业。有志者都希望在有生之年能为世界做点什么或留下点什么,刚好世界上所有人都能改变世界本身,每个人改变一点点,世界的整体就往前推进一点点,如果你希望自己能比别人有更大的影响力,那么请通过自己的努力成为一名优秀的程序员,然后为世界的正面改变多贡献一行代码。
如果你对此感兴趣,如果你已经做好准备,那么就进入程序的世界吧!
在开始学习编程之前要说明一些很重要的问题。
一、关于本教程的说明
1.本教程首先从一门计算机语言c语言开始展开,逐渐扩展。讲c语言的时候完全是写给零基础的人看的,对学过编程的人可能会觉得特别啰嗦,c语言之后才开始加大文章每个句子的含金量。但初学者必须知道打好基础非常重要。
2.本教程尽量写得浅显易懂。任何一个编程的人在初学的时候经常会遇到很多没听过的概念,例如一开始讲输入输出语句的时候就会提什么它们是函数,是函数就要声明,所以要引入<indio.h>头文件。但对于一个初学的人不知道什么是函数什么是声明什么是头文件。也许有的人会说,那看到什么就去翻资料不就行了吗?事实上这样是不可取的。例如,你去查资料什么是函数,那么又会引出参数的概念。去查声明,又会引出访问权限的概念。去查头文件,又会引出预编译的概念。难道再去查参数、访问权限、预编译的概念吗?好吧,例如你又去查预编译的概念,又会引出编译过程的问题,查编译过程又会引出二进制的问题等等,这样下去是没完没了的。而且在你学习一个新知识而涉及到许多没学过的知识时,也就是说要用一点旧东西去理解很多新东西时学习效率其实是很低的。所以更好的学习方式是先把一个模块学完,我很喜欢王爽老师的一本书叫《汇编语言》所说的那样,以后用到的知识以后再说。其实这是更高效的学习方式,例如先把c语言完整的学完,而且我相信先学c语言是最好的选择。所以本教程是从c语言开始讲,而且是除非必要,否则不会提及还没学到的东西,即使真的要提到,也会尽量使读者能在当前所学的东西的基础上理解它。事实上,适当的有一些疑惑是有好处的,即使你不能看懂一个没学过的东西是什么,但你至少混个脸熟,相信我,在你以后的学习过程中会经常出现恍然大悟的感觉,例如看到某个地方时,突然眼前一亮,茅塞顿开:“哦,原来这样就是xx啊!”。所以当你出现了看不懂的情况时,请继续往下看。
3.本教程也许有些东西不是原创,例如某句话或某个案例在某本书或别人的博文上出现过。如果我觉得好,我会直接复制过来,而不提及原作者。否则读者看着看着突然又出现此案例来自xxx的书《xx》或xx的博文地址是xx.com,那会影响心情。
二、怎么学编程
1.不需要看很多的书,而且要选权威的书,有些书反而误人子弟,选本好书,然后认真的看。
2.在你什么都不会的时候不要去论坛(最起码要学完了c语言),因为网友不知道你学过什么,回答你时经常会提到许多你没学过的东西(特别是遇到一些喜欢卖弄的人)。这样你会出现别人说什么你都不明白的情况。而且别人说多了你还不明白,别人的回帖就是“兰州烧饼”之类的文字了。这样对你自己的自信心和心情都不好。
3.不需要学很多语言,更不要同时学很多语言。每种语言虽然不同,但是编程思想是一致的,这个当你学过两种语言就能体会到。所以当你精通了一种语言以后再学新的语言其实是非常快的。另外,同时学多种语言的话反而会因语法混乱而使效率降低。
4.一定要养成规范的编码,规范非常重要,如果你的代码不规范那么可读性就差。要知道以后通常你的代码写完需要你团队的其他成员过目的,如果队友看得头疼不仅影响团队进度,对你自己来说也会是一件很不愉快的事情。如果你学的第一门语言是c语言,那么可以用vc++来写,因为vc++在智能规范方面做得很差,需要人工自己规范,这样你能一开始就自己养成规范习惯。如果学的第一门语言不是c语言,例如是java,那建议一开始用记事本来编程。因为java的通常是用eclipse来开发。eclipse这个软件的智能规范做得很好了,人们就没在一开始养成规范编程的习惯了。当规范编程的重要性在你脑中根深蒂固以后你再去用那些高级的开发软件编程(注意:智能只是快捷,不代表百分之百准确)。
5.培养团队开发的能力,这个不需要多说了。
6.要保存好你曾经写过的比较有代表性的代码。一个程序员可能最终学会了好几种编程语言,每一种语言都有不同的语法,即使你能记清每种语言的语法也不能记得住编译器中所有的函数库或类库。而且函数库或类库是可以自定义的,所以它的量可以说是无限。一个快速的程序员的速度主要原因不是语法熟而是他编过的代码多。当他要实现某个功能时就会想到这个功能我曾经在哪里做过然后把相关代码找出来看看就能迅速完成任务。所以一定要保存好自己写过的重要代码,这里的保存好不是说拷贝一份放到别的磁盘,而是保存到另一台电脑或者其它移动磁盘。如果你保存在一台电脑万一你的电脑丢了怎么办?要知道多年后你自己积累的代码对你来说是生存法宝。它的价值要比你的笔记本贵重得多,哪怕你丢失的笔记本背部有一个烂掉的水果。
7.不要初学就做很大型的项目,要循环渐进,保持兴趣和培养成就感。
8.打基础的过程不要去追随时髦的技术,更不要人云亦云。时髦的东西总会有过时的时候,但经典的东西才能经得起岁月的考验,例如c语言。当你学完c语言以后你会发现你以后学什么都是在吃c语言的老本。还有不要人云亦云,一个人之所以人云亦云可以分为两种情况,一种是这个人本身没什么思想,另一种是这个人什么都不懂,没法判断。我姑且排除第一种情况,那么在你基础还没打牢的时候你怎么去判断别人说的东西是真是假呢?即使不是技术性的观点也要有独立思考的能力。例如有一种很常见的说法是:“程序员干不到35岁”。其实说这种话的人都是被淘汰了的人,而且对新人来说很不负责任。好好想想,我国的计算机专业是在90年代才兴起的,那个时候的大学计算机专业普及吗?成熟吗?还有,现在很流行的java和c#两种语言中,java是95年的,c#是2001年的,别说大学专业,整个计算机行业都没有稳定下来。就拿现在有些还算年轻(30岁)就被淘汰的程序员来说,你们会发现这些人有很多共同点,底层的东西没学好,例如计算机原理、数据结构和算法这些,甚至有的c语言都没学,一上来就直接学面向对象的东西。例如学到最后学会使用.net的类库做windows和web开发,而且就知道这样做会这样但不知道为什么会这样,然后就一直以此为看家本领不继续学习。还有的压根对编程不感兴趣纯粹混口饭吃,能不被淘汰吗?淘汰就淘汰了吧,居然还要到网上发现帖子打击下新人。程序员是活到老学到老的职业。也许随着年龄增长你的学习能力在下降,但你的开发经验和代码量却有了积累,这是可以弥补的。又或许你的智商下降了,但情商上升了,你怎么知道你不能做出更人性化的东西呢?
9.培养自学能力,计算机专业是很适合自学的一门专业。当你离开学校之后技术仍然在不断更新,那时候只能靠自己学习,当然你必须要有扎实的基础。
10.最重要的一点,多上机敲代码,切记。