我所经历的盛大创新院
这篇是作者对盛大创新院一段职业生涯的回顾与反思。他从一个对盛大了解甚少的工程师视角切入,描述了创新院初创期(2010年前后)的独特氛围:独立的办公空间、平等的技术文化、温和的项目孵化机制,以及以院长“老郭”为代表的细致管理。文中生动刻画了“梁山好汉”般的团队群像和像“锦书”电子阅读器这样刻骨铭心的项目冲刺。 作者的核心观点在于,创新院初期的成功源于其“孵化”定位和宽松环境,但后期在规模扩张和集团战略介入后,逐渐转向“主导创新”,带来了更严格的项目管理和组织架构分化。他观察到,当创新背负明确短期压力时,其独立性与活力便难以维持。通过对比“万能钥匙”等小团队自发项目与后期各分院任务型项目的不同境遇,作者提出了对“创新”本质的思考:真正的创新常源自小团队的自主驱动,而非机构的规模化生产。 这段经历让作者深刻体会到时机、市场“范式升级”以及企业创新机制设计的复杂性。对于技术从业者而言,文章提供了一个观察大公司创新组织从孕育到演变的珍贵样本,也引发了关于如何在体制内保持创新活力的普遍性讨论。
无插件Vim编程技巧
这篇讲的是如何在不安装任何插件的前提下,充分利用 Vim 7.2 原生功能来提升编程效率。作者从解决“多文件管理与导航”这个日常痛点出发,详细分享了他的一系列实战技巧。 文章首先介绍了用 `:E` 命令直接浏览文件目录,并使用 `j/k` 键导航,告别在多个终端窗口间来回切换的低效方式。接着,深入讲解了“缓冲区”这一核心概念:通过 `:ls` 查看所有已打开文件,并用 `:buffer` 命令及其缩写在不同文件间快速跳转。 对于需要并排对比代码的场景,作者推荐了使用 `:He` 和 `:Ve` 命令进行分屏浏览目录的技巧,并配合 `Ctrl+W` 组合键在分屏间灵活切换。更进阶的玩法是,用 `:set scb` 命令能实现两个分屏窗口的同步滚动,非常适合代码对比。 除了分屏,文章还介绍了用 `:Te` 命令开启类似浏览器的标签页浏览,并使用 `gt` / `gT` 等快捷键在多个标签页之间切换。最后,作者分享了如何用 `:mksession` 命令保存当前的窗口布局和文件状态,以便下次用 `vim -S` 一键恢复工作环境。 整篇文章没有泛泛而谈,而是将每个功能点都落实到具体命令和操作界面,真正展示了 Vim 强大的内建能力。掌握这些原生技巧,能让你在不依赖插件的情况下,把 Vim 的多文件工作环境打理得更顺手。
等宽字体:程序员的字体
这篇文章汇集了程序员编码和阅读代码时的“利器”——等宽字体。由于字符宽度统一,这类字体能带来工整的视觉排布,有效减轻长时间阅读代码的疲劳感,甚至对强迫症患者也相当友好。 作者从实用性出发,一口气列举了二十款常见的等宽字体,并附上了直观的字符效果预览图。这些字体风格各异,从经典稳重的 Courier New、Consolas,到设计现代的 Source Code Pro、Inconsolata,再到颇具个性的像素字体 Telegrama,几乎涵盖了主流选择。文章最后还给出了作者的个人偏好,认为视觉效果出众的有 Courier New、DialogInput 等几款。 对于正在寻找或更换编程字体的开发者来说,这篇文章提供了一个清晰的起点和直接的视觉参考,末尾附上的字体资源包也相当实用。
memory prefetch浅析
作者在用VTune分析程序性能时,发现大数组的非连续访问成为了CPU热点。经过排查,主要原因是这类访问模式对CPU缓存(Cache)很不友好,导致了大量的缓存未命中,从而拖累了性能。 为了优化这个问题,作者引入了x86架构提供的`prefetch`系列指令。其核心思想是,在程序真正用到数据之前,提前将指定地址的内存数据预取到各级缓存中,从而“掩盖”掉后续访问时的内存延迟。 文中提供了一段详细的测试代码,通过控制内存访问模式(顺序或跳跃)和计算复杂度,量化对比了预取指令的效果。测试数据显示,在跳跃访问内存导致性能严重下降的情况下(例如从22秒涨到66秒),加入恰当的预取操作后,执行时间基本恢复到了顺序访问时的水平(约28秒)。这直观地证明了预取指令在特定场景下能有效隐藏内存访问开销。 文章最终总结出prefetch的适用边界:当程序同时存在可观的内存访问延迟和一定的计算开销时,预取能有效提升性能。但如果计算本身很轻量,或者数据本身已在缓存中(如顺序访问),单纯依靠预取来加速读内存的意义则不大。
mac安装svn
这篇文章分享了在 Mac 上安装和配置 Subversion 时典型的“踩坑”经历与最终的最优解。作者最初发现系统自带的 SVN 1.6 版本过低,于是手动升级到 1.8.8,却接连遇到了不支持 http 协议(需从 neon 切换到 serf 依赖)以及在 Zend Studio 中找不到 javahl 插件等问题。一番折腾后才发现,之前的手动升级操作其实多此一举。 文章最终推荐的“直路”方案,是利用 Homebrew 包管理器。通过几条关键命令——安装 Homebrew、更新、然后使用 `brew install --universal --java subversion`——就能一次性完成最新版 SVN 和 JavaHL 绑定的安装。随后,只需创建一个库文件的软链接,即可无缝集成到开发环境(如 Zend Studio)中。文中也附带了手动编译安装的完整步骤和常见报错的解决方法。 对于被 Mac 上 SVN 安装问题困扰的开发者来说,这篇文章提供了从错误路径到正确路径的完整对照。它清晰地指出,利用包管理工具自动化处理依赖和环境配置,是避免繁琐依赖调试(如 neon/serf、autoconf、xctoolchain)和版本冲突的高效途径。
建立学习型组织
这篇文章从技术管理者的一个常见困境出发:升任领导后,如何在忙于管理的同时不丢失技术根基?作者余晟通过自身CTO经验,指出核心在于将“个人学习”升级为“组织学习”。 文章提出,技术管理者需要通过宏观视野和关键决策保持技术水准,但这与日常团队管理存在天然矛盾。解法是打造一个“学习型组织”:通过招聘高潜质员工、将技术分享纳入KPI、组织跨团队难题攻关、鼓励前沿探索等一系列机制,在团队内营造开放、互助的学习文化。 如此一来,整个团队便成了管理者的“延伸大脑”。管理者无需单打独斗,只需引导方向并深度追问,就能持续获取技术洞察;团队成员则在此过程中拓宽视野、激发钻研精神。文章最终揭示了一个更深层的视角:卓越的团队本身就是管理者技术能力的最佳放大器,团队的学习力与管理者的技术领导力实为一体两面。
程序人生的四个象限和两条主线
作者从自己的创业经历和与程序员们的交流出发,发现大多数技术人员的职业路径其实存在共通的模式。文章借用《穷爸爸富爸爸》的四个象限框架,解读了程序员可能处的不同阶段:从风险最小的E象限(雇员),到追求自由与收益的S象限(自由职业/小企业主),再到以规模化为目标的B象限(创业或成为上市CTO),以及最终追求财务自由的I象限(投资者)。 但真正驱动前进的,是个人成长。作者重点剖析了两条核心成长主线:技术线和管理线。选择技术线,关键在于看准并长期投入一个有潜力的技术方向。作者以自身从PHP开发受益的经历为例,强调了观察技术潮流(如多屏时代对API和云存储的需求)以及投资新兴或细分市场(如早期学习iOS、或结合安全深耕PHP)的重要性。 而管理线则更像一场持续的升级游戏,title和阶段性成果至关重要。作者直言,在利用关系普遍的职场,必须主动为自己规划。通过有策略的跳槽(间隔2-3年)来争取更好的空间、资源和职级,是实现从工程师到CTO跃迁的常见路径。文章最后以身边同事的案例,点出了自我规划的现实必要性。
那些和钱有关的事
这篇讲的是作者从腾讯离职创业后,对“钱”与“时间、服务、投资和决策”关系的深刻复盘。他通过自己装机、砍价外包、选择投资人、激励团队等亲身经历,提炼出几个反常识却至关重要的观点。 文章首先点破了“时间就是金钱”的真切感——为自己工作后,才发现半天时间创造的价值远超100块装机费。接着通过美术外包质量翻车的例子,揭示出购买服务时一味压价的陷阱:好服务的价格直接决定投入度与质量。在寻找投资时,他强调“拿谁的钱”比“有没有钱”更重要,价值观契合与避免“站队”是关键考量。最终,他总结出创业最大的挑战是如何“正确地花钱”,并用两个案例佐证:一笔额外的派驻费用解决了协作瓶颈,而一个镌刻名字的iPad比现金奖金带来了更好的团队激励效果。 对于正在创业或面临资源决策的读者,这些用真金白银换来的教训,提供了关于成本、价值和团队动力的务实视角。
emacs改变人生
这是一篇典型的个人观点与经验分享类文章。作者从自己从vim转向Emacs的经历出发,坦承标题“改变人生”带有夸张成分,但通过深入学习的过程,他重新诠释了“装逼”的正面内涵:即一种持续钻研、不安于现状的“折腾”精神。 作者详细描述了Emacs入门时面临的配置复杂、快捷键繁多等挑战,并以此引申出核心观点:在知识高度细分的现代社会,精深比泛学更重要。他认为,Emacs所代表的“折腾”过程——不断挖掘疑问、动手解决问题、打造个性化工作流——正是培养这种专精能力的体现。这种精神能带来持续的新鲜感,避免固步自封。 文章进一步将这种个人技能的学习,与理解世界运行的法则联系起来。作者以科技企业家多为程序员出身为例,指出通过编程(如同配置Emacs)制定规则的过程,也是构建个人认知系统、理解万物法则的方式。最终,文章以呼吁“不要放弃挣扎”收尾,将技术学习提升到了人生态度的层面。
程序员的“横向发展”
这篇讲的是程序员除了深度与广度之外常被忽视的第三维度——“横向发展”。作者以亲身经历切入:初入职场时,他以为程序算出正确结果就完成了任务,却被项目经理批评未处理网络异常等现实问题。这让他意识到,学校里学的“技术化”编程与生产环境所需的“工业化”要求之间存在巨大鸿沟。 横向发展的核心,是让程序真正健壮可用。它不追求算法更快或语言更多,而是关注异常处理、持续监控、状态记录和故障可诊断性。作者观察到,许多程序员却讨厌这类工作,认为这是“找麻烦”,导致线上程序如同“豆芽菜”般脆弱——不记录运行状态,出了问题无法快速定位,陷入重复排障的循环。 文章指出,与其一味钻研新工具,不如先补上这关键一课:给程序加上“重心”,让它在真实复杂的世界中稳定站立。
关于Python的闭包和后期绑定
这篇讲的是Python开发者常掉进去的一个坑:如何正确理解闭包与后期绑定。作者从“Python程序员的10个常见错误”中引出话题,通过汇总维基百科、《Java编程思想》等不同来源对闭包的定义,最终聚焦于一个核心点——闭包是一个包含了变量和其绑定环境的完整整体。 文章用一个经典的代码例子来阐明问题:用列表推导式生成一系列lambda函数,期望它们分别捕获不同的值,但实际调用时却都输出了最后的结果。这里的关键就在于Python的“后期绑定”特性——闭包中引用的变量,在函数被调用时才去环境中查找其值,而不是在定义时。因此,所有lambda函数捕获的都是同一个变量`i`,在循环结束后它的值是4。 理解这一点,能帮助我们避免这类因延迟求值导致的诡异bug。文章不满足于给出定义,而是通过具体代码剖析了概念在实践中的真实表现,对厘清闭包机制很有帮助。
程序员装逼神器-TPP
厌倦了传统的PPT演示?这篇文章介绍了一个在终端里就能做演示的神器——TPP。它本质上是一款基于文本的演示工具,让你用简洁的命令语法,在终端中创建并展示幻灯片。 文章详细介绍了如何通过一条 `sudo apt-get install tpp` 命令完成安装,并用具体例子展示了其输出效果。核心在于它独特的标记语言:你可以用 `-title` 定义标题,用 `-date today` 自动插入日期,甚至通过 `-beginoutput` 代码框直接展示代码片段。播放时,支持丰富的快捷键操作,如空格翻页、b键回退、l键刷新,交互体验流畅。 除了默认的ncurses交互模式,TPP还支持自动播放(autoplay)、导出为LaTeX或纯文本文件,非常适合在终端环境或远程SSH会话中快速进行技术分享。作者通过详尽的语法清单(包括动画进入、文本样式、布局对齐等),展示了它如何将枯燥的文本变成结构清晰的演示文稿。对于喜欢极客范儿、追求在命令行中完成一切的开发者来说,这无疑是个提升效率又兼顾风格的小工具。
函数式编程
这篇讲的是函数式编程(FP)的核心理念与实用技术。作者从函数式编程的“长相”切入,首先梳理了它区别于命令式编程的三大特性:默认不可变的数据、可作为变量传递的函数,以及需要语言支持的尾递归优化。接着,文章重点剖析了几项关键技术,比如用map和reduce替代传统循环来处理集合数据,不仅代码更简洁易读,也更贴近问题的描述本身。pipeline、柯里化(currying)和高阶函数等技术则展示了如何通过组合简单函数来构建复杂逻辑。 文章并未停留在抽象概念,而是通过大量Python和C++代码示例进行了对比演示。例如,通过一个简单的计数器函数,直观展示了“不依赖也不修改外部状态,而是返回新值”这一FP准则。在Map & Reduce部分,作者对比了过程式的for循环与函数式写法在清晰度上的差异,并借助filter、reduce等函数演示了如何更优雅地解决如计算平均值这类实际问题。这种“描述要干什么,而不是怎么干”的风格,正是函数式编程提升代码可维护性的关键。 总的来说,这篇文章系统地拆解了函数式编程的思维模型与工具箱,并通过具体的语言实例阐明了其在提升代码简洁性、可读性以及并行友好性方面的优势,为理解这一编程范式提供了清晰的路径。
对屌丝要抱有敬畏之心
这篇讲的是作者从亲身经历出发,对社会中努力奋斗的普通人应抱有敬畏之心的观点。文章通过两个故事展开:一个是去哪儿网在上市成为巨头前,其核心高管曾是一名在技术社区活跃的“屌丝”,却因追求被拒而错过缘分;另一个是作者目睹一位辛苦看守电瓶车停车场的收费员,凭借认真负责的态度,后来转型成为业绩出色的房产经纪人,收入远超作者。 作者借这两个“屌丝逆袭”的案例指出,在中国特别是互联网行业的大变迁时代,机遇无处不在。今天看似平凡甚至处于困境的人,明天就可能凭借努力创造出改变生活的产品,或获得更自由的人生选择。因此,他提出,无论你是正在奋斗中的普通人,还是已有所成者,都应对身边每一个认真、偏执的个体保持尊重与敬畏,因为他们蕴藏着不可小觑的潜力。
Perl 中信号量不能创建的问题解决方法
这篇讲的是作者在多进程 Perl 程序中遇到的一个棘手问题。为了通过 P、V 操作控制 UUID 生成的唯一性,程序使用了共享内存信号量。起初运行正常,但后来创建信号量对象时总是失败,调用 `setall` 方法会报出“未定义值”的错误。 排查过程颇具启发性。作者使用 `strace` 追踪系统调用,最终在错误信息中发现了关键线索:“No space left on device”。这并非指磁盘空间,而是暗示操作系统级的信号量资源已经耗尽。通过 `ipcs -s` 命令查看,果然存在大量已创建的信号量数组。 问题的根源是系统资源限制被触及,导致新的信号量无法分配。解决方案也很直接:清理掉那些不再使用却占用资源的旧信号量。文章给出了一个非常实用的组合命令,可以一键列出并生成删除指令,快速恢复环境。 这种因资源耗尽导致的“奇怪”故障在系统编程中并不少见,作者从现象到根源的排查路径,以及使用 `strace` 和 `ipcs` 进行诊断的方法,值得参考。
职业素养:如何管理好你的上级
这篇讲的是,不少职场人习惯“向上管理”是领导的事,作者从一次与领导的谈话出发,反思了主动“管理上级”的重要性与方法。 文章认为,上下级是“代理商与厂家”的利益共同体,管理上级能直接提升工作效率与个人发展。针对常见的沟通猜疑、被动等待等问题,作者给出了几条很具体的建议。核心方法是“帮上级做决策”——不是简单汇报问题,而是带着分析、选项和明确的行动请求去沟通,让上级能像用“傻瓜相机”一样高效处理。同时要“尽量少打扰”,尊重上级的时间与情绪,避免让其感到意外。此外,把握上级的思维倾向(如控制型、人际型、行动型、概念型),用对方能接受的方式沟通,也能事半功倍。 文章还提醒,在产生分歧时应寻找共赢方案,避免“宁折不弯”。整体上,这并非教你操控上级,而是倡导建立基于信任与理解的协作关系,最终实现团队与个人的双赢。
校招经验——写给找工作的同学们
这篇文章里,一位招聘官分享了自己在北大、武大两场校招中,连续三天面试百余名同学后的直观观察。他指出,不少同学能力不错,却在一些关键环节“可惜”地折戟,问题往往出在准备与认知上。 作者将校招流程拆解为笔试、群面和一对一面试,并点出了每个环节的核心考察点。比如,笔试主观题的关键不是解题,而是先“定义问题”,认清出题人设的“局”;群面中,许多人执着于抢“主持”角色,却忽略了面试官在观察团队协作与人岗匹配,扮演好适合自己性格的贡献者同样重要。 尤其值得注意的是,他对比了京汉两地同学在知识面(如对团购业务理解深度)上的差异,并强调了环境不能成为借口,主动通过阅读拓宽见识是可行的。这些基于实战的细节建议,都指向一个核心:求职不仅是技巧比拼,更是对个人视野、应变能力和自我认知的一次综合检验。
关于限制性股票和期权的一点个人看法
作者从非专业人士的视角,分享了对限制性股票(RSU)和期权这两种常见激励方式的个人观察。 他首先澄清了一个关键误解:RSU和期权并非公司“白送”的礼物,本质上是员工用部分现金薪酬换来的。文中用两个Offer选项做对比,清晰展示了薪酬包中现金与股票之间的权衡关系。 核心观点深入分析了两者的差异。RSU相当于行权价为零的期权,但其流动性受限,价值会打折扣。期权则具有“杠杆效应”,作者通过一个B司的数字案例生动说明:当股价上涨时,期权收益可能被成倍放大,反之下跌风险也同步扩大。他指出,期权本质是公司与员工共担风险的风险对冲工具。 最后,文章也提及了RSU与期权在税率上的关键区别,并建议读者通过假设可自由交易来思考其真实价值。作者的结论很实在:理解这些工具的金融本质,有助于在谈Offer时做出更明智的判断。
也说 Mac 的不好
从Windows阵营转投Mac后,作者经过三个多月的深度使用,坦诚分享了一系列“水土不服”的痛点。文章并非泛泛而谈,而是直击几个核心的体验落差与技术细节。 字体渲染是首要槽点。作者指出,在非Retina的外接显示器上,Mac的字体渲染效果远不如Windows下的微软雅黑清晰,显得“糊”。这背后是苹果尊重字形原始结构的技术路线,与微软为液晶屏优化的渲染策略的根本差异,而前者在普通分辨率下优势尽失。 此外,MacBook Pro键盘缺少PageUp/Down、Home/End等物理按键带来的效率损失,以及外接键盘后Home/End键“移动到文稿首尾”而非“移动到行首行尾”的默认逻辑,都与PC用户的习惯严重冲突。作者不仅提出了用Fn组合键过渡,还提供了通过编辑`DefaultKeyBinding.dict`文件进行系统级键映射的进阶方案。 对于F11/F12等被系统默认功能占用的全局快捷键,作者提醒需要手动到“系统偏好设置-键盘-快捷键”里逐一排查和重新分配。整篇文章像一份来自前线的实战报告,把那些看似“奇葩”的问题掰开揉碎,给出了可操作的解决思路。对准备或刚刚入手Mac的用户来说,这份基于真实踩坑经验的总结,能帮助他们更平滑地跨越系统切换的初期障碍。
如何编程实现 2 + 2 = 5?
这篇文章揭秘了一个看起来违反直觉的Java编程技巧:如何通过操作底层缓存,让2 + 2真的等于5。 作者从一个有趣的编程挑战出发,深入剖析了Java语言中一个不那么为人熟知的特性——整型实例池。我们都知道,Java会缓存-128到127之间的Integer对象,以优化性能。但文章的关键在于,它不仅介绍了这个概念,更展示了如何通过反射机制“入侵”这个缓存。 核心实现是通过反射获取`Integer`类内部的缓存数组,并直接修改数组中本应指向数字4(索引132)的引用,让它指向数字5的实例对象。这样,当程序后续再请求整数值4时,JVM会从被篡改的缓存中返回一个值为5的对象,从而使得简单的`2 + 2`输出变成了5。 这种操作虽然危险,但非常直观地揭示了Java对象引用机制和缓存设计的底层细节。文章提供的代码示例清晰地演示了这一过程,既是一个有趣的技术彩蛋,也提醒了开发者随意修改核心类内部状态可能带来的风险。