分享

对于任何编程语言,数据结构和算法对于一个程序员重要到什么程度?

 瀚洋瀛洲 2017-02-02
不懂不学习一些计算机的基础知识,他的技术极限是正无穷。

就像 Srinivasa Ramanujan 一样大量重复前人的工作,反倒有了过人的洞察力,从而有能力作出开拓时代的发现。

然而对大多数人而言,把前人的成果摆在眼前尚且不能立即掌握,要让他从零开始独自一人重复千万人的工作恐怕更是天方夜谭。

这样的结果恐怕只是,在技术上,独自一人被全世界丢在身后,奋起直追,然并卵。

然而现实是,这样被丢在后面的人很多。。。孩子你不孤独,就算没有能力理解和掌握一种算法,你也可以把它当作黑盒调用前人写好调好的程序;虽然你可能始终无法理解 i++ 和 ++i 在速度上的差别,没关系,现代的编译器始终为你优化,你无需再在意该使用哪一种;看到开源代码中出现 (i << 3) + (i << 1) 你或许一脸蒙逼,但其实就算老老实实写成 i * 10 ,开高优化,二者生成的代码也都相当于 ((i + i) * 4 + i + i) ……

相反,冒泡排序背到滚瓜烂熟,真到应用时始终不如语言标准库实现的快排;熟悉动态规划、递归递推之间的转化,你能写出时间复杂度只有 O(mn)、空间复杂度只有 O(m + n) 的 Levenshtein 距离的实现,却不如隔壁老王从维基百科、 Stackoverflow 上复制粘贴;熟悉 IEEE 754 的你借助位运算近似得到 1/sqrt(x) 的值再用牛顿法迭代造就传世平方根倒数速算法,然而机器性能的增长使得这一运算不再成为瓶颈,同时借助 GPU 和开源工具任何人都能写出更快更好的程序……

好了我写不下去了,神来之笔在计算机科学界比比皆是,没有坚实的跨领域基础在背后支撑,你玩不到光影绚烂的 3D 游戏,搜不到 Chris Lomont 发表的研究平方根速算法的论文,用不上带有多点触摸 Touchbar 的 nbmp ,甚至想写程序还要在卡片上打孔,不,计算机压根就不存在,算盘也不存在,数学也不存在,人类还在茹毛饮血……

话说回来,如果没有坚实的计算机科学基础,你也能灵活运用别人写好的算法、程序让周围的人、老板对你刮目相看;但是懂得原理终究是不一样的,只会调用别人写的 Levenshtein 距离而不懂得原理,如果想实现 Sublime Text 那样先筛选子序列再按编辑距离排序,你永远也想不到要怎样修改……

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多