黑客与画家

编程是一种艺术创作

中国三车主撞墙怪刹车,特斯拉:Log里没有记录刹车

刘锡涛 | 十月 27, 2014 | 没有评论

據揚子晚報報導,南京一位特斯拉車主在駕駛過程中,汽車突然「不聽使喚」,不向後退反而向前跑,一頭衝進了路邊的公司裡。

特斯拉官方回應「發生事故不是由車輛本身問題產生」。車主劉先生認為「自己作為一個老手是不會把前進擋當成倒車擋的,更不會犯把油門當剎車踩這種低級錯誤,是車輛本身出現了故障。」

今日特斯拉官方回應中稱,特斯拉工作人已經透過“Car Log”的車輛使用記錄系統查找到了事故發生時車輛的情況,現場的監控錄像影像也顯示車輛在突然加速時,剎車燈一直沒有亮,所以可以確定在車輛撞進去之前是沒有剎車的。

從特斯拉方面的回應中可以了解到,事故的原因應該是駕駛操作不當導致。截止記者發稿時,因此事故屬於單方事故,中國交警部門一般不參與調查,車輛有保險,具體事故原因和損失,保險公司方面目前正在調查處理。

以下是特斯拉回應: 看完整文章

24岁才开始学编程是否太晚?一位经济学专业女程序员的故事

刘锡涛 | 十月 22, 2014 | 8 评论

编程有很多种类型,比如 Web工程师或者软件工程师。有很多的编程语言和开发环境,一直处于演进之中。所以关于年龄的问题根本就不是问题,因为编程需要用到不断演进工具。你现在 所学习的,5年或10年之后可能已经过时。任何职业的关键点在于知道你想要什么,如何得到它?自从我开始学习编程算起,40年已经过去: 我的技术工作职务也从程序员到软件工程师,从软件工程师到系统管理员,从系统管理员到经理,周而复始。任意一个公司都会有技术和管理两条职业发展道路,一 般5年左右开始选择:在不同的公司,不同的学校,我两条道路都走过。

现在,我是一个独立咨询 师,有自由去选择自己想做的事情。我很幸运,找了一个自己喜欢的差事谋生,并乐在其中。这一切开始于,22岁时上的第一堂编程课,24岁找到的第一份真正 的编程工作。做你喜欢的事情,永远都不会晚。如果你还有其它问题,尽管发问,我乐于帮助新入行的程序员达成它们的目标。

看完整文章

10个对开发项目有害的编程习惯

刘锡涛 | 九月 25, 2014 | 1 评论

避免这些常见的编码习惯,会让我们的工作更轻松、软件更安全且更易于扩展。

帕雷托法则明确指出,20%的因导致80%的果。又称为80-20法则,它适用于几乎每一个需要人作为劳动主体的相关领域。

在软件开发领域,这个法则可以概括为,大多数的问题都是由少数不良编码习惯造成的。改变这些习惯,你会更有效率。

看完整文章

在程序员的眼里,用户是这样使用他们开发的软件的

刘锡涛 | 九月 19, 2014 | 1 评论

我曾经说过,程序员不是一般的人, 是具有某种超能里的人。但问题是,程序员往往意识不到自己的这种特异功能,在他们的眼里,会认为自己很普通,跟常人一样,所以,程序员能做到的事情,其他 人——比如他们的客户/软件用户——也应该很容易做到。但事实上,由于大部分人——绝大部分人(包括软件开发公司的客户/购买软件的用户)——都是电脑小 白(对电脑知识/计算机知识/软件知识知之甚少的人)。一个对于程序员来说很显而易见的软件操作,换成让用户来操作,就会出现各种各样奇怪的事情。这让程 序员非常痛苦。
看完整文章

我的丈夫是个程序员

刘锡涛 | 九月 15, 2014 | 没有评论

我在11年前认识了的我丈夫。当时是南缅因州大学新生入校的日子,我带着吉他去宿舍。他饶有兴趣的盯着我的吉他。之后他敲响了我的房门,自我介绍道:“嗨,我叫Adam,我就住在走廊的对面。我是个计算机程序员!”

看完整文章

2014 年 9 个最好的 Sublime Text 2/3 主题

刘锡涛 | 九月 12, 2014 | 没有评论

Sublime Text 是一个轻量、简洁、高效、跨平台的编辑器。Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。Sublime Text 2 支持多种编程语言的语法高亮、拥有优秀的代码自动完成功能,还拥有代码片段(Snippet)的功能,可以将常用的代码片段保存起来,在需要时随时调用。支持 VIM 模式,可以使用Vim模式下的多数命令。支持宏,简单地说就是把操作录制下来或者自己编写命令,然后播放刚才录制的操作或者命令。

看完整文章

为什么说任何基于比较的算法将5个元素排序都需要7次?

justjavac | 十月 10, 2013 | 没有评论

原文链接:http://justjavac.com/other/2013/04/10/why-any-sort-algorithm-based-on-the-comparison-of-the-five-elements-are-needed-7-times.html

排序算法对结果的唯一要求就是操作数满足全序关系

  1. 如果 a≤b 并且 b≤c 那么 a≤c(传递性)。
  2. 对于 a 或 b,要不 a≤b,要不 b≤a(完全性)。

这个问题可以用信息论来回答。

我从 1 到 5 中挑一个数字出来让你来猜,每回合你都可以问我一个问题,我的回答“是”或“不是”(1 或 0),那么你至少需要几个回合才能保证猜出这个数字?

比较符合这个游戏精神的玩法是从自己的幸运数字(比如我的是7)开始猜起,一个一个地问我“是不是X?”, 可能你的运气足够好,一个回合就能够猜对,但是在最坏的情况下可能就需要5个回合,所以你的答案应该是“至少需要5个回合” (事实上你至少只需要一次就“有可能”猜出来,但为了“保证能”猜出来,你只好委曲求全地说 5), 换句话说这种猜法的最优下界是 5。 (平均性能是 1×1/5+2×1/5+…+5×1/5=(1+…+5)/5 = 3)

但因为你会二分,所以会这样问“是不是比3大?”……而且无论我挑出的数字是几,都只用3个回合。 二分显然是一种更佳的策略,那么它好在什么地方呢? 用信息论理解: 最大的熵

英文版维基百科词条有个大致的解释:Comparison_sort, 最少次数为 log(5!) = 6.91,取整的话,就是 7。

决策树如下:

比较排序决策树

如果我们用归并排序的话,比较次数是O(nlogn),因为归并排序是 全局最优解,但是在局部,归并并不都保证是最优的。

附一张快速排序的 gif 图:

快速排序

为什么我不适合搞编程

刘锡涛 | 四月 19, 2013 | 4 评论

我喜欢靠自己的努力来解决问题。

也许是因为在学校里没有养成好的集体活动的习惯,也许是因为我这个家里最小的孩子想在这个大家族中证明什么东西。不管是什么吧,每当我有什么事情需要去完成时,我都会自己去构思,计划,研究,学习相关技能,然后付诸行动。

看完整文章

代码之谜(五)- 浮点数(谁偷了你的精度?)

justjavac | 四月 1, 2013 | 8 评论

如果我告诉你,中关村配置最高的电子计算机的计算精度还不如一个便利店卖的手持计算器,你一定会反驳我:「今天写博客之前又忘记吃药了吧」。

你可以用最主流的编程语言计算 0.2 + 0.4,如果你使用的是 Chrome、FireFox、IE 8+,可以按 F12 键,然后找到 「控制台」,输入上面的 表达式 0.2 + 0.4,回车。

然后再用最简陋的计算器(如果你没有手持计算器没关系,手机、电脑都自带一个计算器,打开“运行”,输入 calc,回车) 再计算一下刚才的 算式 0.2 + 0.4。

怎么样?同意我的观点了吧! 再简陋的计算器也比超级计算器的精度高,关键不在于它的频率和内存,而在于它是如何设计、如何表示、如何计算的

看完整文章

代码之谜(四)- 浮点数(从惊讶到思考)

justjavac | 四月 1, 2013 | 2 评论

在『代码之谜』系列的前几篇文章中,很多次出现了浮点数。浮点数在很多编程语言中被称为简单数据类型,其实,浮点数比起那些复杂数据类型(比如字符串)来说,一点都不简单。

单单是说明 IEEE浮点数 就可以写一本书了,我将用几篇博文来简单的说说我所理解的浮点数,算是抛砖引玉吧。

一次面试

记得多年前我招聘 Java 程序员时的一次关于浮点数、二分法、编码的面试,多年以后,他已经称为了一名很出色的程序员。每次聚会他都会告诉我,“那次面试彻底改变了我的过去的学习方式,我以前 只是盲目接受知识,根本就没有自己思考过,那次对话,比我大学四年学到的知识都多”。

我看他简历上写到读过《信息论》才谈了很多关于二分法以及编码的话题,整个过程大概3个小时——这是我面试时间最长的一次。

因为时间久远,我把一些我能回忆起来的关于浮点数的内容整理在这篇博客中。

格式说明:

所有我说的话,都放在引用里面。他的话放在了引号(“”)里面。没有加引号的是我的心理活动或者说明。

 

看完整文章

keep looking »