黑客与画家

编程是一种艺术创作

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

编程有很多种类型,比如 Web工程师或者软件工程师。有很多的编程语言和开发环境,一直处于演进之中。所以关于年龄的问题根本就不是问题,因为编程需要用到不断演进工具。你现在 所学习的,5年或10年之后可能已经过时。任何职业的关键点在于知道你想要什么,如何得到它?自从我开始学习编程算起,40年已经过去: 我的技术工作职务也从程序员到软件工程师,从软件工程师到系统管理员,从系统管理员到经理,周而复始。任意一个公司都会有技术和管理两条职业发展道路,一 般5年左右开始选择:在不同的公司,不同的学校,我两条道路都走过。 现在,我是一个独立咨询 师,有自由去选择自己想做的事情。我很幸运,找了一个自己喜欢的差事谋生,并乐在其中。这一切开始于,22岁时上的第一堂编程课,24岁找到的第一份真正 的编程工作。做你喜欢的事情,永远都不会晚。如果你还有其它问题,尽管发问,我乐于帮助新入行的程序员达成它们的目标。

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

避免这些常见的编码习惯,会让我们的工作更轻松、软件更安全且更易于扩展。 帕雷托法则明确指出,20%的因导致80%的果。又称为80-20法则,它适用于几乎每一个需要人作为劳动主体的相关领域。 在软件开发领域,这个法则可以概括为,大多数的问题都是由少数不良编码习惯造成的。改变这些习惯,你会更有效率。

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

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

我的丈夫是个程序员

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

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

原文链接:http://justjavac.com/other/2013/04/10/why-any-sort-algorithm-based-on-the-comparison-of-the-five-elements-are-needed-7-times.html 排序算法对结果的唯一要求就是操作数满足全序关系: 如果 a≤b 并且 b≤c 那么 a≤c(传递性)。 对于 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 图:

为什么我不适合搞编程

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

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

如果我告诉你,中关村配置最高的电子计算机的计算精度还不如一个便利店卖的手持计算器,你一定会反驳我:「今天写博客之前又忘记吃药了吧」。 你可以用最主流的编程语言计算 0.2 + 0.4,如果你使用的是 Chrome、FireFox、IE 8+,可以按 F12 键,然后找到 「控制台」,输入上面的 表达式 0.2 + 0.4,回车。 然后再用最简陋的计算器(如果你没有手持计算器没关系,手机、电脑都自带一个计算器,打开“运行”,输入 calc,回车) 再计算一下刚才的 算式 0.2 + 0.4。 怎么样?同意我的观点了吧! 再简陋的计算器也比超级计算器的精度高,关键不在于它的频率和内存,而在于它是如何设计、如何表示、如何计算的。

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

在『代码之谜』系列的前几篇文章中,很多次出现了浮点数。浮点数在很多编程语言中被称为简单数据类型,其实,浮点数比起那些复杂数据类型(比如字符串)来说,一点都不简单。 单单是说明 IEEE浮点数 就可以写一本书了,我将用几篇博文来简单的说说我所理解的浮点数,算是抛砖引玉吧。 一次面试 记得多年前我招聘 Java 程序员时的一次关于浮点数、二分法、编码的面试,多年以后,他已经称为了一名很出色的程序员。每次聚会他都会告诉我,“那次面试彻底改变了我的过去的学习方式,我以前 只是盲目接受知识,根本就没有自己思考过,那次对话,比我大学四年学到的知识都多”。 我看他简历上写到读过《信息论》才谈了很多关于二分法以及编码的话题,整个过程大概3个小时——这是我面试时间最长的一次。 因为时间久远,我把一些我能回忆起来的关于浮点数的内容整理在这篇博客中。 格式说明: 所有我说的话,都放在引用里面。他的话放在了引号(“”)里面。没有加引号的是我的心理活动或者说明。  

程序员的七大坏毛病

1.- 所有的程序都写的很烂,除了我的。 我要告诉你一个坏消息,兄弟,所有的程序都写的很烂,包括你的。无论你在上面花多少功夫,其他大多数程序员总是会认为你写的代码很烂、他们能写出比你好10倍的程序。我在前几篇文章里已经讨论过了这个问题,你可以读读这篇文章和这篇文章,从中你可以理解我所说的所有的程序都写的很烂究竟是什么意思。 如何纠正:不要挑剔别人的程序,有一天也许你的程序会被人放在聚光灯下挑剔。要保持客观和专业的评论,不要轻易判断。要谦虚,从周围人哪里学习经验,警戒自己不要写出这么糟的程序。 2.- 我几秒钟就能把它改好,不用走变更流程了。 homer-simpson-doh

我是如何毁掉一个网游公司的

前几天的一片文章《你知道吗,犯弱智错误是每个程序员的必修课:为什么Hacker News昨晚一夜宕机》讲的也是一个低级错误,但那个犯错误的人是老板自己,他在问题未解决前仍然能回家睡觉,但如果你不是老板,而是一个普通员工,而且犯了一个无法饶恕的愚蠢错误,那你知道你的下场吗——死的很惨。

keep looking »