再说一年的第256天

你好 一年的第二百六十五天,如火如荼地进行着,我和来自Avito的家伙要向在编程节那天读过此博客并略有怀旧之情的所有人表示祝贺。


在削减的情况下,我们记得为纪念假期而编写的第一行代码。 还有-我们最记得的代码和程序。 并说明原因。 当然,我们期待您在评论中的故事!



图片中使用哪种编程语言?

今天我们怀旧,所以我们选择了COBOL进行祝贺。 它是第一种标准化的编程语言(于1960年标准化)。 这意味着可以在一台计算机上编写的程序无需进行任何修改就可以在另一台计算机上编译和执行。 在那时,这是一个巨大的突破,当尝试在另一台计算机上运行其他语言时,其他语言需要对程序进行优化,这通常很困难而且很长。


像在COBOL的程序员节快乐一样。 (感谢的游览和代码pik4ez )。


这个帖子是关于什么的?


该职位的想法是在夏季公司聚会上诞生的,当时我和我的同事突然开始谈论编程的第一步。 伊塞雷金和我决定收集他们的回忆并与公众分享。 所以...


第一行代码


在第一行代码中似乎很有趣? 一开始也有人这样认为。


开发人员1:我认为每个人都有第一行代码,例如:


!#/bin/bash echo "Hello World" 

Dev 2:在我们所在地区更快: MsgBox "Hello World" 因为您仍然必须尝试使用​​Linux查找磁盘。


也许有人会说,讨论已经从聊天中的第一句话开始。 然后,我们得到了一些有趣且详细的答案,我们想分享。 这就是Avito的同事告诉我们的。


图片

搜索基础架构负责人Andrey Shodan Aksyonov “我基本上输入计算机的第一行代码绝对不是我的。 这些是我从杂志上转载的一些奇怪的基本程序(由于童年的严酷,是八位玩具)。 但是我确切地记得其他人如何第一次使用我的程序。

这是DOS终结的时代。 我编写了一个汇编程序,以图形方式捕获了屏幕。 此外,与“市场”上的所有商品形成鲜明对比的是,她一般都应对所有的视频模式,包括完全疯狂的黑客模式。 例如,如果标准VGA操作模式为320x200和256色,那么人们使用某种恶作剧并重新编程控制器(驱动射线通过MDG管),就可以达到360x240。 我设法编写了一个解决所有问题的程序,捕获了屏幕(视频内存),将其保存到文件中,然后可以从此转储中巧妙地将.bmp保存为单独的脱机实用程序。 我把这个程序放到最后,将其发布到Internet上并成功忘记了。

从那一刻起已经过去了12到15年。 我收到了一封电子邮件。 就像列夫·托尔斯泰(Leo Tolstoy)所写的那样,这张纸上有三张纸-这只是第一句话。 “你好,我是加拿大的卡车司机。 程序的活动用户。 我没有钱,但是我有五个孩子。 我在垃圾场中找到了第486台计算机,并且我在互联网上偷了一些旧游戏,现在我的孩子正在这台计算机上疯狂地玩着各种游戏。 同时,他们最喜欢的游戏不知道如何保存任何东西:不可能保存一个共同的荣誉委员会,甚至不可能保存一个最高得分,甚至不能截图,因为使用了某种上瘾的视频模式。 您的实用程序在这方面做得很好,孩子们经常使用它。 是的,我本人,这是在两次飞行之间发生的...因此,由于我们是您的古老计划的活跃用户,所以我决定鼓励您。 这是20美元的西联汇款代码。” 我几乎哭了,并决定在最黑暗的一天,当它终于到来时,我会饿了,在这里,我将拿走这个MTCN(转移代码),兑现它和门口。 不幸的是,从那时起已经过去了许多年,所以现在不知道MTCN在哪里。 如果我在这段时间内没有丢失邮件,那么也许有旧的邮件存档。 我认识到最黑的日子。”

图片

领先的iOS开发人员Artyom Razinov: “在五年级时,我自己在儿童程序Logo Mira中编写了代码,而其他所有成功的人都玩了游戏。 我创建了一个程序,它起作用了。 那天我决定成为一名程序员。”



图片

高级android开发人员Daniil Popov: s := width * height; “这是Pascal上的一条线,计算出矩形的面积。 该案例是针对八年级学生的编程课程。 使我印象最深的是,我可以给计算机命令,然后隐式执行它们。 一种机器大师。 从那时起,当组合的动作序列(算法)产生结果时,我真的很喜欢它。”

图片

高级后端开发人员Dmitry Belov: “这是外国自由职业者的第一份订单。 饥饿的学生,我想至少挣一点钱,写什么东西并不重要:几乎没有知识,无论如何都要从头开始学习。

我接到命令制作动画闪存卡。 我必须学习一些动作脚本。 Stackoverflow还不存在,我不得不阅读文档。

客户感到满意,我设法立即完成了该项目。 他靠自由职业者赚了头十五美元。”

图片

前端开发人员Ilya Gribov: “我很喜欢从学校8年级(Basic,Pascal)开始编程,但是那段时间很长。 他大学毕业后才重返公司,必须记住很多事情!
上班前的冬天,早上6点,喝浓咖啡(那时我完全从事IT工作)

 static void main(String[] args) { System.out.println("!"); } 


情感:什么是String [] args ???”。

图片

高级前端开发人员弗拉基米尔·阿基莫夫(Vladimir Akimov): “编写第一行代码是因为我真的很想参加说唱聚会。 我大约17岁,我不知道如何说唱和写音乐,因此决定通过设计加入一支很酷的团队。

那时没有人参与在互联网上推广独立艺术家。 因此,朋友将画出封面,释放光盘并将其分发给朋友。 还有一个MySpace网站,您可以在其中轻松地设计音乐家的页面。 我看着海外的人如何做。 在某个时候,我遇到了一个住在德国并为Seryoga做专页的人。 唱过《黑人潮,记得》的人吗? 我决定监视如何做到这一点。 MySpace放在桌子上,我整理了整页,了解了他的想法并借用了它。

我的第一页和他的页相似。 我接二连三地尝试提升他们。 所以我和一个团队交了朋友。 有位设计师邀请我编写代码,并为自己照相。 我们开始为所有受欢迎的俄罗斯说唱艺术家创建MySpace页面。 然后,我被邀请在圣彼得堡MySpace办公室工作。
然后,我在那里写了很多行代码-表格类型相同:是CSS和布局,没什么复杂的。 现在,任何初级用户都可以解决它并使其更凉爽。 但这是一个“哇”,因为我们使用了IE5和其他浏览器,为此不得不做很多魔术。

如果不是这个故事,那我就不会从事编程,我不会来设计,我也不了解它是什么。”

图片

后端开发人员Konstantin Seleznev: “我的同学”迷上了七年级的编程知识(确实像药物一样):
-Pss,老兄,您要编程吗? -他告诉我的方式是类似的,并递给我一张与Borland Development Studio的光盘以及关于Delphi的大量文章。

后来,在其中一篇文章中,我发现了以下内容:“让我们认识用户。 例如,我们突然显示消息“该睡觉了”,然后……拆下显示器! 曲柄将无法打开...”。 我尝试了本文中给出的代码,一切对我来说都算成功! 我觉得自己像个真正的黑客!

但是,在那之后,我不得不重新启动计算机,因为我确实无法重新打开显示器。”

 procedure TForm1.Button1Click(Sender: TObject); begin MessageDlg(' .   .     !', mtInformation, [mbOk], 0); SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0); end; 



以下是主要播客Podlodka的故事。


图片

Tutu.ru移动开发负责人Stas Tsyganov: “我的母亲曾担任计算机科学老师,而我很早就可以使用计算机。 我最初的编程经验是用于MS-DOS的Cucaracha。 我很感兴趣地得知她还活着,甚至移植到Windows。

    5   


我拥有的第一个代码就是这样。”

图片

Avito应用程序平台开发经理Egor Tolstoy: “大约十岁的时候,我来拜访我的哥哥,然后哥哥有了他的第一台计算机,回到了MS-DOS。 除了在第一个GTA(在俄罗斯本地化中被称为美丽的名字“ Avtovor”)中刻薄的刻痕和Nukem公爵,我们还发现了自己编程的方法。 那时数学并没有吸引我很多,但是逻辑上的分支和绘图才是正确的! 因此,第一个程序是从圆和直线生成至上主义者的作品: CIRCLE(10, 10), 50 ”。

图片

Avito前端架构开发负责人Katya Petrova: “在徽标世界中强迫一只乌龟画圈并在Pascal上的计算机科学课上写“ Hello world”当然很有趣,而且内容丰富。 但是,在8年级时,在《魔兽世界经典》(当时还不是主流)中带领老板们变得更加有趣。 所以这是我真正有用的第一行代码。”

 #showtooltip Regrowth /cast [@mouseover,exists,help][@player] Regrowth(Rank 5) 



图片

Yandex.Transport移动开发负责人Zhenya Catella: “在8或9年级的某个地方,我对编程产生了兴趣,所以我的父母给我买了一本有关Turbo Pascal的书。 我仍然记得她是红色的。 首先,有一些简单的事情,例如周期和条件。 然后,似乎第一章以一个关于递归的故事结束。 并且有必要解决关于河内塔的困惑。 因此,除了“ Hello Worlds”外,它可以算是我的第一个程序。”

最难忘的代码行


当然,讨论不限于代码的第一行。 我们还讨论了代码,出于各种原因,我们确实记得该代码。


图片

搜索基础架构负责人Andrey Shodan Aksyonov “从前,当我从事游戏开发工作时,我们很愚蠢地用手编写了自己的引擎。 总的来说,这是不可能的,不可能的,但是没有人告诉我们。 因此,我们从头开始编写了自己的引擎以及用于开发游戏的所有工具,并以此游戏为基础,并在三年内设法完成了所有这些工作。 好吧,尤其是在这次的仪态演奏中,我想到了,并用耳朵做了这种巧妙的假装。 在刚刚连接着色器的第一代图形可编程加速器的第一代,就有很短的时间可以用汇编语言对GPU进行编程,并用手来安排插槽的指令。 然后禁用了此功能,只保留了HLSL,但从一开始它就有可能。 因此,我们设法一次使用了四个纹理(这是微不足道的),并且同时计算了照明,不规则的贴图,阴影和其他一些东西(但没人知道如何)。 那时,我们公司拥有3项专有技术,如果不是3项专有技术,那么这件事就是最主要的事情。 然后,在一两年后,当这项技术向前发展并在某种程度上失去了它的实用性时,在有关部门的允许下,我在ShaderX4的书中发表了一篇关于此的文章。 这是一个非常漂亮而诚实的工程解决方案,直到今天我还没有为此感到羞耻。 但这不是一行代码,而是十行代码!”

  Listing 5. #define POW c3 // c3.b=B, c3.a=A, for m=2. see [Beaudoin02] dp3_sat r1.rgb, t1_bx2, t2_bx2 // (1) (NH) dp3_sat r0.rgb, t1_bx2, v1_bx2 // (2) (NL) +mad_x4_sat r0.a, r1.b, POW.a, POW.b // (2) (NH)*A+B mul_x4_sat r1.rgb, r0.a, r0.a // (3) (NH)^n +mad r1.a, t0.b, SPECK.b, SPECK.a // (3) specshadow mul_sat r0.rgb, r0, r1_bx2.a // (4) (NL)*diffshadow +mul_sat r0.a, r1.b, r1.a // (4) ((NH)^n)*specshadow mad_sat r0.rgb, r0, DIFF, v0 // (5) (NL)*shadow*diffcol+ambi +mul_sat r0.a, r0.a, t1.a // (5) ((NH)^n)*shadow*specmap mul_sat r0.rgb, r0, t3 // (6) diffmap*difflighting mad_sat r0.rgb, r0.a, SPEC, r0 // (7) result +mov r0.a, t3.a // (7) diffuse map alpha 



图片

高级android开发人员Daniil Popov:

 i = 0x5f3759df - ( i >> 1 ); // what the fuck? 


这是计算x的快速反根的函数的代码段。 游戏引擎需要这种计算来计算舞台灯光。 《雷神之锤III:竞技场》发行后,这种无法读取的代码广为人知。

当我看到此代码时,我第一次清楚地意识到可读代码与最佳代码之间的巨大差距。

图片

前端开发人员Ilya Gribov: “我记得这段代码。 我以为:“多么简单明了!””。
 >>> comp_list = [x ** 2 for x in range(7) if x % 2 == 0] >>> print(comp_list) // [4, 16, 36] 



图片

高级Android开发人员Mikhail Yudin: “我是二年级学生,使用Corman的书在acm.timus.ru上写了一棵红黑树,有东西掉下来了,我检查了该树是否为空相等。 这种情况是不可能的。 他们给我写信说我是Kommersant(真挚,苛刻)。”

 if (this == null) 



图片

高级前端开发人员Nikolai Ryabov: “不知何故,在我与前端相关的第一份工作中,我还是一名非常,非常环保的初中生,同一位新手开发人员对这句话提出了以下想法: “朋友,我一直在试图理解它的含义及其作用方式-让我们一起受苦吧!” 结果,我的脑子只被这个占据了,几个小时后,我仍然意识到它是什么,结果我们会从foo中得到什么。 但是那时候我无法解释。

 const foo = Function.prototype.call.bind(Array.prototype.slice) 


不久之后,我开始使用此代码段进行采访,结果显示出了极好的效果:一旦我遇到了寻找优秀的开发人员将我以前工作的全部才能转移给他的问题,在一次会议上我遇到了一位知名人士,咖啡馆邀请他讲这段代码的工作原理。 与我之前采访过的许多候选人不同,他设法做到了。 结果,当我安排他当时的工作时,他完全达到了期望。 直到今天,我仍然想抛开这个难题,看看面部表情,尽管这段代码与新ECMAScript标准的发布不再相关。”

不仅是代码


我想引述Andrei Shodan的同事Aksyonov结束这篇文章:


“通常,一个故事通常不限于一行代码。 甚至只有十行的一小段代码也极为罕见。 在最迷人的故事中,它们可能与代码无关,而主要与人有关,代码对他们的影响。 到底是哪种代码行,或者到底是什么两个字符的愚蠢错误是完全不重要的。”

这里讲述的一些故事, iseregin拍摄在视频上,并发布在我们的YouTube频道上。 如果您喜欢该视频,请前来。


再次恭喜所有程序员(以及与此同时密切合作的程序员)。 愉快而有趣地度过这一天。
并在评论中分享您最记得的台词和故事!

Source: https://habr.com/ru/post/zh-CN467339/


All Articles