`我每天都面对电脑, 老婆孩子便以为这不过是与机器为伍。虽看似有理, 但有失“偏颇”。 记得有天晚上, 老婆问我编程语言如何运行, 我便解释CPU的原理, 虽并未完全听懂, 但她依旧兴趣盎然。 我想, 不如写几篇文章, 来解释我为何“沉迷”于此, 且多次说过至死方休。望日后孩子也可了解这个"宅"爸爸。
“程序员”存在的原因, 是因为计算机不理解人类语言。
人类的语言复杂且隐晦,而编程语言简单而直白。
有种影响甚广的观点: 伟大的设计即简单的设计。 计算机行业更是将此奉为圭臬。
但现实是复杂的。
土星五火箭有700万个零件, Linux内核代码早已超过千万行, 连乐高直升飞机有几百块积木,孩子安装了4个小时才完工。
很多零件和代码都是“冗余”的, 丢掉一两块非关键积木也能把玩具组装起来。阿波罗13号残缺不全的也返回了地球。一个肾也可以活。所以适度的“冗余”是非常必要的。
“冗余”并非“多余”,无论是人类语言还是计算机语言。遗憾的是,因为对“伟大的设计即简单的设计”太过执着, 许多计算机语言的设计者过分简化了其设计,却把复杂性交给了程序员。
比如: Time flies like an arrow. 这句话对人容易理解,但是对计算机会有困难,因为flies还是苍蝇的复数形式。这时候就需要程序员编写算法来消除歧义。
一些随时出现的新兴词汇,如“娘炮请自重”“喜大普奔”等等,让电脑理解起来就更是难上加难了。
程序员这个职业会在哪天消失呢? 我想应该在计算机和人类无障碍沟通的那一天吧。
总结一下:
- 计算机不能理解人类的语言
- 人类语言复杂而隐晦
- 计算机语言简单而直白
- 程序员是机器和人类的翻译