编程概要

导航

定位
概述
出发
0与1
原子数据
   字符
   整数
   字符串
   布尔
   十六进制
   变量
   常量
   初始化
   地址
   指针
原子控制
   指令
   汇编
   拷贝与位运算
   编译器与编程语言
数据与控制
编码
小结
第一站-初识结构
基本数据结构
   数组
   链表
  
   队列
   联合
   元组
   位图
   列表
   集合
   映射
   变体
   嵌套
   图示
   小结
基本控制结构
   代码块
   分支
   选择
   循环
   函数
小结
第二站-中级结构
中级数据结构
   多维数组
   二叉树
   模板
   缓存
中级控制结构
   迭代
   遍历
   递归
   中断
   回调
   回滚
   流计算
   闭包
   Curry
小结
第三站-高级结构
高级数据结构
  
   正则
   对象
高级控制结构
   设计模式
   异步
   并发
通信协议
小结
第四站-应用
应用数据结构
   JSON
   XML
   记录文本
   关系型数据库
   key-value型数据库
应用控制结构
   API
   应用框架
组件
控件
分布式
互联网
小结
软件之道的思考
性能与效率
健壮性
可扩展性
存储设计与请求构造
配置式的软件通用框架
编程之道
数据-结构-控制-流
路线图
结语

定位

本文适合于有基本的教育经历、对编程世界了解很少、希望从事编程开发工作或者需要与技术GGJJDDMM们进行沟通的筒鞋。

读完本文,你只需要一点做人的基础:
1. 具备软件使用经历;
2. 数学四则运算能力;
3. 举一反三的悟性;
4. 耐心。

本文不是论述编程知识或技能或技术的专著,而是会提纲挈领、点到为止地谈及编程的基本知识和主要思想,—— 所以说要求有举一反三的悟性嘛!O(∩_∩)O 。此外,文章比较长,特别需要耐心噢!

概述

尝数思编程及编程活动之根本,不得其解。经过仔细思考,结合学习与工作中的编程开发实践,我逐渐意识到,编程的根本和精髓在于结构编程。这里的结构编程并不是指常见的三种结构(顺序、条件、循环)以及过程化编程,也不是指狭义的数据结构与算法编程,而是指针对任何具有结构的可计算对象的编程。正如万物皆由不计其数的原子通过多样的结构和方式奇迹般地创造,计算世界则是由不计其数的0和1通过多样的结构和方式奇妙地构建。我们将从0和1出发,在结构之神的指引下,经过且行且停的旅程,直至欣赏到瑰丽华美的现代互联网大厦。

合抱之木,生于毫末;九层之台,起于累土; 千里之行,始于足下。

出发

Are you ready ? Go !

0与1

在可预见的很长一段时间,计算世界仍然是由 0 和 1 组成的。 无论是字母、数字、图表、网页、动画、超酷炫的特效等,在计算底层看来,都是流畅的一系列01数字串,就像硬件只会看到一团极其壮丽的电子流一样。我们的旅程从这里出发。

原子数据

计算世界的原子数据通常包括字符、整数、字符串、布尔量、浮点数。 打开某种编程语言的入门书籍,第二章通常都会是变量,以及变量的若干基本类型。

字符

最先映入眼帘的,大概就是字母表。大小写的 ABCDEFG, HIJKLMN,OPQRST,UVWXYZ。 咋看上去,似乎没有什么结构,都是单个的字母。实际上,在计算机内部,任何字母都是一个字节8位的01串编码而成的,通过ASCII 码表来进行映射。比如A,ASCII码值是65,对应的01串是 01000001。 单个数字以及其他控制字符,也是通过 ASCII 码表来标识的。可以百度或谷歌 ASCII 了解详情。由此认识到: 字符是 8 位01串。后面会知道,这里的“串”可以理解为一种“数组”。

整数

接着为人所熟知的,便是整数。 同字符类似,整数也是01串。不过由于整数比较大,一个字节8位可能存不下,因此需要多个字节。Java编程语言里,整数是4个字节32位01串,可以表示的数值是 -2^31 ~ 2^31-1. 还有长整数 8 个字节 64 位 01 串,可以表示的数值是 -2^63 ~ 2^63-1 . 拿整数 10000 来说,可以表示为 00000000 00000000 00100111 00010000 , 可以使用 python 的 bin(10000) 方法来获取10000的二进制表示,也可以使用python 的 int(‘00000000000000000010011100010000’, 2) 来获取二进制表示的整数。关于二进制如何表示整数,有一套模2取余的算法;而如何表示负整数,则要涉及到反码和补码计算。详情可百度或谷歌。由此认识到,整数,实际上也是若干位01串。

字符串

字符串大概是计算世界里处理得最最多的原子数据了。任何文本都是字符串。字符串其实是由字符组成的序列,比如 “ABC” 就是 [“A”, “B”, “C”]。因此字符串编码为01串,就是把字符串中的每个字符都编码为01串,然后串联起来:010000010100001001000011.

布尔

布尔类型就是 True 和 False , 真与假。 用于各种条件判断中。

十六进制

写成01串实在太痛苦啦,也不直观。因此先辈们发明了十六进制。实际上,二进制,十进制,十六进制,都是表示计数的一种方法。 N 进制,就是用 0~N-1的数字(N<=10)或0-9, N-10个字母(N>10)来表示所有的整数。十进制,就是用 0-9 来表示整数; 十六进制,就是用 0-9, A-F 来表示整数。 N 表示进位数,逢N进一。十进制转十六进制,采用模N取余的方法来确定各个位的数字。比如 24, 可以表示 2*10 + 4; 也可以表示成 1*16 + 8, 即0x18 , 0x 表示使用十六进制计数法。使用python的hex(24)即可获得24的十六进制表示。 有了十六进制,表示大量的01串,妈妈再也不用为我担心啦!

变量

前面讲了原子数据字符、整数、字符串、布尔,那么在程序里怎么使用这些原子数据呢?变量是用于存储这些值并引用的。 比如 x = “i am java programmer” , x 就是个变量。 给变量指定某个值的动作叫“赋值”。变量在程序的不同地方可以重新赋值,比如 x = “now i am mixed coder. haha!”

常量

常量也是可以指定和存储原子数据值的地方,不过常量在初始化完成后就不能改变了。比如光速在真空中的速度、圆周率PI 、自然常数、默认参数配置等。

初始化

变量与常量都是数据引用。初始化是指为一个数据引用第一次赋值的过程。int x; 这只是声明了一个整数变量 x,而没有初始化这个变量; 而 int x = 1 就为 x 完成了初始化工作,赋予初始值 1 。初始化也称为“声明并定义了”。

地址

“赋值”是个逻辑意义的操作,比如 x = “i am java programmer”, 是将字符串赋值给变量 x , 这是从自然语言的角度理解; 从计算机存储和运行的角度来理解,必然要为这个字符串分配一个内存来存放,这就存在变量的内存地址 d = 0xb708a410。使用python的id(x)可以打印x的地址。现在我们知道变量有双重身份啦: 一个是变量指代的值 v ,一个是存储变量值使用的内存地址 d。

指针

上面讲了地址的概念。指针就是用来存放地址 d 的数据引用 p, 可以通过指针来操作变量的值。 比如说,x = “i am java programmer” , x 的地址是 d = 0xb708a410 ,那么 p = 0xb708a410 ; 如果想将 x 的值变成 “i am mixed now.” , 那么可以使用 x = “i am mixed now.”; 也可以使用指针 (*p) = “i am mixed now.”. *p 的含义就是取出变量 p 所存放的变量地址所指代的变量的值。是不是有点拐弯抹角? 别担心,很多中高级程序yuan 都在指针上栽了很多次的跟头 ~~

原子控制

指令

指令由操作码和操作数组成。操作数就是前面所说的各种原子数据;操作码是预先定义好的01串。比如在8位系统上,定义: 10000000 表示加法, 11000000 表示减法。最高2位表示操作码,其他位表示操作数。 那么, 10000000 00000001 00000010 就表示 1+2 , 11000000 00000010 00000001 表示 2-1。实际指令可以比这更复杂,但原理是一样的。指令由CPU来执行完成。

汇编

程序yuan,或者码农就是靠编写指令为生的。不过要编写这么多01串,恐怕吃饭都要吐出来的。于是,程序猿中的先驱们发明了汇编。 汇编对指令并没有实质性的改变,仅仅是对指令做了个助记符或者说是命名,不过这个命名产生的意义却是非凡的!比如 10000000 简记为 ADD,11000000 简记为 SUB, 那么上面的指令就可以写成, ADD 0x01 0x02 , SUB 0x02 0x01 ,是不是更直观了?

拷贝与位运算

别看计算机能胜任超级广泛的任务,其实它只会两件事:拷贝与位运算。拷贝,就是将一个值从一个地方挪到另一个地方:我只是大自然的搬运工,哈哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值