Redis之父:我可不止是一只码农-程序员宅基地

技术标签: java  bug  go  makefile  编程语言  

d8786588212c2c732e5c2424404877cc.jpeg

一年前我暂停了写代码后开始尝试写科幻小说时,以为这是两条完全不一样的路子。随着写的文字越来越多,不断的推倒重写那也是家常便饭了。我现在总算非常确定了,撸一个大系统和写一本小说本质上其实差不太多,它们之间那是非常相似的。【这里我们允许 Antirez 凡尔赛一把】

One year ago I paused my programming life and started writing a novel, with the illusion that my new activity was deeply different than the previous one. A river of words later, written but more often rewritten, I’m pretty sure of the contrary: programming big systems and writing novels have many common traits and similar processes.

最显而易见的共同之处,那就是这两种活都是在搬砖,一个是搬代码,一个是搬单词。代码当然不是用自然语言编写的,但是它同样也有自己的语法规则,这种规则一般只有程序员自己能懂,对外行人来说那就两眼一抹黑啦。

The most obvious parallel between the two activities is that in both of them you write something. Code is not prose written in a natural language, yet it has a set of fixed rules (a grammar), certain forms that most programmers will understand as natural and others that, while formally correct, will sound hard to grasp.

如果再深入一点,你会发现写小说跟写代码一样,都是在摆弄各种全局和局部变量,让它们在一起协作好。好的代码是由一系列精妙易读的语句组成【微观】,整体上不同的组件之间是尽可能正交解耦的,交互的边界非常清晰【宏观】。好的小说在微观和宏观这两个尺度上也是一样的,每个句子都要写的很漂亮,全局的层次结构和文章脉络同样也很关键。

There is, however, a much deeper connection between the two activities: a good program and a good novel are both the sum of local and global elements that work well. Good code must be composed of well written and readable single statements, but overall the different parts of the program must be orthogonal, designed in a coherent way, and have clean interactions. A good novel must also succeed in the same two scales of the micro and the macro. Sentences must be well written, but the overall structure and relationship between the parts is also crucial.

代码和小说之间还有一个不那么明显的相通之处,那就是你需要持续不断往前走以追究极致,它们并不是很轻松自然而然就写出来的。关于这一点,二十多年的代码生涯帮我很大,我知道我必须夜以继日的写,今天也许是写了 100 字,明天也许会写 2000 字,但是通常你不会一天下来一个字都不写的。当你想抱着一种创造性的心态来完成你的大作时,就会经常深切地感受到什么叫文思枯竭。但是也不完全相同,作为工程师如果一天不写代码会被认为是懒惰是懈怠。但是对于艺术家,这就不一样了,慵懒的心态是创作时必须的灵感之源。

A less structural link between programming and writing is in the drive you need when approaching one or the other: to succeed you need to make progresses, and to make progresses you have to be consistent. There is extensive agreement on the fact that programs and novels don’t write themselves, yet. Twenty years of writing code helped me immensely with this aspect; I knew that things happen only if you sit every day and write: one day one hundred words, the other day two thousands, but rare is the day I don’t put words on the page. And if you have written code that is not just a “filler” for a bigger system, but a creation of your own, you know that writer block also happens in programming. The only difference is that for most people you are an engineer, hence, if you don’t work, you are lazy. The same laziness, in the case of an artist, will assume the shape of a fascinating part of the creative process.

接下来我们重点谈谈不一样的地方。

The differences.

写小说和写代码最大的不同之处在于文字经过编辑校对定稿后就基本不会再修改了,也会有些时候作者在多年之后会对原作进行局部小修正然后再发布一个新版,但是这不多见,而且这通常也只是一锤子买卖。代码就不是这样的,它需要不断修改,需求源源不断到来,而且还经常是多人一起改。也正因此产生了两种不同的行为模式:程序员会觉得系统的初版无关紧要,反正时间总是要改进它。但是作家就不行,对于每一本小说他只有一次机会写出来,所以需要不断反复的推倒重写。说起来你可能不信,其中的每个句子、每个章节、对话都要重写两三次,有时候甚至要重写数十次。

I believe the most sharp difference between writing and programming is that, once written, edited and finalized, a novel remains immutable, mostly. There are several cases of writers returning on their novels after several years, publishing a bug fixed version of it, but this is rare and, even when happens, a one-shot process. Code evolves over time, is targeted by an endless stream of changes, often performed by multiple people. This simple fact has profound effects on the two processes: programmers often believe that the first version of a system can be quite imperfect; after all there will be time to make improvements. On the other hand writers know they have a single bullet for every novel, to the point that writing prose is mostly the act of rewriting. Rewriting sentences, whole chapters, dialogues that sound fake, sometimes two, three, or even ten times.

写代码还是需要向写小说学习一下的,学习作家对待小说原版的那种认真劲:在初创的过程中随心所欲、大刀阔斧、反复不断的修改内核,力求做到最优雅的设计。我认为系统最初的设计会非常影响后续的发展【好比性格决定命运】,平滑自然的演进才会慢慢诞生出一个漂亮完美的系统,即使是在多年之后,系统整体上已经面目全非,最初的版本只是其中的极小一部分。

I believe programming, in this regard, can learn something from writing: when writing the first core of a new system, when the original creator is still alone, isolated, able to do anything, she should pretend that this first core is her only bullet. During the genesis of the system she should rewrite this primitive kernel again and again, in order to find the best possible design. My hypothesis is that this initial design will greatly inform what will happen later: growing organically something that has a good initial structure will result in a better system, even after years of distance from the original creation, and even if the original core was just a tiny faction of the future mass the system would eventually assume.

最后再提一下我最近写的科幻小说,我估计大家会很感兴趣。自己检查了很多遍之后,总算把它发给了我的编辑,他叫 Giulio Mozzi,未来几周他会给我提一些修改意见。我会参考他的说明来重新进行一轮检查,期望未来一两个月能完成定稿。然后我就会发布这第一个意大利语版本,同时还会让我远在美国的翻译来搞定发表英文的版本。作家之路漫漫其修远兮,吾将上下而求索。

In case you are interested, a quick update about my sci-fi novel. After many self-reviews I sent the manuscript to my editor, Giulio Mozzi. He will send me the change proposals in a few weeks. I’ll start a new review process informed by his notes, and hopefully finalize the novel in one or two months. Then, finally, I’ll be ready to publish the Italian version. At the same time the finalized novel will be sent to my translator, in the US, and when she ends the translation the English version will be published as well. It’s a long journey, but one that I deeply enjoyed taking.

09d36661b8032f1a4932fda9ecb3e1fb.jpeg

扫一扫关注【码洞】

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/shellquery/article/details/116868706

智能推荐

计算机改了域名后无法共享,计算机的工作组名或域名、计算机名等区分计算机特征的配置不得随意修改,但可以自 - 问答库...-程序员宅基地

文章浏览阅读102次。问题:[判断题] 计算机的工作组名或域名、计算机名等区分计算机特征的配置不得随意修改,但可以自行修改计算机的IP地址。()A . 正确B . 错误工商专网为非涉密网,与政务内网实现数据共享,可以直接相连。() 正确。 错误。上官夫妇目前均刚过35岁,打算20年后即55岁时退休,估计夫妇俩退休后第一年的生活费用为8万元(退休后每年初从退休金中取出当年的生活费用)。考虑到通货膨胀的因素,夫妇俩每年的..._域名能否替代计算机名

input的placeholder设置字体颜色_input中placeholder的字体颜色-程序员宅基地

文章浏览阅读474次。具体的写法::-moz-placeholder { /* Mozilla Firefox 4 to 18 */ color: #fff; font-size: 0.56rem;opacity: 0.8;}::-moz-placeholder { /* Mozilla Firefox 19+ */ color: #fff; font-size: 0.56rem_input中placeholder的字体颜色

为什么使用工作流引擎,什么是工作流引擎,工作流引擎选型以及如何使用_工作流引擎是什么-程序员宅基地

文章浏览阅读1.3w次,点赞24次,收藏144次。文章目录为什么使用工作流引擎?不使用工作流存在以下问题工作流优缺点什么是工作流引擎尝试自己构建工作流引擎有哪些选型方案呢基于bpmn标准进行流程定义国产自定义如何使用SnakerFlow工作流以请假流程来看下数据库中数据流转情况初始状态员工发起请假申请常见功能流程标题发起申请我的发起我的待办我的已办催办转办驳回撤回抄送加签会签或签为什么使用工作流引擎?反证法,如果不使用工作流引擎,先以请假流程举例,从头开始开发流程的业务逻辑:(来看看会出现哪些问题?使用工作流能解决哪些问题?又会带来什么问题?)一_工作流引擎是什么

CTF题库>因缺思汀的绕过_preg_match(/.$arrreq./is,$strvalue)==1-程序员宅基地

文章浏览阅读435次。访问解题链接去访问题目,可以进行答题。根据web题一般解题思路去解答此题。看源码,请求,响应等。提交与题目要求一致的内容即可返回flag。然后提交正确的flag即可得分。web题主要考察SQL注入,XSS等相关知识。涉及方向较多。此题主要涉及源码审计,MySQL相关的知识。flag格式 CTF{}我们访问网站之后 出现这个我们要先进行查看源码发现了 sourc..._preg_match(/.$arrreq./is,$strvalue)==1

SpringMVC基础之三->SpringMVC的使用_prehandle requestbody-程序员宅基地

文章浏览阅读90次。1、SpringMVC的返回JSON数据​ 到目前为止我们编写的所有Controller的方法的返回值都是String类型,但是大家应该都知道,我们有时候数据传递特别是在ajax中,我们返回的数据经常需要使用json,那么如何来保证返回的数据的是json格式呢?使用@ResponseBody注解pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0_prehandle requestbody

java开发Demo~微信扫码支付,java开发示例-程序员宅基地

文章浏览阅读550次。开发所需工具类开发所需jar具体的代码不贴了,说明下PayConfigUtil中的参数APP_ID和APP_SECRET在公众平台MCH_ID和API_KEY在商户平台,其中API_KEY是自己设置的,并不是自动生成的。Controlle..._微信支付对应示例 java appid secret

随便推点

Expression Blend 的点滴(3)--Templating的妙用,制作自己的ScrollBar控件-程序员宅基地

文章浏览阅读63次。在Blend中,有一个功能,Make into control---通过它可以方便的自定义各种个性化的控件,例如把图片,文本,或者几何形状等等变成Button控件。当然,不只是Button可以变,还有各种各样的控件,几乎包括了所以的基本控件,而它们的外观到底是什么样,那就取决于你的创造力了。今天,就继续练习下这个功能的使用,跟着我一起做吧,你会发现blend真的很棒,当然,开始的时候可能会觉得过程...

NPM 相关命令,报错 node-gyp... 的解决方法_node-gyp-build-程序员宅基地

文章浏览阅读7k次,点赞2次,收藏3次。'node-gyp-build' is not recognized as an internal or external command, operable program or batch file.npm ERR! gyp verb `which` failed Error: not found: python2_node-gyp-build

python规定浮点数类型可以不带小数部分吗_Python标准数据类型-数字-程序员宅基地

文章浏览阅读2.8k次。Python内置了整数、复数、浮点数三种数字类型。整数整数是没有小数部分的数值,与数学上的一样:>>> 11>>> -1-1整数没有大小限制,只要你的内存足够大,就可以创建任意大小的整数:>>> 111111111111111111111111111111111111111111111111111111111111111111111111111..._python 语言的浮点数可以不带小数部分

“USART_FLAG_TXE“ & “USART_FLAG_TC“_usart_flag_tc是什么-程序员宅基地

文章浏览阅读490次。USART_FLAG_TXE:表示数据缓冲区是否为空,为空时置1,表示可以写数据到数据缓冲区,有可能数据没有发送完。USART_FLAG_TC:表示数据缓冲区的数据发送是否完成。如果最后一次发送到数据缓冲区的数据完成了从移位寄存器到。信号线TX时,才置1,表示数据发送完成,也就是说,这个标志位真正表示数据发送完成。清除TC需要:1.读SR寄存器 & 写DR寄存器;或者 2.直接给TC赋值0;_usart_flag_tc是什么

安装ftp连接linux服务器配置,Linux下FTP安装及配置(VSFTPD服务器安装配置、FTP客户端安装配置)...-程序员宅基地

文章浏览阅读348次。安装说明安装环境:CentOS-6.3安装方式:yum安装、rpm源码安装软件:ftp-0.17-51.1.el6.x86_64.rpm下载地址:http://pan.baidu.com/s/1mgHQ0GS环境说明: Linux下有FTP服务,FTP分为服务器端和客户端,某台机器作为FTP服务器,需要安装配置启动vsftpd服务,另一台机器作为客户端,需要安装有ftp客户端或者lftp的rpm包..._ftp-0.17-51.1.el6.x86_64.rpm

高效率OCR场景文字图片合成工具发布!_可控ocr图像生成-程序员宅基地

文章浏览阅读7.2k次,点赞61次,收藏12次。OCR,光学字符识别(OPTICAL CHARACTER RECOGNITION),作为计算机视觉领域的经典问题之一它指对图像中的文字进行检测识别(包括文字检测+文字识别),并获取文本的结果。常见于拍照检查、文档识别、证照票据识别、车牌识别、自然场景下的文本定位识别等,相关技术在数字时代得到了广泛的应用。如下图是OCR识别结果:作为计算机视觉领域的OCR识别在训练的时候当然也会需要大量的图片数据来供神经网络的学习,一般需要数以千万计的图片才能训练一个文字识别系统,才能达到识别文字的目的。但是如果采用_可控ocr图像生成

推荐文章

热门文章

相关标签