数学是成就卓越开发人员的必备技能

2023-10-26

本文转载至:http://blog.jobbole.com/444/

编者按:原文作者Alan Skorkin是一名软件开发人员,他在博客中分享对软件开发相关的心得,其中有很多优秀的文章,本文就是其中一篇,作者认为:成为优秀的开发人员,可以没有数学技能,但成为卓越的开发人员,不能没有

不久之前,我开始思索数学。你也知道,到目前为止,我编写软件也有几年了。老实说,在我的工作当中,我还没有发现有关数学的需求。我要学习和掌握许多新东西,包括语言、框架、工具、流程、沟通技巧和可以用来做你想到的任何东西的库。在我学的新东西中,数学并没有帮助。当然了,这不足为奇,我所做的工作,大部分都是CRUD类型(编注:CRUD是Create、Read、Update和Delete的首字母缩写)。在互联网时代,这也是我们多数开发人员所做的大部分工作。如果你做顾问,你主要是在做网站;你在大公司上班,你主要是在做网站;你做自由职业者,你主要是在做网站。我很清楚我是在总结,但请忍耐一下,我跑偏了。

最后你对此有些厌倦了,我也如此。别误会我,这可以是项有趣并有挑战性的工作,有机会解决问题,并和有趣的人一起互动,在工作时间做这个,我高兴。但在我个人时间中搭建更多的网站,这种想法已经稍微失去其光泽,于是你开始寻找一些更加有趣/酷/好玩的事情,我再一次地也如此。(所以,)有些人转移到前台和图像技术,比如视觉反馈就比较诱人。但我并不是其中一员(虽然我和别人一样都喜爱前台,但它真的不能让我兴奋。)这就是当我遇到一些搜索相关的问题时,我为什么决定深入挖掘的原因了。这把我带回到故事的一开始,因为一旦我抓到第一把充满搜索的铁铲,一旦我“撞到”数学时,我才真正意识到,我的技能恶化的程度。数学并不像骑自行车,长期不用就会忘记。

拓展视野

多对搜索的一些了解,让我接触到各种有趣的软件和计算机科学相关的事情和问题(包括机器学习、自然语言处理、算法分析等)。现在,在我接触的各方面,我都看到了数学,所以我更加强烈地感觉到自己技能缺乏。我已经意识到,如果你想利用计算机做又酷又有趣的事,你需要达到一个像样的数学能力水平。除了上面说的三个,还有一些,如:密码学、游戏人工智能、压缩算法、遗传算法、3D图形算法等。在理解之后,如果你想要编写我们正讨论的那些库和工具,而不是仅仅使用它们(即:做一个“消费者”,而不是“生产者”),那你需要数学(知识)来理解这些领域背后的你能应用的理论。即便如果你不想编写任何库,当你真正理解事情的原理,你在构建软件时,它能给带来更多的成就感,绝非仅仅把它们连起来,就希望它们去做任何它们应该能做的。

虽然大多数开发人员会告诉你,他们在工作中从来不需要数学(就像我前面说的 :)),但是经过一番沉思后,我有了个想法(突发灵感):就是反马斯洛的锤子理论。你知道这个吧,当你有一把锤子,你会把一切看成是钉子。(注:伯乐在线编译的《每位开发人员都应铭记的10句编程谚语》中的第7条就是锤子理论。)这是一个隐喻,也就是说人们乐于使用自己钟爱的工具,即便这并不是手中工作的最好工具。数学就是我们的一个相反的锤子。我们知道有这个锤子,但并不太子的如何使用。所以,当我们遇到问题,我们的锤子是解决问题的最佳工具时,我们却从未认真考虑过它。对我祖父而言,螺丝刀够用了;对我父亲来说,也很好;对我来说,同样如此。谁还需要锤子?数学的技巧在于,人们惧怕它,甚至大多数程序员,你认为我们不会怕,但我们确实怕。所以,我们把自己的话转变为可以自我实现的预言。这并不是我在工作中不需要数学,这只是我真的不知道,即便我知道,我也不知道如何使用它。所以我并没有使用它,当缺少某些东西时,如果你长期将就,不久后你甚至不会察觉它的缺失,所以对其需要更少了,这是自我实现的预言。

针对思索接近我们内心世界,这里有一些的“粮食”——学习新技术。作为一名协作世界的开发人员,你努力成为一名通才型的专才(如果你不知道我在说什么,可以看看这本书《The Passionate Programmer:Creating A Remarkable Career In Software Development》)。你尽力在多数事情上做的体面,并在有些事情上做的优秀。但是你擅长什么?一般来说,人们会选择一两个框架或一门语言,然后与之相伴,这样是不错。但是要看到,框架和较小范围内的语言都有保质期。如果你要做一名Hibernate、Rails或Struts专家(使用struts的朋友现在真的应该担忧一下了),当新框架取代当前的框架时,你在几年内将不得不重新洗牌。所以,这也许是你真正的最好投资,但也可能不是。另一方面,数学是不会很快消逝的。在我们领域中所做的一切,都是建立在稳固的数学原理之上(算法和数据结构正是这样的例证),所以用在数学上的时间绝不是浪费,这不可辩论。再重复一次,总结起来就是:要真正理解东西,而不是非死记硬背地使用。当涉及到计算机时,数学能有助你更深入地理解你所做的。事实上,正如Steve Yegge所言,作为程序员我们所做的事很像数学,只是我们甚至都没有意识到这一点。

什么/谁造就了与众不同?


(唐纳德)

你不相信我?那请你想想:在我们的领域中,几乎人人普遍尊敬的卓越程序员同样也是大数学家。我是说像唐纳德·克努斯艾兹格·迪杰斯特拉诺姆·乔姆斯基彼得·诺维格(Google研究院总监)这一类人。但是这些家伙并非真正的开发人员,他们是计算机科学家,这能真正算数么?我再一次觉得,在我们写出的纯代码行数能达到这些人所写的十分之一之前,也许我们不应该再去讨论这些问题了。当然,不当科学家,你也能获得成功和名誉,大家都听过加文·金(Gavin King,Hibernate创始人)或戴维·海涅梅艾尔·汉森(DHH,Ruby on Rails创始人)。这还挺真实的(是不是有很多人听说过加文和戴维,虽然这还有待确认),但是“听说过”和普遍尊敬是不同的,这种差别就如同创建一个框架,和在你的领域中为人类知识所做出的全部重大推动两者之间的差别。(不要误会我,我尊重加文和戴维,他们所做的事,远远超过我,但是这不能影响我所说的事实)。所有的这些相关么?我不知道,可能不相干,但在我们反省之后,我想无论如何要把它“扔掉”。

如今的世界正充满着数据,每日都增加更多的数据。而在以前,我们在相对少量的数据下享受工作。我们今日编写的软件必须高效处理海量数据。甚至在协作世界,这也是愈加明显的事实。这也就是说,你更不可能只“启动东西”,就想看其如何运作,因为你要处理的数据量将困住你,除非你非常了解它。我的预测是:算法分析将对于 Lay Programmer 越来越重要,以前不仅如此,以后也更加如此。如果要成为一位体面的算法设计专家,需要什么?你猜到了,是一些数学技能。(编注:Lay Programmer是指那些不认为自己是程序员的程序员,详情请见Martin Fowler的解释。我暂未想到合适的简短叫法,如果哪位朋友知道,请在评论中说明。)

所以,我该怎么办呢?嗯,我已决定一点一点地建立或恢复我的数学技能,虽然还有大量的书要看,大量的代码要写,但我会尽力抽时间放在数学上,这就像锻炼,时不常的锻炼总聊胜于无(再次引用Steve Yegge的话)。说到数学,我袖中当然还藏有一张王牌,它对我有利,但很幸运,有这个博客,我们都会受益的。(我知道你好奇,一会告诉你 :) )。

你在5年内的规划如何?


(极限水上滑板)

那么,数学对所有事都有利么?这事先很难说,我对我现在的处境十分满意,或许你也如此,但这都和潜能有关系。如果你是协作世界的一名开发人员,你真的不需要数学。如果你乐于你的整个职业生涯是这样的:在工作时间中做企业CRUD应用,或在闲暇时间滑翔跳伞或极限水上滑板(或其他各种时髦的极客运动),也分配较多时间在Spring、Hibernate、Visual Studio或其它东西上。(其实)那些特殊的职位并没有真正限制你的潜力,你能变得极具价值,甚至可深入追求。但是如果你想为多样化的职业生涯而奋斗,想要有能力尝试几乎所有涉及代码的事,从信息检索到Linux内核。总之,如果你想成为一个开发人员、程序员和计算机科学家的完美组合,你必须确保你的数学技能达到标准(哎,你还是可以去玩滑翔跳伞或极限水上滑板)。长话短说,如果你在数学方面有一定天赋,那在软件开发领域中没有向你关着的门,如果没有,那一切都是CRUD型工作!


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数学是成就卓越开发人员的必备技能 的相关文章

  • 为什么配方法化二次型为标准型一定可以做到可逆线性变换

    定理 对任意一个 n 元二次型 f x 1 x 2
  • 时间序列的特征工程——一些总结

    一个说法在最前面 创造新的特征是一件十分困难的事情 需要丰富的专业知识和大量的时间 机器学习应用的本质基本上就是特征工程 Andrew Ng 大佬整理的一个时间序列预测方法总结 时间序列预测方法总结 知乎 特征工程的流程介绍 关于做特征工程
  • 备战数学建模1-MATLAB矩阵相关

    目录 一 数值数据 二 常用函数 三 变量及其操作 四 矩阵的基础应用 五 MATLAB基本运算 六 字符串处理 七 特殊矩阵 八 矩阵变换 九 矩阵求值 十 矩阵的特征值与特征向量 十一 稀疏矩阵 一 数值数据 1 整型 整型分为有符号整
  • 【SSL_1232】雷达覆盖

    思路 以一个点作为平角 计算几何统计 c o d e code code include
  • EM算法估计beta混合模型参数

    1 用 network memerisation 造成的 clean noisy 数据 loss 差异来区分 clean noisy data 当得到一批数据的 normalised loss l i 0
  • 从零到熟练编写LaTex数学公式,这两篇就够了

    第一篇 LaTex公式编辑方法 快速手敲一遍 熟悉常用操作 第二篇 CSDN官方参考文档 有不清楚的 随手查阅 在线公式编辑 实在打不出 就在线编辑吧
  • 参数估计(Parameter Estimation):频率学派(最大似然估计MLE、最大后验估计MAP)与贝叶斯学派(贝叶斯估计BPE)

    基础 频率学派与贝叶斯学派 http www douban com group topic 16719644 http www zhihu com question 20587681 最大似然估计 Maximum likelihood es
  • 两直线垂直,斜率乘积为-1的证明

    老早以前在学习初等函数的时候 线性函数中的两直线y m0x b0 y m1x b1如果垂直 则有结论两条直线的斜率乘积为 1即m0 m1 1 以前也只是拿来用 没有证明过 最近在学图形学的时候 突然想起了这个点 因此记一篇笔记 证明一下 如
  • 数据结构 数学知识复习

    文章目录 指数 对数 级数 模运算 证明方法 归纳法证明 反例法证明 指数 X A X B
  • 拉格朗日插值

    直接上公式 简单的讲 这个玩意就是在给你若干个 f xi yi 的结果 算出f k 的结果 最朴素的实现方法 验证下这个公式的结果 include
  • 方差、标准差、协方差、协方差矩阵、散度矩阵

    方差 统计中的方差 样本方差 是每个样本值与全体样本值的平均数之差的平方值的平均数 概率论中方差用来度量随机变量和其数学期望 即均值 之间的偏离程度 1 统计 方差用来计算每一个变量 观察值 与总体均数之间的差异 为避免出现离均差总和为零
  • 三角函数与反三角函数的关系及图像

    文章目录 TOC 1 正弦函数 sin x 反正弦函数 arcsin x 2 余弦函数 cos x 反余弦函数 arccos x 3 反正弦函数 arcsin x 反余弦函数 arccos x 4 正切函数 tan x 余切函数 cot x
  • 概率-什么是一阶矩,二阶矩?

    根据S M 罗斯的概率论教程 一阶矩指E X 即数列X的均值称为一阶矩 以此类推 E Xn n 1 称为X的 n阶矩 也就是二阶矩 三阶矩 参考 1 图灵数学 统计学丛书08 概率论基础教程 第7版 美S M 罗斯 郑忠国 译 人民邮电出版
  • 容斥原理——经典例题(组合数学)

    一 容斥原理 就是人们为了不重复计算重叠部分 想出的一种不重复计算的方法 先来认识一下这两个符号 与 如图 蓝色的圈就是c1c2 红色的圈围起来的就是c1c2 二 例题 组合数学 1 题目 1 1 题目描述 八是个很有趣的数字啊 八 发 八
  • LaTeX 数学公式大全!

    LaTeX 数学公式大全 这里是来自一篇教程的截图 很全面
  • 2的31次方和3的21次方哪个大,123组成最大的数是多少?

    123这三个数字组成最大的数是什么数 面试官告诉小孙 123这三个数字组成最大的数是什么数 我希望你能够在5分钟之内回答出来 小孙当时连想都没有想 123组成的最大数字 当然就是123了 当小孙把这个答案告诉面试官的时候 面试官摇摇头 然后
  • 【华为OD机试真题 python】数字加减游戏【2022 Q4

    题目描述 数字加减游戏 小明在玩一个数字加减游戏 只使用加法或者减法 将一个数字s变成数字t 在每个回合中 小明可以用当前的数字加上或减去一个数字 现在有两种数字可以用来加减 分别为a b a b 其中b没有使用次数限制 请问小明最少可以用
  • 数学界的扫地僧们(转)

    转载连接 http www newsmth net nForum article WorkLife 752660 前两天跟一个老同学聊近年来数学上的重大发现 结果作为科普人的我说着说着就发现 数学史原来就是一部八卦史 这个圈子奇葩辈出 怪事
  • Mathematica函数大全

    一 运算符及特殊符号 Line1 执行Line 不显示结果 Line1 line2 顺次执行Line1 2 并显示结果 name 关于系统变量name 的信息 name 关于系统变量name 的全部信息 command 执行Dos 命令 n
  • 高中数学:因式分解(初接高)

    一 乘法公式 二 十字相乘法 例题 三 增添项法 主要解决整式中含高次项的因式分解题 补充 由于数学笔记 用键盘敲实在是麻烦 这里就把我的笔记截图上来了 大家将就看 有看不清楚的地方 可评论 定回复

随机推荐

  • Spring使用三级缓存解决循环依赖

    前言 Spring 中使用了三级缓存的设计 来解决单例模式下的属性循环依赖问题 这句话有两点需要注意 解决问题的方法是 三级缓存的设计 解决的只是单例模式下的 Bean 属性循环依赖问题 对于多例 Bean 和 Prototype 作用域的
  • 查看264NAL信息工具

    用easyice只可以查看TS包的帧类型 google了一下 发现了这个工具HEVCBSAnalyzer https github com latelee HEVCBSAnalyzer 从git上下载下来 直接使用release文件夹下的工
  • java 代码扫描_静态代码扫描 (四)——Java 资源关闭研究

    这是静态代码扫描系列文章的第四篇 前三篇文章介绍了如何使用 PMD 和 Findbugs 自定义规则 我们火线团队最近一直在研究 java 资源关闭的检查规则 发现市面上开源的工具针对资源关闭的检测都存在一定不足 同时也无法满足我们业务的需
  • matlab矩阵操作

    矩阵及其操作 前言 一 矩阵的建立 二 向量的产生 冒号表达式 结构矩阵和单元矩阵 结构矩阵 单元矩阵 三 矩阵的操作 矩阵元素的引用 利用冒号表达式获得一部分子矩阵 删除矩阵 改变矩阵的形状 总结 前言 矩阵是matlab中最基本的数据对
  • SpringBoot如何配置数据库

    0 写在前面 项目启动需要一个链接数据库 所以在此记录一下 根据配置文件的后缀书写格式略有不同 此处以MySQL为例 使用Maven为例 1 引入依赖
  • Java——GUI——输入框事件监听

    代码演示 package Gui import java awt import java awt event ActionEvent import java awt event ActionListener public class Tes
  • 信息学奥赛一本通(2029:【例4.15】水仙花数)

    2029 例4 15 水仙花数 时间限制 1000 ms 内存限制 65536 KB 提交数 1242 通过数 718 题目描述 求100 999100 999中的水仙花数 若三位数ABCABC ABC A3 B3 C3ABC A3 B3
  • ASP.NET IIS 注册工具 (Aspnet_regiis.exe)

    当在一台计算机上安装了多个 ASP NET 版本时 就说 ASP NET 是并行运行的 在此安装中 Internet 信息服务 IIS 需要知道哪个 ASP NET ISAPI aspnet isapi dll 版本应该处理 ASP NET
  • k8s集群中部署服务之Dockerfile文件准备

    微服务项目各微服务Dockerfile文件准备 一 获取jar的方法 二 各微服务Dockerfile文件准备 2 1 mall auth FROM openjdk 8 ENV TZ Asia Shanghai EXPOSE 30000 V
  • 计算机专业论文选题网站方面,5大网站汇总,搞定新颖的计算机专业毕业设计网站汇总...

    原标题 5大网站汇总 搞定新颖的计算机专业毕业设计网站汇总 2021年了 很多计算机专业的同学都会问 我不想再做XX管理系统 XX选课系统了 哪里有一些新颖的毕业设计题目可以参考 或者做新颖的毕业设计应该浏览哪些网站 笔者根据自己的经验 给
  • 十折交叉验证10-fold cross validation, 数据集划分 训练集 验证集 测试集

    机器学习 数据挖掘 数据集划分 训练集 验证集 测试集 Q 如何将数据集划分为测试数据集和训练数据集 A three ways 1 像sklearn一样 提供一个将数据集切分成训练集和测试集的函数 默认是把数据集的75 作为训练集 把数据集
  • 书写我的人生回忆录-这应该是给父母最好的礼物

    作为一个业余的软件开发爱好者 我又捣鼓了一个有意思的小东西 使用完全免费哈 书写我的人生回忆录 是一款软件 其中包含70个问题 涵盖了父母的个人喜好 家庭 工作 人生经历和态度等方面 通过回答这些问题 您的父母将有机会反思他们的人生 并与您
  • Faster Rcnn 代码解读之 config.py

    from future import absolute import from future import division from future import print function import os import os pat
  • unordered_map详解

    p include stdafx h include p
  • spark基本知识点之内存管理

    原地址 点击打开链接 Spark Memory Management 25 Replies Starting Apache Spark version 1 6 0 memory management model has changed Th
  • GIS项目启动时手动添加依赖

    gis项目在idea下启动前需要手动安装的包 mvn install install file DgroupId org geotools jdbc DartifactId gt jdbc oracle Dversion 18 2 Dpac
  • centOs 6.5 ssh配置无密码登入

    1 安装ssh 若没安装的话 sudo apt get install ssh 2 配置为可以免密码登陆本机 2 1查看在master用户下是否存在 ssh文件夹 ssh前面有 的是隐藏文件夹 输入命令ls a home master 我的
  • omnifocus3透视 任务分类实例详解

    目录 1任务分类 2标签 任务细化的一种属性 3任务分类实例详解 4透视 上大学之前 好巧 今天9号 高考结束 我们每周的任务数量很明确 本学期几本书的学习 复习 但是步入社会之后 参与项目数量逐渐增加 需要沟通的人也越来越复杂 每日任务不
  • 认识 ESP-IDF-v4.3+工程结构(ESP32-C3应用调整示例)

    ESP32 C3 学习测试到今天 一直在使用 ESP IDF 的框架 但是还从来没有注意过工程结构 遇到复杂一点的项目 工程结构就显得太乱了 本文就来了解下 ESP IDF 工程结构 目录 前言 一 ESP IDF工程基本框架 1 1 工程
  • 数学是成就卓越开发人员的必备技能

    本文转载至 http blog jobbole com 444 编者按 原文作者Alan Skorkin是一名软件开发人员 他在博客中分享对软件开发相关的心得 其中有很多优秀的文章 本文就是其中一篇 作者认为 成为优秀的开发人员 可以没有数