【CSDN 编者按】在编程中,我们常常会遇到这样的情况,那便是苦思冥想许久好不容易对实现某个功能的代码实现过程有了些想法却轻易就被“打扰”得烟消云散了,也因此行业开始流传“当一个程序员冥思苦想时,不要去打扰,甚至一句友好问候都多余。”本文作者分享了一种颇为行之有效的方式,再也不用担心会忘记,能够从被打断的地方继续开始。

作者 | Swizec Teller,JavaScript 开发。

译者 | 弯月

责编 | 沭七

出品 | CSDN(ID:CSDNnews)

以下为译文:

七年前,我养成了一个古怪的习惯。周三的时候,正是这个古怪的习惯救了我一命。

当时我们正在大学里进行一次编译器考试。我们各自构建了一种简化的 Pascal 编译器。

在那个学期初,教授展示了他专门为我们发明的这款降低了难度的 Pascal。熟悉的 Pascal 语法,还包含算法、变量赋值、函数等功能的子集。

他还给了我们一堆 Java 代码,那是个做了一半的编译器。

那段代码知道如何采用抽象语法树并将其转换为字节码。你可以将该字节码当成普通的 Java 可执行文件在 JVM(Java 虚拟机)上运行。

这样一来我们就可以在一个学期内完成这个任务了。就好象我在工作室给工程师们构建了一半的应用程序,他们只需填补空白。

我们的任务是构建编译器的前端。分词器、解析器、语义分析器。

看起来很有意思。

到学期结束时,我们每个人都做好了自己的编译器。虽然输入与输出都相同,只是中间的实现方法各异。

那段代码现在还在我的 GitHub 上(https://github.com/Swizec/compilers-homework)。

还有一篇旧文章,关于为什么编写编译器的人都是超级英雄(https://swizec.com/blog/why-people-making-compilers-are-superheroes/swizec/4616)。

考试来临了。

历经 4 个小时。开卷考试,你可以使用电脑,你可以上网,也可以看书。想用什么就用什么,但是不能互相抄袭。

任务就是往编译器里添加功能。

当时有 2 或 3 个新语法选项。我记不清具体内容了,但是评估的过程很简单:将你的编译器发送给教授。他会编译编译器。然后运行一堆测试用例。测试通过百分率就是你的考试成绩。

天啊。如何才能保持 4 个小时的高度专注?怎样才能保持头脑清醒?

记笔记!把一切都写下来。

记不清我是怎么想到这个主意的,但我就在那次超残酷的考试中首次尝试了这种方法。

在思考问题的时候,你肯定会有一些想法。把一切想到的东西都写下来。

这个方法可以解决三个问题:

  • 更加易于集中注意力。在记笔记的时候,你的注意力自动地就会更加专注。你的思绪会非常有条理,不会慌乱。逐个遵循逻辑步骤。

  • 让你放慢脚步。书写的速度远不如思考的速度快。放慢脚步意味着你会更加深思熟虑。在动手写代码之前进行深思熟虑是一件好事。

  • 即使被打断也不会前功尽弃。无论是在办公室、在家里,还是在上网,突然有个奇怪的想法冒出来,你的思绪就会被打断。写下你的想法可以让你更加容易地回到原有的思绪中。

  • 扩大工作记忆。你的工作记忆只能容纳 7 条。你只需 7 条记忆就可以完成你的项目吗?

不要像下面这个人一样?。

图中的这个人研究的代码并没有深入他的大脑,在被打断后,他不得不从头开始。通过记录一些笔记,就可以让他从被打断的地方继续开始。

周三的时候,我就是这么做的。

12 月 20 日我接手了一项新功能,然后放了两周的假。我只做完了一半,1 月 2 日回来的时候什么都想不起来了。

我甚至记不起那个功能是什么了。

在笔记的帮助下,我顺利地做完了这个功能?。

英文:When you code, write down everything

链接:https://swizec.com/blog/write-down-everything/swizec/8851

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

【完】


 热 文 推 荐 

☞ 买不到回家的票,都是“抢票加速包”惹的祸?

☞ 两岁的微信小程序,创造超5000亿的价值

☞ 2019年,Rust与WebAssembly将让Web开发更美好

☞ 君士坦丁堡硬分叉姗姗来迟,以太坊2.0还要等多久?

☞ 2018,这一年的腾讯优图,我们总结一下!

☞ 特斯拉“撞死”机器人,是炒作还是事故?

☞ 程序员的年度未解之谜:加班背锅的是我,得优秀员工的却是他

☞ 趣挨踢 | 关于遗留代码的那些事儿

print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!\n");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!"

点击“阅读原文”,打开 CSDN App 阅读更贴心!

喜欢就点击“好看”吧!

编程时千万要记下一切!相关推荐

  1. 学习编程时一些常见英文名的含义解释(持续更新)

    大三上学期,我在上一门名为科学计算程序设计的课程时,按照讲义里的教程利用 MSYS2 一步步在 CodeBlocks 中配置了GSL(GNU Scientific Library,由一系列数值计算程序 ...

  2. c语言程序框一点数字就消失,你用C语言编程时,会犯下面的错误吗?

    原标题:你用C语言编程时,会犯下面的错误吗? C编译的程序对语法检查并不像其它高级语言那么严格,这就给编程人员留下"灵活的余地",但还是由于这个灵活给程序的调试带来了许多不便,尤其 ...

  3. 如果当初学习编程时能有人给我这些忠告该多好

    Cecily Carver  是多伦多的一位程序媛,和 Jennie Faber 一起创办了一个游戏制作工作室.她喜欢歌剧.舞蹈和弹钢琴.Cecily 在这篇文章分享她在编程道路上的所感所想,给出很多 ...

  4. java中float和double型数据在赋值时有哪些注意事项?,java语言中float和double类型的数据在编程时的注意事项...

    float和double类型的数据在编程时的需要注意的地方 package execisetest; public class AccuranceTest {     public static vo ...

  5. 用MPLAB IDE编程时,软件总是弹出一个窗口提示: “the extended cpu mode configuration bit is enabled,but the program that

    用MPLAB IDE编程时,软件总是弹出一个窗口提示: "the extended cpu mode configuration bit is enabled,but the program ...

  6. oracle 初始化出错,OCCI编程时,初始化Date种出错

    OCCI编程时,初始化Date类出错 使用的是Oracle 9i & VC6 下面Date类初始化,在运行时出错,是什么问题 #include #include #include #inclu ...

  7. python raise valueerror_请教:Python多进程编程时出现raise ValueError(Pool not running) 为什么?。...

    问题描述 我在进行多线程编程时使用如下方代码,当输入一般print()等简单函数时均正常, 但是一旦为调用我自己的函数时运行就会出现 : raise ValueError("Pool not ...

  8. python语言的两种注释方法_python编程时添加中文注释的方法

    python编程时添加中文注释的方法 发布时间:2020-08-24 17:09:52 来源:亿速云 阅读:77 作者:小新 这篇文章主要介绍python编程时添加中文注释的方法,文中介绍的非常详细, ...

  9. Java如何控制用户输入的长度,用Java Applet 进行Web编程时,如何限制输入域中可输入字符的长度!解决后马上给分!!!...

    用Java Applet 进行Web编程时,如何限制输入域中可输入字符的长度!解决后马上给分!!! | create a new class FixLengthDocument extends Pla ...

最新文章

  1. 35 w年薪,入职CV算法岗,我一个双非本科生如何做到的?
  2. Asp.net MVC 3实例学习之ExtShop(二)——创建母版页
  3. window.opener.document.getElementById(“a”)用标准的Jquery 语言怎么写
  4. WCF从理论到实践(15):响应变化
  5. 面试后总是没有结果的7大原因
  6. 树莓派学习笔记—— 源代码方式安装opencv
  7. Dephi7程序设计与开发技术大全(求是科技)
  8. printf函数输出超出int时怎么办
  9. 前谷歌资深架构师:真正搞懂spring底层到底有什么好处?
  10. Learn Linux The Hard Way — LinuxTOY
  11. http服务器和application服务器区别
  12. 企业系统门户需要哪些模块_人力资源管理系统的主要功能模块有哪些?
  13. python语言的基本数据类型_python语言基本数据类型-深浅拷贝
  14. SOUI使用过程知识点小结1
  15. 社群怎么建立,怎么做好社群营销?
  16. 测试人员如何提高API功能测试效率?
  17. systemctl 是管制服务的主要工具
  18. 什么是数学建模?如何在数学建模中拿奖?通过建模学到了啥?
  19. 工厂设备管理远程监控方案
  20. 捷联惯导中的姿态更新

热门文章

  1. exchange创建邮箱组_Exchange批量创建用户组及启用通讯组邮箱-阿里云开发者社区...
  2. oracle典型安装配置,Oracle的安装配置一些有关问题
  3. 剑指Offer之翻转单词顺序列
  4. PAT 甲级 1002
  5. 获取当前ip_百度定位:IP定位、浏览器定位、SDK辅助定位
  6. android titlebar 高度是多少,什么是TitleBar的默认高度和Android中Titlebar中的默认TextSize?...
  7. 【IT】学生数据库小结2
  8. php session 统计在线人数,利用文件属性结合session实现在线人数统计_php实例
  9. 中国开发者数量全球第二,C 语言一跌再跌 | GitHub 年度报告发布
  10. 超大规模NLP模型升级,来智源大会见证世界记录的刷新