Steve Wozniac,全名斯蒂芬·加里·沃兹尼亚克(Stephen Gary Wozniak,生于1950年8月11日)。美国计算机工程师,曾与斯蒂夫·乔布斯合伙创立苹果计算机(今之苹果公司)。Wozniac在1970年代中期创造出了第一代苹果计算机和第二代苹果计算机,随着第二代苹果计算机风靡普及,苹果成为了1970年代及1980年代初期销量最佳的个人计算机,Wozniac被誉为引领计算机进入大众家庭的工程师。

作者 | jamesbowman

译者 | 弯月,责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

以下为译文:

很久以前,当计算还是一项非常无聊的业务时,发生了一件意想不到的事情。为电传打字机和交通灯设计的廉价微处理器被年轻的黑客们用作了个人电脑。有一群以Steve Wozniak代表的年轻人开始挑战有限的计算机能力,潜心研究并让这些小机器承担起了不起的工作。其中一项工作就是博士Dobbs Jounal于1976年8月发表的如下文章。

这是一组实数算术的例程。图中的微处理器(6502,第一代和第二代苹果计算机曾采用该处理器)只能计算字节——即0到255之间的整数。更糟糕的是,该微处理器只能做加减法。但是,你可以利用这个库计算1.2627  -  1099.56,甚至是pi的平方根。令人惊讶的是,Wozniac总共只用了127条指令、239个字节就完成了基本运算:加减乘除。

这是一段了不起的代码,在数次阅读之后,我依然惊叹于其巧夺天工。例如,乘法和除法的例程需要循环23次,每一次计算一位。在这段代码中,Wozniac是否在两个地方重复写了常量23?当然没有!他在两个例程都会执行的一段前值代码中加载了常量23:

再举一个例子,求M1和M2绝对值的算法通常如下:

M1 = abs(M1);

M2 = abs(M2);

然而,Wozniac却没有像这样重复。他写了一个求M1绝对值的例程,然后交换M1和M2。之后,他调用了两次该例程,因此用一半的代码量实现了相同的功能。更令人欣喜的是,其他地方也需要交换M1和M2,因此这部分代码一举两得。

当然,这种紧凑的代码很难让人理解,但是如此超前的代码确实让人唏嘘不已。阅读1976年期刊中的其他文章时,就会发现里面有很多不是特别优秀的代码。这也无可厚非,因为当时的人们只是想弄清楚利用新型微处理器的方法。但在一众代码中,Wozniac的这段代码无疑给现代的演景(demoscener)工作一记响亮的耳光。相比之下,Wozniac代码的创新水平堪称与30年后出现的这段6502代码(https://github.com/pfusik/zlib6502)并驾齐驱。

讲完历史,现在来想一想:为什么我会在2019年反过头来查看这段古老的代码?因为我正在做有关I²CDriver和SPIDriver的开发,它需要在8位CPU上进行浮点运行,在之前的项目中我使用的是基于8051的Silicon Labs EFM8。它可以很好地执行浮点计算,就像6502库一样。虽然我的代码不像原来那么短,但速度很快,比Keil好要快一点。

优秀的代码永垂不朽!

原文:https://tinyletter.com/jamesbowman/letters/i-have-found-an-excellent-programmer-named-steve-wozniac

本文为 CSDN 翻译,转载请注明来源出处。

如何在短时间内成为Python工程师?

https://edu.csdn.net/topic/python115?utm_source=csdn_bw

【END】

 热 文 推 荐 

☞小米将开源进行到底!

☞AI 会替代程序员?超好用的自动补全代码工具 Deep TabNine!

☞苹果收购英特尔手机芯片业务;西门子将在华建立 5G 研发中心;React Native 0.60.4 发布 | 极客头条

☞17 岁成为 iOS 越狱之父,25 岁造出无人车,黑客传奇!

☞抢程序员饭碗?自动写代码的Deep TabNine真如此神奇?

☞又是GAN!这个AI让周杰伦、罗永浩“变脸”古典画像

☞你硬盘里的那些电影都是如何被保存的?

☞孙宇晨深夜发文致歉: “我年轻, 涉世未深”……

中国第一程序员,微软得不到他就要毁了他!

点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

你点的每个“在看”,我都认真当成了喜欢

优秀的代码永垂不朽!相关推荐

  1. 项目中遇到一些实用/优秀的代码写法(杂烩)

    2019独角兽企业重金招聘Python工程师标准>>> 实用/优秀的代码写法 es6 数组Array支持链式编程,例子身份证中间几位用'*'代替,替代了我组长说的substr的基础写 ...

  2. 【译】什么才是优秀的代码

    究竟什么是优秀的代码?Robert Martin的一句话可以完美诠释. 代码质量的唯一衡量标准是每分钟说多少次WTF 我来解释一下这句话.当我在做code review时,通常会有三种不同的感受: W ...

  3. 什么样的代码才是优秀的代码

    一,什么样的代码才是优秀的代码 许多去 Google 参观的人,用完洗手间后,都会惊奇而略带羞涩地问:"你们马桶前面的门上,贴着的 Python 编程规范,是用来搞笑的吗?".搞不 ...

  4. 移动开发者最爱的9个优秀Android代码编辑器

    移动开发者最爱的9个优秀Android代码编辑器 在网络信息高速发展的今天,移动设备的方便快捷已经深入人心,越来越多的开发人员会选择在移动设备上查看或编辑源代码.于是,Android平台上大量基于代码 ...

  5. 优秀的代码 vs. 糟糕的代码

    http://harttle.com/2015/04/13/elegant-and-bad.html 可持续开发不仅在于项目架构设计,还与代码质量密切相关,代码的整洁度和质量成正比.-- Robert ...

  6. mac上优秀的代码编辑软件Sublime Text 3

    sublime text 3是一个代码编辑器,也是HTML和散文先进的文本编辑器,支持64位和32位操作系统,程序员之必备神器.sublime text 3破解版在支持语法高亮.代码补全.代码片段(S ...

  7. 设计模式学习之简单聊聊如何写出优秀的代码

    前言: 到底什么样的代码是优秀的代码?这个恐怕是仁者见仁.智者见智的问题.一个程序员随着能力的提升和视野的开拓不同的阶段看待这个问题会有不一样的答案.不过常见的一些评判的标准,像可维护性,可扩展性.可 ...

  8. android优秀开源代码

    GitHub 优秀的 Android 开源项目 转自:http://blog.csdn.net/shulianghan/article/details/18046021 主要介绍那些不错个性化的Vie ...

  9. 优秀的代码都是如何分层的?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源:http://t.cn/RdrmI7i 1.背景 说起应用分 ...

最新文章

  1. ROS中使用摄像头的问题
  2. 仿小米简约Calculator
  3. 小米4硬改教程_小米手环3美化/修改资源包教程(含加入二维码教程)
  4. [css] css如何消除字体的锯齿?
  5. java json 构造_json 构造和解析
  6. Jupyter notebook绘制热力图边缘只有一半的问题
  7. datagridview 手动添加的行如何进行重载_【厚积薄发】如何规划UI图标图集
  8. C++ 整型长度的获取 不同的系统
  9. t470键盘拆解_联想ThinkPad T470拆机图解教程
  10. oracle11 g ora 03113,解决oracle11g ORA-32004: obsolete or deprecated parameter(s)
  11. python 答题辅助_答题辅助python代码实现
  12. HBuilderX 打包 vue 项目生成 apk
  13. 汉庭董事长季琦:成功创业者的必经之路
  14. e.g., malformed request syntax, invalid request message framing, or deceptive request routing
  15. MySQL修改用户密码及配置远程访问
  16. matlab 功率谱密度 汉宁窗_【转】功率谱密度相关方法的MATLAB实现
  17. 运满满服务器繁忙显示500,运满满上线两年多 听听货车司机怎么说
  18. homeassistant安装
  19. 2020年10月12日斗鱼虎牙合并的瓜
  20. ubuntu系统安装pytorch

热门文章

  1. 网络执法官.P2P终结者等监控网络流量控制软件的原理和防范
  2. 因式分解题目及过程_【数学.天问】为什么有些题目一看就会,一做就废?是不是你的手有自己的想法?...
  3. dev项目属性按钮是灰色_如何当按钮处于各种交互状态时具有不同样式的按钮?...
  4. Zookeeper基础简介
  5. B树的原理以及C++实现(附源码和文档)
  6. 中国塑溶胶密封剂行业市场供需与战略研究报告
  7. 中国料斗底部谷物拖车市场趋势报告、技术动态创新及市场预测
  8. Serverless 应用如何管理日志 持久化数据
  9. linux 内核模块 proc,Linux 内核模块 proc文件系统.pdf
  10. M1 Mac:支持 USB-C,但不完全支持