阅读更多

4顶
1踩

研发管理

转载新闻 编程从业 5 年后的 14 条经验

2013-04-19 17:48 by 副主编 WnouM 评论(44) 有21674人浏览



排列不分先后:

1. 当性能遇到问题时,如果能在应用层进行计算和处理,那就把它从数据库层拿出来。排序和分组就是典型的例子。在应用层做性能提升总是要比在数据库层容易的多。就像对于MySQL,sqlite更容易掌控。

2. 关于并行计算,如果能避免就尽量避免。如果无法避免,记住,能力越大,责任越大。如果有可能,尽量避免直接对线程操作。尽可能在更高的抽象层上操作。例如,在iOS中,GCD,分发和队列操作是你的好朋友。人类的大脑没有被设计成用来分析那些无穷临时状态——这是我的惨痛教训所得。

3. 尽可能简化状态,尽可能局部本地化,适用至上。

4. 短小可组合的方法是你的好朋友。

5. 代码注释是危险的,因为它们很容易更新不及时或给人误导,但这不能成为不写注释的理由。不要注释鸡毛蒜皮的事情,但如果需要,在某些特殊地方,战略性的长篇注释是需要的。你的记忆会背叛你,也许会在明天早上,也许会在一杯咖啡后。

6. 如果你认为一个用例场景也许“不会有问题吧”,它也许就是一个月后让你在发布的产品中遭受惨痛失败的地方。做一个怀疑主义者,测试,验证。

7. 有疑问时,和团队中所有相关人交流。

8. 做正确的事情——你通常会知道这指的是什么。

9. 你的用户并不傻,他们只是没有耐心理解你的捷径。

10. 如果一个开发人员没有被安排长期的维护你们开发的系统,对他保持警惕。80%的血、汗、泪水都是在软件发布后的时间里流的——那时你会变成一个厌世者,但也是更聪明的“行家”。

11. 任务清单是你的好朋友。

12. 主动让你的工作更有乐趣,有时这需要你付出努力。

13. 悄无声息的崩溃,我仍然会为此从噩梦中惊醒。监控,日志,警报。清楚各种的假警报和不可避免的感觉钝化。保持你的系统对故障的敏感和及时警报。

14. 复杂是大敌。

*边注:Rich Hickey先生的谈话和Robert Martin先生的《Clean Code(代码整洁之道)》一书最近给我的工作带来了非常积极正面的影响。

英文原文:14 lessons after five years of professional programming / 译文:外刊IT评论
  • 大小: 37.4 KB
来自: 外刊IT评论
4
1
评论 共 44 条 请登录后发表评论
44 楼 willothe 2013-04-27 14:41
damoqiongqiu 写道
archy123 写道
damoqiongqiu 写道
archy123 写道
damoqiongqiu 写道
archy123 写道
damoqiongqiu 写道
真可惜,第一条就暴露了作者的无知

这回复恰恰暴露了你的无知。。

没做过什么大数据量不是你的错,自己躲起来好好学习学习,别出来乱说。

您真牛掰,俺村里来的,真不知道啥叫大数据,既然数据库这么牛掰,那您是不是用数据库做1000万数据量多字段的累加求和?仔细看看作者第一条说的什么再来较真吧。

拜托,【大数据量】不是【大数据】,多学点,别整天搁这儿扯,能顶球?

您真高手。这素质,估计顶多初中毕业的码农。。不说了,您别回我了。求您了。

闭上嘴巴去学习吧,看你这人丢的

这样的素养装大牛,笑死人
43 楼 damoqiongqiu 2013-04-26 13:07
archy123 写道
damoqiongqiu 写道
archy123 写道
damoqiongqiu 写道
archy123 写道
damoqiongqiu 写道
真可惜,第一条就暴露了作者的无知

这回复恰恰暴露了你的无知。。

没做过什么大数据量不是你的错,自己躲起来好好学习学习,别出来乱说。

您真牛掰,俺村里来的,真不知道啥叫大数据,既然数据库这么牛掰,那您是不是用数据库做1000万数据量多字段的累加求和?仔细看看作者第一条说的什么再来较真吧。

拜托,【大数据量】不是【大数据】,多学点,别整天搁这儿扯,能顶球?

您真高手。这素质,估计顶多初中毕业的码农。。不说了,您别回我了。求您了。

闭上嘴巴去学习吧,看你这人丢的
42 楼 archy123 2013-04-25 15:56
damoqiongqiu 写道
archy123 写道
damoqiongqiu 写道
archy123 写道
damoqiongqiu 写道
真可惜,第一条就暴露了作者的无知

这回复恰恰暴露了你的无知。。

没做过什么大数据量不是你的错,自己躲起来好好学习学习,别出来乱说。

您真牛掰,俺村里来的,真不知道啥叫大数据,既然数据库这么牛掰,那您是不是用数据库做1000万数据量多字段的累加求和?仔细看看作者第一条说的什么再来较真吧。

拜托,【大数据量】不是【大数据】,多学点,别整天搁这儿扯,能顶球?

您真高手。这素质,估计顶多初中毕业的码农。。不说了,您别回我了。求您了。
41 楼 damoqiongqiu 2013-04-25 12:53
archy123 写道
damoqiongqiu 写道
archy123 写道
damoqiongqiu 写道
真可惜,第一条就暴露了作者的无知

这回复恰恰暴露了你的无知。。

没做过什么大数据量不是你的错,自己躲起来好好学习学习,别出来乱说。

您真牛掰,俺村里来的,真不知道啥叫大数据,既然数据库这么牛掰,那您是不是用数据库做1000万数据量多字段的累加求和?仔细看看作者第一条说的什么再来较真吧。

拜托,【大数据量】不是【大数据】,多学点,别整天搁这儿扯,能顶球?
40 楼 archy123 2013-04-24 16:00
damoqiongqiu 写道
archy123 写道
damoqiongqiu 写道
真可惜,第一条就暴露了作者的无知

这回复恰恰暴露了你的无知。。

没做过什么大数据量不是你的错,自己躲起来好好学习学习,别出来乱说。

您真牛掰,俺村里来的,真不知道啥叫大数据,既然数据库这么牛掰,那您是不是用数据库做1000万数据量多字段的累加求和?仔细看看作者第一条说的什么再来较真吧。
39 楼 damoqiongqiu 2013-04-24 15:20
archy123 写道
damoqiongqiu 写道
真可惜,第一条就暴露了作者的无知

这回复恰恰暴露了你的无知。。

没做过什么大数据量不是你的错,自己躲起来好好学习学习,别出来乱说。
38 楼 archy123 2013-04-24 13:11
damoqiongqiu 写道
真可惜,第一条就暴露了作者的无知

这回复恰恰暴露了你的无知。。
37 楼 archy123 2013-04-24 13:10
你们有认真看第一条么。还吵来吵去
“应用层做性能提升总是要比在数据库层容易的多”

36 楼 damoqiongqiu 2013-04-24 10:43
willothe 写道
damoqiongqiu 写道
请问那几个争来争去家伙,你们就没有考虑内存问题吗?
我有一万条数据需要排序,难道你们会捞到内存里面然后搞“快速排序”?
为什么我会更偏向于ORDER BY呢?

你order by 的目的是什么?最后不一样是捞到内存?况且你以为数据库的Order by一万条数据排序不是在内存?

实在没必要和你这个段位的选手讨论,再见
35 楼 willothe 2013-04-24 10:15
damoqiongqiu 写道
请问那几个争来争去家伙,你们就没有考虑内存问题吗?
我有一万条数据需要排序,难道你们会捞到内存里面然后搞“快速排序”?
为什么我会更偏向于ORDER BY呢?

你order by 的目的是什么?最后不一样是捞到内存?况且你以为数据库的Order by一万条数据排序不是在内存?
34 楼 archy123 2013-04-24 09:35
从对第一条的回复就能看出回复者的水平高低了!
33 楼 damoqiongqiu 2013-04-23 14:01
freezingsky 写道
当一堆人在争吵时,我都喜欢用二个字来停止他们的争论,这两个字就是:场景!

怒顶
32 楼 freezingsky 2013-04-23 13:30
当一堆人在争吵时,我都喜欢用二个字来停止他们的争论,这两个字就是:场景!
31 楼 swuswu 2013-04-23 12:49
huoyj 写道
teasp 写道
ArtsCrafts 写道
    第一条真是是扯淡,难道你写的算法比Oracle,DB2,SQLServer里面的算法厉害?


恰恰是第一条最不扯淡。不同的场景有不同的做法,那些工具要考虑到最多的场景,因此它们的算法几乎可以肯定不是最优的。就像Java的Collections提供给你的排序算法是归并排序,C++通常都是快速排序,这是为啥呢?如果你做Java开发,难道你只会用到归并--因为Java的开发者总是比你厉害?

归并排序和快速排序都是很优秀的排序算法,JAVA中的归并排序是经过改进的,性能确实很优秀,而快速排序性能是依概率变化,在平均情况下很实用,但最坏情况时他的表现也糟糕,快速排序比归并排序好的一点是比较节省空间。这些算法的规则已经很固定了,谁来实现谁来调用都是一样的,除非你能发明一种更优秀的算法,时间复杂度为 O(1),空间复杂度也为O(1),但这几乎是不可能的.那你为什么还要发明重复的轮子呢,照你的说法大家都不要用JAVA提供的工具了、不要用数据库了,什么东西都自己实现比较放心。性能的问题涉及到的原因很多,如果你只是写个小程序,或者你不用任何厂商的东西,那你可以优化你的程序算法,如果你用到了底层的服务,厂商的产品和网络的协议话,这些因素都是要考虑的。现在的企业级的应用调优的话也没有哪个架构师说改算法的,都是从网络,服务器和数据库层面先找问题,希望上帝保佑但愿写的程序不要出bug就够了。

测试下测试下测试下测试下
30 楼 teasp 2013-04-23 12:21
damoqiongqiu 写道
请问那几个争来争去家伙,你们就没有考虑内存问题吗?
我有一万条数据需要排序,难道你们会捞到内存里面然后搞“快速排序”?
为什么我会更偏向于ORDER BY呢?


排序只是举个例子,不同的场景做法不同。数据库一千万记录,每秒2千访问,你每次都order by搞定?
29 楼 damoqiongqiu 2013-04-23 10:32
请问那几个争来争去家伙,你们就没有考虑内存问题吗?
我有一万条数据需要排序,难道你们会捞到内存里面然后搞“快速排序”?
为什么我会更偏向于ORDER BY呢?
28 楼 beyondqinghua 2013-04-23 09:22
当性能遇到问题时,如果能在应用层进行计算和处理,那就把它从数据库层拿出来。排序和分组就是典型的例子。在应用层做性能提升总是要比在数据库层容易的多。就像对于MySQL,sqlite更容易掌控。
深有体会,不能依赖数据库,当应用复杂的时候,数据库也会承受不了的,如何改善程序设计才是真理。
27 楼 bro_feng 2013-04-23 00:08
我也不是十分的理解第一条。精简数据库操作,减少数据库的访问对数据性能是有很大的提升的。像DB2和Oracle都有很好的数据库操作优化方案的
26 楼 fjjiaboming 2013-04-22 16:41
去年的, 还拿来发.
还有内部工程师也申明: 需要两方面来看问题 .
25 楼 teasp 2013-04-22 13:14
huoyj 写道
teasp 写道
huoyj 写道
teasp 写道
huoyj 写道
teasp 写道
ArtsCrafts 写道
    第一条真是是扯淡,难道你写的算法比Oracle,DB2,SQLServer里面的算法厉害?


恰恰是第一条最不扯淡。不同的场景有不同的做法,那些工具要考虑到最多的场景,因此它们的算法几乎可以肯定不是最优的。就像Java的Collections提供给你的排序算法是归并排序,C++通常都是快速排序,这是为啥呢?如果你做Java开发,难道你只会用到归并--因为Java的开发者总是比你厉害?

归并排序和快速排序都是很优秀的排序算法,JAVA中的归并排序是经过改进的,性能确实很优秀,而快速排序性能是依概率变化,在平均情况下很实用,但最坏情况时他的表现也糟糕,快速排序比归并排序好的一点是比较节省空间。这些算法的规则已经很固定了,谁来实现谁来调用都是一样的,除非你能发明一种更优秀的算法,时间复杂度为 O(1),空间复杂度也为O(1),但这几乎是不可能的.那你为什么还要发明重复的轮子呢,照你的说法大家都不要用JAVA提供的工具了、不要用数据库了,什么东西都自己实现比较放心。性能的问题涉及到的原因很多,如果你只是写个小程序,或者你不用任何厂商的东西,那你可以优化你的程序算法,如果你用到了底层的服务,厂商的产品和网络的协议话,这些因素都是要考虑的。现在的企业级的应用调优的话也没有哪个架构师说改算法的,都是从网络,服务器和数据库层面先找问题,希望上帝保佑但愿写的程序不要出bug就够了。

你展开得太多了。我没说要什么事情都自己做,我脑子坏掉了要自己实现一个归并排序?我是说在应用的特定场景,你往往会有比人家提供的工具更好的做法。特殊情况下O(1)的排序是可以的(当然,不算输入时间),这时你干嘛要用人家提供的方法呢?从你的发言也能看出来没有明白java为什么用归并。

好吧,愿闻其详。


那是因为Java里面的比较通常都是对象之间,而对象之间的比较通常又比较耗时,归并比快排的比较次数要少,因此Java里面用的是归并而不是快排。这就是一个不同场景有不同做法的例子。

没错,我之前确实没有想过这个问题,刚才也想了一下,JAVA中用归并而不用快速有一个原因是归并是一种稳定的排序,快速排序不稳定。比较排序的比较次数应该都是O(nlgn),但归并排序的系数更小一些。那么C++中为什么又选用快速排序呢,C++不也是一种面向对象的语言么。


我想这是延续C的特点吧,用原始数据类型比较多。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 18种html5图片分页导航按钮样式动画特效

    18种html5图片分页导航按钮样式动画特效

  • libghttp 示例代码

    前些时间,由于找不到一个比较好使用的http库,自己封装了一个,不过时间紧迫,也没有完整分析HTTP协议,因此心里总不塌实地使用它,一次偶然的机会,让我在网上找到一个好用的http库 -- libghttp,目前的版本因该是libghttp-1.0.9. 这个库十分的方便使用,它能够轻松地实现同步和异步的Http请求。 简单使用实例: #include int main(int

  • html js左侧导航栏,js实现简单分页导航栏效果

    本文实例为大家分享了js实现分页导航栏效果的具体代码,供大家参考,具体内容如下最终的效果:1. 分页需要的几个重要参数:总记录条数:totalCount (查数据库)每页记录数:pageSize (自己设置)总页数:totalPageNum (根据上面的参数计算)当前页: currentPageNum(前台传入)当前页要显示的内容 :List (查数据库: pageSize和curr...

  • 分页-如何实现分页-实用有简单的分页代码及步骤分享

    private User user; private List<User> userList;// 分页数据 private int currPageNo; // 当前页码-来自于用户输入 private int totalCount; // 总数量(表) private int pageSize; // 页面容量 private int totalPageCount;// 总页数-totalCount/pageSize(+1)

  • 前端分页导航制作

    前言: 1.本案例是讲分页导航的,包括上一页,下一页,还有页码导航的 2.用ajax+php+js+mysql去做的 环境介绍: MySql、XAMPP、VSCode 语言介绍: ES5、ES6、html、css、javascript、jQuery、ajax、php 一、输入mysql语句部分 代码如下:goods表 CREATE TABLE IF NOT EXI...

  • js 实现简单分页导航栏

    最终的效果:  1. 分页需要的几个重要参数: 总记录条数: totalCount (查数据库) 每页记录数: pageSize  (自己设置) 总页数: totalPageNum  (根据上面的参数计算)  当前页: currentPageNum (前台传入) 当前页要显示的内容 : List<PageInfo> (查数据库: page...

  • PHP分页技术demo详解

    通过简单地例子解释php的分页原理,demo中附带分页链接生成函数,而且通过参数可以选择不同样式的分页链接

  • 分页导航功能实现方法

    一.利用数据库的关键字和算法 在SQLSERVER和ORACLE中,可以利用一些特殊的关键字和算法(SQL)来实现分页功能。 1)在SQLSERVER中,可以利用TOP关键字来实现分页功能,例如以下SQL就能实现分页算法: select top [pagesize] * from table where id not in ( select top [pagesize*(curre

  • js实现简单分页导航栏效果

    主要为大家详细介绍了js实现简单分页导航栏效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  • 基于分页导航的实现

    分页控制器需要放置在一个父shi tu

  • 导航条和翻页代码

    1.翻页的静态页面实现 Document .fy{ width:958px; height:40px; list-style:none; border:1px solid red; padding:0;

  • libghttp库的使用心得

    需要用到native程序上网接收文件到本地,需要的协议为http。 由于android本身自带的chrome太过复杂,调用起来也不方便。在网上搜索过后,移植了libhttp到本地。比较简单易用,但程序是否能很好的支持多线程,这个还需要继续了解。 一开始参考网上的代码写了一个,但总是发现文件有错乱。在仔细debug后,发现问题出在使用同步和异步获取文件的问题上。在开发前,并没有好好的去区分异步和...

  • 一个简单的分页代码

        今天看了一下同事写的分页代码 虽然效率不高 但是比我的简单多了数据量小的首选(别忘了定义gridview的pagesize)protected void LinkButton1_Click(object sender, EventArgs e)    {        GridView1.PageIndex = 0;        BusinessWork BusinessWork = n...

  • 如何实现分页?

    一、分页的原理 满足:position =(pageNo-1)*pageSize,如下图的规律所示: select * from pagin,得到总数据,结果如下 select * from pagin limit 0,3,得到第一页的数据,每一页显示3条,即pageNo=1,position=0(实际是从第一条开始),pageSize=3,运行结果如下,显示前三行数据,是我们想要...

  • libghttp

    这个库十分的方便使用,它能够轻松地实现同步和异步的Http请求。   src: http://libghttp.sourcearchive.com/   example: #include int main(int argc, char *argv[]) { char *uri = "http://www.hao123.com"; ghttp_request

  • CSS的分页导航制作

    CSS分页制作 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width>, initial-scale=1.0"> <title>Document</title> <style> .page{

  • 用Hugo搭建个人网站

    本文将介绍什么是Hugo,怎么用Hugo搭建个人网站,如何本地测试及如何发布到Github并生成Github pages。

  • PHP开发-分页实现(附效果图)

    首先一个分页类,如下(摘自网络)可拷贝直接使用<?php /* * Created on 2013-12-3 * 分页类 * To change the template for this generated file go to * Window - Preferences - PHPeclipse - PHP - Code Templates */ class Pagination

  • CSS 分页导航

    分页导航对于搜索引擎或电子商务网站,常常将信息分页显示,这样可以减少页面大小,进而提高页面的加载速度。分页显示后,就需要通过分页导航来告诉用户要浏览的信息量,方便用户快速跳过一些不想看的信息,也便于定位和查找。因此,分页导航也是很常见的、很重要的一种导航。实际上,CSS 分页导航的制作方法也很简单。分页导航一般包括上一页、页码、下一页三部分。首先,创建一个容器,来包裹分页导航的链接。如:&amp;lt;d...

Global site tag (gtag.js) - Google Analytics