2009年12月30日

闲扯社会进化论——写在达尔文年即将结束之际

  今年是达尔文诞辰200周年,同时也是大名鼎鼎的《物种起源》出版150周年。在年初开博的时候,俺就盘算着,借“达尔文年”的机会,写点帖子,聊表俺对达尔文他老人家的敬仰。眼瞅着马上就到年底了,趁着这几天有空,赶紧把这个帖子给写了。
  考虑到俺博客的风格,俺不打算八卦达尔文的生平,也不打算介绍进化论在生物领域的贡献;毕竟这些东西感兴趣的人未必多,而且写了对大伙儿帮助不大,白浪费口水。今天俺打算聊的是:和达尔文稍微有点沾边,而且又非常臭名昭著的“社会达尔文主义”。

2009年11月9日

跳还是不跳,是一个问题——跳槽时该如何权衡?

  俺不久前换了一家公司。新公司的老板,为了充分压榨俺的剩余价值,要求俺既要兼顾新产品的架构设计,同时还要负责公司的研发管理工作。所以,最近1-2个月忙得不可开交,连俺的博客也受了牵连,更新明显少了。今天正好有点空,顺便和大伙儿聊一下:俺是如何评判一个公司的好坏,从而权衡要不要跳槽。

2009年10月13日

面对墙,我们所能做的就是——让 GFW 陷入到人民战争的汪洋大海

  党国的六十大寿庆典,终于过去了。但国内互联网的形势依然严峻,GFW 的封杀并未削弱,这是有目共睹滴。列位看官们,不要再对我党抱有什么不切实际的幻想了。党封锁互联网的必然性,俺在之前的帖子已经具体阐述过了。即便明年开世博会的时候,我党稍微发一下慈悲,稍微放松一下 GFW。但等到世博会一落幕,网络封锁的索套肯定又会重新收紧。
  大伙儿请想想看,咱们现在所处的网络环境,是不是很像鲁迅他老人家在《呐喊》中所说的——令人窒息的铁屋?显然,有很多的人和俺一样,不甘于就这样呼吸着密封的铁屋中,被刻意毒化的、污浊的空气。那么,在这种恶劣的网络环境和恶劣的政治环境中,我们能做些啥捏?
现在的互联网,早已不是10年前的互联网。现在有发达的 Web 2.0 应用;有成熟的 P2P 技术;有牛X的大公司(比如 Google)相助。虽然我们每个人单独能做的事情很微薄,影响很有限。但如果大伙儿都在为翻墙而努力,效果是灰常灰常明显滴!我们要让 GFW 陷入到人民战争的汪洋大海之中(剽窃自老毛的名言)。
  下面,俺具体说说,咱们这些无名小卒,能为这场人民战争做点啥?如果哪位同学有新的建议,欢迎在博客留言,进行补充。

2009年9月26日

“如何翻墙”系列:戴“套”翻墻的方法

★Tor 与 GFW 对抗的几个阶段


  1.
  本文最早写于党国的六十大寿临近之际(2009)。当时 GFW 发飚,很多翻墙工具纷纷落马。只有 Tor 还比较坚挺,依靠网桥模式,突破封锁。所以当时俺写了此文,顺便普及了一把网桥中继的知识。
  2.
  后来,网桥中继的模式已经不灵光了(大部分中继都被 GFW 封杀了)。
  3.
  所以,俺把本文的后半部分重写了,介绍了一种新的方法——利用互联网上的公共代理,让 Tor 复活。
  4.
  再后来,用公共代理的方式,也不灵了(很难找到合适的公共代理,估计也是因为 GFW 的屏蔽)
  5.
  2014年10月,Tor 官方推出了基于 meek 的插件,Tor 又复活啦(具体配置参见《Tor 已复活——meek 流量混淆插件的安装、优化、原理》)

  另外,俺在2013年补充了一篇《关于 Tor 的常见问题解答》,有兴趣的同学也可以参考。

2009年9月20日

如何包装个人品牌?

  上一个帖子拿李开复来说事儿,忽悠了包装个人品牌的诸多好处。前几天比较忙,一直没把后续的话题说完。趁着今天周末有空,赶紧把上回未尽的话题补完,免得被当成太监帖。

2009年9月9日

闲话个人品牌的包装——从李开复离职想到的

  这几天关于李开复离职的消息充斥着各大 IT 新闻网站。今天俺也来凑凑热闹,写点相关的帖子。可能有同学会奇怪:为啥要写【包装】这个话题。因为李开复给俺最明显的感觉就是:很善于包装自己。
  在俺看来,包装是顶顶重要的技能。可惜这玩意儿,在很多 IT 从业人员(尤其是程序员)中,并未得到重视。所以,咱今天就来聊一下这个话题。

2009年8月30日

再举几个动态语言 eval 手法的例子

  在前一个帖子“什么俺推荐Python[2]”里面,顺便提到了动态语言中常用的 eval 手法。当时为了给大伙儿加深印象,俺举了个数字运算的例子(详见“原文”)来说明 eval 的好处。

2009年8月21日

为什么俺推荐 Python[2]:作为动态语言的 Python

  上一篇帖子介绍了脚本语言的优缺点,然后又拿 Python 和其它脚本语言PK了一下。今天主要是忽悠一下动态语言,捎带忽悠一下 Python。如果你看完本贴,觉得动态语言不错,那俺建议你从 Python 开始入手。

2009年8月10日

为什么俺推荐 Python[1]:作为脚本语言的 Python

  俺窃以为,Python 的所有特征中,作为脚本语言(“脚本语言”的定义参见“这里”)是它的首要特征。因此,在本系列帖子中,俺首先来忽悠一下 Python 作为脚本语言,有些啥好处?

为什么俺推荐 Python[0]:概述

  当初博客开张的时候,原计划在编程语言方面聊聊 C++、Java 和 Python。谁曾想半年多过去了,尚未写过 Python 的帖子。实在是说不过去啊!所以今天赶紧写一篇来凑数。

2009年7月31日

书评:《你的灯亮着吗?——找到问题的真正所在》

  前几天收到读者来信,建议俺推荐一些关于方法论、心理学、管理学方面的书籍。俺当时列的第一本就是温伯格写的《你的灯亮着吗?》。今天俺打算来点评一下此书。

2009年7月23日

从微博客被封杀说开去

  不懂微博客(MicroBlog)为何物的同学,先看“这里”扫盲一下。
  本月初(准确说是7月7日晚)“饭否”被和谐时,大家都把这事儿和新疆的7·5事件联系起来。最近,随着新疆局势的缓和,饭否的粉丝都指望着早点儿解禁。谁曾想,这两天 GFW 又把另外几家微博客网站给“和谐”掉了。这其中就有“嘀咕”、“做啥”、“叽歪”。经这么一折腾,国内知名的微博客网站已经所剩无几了。
  为啥我党要把知名的微博客网站一网打尽捏?下面俺就从几个方面加以分析。

2009年7月16日

学习一下德国人民的翻墙精神

  最近常听到有人抱怨穿墙太麻烦,俺心里就嘀咕:你要是知道当年德国人民翻墙的艰辛和危险,或许就不会再抱怨翻GFW这堵墙的麻烦了。
  说到德国人的翻墙,比较关心政治的同学应该会联想到大名鼎鼎的“柏林墙”(具体介绍见“这里”)。从某种意义上看,东德共党在60年代建造的柏林墙和中国共党在21世纪架设的 GFW 真是具有异曲同工之妙——两堵“墙”都是用来阻止本国人民对自由的追求。各位同学们目前的处境,和当年东德老百姓的处境也很类似——都在挖空心思琢磨翻墙之术。
  有鉴于此,俺今天特地献上当年收藏的一篇翻(柏林)墙的老文章(附在后面),希望给那些正在翻墙或者准备翻墙的同学打打气,鼓鼓劲。为了追求自由,突破 GFW 的那点麻烦算得了什么(翻墙的入门介绍在“这里)!
  记得电影《侏罗纪公园》里面有句台词(大意是):生命总会找到自己的出口。俺借用一下,篡改成:追求自由的人,总能找到“墙”的突破口

2009年7月7日

扫盲“社会工程学”[5]:你该如何【防范】?

  经过前面几个帖子的介绍,大伙儿应该能看出来,社会工程学的应用范围是很广泛滴。它的应用会涉及日常生活的许多领域,绝不仅限于信息安全。所以,如何防范就是一个重要的话题了。今年咱们就来聊一下如何防范。

2009年7月1日

党和互联网的较量

  “伟光正”最近和广大网民干上了,折腾了一堆事情出来(比如:强制推广“绿霸”、打压 Google)。正好今天又赶上伟光正的88岁生日,俺就来分析一下伟光正的司马昭之心。

2009年6月26日

Java 性能优化[4]:关于 finalize 函数

  上次的帖子聊了垃圾回收器的调优,当时啰嗦了比较长的篇幅,就没再继续提 finalize 的事儿(其实这玩意儿和 GC 是沾点儿边的)。今天咱就把 finalize 函数相关的性能话题拿来说一下。

2009年6月22日

开源点评:源代码版本控制系统介绍

  本文是“每日构建[4]:相关工具介绍”的第一部分。
  由于源代码版本控制系统(Revision Control System,以下简称“RCS”)属于“每日构建流程”的头一个环节,所以俺在介绍每日构建的相关工具时,先来聊一聊 RCS 类的软件。

2009年6月21日

软件工程进阶之每日构建[4]:相关工具介绍

  本来“每日构建系列”在介绍完流程之后就结束了。后来,陆续有同学在评论和邮件里咨询和每日构建相关的一些工具。所以俺就再增加点内容,介绍一下相关的工具。

2009年6月14日

书评:《一九八四》——反乌托邦的代表作

  之前的帖子提到了乔治·奥威尔的代表作《1984》(洋文书名《Nineteen Eighty-Four》),今天俺就专门写一个帖子,为那些没有看过此书的同学点评一下。如果你已经看过此书并能够体会奥威尔的深意,那本帖就你不必看了。

2009年6月11日

是该写点技术以外的东西了

  本来俺的博客基本上是谈技术那档子事儿。当初刚开博的时候,也没准备在技术博客中抨击时政的。不过最近一个月来,发生了太多令人俺印象深刻的事情,逐渐改变俺的一些看法。

2009年6月7日

扫盲“社会工程学”[4]:【综合运用】举例

  前面的几个帖子已经介绍了社会工程学的一些常见伎俩(主要是“信息收集”、“假冒身份”、“施加影响”这三个手法),今天俺要来举几个综合性的例子。通过这些例子,大伙儿可以见识一下那些社会工程学的老手是如何把各种伎俩有机结合起来,并达到最终的目的。

2009年5月31日

开源点评:Protocol Buffers 介绍

  今天来介绍一下“Protocol Buffers”(以下简称 protobuf)这个玩意儿。本来俺在构思“生产者/消费者模式”系列的下一个帖子:《生产者/消费者之间的数据传输格式》。由于里面扯到了 protobuf,想想干脆单独开一个帖子算了。

2009年5月26日

光环效应引发的认知误区

  上次聊社会工程学中关于“施加影响”的话题,其中提到了心理学上的“光环效应”。今天想把这个话题深入地八卦一下。

2009年5月22日

Java 新手的通病[5]:不了解 JVM

  上次的帖子讨论了Java异常机制的几种误用,今天咱们来说说 JVM(以及 Java 编译器)相关的话题。为啥要聊 JVM 捏?因为有很多 Java 程序员,由于对 JVM 缺乏了解,在碰到某些技术问题时无从下手;另外,由于缺乏对 JVM 的了解,可能导致写出来的代码性能巨差或者有严重的 Bug。所以俺在之前的帖子“学习技术的三部曲:WHAT、HOW、WHY”中,强调了掌握内部机制的重要性。对于一个 Java 程序员来说,你不一定要非常清楚 JVM 的细节,但是对于一些关键的运作机制,还是要掌握大致的概念。

2009年5月19日

扫盲“社会工程学”[3]:攻击手法之【施加影响】

  上一个帖子咱们介绍了社会工程中包装的技巧。按照本系列的计划,今天要讨论的内容是:“如何施加影响”。

2009年5月16日

如何翻墙?——写在 BlogSpot 被封之后 {2018-12-26}

  公元2009年5月的某天,BlogSpot 又一次撞墙,被 GFW 封了。俺在 BlogSpot 上的博客也遭受池鱼之殃,杯具啊杯具!当时为了让俺博客的读者能够继续访问,咱特地写了这个扫盲帖,全面普及一下翻墙的各种基本“姿势”。
  由于翻墙技术日新月异,本文也会不断更新。会翻墙的同学,请通过“这里”看本文的最新版本。

2009年5月9日

扫盲“社会工程学”[2]:攻击手法之【假冒身份】

  在前一个帖子里,咱们介绍了“信息收集”,今天咱们来讲一讲“假冒身份”的手法。

2009年5月6日

扫盲“社会工程学”[1]:攻击手法之【信息收集】

  上一个帖子普及了一些基本概念和常识,接下来就得说点实在的货色:介绍一下攻击者常用的套路。攻击者的套路大致可以分为如下几个步骤:信息收集假冒身份施加影响、实施最终的攻击。由于每个步骤介绍起来都蛮长的,俺今天先来介绍“信息收集”这个步骤。

2009年5月5日

扫盲“社会工程学”[0]:基本常识

  最近几年,信息安全方面的问题日益严重,许多同学深受其害(比如网络钓鱼、盗用银行卡、蠕虫木马泛滥、僵尸网络盛行等等)。俺窃以为,很大一部分原因在于相应的扫盲教育没有跟上。且不说普通的电脑菜鸟对信息安全一无所知,即便是很多 IT 公司的专业技术人员,对此也知之甚少。其后果就是:很多菜鸟级的攻击手法屡试不爽,很多平庸的攻击者屡屡得手。有鉴于此,俺打算抽空普及一下信息安全相关的东东,或许能对某些同学有所帮助。

2009年4月29日

Java 性能优化[3]:垃圾回收(GC)

  上次的帖子讲到引用类型和基本类型由于内存分配上的差异导致的性能问题。那么今天就来聊一下和内存释放(主要是 GC)有关的话题。

2009年4月24日

开源实践:SQLite 的使用场景

  上次针对 SQLite 进行了扫盲,之后有同学在评论里问俺:如何在项目中使用它?今天咱来聊一下这个话题。

2009年4月21日

Oracle 收购 SUN,会有啥影响?

  昨天惊悉 Sun(升阳)被 Oracle(甲骨文)买了,埃里森真是大手笔啊。IT 业界出了这么大的事儿,如果不趁机八卦一下,似乎有点说不过去啊。下面就从几个方面聊一下俺的愚见。

2009年4月18日

C/C++ 中一个简单的 enum 手法(idiom)

★引子


  今天写程序的时候,又用到这个 idiom 了,于是顺便贴出来。这个 idiom 蛮简单的,估计很多人都用过。今天主要是贴出来给新手参考(老手们就甭费时看此帖了)。

2009年4月16日

架构设计:生产者/消费者模式[4]:双缓冲区

  “双缓冲区”是一个应用很广的手法。该手法用得最多的地方想必是屏幕绘制相关的领域(主要是为了减少屏幕闪烁)。另外,在设备驱动和工控方面,双缓冲也经常被使用。不过今天要聊的,并不是针对上述的某个具体领域,而是侧重于并发方面的同步/互斥开销。另外提醒一下,双缓冲方式和前面提到的队列缓冲、环形缓冲是可以结合使用滴。

2009年4月13日

招聘的误区

  上次在“二八原理系列”中谈到了“如何找到优秀的开发人员”。当时主要是结合“优秀人员”的稀缺性来谈优秀人员的招聘问题。今天打算换一个角度,抨击一下当前很多软件公司在招聘方面的弊端。

2009年4月10日

C++ 多线程调试和测试的注意事项

  在上次的帖子聊了 C++ 多线程的跨平台问题,后来感觉意犹未尽。今天顺便说一下开发C++多线程应用程序时,有关调试和测试的一些注意事项。下面这些注意事项主要是针对C++,不过有些对于其它的语言也适用。

2009年4月5日

微软需要 Twitter 来对抗 Google

  最近小道消息疯传 Google 要收购 Twitter,闹得IT界沸沸扬扬。昨天 TopLanguage 论坛上也有同学讨论此话题(请看“这里”),我也在里面掺和了一下,发表几点随想。今天想想不过瘾,就把昨天发的评论再继续发散一下。

2009年4月3日

C++ 的可移植性和跨平台开发[6]:多线程

  最近一个多月写的帖子比较杂,导致本系列又好久没更新了。结果又有网友在评论中催我了,搞得我有点囧。今天赶紧把多线程篇补上。上次聊操作系统的时候,由于和 OS 有关的话题比较琐碎,杂七杂八说了一大堆。当时一看篇幅有点长,就把多进程和多线程的部分给留到后面了。

2009年4月1日

架构设计:生产者/消费者模式[3]:环形缓冲区

  前一个帖子提及了队列缓冲区可能存在的性能问题及解决方法:环形缓冲区。今天就专门来描述一下这个话题。
  为了防止有人给咱扣上“过度设计”的大帽子,事先声明一下:只有当存储空间的分配/释放非常【频繁】并且确实产生了【明显】的影响,你才应该考虑环形缓冲区的使用。否则的话,还是老老实实用最基本、最简单的队列缓冲区吧。还有一点需要说明一下:本文所提及的“存储空间”,不仅包括内存,还可能包括诸如硬盘之类的存储介质。

2009年3月29日

架构设计:生产者/消费者模式[2]:队列缓冲区

  经过前面两个帖子的铺垫,今天终于开始聊一些具体的编程技术了。由于不同的缓冲区类型、不同的并发场景对于具体的技术实现有较大的影响。为了深入浅出、便于大伙儿理解,咱们先来介绍最传统、最常见的方式。也就是单个生产者对应单个消费者,当中用【队列】(FIFO)作缓冲。

2009年3月27日

架构设计:生产者/消费者模式[1]:如何确定数据单元?

  既然前一个帖子已经搞过扫盲了,那接下来应该开始聊一些具体的编程技术问题了。不过在进入具体的技术细节之前,咱们先要搞明白一个问题:如何确定数据单元?只有把数据单元分析清楚,后面的技术设计才好搞。

2009年3月25日

架构设计:生产者/消费者模式[0]:概述

  今天打算来介绍一下“生产者/消费者模式”,这玩意儿在很多开发领域都能派上用场。鉴于该模式很重要且相关内容比较丰富,俺打算分几个帖子逐一介绍。今天先来扫盲一把。如果你对这个模式已经比较了解,请跳过本帖子,直接看下一个帖子(关于如何确定数据单元)

2009年3月22日

开源点评:cURL——优秀的应用层网络协议库

  今天来点评一下 cURL,这是一个老资格的开源项目,使用它可以基于多种应用层网络协议进行数据传输(包括上传和下载)。它的特点是:支持的协议多、跨平台、支持多种编程语言接口。后面俺会针对这些特点作一些简单的介绍。

2009年3月20日

Java 新手进阶:细说引用类型

  在前几天的帖子《Java性能优化[1]:基本类型 vs 引用类型》里,俺大概介绍了“引用类型”与“基本类型”在存储上的区别。昨天有网友在评论中批评说“引用类型变量和它所引用的对象”没区分清楚,容易混淆。所以今天专门来说一下引用类型的相关细节。

2009年3月19日

Java 性能优化[2]:字符串过滤实战

  上一个帖子已经介绍了基本类型和引用类型的性能差异(主要是由于内存分配方式不同导致)。为了给列位看官加深印象,今天拿一个具体的例子来实地操作一把,看看优化的效果如何。

2009年3月16日

Java 性能优化[1]:基本类型 vs 引用类型

  在 Java 性能优化系列中,内存管理是一个要优先考虑的关键因素。而说到内存分配,就必然会涉及到基本类型和引用类型。所以我们今天就先来介绍一下这两种类型在性能方面各自有什么奥妙(关于引用类型的其它奥妙,请看“这里”)。

Java 性能优化[0]:概述

  考虑写性能优化系列,主要是因为之前看到了太多性能其烂无比的 Java 代码(有些代码看得俺口瞪目呆)。很多 Java 程序员在写程序时,由于不太了解 JVM 及语言本身的一些运作机制,从而导致了代码的性能出现【严重】问题(性能差一个数量级以上,我才称为“严重”)。

2009年3月14日

C++ 对象是怎么死的?POSIX 线程篇(pthread)

  上一个帖子聊完了 Win32 环境下和线程有关的 C++ 对象死亡问题,今天该说说 POSIX 的线程库 pthread 了。如果你对 pthread 不太了解,可以先看看维基百科的介绍。

2009年3月13日

开源点评:SQLite 数据库扫盲

  今天注意到SQLite 3.6.11(上个月发布的)增加了一个俺期待已久的“online backup”接口,激动之余就顺便和大伙儿聊一下 SQLite 数据库。本帖权当是 SQLite 扫盲,如果你对 SQLite 已经很熟悉,本文就不必再看了。另外,假如你想了解 SQLite 在软件项目中的具体应用,可以看“另一篇博文”。

2009年3月12日

无处不在的二八原理[4]:关于激励(如何发挥员工积极性)

  由于激励是除了招聘之外,又一个非常重要的管理环节。上次已经介绍了把二八原理应用到招聘中,今天就该说说和激励有关的话题。

2009年3月9日

书评:《人月神话》——不朽的软件工程名著

  已经有好几周没有写书评了,今天突然想起来要写一写。由于上次的书评是关于 C++ 的,今天打算写写软件工程方面的。对于软件工程而言,我个人认为到目前为止,尚未有哪本书的影响力和深刻程度能够超越《人月神话》(全名是:The Mythical Man-Month——Essay on Software Engineering)。于是考虑来聊一下鼎鼎大名的《人月神话》。如果你已经熟读此书,并且自认为深刻掌握其精华,本帖子你就不必再看了。

2009年3月5日

C++ 对象是怎么死的?Win32 线程篇

  在前面的帖子里聊完了进程终止对C++对象析构的影响。今天咱们来说一下线程对于C++对象析构的影响。
  由于 C++ 03 标准【没有】包含线程的概念,而(截至写本文时)C++ 0x 尚未正式发布。所以对线程的讨论只好根据特定的操作系统平台来谈。对于操作系统自带的线程 API,目前比较流行的款式是 Windows 平台提供的线程 API 和 POSIX 平台上的 pthread API。但是这两种线程 API 的差异实在是太大,没法拿出来一起聊。我只好把“线程篇”的帖子再拆分一下,今天先来聊一聊 Win32 的线程 API(下一篇再聊 pthread)。

2009年3月2日

无处不在的二八原理[3]:关于招聘(如何找到优秀的软件开发人才)

  今天咱们先来聊聊招聘的话题。为啥要先聊招聘捏?因为招聘工作是其它各项管理工作的源头(先得有人可管才能谈管理嘛)。并且招聘工作有其特殊性:招聘方面的失误传递到了后续的环节,其影响会成倍放大。这个现象非常类似于软件开发流程:如果需求阶段出了问题,该问题到设计阶段会放大十倍(设计人员会骂娘),到编码阶段会放大百倍(程序员会抓狂),到测试阶段......
  费了这许多口水之后,大伙儿应该看出招聘工作的重要性了吧?既然知道了重要性,下面俺就来个现身说法,讲一下当初搭建开发团队的经验。

2009年3月1日

无处不在的二八原理[2]:在管理方面的应用

  前两周由于聊了“每日构建”系列和“C++对象之死”系列,把二八原理系列给搁置了一些时间。今天终于又回到这个系列上了。我估计列位看官中,可能有不少人打算将来往管理方向发展,所以在聊完“二八原理在软件开发的应用”之后,咱们就来聊聊管理方面的话题。

2009年2月26日

C++ 对象是怎么死的?关于标准输入输出流(cout,cerr,clog,etc)的进一步探讨

  昨天的帖子《C++ 对象是怎么死的?进程篇》,在谈到全局对象的析构顺序史,举了一个“在析构函数中使用 cout”的例子(代码详见原文)。当时的本意是想说明:全局对象的析构顺序是不确定的,最好不要在程序逻辑中依赖这个顺序(免得出现移植问题)。
  没成想该帖子引来热烈的评论(俺有点受宠若惊了),关注的焦点主要集中在:“cout 是否会最后析构”。有些网友质疑我所提到的有关 VC6 的行为;有网友引用了《TCPPPL》上的相关章节(21.5.2)来说明“cout 会最先构造、最后析构”。既然大伙儿对标准流类库的构造和析构挺有兴趣,咱们今天就针对这个话题补充说明一下。

C++ 对象是怎么死的?为什么要写这个系列?

  要说 C++ 对象是怎么死的,得先从 C++ 的析构函数说起。这玩意儿是我本人很喜欢的一个语言特性(可惜有好几个语言没有类似的玩意儿,具体就不点名了,免得引发口水战)。我们可以利用 C++ 的构造和析构函数,来实现 Guard 模式,写出比较清晰、简练和异常安全的代码。由于 Guard 模式在 C++ 程序中运用挺多,所以保证【所有对象被析构】就是一个很重要很严肃的问题。

2009年2月25日

C++ 对象是怎么死的?进程篇

  我承认这个帖子的名称有标题党的嫌疑,但是暂时想不出更好的名称了,只好先这样了 :-(
  由于前天的帖子聊了架构设计的多进程问题,所以今天想起来要聊一下与“C++进程终止”相关的那些事。与前几个 C++ 帖子的风格类似,今天聊的内容,尽量局限于标准 C++ 范畴,尽量不涉及特定的操作系统平台。

2009年2月24日

如何成为优秀开发人员[7]:正确地做事(善用自动化)

  上一个帖子聊了“善用工具”的话题,讲的都是如何有效利用工具来提高效率,今天说一下如何利用“自动化”来提高效率。

2009年2月22日

架构设计:进程还是线程?是一个问题!

  就像莎士比亚的“To be, or not to be, that is the question”始终困扰着哈姆雷特,对于“进程还是线程?”这个问题,也经常困扰着那些进行软件架构设计的家伙。所以今天打算聊一下我对这个问题的体会。假如你还搞不清楚线程和进程的区别,请先找本操作系统原理的书好好拜读一下,再回来看帖。
由于这个问题很容易引发口水战,事先声明如下:多进程和多线程,无法一概而论地说谁比谁好。因此本帖主要描述特定场景(与我所负责的产品相关)下,进程和线程的权衡经验,仅供大伙儿参考。

2009年2月19日

软件工程进阶之每日构建[3]:流程

  在上一个帖子已经介绍了几方面的准备工作,今天来说一下具体流程。对于流程的每一个环节,俺会强调一下容易出问题的地方。

学习技术的三部曲:WHAT、HOW、WHY

  最近几天有些网友在邮件里面问我关于学习的问题。有好几个人觉得工作了几年,也学会了不少的类库、框架、甚至语言,但是感觉自己的能力没有太大的提高。因此今天来说一下我个人对这方面的体会,希望对大伙儿(尤其是新手)有帮助。
  先声明一下,本帖子讨论的三部曲是指你已经选定了某个技术方向之后,该如何学习;至于如何选定技术方向,则属于另一个话题,不在今天的讨论之列。
  我把学习归类为三个步骤:What、How、Why。经过我对周围同事和朋友的观察,大部分感觉自己技术没有提高的人,都仅仅停留在 WHAT 阶段。下面我把这三个步骤解释一下。

2009年2月17日

软件工程进阶之每日构建[2]:准备工作

  上一个帖子务虚了一下每日构建的几个主要好处。今天开始来说点实在的:也就是每日构建具体要如何开始搞,要做哪些准备工作(如果你所在的团队已经在用每日构建,你可以跳过这个帖子)。

2009年2月16日

软件工程进阶之每日构建[1]:好处和优点

  上一个帖子《软件工程进阶之每日构建[0]:概述》提到说每日构建是一种很牛X的软件工程手段。本帖子就来说说它到底有多牛X。为了加深大伙儿的印象,俺先来说一些陈年往事。

软件工程进阶之每日构建[0]:概述

  在昨天的帖子《正确地做事(善用工具)》里提到了代码提交频度的问题。当时俺特别强调了【要保证提交的代码能编译通过】,理由是“对于每日构建很重要”。估计列位看官中,不太熟悉【每日构建】的,大有人在;而且国内停留在手工作坊阶段的软件公司,为数也不少。因此今天咱们就来说一下“每日构建”这个话题。假如你平时已经很善于运用“每日构建”这一有效的手段,可以直接略过本系列,去看其它帖子。

2009年2月15日

如何成为优秀开发人员[6]:正确地做事(善用工具)

  俗话说“工欲善其事,必先利其器”,今天我们来说说和开发工具有关的话题。由于开发过程中会用到的工具多种多样,根据“二八原理”,我只挑选和开发最密切相关的少数几种工具来聊一聊。

如何成为优秀开发人员[5]:正确地做事(概述)

  从上一个帖子“做正确的事”写完到现在已经过去2周了,有网友已经等不及,在评论中催我了。在此向等待本系列的网友致歉。
  和“做正确的事”相对应,“正确地做事”主要讨论的是有关工作【效率】和工作【质量】的关系(也就是如何“多、快、好、省”地完成工作)。由于"正确地做事"这个话题比较大,涉及到几个不同方面的【方法论】,考虑了很久,感觉一个帖子难以全部写完(俺不喜欢写长篇大论的帖子)。最后决定搞个【子系列】,针对每个方面写一个帖子。

2009年2月13日

如何选择开源项目?

  近几年开源项目越发普及,很多商业软件都逐渐引入开源项目。由于俺负责的产品线采用了不少开源项目(主要是 C++、Java、Python),这几年就经常会碰到开源项目选型的问题(从几个具有类似功能的开源软件项目中进行抉择)。今天我就大概聊一下自己的几点看法,供大伙儿参考。

2009年2月12日

Java 新手的通病[4]:异常处理使用不当

  上一个帖子讨论了“编程习惯的问题”,今天来聊聊关于异常处理的话题。

2009年2月10日

无处不在的二八原理[1]:在软件开发中的应用

  上次聊了《什么是二八原理》,接下来得说说如何运用了。由于本博客主要谈 IT 技术,显然要先来说说和程序员有关的那些事。为了不至于太抽象,咱们以“开发文本编辑器”为例(这玩意大伙儿都熟悉,省得费口水解释),来说说不同职责的开发人员在开发过程中该如何具体运用二八原理。

2009年2月9日

无处不在的二八原理[0]:什么是二八原理

  估计看俺博客的人里面,应该有很多人听说过二八原理(如果你之前从来没听说过,那你的知识面有太窄的嫌疑)。但是知道二八原理的人有很多却不会(或者不善于)运用。直接的后果就是你在各种事情上付出了很多时间与精力,但是回报却很少。鉴于该原理非常非常的实用,俺打算专门写一个系列来聊聊和它相关的话题。

2009年2月7日

C++ 的可移植性和跨平台开发[5]:操作系统

  上一个帖子提到了“硬件体系”相关的话题,今天来说说和操作系统相关的话题。

2009年2月5日

三种主流 RIA 技术之争,你该如何选型?

  前几天听说 Adobe 发布了用于 Flash Player 的 RTMP(实时消息协议),在“这里”。乍一看,好像是一个不错的东东。号称有如下优点:支持高性能地把数据(主要是音频、视频)PUSH 给 Flash Player;支持 over HTTP 和 HTTPS。再联想到最近1-2年,微软在 Silverlight(详细介绍看“这里”)上也是频频出击。而 Sun 也不甘寂寞,搞出了一个 JavaFX(2个月前刚发布,详细介绍见“这里”)。看来RIA领域的竞争有白热化的趋势。干脆今天就来八卦一下这三个技术。

2009年2月4日

Java 新手的通病[3]:缺少良好的编程习惯

  上次聊了“缺乏面向对象基本功”,今天来说说编程习惯的问题。今天说的这些坏习惯大部分都是跨语言的(C++、Python 新手也有),而且大部分都需要靠平时不断地努力才能慢慢改掉。

2009年2月2日

学会透过现象看本质,即使现象有时候挺诡异

  最近看到一个【汽车对冰淇淋过敏】的小故事(原文在此),转述如下:
  某汽车公司收到投诉信,用户抱怨了一个匪夷所思的经历:
  他每晚都从家里开车去商店买冰淇淋。如果买的是香草冰淇淋,则回家时汽车就无法发动;如果买其它口味的冰淇淋,则汽车可以正常发动。天天如此。该用户怀疑这款汽车是否对香草冰淇淋过敏。

2009年2月1日

从 Google 搜索的严重 bug 想开去

  昨天晚上用 Google 查资料,看到所有的搜索结果都注明是恶意站点。第一反应以为自己眼花了;然后开始怀疑我的浏览器出问题,换了几个浏览器都是老样子;后来又想,会不会是我的 ISP 在搞鬼。等了十多分钟没解决,只好换百度查资料...

2009年1月31日

C++ 的可移植性和跨平台开发[4]:硬件体系

  这次聊的话题主要是和硬件体系有关的。比如你的程序需要支持不同类型的 CPU(x86、SPARC、PowerPC),或者是同种类型不同字长的 CPU(比如 x86、amd64),这时候你就需要关心一下硬件体系的问题。

2009年1月30日

Java 新手的通病[2]:缺乏面向对象的基本功

  按理说 Java 是一个很 OO 的语言,Java 社区也一向是充满了“对象”的氛围。但俺在面试 Java 程序员时,却屡屡碰到令人大跌眼镜的事情。俺碰到不止一个求职者,连什么是“多态”都讲不清楚。很多人号称用过设计模式,但一半以上都仅限于单键模式和抽象工厂模式。当我深入问他/她抽象工厂模式到底有什么好处时,很多人语焉不详。

C++ 的可移植性和跨平台开发[3]:异常处理

  上一个帖子“语法”由于篇幅有限,没来得及聊异常,现在把和异常相关的部分单独拿出来说一下。

2009年1月29日

Java 新手的通病[1]:对算法和数据结构不熟悉

  为什么我先拿“数据结构和算法”说事捏?这玩意是写程序最最基本的东东。不管你使用 Java 还是其它的什么语言,都离不开它。而且这玩意是跨语言的,学好之后不管在哪门语言中都能用得上。

Java 新手的通病[0]:概述

  其实很早以前就想写这样一个文章,可惜当时俺还没有开 Blog,所以到现在才写下来。最近几年,随着 Java 在 Web 应用和企业应用两个方面的普及,对 Java 程序员的需求量大增。因此Java程序员的数量也突然猛增(从TIOBE 的排行榜可以看出来)。这虽然对 Java 社区来说是好事,但也暴露出一些问题。一方面由于大量的开发人员进入 Java 这个领域,相应的教学、培训跟不上;另一方面,很多进入 Java 领域的开发人员都比较浮躁,寄希望于"速成",没有耐心练好基本功。

2009年1月28日

C++ 的可移植性和跨平台开发[2]:语法

  目前还有相当一部分开发人员在使用老式编译器干活,这些老式编译器可能对C++98支持不够。因此,当你的代码移植到这些老式的编译器上时,可能会碰到一些稀奇古怪的问题(包括编译出错和运行时错误)。下面这些注意事项有助于你绕过这些问题。
强调一下,后面提到的好几个条款都是通过回避C++的新语法来保证移植性。如果你用的是新式编译器,那么你可以不理会这些条款。

2009年1月27日

如何成为优秀开发人员[4]:做正确的事

  一般来说,优秀的开发人员往往具有较高的效率。俺这里提到的【效率】包括两方面:“做正确的事”和“正确地做事”。并且“做正确的事”比“正确地做事”更加重要。

2009年1月26日

C++ 的可移植性和跨平台开发[1]:编译器

  在跨平台的开发过程中,很多问题都和编译器有关。因此我们先来聊聊编译器相关的问题。

C++ 的可移植性和跨平台开发[0]:概述

  今天聊聊 C++ 的可移植性问题。如果你平时使用 C++ 进行开发,并且你对 C++ 的可移植性问题不是非常清楚,那么建议你看看这个系列。即使你目前没有跨平台开发的需要,了解可移植性方面的知识对你还是很有帮助的。

2009年1月24日

从 Twitter 的突发新闻报道看草根记者的崛起

  在几天前的“纽约客机哈德森河成功迫降”事件中,Twitter 又一次拔得头筹(为什么说“又”捏?因为之前的孟买恐怖袭击,Twitter 已经抢先传统媒体了)。在率先到达出事地点的救生艇上,贾尼斯·克鲁姆斯同学(Janis Krums)用自己的 iPhone 手机拍摄了照片并上传到 Twitter,成为了飞机迫降后的首张现场照片。

2009年1月23日

白领如何应对经济危机,度过寒冬

  今天看到新闻说“微软公司宣布裁员5000人”。不由得感慨:连最牛的(微软手头现金最多)公司都不得不裁员了。去年(2008)爆发次贷危机,几大金融机构在去年(2008)9月倒台,距今也不过才4个月,金融危机已经波及到每一个行业(当然也包括 IT 业)——不禁让人想起“1929~1933”的那次萧条(那次号称是史上最强的)。面对这种情况,大伙该咋办捏?

2009年1月22日

书评:《C++ 101编程规范》

  今天是头一次聊 C++ 的书,当然要选一本够分量又实用的书。俺想了一炷香的功夫,决定先拿《C++ Coding Standards: 101 Rules, Guidelines, and Best Practices 》开刀。

如何成为优秀开发人员[3]:设定个人发展目标和计划

  大部分人从来没有【明确】地设定自己的发展目标,每天都是得过且过。等到几年过去了,才发现自己这些年啥也没学会,还是老样子,然后就感叹时光飞逝、岁月如梭。
  因此,今天我们来聊一下如何设定个人发展目标。(如果你平时已经很善于定期设定个人发展目标并执行得很好,恭喜你,那么本帖子你可以略过)

2009年1月21日

如何选择 IT 技术书籍

  俺在《如何成为优秀开发人员[2]:关于自学能力》中提到阅读【好的】IT 技术书籍的重要性。今天来聊一下技术书籍的鉴定方法。假设你刚下了某本电子书准备看,又或者逛书店看到某本纸版书准备买,但是吃不准该书的质量如何,那么下面几个招数可以帮你的忙。

2009年1月19日

如何成为优秀开发人员[2]:关于自学能力

  通过本系列上一篇帖子,你应该已经搞清楚自己是否【确实】有兴趣从事软件开发工作。现在我们来聊一下开发人员的自学能力(终于开始介绍实质性的东东了)。

2009年1月18日

如何成为优秀开发人员[1]:关于兴趣

  上一篇帖子已经给出了“优秀开发人员”的定义,那么现在我来说说成为优秀开发人员的头一个重要因素:兴趣
  因为物理学超级大牛爱因斯坦曾说过:兴趣是最好的老师。俺对此深以为然。所以咱们先从兴趣这个话题聊起。

2009年1月17日

如何成为优秀开发人员[0]:怎样算是优秀的?

★引子


  有感于国内软件开发人员的素质普遍低下,招聘程序员往往面试了N个人都看不到一个顺眼的(当然这里面有很大原因是教育体制的问题)。因此考虑写一个系列,聊一下“如何成为优秀的开发人员”这个话题。

2009年1月15日

博客开张及本博客内容简介

很久以前就想开一个博客,可惜一直忙于工作中,不能如愿。
拜2008年的全球金融危机所赐,我不再像以前那么忙碌,终于能够抽时间把以前的一些经验和平时的一些心得体会写下来。
希望这个博客能够让读者有所收获。

初步考虑写如下一些方面的内容:
★对于开发人员的个人发展和成长的体会
主要介绍一些方法论相关的东东(比如:学习方法、思维方式、做事习惯等),毕竟“授人以鱼不如授人以渔”。
★关于 C++、Java、Python 语言
主要介绍和编程语言相关的开发经验。会比较侧重于开发跨平台,高性能、可扩展性方面的话题。
★关于软件工程
主要介绍软件工程相关的知识、项目管理的经验、复杂系统的架构设计等。
★关于管理
主要介绍企业管理相关的经验和职场心得。

如果有空,我也会顺便八卦一下 IT 业界的新动态。


俺博客上,和本文相关的帖子(需翻墙)
开博11周年庆,博文分类汇总
开博十周年大事记
开博十周年庆,博文分类汇总
开博九周年庆,博文分类汇总
开博八周年庆,博文分类汇总
开博七周年庆,博文分类汇总
开博六周年庆,博文分类汇总
开博五周年总结,博文分类汇总
开博四周年总结,博文分类汇总
开博三周年总结,博文分类汇总
开博周年庆,顺便总结一下