查看原文
其他

游戏0x004C:代码

肖一驰 落日间 2021-04-03

今天叶梓涛在敦煌临摹壁画,肖大主动承担起了写作公众号的责任,作为一个十多年代码经验的老程序员,他尝试对比写作与代码之间的差别。就我作为一个文科生的感受,我觉得他始终对于代码保持在一个非常好的状态之下,他并不会去刻意地系统学习,为了完成某个任务——而通常是一定要有足够的兴趣和挑战,否则就觉得无聊、就要开始拖延。这虽然导致了我们的游戏的优化和图形学部分很糟糕,但是实际上合作倒是会比较有趣——因为并不是为了某个比赛成绩、某个功利的目的而工作,而只是做双方都愿意接受且觉得有意思的东西,而这或许就是游戏的真谛吧。这段时间都在画画的叶梓涛对于画画非常轻松,但是暂时丧失了语言的使用和敏感的直觉,多说无益,看看理科朋友写的东西吧。(编者按)




TOKIWA

常磐



今天下午我坐在家的客厅里,桌子上放着电脑正写着代码,我爸刚好经过看到了屏幕,说了句:“你这个都是英文啊!” 我笑了笑没说啥,毕竟代码是由英文字母组成的。我妈的反应就不一样了,“你这个字怎么是彩色的啊,可不可以帮我也弄一个啊?”




这个事情有意思的地方在于,从外观来看,说它是“彩色的英文”没什么毛病,但对于已经习惯于代码关键字和语法高亮的我,有着不一样的含义。


编程本身也是一种语言,它也有自己特定的语法。只是这种语言有些奇怪,它不是写给人看,而是写给机器看。从这个意义上说,说它是一种文字或许更合适些,朗读它都是一种奢侈(至少我脑补不出给机器朗读一段代码然后输出结果是种什么样的体验)。


这种面向机器的代码形式产生了至少两方面的影响。首先是神秘感,我们经常在电影中看到这样的镜头,一个黑客飞快地敲下一行行代码,下一个镜头就入侵到某某系统里里,过程行云流水非常炫酷。虽然观众并不知道这之中发生了什么(也许导演也不知道),但观众并不会觉得有什么异常,因为这种面向机器的语言充满了神秘感与想象力。


有一些有趣的模拟黑客的网站,打开就是代码界面,只要在键盘上随便乱敲,就可以看到代码在翻滚,颇有一种自己是黑客的感觉。


( from Neo Hack Typer )


影视作品自然有夸张的成分。就写代码本身,也可以产生很强的成就感,特别是一步步实现自己预想的功能时,有一种创造世界的感觉。当然了,其中也混杂了“我觉得这个代码运行会正常但是它真的报错了”的无力感。



2


这种感觉,学过编程的计算机学生自然很熟悉。可对于大部分文科生而言——所在专业的培养方案里不含编程——就有一种疏离感。所以程序员大都是男的,程序媛成了“稀有”的存在。


现实中可能发生这样的场景:一男一女一起出去玩,坐在车上时男生就掏出了电脑,女生问他要干嘛答曰写代码,然后顺手在屏幕上打了一句 


#include  <iostream.h>


我也有时会听到一些文科的妹子说想要学编程,原因五花八门,但大都是为了完成某种自动化的任务,比如批量填个表,或是从pdf中提取信息汇总,还有的是要用python处理数据然后画个变量相关性分析的图表。


3


面对这么多需求,确实有的可以很快实现而有的也蛮麻烦,我不作置评。我有一个观点,这种需求不能构成学习编程的理由。一方面,因为这种需求在专业学习中出现的频次不多,所以就无必要花时间在上面。另一方面,它的学习会比想象中的困难。


现在机器学习这么火,那我就来举个相关的图像风格迁移的例子。这不是是什么特别新鲜的技术,如果有关注的话,也经常会有些标题党论文在说这个。这里不讲具体技术,只是说一下如果要自己开始写代码,可行的做法:


  1. 找找Github上相关技术的实现,自己改改

  2. 找到相关论文,能看懂算法然后自己实现下

  3. 找到相关的论文,看懂它的推导并可以根据需要改改算法


这几种做法难点有易入难,但是就算是第一种简单方案,也藏着很多的坑。而后面的方案,已经接近于做科研的程度了,这就需要大量的专业知识储备。



4


这里就有个技术红利的概念,即最新的技术“下行话”到能被大众所方便使用。这个事情很难,也可能根本完不成,毕竟零散的需求与高门槛的技术实现间存在矛盾。


有些需求确实看起来“奇怪”,比如把某张照片转成特点风格的(见上文例子)。打引号是因为每个人都会用的滤镜就是做的这样的事情。于是问题就可以表述为,我能用多短的代码量做这样的事情,建立这个“技术小白”与“技术红利”的桥梁需要花多少代价。


固然,用a各种风格迁移的app是个可行的选择,代码数:0行。但是功能挺受限的我觉得,还得有网络。


幸运的是,现在只要1行代码就够了,答案就是mathematica,具体如下



嗯没错,这的确是一行代码。因为在 mathematica 中,代码是可以由图片组成的,可读性很高(终于不是“彩色的英文”了)。这里的 ImageRestyle 是个内置的风格迁移函数,其作用就是把第一张图片的风格转换成第二张图片的形式。而这里的“~”符号可以形象化地理解为一个大人牵着两个孩子的手。(正经的说,a~func~b 是 func[a, b] 的简写语法形式)


这里举的这个风格迁移的例子,也是在最新的版本中才被加入的,也就在一年之内。而这个算法的提出也就不过几年而已。我是觉得,无论技术发展到什么程度,都需要考虑它如何向大众科普、如何让大众更方便地使用。这是一个慢慢沉淀的过程,好的东西留下,不好的东西被过滤。


这个过程倒有点像教科书的编写,其内容不是最新的,但写的东西一定是比较成熟的、公认的。这些知识和新观念再藉由教育的形式,传达到年轻人手里,扩展形成着他们世界感知的边界。


这种事情总是要有人做的,也很有幸看到有人在做,就足够了。








    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存