女程序员是程序员里美丽的风景线,我希望这些女程序员的经历能让我们在这个“重男轻女”的社会中可以给女程员有更多平等的机会和条件,以及相应的尊重。因为,她们其中不乏优秀的程序员,而且在心态、态度和努力上还强过很多男性程序员,很多东西都值得我们大家向她们学习。
这篇文章的来由是因为Eva在“三个事和三个问题”的评论里问我女孩子是否能做技术,她说她的很多师兄都告诉他不要做技术,所以,她有些不坚定了。我的回复是告诉了她我工作经历中的两个技术很牛的女孩,并且我从她们身上学到了多技术。但是,后面有一些人回复说我误导了别人。所以,我在新浪微博和twitter上征集女程序员的故事和想法。我一共收到了19封邮件,其中有17封邮件来自女程序员。其中有一个已经发布了(一个女程序员的故事),其中的一些观点已经在网上传播,并得到了大家的刮目和称赞。但这并不是特例,因为下面的这些故事中,还有很多令人刮目相看的东西。
说明:先说明一下,这篇文章并不想讨论女孩子是不是适合做技术,这不值得讨论,因为,在“一个女程序员的故事”中我们已经知道,态度和努力才是原因,而不是性别。这里,也只是想告诉那些有“性别歧视”、“看不起女程序员”、“骄傲自大”的男程序员们,那些女程序员不为所知的一面。我把几乎所有的故事都列在这篇文章里了,我觉得我不用再多说什么了,这些故事组成的风景线,可以让你充分地了解女程序员。

Ada Lovelace 世界第一个程序员
在看到那些故事之前,我们需要了解这样的现实——
阅读全文…

Loading ...
在StackExchange上有人问了这样一个问题:What should every programmer know about web development?(关于Web开发,什么是所有程序员需要知道的?)里面给出的答案非常不错,所以,我翻译转载过来。 顺便说一下,StackExchange真是非常好,大家可以对同一个答案做贡献和修订,看看这个问题的修订过程你就知道了——专业的问答网站应该怎么去做。这就是我在这篇文章中也说过真正的用户体验是什么样的。
好了,下面是正文(我对原文做了一些批注,也许不对或有误导,请大家指正)
下面的这些东西可能对于大多数人并不陌生,但是可能会有些东西你以前并没有看过,或是没有完全搞懂,甚至都没有听说过。(陈皓注:我相信当你看完这个列表后,你会觉得对于我国的Web开发有点弱了,还是那句话,表面上的东西永远是肤浅的)
接口和用户体验
- 小心浏览器的实现标准上的不一致,确信让你的网站能够适当地跨浏览器。至少,你的网站需要测试一下下面的浏览器:
最后,你可以使用一下这个工具 来看看你的网页在不同的浏览器下是怎么被显示出来的(陈皓注:这个工具就是以前本站介绍过的在不同浏览器和平台上检查你的网站的兼容性)
- 部署Staging:怎么部署网站的更新而不会影响用户的访问。 Ed Lucas的答案 可以让你了解一些(陈皓注:Ed说了一些如版本控制,自动化build,备份,回滚等机制)。

Loading ...
Keith Schwarz是一个斯坦福大学计算机科学系的讲师。他对编程充满了热情。他的主页上他自己正在实现各种各样的有意思的算法和数据结构,http://www.keithschwarz.com/interesting/, 目前这个网页上有88个(见下面的列表),但这位大哥要干135个,你可以看看他的To-Do List。
从这个列表上,我们可以看到,他从去年7月份就在自己实现这些东西了,我把他实现的这些算法转过来,
- 另一方面我希望这个事可以影响到一些正在学习编程的人。看看别人是怎么学习编程的,希望对你有借鉴作用。
| Name |
Link |
Date Added |
Language |
Description |
| Binomial Heap |
(link) |
7‑24‑2010 |
C++ |
An implementation of a binomial heap data structure for use as a priority queue. |
| Bounded Priority Queue |
(link) |
7‑24‑2010 |
C++ |
An implementation of a priority queue with a fixed upper limit to its size.. |
| Matrix |
(link) |
7‑24‑2010 |
C++ |
A collection of classes for manipulating matrices. |
| VList |
(link) |
8‑16‑2010 |
Java |
An implementation of the List abstraction backed by a VList. |
| Function Wrapper |
(link) |
8‑16‑2010 |
C++ |
A C++ wrapper class around unary functions. |
| String |
(link) |
8‑17‑2010 |
C++ |
An implementation of a string abstraction that uses the small string optimization. |
阅读全文…

Loading ...
因为《腾讯帐号申诉的用户体验》一文中好多人觉得腾讯申诉是世界级先进的,并让我拿出一个找回用户的帐号的功能来。本来不想写的,因为大家看看其它系统的就行的,但是,很明显有些人就是很懒,也不会思考,而且不会观察,所以,我就只好写下这篇科普性常识性的文章。
在行文之前,我得先感谢腾讯公司的至少30名员工在《腾讯帐号申诉的用户体验》一文后的回帖(我STFG(Search The Fucking Google)看到了你们使用的那个固定IP在各个大学论坛上的腾讯的招聘广告),我感谢你们主要有两点:
- 你们有半数以上的人留下的是gmail而不是QQMail/Foxmail的电子邮件,这点让我感到很欣慰。
- 你们在加班到晚上11点的时候都能在本站回复,的确如你们的Andy Pan所说,你们的核心竞争力很强,包括水军方面。
好了,让我正式谈谈这个设计。找回用户帐号通常就用三个事就可以了:邮箱,安全问答,手机。
邮箱,安全问答,手机
大多数的系统都会使用邮箱和安全问答,这足够了,很多系统直接用邮箱做帐号名(Apple ID,Facebook,新浪微博 ….),这样一来,就算你的系统口令被盗,帐号的是改不掉的,于是你可以用邮箱找回(注:这些系统都会验证你的邮箱是否正确)。但是,如果用邮箱做帐号,会导致你的邮箱暴露了,这样为成为垃圾邮件的受害者,而且如果你还比较2的把邮箱的口令和帐号的口令设置成一样的,那么就相当坑爹了(你可以看看本站的这篇文章——如何设计你的口令)。所以,但凡是用邮箱用为帐号的系统都不会让人看到你的注册邮箱,比如,大家就不知道我新浪微博帐号注册的邮箱,就算是知道也应该是受信的人知道(新浪微博帐号的邮箱地址的默认可见度是“你关注的人”)。
阅读全文…

Loading ...
前面写过一篇“腾讯,竞争力 和 用户体验”批评了腾讯,于是在我的微博上和博客上收到了一些反对意见,基本上是说腾讯产品的用户体验做得很好,很方便,等等,还列举了N多的例子,以及说过什么用户数量为王的言论,让我感到我应该写一篇博客。当然,如果我们只看某个技术层面的东西的话,我同意,QQ的一些产品还是很易用的。但是我们还是要看得更深一些。Effective C++的作者Scott Meyers 在《More Effective C++》中说过——“美丽的是肤浅的表现”。 我借用一下这句话,认为QQ是好的产品的观点是肤浅的认识。
网上有大量的文章说QQ扫描硬盘啊,说QQ收集用户信息啊,你可能忘了这些。前段时间的3Q大战的那个“艰难的决定”,你好像也忘了。还有狗日的腾讯,你也忘了。包括QQ可以预防犯罪的新闻,你可能也忘(这本就是一个容易忘事的民族)。你已经被QQ的用户体验迷住你的双眼,觉得QQ无敌于天下,就像这个微博 以及微博里的回复一样在赞叹QQ注重细节一样,那些人在看到QQ的Mac版上向Steve Jobs感谢的字样激动不已。我感到你被一块红布蒙住了双眼也蒙住了天,我问你看见了什么,你说你看见了幸福 ,这个感觉真让你舒服……(对不起,一不小心我就在唱歌了,So So Sorry)
回到正题,你会说,我们在谈技术,不谈这些非技术的。好吧,我们来看看技术上的东西。我和大家说一下这两天我的真实经历。
两天前,我的QQ号被“恶意投诉”,封了号。腾讯让我走申诉流程,于是我看到了下面这些步骤:
- 填入我的真实姓名,身份证号,地址等我的真实信息。 (盗号者也可以填)
- 填入我的手机号,并要用这个手机号向腾讯发个短信以收取验证码。(盗号者的手机)
- 填入我以前曾经使用过的QQ密码 (盗号者盗到的密码)
- 填入我是什么时候,在哪里注册的QQ (盗号者可以填忘记了)
- 填入最近3年来,我在哪里使用过QQ (盗号者也可以填忘 记了)
- 邀请QQ好友来帮助申诉,越多越好,需要填号好友的QQ号和真实姓名。 (盗号者也可以用自己的小号,这些小号可以加你为好友)
这已经是非同寻常的流程了…… 从这个申请过程中你看到了什么?你是否看到了这些东西:
阅读全文…

Loading ...

Loading ...
自从那篇rant了一堆公司都的文章发布来,得到了大家的关注,有些朋友让我写一下腾讯,在我的微博上(@左耳朵耗子)还有位腾讯的朋友让我也评价一下腾讯。本来不想写的,觉得腾讯没啥好说的,但是因为下面的几个原因,让我有点坐不住了:
- 这两天知乎上的一个“腾讯的核心竞争力”的贴子在微博上被很多人所推崇。
- 还有一个网友发邮件给我说让我别rant了,宁可C2C也比rant有意义。
- 我周末的时候去豆瓣和他们交流了一些关于产品和用户体验方面的话题。
- 还看到了Jeff Bezos的访谈文章《贝佐斯:亚马逊是科技界唯一一家低利润公司》
于是就有了这篇文章,但不想再rant了,我希望这篇文章更有价值一些,但是我喜欢的调侃的风格依然,因为这是我觉得能让文章有趣味的方式。
腾讯的“价值”
首先我想说说腾讯的价值。根据我那篇 rant 的文章来说,我觉得人要活得有价值,事业也要做得有价值。我不太待见那些没有价值的东西。所以,我在那篇文章里让大家都思考了一个问题,我们做这个事的价值在哪里?所以,要评论腾讯,就得想想他的价值。众所周知,腾讯的起家是通过IM软件QQ,当然,他有段时间几乎快不行了。不过挺过来了,造就了这么一个帝国。所以,腾讯的价值应该是即时通讯,让大家的沟通变得更顺畅,这点腾讯的确做得非常强大,视频,音频,涂鸦,抓屏,表情,Q币,共享,群聊,新闻,弹窗,离线文件,远程协助…… 的确做得非常地体贴用户。除了扫描硬盘文件有点那个。
但是,最近的腾讯变了(当然有人说他也没有变,QQ本来就是抄来的),有什么就抄什么,没有创意,山寨大王,成了腾讯的代名词。马云也说过:“现在腾讯拍拍网最大的问题就是没有创新,所有的东西都是抄来的”。网上还有很多,什么“一直在抄袭,从未超越过”或是“一直在山寨,从没反省过”等等的话,还有“自从有了XXX,腾讯就出了XXX”的文体。
但是,你们都错了,包括马云,我不同意你们,我觉得这正是腾讯的价值所在。
阅读全文…

Loading ...
上一篇博文翻译了Steve Yegge的rant,这两天有一些事让我也想rant一下(所谓rant就是一篇巨长无比的抱怨和说教),不过无论是从见解还是恶搞来说肯定没有SteveY的水平高,所以,这篇博文只是单纯的rant,看标题就知道了,就像“篱笆,女人和狗”一样,乡土味实足。所以,下述的一些观点未必正确,也未必靠谱,也就是我的个人唠叨罢了,我想到哪里说到哪里。(篇幅较长,见谅)
引子
我前两天,收到一封邮件,一位快要毕业的的大学生问我,是去百度,还是去创新工场?他在来信中说,从个人道德价值观来说,他想去创新工场,要远离流氓企业,不然会有狼狈为奸、助纣为虐的感觉,对不起自己。但是创新工场那边情况不熟悉, 不知道怎么选择,并问我现在比较热的移动互联网靠不靠谱。
正好这两天我在微博里看到大家转贴李开复的几个让毕业生创业的微博,比如,这个微博,还有 这个微博。呵呵。
李开复:有关毕业生高科技创业,我的建议:1)创业需要理解趋势、汇集精英、实践经验,因此大学毕业不要主导创业,只能参加创业公司,2)最好远在毕业前就寻找创业公司实习机会(无偿亦可),因为也许创业并不适合你或你想象那样,3)毕业时若想学习创业,最好到创业公司。到大公司学习能学技术但不够针对性。
还有前两天的“移动开发者大会”,然后,又有一个以前的同事和我谈了一下他创业的事以及他的想法,正好又在网上看到罗永浩同学的那个“一个理想者创业的故事”的演讲。还有一些做blog插件的团队希望我能在酷壳上安装一下他们的插件。等等,等等。所以,让我有了这个可以rant的写作情绪。
阅读全文…

Loading ...
Steve Yegge, Amazon的前员工,现任Google员工,其本来想在Google+上和Google的员工讨论一些关于平台的东西,结果不小心把圈子设成了Public,结果这篇文章就公开给了全世界,引起了剧烈的反应。发布后很快他就马上把这篇文章删了,不过,互联网上早备份了下来——SteveY’s Google Platforms Rant。后来,Steve在其Google+上作了一些解释,大体是说他喝多了,而且又是在凌晨,所以大脑不清,文章中的观点很主观,极端且不完整,还有Google的PR对他很好,等等,等等 。
几个星期前看到时就一直都想翻译一下这篇文章,不过因为最近事情太多,文章又很长,所以现在才翻译完成,翻译的不好,还请大家指正。
导读
在你阅读正文以前,我想说明几点,希望你注意一下:
- Steve这个人非常喜欢写长篇大论的东西。而且比较喜欢辛辣调侃和恶搞的文风,这点大家要注意!
- 文中先“骂”Amazon公司,再通过“骂”Amazon的创始人贝索斯Bezos并烘托出他的的悟性和雄心,最后教育了一下Google。
- 我把文章分成了三个部分,这样方便大家阅读和讨论。第一部分只是个人情绪化的抱怨,第二部分是说Amazon的成长,第三部分是教育Google,我觉得第二部和第三部分是重点。
- 对于我们来说,我们应该获取Steve那些关于平台(Platform)相关的那些有价值的观点。尤其是他说的Amazon如何进化成一个平台性的公司,以及阐述Google应该怎么做的那些观点。
- 关于对Amazon的那些指责,我想说,6年,对于一个世界级的互联网公司,已经很不一样了。
正文
第一部分
我曾在Amazon工作了六年半,现在,我在Google的日子也差没不多这么长了。对于这两家公司,有一件事总是萦绕着我——这种感觉一天比一天强烈──那就是,Amazon每件事都做错了,而Google每件事都做对了。当然啦,这是很笼统的话,但却是惊人的准确,相当的疯狂吧。大概有一百甚至两百种不同的地方可以让我们去比较这两个公司,而Google可能在每一项都能胜出,如果我记的没错,除了其中3项以外。因为,我曾用电子表格把这些项都列出来了,只是法务部门不会让我给任何人看,即使人事招募部门很喜欢这个报表。
阅读全文…

Loading ...
我在我的微博上说过这样一段话,我想在这里把我的这个观点阐述地更完整一些。
@左耳朵耗子:聪明的程序员使用50%-70%的时间用来思考,尝试和权衡各种设计和实现,而用30% – 50%的时间是在忙碌着编码,调试和测试。聪明的老板也会让团队这样做。而傻逼的老板,苦逼的程序员会拿出来100%-150%的时间来忙着赶进度,返工,重构,fix 大量的bug… 所以, 越差的团队一般会越忙,而且还忙不完。
在现在这个浮躁的时期,再加上敏捷咨询师们念的歪经,他们让人感觉上就像是软件产品是可以在很短的时间内高质量的完成的,这令那些管理者们很兴奋,就像巴甫洛夫的条件反射实验中的狗看到了肉就会流口水那样兴奋。他们使用TDD,快速迭代,不断重构,持续集成直至持续部署的方法在进行软件开发。
软件开发真是这样的吗?难道不需要花时间去思考吗?对此,有些观点在Todd的《“品质在于构建过程”吗?》以及《Bob大叔和Jim Coplien对TDD的论战》中谈到过了。我只想想表达下面的观点:
- 软件的精髓在于设计,设计是一件很费大脑的事件。对于软件来说,设计没有完美的,它总是一件需要取舍需要权衡的事,比如:时间换空间,空间换时间,TCP或UDP,同步还是异步,数据冗余还不冗余等等。那怕是一个小小的observers模式是pull方式还是push方式 都需要仔细讨论。这些的东西需要时间和做前期尝试。
- TDD、快速原型和迭代可能会对软件和团队产生负面影响。在一开始,你需要花很大的精力来让你的软件从无到有(做过软件的人都知道,从零开始写代码是很痛苦的事),但是因为你没有想好,先做再说,所以,后期你会面临更多的质量问题而让你需要花更多的时间精力。当然,那些咨询师会让你用持续集成和持续部署这样的方法。但我想告诉你,这并不解决你软件设计的缺陷。举个例子——TDD、迭代、原型只关注功能性需求,其不会关注非功能性需求,比如性能问题,高可用性问题,系统维护问题(模块的耦合问题),等等。而这些问题往往都可以让你的软件设计重新来过。
- 重构是恶梦,重构应该越少越好。当你维护一个复杂的系统时你会知道重构是一件多么恐怖的事情(参看《重构代码的7个阶段》)。如果一开始没有想好,你要面临的不单单是re-design, re-architect,还要面对时间和人力成本的增加,最难的是你还要面对的是团队士气因为不断的rework而逐渐低落并产生厌倦和懈怠情绪。
阅读全文…

Loading ...
最新评论