返回课程

多久能学会编程

这是一个没有答案的问题。每个人投入的时间、学习效率和基础都不一样。

但是有一点可以肯定,半年从小白成长为大神是不可能的。你要知道,大学生要用四年来学习编程,仍然有一部分人会“毕业即失业”。

学习编程不是看几本书就能搞定的,需要你不断的练习,编写代码,积累零散的知识点,代码量跟你的编程水平直接相关,没有几万行代码,没有拿得出手的作品,你说你是大神,有人会相信吗?

每个人程序员都是这样过来的,开始都是一头雾水,连输出九九乘法表都很吃力,只有通过不断练习才能熟悉,这是一个强化思维方式的过程。

知识点可以在短时间内了解,但是思维方式和编程经验需要不断实践才能强化,这就是为什么很多初学者已经了解了C语言的基本概念,但是仍然不会编写代码的原因。

程序员被戏称为”码农“,意思是写代码的农民,要想成为一个合格的农民,必须要脚踏实地辛苦耕耘呀。

也不要压力太大,一切编程语言都是纸老虎,一层窗户纸,只要开窍了,就容易了。

农民兄弟不容易,大家相互温暖吧^_^

程序员的装备

好的程序员离不开好的装备,我说的装备包括了硬和软两个部分——硬件外设,跑在计算机上的软件。当你从一个小白逐步成为一个大神的过程中,你就会体会到装备选择的重要性了。

硬件

针对硬件和外设,我们一般要从个人的经济水平和实际需求出发。特别对于初学者,不要盲目追求当前最高配置的电脑,因为你还没有能力用到那么好的硬件的时候,更好的设备就很可能已经出来了,目前市面上4000~5000的笔记本完全可以满足你的需求了。

软件

1) 操作系统

有初学者问大牛,要学习编程用什么操作系统,大牛说用Linux,只有Linux才能让你看到C的本质,C就是为Linux而生的。

话虽没错,但是你想想当初你学习Windows花了多长时间,是不是一开始连切换输入法也不会,编辑World文档也不会;如果你切换到Linux,你也会遇到同样的问题,你需要一段时间来熟悉Linux,加大了你的学习成本,会慢慢消磨掉你对编程的兴趣。

所以我建议,你可以在Windows下学习C语言,完全没问题,如果有一天Windows不能满足你的学习需求了,那你再切换到Linux,这个时候你对编程已经很了解了,切换的成本也低了。

2) 浏览器

Chrome(谷歌浏览器)是最好的浏览器,甚至没有之一,已经工作的程序员基本都是清一色的Chrome。Chrome 遵守网页标准,兼容性好,解析速度快,界面干净轻巧,插件众多,自带强大的网页调试工具。

如果你使用Firefox或Opera,那也不错,这两款浏览器也很棒。

但是请抛弃IE和360吧,太low了,很多公司禁止使用360的产品,原因你懂得......

3) 有道云笔记

如果你有做笔记的习惯,尝试放弃笔和纸吧,有道云笔记是一款很方便的软件,你在电脑上做了笔记,手机、平板上也可以看,只要安装有道云笔记,登录你的账户,就可以在任何地方查看并同步到其他设备。

做一个有逼格但不装13的程序员吧^_^

程序员的发展方向和薪水

IT行业的待遇比很多行业要高,程序员是最突出的,刚刚毕业的大学生,进入百度、腾讯、阿里巴巴等这些大企业,年薪一般在20万左右,厉害的可以拿到30万。这是第一梯队,一般重点大学的毕业生才能进入,怎么也得是个一本吧。

拿到融资的创业公司、规模不大的公司、一些国企等给的待遇也不错,年薪也可以超过10万。

很多小公司,老板一个人说了算,也没有融资,待业一般都不会高,一个月几千块钱。这样的公司招人难,进入的门槛低,对学历的要求也可以忽略,能干点活就行。

每个城市的待遇也不一样,北京、上海、广州、杭州这些一线城市都有大公司,待遇最高;成都、大连、西安这些二三线城市的待遇就一般了。

程序员也是有分工的,常见的有下面几种:

小A:专门研究复杂的问题的解决办法,被称成算法大牛,见到牛的人时候,喜欢发Orz等文字;内心脆弱,大多没法独自完成一个工程,更多参与研究,是程序员中的高薪群体。——想成为他?建议学一个基础语言后,选择算法课程,然后多多挑战难题。

小B:喜欢写代码,不喜欢动脑子,复杂问题用别人写好的程序解决;一般能自己写一些小东西,多数自视很牛;团队协作能力好的这种程序员比较难得。多见创业和大企业就业群体,薪水一般,提升空间小。——想成为他?建议学习一个基础语言后,学习数据结构,然后去开源社区混迹;不过要提醒,注意修行、修心,多和大家一起做项目。

小C:不喜欢写代码,喜欢胡思乱想,自称程序员出身,实际只知道大概,更多是在出谋划策。这种其实已经转行了,更多时候被当作产品经理和项目经理,有点技术背景可以做的比较如鱼得水,毕竟遇到小B那样的程序员偷懒时候,可以轻松击破。薪资一般比较低,只不过如果还善于做人,爬上去成为高管了另当别论。——想成为他?建议蜻蜓点水一样的广泛涉猎各种编程,但都无需深入,更多注意与人交流和关注业界动态。

你是不是在心里做一个选择,然后继续你的编程学习旅程呢?

输入法的选择

在编程的时候,我们需要使用字符来编写源文件,英文字母和汉字很好区分,但是标点符号就不一定了,有些英文标点与中文标点很相似,编译器只能识别英文标点。

相似的中英文标点有:
  • 中文分号和英文分号;
  • 中文逗号和英文逗号,
  • 中文冒号和英文冒号:
  • 中文括号()和英文括号()
  • 中文问号和英文问号?
  • 中文单引号’‘和英文单引号' '
  • 中文双引号“ ”和英文双引号" "

大家在输入标点时要注意,将输入法切换到英文半角输入法,如下图所示:

图 0-10  搜狗输入法

为了加强练习,出个选择题,请大家判断下面哪一种描述是正确的:
A) 编程的时候不用在意中英文符号的区别
B) 所有语言在编程的注释内容使用中文符号也会造成错误
C) 感叹号没有中文和英文的区别
D) 编程时,使用的英文引号,也有左引号和右引号的区别
E) 中文和英文模式下的制表符(键盘tab键)输入效果一致

什么是编程语言

学习编程语言之前,首先要搞清楚“编程语言”这个概念。

编程语言的目的是使用人类语言去控制计算机,告诉计算机我们要做的事情。人类语言易于理解,容易学习,开发效率高。

目前流行的编程语言有C语言、C++、Java、C#、PHP、java script等,每种语言都有自己擅长的方面,例如:
  • C语言是较早开发的一种高级语言,后来的很多语言都是以C语言为蓝本进行设计的;
  • C语言和C++主要用来开发软件;
  • Java和C#不但可以用来开发软件,还可以用来开发网站后台程序;
  • PHP主要用来开发网站后台程序;
  • java script主要负责网站的前端工作。

可以将不同的编程语言比喻成各国语言(如汉语、英语、法语等),为了表达同一个意思,可能使用不同的语句。例如,表达“世界你好”的意思:
  • 汉语:世界你好;
  • 英语:Hello World
  • 法语:Bonjour tout le monde

在编程语言中,同样的操作也可能使用不同的语句。例如,在屏幕上显示“Hello World”:
  • C语言:printf("Hello World");
  • PHP:echo "Hello World";
  • Java:System.out.println("HelloWorld!");

编程语言类似于人类语言,我们很容易就能理解它的意思。但在计算机底层硬件,所有的数据都是以1和0两个高低电平来表示,计算机只能识别这两个电平。那么,如何才能将“人类语言”转换成“0&1语言”呢?这就是编程语言的重点。

每种编程语言都有一套详细的规范,说明该语言如何被转换成机器语言(0和1序列),我们称之为语法。语法说明了编程语言有多少个“单词”和“句子”,分别有什么用。

每种语言都有对应的编译器,编译器能够识别“单词”和“句子”,将编程语言“翻译”成机器能识别的语言,即0和1序列。这个过程称为编译

可以说,所有的编程语言都是一个原理,使用人类能读懂的语言来编写源代码(source code),再利用编译器将源代码编译成机器能读懂的语言(0和1序列),称为目标代码(object language)

编程语言是这样一套规范,它规定了编译器按照什么样的语法将源代码编译成目标代码。

开发一种编程语言,重点是它的语法和编译器,有了他们,就有了编程语言。

我们学习编程语言,是要学习它的语法,至于编译器是如何编译的,不在初学者的学习范围之内。

ASCII编码与Unicode编码

前面我们已经讲到,计算机只认识0和1两个数字,多个0和1的组合可以表示很多字符,字符在存储到内存之前也都被转换成了二进制(0和1序列)。

可想而知,特定的字符必然对应着固定的0、1序列,否则将无法转换。那么,怎样将字符与0、1序列对应呢?这就需要有一套规范,计算机公司和软件开发者都必须遵守。

ASCII码

我们知道,一个二进制位(Bit)有0、1两种状态,一个字节(Byte)有8个二进制位,有256种状态,每种状态对应一个符号,就是256个符号,从0000000到11111111。

计算机诞生于美国,早期的计算机使用者大多使用英文,上世纪60年代,美国制定了一套英文字符与二进制位的对应关系,称为ASCII码,沿用至今。

ASCII码规定了128个英文字符与二进制的对应关系,占用一个字节(实际上只占用了一个字节的后面7位,最前面1位统一规定为0)。例如,字母 a 的的ASCII码为 01100001,那么你暂时可以理解为字母 a 存储到内存之前会被转换为 01100001,读取时遇到 01100001 也会转换为 a。

完整的ASCII码表请查看:http://www.asciima.com/

Unicode编码

随着计算机的流行,使用计算机的人越来越多,不仅限于美国,整个世界都在使用,这个时候ASCII编码的问题就凸现出来了。

ASCII编码只占用1个字节,最多只能表示256个字符,我大中华区10万汉字怎么表示,日语韩语拉丁语怎么表示?所以90年代又制定了一套新的规范,将全世界范围内的字符统一使用一种方式在计算机中表示,这就是Unicode编码,也称统一码、万国码。

Unicode 是一个很大的集合,现在的规模可以容纳100多万个符号,每个符号的编码都不一样。Unicode 规定可以使用多个字节表示一个字符,以解决本地化和跨平台问题。

为了兼容ASCII,Unicode 规定前0~127个字符与ASCII是一样的,不一样的只是128~255的这一段。

完整的Unicode编码请查看:unicode.org

数据的存储以及二进制思想

编程过程中,我们大部分时间是在与CPU和内存打交道,很少直接操作硬盘,下面我们来看看数据是怎样保存在内存中的。

内存条是一个非常精密的部件,包含了上亿个电子元器件,它们很小,达到了纳米级别。这些元器件,有两种状态,通电和断电,通电是高电平(5V),用1来表示,断电是低电平(0V),用0来表示。所以,一个元器件有2种状态。

如果我们通过电路来控制这些元器件的通断电,那么就可以得到很多0、1状态的组合。例如,8个元器件有 28=256 种不同的组合,16个元器件有 216=65536 种不同的状态。虽然一个元器件只能表示2种状态,但是多个组合起来就可以表示很多状态了,所以,我们通常将8个、16个、24或32个元器件组合起来表示一个字符,8个元器件可以表示256个字符,16个可以表示65536个字符。

我们将1个元器件称为1Bit(比特),8个元器件称为1Byte(字节),那么16个元器件就是2Byte,32个就是4Byte,以此类推,8×1024个元器件就是1024Byte,简写为1KB,8×1024×1024个元器件就是1024KB,简写为1MB,8×1024×1024×1024个元器件就是1024MB,简写为1GB。现在,你知道1GB的内存有多少个元器件了吧。

单位换算:
  • 1Byte = 8 Bit
  • 1KB = 1024Byte
  • 1MB = 1024KB
  • 1GB = 1024MB
  • 1TB = 1024GB

你看,在内存中没有abc这样的字符,只有0和1两个数字,计算机也只认识0和1。所以,计算机使用二进制,而不是我们熟悉的十进制,写入内存中的数据,都会被转换成0和1的组合。

二进制思想

十进制有0~9共10个数字,基数为10,逢十进一,借一当十;二进制只有0和1两个数字,基数为2,逢二进一,借一当二。例如:
  • 十进制 4321 = 4×103 + 3×102 + 2×101 + 1×100
  • 二进制 1101 = 1×23 + 1×22 + 0×21 + 1×20 = 8 + 4 + 0 + 1 = 13
  • 二进制 110.11 = 1×22 + 1×2+ 0×2+ 1×2-1 + 1×2-2 = 4 + 2 + 0 + 0.5 + 0.25 = 6.75

二进制数据的算术运算的基本规律和十进制数的运算十分相似。最常用的是加法运算和乘法运算。

二进制加法:
0+0=0
0+1=1
1+0=1
1+1=10

二进制乘法:
0×0=0
1×0=0
0×1=0
1×1=1

二进制减法:
0-0=0
1-0=1
1-1=0
10-1=1

二进制除法:
0÷1=0
1÷1=1

八进制和十六进制

除了二进制,编程中也经常使用八进制和十六进制。

八进制有0~7共8个数字,基数为8,逢八进一,借一当八;十六进制中,用A来表示10,B表示11,C表示12,D表示13,E表示14,F表示15,因此有0~F共16个数字,基数为16,逢16进1,借1当16。例如:
  • 八进制 3072 = 3×83 + 0×82 + 7×81 + 2×80 = 1536 + 0 + 56 + 2 = 1594
  • 十六进制 E3F9 = 14×163 + 3×162 + 15×161 + 9×160 = 57344 + 768 + 240 + 9 = 58361

为了加深印象,最后给大家看个笑话。

程序员A:“哥们儿,最近手头紧,借点钱?”

程序员B:“成啊,要多少?”

程序员A:“一千行不?”

程序员B:“咱俩谁跟谁!给你凑个整,1024,拿去吧。”

你看懂这个笑话了吗?请选出正确答案。

A) 因为他同情程序员A,多给他24块
B) 这个程序员不会数数,可能是太穷饿晕了
C) 这个程序员故意的,因为他独裁的老婆规定1024是整数
D) 就像100是10的整数次方一样,1024是2的整数次方,对于程序员就是整数

载入内存,让程序运行起来

如果你的电脑上安装了QQ,你希望和好友聊天,会双击QQ图标,打开QQ软件,输入账号和密码,然后登录就可以了。

那么,QQ是怎么运行起来的呢?

首先,有一点你要明确,你安装的QQ软件是保存在硬盘中的。

双击QQ图标,操作系统就会知道你要运行这个软件,它会在硬盘中找到你安装的QQ软件,然后复制到内存。对!就是复制到内存!QQ不是在硬盘中运行的,而是在内存中运行的。

为什么呢?因为内存条的读写速度比硬盘快很多。

对于读写速度,内存 > 固态硬盘 > 机械硬盘。你想呀,机械硬盘是靠电机带动盘片转动来读写数据的,而内存条通过电路来读写数据,你丫的,电机转的再快有电的速度(光速)快吗。虽然固态硬盘也是通过电路来读写数据,但是因为与内存的控制方式不一样,速度也不及内存。

所以,不管你运行QQ还是编辑Word文档,都是先将硬盘上的数据复制到内存,才能让CPU来处理,这个过程就叫作“载入内存”。

记住,CPU直接与内存打交道,它会读取内存中的数据进行处理,并将结果保存到内存。如果需要保存到硬盘,才会将内存中的数据复制到硬盘。

例如,打开Word文档,输入一些文字,虽然我们看到的不一样了,但是硬盘中的文档没有被改变,新增的文字暂时保存到了内存,Ctrl+S才会保存到硬盘。因为内存断电后会丢失数据,所以如果你编辑完Word文档忘记保存就关机了,那么抱歉,你将永远无法找回这些内容。

所以,如果你的内存太小,会严重影响计算机的运行速度,即使CPU给力,也不会有大的改观。

例如,你的计算机只有1G内存,操作系统自身占用几百M内存,如果你打开的软件过多,运行它们需要很大的内存,就会超过1G。没办法,操作系统只能将内存中暂时不用的数据保存到硬盘,用到时再从硬盘中读取,同时再将内存中的其他数据写入硬盘。因为硬盘的读写速度慢,这样频繁的切换会严重影响计算机运行速度,经常出现“卡死”现象。

值得庆幸的是,目前市面上很少有1G内存的计算机了。

总结起来,CPU、内存、硬盘和主板的关系如下:

图 0-9   CPU、内存、硬盘和主板的关系

与编程相关的硬件知识

作为一个不懂计算机的小白,你是不是经常听朋友说起CPU、内存、主存、机械硬盘、固态硬盘、主板等等一些高大山的专业术语,感觉自己弱爆了有木有~~

这些都是学习编程必须了解的计算机硬件基础,我来给大家讲解一下。

一. CPU

CPU 是 Central Processing Unit 的简写,中文译为“中央处理器”,是计算机的大脑,负责计算、思考、处理数据、控制其他设备等,没有CPU,计算机就无从谈起,CPU的速度直接决定了电脑的运行速度。如下图所示:

图 0-1  CPU

目前市场上常见的应用于台式机和笔记本的CPU有 Intel(英特尔) 和 AMD(超微半导体公司),Intel 性能好一点,占据了大部分份额,如果你的CPU是AMD的,是不是有点拿不出手的赶脚。

CPU有很多针脚,直接插在主板上,如下图所示:

图 0-2  CPU插槽

不知道有密集恐惧症的你看了会不会难受^_^

二. 内存

内存就是下面的长方形“卡片”,也叫内存条。

图 0-3  内存条

如果你自己组装过电脑,那你肯定见过它。我们常说电脑有几个G的内存,就是指它的大小,市面上常见的有2G、4G、8G等。

内存条插在主板上的特定插槽内,如下所示是台式机的内存插槽:

图 0-4  台式机内存插槽

不过笔记本为了节省空间,一般将内存条平放,如下所示:

图 0-5  笔记本内存插槽

主板上一般有多个内存插槽,可以插多个内存条,电脑内存大小是所有内存条大小之和。

内存条也被称为主存。

三. 硬盘

硬盘是用来保存数据的。打开一个文件,编辑完成后,Ctrl+S 就保存到了硬盘,断电不会丢失。

硬盘分为机械硬盘(HDD)和固态硬盘(SSD)。

机械硬盘就像VCD或DVD,由一个精密电机带动光盘快速转动来让探头读取和写入数据。如下图所示:

图 0-6  机械硬盘

固态硬盘就像手机内存卡或U盘,内部有上亿个电子元器件,非常细小,达到纳米级别,通过电路来读取和写入数据。如下图所示:

图 0-7  固态硬盘

与机械硬盘相比,固态硬盘在读写速度上有很大优势,一个很明显的例子就是电脑安装了固态硬盘开机速度很快,很少出现卡顿的现象。

机械硬盘和固态硬盘不是直接插在主板上,而是通过接口连接到主板,所以叫外部存储,也是电脑外设的一部分,不过不像鼠标、键盘、U盘等,没有也可以正常工作,硬盘是电脑正常运行所必需的外部设备。

四. 主板

计算机有这么多的硬件,总得让他们协调起来吧,要不都各自为战了;主板就是负责这项工作的,它让CPU、内存、硬盘等设备连接在一起,可以很好的协调工作。如下所示:

图 0-8 主板

好了,不要研究主板上有什么设备,大部分对编程没有影响,也不在我们的教程范畴内。


  • 扫一扫 扫二维码继续学习