精华内容
下载资源
问答
  • 许多人认为在开始学习编程之前必须对数学很在行或者数学分数很高。但一个人为了编程的话,需要学习多少数学呢? 实际上不需要很多。这篇文章中我会深入探讨编程中所需要的数学知识。你可能已经都知道了。 对于基本的...

    前言

    数学和编程有一种容易让人误解的联系。许多人认为在开始学习编程之前必须对数学很在行或者数学分数很高。但一个人为了编程的话,需要学习多少数学呢?

    实际上不需要很多。这篇文章中我会深入探讨编程中所需要的数学知识。你可能已经都知道了。

    对于基本的编程,你需要知道下面的:

    加减乘除 — 实际上,电脑会帮你作加减乘除运算。你仅需要知道什么时候运用它们。
    模运算 — 模运算是用来计算余数,它的符号通常用%百分号来表示。所以23除以7等于3,余数是2。23 mod 7 = 2。
    判断是奇数还是偶数的模运算 — 如果你想知道一个数是奇数还是偶数,用它mod 2来作模运算。如果结果是0,它就是偶数。如果结果是1,就是奇数。23 mod 2等于1,所以23是奇数,24 mod 2等于0,24是偶数。
    对一个数作百分数运算,就是用这个数来乘以一个百分数。譬如你要得到279的54%,就是用0。54*279。这就意味着为什么1.0等于100%,0.0等于0%。
    知道负数是什么。负数乘以负数等于正数。负数乘以正数等于负数。就这么简单。
    知道笛卡尔坐标系统。在编程中,(0,0)代表屏幕左上角,Y坐标的正轴往下。
    知道勾股定律,因为它是用来计算笛卡尔坐标中两点之间的距离的。勾股定律a^2 + b^2 = c^2。(x1, y1)和(x2, y2)两点之间的距离等于( (x1 – x2)^2 + (y1 – y2)^2 )。
    知道十进制、二进制、十六进制。十进制就是我们通常用的十个数:0-9。通常认为这个十进制系统是人类发明的,因为我们有十个手指。

    电脑采用二进制数据,只有两个数字:0和1。这是因为我们用电子元件来构建的电脑,让电脑只识别两种状态更便宜些(一种代表0,另一种代表1)。

    数是一样的,但是在不同的进制系统里的表现形式不同,因为不同进制包含的数的个数不同。十六进制比十进制多六个数字,所以我们用A-F表示超过9的数。能够表现这些进制系统的最简单方法就是用一个计数器(odometer)。下面三种不同的计数器显示的是同一个数,但在不同的进制系统中的形式不同:

    图片在新窗口中查看计数器页面

    你甚至不需要知道怎么从一个进制系统转换成另一个系统。每种编程语言都有帮你转换的函数。

    (提示一下,十六进制的使用是因为一个十六进制的数可以表示四个二进制的数。因为十六进制中的3和二进制中的0011对应,十六进制的A和二进制的1010对应,所以十六进制中的3A(十进制的58)可以写成二进制的00111010。十六进制在编程中的使用是因为它是对二进制的简化。没人喜欢写出的数全是0和1。)

    就是这么多了。除了进制系统以外,你可以已经知道编程所需的数学知识了。虽然普遍认为编程需要学习许多数学,但实际上并不需要那么多。你可能为了编写一个程序,譬如说地震模拟器,而需要学习数学。其实你更需要学习地震的数学,而不是因为要编写地震模拟器而学习数学。

    某些编程领域中更为高级的数学

    有一些领域中需要更多的数学知识(但95%的软件中,你都不需要知道它们。)

    3D游戏和3D绘图 — 3D通常需要涉及三角函数和线性代数(用矩阵来解决问题的数学)。当然,有许多3D图形库已经实现了这些数学编程,你不需要知道这些数学。

    2D物理(譬如愤怒的小鸟)和3D物理(譬如许多流行的3D游戏) — 为了写涉及到物理的编程,你需要学习一些物理方程和公式(尤其是力学,如弹力,重力,球滚下斜坡等物理。)然而,已经有一些物理引擎和软件库帮你实现了,所以你也不需要知道游戏(如愤怒的小鸟)中的物理公式。

    加密学 — 事实上我指的是RSA。你需要知道质数的有关知识,以及如何求最大公约数(其实是个非常简单的算法,还有许多编程语言中都有gcd()函数,帮你求解最大公约数)其他的编码大部分就是将数据按照某种步骤挪动。举个例子,下面的flash就是AES“Rijndael”编码的步骤。所有的步骤包含用一些数减去另一些数,将行向上移,将列数字打乱,再作简单的加法运算。

    如果你要写你自己的加密算法(通常不需要你做,因为已经有许多很好的工具了,并且如果你不是加密学的专家的话,你的程序也许会很容易被破解。)如果你仅仅想加密一些数据的话,已经有许多加密和解密的软件库了。

    所以就算是以上的情况,你也不需要真正的知道3D图像,物理或者加密的数学。你只需要学习运用软件库就行了。

    编程需要学习什么?

    你需要学习的是如何建模和设计算法。这意味着,如何将真实世界的运算或者数据处理抽象出来,写出代码,让计算机来帮你运算。例如,在游戏“龙与地下城”(Dungeons and Dragons)中,角色和怪兽都有许多不同的战斗统计值:

    生命值(Hit points)是一个人死前所能经受的伤害值。越高的生命值就意味着可以经受更多的伤害。

    防御等级(armor class)是对你的武器防御能力的量度。防御值越低,武器的防御能力越高。

    THAC0(读作“thay-co”,“To Hit Armor Class 0”),是对一个人进行有效攻击的能力的测量。THAC0值越低,攻击越准。

    武器的攻击力用类似1d6+2来表示,它表示摇一个六面骰得到的值,然后再加2。2d4就是摇2个4面骰,然后将它们相加。(“龙与地下城”采用的是4,6,8,10,12和20面骰。)

    要看攻击者打防御者,让攻击者摇动一个20面骰。如果这个数字大于或等于攻击者的THAC0减去防御者的防御能力,那么这个攻击就成功,防御者将受到伤害。不然,防御者就阻击了这个攻击,并且不费血。

    我们假设两个人物,Alice和Bob,她们具有以下值:

    Alice: HP 14, AC 5, THAC0 18, DAMAGE 1d6

    Bob: HP 12, AC 7, THAC0 16, DAMAGE 2d4

    所以Alice有更多的生命值和防御力(记住,AC越低越好)。但是Bob更可能成功击中对方(记住,THAC0越低越好),并造成更多的伤害。我们说Bob的攻击力更强是因为2d4可以造成2-8点伤害,而Alice的1d6只能造成1-6点伤害。(如果你懂统计学,你可以计算出Bob的期望伤害值是5,比Alice的3。5要高。)

    你会打赌Alice或者Bob会赢得比赛对吗?很难讲谁会赢,他们看起来势均力敌。尽管可能你的统计学学得很好,但做这个计算将会十分头疼。编写“龙与地下城”的程序(模拟战斗过程),你甚至不需要知道统计学。仅仅需要运行几百次或者几千次战斗,看看谁赢得更多。

    Alice 赢得12909 (43.03%)次战斗. Bob赢得17091 (56.97%)战斗。

    所以我们看到使用上面的数值,Bob稍稍占先。电脑进行了30,000次战斗模拟。如果我们用笔和纸还有骰来进行30000次战斗模拟的话,可能需要几个月来算出结果,而我的笔记本仅用了8秒。

    那么如果Alice的生命值从14增加到20呢。谁会赢呢?

    Alice赢得19438 (64.79%)次战斗. Bob赢得10562 (35.21%)次战斗.

    我们看到给Alice增加6点生命值,结果倒过来了,Alice占先了。那么如果Alice的生命值只是增加到16呢?

    Alice赢得15176 (50.59%)次战斗啊. Bob赢得14824 (49.41%)次战斗.

    所以仅仅增加2个生命值,就已经足够扳回Bob更强攻击力的胜算。

    来看这个程序,它只用了加减乘除来计算一个百分比。甚至在更复杂的程序中,需要表示magic spells,治愈部位,多次攻击,在战斗中切换武器等不同效果时,我们也不需要知道更多的数学了。

    当然,去学更多的数学吧。可以让你成为更出色的程序员。但是为了学习编程需要多少数学?真的非常少。

    更新:我想我应该在基本知识点中增加基本代数,但仅仅需要知道的如 如果X * 3 = 12,知道X等于4。

    ——————-

    虽然大多数开发人员会告诉你,他们在工作中从来不需要数学,但是经过一番沉思后,我有了个想法:就是反马斯洛的锤子理论:当你有一把锤子,你会把一切看成是钉子。

    展开全文
  • 15.1.1 SQLLDR加载数据的常见问题 592 15.1.2 SQLLDR警告 613 15.1.3 SQLLDR小结 614 15.2 外部表 614 15.2.1 建立外部表 615 15.2.2 处理错误 619 15.2.3 使用外部表加载不同的文件 622 15.2.4 多用户...
  • Oracle 9i & 10g编程艺术:深入数据库体系结构(09年度畅销榜TOP50)(08年度畅销榜TOP50) 基本信息 原书名: Expert Oracle Database Architecture 9i and 10g Programming Techniques and Solutions 原出版社: ...
  • 4.所有标记的属性必须用""括起来; 所以上列语句在XML中正确的写法是 1. sample 2.< b>< i>sample< /i>< /b> 3.< td>sample 4.< font color="red">samplar  另外,XML标记必须遵循下面的命名规则: 1.名字中...
  • 我们这门python从入门到全栈开发 入门篇,非常适合零基础的小白同学快速进入python领域,本课程充分考虑到零基础小白同学的学习感受,最简单的语言和实例带领大家快速的上手python的编程,不以花里胡哨不实用的...
  • 电脑培训http://www.lovoinfo.com如果你是一名Java程序员,并且关注这编程语言方面的发展,比如经常去TIOBE网站了解编程语言流行度排行,那么你应该听说过Scala,如果你还没有开始学习Scala,或者打算下个礼拜开始...
    展开全文
  • 拿到一台新的Windows电脑,我会做什么? 线上排查工具Arthas 你会换掉Postman吗?我正在HTTP Client... curl 使用 为什么需要Docker? Docker入门为什么可以这么简单? 聊聊Docker镜像 Java精美思维导图 程序员...
  • 树莓派是为学习计算机编程教育而设计,只有信用卡大小的微型电脑,最早的系统基于Linux,随着Win10 IOT的发布,现在树莓派也可以运行Windows。树莓派虽然只有信用卡大小,但是内心却非常的强大,视频,音频等功能都...
  • C#微软培训教材(高清PDF)

    千次下载 热门讨论 2009-07-30 08:51:17
    4.2 引 类 型 .33 4.3 装箱和拆箱 .39 4.4 小 结 .42 第五章 变量和常量 .44 5.1 变 量 .44 5.2 常 量 .46 5.3 小 结 .47 第六章 类 型 转 换 .48 6.1 隐式类型转换 .48 6.2 显式类型转换 .53 ...
  • 并发编程到底应该什么?一张图秒懂!! 并发编程中一种经典的分而治之的思想!! 我们该如何正确的中断一个正在执行的线程?? 一起进大厂系列 面试官灵魂拷问:if语句执行完else语句真的不会再执行吗? 将 95%...
  • C#微软培训资料

    2014-01-22 14:10:17
    4.2 引 类 型 .33 4.3 装箱和拆箱 .39 4.4 小 结 .42 第五章 变量和常量 .44 5.1 变 量 .44 5.2 常 量 .46 5.3 小 结 .47 第六章 类 型 转 换 .48 6.1 隐式类型转换 .48 6.2 显式类型转换 .53 ...
  • 疯狂的程序员

    热门讨论 2012-07-18 18:05:32
    既然没有电脑,那要电脑着有什么呢?还占着地方。唯一不同的是寝 室里的一个人――和别的不一样,这间寝室有个不属于这个班的人――他叫王江。 王江他特别,不仅因为他不是这班的,还因为他吹的牛皮很特别。 大一...
  • c语言编写单片机技巧

    2009-04-19 12:15:17
    对于一般的手机用户来说,谁会在充电时还需要一台电脑来做显示呢?要实现单片机与电脑的连接,最简单的方式就是采用串口通讯,但需要加一颗RS-232芯片。 17. 在ARM编程中又应当如何? 答:就以嵌入式系统...
  • 所以,你不必在技术上很在行才能吸引我们的注意,但你必须表现出能引导你变得在行的特质 —— 机敏、有想法、善于观察、乐于主动参与解决问题。如果你做不到这些使你与众不同的事情,我们建议你花点钱找家商业公司签...
  • 二十三种设计模式【PDF版】

    热门讨论 2011-05-30 14:13:49
    因为很多人没有注意到这点,完 Java 基础语言就直接去 J2EE,有的甚至鸭子赶架,直接使用起 Weblogic 等具体 J2EE 软 件,一段时间下来,发现不过如此,挺简单好用,但是你真正理解 J2EE 了吗?你在具体案例中的...
  • php高级开发教程说明

    2008-11-27 11:39:22
    思想、语言产生和发展的背景以及设计特点。 1.1 PHP与我 大家是否想过,为什么会有这么多的编程语言?除了所谓“主流语言”例如C、C + +、 P a s c a l等之外,还有其他的如L o g o l、C o b o l、F o r t r a n、...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    在较大的公司,为自有品牌或者其他品牌设计手机或者平板电脑的总体方案。 根据需求对系统进行定制外,为系统编写定制的应用。 第二类开发者 在创业型公司或者是独立开发者,盈利方式主要2种: 为国外公司外包开发,...
  • 通过我们已经过的知识,你可以编写一个最简单的程序输出一个也许是程序世界中最有名的词语: echo "Hello World!"; ?> First PHP page // Single line C++ style comment /* printing the message */ ...
  • 大话数据结构

    2018-12-14 16:02:18
    对于一些语言,如basic、fortran等早期的编程高级语言,由于没有指针,这链表结构,按照前面我们的讲法,它就没法实现了。怎么办呢? 3.12.1静态链表的插入操作 73 3.12.2静态链表的删除操作 75 3.12.3静态链表优...
  • Reversing:逆向工程揭密

    热门讨论 2010-06-21 17:27:22
    3.5 应用程序编程接口 88 3.5.1 Win32 API 88 3.5.2 本地API 90 3.5.3 系统调用机制 91 3.6 可执行文件格式 93 3.6.1 基本概念 93 3.6.2 映像区段(Image Sections) 95 3.6.3 区段对齐(Section Alignment) 95 ...

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

学编程必须用电脑吗