编程漫谈(二一):编程活动之思

编程应像数学一样严谨, 像文学一样流畅。

编程久了, 不免会问: 编程究竟是一种怎样的活动? 如何才能做得更娴熟更有创造性 ?

借助于编程语言以及围绕其建设的社区、平台、技术、框架、组件和工具, 在计算世界中表达和建造世界。

编程的意义

编程和写作看上去很像。就是敲下一行行字符,然后,——

编程与写作又不一样。写作产出的文字可以唤醒人的情绪体验和情感体验,启发人的心智,而编程产出的代码只能唤起程序员自身的情绪体验。

编程是为了解决问题而存在的。编程就是干实事。搬砖就是搬砖,砌墙就是砌墙,可没有那么多花言巧语甜言蜜语和浮夸的言论来粉饰。

编程最初是用来处理繁琐的科学计算的。接着,诞生了通信网络,涌现出了文字处理软件,电子游戏等;紧接着,编程扩展到了更多领域,聊天、音乐、影视、图像处理、日常生活助理等,无孔不入,无所不包。最后,编程进一步扩大了其领域,构建了一个广阔博大的虚拟世界。

哈!编程的威力如此之强,编程的野心如此之大,竟可以成就一个世界!试想有哪一种活动能够做到这般地步?欢迎你来到编程所创造的虚拟世界!这个世界不同于贫乏的现实世界,那些管理人员可不懂编程,没法在这个世界里对你旁敲侧击、苦口婆心、耳提面命、谆谆教导、千叮万嘱。你也不用看谁的脸色行事。只要有你足够的能力,在这个世界里,你就是自由的!哈!就算世界遗弃了我,我还有一个世界可以躲藏!

编程的创造性

编程不同于写作。写作是自由的,没有固定的语法和规则,也没有语法检查。自由抒写生活的所见所闻所思所感。没人揪着你的耳朵告诉你:错了!错了!错了!编程却是有固定的语法和严格的规则的。语法不对,报错;规则不对,没出现预期的结果。一个字符都不能错。一个逗号或分号都不能多也不能少。就是如此地严格甚至于苛刻。很多人都很难接受如此严苛的要求。程序员是被这种严苛要求”拷打“过的一族。

确实,编程因为没有写作的自由度高,因此失去了一些创造性。但是,编程又具有自身特有的创造性。编程是集发明、设计、表达于一体的。因为编程要去解决实际问题,就需要去分析问题、转化问题、构思设计,然后通过编程语言表达出来。如果能够切实解决问题,那种成就感是不言而喻的。每一个程序员都能感受到这种成就感和喜悦。每一次编程都是一次创造,虽然不免也有重复的成分。

编程需要应对复杂多变的需求、复杂变化的环境,需要应对大量的数据,这些事情中所蕴藏的难度,也助长了完成事情的成就感。你敢说编程缺乏创造性?那一定是你还没有真正感受到编程的魅力和博大的代码世界。编程是很烧脑的。小剂量的数据根本不用发愁,但是到了复杂的环境、大量的数据、无序的并发、极致速度的运转,要保证严谨周密可靠的逻辑和系统的长期正常稳定运行,那可不是简简单单能够办到的事情。

学得屠龙之法,终有用场。就怕你学的只是些三脚猫的工夫,还以为自己具备屠龙的本事。

编程的乐趣

程序员常常在 CRUD 的事情里打转,似乎越来越难以体会编程的乐趣。初学者尚能体会到“啊哈! it works” 的乐趣,资深程序员反而难以体会这种乐趣了。似乎任何事情职业化之后,就不那么有趣了。不过,如果你能够从思维的连贯性和整体性来对待编程,学会布局谋篇,像写小说一样编程,就能感受编程的高级乐趣了。那是纯粹的思维之乐。吾心往之。

编程也有探案的乐趣。当结果不如预期时,要去探寻蛛丝马迹,一步步推理,找到问题的所在。问题越难,破案的成就感和喜悦感越强。当然,有些时候是自己埋的坑自己踩,“不亦乐乎” ?

舞蹈生凭借她们曼妙的身姿、飞旋的舞步,博得众人的青睐与喝彩。程序员没有这种殊荣。但程序员凭借一手流畅的代码,可以在机器的世界里卷起一阵飓风。

编程之法

抽象、分解、组合、封装、解耦,使用合适的工具。

  1. 观察、思考、理解现实世界的人事物、活动、流程及规则,洞察人们的需要;
  2. 确定目标、思路、方向;
  3. 将要构建的系统分解为相互协作的子系统;
  4. 将具体的事物和行为抽象成数据模型和可计算结构;
  5. 采集、传输、预处理数据并存储到指定结构;
  6. 使用合适的算法和工具处理数据及结构;
  7. 使用合适的代码框架将指令逻辑块组织起来;
  8. 适应大规模数据的处理或实时性处理。

编程构造块

  • 语言为要素:编程语言、编程方法(结构化、面向对象、函数式、元编程)、 数据结构、基础算法;
  • 设计为导引:设计原则、设计模式、设计实践;
  • 技术为产出:通过编程和设计,创造技术解决现实问题。

编程与技术

技术就像已经发明的刀剑、枪炮、战车、导弹。

掌握现有技术使得程序员能够利用已有的经验去更高效地创建可用的软件, 同时又使得程序员容易局限于特定技术, 不愿往更广阔的领域开拓。技术是编程的强大武器, 但作战亦不能太依靠武器。今天的技术不一定能适应明天的场景,因此,今天的技术应作为重要参考,但不宜过于依赖。

编程的社会性

编程是个体与社会性相结合的活动。多交流。

从日常编程经验来看, 很容易认定编程是一种个体性的活动, 这是因为日常所使用到的是“技术、框架、组件和工具”。 但是若注意到编程的背后有默默支持的“社区和平台”, 就明白自己并不是在“孤军作战”。

软件开发行业有一种奇怪的精神,叫做“开源”。把辛辛苦苦做出的成果向业界分享出来,这种举动实际令人惊奇。这种精神使得软件行业一日千里,发展迅猛。对于个人来说,是一把双刃剑:利处是你能够利用别人的成果来给自己的事业添砖加瓦,不利是你需要保持充足的经历去持续去学习和精进。

真相在代码里

The thoery in the book , The truth in the code.

正像黑客所做的那样, 编程是一项富有创造性的自由活动, 别给自己套上一堆学院派的方法论。阅读科技论文, 直接从源代码中学习, 从互联网上汲取营养, 与他人交流探讨, 才是终极学习能力。

编程是智力性游戏

编程是项奇特的职业。不是因为有多神秘或收入有多高,而是因为,它真正像是一种智力性游戏。仅仅通过发展思维的活动能力,学习和摆弄、堆积和组合各种逻辑,就像玩俄罗斯方块那样,将它打造成一件实用而精致的逻辑工艺品,一件非有形物质构造而是由无形的思维粒子筑成的可变形建筑,甚至是全新的梦幻国度。

正如万物都有结构、物质和能量,程序也有结构、算法和能量。程序员通过程序的力量来影响世界的进程和变化,这种力量有时像是神秘的魔法,尽管这种魔法目前还禁锢在电子芯片中,然而一旦与万物联结,意念控物,超距感应,飞檐走壁,释放冰电雷火,魔法师的各种法术真的有可能成为现实。

编程像独白舞

编程与写作一样,是一项创作型活动,需要非常安静的思考。热烈的讨论固然能产生可喜的决策方向,执行却需要精思细虑。

写作需要80%的激情加上20%的严谨,编程需要80%的严谨加上20%的激情。写作需要内在的热情喷涌,编程需要严谨构造逻辑实体。编程与写作一样,本质上是在重构现实:写作重现和升华现实,而编程重建现实的规则体系。

人生除了睡觉吃饭,实际上就是在理解和表达身边的各种事物、事务、事情、生灵。教育的本质是具备理解和表达能力,进而构成可持续的学习和生存能力。

同样,要提升编程技艺,也并不仅限于技术层面:对自然感兴趣,演习物理和天文;对形式感兴趣,演习数学和哲学;对人文感兴趣,演习文学和艺术;对生活感兴趣,演习设计与音乐;对实践感兴趣,演习烹饪与舞蹈;对啥都不感兴趣,那去画画吧!各领域的知识技能可以带来新鲜而广阔的思维和视野。

编程是一项智力密集型活动,即使是最初级的程序猿,也需要学习一桶一桶的知识和机制,才能挤出一点一点的奶;编程有点半破译密码的性质:阅读别人的代码,推敲TA的动机和心智。编程需要非常的细心,一字符之差,就能让人在错误的深渊中彷徨徘徊,眼巴巴地搜索着不见影的正确的彼岸,哪怕路就在脚下;编程也需要大量的练习,The thoery in the book, The truth in the code. 但除了必要的严谨、非常的细心和愿意学习的热情,没有更高的门槛,不需要考证,打开笔记本就可以开始干活。

大部分工程师是非常乐于分享和帮助人的,也有大量优秀的源代码、帮助文档、博客、示例可以尽情地学习,进入编程领域,就像进入哈利波特的魔法学校一样,有一种别有洞天的风景。编程就像独白舞,能给人无穷的乐趣、可观的收入、安宁的心灵空间。

编程与文学

代码,是逻辑的艺术。软件,连同产生的数据,是一部人类生活与需求的中长篇小说。

代码形同文字,软件与文学同源。逻辑与激情并重。或许本应像写小说或诗歌那样创造软件。

编程与语言

软件是一种优美的逻辑建筑,而编程更像是思维的对话,尽管人的思维并不完美。你只看到猿媛们敲键盘,却不知道他她们究竟在想什么,在做什么。TA们正在与自己的思维作战。编程是逻辑的语言表达活动。

语言是一种奇特的事物。当你看到文字符号时,并不是看到一些无意义的字符组合,而是看到了一幅图景、一段意义、一次独白。人的大脑似乎天生适合做超高并行度的符号映射与语义组合操作,而人在生存的过程中积累了大量的符号-语义映射关系,这些符号-语义映射在大量语境中得到强化而进入潜意识运作(守护进程)。

大部分语义组合是基于统计的。比如说冰冻,而很少说冰瞎。部分语义组合可基于符号意义的关联融合,比如冰焰,尽管水火不容,可是冰焰可以表达冰水的力量像火焰一样热烈冷艳的含义。

语言表达是熟能生巧的事情。经常性的推敲、斟酌、精炼,表达就会越流畅自然,最终形成心流。

编程与 AI

无论 AI 看上去是多么的“聪明”, AI 目前是很难与具有创造力的人相提并论的。

给一个问题,去问一个具有丰富生活经验的人和 AI, 给出的答案,其内容和风格都很不相同。人的答案会包含丰富的社会文化因素,具有天马行空的特质,而 AI 给出的答案通常比较“死板”,缺乏灵性。即使从表达力来看,AI 也逊一筹。目前的 AI 只适合于批量生产要求不高的商业内容,一些看似有意思实际上经不起推敲的东西,其创造力和艺术性都没法与人相比。在很长一段时间,都可能如此。这是由 AI 的原理所决定的:它只能基于现有资料、推理和统计来生产内容,而推理和统计仅仅是人类创造力的一项,用来推理和统计的资料也少得可怜。AI 可以弥补你的知识盲点,却无法增强你的创造力。

让 AI 去写一篇“编程活动之思”,它绝难写出这样的文章来。因为这篇文章倾注了我多年的开发经验和感悟、读过的书和文字、形成的思想和表达风格。这种组合是很难推理和统计的。它也许并不完善,却有足够的个性。

静谧无语

静谧无语,心迹无声,默然无言。但心还在。那里面有无穷无尽的逻辑,像海洋一般;有大大小小的坑洞,有清澈之地,亦有浑浊之处;有美丽的小鱼儿,也有凶狠的鲨鱼。我们整日游弋于这海洋,偶尔冒个泡透点气儿;它本来可以如小溪潺潺,却变作江湖浩荡,未及海之包容。

posted @ 2023-11-25 20:58  琴水玉  阅读(52)  评论(0编辑  收藏  举报