0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

河套IT TALK——TALK 10:编程的技术|艺术|术术 中篇:编程的思想、艺术和哲学

共熵服务中心 来源:未知 2022-12-12 21:25 次阅读

5f919988-7a1f-11ed-8abf-dac502259ad0.png

往期回顾

TALK 6:编程的技术|艺术|术术(上篇)骨灰级程序员的心路历程

前期回顾

篇里,骨灰级程序员梁峻墅给大家介绍了他的心路历程,以及他对程序员文化和武林文化的理解。本篇将继续请大神和我们一起聊一聊编程的艺术和哲学。

5fa4170c-7a1f-11ed-8abf-dac502259ad0.png

编程的思想境界和层次

上篇的段子讲完了,现在进入正题:编程的终极奥义到底是什么?

我理解只有思想恒久远,代码才能永流传。因为编程就是把人类的语言给转换成计算机能执行的机器语言,本质就是一种翻译工作,但翻译的水平也是有高有低的。

像电影《Sucker Punch》是一部非常有创意的内涵思想片,还能融合梦幻、魔幻、科幻、暗黑、伦理、动作、微色情、小萝莉、暴力美学等多种元素做到雅俗共赏,不同层次的人都能从这部影片中获得不同的乐趣。

但这部电影在华语区的票房惨淡,就是由于译名问题,该片的价值被严重低估。台湾翻译为《杀客同萌》,基本做到了意音具备,就是神还差点。但看看大陆翻译为《美少女特攻队》是几个意思,让人以为是二次元动画片。再看看香港的翻译《专扁衰仔》,你就知道没文化有多可怕,扎克·施奈德估计直接哭晕在厕所里。翻译的思想高度不同,对作品的理解深度不同,翻译的质量是天壤之别。而对于像编程如此缜密的翻译工作,那更是需要蕴含深刻的思想才能做得更好。

既然谈到思想,就要谈到思想的境界。

603d5b24-7a1f-11ed-8abf-dac502259ad0.png

我理解编程的境界有四层,借用孙子兵法,分别是:下兵伐城中兵伐谋上兵伐心不战而屈人之兵为超然

第一层:下兵伐城

很多程序员,一接到编程需求,就立刻启动开发环境,开始编程敲代码了。这就是没什么想法,先干起来再说,编到哪儿算哪儿。面向交付编程,只为完成功能,头痛医头,脚痛医脚。一路攻城略地,好不威风,但这只能算初级水平。

第二层:中兵伐谋

拿到需求之后,不着急动手,先开始思考,开始谋划,应该走什么技术路线,结合哪些已经做过的代码,还应使用哪些技术手段来快速、轻松地完成这个需求。这个层面的程序员已经开始不靠纯技术硬扛需求,而是开始艺术性地解决问题。大家拼的不是能不能解决问题,而是看谁解决问题的成本最低。像中医那样,并不直接治病,而是阴阳调和,打通经脉,调动自身免疫系统,四两拨千斤,这已经开始有中国式智慧的味道了。这种人经常在计算机旁边呆坐半天,即使表面上在和你说话,但其实脑子里在伐谋呢,所以经常表达古怪,被认为是书呆子。

第三层:上兵伐心

这种人已经能看到文人的清风傲骨,在更高的战略层面思考解决问题的时空成本,包括但不限于时间成本、分析成本、设计成本、编码成本、调试成本、部署成本、维护成本、用户的使用成本、资源的调配成本、社会的综合人文成本等等,得到结果后会产生一个灵魂拷问:“为什么要解决这个问题?能不能不解决?”带有原罪的需求都挺不过这个终极审判。比如很多需求,只是貌似合理,但实际上是伪需求,顶尖的高手能够抽丝剥茧,发现需求的逻辑矛盾和漏洞,并能综合运用各种手段,甚至包括非技术手段来及时纠偏。比如做MIS系统的时候,客户方的办公自动化系统需求很简单,就是把现有的管理规章制度全部用计算机程序实现一遍。这个需求貌似天真无邪,但实际上它忽视了人机之间的差异和特点。比如对人工作业,为达到作业合规的要求,管理规章制度中就要有反作弊措施,各个相关部门还都要有作业数据备份,以便将来发现问题倒查时可以对口供。但对IT系统,用户都有登录ID,作业都有事务ID,交互都有会话ID,存储都是一体化的,根本不需要那些画蛇添足的步骤。顶级的程序员就会庖丁解牛般地优化管理流程,引导需求合理化,节省了大量的研发资源、应用资源和社会资源。可能只需要修改管理规章制度的几十个字,就能少写几万行代码,bug能少几百个,部署维护能少几个月,用户每天能少点击数千次鼠标。通过少编程,甚至不编程就能解决问题,才是最牛逼的境界。

第四层:不战而屈人之兵

终于来到最最牛逼的境界——不战而屈人之兵。前面三层境界,也就是在满足需求、预测需求、引领需求上做文章,毕竟都是咱们这个世界可以理解的事。而最高境界已经跳出三界之外,不在五行之中,已经无法理解了。

看个场景先:小白最近代码输出太少,说机器频繁死机,耽误了工作。大牛对着机器,上去就是一脚,从此再不死机了…天理何在?小白不服啊,碰上死机的机器也来一脚,结果当天就去财务领工资了…天理难容!虽然都是人,但差别就这么大,找谁说理去。

再看段对话:

  • 小白:“哥,我做的那个模块总是有bug,调试两三天了,一直找不到原因,您有空帮我看看呗。”

  • 大牛:“走”

  • 来到现场。

  • 小白:“您看这…”

  • 大牛:“别急,从头开始把错误给我演示一遍”

  • 小白:“好嘞”

  • 一个小时过去了…

  • 小白:“我call,怎么不出来了呢?大哥,我发誓我找你之前还复现过一次错误”

  • 大牛:“没事,我已经习惯了,等再出错,保留现场,call我”

然后就没有然后了,因为再没出过错!

大牛只要头皮更出众,那就bug去无踪,所有的大牛都有这样的体验。我理解大牛都是有超自然的气场,常年抓bug,戾气太重,bug都吓跑了!不管你们信不信,我反正是信了。这就是最高境界,什么都不用干,坐在那儿喘气就能解决问题……

编程的技术

说完前面那些思想和层次,现在咱们来谈点真正有用的编程技术。

编程有着悠久的历史,大约在137亿年前,奇点大爆炸,咱们人类不幸处在这个由时间和空间组成的万恶世界,空间可以理解为除时间之外的一切,时空之间不断相互转换,对称规则让整个世界动态守恒。闲的蛋疼的意识们企图把这个混沌的世界按自己的想法有序化,世界则按规则自动产生了无序与之平衡。

说这么累的意思就是,程序员编程的一生都要与bug为伍,不要害怕它,也不要想着完全消灭它,而是想办法与它和谐共处,人bug合一。

第一就是尽量减少bug产生的机率。毕竟人少了才好相处,人太多了则很难伺候。谈过女朋友的,应该都有体会。你每敲一次键盘,都有可能产生bug。所以,每次敲代码时,应该多想想自己的祖国、各族人民的福祉,董存瑞、刘胡兰等民族英雄的期许,还有自己父母的厚望,这次键击是不是真的对的起他们!都说头上三尺有神灵,但咱们程序员头上三座大山全是虎视眈眈的bug,你稍不留神,它们就会顺着键盘潜入到你的代码里,且按且珍惜。

第二,让bug举步维艰,无处遁形。败兵先战而后求胜,胜兵先胜而后求战。经常打败仗的人总是先打再说,然后企图侥幸取胜;而常胜将军都是先不断创造胜利的条件,已经胜券在握了才开战!编程的基本技术就是要编写低bug代码,一切为了debug,所有的代码都要为调试做好准备。说这些战术级技巧的理论只会隔靴搔痒,后面会结合具体的代码讲解,大家才会更有感觉,点到为止先。

编程的艺术

其实任何一门技术,上升到一定层次后,都会变成一门艺术。编程也是如此。

我们在这个时空世界里,都有自己的当前态和目标态,但无论哪种态都有自己的时空坐标,代码就是企图让这两个态的坐标重叠,而实现重叠的路径是无穷无尽的,但一定至少有一个最佳实现路径。代码的艺术,就是实现这个路径的策略,在空间与时间之间做权衡,要么时间换空间,要么空间换时间,变换到下一个态,不断重复这个过程,直到到达目标态。换成人话就是:所有的代码客观上只有特点,主观上的优点和缺点其实都是程序员意淫出来的,优点都是用缺点换来的,缺点都是优点导致的,优点和缺点实际上是一回事,只是意淫角度不同而已。

比如,总有人说UNIX/Linux比Windows更安全,而这根本不是技术的问题,而是艺术的问题。UNIX/Linux是个悲观型操作系统,假设用户都是坏人,系统默认什么都不能干,除非明确指出这个用户能干什么;而Windows是个乐观型操作系统,假设用户都是好人,系统默认什么都能干,除非明确指出这个用户不能干什么。所以在默认情况下,UNIX/Linux适合做机机交互,典型应用于服务器,而Windows适合做人机交互,典型应用于个人计算机。但这些特性都可以通过配置安全选项,把Windows操作系统变的比Linux/Unix操作系统还安全,也可以把Linux/Unix操作系统变的比Windows操作系统还不安全。这都是艺术的事,与技术无关,但比技术还重要。

代码的艺术性范围很广,包括但不限于默认值、参数接口等具体设计,这些都可以在后面的代码讲解中让大家好好爽一把。

编程的术术

艺术是技术的抽象,术术则是艺术的再抽象,这部分内容我将尽量说人话。

我理解程序员在编程的时候,要意识到这些代码是面向开发者的,面向你的同行,是给他们看的。代码在举手投足之间,要透露出一种优雅的美,人见人爱,花见花开,车见车爆胎的那种。

举个例子:在做一个功能时,发现微软提供的系统API在某些特定条件下,返回值错误。怎么办?

基层小鬼:匹夫之勇,自己重新实现一遍该API的功能,结果是除了测试路径能覆盖的条件外,其他条件下全是bug。

中层干部:骚人墨客,给微软报告这个bug,等待官方临时解决方案,合规但官僚。

高级货:清风仙骨,给微软报告这个bug,但顺手写下解决方案。前置侦测代码,检测此API是否已修复这个问题,如果已修复则正常执行,否则执行纠偏代码。这样无论是现在还是以后,这段代码都可以稳定正确地运行!万花丛中过,片叶不沾身,这就是优雅。

终极杀手:不讲武德。还记得前面说的那个靠喘气就能解决问题的主吗?他会怎么解决?他就不解决!对,你没看错。他选的技术路线都是用5到10年前的API,坑都已经被小白鼠们填平了,他压根儿就碰不上这种破事。最优雅的美就是你看不出他哪儿美,但他就在那儿闲看庭前花开花落,漫看天外云卷云舒。

未完待续……

614ba02a-7a1f-11ed-8abf-dac502259ad0.gif

61606e06-7a1f-11ed-8abf-dac502259ad0.png

61835100-7a1f-11ed-8abf-dac502259ad0.png

6195855a-7a1f-11ed-8abf-dac502259ad0.png61aabd3a-7a1f-11ed-8abf-dac502259ad0.png

61c1a806-7a1f-11ed-8abf-dac502259ad0.png

629ebbc4-7a1f-11ed-8abf-dac502259ad0.png

62e407ec-7a1f-11ed-8abf-dac502259ad0.png

62fa4eee-7a1f-11ed-8abf-dac502259ad0.png

639319e4-7a1f-11ed-8abf-dac502259ad0.png


原文标题:河套IT TALK——TALK 10:编程的技术|艺术|术术 中篇:编程的思想、艺术和哲学

文章出处:【微信公众号:开源技术服务中心】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源技术
    +关注

    关注

    0

    文章

    388

    浏览量

    7843
  • OpenHarmony
    +关注

    关注

    24

    文章

    3438

    浏览量

    15250

原文标题:河套IT TALK——TALK 10:编程的技术|艺术|术术 中篇:编程的思想、艺术和哲学

文章出处:【微信号:开源技术服务中心,微信公众号:共熵服务中心】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    传智教育联合科大讯飞举办“AI开发者TALK”活动

    3月23日,由传智教育与科大讯飞联合组织的大模型实战应用之“AI开发者 TALK·北京站”在海淀举办。本次活动围绕“大模型应用”展开探讨,旨在为广大AI开发者提供一个交流、学习和展示的平台。 活动
    的头像 发表于 03-26 16:12 192次阅读
    传智教育联合科大讯飞举办“AI开发者<b class='flag-5'>TALK</b>”活动

    简于形精于器智于芯 王力机器人安全门的“减法艺术

    宋代的美学和艺术成就是公认的中国古代高峰,其标志性的特点就是简洁美。摄影、木雕等艺术,无不把“做减法”作为艺术创新的高级技法和标准。乔布斯更是划时代的让我们看到了工业产品“做减法”的美和创新力。追求
    的头像 发表于 11-17 16:26 316次阅读
    简于形精于器智于芯 王力机器人安全门的“减法<b class='flag-5'>艺术</b>”

    把您的 PCB 艺术品带来 KiCon 吧

    的排针和插座,只是在连接时要注意不要插反。 什么是 PCB Art? PCB Art 是指使用现有的 PCB 工艺实现 PCB 艺术,包括丝印层、阻焊层的不同颜色组合,铜皮是否开窗,视觉技术实现各种
    发表于 10-20 10:43

    把您的 PCB 艺术品带来 KiCon 吧:SAO Hat 作品招募中

    的排针和插座,只是在连接时要注意不要插反。 什么是 PCB Art? PCB Art 是指使用现有的 PCB 工艺实现 PCB 艺术,包括丝印层、阻焊层的不同颜色组合,铜皮是否开窗,视觉技术实现各种
    发表于 10-20 10:41

    数据采集编程指南 中篇

    Labview 数据采集编程指南 中篇
    发表于 09-11 09:44 0次下载

    多元共进|科技促进艺术发展,助力文化传承

    , 谷歌艺术与文化 致力于提供体验艺术和文化的新方式,从生成式 AI 实验项目到运用增强现实技术的新策展工具,为来自世界各地的 3,000 多家合作伙伴提供前沿的技术方案,打造引人入胜
    的头像 发表于 09-08 20:15 421次阅读
    多元共进|科技促进<b class='flag-5'>艺术</b>发展,助力文化传承

    如何使用开源硬件及Mind+图形化编程制作灯光画

    了创客们和编程爱好者的利器。这些工具的结合为我们带来了一种令人着迷的创作方式——制作灯光画。 通过结合硬件控制和图形化编程,我们可以创造出独特的灯光效果,将艺术与科技完美融合。无论是为了装饰家居、展示
    的头像 发表于 08-04 09:24 733次阅读

    实时3D艺术最佳实践-灯光指南

    的照明技术下看起来更糟。 Unity游戏引擎使灯光工作简单易懂。的手机游戏的表现受到你的照明决定的影响,所以需要使用照明高效。 本指南也可在统一学习课程的格式-手臂和统一呈现:3D艺术 移动应用程序
    发表于 08-02 08:34

    实时3D艺术最佳实践-纹理技术解读

    、mipmapping和法线贴图。 本指南也以Unity学习课程的形式提供-Arm&Unity Presents:移动应用程序的3D艺术优化
    发表于 08-02 06:12

    从评论中生成艺术的开源项目

    电子发烧友网站提供《从评论中生成艺术的开源项目.zip》资料免费下载
    发表于 07-05 11:06 0次下载
    从评论中生成<b class='flag-5'>艺术</b>的开源项目

    使用Pi和Python制作艺术、游戏等

    电子发烧友网站提供《使用Pi和Python制作艺术、游戏等.zip》资料免费下载
    发表于 06-27 09:24 0次下载
    使用Pi和Python制作<b class='flag-5'>艺术</b>、游戏等

    怎么从PC编程转向嵌入式编程

    能从PC机器编程去看嵌入式问题,那是第一步; 学会用嵌入式编程思想,那是第二步; 用PC的思想和嵌入式的思想结合在一起,应用于实际的项目,那
    的头像 发表于 06-22 10:36 463次阅读

    LED像素艺术开源分享

    电子发烧友网站提供《LED像素艺术开源分享.zip》资料免费下载
    发表于 06-19 15:28 0次下载
    LED像素<b class='flag-5'>艺术</b>开源分享

    CASAIM光学彩色三维扫描仪助力文物艺术品三维数字化3D打印

    实景三维建模,快速还原文物艺术品纹理、花纹、瑕疵、破损等本体特征,加深文物艺术品的三维认识。 CASAIM光学彩色三维扫描仪是集光学、机电和计算机技术于一体的高新无损检测技术,能够对实
    的头像 发表于 06-16 17:00 343次阅读
    CASAIM光学彩色三维扫描仪助力文物<b class='flag-5'>艺术</b>品三维数字化3D打印

    传感器厚膜工艺术的原理及制备方法

    随着科技的不断发展和进步,传感器技术也在不断创新和改进。其中,传感器厚膜工艺术是一种比较新的工艺,具有广泛的应用前景和市场需求。本文将从传感器厚膜工艺术的定义、原理、制备方法、特点、应用等方面进行探讨。
    的头像 发表于 06-07 09:20 661次阅读