通常我会坐下来一口气把这些写下来。这个月,我让IA Writer在窗户里开了一段时间,只是以某种马特·莱文(Matt Levine)式的风格,记录下了我的想法。
一旦你适应了环境,95%的编程都不难。它不涉及算法、硬设计问题、性能或存储限制。这不值得在博客上谈论。
5%或更少的编程是困难的:这是面试问题所指的东西。您可能需要考虑算法,可能需要在决定采用哪种策略之前尝试多种策略。
然而,很容易把95%搞砸--通过糟糕的日常工程实践,通过过度复杂化问题,以及许多其他方式。把95%搞砸是很常见的,而这些数字表明,你在做“简单”事情的系统中有很多错误。
我们应该把注意力放在大多数容易的事情和少数困难的事情上。为什么面试只问你一年需要几次的知识,而不问你每天需要的习惯?我们应该使用一种语言或平台,让例程代码变得方便,还是让人印象深刻的代码更令人印象深刻?
我们都是历史的受害者,但偏执狂是双重受害者,因为他不仅受到现实世界的折磨,与我们其他人一样,也受到他的幻想的困扰。
这仍然是相关的,但我认为偏执狂风格已经改变了两件事:
偏执狂的人赢了。在霍夫斯塔特的时代,它们是一种边缘观点:现在它们是默认的。Qanon和其他边缘理论的半径现在大得惊人。即使是那些不认同Q的人也会不经意地接受它的许多愚蠢理论。
霍夫斯塔特提到的痴迷于引用偏执文学中的事实已经不再是一件事:现代偏执狂不再是一种束缚。
将对象用于数据是JavaScript最糟糕的事情之一。在其他语言中,有一种对象是应用程序的一部分,而另一种对象用于表示数据,这在其他语言中是非常好的。Ruby的Hash、Python的Dictionary、Java的多种数据类型等等。传统上,JavaScript使用相同的基本思想来表示所有类型的对象。
基本上,每当有人试图将JavaScript对象用于数据时,他们都会通过原型污染的方式编写安全漏洞。Map和Set数据类型对此有帮助,但是它们相对不受欢迎,不能直接序列化到JSON中-而且大多数开发人员学习它们的时间都很晚-这意味着很多人只是将对象用于所有事情。而这确实经常是一个问题。
我通常对完成辅助项目的建议包括“要坚持不懈地追求简单性”的一些变体,这意味着要避免特性蔓延。不过,相反的做法更有启发性:知道最酷的部分是什么。例如,这个月我对一个互联网普遍喜欢的YouTube频道做了一个小倍数的可视化。我在一次会议上完成了这个项目,并在过去的45分钟里努力让它具有交互性,这样你就可以点击视频或将鼠标悬停在它们上面,听到每个视频的音频。我对这个过程感到恼火,因为我试图以一种简单和轻量级的方式实现它,但是没有一个。但我决定避免它:因为让东西互动是一件太多的工作,而是因为我知道我已经做的是很酷的部分。互动性可能会让它变得更酷10%,但我已经做过的是驱动问题的体现,核心酷想法的实现。
知道核心的酷点子是什么。附带项目需要一个。如果核心想法不酷,你就不能通过添加更多的东西来让项目变得酷。
作为一本免费有声读物,我正在阅读亨利·乔治的“进步与贫困”,这本书在很长一段时间内影响了我的政治经济倾向。
我现在稍微考虑了一下住房的问题。我住在一个有住房危机的大城市。美国每个大城市都有住房危机。这是我试图提炼的一个想法:
住房既是真实的(它可以使用),也是资本(它是一种价值储存)。在沿海城市,拥有100万美元的房子更类似于拥有100万美元的股票,而不是拥有100万美元的汽车或电脑。实物贬值很快,房子有望增值。买卖汽车就像买卖另一件实实在在的商品,而房地产交易则享有类似股票的税收优惠。但与更普遍接受的资本形式(如股票或债券)不同,房屋的升值被认为是自然的。当它的价值下降时,我们同情所有者,而我们倾向于将暴跌的股票视为一种“预期风险”。
住房不一定要像资本那样,在许多地方也不是,但在美国却是这样:政治左翼和右翼都认为住房是一种创造财富的战略。
结论是:住房不可能同时创造财富,成为一项安全的投资,并且生产足够的数量来避免危机。这就是笑点所在。我们希望它成为两个独家类别的一部分。但事实并非如此,大多数人最终会将投资特征置于人们需要居住的“真正好”的特征之上。
阅读类型:一份程序员简编确实让人明白,软件工程中的大多数亮线定义都不是真实的。什么是“强类型系统”确实定义不清。许多概念也是如此--像“函数式编程”这样的东西更多的是风格,而不是类别。
即使是关于性能的想法也不是真正的…。真实的。比方说,许多语言都有不同的排序实现,具体取决于数据类型和列表长度:说“排序是O(Nlogn)”实际上是一场赌博。
HTML是编程语言吗?答案是差不多吧?您可以在其中执行逻辑,就像您可以在几乎所有系统中执行逻辑一样:CSS是一种编程语言。称一个为“标记”,另一个为…。但它相当奇特的家族的唯一主流例子并不能真正帮助任何人理解任何事情。
我认为我对铁锈最大的失望是它并不简单。它可以创建简单的程序:有了正确的编译器标志,它将生成非常小的可执行文件,并且产生的毛茸茸的东西最少,但是语言本身非常复杂。编译器庞大而凶猛。语言特征繁多而微妙。
其他主流系统都很复杂。V8是一项令人难以置信的工程成就,而且非常非常复杂。实际上,每种语言及其实现都有了显著的发展。
在9-5中几乎没有什么理由担心这种复杂性,但在我的空闲时间,它让我想到了Tmall Basic、Forth和Scheme之类的东西-尽管即使在Scheme的情况下,也很难找到一个没有增加JIT或其他奇特功能的实现。
不管怎么说,我一直在关注Zig--我认为它相当整洁。它不是一种“大创意”语言,只是一种设计得非常干净的类似C的语言,似乎解决了C的主要问题。而且它真的很简单:语法很简单,没有太多的大理论。它似乎占据了当前思维份额的一小部分,但对于很少的CLI工具和系统软件来说,可能真的很重要。
在我开始写这篇文章后,一直很有趣的珠穆朗玛峰Pipkin发布了一份微型工具的清单,这绝对是令人难以置信的-梦幻游戏机充满了简单的核心系统。
在几乎所有方面,世界都在摇摇欲坠。你能做什么?当你可以集中精力的时候,关掉新闻只做一些工作是很有诱惑力的,诚然,这也是我大部分时间都在做的事情。但肯定还有其他原因。
在美国,很明显,这其中的一部分是投票给乔·拜登(Joe Biden)。他是“反世界末日”的候选人,即使他试过,也不会比他的前任做得更差。他不是我的第一选择。但我们不再选择最受欢迎的国家:我们正在努力避免世界末日,没有任何借口可以袖手旁观。如果你不投票而世界末日发生了,我会责怪你。
然后还有其他的竞选活动:向全国各地规模较小、竞争激烈的候选人捐款。我认为,要做到这一点,最聪明的方法是在研究人员挑选的种族之间分配捐款。Maciej CEGłowski有两个这样的努力:伟大的板岩(四次农村住房活动)和州板岩(11次州住房活动)。他研究和面试候选人,设置一个ActBlue页面,在他们之间分配捐款,然后你就可以捐款:这很简单。Blueprint也在做类似的事情-在ActBlue竞选活动之间拆分捐款-但有视觉上的润色,就像一家金融科技公司和更多华盛顿内部员工。这两种方式都是有效地将捐款分配给有用的活动的方式。它们就像是政治变革的价值因素指数基金。
当你将资源分配给有用的竞选活动时,他们通常是在保守地区竞选的民主党人,所以他们经常在一个或多个方面与你脱节。糟糕的是,我的捐款捐给了对移民政策或交通问题持模糊观点的人:但是,再说一次,我们不再挑选最喜欢的人了。
我关注每一个DC都有一段时间了,这是Twitter机器人第一次真正引起共鸣。我从2009年到2017年住在华盛顿,在推特上看到一所熟悉的房子或餐厅闪过,让我时而怀旧,时而感激,时而悲伤。华盛顿是个好地方。
我真的,真的很想停止链接到YouTube。一旦人们在其他地方发表文章,我就换。我强烈建议在你可以的时候使用VLC来看YouTube,这样你就可以在某种程度上免受他们的信息收集和行为修修补补的影响。
顺便说一下,如果你对我可能知道的或能帮上忙的事情有任何疑问,我的电子邮件随时都在。我最近回复了几封友好的电子邮件,感觉不错。