最近看了一本书,很有趣,是结城浩(Hiroshi Yuki)的《程序员的数学》。首先强调的是,这是一本很基础的数学讲义,整体的深度略平于初中水平,所以读起来很轻松,但从专业性上来说,太简单了。在一般的编程中,程序员通常不需要掌握很深奥的数学知识。不过,认清并简化问题结构,总结出具有一致性的规则等,对于程序员来说还是很有必要的。
任何人都可以编程,可以学程序,写程序,但不是任何人都适合成为一名好的程序员。数学是一种可用的工具,是所有人都绕不开的学科,程序员也是如此。开发中经常遇到的if…else,while…,for…等关键字,或不小心遇上的死循环。这些看似每天都在用的知识,其基础都是数学。数学的本质是数理能力和逻辑能力,数学差并不代表这两种能力差,也可能只是考分不高而已。编程确实依赖这俩能力。考察一个人数理和逻辑能力,光靠数学是不够的,但若一个人数学很好,这两项能力一定不差。
不会数学也能编程,但是没有艺术性。好的程序结构清晰,实现理念好,实现细节让人拍手叫绝,而差的程序即使有注释都不想多看一眼,高下立判。而且在有些方向上会很吃力的,比如算法。数学逻辑不行,可能需要比别人多几倍的时间来理解。厉害的人会根据对算法的理解,面对实际问题去调整,优化性能。实现一个相同的功能,时间相差会很大。
回顾本书,脑海中会浮现出‘人类不擅长某事’的印象,而正是这些‘不擅长’,催生出了各种闪耀的智慧。人类为什么需要计算机?因为我们不善于重复枯燥乏味的事情,而计算机却特别善于处理重复有规则的问题。每一个程序员都要有此觉悟:我们是沟通人类世界和机器世界的翻译者,每一个问题,每一个需求的到来,最初的解决思路就是化繁为简,化不规则为规律,这样我们才能将人类世界的问题转换为机器世界能够理解和解决的问题。经验归纳和推理演绎,是17世纪以来科学时代用以揭开世界迷雾的有力武器,也是如今科技飞速发展的强大动力。
不要觉得“不擅长数学”就漠然处之,而要想到“数学妙趣横生,要多加运用”,给每天的编程都注入数学的思维方式。数学就如同作者说的,要用积极的态度去面对并体会它的“美丽”。
网友评论