恐惧症
Jul 31, 2013 One minute

显然,前台MM说错了,我没有交流恐惧症。我有社交恐惧症。也许爱迪生有交流恐惧症。

致自己的30年
Apr 24, 2013 One minute

30岁来得似乎比20岁要突然一些,回想一下,大概是因为有了闺女以后,每天都比之前更忙忙碌碌的缘故吧。 当然可能也因为最近工作上的事儿比较忙活。破事儿,实际上真不值当的,逐渐开始这么觉得,子曰:兵熊熊一个,将熊熊一窝。最近特喜欢这句圡俗到家的话,两个“熊”字连着,特别有“独乐乐与人乐乐孰乐”的感觉。 人生不知道有多少个30年,尤其我们这代把元素周期表都吃过来了的,反正我是真的不知道还能不能活到光荣地晚退休若干年的时候,以至被年轻人指着鼻子骂“老而不死是为贼”,也许那时候看个库房大门都算是份工作是个着落了。 这30年也许放在任何一个尺度上看都是微不足道的,甚至对我自己也是稀松平常,不过回忆起来还算有些品质是拿得出手的,这里在自己的blog上得意一下也不为过吧。 首先,很少欺骗。不能也不敢说从来没欺骗过,从小分数考烂了然后欺瞒父母模仿个签名的事情也干过,不过还好,不算太多次,以过得比较浑噩的小学4和5年级以及初中3年为主,其他时候没什么可骗的;大学里虽然挂科无数,为母校贡献了不少重修费,不过至少可以腆着脸说没有像某些同学一样作个弊就过去了吧,嗯,忘了有些过于无聊的比如马政经之类的考试里有没有作弊了。其实凭我这30岁还5.0以上的视力来说,瞄个别人的答案不算什么难事,更别说当时还流行组团考试,各司其职,不过我就是有些坏毛病,比如说瞄着个别人的答案然后自己纠结了半天“他为啥会这么答呢是我没理解题目还是学的有问题啊”,然后觉得效果不是很好,还是别作弊耽误事情了。本科阶段虽然很多科目都重修到了上限,但是整体学得都堪比高中时期一样认真,以至于到现在还记得不少,也算是个不错的下场吧。工作之后就更没什么科欺骗的了,这也是程序员这个职业最好的特性之一吧,什么都是透明的,对的就是对的,错的就是错的,没有不能解释的现象,有的只是不够深入不够理解,平时的工作也有版本管理系统来忠实地记录下来,别想以任何方式抵赖。不过最近发现不欺骗的话其实在社会上还是有些危险的,不是对所有人都可以如实地说出一切,尤其是和自己还有家庭相关的事情,但是一旦扯了不必要的谎对方又还算正直的话,势必又是很难让对方接受,以至于妨碍到合作什么的,所以对陌生人到底是隐瞒还是扯谎还真的是不简单的事情。 其次,没有拜金。近几年曾经有段时间过于看重钱财,以至于每天自寻烦恼地想为自己的无法在日常工作中表现出来的剩余能力找方法变现,而后也恰恰因为持续的烦恼而自省,察觉到自己这些琐碎烦恼的发轫,知道自己应该悬崖勒马。到现在看来情况改善了很多,虽然有些时候做事之前还是要考虑下经济性,不过应该也不失为在有限的生命里为自己和家人谋求更多的衷情吧,这方面人人都类似,不说做法如何,只有安排好家小移民事宜然后自己留守做裸官的,没有散尽家财断绝妻儿后路的。其实无论是遇到贵人也好,运气不错也罢,回想正式毕业开始工作的那几年里,工资大幅上涨的时期,都是在我完全没有沉迷在钱财的时候,那时候想买房想结婚,不能说不着急攒钱,但是父母和女友都没有给我压力,我也得以聚精会神专心提升自己的价值,好在栖身于东家这一跨国公司也好,乡企也罢,官僚风气虽有,论功行赏倒还是普世价值,那个很大的涨幅在被我那被知情人称为贵人的经理提出之后,总部的几位打过交道的老员工在被征求意见时也是比较肯定,所以才得以最终落实。相较之下,某个同期跳槽的交道很浅的同事,因为和公司人力资源部门员工的关系很熟络,知道了我涨薪之后的工资,兴许觉得自己是被严重低估了,所以跳槽时向新东家也是开口要了一样的数目,当时自己还是很愤懑,现在想想,那也就又是一个对自己绝望的老家伙而已,希望我以后不要变得这么绝望,只有依靠和自己能力无关的因素为自己待价而沽。 第三,持续学习。说到这个一定有人会说,嘛,你是死程啊,不学习只能等着饿死的吧。实际上不要脸地说,我就是吃软饭也不会饿死,只能是更多活几年…是啊,可能世界上很难再找出其他一些工作像程序员一样要活到老学到老老,这在一些价值观比较类似的地域里的人们看来是很悲剧很痛苦的事情,我相信这些地域包括绝大部分中国和绝大部分非洲,以及欧洲的猪四国,在这里好吃好喝吹海风晒太阳享受人生才是正事,和工作相关的事情里只有罢工是重要的,但是也正是因为需要要不停地学习,程序员这行才能很少出现为了守护位置和既得利益的阴险小人。一个年长的程序员,只要他积累的不是经历而是有效的经验的话,在这行里是更受后来人尊敬的,这其实是为每一个有追求的程序员提供了活的励志片,让他们明白这不是劳力者治于人的烧砖一样的行业;同样因为需要持续学习,这行也更少会出现蔑视专业人士的问题。蔑视专业人士的问题是国内很多问题的原因之一,有的时候一定的蔑视是激发自己了解相关领域的重要动力,不过也仅限入门而已,不是所有混的还不错的专业人士都是砖家的。现在整个社会里各行各业互相骗来骗去的现状不知道与过分蔑视专业人士是不是有关,至少从我的角度和经历来说,这是个相当严重的社会问题。 其他适合这篇马上要被写成流年汇报的blog的内容的话,还有些经验教训吧,写在这里如果能帮到别人也算功德,当然我更相信除了一些看起来就是正确的废话的大道理以外,还是见仁见智的时候更多,所以写在这里用来提醒我自己的用处应该更大一些。 凡事都不能急于下结论,即使某个时间点上可以得出结论,也一定要提醒自己这只不过是个阶段性的结论,如此而已。 推论一:就事论事,多收集论据,少归纳论点;看似正确的废话的大道理们有时是很有用的,因为它们至少是正确的。看过无数人因为别人或媒体的简单介绍就抱上了不切实际的幻想,等到幻想破灭了就迁怒于别人,其实这个过程中别人的描述最终还是通过你自身起的作用,不管是你对现有事物的不满也好,因为自己的无知也罢,最终都是你自己不切实际地得出了肯定的结论;相反地,有另外一种做法是因为一些无端的优越感就去否定别人提供的描述、观点、论据,觉得别人说的大部分都是幼稚的错误的。一个很常见的例子就是对国外社会的态度,一些人会因为电影、电视、小说、照片等等就对国外社会和外国人心生好感,以至于要不择手段移民,过去了才发现没那么美好,好感都变成懊悔;另外一些人就会因为预置的否定态度对国外社会的优点视而不见,只注意不足。实际上别人的描述和观点都是独立于国外社会的,不一定准确的,需要的是我们自己从善如流就是了,善恶有时不外乎很多大道理。 推论二:不要给人贴标签。人是相当复杂的,无论一个人做了什么事,都只不过代表他在那一特定时间的作为,对一个人的评估和对任何事物的评估都一样,很难做对,很容易谬之千里。 相应地,被人贴了标签时,也绝不要发怒。人之间的互相观察是很有意思的,我总喜欢用“投影”这个说法描述这种观察,换句话说,别人给你贴的标签,充其量就是你在他的视野内的一个投影而已,彼此的视野重合得越多,标签就会越准确越会从总体上趋近于实际,但是即使亲密如夫妻、兄弟姐妹,也没有任何两个人的视野能重合到足够作为内省的程度,所以被贴了也别动怒,他人眼里的你,并不是你;另外,不是所有人都有耐心在观察你足够长的时间之后再贴个标签给你,实际上这需要的时间很可能长到在你与世长辞之后让标签作为多半个盖棺定论出现,所以才会有人从自己的主观出发去臆断你,自以为看透了你然后贴一堆标签给你,于是乎这种情况下,他人眼里的你,既是你,也是他自己。无论如何都没有什么动怒的必要,只会徒增烦恼。“愤青”也好,“屌丝”也罢,不管让人高兴的标签还是让人愤怒的标签,都不用放在心上,只当对方是太过无聊才要借此打发时间并暴露智商——这也是回赠给他们的标签。 不要在可以预知的情况下影响别人的正常行为。当然想100%确认自己做某件事肯定不会影响其他人的话基本是不可能的,所以只能做到这个程度了。 为了不要给别人添不必要的麻烦,就要做好自己的工作。工作总是要服务到其他人的,也许是直接客户,也许是公司里的其他人,或者是汇聚到一起服务到别人,所以自己的工作不做好的话不只是对不起工资的问题,而是增加了不少社会问题。例子应该就不用举了,参见某些公社、大寨、生产队等等。 人有很强的社交属性,所以如果你不幸属于天生社交能力就很弱的人,或者根本不在乎、不屑社交的人,就要做好四处被排斥的准备。不要看不起社交,也是颇费各种脑细胞、感情、时间以及金钱的事情,既然没在这上面下功夫,就不要奢望擅长这方面的人会很容易地就接纳你入他们的圈子。这例子就很多了,还有很多是看起来属于文化差异产生的排斥现象,究其原因也是不在乎对方的社交需要导致的,包括被排斥一方和主动排斥的另外一方,但凡双方都能容忍自己舒适区之外的多样性的话也不至于产生人和人之间的排斥。同理可以回答很多对国外抱有不切实际的幻想的同胞们在遭受白人排斥的时候的不解,西方是白人的世界,你不被白人接受是正常的,无法融入白人社区、碰到玻璃天花板都是正常的,要么是你不在乎白人的社交需求,要么是白人们不够容纳,要么二者兼有,更何况很多时候自身的“民族自尊心”根本不允许你迎合和改变,所以第一代移民几乎不可能融入当地的圈子,只有抱希望于第二代第三代等等,你自己再怎么着急也是无济于事。 虽然可以努力尝试,但是一个人几乎不可能掌握他觉得必需的所有技能。所以才要组队,和靠谱的人组队。 好了,必须决绝地结尾了,不然很可能越来越意识流到一直修改到60岁吧。就这样吧,30岁之前的事情。

所谓“新”技术
Feb 23, 2013 One minute

有些人不是对新技术持谨慎态度,而是根本一点都不想承担风险。 接到一个项目时想研究应用一下新技术,大概有这么几种情况吧: 很简单闭着眼都能解决的项目:“这么简单的项目我们还是先做出来再用新技术移植吧,要不然用了新技术闹的最后直接失败掉太没面子了”。其实最后神马移植不移植的都是作梦了,因为多半那时候对外已经说“做完了,看我们做的多快”,功都已经邀完了,上面谁还给你时间移植呢? 一般难度,新技术理论上可以帮助开发:“机会不错,但是一定要谨慎,不要为了应用新技术而应用”,完后各种方法论指导。不是说这样谨慎一些不对,而是说——可能这么说有些对人不对事了——怎么觉得有些时候什么理由只要对自己的说法有利就可以拿过来用呢?这个时候那些敏捷方法论都哪里去了?为什么到了应用新技术时就变成政府预算审批一样的流程了呢?是为了创造困难让程序员知难而退么?确实不是每个人都喜欢做文书工作的,我也是经历了太多了有时不得不为了团队里其他不喜欢做这个事儿的人考虑才揽自己身上的。当然这种时候就会发觉自己的HHKB Pro 2非常的爽… 困难,没新技术就只能堆人,有新技术才能四两拨千斤:还真没经历过… 无论哪种情况,有时这些能做决定的人似乎都是希望你可以牺牲一下你自己的业余时间,把应用了新技术的东西给他们直接搞出来放在眼前,并且有比较不错的完成度,他们心里才会舒坦一些,然后才大笔一挥,批准。我只想说,这样真是没有一点担当的表现,如果自程序员向上就只有这样的人的话,那还不如让程序员直接面对股东的好,给你们那么多工资是为了让你们天天很舒心、什么责任和风险都不用负担的么?

喜添一女
Sep 25, 2012 One minute

2012年9月25日,03:23,天津中心妇产科医院,女,3.8Kg,顺产,母女平安。 这是大闺女刚从产房里推出来,媳妇儿还要在产房里继续观察1个小时。 生产过程很顺利。其实已经41周了,但是因为上周周末时主管大夫才问要不要打催产针,周末他们又都不在值班,我就一咬牙做了个再等2天到周一的决定。之前也查了些资料,生产比预产期晚也不是什么好事,因为胎盘已经开始老化了,氧交换能力和供养能力都下降了,羊水也在开始减少,所以胎儿在里面越呆越有生命危险。不过我和老婆也合计了下,总是觉得预产期定得早了些,而且到预产期了孩子也确实没什么动静,才敢这么错后2天。 然后催产针好像打的有些问题…最后导致我老婆刚有感觉见红的时候,护士都快能看到孩子的头了…于是就急急忙忙推进产房…好在整个过程很顺利,之前的住院期间护士们一直又很尽心尽力地照顾,还被我媳妇儿顺利搞到间单间病房,这么个疑似事故的事情就不追究了,不过始终还是有点儿悬的。 好了,我也算当爹的人了。

I, Java [3]
May 6, 2012 One minute

我除了是个Java程序员,恰巧还是个外企员工,而这两个身份,不巧几乎是网上被骂得最凶的。一说到Java程序员,大家就都预置了一个什么都不知道只会串起API调用做MIS的人的形象;一说到外企员工,大家则觉得都是一群技术不怎么样、只有英语拿得出手又多半是个崇洋媚外的马屁精而且离开公司就只能饿死的螺丝钉员工。有些人简明扼要地概括这类人为:脑残。想必我这样的人在人家眼里只能是双料脑残。 Web的兴起,也促使很多人投身创业。不过自从创业的风吹到国内以来,很多创业的人们却都是,出师未捷,姿态倒是做得很足。懵懵懂懂只知道去创业,尚未可知是真心实意还是只想换个环境刺激一下,抑或只是妄图拉来VC痛宰,就忙不迭地给自己贴上勇者的标签,而其他的被企业雇佣的人们就都变成了圈养的羔羊一样安逸等死,温水里的青蛙一样不知死期,总之是劣等。 实际上大可不必落进给别人分类贴标签的俗套。很多时候去不去创业只是一念之差,完全没有需要沐浴更衣焚香静坐才能想明白,没说服得了自己,就继续做雇员领工资养家糊口,说服了自己,跨过了这道门槛,就是光鲜的创业者,当然有没有把创业想得过于简单而逐渐后悔的就另说。说到底只是生活的选择,创业有自己的难,作雇员一样也不容易,只不过选择了创业就自然没有了每天蒙混过关度日的可能,而作雇员的人群中总不乏有当一天和尚撞一天钟的人,这样的人去不去创业都是一个结果,任何有关创业者是否比非创业者更优秀的讨论都根本不应该把非创业者人群中的这些混吃等死人士列入范围,因为非创业者自己都讨厌这样不求上进的人,只是再没有另外一个分类可以把这些猪一样的“队友”扔将进去。

I, Java [2]
Apr 12, 2012 One minute

三十年河东三十年河西,无论什么新鲜事物都有变陈变旧的时候,而人们似乎对陈旧的事物有天生的厌恶感,也许正因此,这个社会在很多领域也是呈一种螺旋上升的态势:以往新鲜的事物渐渐变得陈旧,最后被遗忘在角落,人们开始接纳了另外一个看起来似乎更好的新鲜事物,然后这一新鲜事物也仍有变得陈旧的一天,很可能最终臃肿不堪,而取代它的另一新鲜事物,有时也可能自上一个被人们遗忘的事物那里有所传承。闪烁着新思想的事物最初问世的时候都是那么的精巧凝练,不带一丝芜杂,当人们开始采纳它的时候,大概是因为人的需求总是多种多样的,总是有更多的人开始向它附加各种各样为了满足自己需求的负累,也许仅仅是为了方便。当时间流逝,它不再像以前那么新颖的时候,大家看到的它是一副臃肿不堪的德行,我需要这部分,你需要那部分,但无论怎样似乎都永远有裁剪不掉的不需要的部分,没有人需要那硕大无朋的整体,好像有无穷多的无聊的东西被强加给自己。如果恰巧某个时候又有人发现了新的解决办法,看起来是那么的精炼,大家审视一番后通常又会欣喜地接受这个新的东西,开始新一轮的你添我加。不过好在聪明人总是有的,虽然思想上可能类似,但是后来者几乎总是更全面地超越了先辈。 单说设计模式,并非是种发明创造,而更多的是从工程方面总结出一些经典的有效的实践。如何有效地让程序开发工程化一直以来都是业界一个不小的问题,而一旦程序开发被当作(简单)工程化的过程,参与这个过程中的程序员都难免要面临泯灭个性而化身螺丝钉的不快,就好像我们从来都很反感自己被某些不长进的人力资源部门的同僚们抽象为“资源”。牛人们自然不屑于一辈子当个螺丝钉,计算机这行也不缺牛人以及自以为牛人的人们,所以软件开发工程化大多数时候是被憎恨的,至少在我们国家,十几年前,一边说印度的IT行业如何强大如何赚钱一边又蔑视阿三那些螺丝钉程序员的同胞们是不在少数的。 而Java其实也很类似。任何一个写过一段时间Java程序的人应该都有体会,这门语言几乎就是照顾脑残的一门语言,无论什么地方都是啰嗦得不行,什么东西都是显式声明出来写在那里的,除了些奇技淫巧以外,所有的东西自编译起就固定了,而所有的可以操作的类都是继承自同一个根源,没有多重继承,设计一个框架和类库时就可以少考虑一些类型系统可能带来的问题;而说到类,这门号称面向对象的编程语言,实则就是面向类嘛;又因为语言允许的灵活性很低,所以IDE就可以干很多很多事情,于是开发效率似乎还不错。找个有计算机操作基础的人来稍微培训培训就能来编码干活,再找些有经验的熟手设计一个框架和相应的开发规范和流程出来,菜鸟们在自家的框架、类库的圈子内很难搞出太不容易收拾的破坏,hmmmm,这样一个容易工程化推广的语言和平台,简直是老板们的梦想照进现实。 当然,任何不屑于做螺丝钉的牛人,任何觉得自己不脑残的自封牛人,任何屁股决定脑袋的站在某些特殊立场的人,都会讨厌这样的语言和平台。 开篇说到几个月之前我的惆怅和惭愧,其实也多半是因为受这些人的影响所致。 惆怅,因为我们平时打交道的事情距离真实的OS和机器来说,真是太远。除了无聊地调各种API,现成的也好,不现成的也罢,稍微“底层”一些的事情确实不常见,不过有虚拟机这个平台横亘始终,我们也会看java字节码、javap的反汇编代码,会用ASM库操着java的“汇编”在运行期修改掉一个个的java方法,也会在少数没有办法的情况下劳烦JNI做本地调用,甚至在后来出现了android平台的时候,去看dalvik opcode,可是这又能怎么样呢?就算出现了一种机器可以让java字节码直接运行在CPU上,仍然有内存、I/O、网络这方面的细节被虚拟机妥善地封装掉了;即使无数次操着tcpdump和wireshark排查网络问题,挂着各种*trace观察JVM行为调查问题, 好在现在也算想开了。

I, Java [1]
Apr 8, 2012 One minute

后来在大三暑假前机缘巧合被高中同学海子推荐去了北京实习,在一家国资背景的通信公司的子公司里做一些SP的行当。那个公司比一般的SP要强不少,要外包一些活计给稍微弱一些的SP和CP(内容提供商)。当时那家公司要做一个CMS系统给下游的这些SP和CP用,都是些输入短信息之类的破事儿,我过去实习就是做这个CMS,80%的时间里是自己一个人做,这才算开始用Java做一个稍微正式一些的程序。负责带我的组长给我介绍了Velocity,而不是扔给我那个当时看起来牛B得让我很担心自己学不会的Struts,让我有了一个还算不错的开始,可以接触一个设计得不错又比较轻量的东西,所以没有被现实世界中的Java开发一下子吓倒。 对于那个时候的我来说,那个CMS我做得还算凑合。当时也不知道什么单元测试,好在运行起来基本没有什么问题。不过整体来说,几乎没有太多设计方面的考虑,也不太懂得Java的接口要怎么用才好,于是抽象也都是基于Java抽象类做的,当然也无意中悟出了模板方法这个东西,直到N年以后才知道这也算是个模式。 虽然80%的时间里都是我自己在做,但是组长会时不时地看一遍我的代码,指出里面一些设计方面不太合适合理的地方,告诉我如果继续这么做的话,过几天你就会编码到很郁闷,不得不停下来大幅调整的。这是我第一次有意识地注意设计。从这个CMS开始,我了解到设计是很重要的,也不断看书看文章、读其他框架的源代码,不断对比自己那个很简陋的CMS的代码,一点点看到它的代码是多么的不方便扩展又暴露了那么多不必要的细节,这大概是我第一次被震撼了——事关设计。 其实实习之前还有个插曲。大概是大三的计算机网络课,老师布置了一个作业要做一个HTTP服务器用来传输静态文件。因为暑假里为了实现一个FTP客户端,我就已经自学了些Java的网络编程,所以这个HTTP服务器我也自然选用Java来做。用Java完成这么个小需求可以说太简单了,即使后来发觉没有多线程支持而自学了Java多线程并加入了这个功能,也没觉得特别困难,不过后来老师检查测试我们的作业的时候,也没考察多线程这块,所以都“奈何明月照沟渠”了。交完作业以后,我像以往一样得意洋洋地扫视自己的代码,忽然觉得似乎可以在这里这里做一层抽象,把HTTP I/O方面的逻辑提取出来,这样就可以用这个类处理静态文件,再用另外的类负责做PHP页面一样的动态输出了!就这样,我就动手开始整理现有的代码,开始向这个方向努力,做了个超简单的原型,也算麻雀虽小五脏俱全,还给这程序起了个J开头的名字——看,这就是个学了Java半年不到的大三小屁孩第一次意识到应该有个Servlet容器。后来这学年完事儿以后就去实习来着,也接触到J2EE的那些规范和Web/Servlet容器,才知道自己鸡血了半天做的东西早就有规范和N多臭遍街的实现了,可是看完人家再看看自己那设计… 唉,于是就把很久以来敝帚自珍的代码直接Shift+Del掉了。惋惜了不到5分钟。 因为当时还在上学,大三而已,所以平时还是会时不时地打开Visual Studio鼓捣些C++和C#。其实除了C++自身造成的boilerplate以外,我还算比较在意代码整洁和性能的,算法虽然不算当时所追求的第一要务,但是还是经常会注意的,再怎么说1秒能做好的事情拖个5秒也纯粹是有病;虽然用着128M SDRAM的机器,也还是可以看到内存会越来越不值钱的,所以空间换时间的小伎俩也是懂得的。当然可以说当时我在算法方面所有的追求都是属于一种很…可以说是纯朴的层次,能省则省,能优化就优化,即使是用Java时也一样,察觉到某些用起来很“舒服”的Java核心类库的调用可能带来很多额外开销的话,肯定会选择不那么折腾的做法,以及不滥用容器类之类的。除此以外,我知道用Java就会有虚拟机带来的额外开销,但是具体怎么优化呢?受当时能力所限,我一无所知。 大概直到近几年了吧,我才真的不忌讳说自己大学时留过级的这件事情。现在回想起来,也不是完全没有后悔当初的所作所为,如果当时“听话”,好好学习,没有逃那么多课去学那些自己感兴趣的“技术”,单凭着对计算机的兴趣,在校期间把基础夯实不是问题,即使老师讲得再少再没水平,上学期间的学习也不会比日后完全没有指导的自学更困难,更别提天大的老师不可能没水平,只是当初心思太活了,觉得他们讲的东西太圡了太没有时代感了。今天看来,实际上自己对底层和基础方面的知识、技术的兴趣一直强过对纯粹的应用方面的兴趣。学了C和C++,还是想看看各种vcrtXX.dll里是什么,glibc在整个系统里是什么地位,libstdc++怎么就显得没它那样“关键”?学了PHP做了个简单的留言板,还是想不通session和cookie有什么关系,X-Powered-By这个设置开不开区别大么?为什么用header()做跳转有时就“headers already sent”,但是meta refresh就没事?Java的虚拟机是怎么做GC的,类装载器干什么用的?异常桟这么神奇,一下子就知道是哪里出错了,是怎么做的?为什么有时又会看不到异常桟里的行号?——这些问题现在看起来都不算什么了,可是在当时那种情况下,对一个上大学前没接触过多少计算机教育的我来说,一边上着学校那些感觉完全和现实生活不搭界的课程,一边在脑袋里琢磨着这些问题,也算得上是往底层钻研了吧,无非是和一般的自底向上的经典路线相反,当年是因为兴趣而一路自顶向下钻研的,所以现在看来自己学到的东西多少都不是那么地系统和全面,而多是兴趣和视野驱动的,很实用主义。而现在,虽然用的语言和平台是Java,但是对底层和计算机基础方面的兴趣丝毫不减,在这方面如果遇到了些问题的话,相比之下要明显比关心公司的产品更让我兴奋得摩拳擦掌。 我想这应该不是偶然吧。作为一个还算说的过去的程序员,好奇心必不可少,了解事物运作方式的好奇心尤其重要,即使是作为平台的Java也完全不能禁锢这样的好奇心——从这个角度来说,Java并没有错。 我刚接触Java的时候,详细讲解Java底层方面的书籍和资料少之又少。当时我虽然明明白白知道世界上有Sun以外的很多组织实现了Java虚拟机,也知道这是因为Java虚拟机是有规范的,于是乎可以有很多种实现,但是常见常用的还是Sun家的,其他的如IBM和BEA的Java虚拟机基本是没办法接触到的,所以还是没什么选择,只能看Sun家的。核心类库的实现倒是可以参考src.

I, Java [0]
Apr 4, 2012 One minute

我是个Java程序员。 然而几个月之前,我一直在因为这个身份,或者说标签,感觉到那样沉重的惆怅和惭愧。 从第一次接触Java到现在,已经9年。 大学时,我一直认为C++才是我的归宿,而且也是如很多人一样,看不起Java、PHP、Python等等一切依赖于虚拟机、解释器的语言,觉得C++的复杂多变是锻炼程序员才能的手段,这门语言就是程序员的hard模式,必须足够优秀才能过这一关,过不了的全是业余票友,顶多做个ASP的级别的人。以《C++ Primer》第三版入门,Visual Studio .NET 2003是用的时间最久的IDE,自娱自乐了很久,收获也还不错。很多大学课程的作业都是可以用C或者C++做的,班上大部分人都选择用C,我还是那样沾沾自喜地用一大堆C++类搞定。如果当初看出某些端倪的话,也许现在的生活会大不相同吧,但是当时只是固执地认为,不懂C++这样复杂的语言的人只可能是不适合做程序员的人。 当然,并不是想说Java比C++简单很多。 其实接触Java是个很偶然的事情。记得似乎是大二期末后的暑假前夕,@远路高山 和班上几个对计算机应用方面比较感兴趣的人提议成立一个兴趣小组,大家也都赞同。这个小组的第一个课题就是找一门上学期间已经“学过”的C、C++以外的语言,自学一个暑假,大家下学期开学时交换学习心得。当时微软的.

LMAX
Jan 28, 2012 One minute

忘了是谁在微博上赞叹了一句LMAX,于是乎去看了看Martin Fowler老爷子的这篇“The LMAX Architecture ”。 看过以后实际上觉得也很坦然,不管是谁赞叹的LMAX,终归是一个做Java很久的人。为了找到这位的原话,我也特意又去微博搜了搜,看到了很多做Java的人在同样赞叹LMAX。实际上只要看看Martin的这文章就能明白,核心实际和Java关系不大,倒是吸收了web界一直以来的很多做法、算法和架构,最终用Java实现了一套而已。我几乎能看到Martin老爷子星星眼的样子… 当然老爷子自己也还是很有自知之明的,比如这句: Many programmers, and I confess I fall into this camp, don’t have much mechanical sympathy for how programming interacts with hardware.

说说“碰撞”
Jan 16, 2012 One minute

都是基于我自己的理解,有错误的话请不吝赐教。 Hash碰撞:参考 http://en.wikipedia.org/wiki/Collision_%28computer_science%29 ,只不过是说不同的数据凑巧有相同的hash值而已,这是数学上就已经有了定论的肯定会出现的问题,参见Pigeonhole principle 。 CSDN etc.密码门:事件中网络上大量充斥的“碰撞”——比如这篇里 http://www.enet.com.cn/article/2011/1228/A20111228952093.shtml (其实微博上更多,懒得搜了,省得好像针对谁一样),其实就是“撞大运”的撞,“撞衫”的撞,可是和“明文”、“加密”这种话题扯到一起,很容易让人觉得是和前面提到的hash碰撞有关,实际上远没有那么高科技啦,rainbow table随随便便就拿去破解百万级别用户的密码?呃,反正我很难想象,也说不好地下组织已经不难具备这个能力了,但说起来还是拖库加社工库要划算得多吧。这个实际上是很无聊的话题,不过也算是我写这篇很短的东西的起因,因为各方面的说辞都要把我搞晕了,虽然我有很入门很基础的网络安全修养,不过也不是专门搞安全和加密的,大家你也碰撞我也碰撞的,搞的我以为中国加密和密码学一下子已经超越美帝来着了。 更最近的影响范围很大的web服务器Hash碰撞攻击:参见Ars Technica的Huge portions of the Web vulnerable to hashing denial-of-service attack 。这个更直白(直白但没有_那么_简单),就是针对各种语言平台和应用服务器的常见实现,提交一些预先制造的很容易在特定条件(比如文中提到的随机化不太好)下发生(multi-)hash碰撞的数据,导致HTTP服务器的一些常见的hashtable的操作异常耗费计算资源——O(n**2)哦。 好了,其实真没什么可说的。

Built with Hugo · Using the heyo theme