作为程序员,性能两个字一直围绕着大家的工作和学习,各种技术推陈出新,各种思想不断涌现几乎都是为了性能,因为人类本质就有着对速度的追求,所以最火爆的体育项目是足球,篮球而不是围棋。代码是人写的,自然也不例外,同样一个功能我的耗时比你短,那我自然就在行业里占据了先机,而为了提升性能,五花八门琳琅满目的解决方案层出不穷,除去升级硬件带来的性能提升,程序员更关心的应该就是算法层面的性能提升了。而最近正在网易公开课上看麻省理工学院公开课:算法导论,刚看完第一节课就被其中一些内容深深吸引了,特此总结出来分享给大家。

课程中教授提出了这么一个问题,各位可以先想一想:

在程序设计方面,什么是比性能更重要的呢?

其实在工作中经常遇到这样的情况,线上某个模块响应时间长,然后我们才会去排查问题,去优化。也就是说往往是等到出现了性能问题,我们才会去试图提升性能,而不是从写第一行代码开始就去思考,这行代码还能不能更快?这也是反映了虽然性能很重要,但其实有很多比性能更重要的东西,视频课程中教授和学生们说出了许多方面,我总结出供大家参考:

正确性,简洁性,可维护性,成本,稳定性,功能性,安全性,用户友好

既然这么多方面都可能是优先于性能去考虑的,那性能到底是重要还是不重要呢?教授给出了一个让我非常印象深刻的举例:算法或者说性能其实是处于最底层的东西,它就相当于是钱一样,仔细想想对于一个人来说,食物,水,衣服,房子都比钱重要,可是我们为什么最关心的是挣钱呢?因为那些东西都需要用钱去支付,你愿意为食物支付钱,你也愿意攒钱去买房,这就是为什么我们关心如何挣钱。而在一个程序中,你需要用性能作为支付其他东西的货币,上述的任何一方面都有可能会消耗性能,但是当你需要保证你程序的正确性时,你可能愿意降低性能来换取数据的准确,当你的程序需要安全性时,你肯定也愿意多加两层验证,并为此消耗一些性能,所以当我们在做优化提升性能的时候就像是我们在挣钱,只有挣钱了你才有能力去选择你想要的东西,只能性能提升后才能考虑扩展业务规模。

这里不得不感叹大神的思想,虽然自己在工作中也做过优化,也在学习中了解过优化技巧,但是从没有把这些知识和其他方面结合起来过,只是很片面的工作和学习,看来和真正的大神还真是有不小的差距啊。

麻省理工学院公开课:算法导论 观后感 —— 性能是一种货币相关推荐

  1. Python语言程序设计之urllib.request抓取页面,网易公开课之《麻省理工学院公开课:算法导论》

    Python语言用urllib.request模块抓取页面非常简单,再将抓取的页面内容用re模块解析,找出自己想要的东西.下面就就此方法来抓取网易公开课之<麻省理工学院公开课:算法导论>, ...

  2. 麻省理工学院公开课:计算机科学及编程导论习题2

    习题1: 已知6a + 9b + 20c = n,当n = 50, 51, 52,53, 54, 55时,a.b.c有自然数解(我不知道现在是怎么定义的,但我以前学的时候自然数包括0), 如何求出n ...

  3. 麻省理工学院公开课:单变量微积分习题课

    http://open.163.com/special/opencourse/calculus.html [第1集] 课程简介 (已看) [第2集] 导数的定义 (已看) [第3集] 导数的图像 (已 ...

  4. 麻省理工公开课:线性代数》中文笔记来了

    MLNLP社区在Github上最新发布了一套MIT线性代数课程Linear Algebra的学习笔记,目前已获得1600star.项目简介如下所示,欢迎大家关注! 1.项目动机 <麻省理工公开课 ...

  5. 算法导论-麻省理工公开课-百度云

    资源来源于网络,若有侵权,请告知,我会在24小时之内删除~~ 我整理的资源已汇总,请访问:资源汇总贴,选择自己还需要的资源~ 算法导论的视频教程,算法导论,算法中的圣经啊.分享麻省理工的公开课,需要的 ...

  6. 麻省理工公开课《算法导论》学习笔记:第一讲

    主题:简介课程,渐近概念的大局观,插入排序和归并排序,递归式函数时间分析(递归树方法) 教材:<算法导论> 收获:很感动地看到算法分析那个log(n)是为什么出现了,更深层还要听第二讲,若 ...

  7. 普林斯顿公开课 算法1-5:算法理论

    本节主要解说的是算法的复杂度. 算法性能 算法的性能分为三种: 最佳情况:计算时间最短的情况 最差情况:计算时间最长的情况 平均情况:随机输入的期望开销 以二分查找为例 最佳情况是1,由于第一次就有可 ...

  8. 麻省理工公开课:微积分,中文字幕视频+PDF

    数学是机器学习的语言,统计是构建机器学习的基础,线性代数为机器学习提供了矩阵这一强大工具,但是要充分理解神经网络以及深度学习如何运作的,还需要学好微积分. 大家应该多少对微积分有些基础,但是很难将其与 ...

  9. 普林斯顿公开课 算法2-2:选择排序

    选择排序就是对数组进行扫描,每次扫描找出最小的元素,并将其提到元素的前面. 动图 http://www.sorting-algorithms.com/animation/20/random-initi ...

  10. 加州理工学院公开课:机器学习与数据挖掘_神经网络

    转载自:http://blog.csdn.net/feitianhu213/article/details/39899463 课程简介: 本节课主要介绍人工神经网络.通过介绍评定模型,随机梯度下降法, ...

最新文章

  1. C#进行MapX二次开发之鹰眼实现
  2. C#中在多个地方调用同一个触发器从而触发同一个自定义委托的事件
  3. VTK:可视化之QuadricLODActor
  4. STM32之FSMC-SRAM例程
  5. 外键约束 mysql
  6. npm 报错: npm ERR! code ERESOLVE , npm ERR! code E404
  7. replace()替换文字
  8. 层次化防御保证企业门户网站安全
  9. go语言暂停命令_go test命令(Go语言测试命令)完全攻略
  10. 一张图学会python3语法-一张图理清 Python3 所有知识点
  11. ubuntu简单安装oracle,Ubuntu上Oracle10g安装是一件很简单的事情
  12. OCR条形码控件字体支持多种格式的OCR字体
  13. Win10 wifi、蓝牙打不开
  14. Google版 “AirDrop” 姗姗来迟,万能联播缘何超越Nearby Sharing?
  15. PHP计算一年有多少周,每周开始日期和结束日期
  16. Python编程实例03——对英文文本进行分词
  17. 学习方法之——费曼技巧学习
  18. 计算机应用基础南京廖华,《计算机应用基础》习题及答案
  19. Kotlin读书笔记之函数式kotlin
  20. 华为android机考题,华为无线题库_华为射频机考,华为无线射频题库

热门文章

  1. HDU 4966 GGS-DDU [最小树形图]
  2. 【PTA】【Python】【拼题A 2022 跨年挑战赛】投票
  3. kettle能否自动建表_Kettle、Python实现报表自动化
  4. 纷享销客罗旭对话元气森林黄晓枫:零售数字化的终点不是创新,而是数据
  5. Mysql支持translate函数吗_Oracle-函数-translate
  6. 【mysql】浮点类型
  7. ARM GCC浮点相关总结
  8. 整理了上千个 Python 工具库,涵盖24个大方向
  9. saltstack 返回mysql_saltstack(返回值存储到Mysql)
  10. ims应用服务器,IMS业务应用服务器部署方式分析.PDF