精华内容
下载资源
问答
  • 游戏终端、智能手机、全球卫星定位系统(GPS)单元、平板电脑以及其他许多令人难以置信的设备都说明了这一点。它们都是计算机,并且它们已经接管了这个世界。我们用它们来工作、通信,以及娱乐。事实,很难找到有...

    计算机已经不再只是用来工作的方盒子。任何拥有一个可编程处理中心的东西都可以称作计算机。游戏终端、智能手机、全球卫星定位系统(GPS)单元、平板电脑以及其他许多令人难以置信的设备都说明了这一点。它们都是计算机,并且它们已经接管了这个世界。我们用它们来工作、通信,以及娱乐。事实上,很难找到有哪个领域还从未使用过计算机。

    销售人员喜欢用智能来描述嵌入式计算机设备(智能手机、智能电视、智能手表等),事实上它们却并不智能。处理单元只是块执行指令的硅片。智能手机的“智能”并非来自计算机芯片,而是来自对它们编程的人。

    计算机是迄今为止人类发明的最强大的工具,但是由于很少有人知道如何开发它的潜能,目前我们只是使用了它的一小部分功能。在充满计算机的世界中,最重要的就是那些可以发挥计算机全部性能的编程人员。编程,是一项基本技能,并且在未来会变得更重要。

    什么是编程

    我们已经指出,计算机并不智能。它只是个按照清单一步步执行指令的单元。这个指令清单就是程序。编程,就是接受任务,将其分解成多个步骤,然后把它们用计算机可以理解的语言写下来。

    树莓派可以理解多种语言,在本书中,你将学习到Python3——一种非常强大易学的语言。

    本书适用于拥有树莓派并希望学些计算机编程的读者。学习本书不要求读者具有编程经验或者其他类似的技术。即便你只爱看漫画和科幻小说,都没关系,只要你具备前两个基本条件,这本书就是为你准备的。

    读完本书,你将会对Python3有很深的理解,并且熟悉许多非常有用的模块(Python 附加模块)。通过Python3和这些模块,你将能控制树莓派的各个功能。你可以通过控制基本输入输出口(GPIO)使它和外界交互,或者用它连通互联网。拥有一个摄像头,你可以用树莓派拍照片,也可以制作游戏,操纵三维世界。简而言之,这是一本介绍如何发掘你的树莓派的全部潜力的图书。

    什么是树莓派

    树莓派是个用来学习编程的优秀设备。第一,它很便宜。价格差不多只有低端计算机的十分之一,作为你的主计算机的一个附件它非常便宜。由于程序员往往需要调试开发设备,而调试就有可能破坏某些东西,这就使树莓派显得很有用。通常来说,调试并不会破坏到设备本身,但是可能需要重装系统,这就有可能损失数据并且在几个小时内你都无法使用计算机。如果你有个树莓派,用它来编程,这些就不是问题。如果你的计算机需要和别人共享,使用树莓派就显得更重要。

    第二,树莓派是个裸设备。它没有藏在盒子里或者在一个完整的系统中。这意味着你可以自己决定将其做成一个什么系统。你可以将其放到盒子里,也可以就让它裸着运行。你也可以使用GPIO,这在其他机器上是无法做到的。大多数计算机的用途都已经预先设计好了(如用来网上冲浪或者玩游戏的平板电脑,用来看电影或玩游戏的游戏终端,用来工作或玩游戏的笔记本电脑等)。而只要一点技术手段树莓派就可以做任何事情。

    第三,树莓派使用Linux——一个类似于Windows或Mac OS X的操作系统。它提供了视窗系统和一个用来操控树莓派的基于文本的命令行接口。如果你之前没有使用过Linux,会发现它和你使用过的系统有点不同。对于崭露头角的程序员来说,最重要的区别就是Linux比其他系统更灵活。正如树莓派的物理设计崇尚体验一样,这个操作系统也是如此。

    如何阅读本书

    前3章介绍了如何在树莓派上使用Python。读完这3章后,你将对Python编程有个很好的认识。本书剩余部分将分章来介绍不同的应用,如游戏和多媒体。这些章节涉及Python的不同领域。因此前一章没有读完不会影响你对后一章的理解(有些时候,我们可能会引用前面的某些概念,但我们会在引用时标注清楚)。

    这意味着你可以在读本书第二部分时自己决定阅读顺序。例如,如果你对多媒体很感兴趣,可以直接跳到这一章,之后再去读其他章节。

    学习编程必须多动手实践。也就是说,仅仅坐下来读完本书是不够的。你必须去实践这些学到的东西。贯穿本书,我们设计了很多练习让你来实践所学到的知识。有时通过特定的练习来培养你的技能,有时你需要给我们介绍过的程序添加特性。编程的一个重要部分就是确定程序要完成什么的创造力。因此你不需要完全听从我们的建议。事实上,我们鼓励你把我们的建议和代码作为一个起点——一个开启你的数字艺术征程的起点。

    致  谢?Acknowledgements

    感谢大家帮助我完成此书。在Wiley公司,Kezia Ednsley和Craig smith从本书开始写作起就帮忙审稿。感谢Erin Zeltner,是他让本书的文字看起来更优美,也让排版更合理。

    还有许多人需要感谢。没有编程环境就不会有这本关于编程的书。基于树莓派的Python包含了数以千计的程序员的工作,其中有很多人还是免费贡献。这些人都需要感谢,受限于篇幅,我们仅列出三位:Guido van Rossum、Linux Torvalds和Richard Stallman。

    当然,软件需要运行在硬件之上,我们也要感谢Eben Upton和树莓派基金会。

    本书中的任何错误都由作者独自承担。

    展开全文
  • 为什么要编程?因为代码没在那里。创造一个世界是如此让人着迷,Linux 的...在电脑世界中,你就是创世者,你对所发生的一切拥有最终的控制。 你可以建筑一个这样的房子,有一个活板门,既稳固又实用。但是每个人都...

    为什么要编程?因为代码没在那里。创造一个世界是如此让人着迷,Linux 的创始者 Linus 这样表述对编程的喜爱之情:

    对于喜爱编程的人来说,编程是世界上最有趣的事,比下棋有趣得多!因为你可以自己制订游戏规则,而你制定什么样的规则,也就会随之出现与此规则相符合的结果。

    在电脑世界中,你就是创世者,你对所发生的一切拥有最终的控制。

    你可以建筑一个这样的房子,有一个活板门,既稳固又实用。但是每个人都可以看出一个仅仅以坚固实用为目的的树上小屋和一个巧妙地利用树本身特点的美妙小屋之间的差异。这是一个将艺术和工程融为一体的工作。编程与造树上小屋有相似之外……

    每个热爱编程的人都在编写代码的过程中享受着创造的乐趣,但是,伴随着编码的快感,bug 总是如影随形,开发无止境,bug 随身行。bug 是每个程序员没法绕开的障碍,它们就在那里,修复一个,增加一个,似乎永不减少,永远存在。

    遭遇 bug 的时候,理性的程序员会说:这个 bug 能复现吗?
    自负型:这不可能,在我这是好好的。
    经验型:不应该,以前怎么没问题?
    幻想型:可能是数据有问题。
    无辜型:我好几个星期都没碰这块代码了!
    乐观型:只需要改一行代码,不会影响其它程序的。
    实践型:你重启一下服务试试。

    无论你是哪种类型的程序员,遭遇 bug,内心都是崩溃的,尤其是产品经理或测试人员在使用或测试产品的过程中抓到你的一个 bug 之后那种如获至宝的表情和欢呼声,会让我们的心情久久不能平静。于情于理,防患于未然,减少编程中的 bug,对产品和程序员,都是最好的结果。

    能不能一次编写出没有 bug 的程序呢?一般来说,并不能,除非你写一辈子 Hello World。我见过一些天才的程序员,他们差不多能做到这一点。接到任务之后,思考,冥想,在笔记本上画出数据结构或某个算法片段,腹稿打的差不多了就开始编程,用 Vim、Emacs 或 IDE 工具,大部分时候能够一气呵成,然后构建代码,构造测试数据,运行程序,在反复调试中修复几个编程过程中没有考虑到的问题,就可以提交到代码库了。他们的代码交给测试和其他开发者,少有人能挑出 bug,因为他们对代码有敏锐的感觉,能够在别人忽略的地方发现代码的坏味道,并给出巧妙而优雅的解决方案。他们是天生的代码创造者,这样的人往往效率高而且少有错误,以至于会被一些平庸的团队忽略,因为技术领导总是会下意识的去关注那些最容易出事的环节,但这些人才是团队真正的脊梁,不是那些四处救火者。如果你拥有这样的程序员,就算捡到宝贝了,要好好珍惜。

    我不是天才的程序员,但在年轻时大量产出代码的时候,差不多也能做到类似的效果。没什么好的办法,只能下笨功夫,我会在编码之前尽可能把所有的可能性都想清楚,然后认真做好设计。我常常在工作时间完成代码的编写,下班后带着笔记本回家逐行 Review 自己的代码,对着设计图检查是否处理了各种异常和边界条件,并先于测试人员对自己的代码进行白盒测试和黑盒测试。另外,在编程方面我奉行不要在同一个地方摔倒两次的原则,每次自己程序出现的 bug 案例,我都会记录到 bug 库里,检查代码的时候逐一对照,确保不会犯重复的错误。

    可能年轻的时候自尊心比较强,我难以忍受自己的程序被别人找出 bug,于是偷偷花费了两倍的时间来保证代码的质量,以至于团队的人认为我一次就能编写出高质量的代码。现在看来,我当时是个错觉制造者。

    所以,减少 bug 的第一步,是提升自己的程序员素养,努力不给自己和别人找麻烦。

    另外,团队协作也很重要,前期的技术方案和设计评审、代码审查,对减少一些重大的错误和弱智的 bug 都非常有好处。

    与几个有经验的程序员一起评审一个技术方案,常常会发现一些重大的问题,比如为什么用缓存,为什么做持久化,高并发下怎么应对,这部分设计支持线程重入吗,这个循环为什么设置成10分钟,这个超时设置为什么是60秒,传输协议加密了吗,等等。很多方案可能会仅限于解决当前的问题,但有经验的程序员却能透过时间的重重迷雾,发现这个方案在未来某个时间点可能爆发的问题。这就是评审的力量。

    技术方案和设计评审一般是先于代码的,开始编写代码了,Code Review(代码审查)就可以提上议事日程了。国内很多团队的技术人员内心是抵触代码审查的,他们常常想,在这个国家我们已经被审查的够多了,就不要再自己审查自己了,然后很多 bug 就产生了。

    我和 Google、Facebook、Twitter、Airbnb 的中国工程师讨论过 Code Review,他们觉得没有代码审查是不可思议的。在这些公司的研发流程里,Code Review 是必不可少的一个环节,只有别人帮你做了 Code Review 并在代码上「打了戳」,你的代码才能进入 Code Base。在 Facebook,如果你 Review 了别人的代码,如果那个人休假了,你就要接手他的代码,出了任何问题都要唯你是问。

    事实上,Code Review 才是真正的白盒测试,没有经过代码审查,仅凭测试很难保证代码质量。测试通过了但没有经过代码审查的代码仍然会出各种问题,这样的案例比比皆是。只有当另外一个人读了你的代码,并且表明能看懂时,这些代码才有真正有了鲜活的意义。代码审查的意义就是,在你的代码库合进代码库之前,至少有一个人读过你的代码。

    很多人在做代码审查之前会调研大量的代码审查工具,就像一个人在跑步之前,要先准备好跑鞋、袜子、压缩裤、压缩上衣、鼻贴、眼镜、口罩、导汗带、魔术头巾、各种手表、冷却喷雾、肌内效贴布……然后一个月过去了,你问他跑了几次,他会很扭捏的告诉你,髌骨带还没有到!

    没有工具一样可以做代码审查,你只需要偏转身体,在另一个程序员不忙的时候拍拍他的肩膀说,「来,看看我的代码,你能看懂吗?我准备把它们提交到代码库里」。然后阐述你的思路,倾听他的建议,并根据这次讨论的结果决定,是修改一下,还是继续提交到代码库。

    不要小看这短短的20分钟,它可能会帮你避免的一些隐藏的和弱智的 bug。

    很多团队都是因为代码审查过程或工具过于复杂放弃了Code Review,典型的因噎废食,其实使用 less、diff 和 git 等工具,基本上就可以做一次完整的代码审查了。如果你过于依赖工具和过程,那说明你并没有抓住问题的核心。

    写了这么多,如何减少编程中的 bug 呢?不难,也不容易。对内,努力提高自己的程序员素养,不去浪费自己和别人的时间。对外,重视团队协作,进行方案评审和代码审查。做到这两点,你会发现,代码中的 bug 会越来越少的。

    没有 bug 的代码,才是好代码!

    展开全文
  • 对于基本的编程,你需要知道下面的:加减乘除 — 实际电脑会帮你作加减乘除运算。你仅需要知道什么时候运用它们。模运算 — 模运算是用来计算余数,它的符号通常用%百分号来表示。所以23除以7等于...

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

    deeaacf20f764d7aee03b580e044037f.png

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

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

    • 加减乘除 — 实际上,电脑会帮你作加减乘除运算。你仅需要知道什么时候运用它们。
    • 模运算 — 模运算是用来计算余数,它的符号通常用%百分号来表示。所以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)。下面三种不同的计数器显示的是同一个数,但在不同的进制系统中的形式不同:

    4a4ee0b73cb28986020cd29a9e3bbee5.png

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

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

    (提示一下,十六进制的使用是因为一个十六进制的数可以表示四个二进制的数。因为十六进制中的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面骰。)

    0bc4300687799f43e260f39b73c877b9.png

    要看攻击者打防御者,让攻击者摇动一个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。

    ec16e8f22d45006ec28bdbbb374ee84e.png

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

    学习从来不是一个人的事情,要有个相互监督的伙伴,工作需要学习C/C++或者为了入行、转行学习C/C++的伙伴可以私信回复小编“学习”领取全套免费C/C++学习资料、视频

    部分教程截图

    19f21221831d3abe962458c40dc8d0ac.png

    教程内容包括

    1.开发环境搭建

    2.C语言教程

    3.C++教程

    4.数据结构与算法

    5..Net全套教程

    6.C++Primer教程

    7.项目实操

    展开全文
  • 为什么要编程?因为代码没在那里。创造一个世界是如此让人着迷,Linux 的创始者 Linus 这样表述对编程的喜爱之情: ...对于喜爱编程的人来说,编程是世界最有趣的事,比下棋有趣得多!...在电脑世界中,你就是创


    原文地址:http://macshuo.com/?p=1361


    Go

    为什么要编程?因为代码没在那里。创造一个世界是如此让人着迷,Linux 的创始者 Linus 这样表述对编程的喜爱之情:

    对于喜爱编程的人来说,编程是世界上最有趣的事,比下棋有趣得多!因为你可以自己制订游戏规则,而你制定什么样的规则,也就会随之出现与此规则相符合的结果。

    在电脑世界中,你就是创世者,你对所发生的一切拥有最终的控制。

    你可以建筑一个这样的房子,有一个活板门,既稳固又实用。但是每个人都可以看出一个仅仅以坚固实用为目的的树上小屋和一个巧妙地利用树本身特点的美妙小屋之间的差异。这是一个将艺术和工程融为一体的工作。编程与造树上小屋有相似之外……

    每个热爱编程的人都在编写代码的过程中享受着创造的乐趣,但是,伴随着编码的快感,bug 总是如影随形,开发无止境,bug 随身行。bug 是每个程序员没法绕开的障碍,它们就在那里,修复一个,增加一个,似乎永不减少,永远存在。

    遭遇 bug 的时候,理性的程序员会说:这个 bug 能复现吗?
    自负型:这不可能,在我这是好好的。
    经验型:不应该,以前怎么没问题?
    幻想型:可能是数据有问题。
    无辜型:我好几个星期都没碰这块代码了!
    乐观型:只需要改一行代码,不会影响其它程序的。
    实践型:你重启一下服务试试。

    无论你是哪种类型的程序员,遭遇 bug,内心都是崩溃的,尤其是产品经理或测试人员在使用或测试产品的过程中抓到你的一个 bug 之后那种如获至宝的表情和欢呼声,会让我们的心情久久不能平静。于情于理,防患于未然,减少编程中的 bug,对产品和程序员,都是最好的结果。

    能不能一次编写出没有 bug 的程序呢?一般来说,并不能,除非你写一辈子 Hello World。我见过一些天才的程序员,他们差不多能做到这一点。接到任务之后,思考,冥想,在笔记本上画出数据结构或某个算法片段,腹稿打的差不多了就开始编程,用 Vim、Emacs 或 IDE 工具,大部分时候能够一气呵成,然后构建代码,构造测试数据,运行程序,在反复调试中修复几个编程过程中没有考虑到的问题,就可以提交到代码库了。他们的代码交给测试和其他开发者,少有人能挑出 bug,因为他们对代码有敏锐的感觉,能够在别人忽略的地方发现代码的坏味道,并给出巧妙而优雅的解决方案。他们是天生的代码创造者,这样的人往往效率高而且少有错误,以至于会被一些平庸的团队忽略,因为技术领导总是会下意识的去关注那些最容易出事的环节,但这些人才是团队真正的脊梁,不是那些四处救火者。如果你拥有这样的程序员,就算捡到宝贝了,要好好珍惜。

    我不是天才的程序员,但在年轻时大量产出代码的时候,差不多也能做到类似的效果。没什么好的办法,只能下笨功夫,我会在编码之前尽可能把所有的可能性都想清楚,然后认真做好设计。我常常在工作时间完成代码的编写,下班后带着笔记本回家逐行 Review 自己的代码,对着设计图检查是否处理了各种异常和边界条件,并先于测试人员对自己的代码进行白盒测试和黑盒测试。另外,在编程方面我奉行不要在同一个地方摔倒两次的原则,每次自己程序出现的 bug 案例,我都会记录到 bug 库里,检查代码的时候逐一对照,确保不会犯重复的错误。

    可能年轻的时候自尊心比较强,我难以忍受自己的程序被别人找出 bug,于是偷偷花费了两倍的时间来保证代码的质量,以至于团队的人认为我一次就能编写出高质量的代码。现在看来,我当时是个错觉制造者。

    所以,减少 bug 的第一步,是提升自己的程序员素养,努力不给自己和别人找麻烦。

    另外,团队协作也很重要,前期的技术方案和设计评审、代码审查,对减少一些重大的错误和弱智的 bug 都非常有好处。

    与几个有经验的程序员一起评审一个技术方案,常常会发现一些重大的问题,比如为什么用缓存,为什么做持久化,高并发下怎么应对,这部分设计支持线程重入吗,这个循环为什么设置成10分钟,这个超时设置为什么是60秒,传输协议加密了吗,等等。很多方案可能会仅限于解决当前的问题,但有经验的程序员却能透过时间的重重迷雾,发现这个方案在未来某个时间点可能爆发的问题。这就是评审的力量。

    技术方案和设计评审一般是先于代码的,开始编写代码了,Code Review(代码审查)就可以提上议事日程了。国内很多团队的技术人员内心是抵触代码审查的,他们常常想,在这个国家我们已经被审查的够多了,就不要再自己审查自己了,然后很多 bug 就产生了。

    我和 Google、Facebook、Twitter、Airbnb 的中国工程师讨论过 Code Review,他们觉得没有代码审查是不可思议的。在这些公司的研发流程里,Code Review 是必不可少的一个环节,只有别人帮你做了 Code Review 并在代码上「打了戳」,你的代码才能进入 Code Base。在 Facebook,如果你 Review 了别人的代码,如果那个人休假了,你就要接手他的代码,出了任何问题都要唯你是问。

    事实上,Code Review 才是真正的白盒测试,没有经过代码审查,仅凭测试很难保证代码质量。测试通过了但没有经过代码审查的代码仍然会出各种问题,这样的案例比比皆是。只有当另外一个人读了你的代码,并且表明能看懂时,这些代码才有真正有了鲜活的意义。代码审查的意义就是,在你的代码库合进代码库之前,至少有一个人读过你的代码。

    很多人在做代码审查之前会调研大量的代码审查工具,就像一个人在跑步之前,要先准备好跑鞋、袜子、压缩裤、压缩上衣、鼻贴、眼镜、口罩、导汗带、魔术头巾、各种手表、冷却喷雾、肌内效贴布……然后一个月过去了,你问他跑了几次,他会很扭捏的告诉你,髌骨带还没有到!

    没有工具一样可以做代码审查,你只需要偏转身体,在另一个程序员不忙的时候拍拍他的肩膀说,「来,看看我的代码,你能看懂吗?我准备把它们提交到代码库里」。然后阐述你的思路,倾听他的建议,并根据这次讨论的结果决定,是修改一下,还是继续提交到代码库。

    不要小看这短短的20分钟,它可能会帮你避免的一些隐藏的和弱智的 bug。

    很多团队都是因为代码审查过程或工具过于复杂放弃了Code Review,典型的因噎废食,其实使用 less、diff 和 git 等工具,基本上就可以做一次完整的代码审查了。如果你过于依赖工具和过程,那说明你并没有抓住问题的核心。

    写了这么多,如何减少编程中的 bug 呢?不难,也不容易。对内,努力提高自己的程序员素养,不去浪费自己和别人的时间。对外,重视团队协作,进行方案评审和代码审查。做到这两点,你会发现,代码中的 bug 会越来越少的。

    没有 bug 的代码,才是好代码!


    展开全文
  • 传智播客博学谷加小谷vx:boxueguu免费领IT各学科资料、课程Get更多干货直播课前两...简单几个可以手机上编程的软件,主要分为C/C++,Java,Python,前端网页,Linux这5个方面,感兴趣可以下载尝试一下:1、C/C++...
  • 简单几个可以手机上编程的软件,主要分为C/C++,Java,Python,前端网页,Linux这5个方面,感兴趣可以下载尝试一下:1、C/C++第一个软件是——C++编译器。这款软件可以直接运行C/C++程序,代码语法检查等。如下图...
  • 这么说吧:《Tricks of The Windows Game Programming Gurus》中文版虽然译得参差暧昧、差强人意(比如把数据结构linked list译为“连接的清单”),仍然还是瑕不掩瑜,可以让人坐在电脑跟前打开VC...
  • 近几年,机器人教育越来越火。眼看着身边越来越多的孩子都开始学机器人,可能你也疑惑,我的孩子适合学吗?我也要带他去学吗?...不过事物都有两面性,玩游戏的孩子通过引导更适合走机器人、编程学习的道...
  • 目前市面来说,优秀的鼠标和键盘主要集中罗技和雷柏。今天入手新品雷柏VT300S,咱们一起来体验点评一番。雷柏VT300S的包装沿用黑色为主色调,与雷柏同系列其他款的设计差不多。右侧则是型号VT300S,中间为产品...
  • 编程的那些年

    2014-12-27 11:20:00
    谈Java怎么java这条路的时候先谈下LP怎么走进编程吧。 小学二年级LP就开始玩电脑了,当时玩半条命(现在的CS或者CF)、跑跑卡丁车、泡泡堂、MU奇迹,等等一些网络游戏,虽然会玩这么多款游戏,但是LP并不犀利...
  • 前言 本文的文字及图片来源于网络,仅供学习、交流使用,不...相信大家初中电脑都偷偷玩过 Flash 游戏--是男人就坚持 100 秒,在游戏中无数的小球随机运动,玩家用鼠标控制大球,当大球碰撞到小球后,游戏结束,.
  • 前言本文的文字及图片来源于网络,仅供学习、交流使用,不具备任何商业用途,版权归原做者...全网电影免费看apphttps://www.bilibili.com/video/BV1tz4y1o7Yc/相信你们初中电脑都偷偷玩过 Flash 游戏--是男人就...
  • 我解释怎么玩这个游戏之前,请让我说说我的动机。 当我19岁读大一的时候,我MIT(麻省理工学院)学习了编程。那并不是因为家里没有电脑或者我压根没听说过编程语言。而是因为:①我认为编程是件枯燥的事
  • 我为什么学习编程

    2011-10-30 22:28:19
    大一的时候学校开C语言,学的很不错,也很感兴趣。后来自学过一段时间,却总是不入其...那时怎么能连最基本的Google都没学会用,不然总可以Google找到学习编程的方法的,真是白玩电脑游戏这么多年!以致浪费了整整
  • 如有问题请及时联系我们以作处理以下文章来源于 Python技术 ,作者:派森酱Python GUI编程:高清电影在线观看平台制作,全网电影免费看https://www.bilibili.com/video/BV1tz4y1o7Yc/相信大家初中电脑都偷偷玩...
  • 后端游戏开发入门

    2020-11-21 19:57:26
    然后咸鱼找找有没有二手电脑,可能机缘巧合,遇到一位游戏后端开发,在上大学的时候就想做一名后端游戏开发,然后问那位大佬,游戏后端开发用什么框架,直接说底层基于netty,手写框架。此时震惊了。目前了解...
  • 一般我们下载后装在电脑上的单机游戏编程时数据的存储和管理该怎么写呢?把它放到数据库里?配置文件里?还是其他的什么地方? 数据多的时候是不是会用不同的存储方法呢? 同样想了解手机单机游戏的存储~ ...
  • 今天分享一款好玩的软件——spacedesk,让废旧手机秒变让电脑副屏,同时小编也介绍下一台电脑怎么使用和设置多个显示屏,这样可以一边打游戏一边看剧,对编程的同学看代码,设计和剪辑多有很大帮助先效果图,...
  • 今天分享一款好玩的软件——spacedesk,让废旧手机秒变让电脑副屏,同时小编也介绍下一台电脑怎么使用和设置多个显示屏,这样可以一边打游戏一边看剧,对编程的同学看代码,设计和剪辑多有很大帮助先效果图,...
  • 当我们玩游戏,办公,编程的时候发现电脑好卡,怎么办了,难道是要听天由命吗?今天教大家一种自由切换核心与独立显卡的方法。 1、首先我们需要确定大家的电脑是不是双显卡的。桌面右击“我的电脑”然后点击...
  • 今天开始,对python开始感兴趣了,因为我想编程游戏!那,这里不得不提的就是pygame。 我照着度娘的视频动手组装好了Raspberry 3。WIN10安装了python3.7,安装了pycharm。 把Rasbpi3 接到电脑显示器,和电脑...
  • 无论你是一名编程工作者或者是一名游戏爱好者,日常的工作游戏中都离不开键盘这一电脑外设。寻找到一款适合自己的键盘也是提升自己编写程序的速度和游戏技术的一大方面。可是当前的键盘市场,最主要的两类键盘...
  • 所有入行Java的人都知道Java程序员薪资高、...无论是手机软件、手机Java游戏还是电脑软件,你的每一次购物到每一笔支付成功,都离不开Java,越来越多的企业也正采用Java语言开发网站,而所有程序员中,Java开发工..
  • 剪刀石头布-源码

    2021-02-11 02:59:53
    剪刀石头布 剪刀石头布 ... 作为用户,我将计算机游戏 表情符号是通过与计算机用户从游戏“剪刀石头布”中选择的。 语言和工具: JavaScript主要 HTML,CSS Visual Studio程式码 Git-Github
  • 默然说话20160306

    千次阅读 2016-03-06 12:37:18
    现在要想想怎么利用微博引导儿子学好知识和文化,更多的时候,还怎么教一个七岁的孩子学习编程的基本知识。 其实我一直都想说,现在各种不准玩游戏,不准玩电脑,不准上网,其实都是害孩子。因为孩子们将来...
  • 小白:你写的程序老牛X了,我能电脑上玩玩么? 新手程序猿:可以啊,首先,你先搭建Python环境… 小白:那个,我还有游戏副本没打,先不聊了 刚接Python触编程都是面向PyCharm编程,学了各种基础知识,就是不...
  • 不管你是用电脑来听音乐,还是用电脑来看电影,玩游戏,其实电脑只是做运算。不然怎么叫“计算机”呢?这一课我们一起来学习电脑能实现的大多数运算。我们会继续使用一课学到的变量的知识。其实,就是对变量...
  • 内容简介前言基础运算变量之间的运算缩写数学库总结第一部分第八课预告1. 前言一课是 C语言探索...不管你是用电脑来听音乐,还是用电脑来看电影,玩游戏,其实电脑只是做运算。不然怎么叫“计算机”呢?这一课我...

空空如也

空空如也

1 2 3
收藏数 60
精华内容 24
关键字:

怎么在电脑上编程游戏