编程漫谈(九):编程活动之思
编程应像数学一样严谨, 像文学一样流畅。
编程久了, 不免会问: 编程究竟是一种怎样的活动? 如何才能做得更娴熟更有创造性 ?
借助于编程语言以及围绕其建设的社区、平台、技术、框架、组件和工具, 在计算世界中表达和建造世界。
编程之法
分解、抽象、组合,使用合适的工具。
- 观察、思考、理解现实世界的人事物、活动、流程及规则,洞察人们的需要;
- 确定目标、思路、方向;
- 将要构建的系统分解为相互协作的子系统;
- 将具体的事物和行为抽象成数据模型和可计算结构;
- 采集、传输、预处理数据并存储到指定结构;
- 使用合适的算法和工具处理数据及结构;
- 使用合适的代码框架将指令逻辑块组织起来;
- 适应大规模数据的处理或实时性处理。
编程构造块
语言为要素:编程语言、编程方法(结构化、面向对象、函数式、元编程)、 数据结构、基础算法;
设计为导引:设计原则、设计模式、设计实践;
技术为产出:通过编程和设计,创造技术解决现实问题。
编程与技术
技术就像已经发明的刀剑、枪炮、战车、导弹。
掌握现有技术使得程序员能够利用已有的经验去更高效地创建可用的软件, 同时又使得程序员容易局限于特定技术, 不愿往更广阔的领域开拓。技术是编程的强大武器, 但作战亦不能太依靠武器。今天的技术不一定能适应明天的场景,因此,今天的技术应作为重要参考,但不宜过于依赖。
编程的社会性
编程是个体与社会性相结合的活动。多交流。
从日常编程经验来看, 很容易认定编程是一种个体性的活动, 这是因为日常所使用到的是“技术、框架、组件和工具”。 但是若注意到编程的背后有默默支持的“社区和平台”, 就明白自己并不是在“孤军作战”。
真相在代码里
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们正在与自己的思维作战。编程是逻辑的语言表达活动。
静谧无语
静谧无语,心迹无声,默然无言。但心还在。那里面有无穷无尽的逻辑,像海洋一般;有大大小小的坑洞,有清澈之地,亦有浑浊之处;有美丽的小鱼儿,也有凶狠的鲨鱼。我们整日游弋于这海洋,偶尔冒个泡透点气儿;它本来可以如小溪潺潺,却变作江湖浩荡,未及海之包容。