存档

作者存档

程序员的谎谬之言还是至理名言?

2011年4月7日 46 条评论 18,313 人阅读    

有朋友(网友never)在酷壳Coolshell.cn的留言版上问我,为什么关注了这很多的东西,我想我可以用下文来回答这位网友,因为我和作者的观点几乎一致。这篇文章由 ALAN SKORKIN写的 “The Greatest Developer Fallacy Or The Wisest Words You’ll Ever Hear?” ,我把其全文翻译如下,我很喜欢这篇文章,希望你也喜欢。(翻译的也许不好,欢迎指正)

—————————————————正文分隔线——————————————————

Wisdom

I will learn it when I need it – 我会在我需要的时候再学“!我听到这句已经很多年了。这对于一个高速变化的软件行业环境来说,这似乎是一个非常实用的态度。 在某些方面这的确很实用主义,不过在其它的方面,我为这句话感到很不爽。这句话变成了整个软件行业的福音,但却没有让我们的软件行业变得更好。其问题在于,这句话伪装在于其听上去像是一个智慧的有经验的开发者说的,但是人们只是以此为借口而随波逐流。实在是有太多的东西需要我们去了解,我们也的确需要在工作当中来学习这些东西。但是, “在工作中学习”和“根据遇到的问题捡知识”这两者有着巨大的不同。

  • 另外,目前整个软件行业越来越需要一堆多面手,也许现在已经是这样了,只是我还没有注意到。当然,我也不喜欢这种情。现在,好像没有人愿意花更多的时间来把某一个东西学好学深学扎实,比如 计算机科学的基础知识,或是最新的你正在使用的技术,甚至你在最近几年内每天都在使用其编码的程序语言(参考:Java is passed by value)(译注:我在如何学好C++一文的回复中已经看到一些这样的人)。何苦呢?你会在你的学习路途中看到这些东西被更新,被废弃,并可能变得小众化。我和很多不同的人讨论过很多次,但是好像没有人意识到这是一个问题。 “哥们,做个实用主义的人吧”。
  • 与此同时,我们所有的人都在相互地克隆和模仿(译注:参看中国的C2C)。你需要一个Java程序员,我是一个Java程序员,你也是一个Java程序员,我的邻居也是一个Java程序员。我们之间有什么差别?其实,基本没有差别。好吧,我有一些jQuery的经历,太好,所以,你知道怎么来做一个折叠式的菜单?当然,我可以Google一下,然后剽窃别人最好的代码给你 :)(译注:参看“十条不错的编程观点”中的”Googling it” is okay)。

阅读全文…

好烂啊有点差凑合看看还不错很精彩 (34 人打了分,平均分: 4.76 )
Loading ... Loading ...

一些有意思的文章和资源

2011年4月6日 15 条评论 13,541 人阅读    

又到了向大家介绍一些最近我在网上发现的有价值的东西的时候了。(下面的链接中很多都被墙)

  • 本站的关于排序的文章有很多,对于排序算法来说,其受到要排序的个数和数据的杂乱程度的影响,我们知道比较稳定的排序算法是快速排序和归并排序,归并排序对于大量的数据排序效果是非常好的,尤其是我们可以进行并行的排序。这里有一个并行归并排序的算法的源代码,你可以参考一下 – “Parallel Merge Sort”。
  • 说到“奇技淫巧”和算法,这里有一个文章向你展示了C语言中使用位操作可能完成的各种算法,很有意思。请参看 – “The Aggregate Magic Algorithms
  • 这里有篇文章教你如何取得一个在线的哈佛大学的硕士学位,文章中说了一些相关的事宜,包括一些收费情况,并且展示了一张文凭。这里有一个网页说明了哈佛软件工程学位(Software Engineering)的所需要学习的科目,比如:Java和分布式计算,分布式/企业级计算,设计模式和Java,通讯协议,高级数据网络,Web开发,计算理论,Perl实践,Unix系统编程……我不知道我们的国家各个大学的硕士在学什么,因为我没有读过硕士,但好像现在的计算机研究生只是导师用来挣钱的免费资源,而且,实在不知道研究生在校研究什么。不管怎么样,从这看来,我们的大学好像并没有教给学生计算机的技术。比如在“如何学好C语言”和“如何学好C++语言”中我提到的那些书,那些才是大学里应该学的。我国的教育还真不是一般的落后,不过你不妨试试哈佛的在线学位。

阅读全文…

好烂啊有点差凑合看看还不错很精彩 (12 人打了分,平均分: 4.67 )
Loading ... Loading ...

我有一个Hello World的C++程序编译不过

2011年4月2日 31 条评论 19,666 人阅读    

在StackOverflow上有这样一个贴子,楼主说,我有下面这样的一个C++程序,为什么编译不通过啊。其让我想起了以前的这两个帖子《编程真难啊》和《给我一个序列号》。仅以此篇文章祝大家假期快乐吧

hello world 程序

hello world 程序

楼主还给出了相关的编译出错的信息(相信你一看就明白问题在哪里了,你应该还会发出一声“靠”!!!)

先是用Visual C++ 2010编译

c:\dev>cl /nologo helloworld.png
cl : Command line warning D9024 : unrecognized source file type 'helloworld.png', object file assumed
helloworld.png : fatal error LNK1107: invalid or corrupt file: cannot read at 0x5172

再用G++ 4.5.2编译

阅读全文…

分类: 杂项资源, 轶事趣闻 标签:
好烂啊有点差凑合看看还不错很精彩 (17 人打了分,平均分: 4.76 )
Loading ... Loading ...

又一个有趣的面试题

2011年4月2日 48 条评论 17,029 人阅读    

大家还记得前些天的那个火柴棍式的面试题吗?很有趣吧。下面是我今天在StackExchange上看到的一个有趣的面试题。大家不妨一起来思考一下。问题如下——

有两个相同功能代码如下,请在在A,B,C是什么的情况下,请给出三个原因case 1比case 2快,还有三个原因case 2会比case 1要执行的快。(不考虑编译器优化)

for (i=0; i<N; ++i){
    A;
    B;
    C;
}
for (i=0; i<N; ++i){
    A;
}
for (i=0; i<N; ++i){
    B;
}
for (i=0; i<N; ++i){
    C;
}

我的第一个反应是——

阅读全文…

好烂啊有点差凑合看看还不错很精彩 (11 人打了分,平均分: 5.00 )
Loading ... Loading ...

如何学好C++语言

2011年3月30日 52 条评论 30,336 人阅读    

昨天写了一篇如何学好C语言,就有人回复问我如何学好C++,所以,我把我个人的一些学习经验写在这里,希望对大家有用。首先,因为如何学好C语言中谈到了算法和系统,所以这里就只谈C++语言。

  • C++是最难的语言。这个世界上最难的编程语言可能非C++莫属了。你千万不要以为几天就可以学好C++,C++的学习曲线是相当BT的,你可以看看这篇文章。C++是一门很自由的语言,自由到了有点BT和恐怖的地步。我甚至认为C++并不是一门成熟的编程语言,因为太容易犯错了。所以,你一定要在一开始就要有很小心谨慎的态度,并把C++当成一种难以训服的猛兽来看待
  • 多问“为什么要这样”的问题。学习C++一定要多问几个“为什么是这样”,“凭什么要这样”的问题。比如:很多人知道C++有拷贝构造函数和初始化列表,但你真的知道为什么要有拷贝构造函数?为什么要有初始化列表吗?为什么要有template,为什么要有RTTI,为什么不是别的呢?难道就是为了让一门语言变得Cool一些吗?完全不是这样的,C++中的任何一个feature都有些实实在在的原因,你一定要去了解为什么要把C++设计成这样的原因,你才能学好C++。有空看看《C++演化和设计》一书。

阅读全文…

分类: 杂项资源 标签:
好烂啊有点差凑合看看还不错很精彩 (35 人打了分,平均分: 4.80 )
Loading ... Loading ...

如何学好C语言

2011年3月29日 116 条评论 59,690 人阅读    

有人在酷壳的留言版上询问下面的问题

keep_walker :
今天晚上我看到这篇文章。
http://programmers.stackexchange.com/questions/62502/small-c-projects

我也遇到了和提问的老外一样的问题。。能给像遇到这样烦恼的程序员一点建议嘛?谢谢!

我相信,这可能是很多朋友的问题,我以前也有这样的感觉,编程编到一定的时候,发现能力到了瓶颈,既不深,也不扎实,半吊子。比如:你长期地使用Java和.NET ,这些有虚拟机的语言对于开发便利是便利,但是对于程序员来说可能并不太好,原因有两个:

  1. 虚拟机屏蔽了操作系统的系统调用,以及很多底层机制。
  2. 大量的封装好的类库也屏蔽了很多实现细节。

一段时间后,你会发现你知其然,不知所以然。。我以前在CSDN上写过一篇《Java NIO类库Selector机制解析(》,在那篇文章中我说提到过(有讥讽的语气)Java的程序员不懂底层实现,所以很难把技术学得更扎实。此时,一部分程序员会不自然地想学学底层的技术,很自然的,C语言就被提了上来。

下面是我给这位朋友的一些建议:

阅读全文…

好烂啊有点差凑合看看还不错很精彩 (89 人打了分,平均分: 4.91 )
Loading ... Loading ...

酷壳完成迁移 感谢网友“知秋一叶”

2011年3月28日 38 条评论 5,903 人阅读    

酷壳迁移

大家都知道,酷壳在2011年2月16时受到比较大的黑客攻击,攻击很没有技术含量,都是从国外某些主机发出一些大量的请求,导致本站服务器的带宽耗尽(本站服务器的交换机上的最大带宽也就2M),因此,导致酷壳网站一度不能正常浏览。在以后的几天内都受到这样的攻击。

与此同时,2011年2月18日,我收到了热心网友知秋一叶发来的邮件,希望给我提供无偿帮助,真是雪中送碳。知秋一叶在来信中说,他是做虚拟主机和vps生意的,本身也是一个程序员,时常来酷壳访问,看到酷壳被攻击,他希望能够提供帮助,并可以提供专业级运维服务,只要不是超大量的ddos和cc攻击,都可以应付。

于是,知秋一叶在当天晚上帮助把酷壳全部迁移到了他的服务器上,一边帮着做WordPress的迁移(Nginx+PHP+MySQL+WordPress),一边帮着做一些ReWrite的规则配置,以及相关的防火墙配置,相当的熟练。从晚上12点左右一直和我一下配置并调试到凌晨4点左右,因为新的服务器使用Nginx,所以从Apache迁移过去的一些配置在WP-Super-Cache插件上遇到了一些麻烦,不过很快得以解决。此后,在周六(2.19)周日(2.20),知秋一叶还帮助酷壳建立和图片服务器以分流相关的流量,相当的专业。

之后,我在酷壳上又发布了一篇比较“敏感的文章”,在此后的几周内,酷壳又受到了来自国内外的大量的攻击,,不过,都被知秋一叶的专业运维能力化解了,前前后后防御了几十个IP地址的攻击,几乎没有什么黑客攻击的感觉。

随后,再接下来的日子里,知秋一叶都在帮忙查看CoolShell.cn的攻击情况,负载情况。最终于2011年3月6日在他的帮助下设置了Coolshell.cn的VPS,并正式完成了酷壳的迁移。相信这段时间来大家都看到了酷壳网站在性能上的显著提升。

大力感谢

我对知秋一叶给我的帮助非常地感谢,能遇上知秋一叶这样朋友的帮助,我感到无比地幸运,同时对此也非常感动。迄今为止,我和知秋一叶还没有见过面,只是在电话里通过几次电话,但是在这么多天这么多次的帮助下,我能深深地感觉到,知秋一叶是一个很豪爽的西北人,相当的热心肠,乐于助人,很容易相处,交往起来感到很亲切,总是为你着想。

阅读全文…

分类: 杂项资源 标签:
好烂啊有点差凑合看看还不错很精彩 (26 人打了分,平均分: 4.77 )
Loading ... Loading ...

纯文本配置还是注册表

2011年3月28日 56 条评论 6,352 人阅读    

我们知道Unix/Linux下的程序配置文件从来都是纯文本的,你可以自由地修改和查看,他们也没有什么什么XML之类的玩意(参看XML的这两篇文章:),这个最重要的Unix文化(参看Unix传奇下篇)40多年来就这么沿续下来了。我很佩服Microsoft的创新能力,一会儿用INI,一会儿用注册表,一会又是用XML,这就是Windows的编程中那“强大”的创新。在网上又看到有人在争论为什么用注册表而不是纯文本,所以,写下这篇文章。

引入注册表所谓的原因

首先,让我们来看一下为什么微软觉得要使用注册表而不是ini文件,下面是一些其列出来的ini方面的毛病:

  • ini文件不支持Unicode
  • ini文件的安全权限不够
  • ini文件在多进程下存取会有问题
  • 如果一个进程锁上了这个文件,另一个进程就无法获得,只能出错。
  • ini文件只能包含字符串,无法使用二进制
  • 解析ini文件相对来说性能比较慢,第一次读写都需要把整个文件读入内存,然后再写回去。
  • ini文件最大只有32K
  • ini文件的默认目录在Windows系统目录下,只能这个目录只能Windows管理员才能访问
  • ini只能包含了两层,对于多层不支持。
  • 把ini文件放在中央服务器上管理很困难。

而微软说,注册表可以完美地解决这些问题。居然微软只说到了ini文件,但我觉得不单单是ini,所有的以纯文本方式保存配置文件的方法都会出现上述这样的问题。

我的观点

那么,当你在看到这些言论时,你是怎么想的?你有没有经过自己的独立思考?还是你觉得注册表完美地解决了所有的一切?下面是我的一些观点:

阅读全文…

好烂啊有点差凑合看看还不错很精彩 (17 人打了分,平均分: 4.47 )
Loading ... Loading ...

Fix Bug的五个阶段

2011年3月24日 32 条评论 7,074 人阅读    

下面的文章和《各种流行的编程方式》有异曲同工,请你不要理解错了。本文来源,翻译如下:

——————————————————

一个非常严重和困难的bug,能够成就一个饱经沧桑深受压力的有经验的专业程序员的职业生涯。经受这种考验的创伤程度,相当你受到了一次严重的身体伤害,离婚,或是家庭成为的离世。

研究人员在研究了计算机编程心理学后,得出了一个程序员们在解决一个困难的bug时的心路里程。这些不同的境界,很像为大众所知的Kübler-Ross Stages of Grief(这个模型描述了人对待哀伤与灾难过程中的5个独立阶段(否认,愤怒,耍赖,抑郁,接受)。绝症患者被认为会经历这些阶段),而且原因都很相似。就好像死亡所伴随的悲伤一样,fix一个bug是一个过程其初始化了一个事件,一开始是拒绝相信,其造就了你苦闷的情绪并开始逐步影响你的心智。这种苦闷的情结果会让你纠结要努力忍受,最终会你会找到一个满意的结果。

了解下面这几个bug-fixing的阶段,会让我们更好的生存下来,并持之以恒,最终带来……关闭我们所有的bug的结果。

第一阶段:抵触

本阶段的状态: 多疑 Skeptical. 生气 Offended. 易怒 Petulant.

1. 不理睬

也许这个bug会安静地离开。

2. 标记上“不是bug”

也许这是用户的错,或是本地配置有问题。是的,我确信就是那样,一会就会好的。

阅读全文…

好烂啊有点差凑合看看还不错很精彩 (13 人打了分,平均分: 4.85 )
Loading ... Loading ...

程序员那些悲催的事儿

2011年3月22日 76 条评论 28,976 人阅读    

在StakeOverflow上有这样一个贴子叫“Confessions of your worst WTF moment”(WTF就是What the fuck的缩写),挺有意思的,我摘几个小故事过来,希望大家在笑过之后能从中学到什么——所有的经验都是从错误中来的(我在其中加了一些点评)

我们公司的软件是给警察局用的,那是一个对用来处理被逮捕的人的系统,此系统还需要收集脸部特征和指纹信息,并且,这个系统和会向FBI的系统提交这些信息。当我们在测试这个系统的时候,我们一般都是用我们自己的指纹,当然,数据库联着的是我们的测试数据库。不过,有一次,在我们测试完后,我们忘了把系统切换回生产库,于是我们的测试数据库就联上了生产环境,于是我们的指纹信息和照片就散布到了其它系统中……清除我们警察局这边的还好办,但是,你需要波士顿警察局警司去法院签字才能从FBI的数据库中清除我们的信息。

点评:测试环境和生产环境的数据不要混在一起。

有一次,我需要向新系统中导入一堆数据,因为数据量太大,需要5个小时,只能在夜里来干,在系统需要正式使用前2个小时,数据导完了,此时是凌晨4点。随后,我需要删除一些数据,于是我在SQL命令地上输入了“DELETE from important_table; where id=4”。是的,我没有看到哪里还有个分号,天啊。

点评:这就是加班工作的恶果。另,在delete之前最好先做一次select。

我把我的管理员口令提交到了一个开源软件的源码里。

点评:1)版本管理器里的东西是删不掉的。2)一些用户和口令要hard code在代码里,所以,不要混用代码使用的权限和管理员的权限,小心管理程序的运行权限,为其注册专门的用户。

阅读全文…

好烂啊有点差凑合看看还不错很精彩 (42 人打了分,平均分: 4.90 )
Loading ... Loading ...

无觅相关文章插件,快速提升流量