美文网首页
2021-09-08-📣📣编程艺术和编程的本质

2021-09-08-📣📣编程艺术和编程的本质

作者: 沐深 | 来源:发表于2021-09-07 12:31 被阅读0次
B-2幽灵战略轰炸机
传统家具

编程艺术

最近看老外写的代码,感觉他们写代码就跟搞艺术一样,就像珍珠一样晶莹剔透,甚至注释比代码都多。

国外在产品中注入艺术气息的不再少数

法国大餐,秀色可餐。
日本料理,精致温婉。
苹果产品,兼顾艺术品味,简约大气又耐用。
美国隐身战斗机,外观霸气,操作简约。
欧洲、日本的汽车流线、颜色都很美,功能人性化。
古罗马帝国作为横跨欧洲、非洲与亚洲的强大帝国,格外强调其建筑的威严,以给人不可侵犯的感觉。


法国扇贝 古罗马建筑

当制造业开始讲求审美训练,艺术带给它什么硬核好处?
学习艺术不但可以把工业产品做得更人性化,还可以把一个行业带到新的高度,
国外好的工业产品在视觉上都会给人很大的冲突感,是美学的一部分。
很多行业粗制滥造,只追求做出来,不会精益求精,产品也不会赏心悦目,没有体验感

「知乎」上有段评论:
老美的代码看起来是一件艺术品,他们会在代码文件头、函数头里写上很漂亮工整的注释,然后项目有一个庞大复杂的架构,各种设计模式、框架结合使用,好像这些东西用得越多越流逼一样。

俄毛子的代码那简直就是天书,一股浓烈的geek气味伴随着灌满伏特加后眩晕的混沌感扑面而来。变量名写长一点清晰一点会死吗?plmm不是漂亮美眉,看了半天代码连猜带懵才知道是Platform Link Maintainess Manager。

印度人写的代码就像一条工业流水线出来的产品一样,每个都很规矩,但也很死板。一个环形消息缓存的东西用竟然数组来实现,然后在下标计算时倒来倒去。尼玛用个链表来实现会死是不。

中国人写的代码还是比较实用的,但如果不加控制就会犯低级错误。你见过为了查找一个用户id,先用select *从数据库把所有内容都捞出来,然后用个大大的for循环来查找的代码吗?我看了当时就泪奔无语了。

崇洋媚外不可取,夏之虫和井之蛙也不能做。
希望我们能突破自己的认知,站在巨人的肩旁上,让自己不断强大。

编程的本质是什么?


《教父》里说过:花半分钟就看透事物本质的人,和花一辈子都看不清本质的人,自然是不一样的人生。

所以我们尝试思考下编程的本质,或许可以让我们走的更远。

对于编程这件事,编写程序,就字面意思来讲,事情的结果是程序。

程序是啥意思呢?

广义上的程序是指,一系列的动作以相同的方式执行,在相同的环境下,总能得出相同的结果。

你比如开银行卡账户,你需要准备好材料,像身份证,去银行填表,核身,签字,最后拿到一张属于你的银行卡。

换一个人也要走同样的程序,同样要备好材料,填表,核身,签字,同样要到银行办理,同样最后拿到了银行卡。

你会发现,定义里面有三个相同,也就是程序最大的特点就是重复。

只不过上边例子里的重复,是在银行这个地方发生的。每天做着相同程序的业务,只是不同的客户,不同的柜员。

但开卡业务只能在银行办理,这就很受局限了。我得花费时间和体力,跑到银行,还得挑银行上班的时间。那有没有办法,我不去银行也能把银行卡开下来呢。
计算机互联网的出现,就解决了这个问题。

要交的材料,要走的程序,要拿的卡,都不变,只是整个操作环境,从线下的银行,变成了线上的某个载体,可以是个 PC 端 Web 网站,也可以是个移动端 APP。

线上就是指互联网,它能够让信息的传递跨越空间,而操作的载体,无论是 Web 网站 还是 APP,背后都是计算机程序。

从前你要花一个小时坐公交去银行,如今足不出户点点手机就能办理业务。

计算机上的这些程序从哪来的?

就是程序员编写的

所以程序员要做的事就是,把线下现实世界的事情,编到线上计算机里来做

这有点像电影编剧的角色,都要取材于现实。

不同的是,电影编剧会充分虚构,保证艺术源于生活又高于生活,产出物是一两个小时的影像。

而程序员要充分还原现实,保证程序符合正常逻辑不会错乱,产出物是电子设备上的应用程序。

那编程的目的就很清晰了,用计算机来解决现实世界的问题。

无论是现实世界还是计算机,我们做一件事,都需要有三个核心要素:输入(Input)、处理(Process)和输出(Output),简称 IPO

编程就是把现实世界的问题,映射到计算机的 IPO 中。

那怎么把现实世界的问题映射到计算机的 IPO 中呢?

我理解要通过模型

什么是模型?

模型是指用一个较为简单的东西来代表另一个东西

如果要简单化一个东西,那就需要对这个东西进行分析,然后抽象

抽象的维度,决定着最后软件的形式

比如 form-render抽象层次,可以是拖拽式,可以config 配置, 可以是表格配置

如果对计算机本身进行抽象,那软件就会以机器代码或汇编语言的形式呈现。

如果对计算处理逻辑进行抽象,那软件就会以非结构化的高级语言呈现,比如 Basic。

如果对问题领域过程进行抽象,那软件就会以结构化的高级语言呈现,比如 C。

如果对问题领域元素进行抽象,那软件就会以面向对象程序设计语言呈现,比如 Java。

也就是说,编程语言是现实世界到计算机世界抽象的机制

总结: 枚举 => 归纳 => 抽象

编程的本质就是可计算,可计算的基础就是建模
建模可实现必须简化,简化的方式就是抽象
简化的前提就是限定范围。
然后一切编程成为了限定范围内抽象模型的数学计算的计算机表达

所谓的编程,就是使用某种语言,在某个维度,把现实世界抽象成简单的模型,然后设计实现出可运行的计算机软件,也就是完整的 IPO

相关文章

网友评论

      本文标题:2021-09-08-📣📣编程艺术和编程的本质

      本文链接:https://www.haomeiwen.com/subject/rblvwltx.html