程序员部落酋长 Joel 之洞见

《Joel谈软件》是一本由Apress出版的随想文集,作者Joel Spolsky以幽默的笔触分享了他在软件行业的独特见解。全书分为36讲,涵盖了软件技术、人才、创业和企业管理等多个方面,旨在满足软件开发人员、设计人员、管理人员及从事软件相关工作的人员的学习与工作需求。Joel通过自己的亲身经历,提出了一些新颖独特的观点,使读者在轻松阅读的同时获得深刻的启示。
软件随想录——

程序员部落酋长 Joel谈软件

【原书名】 More Joel on Software

【内容提要】

本书是一部关于软件技术、人才、创业和企业管理的随想文集,作者以诙谐幽默的笔触将自己在软件行业的亲身感悟娓娓道来,观点新颖独特,内容简洁实用。全书分为 36 讲,每一讲都是一个独立的专题。

本书从不同侧面满足了软件开发人员、设计人员、管理人员及从事软件相关工作的人员的学习与工作需要。

【目录】 在这里

【样章】  在这里

【序】

Joel 、 Apress   [1] 、网志   [2]   和网志书

“很久以前,在一个很遥远、很遥远的星系中,……” [3]   好吧,实际上没有那么久啦,那是在 2000 年接近年底的时候, Apress 出版公司正式运营刚满一年。当时,我们只是一家非常小的计算机书籍出版商,毫无名气。那一年,我们计划出版的书籍只有很少几本,大概只相当于 Apress 现在一个月的出版量。

那时,我苦苦学习如何成为一个出版商,可能花费了过多的时间,忙于浏览网站和编写程序。有一天,我偶然来到了一个叫做“ Joel 谈软件”( Joel on Software )的网站,发现网站的主人是一个观点鲜明的家伙,他的写作风格有点不寻常,很聪明并且还有意挑战一些传统观念。 最特别的是,那时他正在写一组系列文章,批评大多数软件的用户界面是多么糟糕。总的来说,这主要是因为程序员们对用户的实际需求几乎毫无所知——用 Joel 和我经常使用的话说,这叫做“ bupkis ”(近乎没有),这是一句来源于意第绪语 [4]   的纽约土话。我同许多其他人一样,被 Joel 的这组系列文章以及其他几篇随笔吸引住了。

然后,我就冒出了一个想法:我是出版商,我喜欢读他的文章,那么为什么不出书呢?我给 Joel 写信,自我介绍了一番。虽然他起初有些怀疑,但是我不知怎地就说服他相信,如果他将那组用户界面的系列文章写成一本书,会有很多人购买,我和他都会赚到很多钱。(当然,那是发生在很久以前的事情,那时 FogBugz[5] 还没有变得像今天这样成功, Joel 也还不是一个令人羡慕的收入颇丰的演讲者。不过,那时我们都比现在年轻,并且正如你想的那样,比现在穷得多。)

闲话少说, Joel 后来又为新书加入一些新内容,使得它更具吸引力,我觉得也更有销路了。突然之间, Apress 就必须考虑如何出版它的第一本全彩书籍了。 User Interface Design for Programmers (《面向程序员的用户界面设计》)正式出版是在 2001 年 6 月 21 日。现在,它被公认为有史以来第一本“网志书 ”( blook ) [6] 。令计算机图书行业和我本人有些震惊的是,按照当时的畅销标准,它竟然成了一本很优秀的畅销书。顺便说一句,直到今天,它仍然在不断重印,仍然卖得非常好,仍然值得一读。(不过,作为 Joel 的出版商,而不是作为朋友,我想对他说:你是不是该考虑出个修订版了?)

不过,还是有人出来说, User Interface Design for Programmers 并不是一本纯粹的“网志书”,因为加入了“太多的”网站上没有的新内容,使得这本书看上去更像一个混合体——我的看法是,这正同它的先锋地位相适合。

短短几年之后,“ Joel 谈软件”成了全世界程序员中最著名的网志,原因当然是 Joel 一直不停地写作那些非常有趣的文章。其中最著名的大概是那篇经典文章《微软公司如何在 API 战争中失利》( How Microsoft Lost the API War )。据我所知,这篇文章着实把微软的开发部门折腾得够呛。

这样,我就有了另一个想法:将 Joel 最好的那些文章收集起来,再出一本书,不做大的变动,除了加上一篇字数很少的前言,只要 Joel 觉得合适就可以。这样一本书的名字就叫做 Joel 谈软件》Joel on Software )。即使书中 98% 的内容都能在互联网上找到,即使人们认定 Apress 出版这样一本书一定是疯了,它还是在 2004 年底出版了。今天,这本书已经印刷了 10 次,而且依然是一本畅销书。

为什么呢?人们的阅读习惯并没有改变,在像品尝美味的巧克力糖果一样品味 Joel 的文章时,很多人仍然习惯于看书而不是看浏览器。

但是, Joel 并没有因此停下来,他依然在努力思索如何才能更好地编程,或者怎样招聘到优秀的程序员,他也没有停止用自己的观点挑战传统看法。所以,我说服他,现在可以出一本续集,收录 2004 年底上一本书出版之后的那些“ Joel 的精华文章”。

结果就是你现在手里拿的这第二本文集, Joel 的观点、随感以及偶尔的夸夸其谈都浓缩在了他才华横溢的文章之中 。除了少量的编辑加工,原文几乎毫无变动,但是同显示器屏幕或者 Kindle 阅读器 [7] 相比,你确实以一种非常不同的形式拥有了最新的“ Joel 的精华文章”,现在这被称为“网志书”。(我要对 Joel 说,我很希望你像中意第一本集子里那些文章那样,中意这本集子里的文章。)

这本书同第一本一样,有着不同寻常的封面和副标题。这是因为 Joel 和我都是藏书爱好者(好吧, Joel 才是藏书爱好者,我是藏书狂人)。 17 世纪和 18 世纪那些经典著作的印刷商,为了让他们的书变得生动,往往会做一些特别的设计,我们两人都非常喜欢这一类东西。在第一本《 Joel 谈软件》的封面上,我们向伯顿( Burton )的《忧郁的剖析》 [8] Anatomy of Melancholy )致敬;这一本的封面上,我们向霍布斯( Hobbes )的《利维坦 》 [9] The Leviathan )致敬,它的封面很著名,一个巨人由许多个小人组成。 Joel 和我都感到这个隐喻很不错,可以暗示程序是如何编写完成的:宏伟的整体由个体组成,并且个体是关键。

最后,是一点很个人化的说明:尽管现在 Joel 的名气很大,但也依然是一个很朴实的人,或者再一次用我们共同的土话说,是一个真正的“ mensch ”(好人)。我非常骄傲,我有这样一个好朋友。

Gary Cornell

Apress 出版公司创始人



[1]      Apress 是本书原版的出版者,一家著名的计算机书籍出版商,总部在加州的伯克利。

——译者注

[2]    本书中“ blog ”一词统一译为“网志”或“网络日志”。——译者注

[3]     原文为“ A long time ago in a galaxy far, far away ... ”,这是美国经典科 幻电影《星球大战》( Star Wars )的片首字幕。 20 世纪六七十年代出生的美国人,几乎人人耳熟能详。

——译者注

[4]      意 第绪语( Yiddish )是犹太人的民族语言,本书作者 Joel Spolsky 是犹太人。——译者 注

[5]      FogBugz 是 Joel 后来创业时的一个商业软件产品。——译者注

[6]   “网志书”( blook )是一个 20 世纪 90 年代出现的新词,词源为 bl(og)+(b)ook ,意即由网络日志的文章中编辑而成的书籍。——译者注

[7]       Kindle 阅读器是 Amazon 网上书店于 2007 年底推出的一种手持电子阅读设备。——译者注

[8]      罗伯特· 伯顿( Robert Burton , 1577 — 1640 )是 17 世纪英国的著名学者,他的代表作《忧郁的剖析》( Anatomy of Melancholy )出版于 1621 年,表面上是一本心理医学的教科书,但实际上是英国文学的经典作品。——译者注

[9]      托马斯·霍布斯( Thomas Hobbes, 1588 - 1679 )是 17 世纪英国的著名政治学家和哲学家,他的代表作《利维坦》( The Leviathan )出版于 1651 年,从哲学上讨论国家的起源、性质和作 用,是古典学术名著。 ——译者注

### 光流法C++源代码解析与应用 #### 光流法原理 光流法是一种在计算机视觉领域中用于追踪视频序列中运动物体的方法。它基于亮度不变性假设,即场景中的点在时间上保持相同的灰度值,从而通过分析连续帧之间的像素变化来估计运动方向和速度。在数学上,光流场可以表示为像素位置和时间的一阶导数,即Ex、Ey(空间梯度)和Et(时间梯度),它们共同构成光流方程的基础。 #### C++实现细节 在给定的C++源代码片段中,`calculate`函数负责计算光流场。该函数接收一个图像缓冲区`buf`作为输入,并初始化了几个关键变量:`Ex`、`Ey`和`Et`分别代表沿x轴、y轴和时间轴的像素强度变化;`gray1`和`gray2`用于存储当前帧和前一帧的平均灰度值;`u`则表示计算出的光流矢量大小。 #### 图像处理流程 1. **初始化和预处理**:`memset`函数被用来清零`opticalflow`数组,它将保存计算出的光流数据。同时,`output`数组被填充为白色,这通常用于可视化结果。 2. **灰度计算**:对每一像素点进行处理,计算其灰度值。这里采用的是RGB通道平均值的计算方法,将每个像素的R、G、B值相加后除以3,得到一个近似灰度值。此步骤确保了计算过程的鲁棒性和效率。 3. **光流向量计算**:通过比较当前帧和前一帧的灰度值,计算出每个像素点的Ex、Ey和Et值。这里值得注意的是,光流向量的大小`u`是通过`Et`除以`sqrt(Ex^2 + Ey^2)`得到的,再乘以10进行量化处理,以减少计算复杂度。 4. **结果存储与阈值处理**:计算出的光流值被存储在`opticalflow`数组中。如果`u`的绝对值超过10,则认为该点存在显著运动,因此在`output`数组中将对应位置标记为黑色,形成运动区域的可视化效果。 5. **状态更新**:通过`memcpy`函数将当前帧复制到`prevframe`中,为下一次迭代做准备。 #### 扩展应用:Lukas-Kanade算法 除了上述基础的光流计算外,代码还提到了Lukas-Kanade算法的应用。这是一种更高级的光流计算方法,能够提供更精确的运动估计。在`ImgOpticalFlow`函数中,通过调用`cvCalcOpticalFlowLK`函数实现了这一算法,该函数接受前一帧和当前帧的灰度图,以及窗口大小等参数,返回像素级别的光流场信息。 在实际应用中,光流法常用于目标跟踪、运动检测、视频压缩等领域。通过深入理解和优化光流算法,可以进一步提升视频分析的准确性和实时性能。 光流法及其C++实现是计算机视觉领域的一个重要组成部分,通过对连续帧间像素变化的精细分析,能够有效捕捉和理解动态场景中的运动信息
微信小程序作为腾讯推出的一种轻型应用形式,因其便捷性与高效性,已广泛应用于日常生活中。以下为该平台的主要特性及配套资源说明: 特性方面: 操作便捷,即开即用:用户通过微信内搜索或扫描二维码即可直接使用,无需额外下载安装,减少了对手机存储空间的占用,也简化了使用流程。 多端兼容,统一开发:该平台支持在多种操作系统与设备上运行,开发者无需针对不同平台进行重复适配,可在一个统一的环境中完成开发工作。 功能丰富,接口完善:平台提供了多样化的API接口,便于开发者实现如支付功能、用户身份验证及消息通知等多样化需求。 社交整合,传播高效:小程序深度嵌入微信生态,能有效利用社交关系链,促进用户之间的互动与传播。 开发成本低,周期短:相比传统应用程序,小程序的开发投入更少,开发周期更短,有助于企业快速实现产品上线。 资源内容: “微信小程序-项目源码-原生开发框架-含效果截图示例”这一资料包,提供了完整的项目源码,并基于原生开发方式构建,确保了代码的稳定性与可维护性。内容涵盖项目结构、页面设计、功能模块等关键部分,配有详细说明与注释,便于使用者迅速理解并掌握开发方法。此外,还附有多个实际运行效果的截图,帮助用户直观了解功能实现情况,评估其在实际应用中的表现与价值。该资源适用于前端开发人员、技术爱好者及希望拓展业务的机构,具有较高的参考与使用价值。欢迎查阅,助力小程序开发实践。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值