5个编程'graybeards'的更永恒课程

年轻也许是人力资源部门想要的,但没有人能像一个资深的编程专家那样快速地编写代码

硅谷的人力资源部门和招聘经理有挑战。他们不能要求申请人的年龄,因为他们的公司多年来失去了残酷的歧视诉讼。相反,他们培养了折叠倾斜的“布拉迪束”(“Marcia,Marcia,Marcia!”)的小技巧,并看到候选人是否得到笑话。笑声被认为是一种糟糕的文化契合,并被抛弃。

可惜的是,计算机行业对新技术、新范式,当然还有新程序员有着一种奇怪的、狂热的迷恋。它的魅力大于现实,因为旧技术永远不会真正消亡。像大型机这样的老发明可能不再成为头条新闻,但它们一直在运行。在我写这篇文章时,Dice显示的关键词“Cobol”的招聘信息(522个)是“OCaml”、“Erlang”和“Haskell”的总和(分别为11个、52个和27个)的五倍多。

年龄歧视的故事很常见,合理化也是如此。年轻的程序员头脑中不会充满旧的想法,所以他们学得更快。自以为是的人更专注、更勤奋。他们不受干扰,比如拥有家庭,或者至少他们的干扰让他们与个人电脑和智能手机捆绑在一起。

即使这些都是真的——有证据表明它们不是——编程怪杰们拥有宝贵的智慧,你不能仅仅通过在YouTube上观看TED演讲或通过MOOC快进来吸收。他们更了解电脑是如何工作的,因为他们不得不回到电脑有开关的前面板的时候。他们没有ide层、优化编译器和持续集成来拯救自己。如果他们不从一开始就把它建好,它就根本无法运行。年轻的小混混们好几年都不会知道。

我们的最后一个故事“编程“灰胡子”的7个永恒教训引起了很多人的反应,所以我们又回来了,每个人都应该从他们干瘪、坚强的同事身上学习或重新学习5个教训。

汇编器

大多数50岁以下的人都听不出这样的话mov啊,09hcmp eax, ebx.许多人可能认为,计算机自然需要大量的花括号,因为主要语言使用它们来分隔代码块。即使是那些理解像Java或C这样的语言必须被翻译成二进制的人,通常也很少或根本没有编写这些语言的经验。

许多老程序员每天都在编写汇编代码,这是对人类可读的原始二进制机器代码的称呼。有些人实际上可以手工转换程序集代码,并将其转换为十六进制字节。然后,最优秀的人就可以拨动前面板上的拨动开关,为计算机编程。

写作汇编程序不是很大的或重要的。这是一个漫长的漫步,充满了重复和许多机会来制作邋x的错误。编译器已经足够好以识别可以优化的复杂模式;事实上,一些编译器创造者喜欢吹嘘他们可以创造比人类更好的代码。

这也许是对的,但是学习汇编语言的好处是你了解了计算机是如何工作的。高阶语言可能为标准操作提供许多快捷方式,例如连接字符串,但这可能是一个陷阱,因为程序员开始认为加操作数("+)无论是两个整数相加还是连接两个字符串都需要相同的时间。它不是。一种操作需要的时间要长得多,理解汇编代码和JMP(跳转)操作工作方式的人将做出正确的决定。

理解对象是如何打包在内存中并在必要时加载到CPU中的,这对于最大限度地减少可能产生慢代码的复制和过度计算有很大帮助。在汇编程序中长大的人可能不太记得编写x86代码,但当他们开始做一些本来就很慢的事情时,他们仍然有一种本能。这些自以为是的人没有这些本能,除非他们通过经验训练自己。

声音和灯光

很久以前,一个程序员告诉我他讨厌Unix。为什么?他开始编写单用户微型计算机,比如牵牛星或Sol 20,每次只运行一个代码块。

“UNIX电脑随时将开始运行其他内容,”他告诉我。“你会听到软盘启动,你不知道为什么。”

这让他很沮丧,因为他失去了理解计算机正在做什么的强大方法。没有人真正知道现代电脑里发生了什么。在4核或8核上运行的软件有无数层。病毒和蠕虫可以永远存活而不被用户察觉。

旧程序员仍然观看视觉和听觉线索,帮助他们理解和调试代码。它们在数据流动时闪烁的RJ-45以太网插孔上的灯光。他们收听硬盘,可以听到磁盘开始更改轨道时,指示某些东西要么读取或写入磁盘。真正的好的人可以讲述当内存充满时发生的分页和持续读写的分页之间的差异。

随着硬盘被固态硬盘取代,越来越多的数据通过无线传输而不是通过闪烁的路由器传输,这些线索的价值正在逐渐消失。但只要智能手机上没有显示数据何时流动的指标,这样的侦查技能就会有价值。

Bitbanging

在过去,程序员会将多达8个不同的布尔值打包到一个字节中。他们把每一个比特都翻转过来,因为他们不想浪费任何一个比特。

现代数据结构非常浪费。XML中充满了长名称的标记,每个标记都有一个带有额外斜杠的匹配结束标记。为了满足严格的解析规则,现代XML文件中添加了超过90%的废话,这种情况并不少见。

JSON被认为是一个改进,因为它有点小,但只有因为没有关闭标签 - 只是卷曲括号。所有标记和字符串上仍有太多引号。

好消息是现代压缩算法通常可以挤出数据结构的大部分脂肪。但他们永远无法得到所有的东西。Graybeards知道如何从一开始就避免将其放入。这就是为什么MS-DOS 3.0等代码可以在不超过32MB的分区内快速和光线运行。请注意修饰符:没有超过.这是3200万字节和最大值磁盘分区大小。

来自20世纪80年代初的MS-DOS 3.0日期的详细信息,个人计算机已经普遍的时间,电脑革命越过其婴儿期。如果你回到多次,那么20世纪70年代的代码甚至更瘦。20世纪60年代的代码很棒。

二进制数学

测试和翻转位的操作不仅仅是早期程序员的新科技;他们是必需品。一些操作如此缓慢,程序员必须寻找他们能找到的任何优势。最好的是理解,除以两个相当于将二进制数转移到右侧,例如除以10与向右移动十进制数相同。

移位所有位是cpu上的标准操作,与基本的除法相比,它通常要快得多。优秀的程序员利用这一优势编写更快的代码,无需等待乘法和除法,而移位也可以完成同样的工作。

我们失去了与2的幂的联系。过去,设计师会本能地选择2的幂数,因为它们会带来更高的效率。像512或4096这样的数字经常出现,因为处理2的幂的极限更容易。

小细节加起来

在许多早期的处理器上,有些操作花费的时间要比其他操作长得多。在最初的8086中,一个数字的除法需要80到190个时钟周期,而两个数字的相加只需要3个周期。即使CPU可以以5MHz的频率运行,反复执行操作时仍然会产生很大的差异。

老程序员知道,不是每一行代码或每条指令都会在相同的时间内执行。他们明白计算不是免费的,也不是每一行代码都是等价的。如果选择了错误的操作方式,您的机器就会显著地变慢。

人们忘记选择错误的数据类型也可能产生后果。使用双重或长变量仍然可以在某些芯片上慢。使用错误的数据结构可以将程序转换为缩放的污泥。

太多的年轻人认为计算是瞬间,CPU可以在眨眼之间进行无限数量的计算。他们的长辈记得慢慢的CPU,在被要求分裂时会推动加入并抓住。所有的小细节都聚集了多年的黑客,调试和重新攻击其代码加起来。你得到这种知识的唯一方法是随着时间的推移。

相关文章

这个故事,“5个永恒的编程经验”最初发表于信息世界

加入网络世界社区足球竞猜app软件Facebook.LinkedIn评论是最重要的主题。

版权©2016足球竞彩网下载

IT薪水调查:结果在