程序员对代码有感情 程序员代码中的浪漫责任与爱

时间:2023-12-31 20:03:38/人气:446 ℃

‍学生在上编程课 图源:新华社(翁忻旸 摄)

一代人有一代人的使命,也许还需要几十年,也许就在不久后,大到与星空对话,解开宇宙的秘密,细至在学校和公司的健康码统计,在政府、国企的便民服务里,在日常工作的效率与协同办公中,在小朋友想要实现的每一个奇思妙想里。

文 / 艾霖

一段稳定运行的复杂程序的萌芽,往往是简单直观的想法;程序员的萌芽也是如此,往往是偶然的一个机遇。

艾克第一次在老师的指导下学习编程语言时,当他把一行行字符在电脑中输入完成并发送指令,就觉得自己有望成为那种自己崇拜的人——就像是电影里的程序员、极客一样,只要在电脑前面敲敲敲,就能实现别人不能实现的事情。

老师用笔记本电脑向学生解释 图源:新华社(傅新春 摄)

也是在那时候,他意识到了编程的美感。

人类天性里带着感性、随意、散漫的特质,日常交流的语言中会有模棱两可之处,但电脑没有。编程的语言足够清晰,它理性、一板一眼,没有歧义,逻辑严谨,有明确的指向性,输入一份指令,每一个问题都有一个答案。通过代码与电脑作沟通时,为了避免报错,每一行都需要细心地琢磨,每一步都必须给出准确的指令。

电脑会严格照办反馈,不会超出运行范围的框架之外任意发挥,或是悄悄偷懒。电脑的“不偷懒”可以帮少年时期的艾克满足自己想要“偷懒”的心思。第一次尝试用编程来解决问题是初中刚开始学化学,因为“懒得”给方程式配平,他写了一个程序,把各种分子、原子用代码写下来,让程序帮他自动生成化学方程式中需要配平的数字结果。

对少年彭古来说,最神奇的那一刻莫过于当他发现“编程的程序是可以由我来控制的”的时候。遇到不会的奥数题,交给程序帮他得到的答案和奥数题的标准答案一模一样——四舍五入也约等于是自己算出来的。

学生时代的鲁班数学成绩很好,他不喜欢题海战术——那些应试考卷中的数学题万变不离其宗,难度也不高,方法和思路是对的,却无法保证把题目做对,扣分的原因可能只是因为中间某一步的计算错了,某一个推导过程不够严谨。

计算的过程显得枯燥而无意义,还需要再浪费时间检查——所以当他察觉到这些琐碎、无聊、千篇一律的计算执行过程可以交给计算机并确保不会出错时,编程就比数学看起来更加有趣可爱了许多。平时觉得有难度的数独,用编程来求解也变得非常简单。

这是最初学会编程的显性用途,作为听话又便捷的智能工具,它可以用来解决自己的实际问题。

“工具性”的价值带来的一些神奇的瞬间,让他们在某一刻被打动,因为那些把奇思妙想落地的时刻,他们选择扎根于这一领域。毕业后,艾克加入腾讯微信事业群,成为朋友圈功能开发团队的一员。而鲁班和彭古则成为微信“视频号”产品中的算法专家,致力于更好地连接起视频的消费者和视频生产者。

他们隐匿于大的系统背后,不为人察觉,但作为当下互联网时代大厂的中坚力量,他们的工作正在改变我们日常生活自我呈现的方式,创造我们丰富多彩的数字与文娱世界,重塑我们对资讯、娱乐、商业、社交的想象。由一行行代码衍生而来,从微小的价值到宏观的庞大的价值体系,从个人的价值到群体共通的价值空间,各自生长,来自各方的力量,最终在腾讯交汇共融。

从有趣到有价值

1983年,12岁的李劲编出了第一个程序,那是一个用了大约100行代码编写成的高射炮打飞机的小游戏。次年2月16日,上海举办十年科技成果展。这位13岁的少年背后站了一位老人,为了观看少年演示计算机动画小程序和下棋游戏,*********在这一展台停留了6分钟,还留下了一句醒世恒言——“计算机要从娃娃抓起”,这句话极大地推动了全国性的电脑学习热潮。

1987年9月20日,中国第一封电子邮件发往太平洋彼岸——“Across the Great Wall, we can reach every corner in the world”(“越过长城,走向世界每个角落”),西方世界第一次通过互联网听到来自中国的声音。

鲁班、彭古、艾克三个人的成长环境和时节不同,被互联网的大潮分割出前后,但都能找到某个意象作为研究个体的支点。

抽丝剥茧,放在现在的语境中,他们可谓都是“少年编程”热潮的受益者。而在他们成长的年代,少儿编程尚未如今日一般发展得如火如荼。摆在学生们面前一条更具象化的发展通道是“信息学(计算机)奥林匹克竞赛”。

学生在参加青少年电子制作锦标赛,图源:新华社 (冯开华 摄)

1989年起,信息学竞赛标志着中国青少年正式与世界先进的青少年编程教育接轨。若是用功利些的眼光来看,作为奥林匹克竞赛的一种,在过去的许多年里,它也和数理化等一道,成为学子们在高考这个千军万马过独木桥之外的一条快人一步的闯关捷径。

奥赛是少数人的游戏。

很多学校会开设“信息学竞赛”的课程作为学生第二课堂的选择之一,但教育场景和资源有限,往往需要通过一定的选拔。艾克是在刚升入初一的军训期间,某一个踢完正步的夜晚收到考试通知的。

那是一个很大的阶梯教室,考试没有时间限制,领完卷子之后,只要一直待在那里就可以一直做,做到不想做为止,考核的指标是看做对题目的数量。排列组合、逻辑推理、找规律,密密麻麻的一些类似小学奥数的题。

这场考试的分数线设置并不严苛,没有很强的淘汰性,真正的双向选择是在培训开始后,因为课程设置在晚自习时间,很多同学觉得和学业无关,大多数人只听了一两次课就没有再来过。有上千人参加考试,但上课的人数从起初的几百人在两周内骤减至三四十个人,形成真正意义上的竞赛小班,搬到了电脑教室里面去培训。

但艾克觉得有趣。

备战竞赛的时间里,他做过成千上万道案例题。有道题他却一直记到了现在——受制于计算机基本类型32位数据结构的限制,只能计算到数十亿的级别。那该如何将超过计算机本身限制的更大的数字用程序进行精准地相加?

那次艾克迟到了,错过了老师的讲授。除了信息学奥赛,老师也会教普通的极简单的电脑课,教人如何打开PPT画一个圆。艾克总是看到老师骑着自行车在学校里到处逛,一边晃悠一边脸上笑呵呵的。而今,艾克时常觉得自己性格里乐天派的一部分便是受这位奥赛老师潜移默化的影响。

那次老师也没有直接告诉他答案,而是提出了这道题引导他一步步思考。艾克给出了一个接近于正确答案的解法:假如是100位的数字,他选择对数字以每5位进行划分后切割再计算。

老师给了他更优的解法——将数字切分的颗粒度精细到了1位。从运算效率来看,这种方式并不是最高的,但它的普适性会更强,更方便写程序,也触类旁通,方便延展处理更多运算。

学生在学习编程 图源:新华社(伍志尊 摄)

小时候,艾克喜欢玩一款名叫《红色警戒》的战略型游戏,自己去建造、采集资源、造兵打仗,每一步都需要一定的策略。后来他喜欢物理,这些似乎和他后来对于编程的热爱有着千丝万缕的联系。物理和编程,像是PVE(玩家对战环境)游戏一样,一个挑战被推到他眼前——当遇到环境中的问题时,要如何去解决它?

物理要求他制作工具来克服环境的问题,编程的意义则是他通过创造一个程序让环境变得更好,更方便地实现自己的目标。

当时的娱乐条件有限,他自己编了一个贪吃蛇的小游戏,当年的画面其实很简陋,都是一些命令行的字符。但他当时把小程序拷贝进了班级的电脑之后,它成了很多同学中午在班级休息时的快乐源泉。很多同学会翻出贪吃蛇来玩儿,还会互相比一比谁的分数更高。

平日的培训里,他写过的程序大多数都是为了解决一道应用题。这似乎是第一次,艾克不再把它视为一道题目,一个解题技巧,而纯属因为自己“想做”而写下的一段代码,满足少年时期轻飘飘的快乐。

后来他有了更多可以称得上是“作品”的项目。第一次从前端到后台开发完成上线的一个网站,第一次真的实现了向用户对外服务、开放留言的功能——这是一套系统底层运行逻辑的试验,有了第一个,后面他可以用同样的方法同样的技巧去复制和创造出无数的线上服务,大大小小的项目积累下了编程的“万能公式”。

有些人觉得编程是件浪漫的事情,一行行的代码像诗句一般很有艺术感。艾克没有这么感性,他觉得代码本身是足够严谨的,但他承认,人可以让“编程”变得浪漫。

大学时期,他对模板进行了二次开发,搭建了一个用朋友生日作为网站域名的专属祝福网站。网站有夜空背景,背景乐的钢琴曲是“未闻花名”,用户登录后会看到网站开始掉落满天的星星,可以看到网站里留下的生日祝福。

回想起来,艾克似乎做了一些无用而浪漫的小事。它们构成了在年少竞赛的做题、重复、集训练习之外,关于编程印象的最初的有关美感与有趣的建构。

少年的眼睛里更容不得沙

鲁班和彭古是师兄弟,师出于同一位信息学竞赛启蒙老师。

在竞赛培训班,鲁班深刻地感知到,同学之间很多在文化课上可以忽略不计的微小差异会被放大,就好像数学题答案中最令人头疼的“略”,有些思考题他琢磨了一晚上无法倒推出为什么,而班上有些同学不费吹灰之力就能一眼看穿整个从问题到解题的全过程,整件事情的合理性在那些同学眼里“显而易见”。

鲁班觉得,师弟彭古就属于那种又厉害又努力的“天赋型选手”,他在初中参加了高中组的信息学竞赛,并在高一刚入学就拿到了清华大学的保送资格。面对实际问题时,他可以立刻把问题抽象成模型建设问题,他的思路永远比别人更快,解决问题的时间更少。

彭古与编程的结缘来自某次青少年宫组织编程比赛宣传讲座时的惊鸿一瞥,就是这“第一眼”,他开始好奇,为什么黑板上写着的20个数字随便挑出两个相加,老师都可以精确地在5秒钟内算出来。他觉得,“很好玩,很有意思,我要学!”

编程带给他的执念远比想象中更强,不只是兴趣。

学生利用3D建模软件进行设计 图源:新华社(韩传号 摄)

对于彭古来说,面对大多数需要完成的考试或是学习,他都抱着一种“完成任务”的心态,只要擦边通过能交差就可以了,——比如爸妈希望他不要掉出年级前100名,那考80多名就挺好,至于有没有动力再考到50名以内,甚至30名呢?他没有那么多精益求精的兴趣,也没有无限地去追求和把它做到最好的执念。

但是他一贯的行为准则在“编程”这件事上有所颠覆。在编程上,他的心理活动是,“这道题它的算法复杂度如果能运行100毫秒解决,那我还想尝试一下50毫秒能不能搞定?如果用50毫秒能解决,我就还想尝试一下用30毫秒可不可以?”

彭古的老师告诉他,数学理论和编程实践是左右手,它们是相辅相成的关系。学这几门学科就像是从不同的侧面去爬同一座山,在爬山的过程当中看到的风景是不一样的,“在爬到顶之前你会觉得它们是两条路线,但是当到达顶峰的时候,你会发现最后看到的是同一片风景。”

每探索一个新的算法,他都对这个世界的真谛有更进一步的理解和认知,那种发现“原来这个和这个东西也是相通的啊”的美妙,有种类似开启了魔法黑盒之后的神奇体验。

他参加过很多比赛,大学期间有一次的比赛是半命题,“请你做一款你觉得对社会有价值的小程序”,四个人结队,跑完一场限时24小时的“编码马拉松”。

和团队小伙伴们从头脑风暴确定主题,再到各自分工明确地写后台、写客户端、联调、找bug、修复bug、升级新功能,大家接力工作,也接力睡觉,通过调用第三方接口、地理定位等技术上的组件,最终做了一款按时到达地点后以“拍照打卡”的方式来对聚会迟到的人施以小惩罚的小程序,比如让迟到的人发一条“我今天聚会又迟到了,大家可以来鄙视我”的文案。

这是一个很小很小的基于对日常生活洞察而诞生的问题和需求,那是很开放、纯粹、没有什么后顾之忧也没什么功利心的一场比赛。

在现在的彭古看来,这些事情更适合还没有走入社会的孩子来做,不论什么年龄段,洞察和发现问题的能力是一样的。“到现在发现一些问题,我可能已经觉得很正常,成年人和大人往往会选择忽视它或者容忍它;但是放到十年前,我发现一个问题,我会觉得它很重要、它需要被解决。”

对于少年而言,解决问题既是长见识的过程,同时也能收获远超过预期的成就感,能够通过做了一项服务而惠及一百人、一千人甚至更多人的事情,是难能可贵的经历。

把大问题拆成小问题

在他们眼里,编程都带着一个“高效省时”“工具式”“高可信度”的标签。而要让电脑能够听懂他们的需求,就必须保证自己的理性、严谨、条分缕析,具有高效解决问题的“编程思维”。

在鲁班看来,如何“拆解”问题是编程中更重要,也更富有创造性的一件事——把一个大问题拆解成更可执行、更好理解的小步骤,把复杂的问题分解、理顺成简单可控、更易解决的问题。

无论是信息学竞赛,还是如今的工作,彭古、鲁班、艾克还有更多他们的同事,每个人都在工作中不断地重复进行对问题的拆解和评估——评估拆解后的事情是不是可做的事情,评估拆解后的中间模块是否正确。

不同的只是,信息学竞赛的每道题目有标准答案,而工作后他们面临的大部分问题都是不确定的——要做的事情永远没有最优解,只能无限地向最优解去靠近,一件事情能不能做成、能做到什么程度,都不可预知。

在竞赛指导老师的培养下,彭古学会使用更好的工具和更好的信息获取方式来面对眼下的困难。“当遇到不能解决的问题时,都用搜索引擎搜一下。”正如老师所说,“你遇到的问题大概率是广大人民群众都遇到过的问题。”

团队里的领导者就像是信息学竞赛中的指导老师,明确好最终的目标,剩下的事情则要靠大家一起协作完成。艾克觉得,在编程道路上,对他影响最大的不是老师,反而是那些一起成长起来的小伙伴。“大家一起讨论什么是对的,什么是错的,怎么样去解题是比较好的做法。甚至会一题多解,或者是互相教对方一些新奇的解法。”

正如当年培训时,有的同学接受信息的速度快,也会“卖卖关子”引导和带动其他同学一起,先学会的就会给那些没有听懂的人去讲一遍。每个人获得的能力不同。有的人通过搜索引擎获取信息的能力极强,可以找得到某种算法或是工具包的正确的英文说明书,有的人则擅长理解资源、信息和“说明书”,有的人讲解展示的能力更强,有的人拥有更强的动手操作能力。

经过想法的融合和讨论,每个问题都会找到对应的解决方案,而“每个人都因为根据各自的能力优势所在,最终走到了适合他的位置上”。

来自工业界的社会价值

小时候,彭古立志要做“推动全人类科技进步的事情”,要在学术界青史留名,理想是能够拥有一个自己发明的算法。上大学之后,他发现,相比坐下来在板凳上专注科研,他是一个更需要短期正反馈、正向激励的人。

所以他选择了工业界,也就是与学术界相对应的,诸如腾讯这样的企业。把学术界更加前沿的技术以产品的形式落地到工业界,做出一个实实在在的功能。“一方面用到最先进的技术,另一方面能够带来被称之为业务价值,甚至叫商业价值的东西。”这些价值背后,还藏着更加崇高的理想,彭古希望它能够改变或者帮助一些人。

具体帮助的范围有多广其实很难衡量,对于视频号而言,一个相对客观的数据只能是播放次数、人均观看次数等等的评估指标。

他想象着,或许正是因为团队某一次算法的升级,也许就会让某个用户当晚看到对ta人生很有帮助的视频。“可能这个视频能帮助ta做出一些关键决策。”这些事情放在一个人身上这个概率很低,但当以微信10亿级别的基数做底,仍然有值得相信偶然、巧合、奇迹发生的力量。

设想如果有一天不再拥有腾讯算法专家的身份,鲁班觉得自己可能会去做计算机编程的普及性教育。这个想法来自于某一次他通过编程帮助女儿的班级大大提升了统计健康码的效率,他开始关注到更多之前忽略的事情,“社会上还有很多地方需要用编程提高效率的地方没有提高,而那些地方还没有人和资源去投入。”

当年那个曾为*********做编程演示的少年后来成为了中国最年轻的计算机博士,参与创立微软亚洲研究院,在图形图像编码领域达成了极高的学术成就。而当年老人的那句话,依旧振聋发聩,蕴含千钧之力。

得益于移动互联网的高速发展,许多普适性的需求已得到解决,但社会上还有更多值得去花时间的,并且可以实现大幅提高效率、改善流程的事情,它们一定不是靠头部的互联网公司和编程人才来解决的,它需要具体到实际执行的每个人拥有编程的思维和提高效率的能力。

为此,腾讯自己也在着力于更多公益性质的举措,2022年7月,基于由中华全国妇女联合会宣传部指导下的微信“绿苗计划”,腾讯微信联手北京师范大学新闻传播学院、中国福利会少年宫等单位打造“首届青少年人工智能与未来媒体全球创新挑战赛”,旨在为国内外青少年提供一个富有创造性和开放性的实践平台,以充分激活参赛学生在人工智能领域的综合创新实践能力,助推青少年群体科学素养提升,促进国际间科技文化的交流与合作。

同时,腾讯微信还将与合作伙伴围绕青少年人工智能的议题举办峰会,组成“科创少年远行者”研学团,在北京、上海、深圳进行未来探索之旅,打造沉浸式线下体验课程。同时以探访AI线下沉浸式体验馆等众多科普教育场馆的机会让少年们体验最前沿科技,邀请他们与专家对谈,开阔眼界。

正如鲁班所希望的,未来比较理想的情况是“人人都可以做小程序”。每一个学习编程的人都会了解“Hello,world”的意义,而如今,腾讯希望把这个向世界问好、创造未来的机会郑重交到孩子们手上。

一代人有一代人的使命,也许还需要几十年,也许就在不久后,大到与星空对话,解开宇宙的秘密,细至在学校和公司的健康码统计,在政府、国企的便民服务里,在日常工作的效率与协同办公中,在小朋友想要实现的每一个奇思妙想里。从小齿轮开始,让整个社会系统加速运转,并且更加顺畅易用。编程能够串联起更多人对于社会共同的责任、情感、重任,也牵引和支撑他们去做更多,让编程思维延伸出无限的可能,而我们就生活在这些因为编程思维而创造和改变的新世界之中。

(文中人物均为化名)

(专题)

推荐

  • 1三年级上册品德与社会优秀教案459
  • 2安慰剂与反安慰剂效应阅读理解附答案238
  • 3立秋节气的民间风俗121
  • 4如何设置笔记本与投影仪的屏幕切换190
  • 5陈式太极拳行拳走架的要领279
  • 6适合朗诵的短篇英文诗歌289
  • 7雷锋的语句摘抄437
  • 8商务英语谈判情景对话447
  • 9荣耀9i深度评测,新机评测第4期华为荣耀9i356
  • 10insta360onex2怎么实现全景?Insta360,ONEX2全景相机首发体验多块屏幕多条路308
  • 首页/电脑版/地图
    © 2024 OONiu.Com All Rights Reserved.