不具备数学和算法知识能否成为优秀的开发人员(2)

Knowledge of algorithms has very little to do with programming skill.  As some random dude* on the internet once said:  "When in doubt, use brute force."  Let‘s unpack what this means.

A good programmer knows how to implement a dictionary algorithm in Python.  A great programmer knows that someone smarter than she is has already implemented a dictionary as part of the python language, and trusts that it will work well enough for most purposes.

A good programmer tries to pick the best algorithm in terms of performance.  A great programmer picks the simplest non-stupid algorithm and only considers changing it later if performance is an issue (it almost never is), if changing the algorithm will significantly improve overall performance (it almost never does), and if the performance improvement justifies the cost of making the change (how many dollars is a 5% overall improvement worth?).

Good programmers have a deep understanding of big-O notation.  Great programmers know that in the real world, battles are won and lost in the coefficients.  (This is particularly true in kernel and compiler coding.)

Good programmers know that they‘ll spend 98 days/year debugging and 2 days/year doing performance optimization.  Great programmers tilt that ratio towards optimization by choosing simpler algorithms that are easier to understand and easier to debug.

To give an analogy:  you don‘t really need to understand assembly language to be a great programmer, unless you happen to be writing operating system or compiler code.  Likewise, you don‘t really need a deep understanding of algorithms unless you‘re writing mathematical libraries, in which case, you do.

时间: 2024-08-06 16:04:45

不具备数学和算法知识能否成为优秀的开发人员(2)的相关文章

不具备数学和算法知识能否成为优秀的开发人员

To explain why, I'm gonna assume you have little to no programming background and try to use an analogy. I apologise in advance if this answer becomes  long. Say you wanted to build a small toy house with a kid. You buy some lego bricks and you two w

百钱百鸡,用高中数学优化算法

背景介绍 学习算法的道路上总会有各种各样的感受,偶然间碰到一个源自我国的算法问题,百钱百鸡问题,貌似很经典的问题了,可是我才刚刚知道,感觉自己太LOW了.题目是出自古代的一本叫做算经的书,原文是文言文就不往出贴了,贴了也看不懂,说大家能听懂的话就是: 有公鸡,母鸡,小鸡三种鸡,公鸡5块钱一只,母鸡三块钱一只,小鸡一块钱三只,要求用一百块钱买上面三种鸡(都要有),并且三种鸡总数是一百只,要求所有的解法. 分析 在感叹古人物价的同时,思考题目,其实很简单,只需要满足两个条件: 公鸡 + 母鸡 + 小

[转]一些NSArray,NSDictionary,NSSet相关的算法知识

iOS编程当中的几个集合类:NSArray,NSDictionary,NSSet以及对应的Mutable版本,应该所有人都用过.只是简单使用的话,相信没人会用错,但要做到高效(时间复杂度)精确(业务准确性),还需要了解其中所隐藏的算法知识. 在项目当中使用集合类几乎是不可避免的,集合类的使用场景其实可以进行抽象的归类.大多数时候我们需要将若干个对象(object)暂时保存起来,以备后续的业务逻辑进行操作,「保存和操作」,或者说「存与取」,对应到计算机世界的术语就是读和写.最初保存的时候我们Ins

svm中的数学和算法

支持向量机(Support Vector Machine)是Cortes和Vapnik于1995年首先提出的,它在解决小样本.非线性及高维模式识别中表现出很多特有的优势,并可以推广应用到函数拟合等其它机器学习问题中. 一.数学部分 1.1二维空间 支持向量机的典型应用是分类,用于解决这种问题:有一些事物是能够被分类的,可是详细怎么分类的我们又说不清楚,比方说下图中三角的就是C1类,圆圈的就是C2类,这都是已知的,好,又来了一个方块,这个方块是属于C1呢还是属于C2呢,说不清楚.SVM算法就是试着

算法知识目录整理

算法知识目录整理 1. 算法部分 二分搜索 Binary Search 分治 Divide Conquer 宽度优先搜索 Breadth First Search 深度优先搜索 Depth First Search 回溯法 Backtracking 双指针 Two Pointers 动态规划 Dynamic Programming 扫描线 Scan-line algorithm 快速排序 Quick Sort 2. 数据结构部分 栈 Stack 队列 Queue 链表 Linker List 数

数学、算法杂思

1.世界的本质是算法? 2.系统原本? 3.数学与算法 数学是对事物存在和运行的描述: 算法是对事物存在和运行的模拟: 数学的抽象级别更高: 算法更注重细节和步骤: 数学是微积分的概念和结果: 算法是积分每一步的运算的模拟. 世界的最高抽象是数学 世界的模拟是算法: 原文地址:https://www.cnblogs.com/feng9exe/p/10919594.html

Web开发人员需知的Web缓存知识

什么是Web缓存,为什么要使用它? Web缓存游走于服务器和客户端之间.这个服务器可能是源服务器(资源所驻留的服务器Add),数量可能是1个或多个:这个客户端也可能是1个或多个.Web缓存就在服务器-客户端之间搞监控,监控请求,并且把请求输出的内容(例如html页面. 图片和文件)(统称为副本)另存一份:然后,如果下一个请求是相同的URL,则直接请求保存的副本,而不是再次麻烦源服务器. 使用缓存的2个主要原因: 降低延迟:缓存离客户端更近,因此,从缓存请求内容比从源服务器所用时间更少,呈现速度更

Linux系统基础知识-嵌入式迅为4412开发板学习笔记

1. 什么是Linux系统编程 详情了解:http://topeetboard.com  更多了解:https://arm-board.taobao.com Linux系统编程分为三个部分:系统调用.C库和C编译器. 系统调用系统编程的基础是系统调用,也结束于系统调用.在带有操作系统的嵌入式开发中,需要从操作系统申请一些服务和资源,从用户空间向内核发起的一些函数调用.系统调用包括对文件的读写.进程的控制等等.在Linux中,系统的实现少于其它内核.例如在Windows下有几千个系统调用,但是在L

开发人员应具备的产品设计意识

作者:朱金灿 来源:http://blog.csdn.net/clever101 有时我想:开发人员应该具备怎么的产品设计意识呢?有时我对一些软件的丑陋和非人性化操作是不能忍受,感觉开发人员具备一些产品设计意识实在很有必要了.我想需要简单做到简单两点:界面的和谐统一和操作的人性化. 首先需要明白的一点是很多时候界面做得差并不仅仅是缺乏产品设计的意识,更可能是缺乏认真细致的工作作风.比如有次我看到一个同事的对话框是这样的: 上面这种错误其实是只需要做完功能之后自己认真检查一下就能发现. 界面的和谐