回答读者关于科技点滴的问题

2020-09-26 01:06:59

现在是对读者反馈进行一轮回应的时候了。这一条略有不同,因为它是来自单个匿名提交者的许多问题中的一个斑点。这在很大程度上是关于技术和编程语言的,我现在只想警告你,我在这方面往往很无聊。如果你一定要读下去,那就继续读下去吧!

你对AVX-512有什么看法?您是否在任何项目中使用过它来加速您的代码?你有没有涉足过机器学习/深度学习?C++仍然是您选择的语言,还是您也在使用Python?如果你不使用Python,我会很惊讶,因为据我所知,了解Python或能够学习Python几乎是在谷歌工作的必要条件。你有没有在任何工作岗位上被迫学习一门新语言,或者因为客户的要求而被迫学习一门新语言?体验如何?你精通几种编程语言?这些天你更喜欢英特尔还是AMD?你有没有做过GPGPU的事情?区块链相关的东西怎么样?我知道呀。太多问题了。(我只是好奇:)。

AVX-512?我得查一查才能确定。它似乎是一堆英特尔特有的扩展,可以让你以更狂野和更古怪的方式处理数字。鉴于我不直接编写x86[-64]程序集,它不是故意添加到我的任何项目中的东西。在不太可能的情况下,一些编译器知道它并决定将其烘焙成二进制文件,我*猜*它可能就在那里,但不是因为我要求它。

最有可能的情况是在低级别的GNU无线电数字处理工具(Volk)中,但即使到那时,它也会在我不太了解的情况下进行。我从来没有太多的图形或任何类似的东西,所以所有的MMX,SSE,和其他在过去20年里出现的东西大多不在我的视线之内。

机器学习和深度学习?不,不太喜欢。这听起来像是另一个数字/数学繁重的领域,这本来就不是我的拿手好戏。这与AVX的问题联系在一起:我最终做的事情通常不会调用任何这样的东西。

C++仍然是我处理随机东西的默认语言,并不是说我现在正在大量构建东西。我有我现有的项目,并且一直在试验类似线程的东西,如果线程不是对象怎么办。请记住,我选择的语言是由实际需要驱动的,就像六年前一样。

如果可以的话,我不会使用Python。Python有时间和地点,就像shell脚本有时间和地点一样,但您很快就会超出两者的理智极限。我上一个任何规模的Python项目都是在现有的代码库上完成的,在这个环境中,一切都不存在-Python被视为充其量不存在,或者在某些情况下带有强烈的敌意。我们不需要重写这段代码,我只是保留了现有的Python基础,并在其中编写了所需的所有内容。

顺便说一句,这个项目是我对Python、Gunicorn、Gevent和Flask的延伸感受的地方。我用它做的事情是小而愚蠢的,因为它只被人类和他们的网络浏览器点击,但同样的技术栈正被用于服务,而且在这方面做得很糟糕。它的效率低得令人难以置信,而且到处都是失败的请求,因为它会做前面描述的在greenlet上处理多个请求的事情,并且会使大量请求超时。

这个系统基于“大量”重试,而不仅仅是客户端的重试,这一点任何人都不应该感到惊讶。还有内部重试倍增器,这样当另一个后端系统出现故障时,其他邻近的服务将增加重试并将其煮沸。一个来自外部世界的请求可能会变成数十个来自内部的请求,其中许多都是徒劳的。

我甚至不会进入这样的场景:服务A将同时向服务B发送多个相同的请求,然后接受第一个响应并丢弃第二个连接。当受到挑战时,他们称其为优化。我称这是浪费资源,是对糟糕实现的合理化。

人们想知道为什么他们的云账单这么高,或者为什么他们手中手机上运行的应用程序有时看起来如此迟缓。像这样的东西。

关于Google和Python,是的,早在2006年,他们就试图让我把它们用在一个初级阶段的项目中。考虑到我必须同时学习内部秘诀,我认为一个未知就足够了,于是用C++来代替。它的结局很糟糕,在很大程度上是因为评论者似乎对我拒绝了他宝贵的Python这一事实有真正的问题。

几年后,我在谷歌(Google)做了一个全面的Python项目,我看到了一些令人惊叹的事情,比如当你向一个已经在运行线程的程序中添加forks(没有后续执行程序)时会发生什么。我还看到了它的一般意义,当我说我们不应该发货时,它就是这样做的:

事实上,我们没能在运往生产之前捕捉到它并让它爆炸,这让我震惊不已。作为一个有很长一段时间编写东西的人,你不明白为什么要用这种方式构建一个有很多活动部件的大系统。这是完全可以避免的!

我是不是被迫为工作或客户学习一门语言?我想是吧?我的意思是,我在2006年进入谷歌时并不懂C++,也不是很懂,结果比那好一些(没有人真正完全了解一门语言,除非他们自己写的,甚至可能到那时也不懂)。在那之后的几年里,用它做事情已经让它变得相当紧了。

我精通几种编程语言?呃,嗯,嗯。嗯。我猜问题在于,这是否涉及到考虑其他事情,还是只是凭空根据需求而变出魔术。

如果你想要一些东西,我不需要看任何其他东西,只要有合理的深度,那就是C++和C++。

一旦你进入了语言领域,你可能不得不去查找一些东西,现在你谈论的是许多其他语言,其中许多我以前每天都在使用,当时这些都是我的东西。

一个这样的例子:Basic,特别是多个变体:MS Basic的Commodore v2&34;风格,gwbasic,IBM的ROM Basic在他们的PC机型上找到,是的,DOS上的MS QuickBasic。我仍然可以抓住这些环境中的任何一个,然后做一些愚蠢的事情,比如让它在循环中打印一些东西,但是可能不再有更好的点了。自从我上一次认真做这些事以来,已经有25年左右了吧?

另一种:涡轮帕斯卡(Turbo Pascal)。这里也有同样的事情:我可能会让一个程序编译一些愚蠢的东西并将其写入显示器,但是像文件I/O(分配、重写、重置?)这样的东西的细节呢?需要一些令人耳目一新的眼神。

这份名单就是这样继续下去的。这些年来,我还使用过Python、Java、Perl、JavaScript,可能还有其他一些可怕的东西来完成一些工作。在这一点上,我不会期望能够用它们中的任何一个来编写可靠的代码。有时候,这是因为一开始就没有费心去深入其中,有时只是因为随着时间的推移而蒸发掉了。

我一般认为,如果有需要,我会找到一种在特定环境下有用的方法。因此,如果你测试我现在所知道的,你可能会得到一个答案,但如果你事后回顾我的所作所为,你会得到完全不同的东西。有趣的是,考虑到面试倾向于寻找前者而不是后者,对吗?

你现在知道什么和你能做什么,永远?这是非常不同的事情。

至于英特尔与AMD的对比,嗯,我讨厌硬件,我尽量不去跟踪它,直到它变得重要起来,比如机器坏了必须更换,或者一些新的需求需要比我现在拥有的更高的CPU能力。然后,我必须了解自上次我寻找并解决另一个像样的系统以来,该行业提出的所有新的疯狂之处。

我有过基于AMD的机器和基于英特尔的机器。我唯一真正喜欢的是绝对不想在CPU热保护设备失灵的情况下烧毁我的房子。那段AMD CPU在散热片被掀开时开始冒烟的视频给我留下了相当深刻的印象,此后的几年里,这段视频给我留下了相当深刻的印象。

GPGPU-明智的,嗯,再说一次,不是我喜欢的。不做图形或数学繁重的工作和讨厌硬件世界的结合,基本上意味着我可以忽略那个世界的最新疯狂之处。不是电脑游戏玩家或比特币矿工也意味着我不必关心它。

所有那些在90年代一直在拼命粘上附加板的人,或者为了奇数扫描线而做一块板,为了双数而做另一块板,以及为了FPS和所有这些而争吵的那些人?完全不是我喜欢的场景。我只是站在一旁,嘲笑整个烂摊子,基本上还是这样。

如果某项技术没有引起问题或成为问题的解决方案,那么这项技术的存在并不意味着它就在我的雷达上。有太多的事情在进行,甚至不能尝试不同的方式。