IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

开发者

共 811 篇文章

IT 2013-08-12 13:34:04 / 累计浏览 4,246

做一个不喊爸不喊妈的程序员

作者从亲身经历的项目攻坚阶段出发,聊了聊程序员解决问题能力的几个层级。在无休止的加班、不合理的版本发布和各种“扯淡想法”的挤压下,他观察到面对BUG时,同事们的行为可以粗略分为四类:从最基础的“出现异常立刻汇报”,到“描述清晰文字”,再到“分析日志并推测”,直至最高阶的“尝试自己修复并验证”。他认为前两种本质上是在将问题转移给上级或同事,看似省力或“有益于项目”,实则会阻碍个人追踪能力与自信心的成长,并可能在团队中形成不良的依赖效应。 文章的核心观点并非强调技术细节,而是指向一种职业态度:倡导程序员在遇到问题时,首先应尽力独立分析与解决,而非习惯性“向上求助”。在当今强调工程效能与个人Owner意识的背景下,这种“不喊爸不喊妈”的独立解决问题的精神,或许是比单纯的技术积累更基础、也更关键的职业素养。

本机暂存
IT 2013-08-05 23:29:34 / 累计浏览 5,013

为什么优秀的程序员既懒又笨

这篇讲的是一个反直觉却真实的现象:那些被视为优秀的程序员,身上往往同时具备“懒”和“笨”的特质。 作者从观察出发,指出“懒惰”并非贬义——优秀的程序员会为了一劳永逸地摆脱重复劳动,主动编写工具和脚本,从而在客观上提升了代码的可维护性和产品质量。而“笨”则是一种宝贵的思维品质,它让程序员保持谦逊、持续学习,并且像孩子一样提出最基础的问题,避免因自以为是而陷入思维定式。文章中那个排查logo显示问题的虚拟对话很有意思,它生动地说明,只有放下“聪明人”的预设,用最朴素的“傻办法”刨根问底,才能触及真正简单却容易被忽视的根源。 作者想传达的是,这种“懒”驱动效率提升,“笨”保障问题定位的思维方式,是实用主义程序员的核心素养之一。它提醒我们,有时放下精妙的预设,回归简单质朴的思考,恰恰是解决复杂技术问题的捷径。

本机暂存
IT 2013-08-02 13:26:49 / 累计浏览 1,969

编程中的硬编码问题

这篇文章切中了编程中一个看似简单却影响深远的痛点——硬编码。作者从基础概念讲起,解释了硬编码就是将可变变量用一个固定值代替,这会导致程序后续修改异常困难。通过清晰的代码对比(如 `if(a==2)` 与 `if(a==b)`,或圆面积计算中直接使用 `3.14` 与定义变量 `V_PI`),直观展示了硬编码与灵活编码的关键差异。 文章不止于概念,更深入分析了硬编码在实际业务场景中的危害。例如,用中文字符串“拟制中”做条件判断,一旦系统国际化就会失效;或将特定管理员姓名写死在逻辑里,一旦人员变动程序便会出错。这些例子点明了硬编码带来的维护噩梦和系统脆弱性。 核心观点很明确:硬编码是为了短期方便而埋下的长期隐患。作者主张,无论是在条件判断、常量定义还是环境适配(如仅针对IE的JavaScript代码)上,都应通过设置常量、变量或采用动态配置的方式,让编码变“软”,从而提升系统的可维护性和扩展性。这对于开发者和设计者都是一种重要的警示。

本机暂存
IT 2013-07-30 13:39:02 / 累计浏览 13,934

面向“接口”编程和面向“实现”编程

这篇讲的是编程中一个经典却容易被忽视的原则:我们应该面向“接口”编程,而不是面向“实现”编程。 作者从重读《设计模式》一书出发,结合自己对 Rust 等新语言的思考,通过一个生动的例子对比了这两种方式。如果直接写一个 `start_fire` 函数并让它接收具体的 `Log` 类型参数,那么想传入同样具有 `burn()` 方法的 `Book` 对象时就会报错,因为函数绑定的是具体实现类型。这种方式导致了代码重复和僵化。 而“面向接口”编程则提供了优雅的解决方案。文章定义了 `Burnable` 接口(在 Rust 中是 trait),让 `Log` 和 `Book` 都实现它。于是 `start_fire` 函数可以泛化为接受任何满足 `Burnable` 接口的类型 `T`。这样,无论是木头还是书,甚至是未来新增的、实现了该接口的“纸张”对象,都能无缝地传入该函数,代码的复用性和扩展性大大增强。 这个对比清晰地展示了:面向实现导致紧耦合,而面向接口则通过抽象带来了灵活性。虽然并非所有场景都适用,但遵循这一原则能帮助我们写出更易于维护和扩展的代码,这正是其强大价值所在。

本机暂存
IT 2013-07-28 15:50:15 / 累计浏览 4,343

做正确的事情,等着被开除

这篇讲的是一种在技术公司里“反常识”的生存哲学。作者从谷歌工程师陳一鳴的一句话“做正确的事情,等着被开除”出发,剖析了现代科技公司普遍存在的“精神分裂”:一方面用严格的流程、考核与框架来规范团队,另一方面又殷切期待员工能打破这些框架,去冒险、快行动,做出真正的创新。 文章的核心观点是,卓越的成就往往诞生于规则之外。它鼓励技术人员建立强大的内心判断,在面临流程僵化、技术债务累积或需要快速验证时,敢于为了团队和产品的长期利益站出来,做出那些“正确但可能违反当前政策”的决策——比如为了快速上线而承担可控风险,或者为了长期可维护性而放慢速度进行重构。作者将这种行为定义为真正的职业精神:做你被雇来该做的事。 这对技术人员的启发在于,职业成长不仅是技术精进,更是责任承担与风险判断力的修炼。失败了不可怕,关键是要从结果中学习,并且绝不犯同样的错误。最好的工程师,往往是那些懂得在合适的时机,勇敢打破规则的人。

本机暂存
IT 2013-07-26 13:24:45 / 累计浏览 2,984

学习搭建Python2.7.5环境

作者从写PHP多年有些厌倦、想转学Python的角度出发,分享了在CentOS系统上从零搭建Python 2.7.5开发环境的全过程。文章并非枯燥的步骤罗列,而是带着个人学习动机,清晰地讲解了从下载源码、编译安装,到配置包管理工具和隔离环境的一套完整实践。 文中特别指出,原先流行的setuptools已被distribute取代,easy_install也被pip取代,并给出了具体的安装命令。核心环节是介绍virtualenv这个必备工具——它允许创建完全隔离的Python环境,避免不同项目间的依赖冲突。作者也演示了如何创建、激活和退出环境。 文章最后提醒,使用virtualenv管理多环境时,脚本里应使用`#!/usr/bin/env python`而非绝对路径以增强通用性,并推荐了pyenv等工具来管理不同Python版本。结尾以幽默的口吻表达了对“3P伟业”的憧憬,让技术分享多了几分生动。

本机暂存
IT 2013-07-26 13:23:24 / 累计浏览 6,238

加班与效率

这篇文章从微博上一篇关于“靠加班超越对手”的讨论切入,直指一个普遍存在的管理误区:当领导者无法衡量团队产出价值时,往往会把“工时”当作最简单粗暴的衡量标准。 作者认为,将加班视为核心竞争力,是一种思维懒惰,本质上是用劳动密集型的“蛮力”去弥补知识密集型“创新”的匮乏。文章用了一个精辟的类比:产品发展不是短跑,而是登山,比的是策略、准备和步步为营,而非一时的速度。 对于“效率”,文章给出了一个清晰的物理定义:效率 = 有用功 / 总功。提升效率并非单纯增加投入,而是要从“增加有用功”(砍掉低价值需求、聚焦核心痛点)和“降低总功”(减少重复劳动、提升人员能力)两方面同时着手。更关键的是,真正的整体效率源于对最终产品负责的共同使命,而非各自为政的局部优化。 为了让这个原则更具操作性,文章介绍了亚马逊的“T-Shirt Size Estimation”方法:用XXXL、XXL等尺码分别量化需求的业务价值和开发成本,从而快速判断优先级——比如一个业务价值为XL但开发成本仅为S的需求,就值得立即推进。 通篇在呼吁技术与管理者们回归理性,用更聪明的方式(思考与创新)去解决问题,而不是陷入用时间换产出的低效循环。

本机暂存
IT 2013-07-15 13:43:18 / 累计浏览 6,956

程序员最怕的事

这篇文章汇总了程序员社区里流传最广的五大恐惧,数据源自 Stack Overflow、Quora 等平台上相关帖子的投票结果。它并非严肃的技术探讨,而是一次有趣的技术人“心理体检”。 排名从低到高,恐惧依次是:与不称职的上级或同事共事;被迫学习或使用自己讨厌的技术(比如有人“怕用 COBOL”);不再热爱编程这份工作;失业风险(包括被外包、技术平台封闭甚至身体伤病);而高居榜首、最普遍的恐惧是“做砸事情”——具体表现为害怕代码里的 Bug。从“周五晚上发现无法编译”到“担心 Bug 造成经济损失或物理伤害”,这种对交付质量的敬畏与焦虑,几乎伴随每一位开发者的日常。 这篇文章的价值在于,它揭示了技术光环之下程序员真实的情感与压力。它可能让你会心一笑,找到共鸣;也可能提醒团队管理者,除了技术能力,程序员更需要一个健康的协作环境和工作热情。你的恐惧上榜了吗?

本机暂存
IT 2013-07-08 22:48:09 / 累计浏览 4,343

论“重复造轮子”

这篇文章从一个常见的技术讨论入手,探讨了“重复造轮子”这一现象。作者指出,它看似是个人偏好或技术问题,实则普遍存在于个人、团队甚至公司层面,往往导致资源浪费。 文章深入剖析了其出现的几个核心原因:程序员之间相互轻视,觉得不如自己写的顺手;因版权协议限制而不得不自研;以及部门间因进度紧张、沟通不畅而放弃代码复用。作者还提到了一种“战略级”的造轮子,并以自己前公司的实践(如自研类似Hadoop的系统)为例,分析了其与拥抱开源路线在业务发展上的不同结果。 作者的核心观点是,重复造轮子在大多数情况下并不值得,除非是为了有意义的创新或受限于客观条件。他特别对创业公司提出务实建议:应尽可能采用开源技术,将有限的精力聚焦于业务本身,避免陷入研发底层框架的“奢侈”消耗中。文章通过具体案例和经验,为技术决策提供了清晰的参考视角。

本机暂存
IT 2013-07-07 22:17:51 / 累计浏览 3,679

编码风格不是编码规范

作者从程序员对代码格式的敏感体验切入,指出许多开发者容易将“编码风格”与“编码规范”混为一谈。文章明确区分了这两个概念:编码规范是一个更宽泛的集合,包含编码风格以及其他编程规则(如函数返回值的设计);而编码风格则专注于代码的格式化约定,例如缩进、空格、命名习惯等。 文章着重阐述了统一并遵守编码风格的三个核心好处:一是让代码更易维护,团队成员能快速通过约定的格式推断代码意图;二是促进代码的集体所有制,提升项目的“巴士因子”;三是能有效平息那些无休止的格式争论,让团队将精力集中在更重要的事情上。 最后,作者建议利用Eclipse、indent或uncrustify等工具来自动化地实施编码风格,将人力从重复的格式调整中解放出来。文章强调,风格的价值在于团队的共同遵守,而非个人喜好。

本机暂存
IT 2013-07-07 21:27:37 / 累计浏览 3,611

Linux大棚版gtest官网教程译文

这篇译文系统介绍了谷歌C++测试框架(gtest)的入门教程。作者从“为何选择gtest”切入,阐明了它作为一款优秀测试框架的核心设计哲学:确保测试独立可重复、通过“test case”组织以清晰反映代码结构、支持跨平台以保持可迁移性,并能提供详尽的失败信息以便高效调试。文章强调,gtest能帮助开发者从繁琐工作中解脱,专注测试内容本身。 在介绍完这些关键特性后,译文逐步展开教程内容。它首先指导如何将gtest编译为库并链接到测试项目,随后深入讲解了“断言”这一基础概念,区分了致命与非致命失败,并引入了“测试用例”和“测试夹具”等组织测试的核心组件。译文表明,这套基于xUnit框架的体系,旨在让有JUnit等经验的开发者快速上手,也让新用户能迅速构建出结构清晰、高效可靠的测试程序。

本机暂存
IT 2013-07-07 18:00:06 / 累计浏览 7,674

从C语言的Hello World说起

这篇讲的是,很多初学者虽然写过Hello World,但对背后的编译过程一头雾水。作者就从最简单的`printf("hello world\n");`出发,详细演示了如何在Linux下用GCC命令一步步将其变成可执行文件。 文章没有停留在“运行”层面,而是拆解了`gcc -g -Wall hello.c -o hello`这条命令里每个选项的具体含义:`-g`为调试留后路,`-Wall`让编译器“多嘴”以暴露问题,`-o`指定输出文件名。甚至讨论了从简陋的`main()`到规范的`int main()`并返回0的代码改进。 更硬核的部分在于,它图解并分步剖析了整个编译流水线:预处理如何把`#include`的头文件展开成一个巨大的.i文件;编译器又如何将C代码翻译成汇编语言;最后由汇编器和链接器生成最终的机器码。每一步都附有具体的GCC指令示例,比如用`gcc -E`单独查看预处理结果。 这文章相当于带读者重新走一遍当年可能只按了“运行”按钮就略过的路程,把“从源码到程序”的黑箱给拆开了看。对于想补上系统编程基础课的人来说,这种从Hello World切入的硬核拆解挺扎实。

本机暂存
IT 2013-07-06 21:17:49 / 累计浏览 3,809

汇报工作的四个层级

这篇文章讲的是职场中一套实用的汇报方法论,核心是将工作汇报与PDCA(计划-执行-检查-处理)循环相结合,形成了四个清晰的层级。 作者认为,有效的汇报远不止是简单地“告诉领导进度”。它首先强调**计划阶段的汇报**:接到任务后,先别急着埋头苦干,而是要快速形成一个包括时间、资源和步骤的基础计划,并与领导对齐,确保自己从一开始就在“做对的事情”。 在**执行阶段**,汇报的重点是过程同步。对于重要或长周期的任务,需要保持高频率的沟通,确保一切按计划推进,问题能被及时发现和解决。 **检查阶段**则要求汇报从“做了什么”转向“结果如何”,即对成果进行诊断,判断是否满足预期,而不是仅仅罗列已完成的动作。 最后的**处理阶段**是关键,它要求对工作结果进行总结、复盘和提炼,无论是成功的经验、失败的教训,还是需要公司层面推动的系统性问题,都是汇报的重中之重。 文章指出,单纯的执行者容易忽视计划和处理层级的汇报,而优秀的员工和管理者则深谙其道。掌握这四个层级的汇报技巧,其最终目的不是为了沟通而沟通,而是通过持续对齐目标、复盘过程,确保个人工作始终与组织战略方向保持一致,从而真正提升效能,实现独当一面。

本机暂存
IT 2013-06-25 13:53:38 / 累计浏览 3,718

一些做产品的项目经验:立项、流程、文档

这篇讲的是蝉游记团队在敏捷开发中总结出的一套高效协作方法。作者从立项阶段讲起,强调要快速将想法转化为可讨论的低保真原型,并通过“放置一段时间”来让设计更成熟。 核心经验在于流程管理。一个版本迭代周期控制在3到5周,所有需求、排期和进度都通过Tower来可视化、透明化管理。这使得团队无需频繁开会,每天刷一下Tower就能清晰掌握全局。文档方面则采取极简策略——团队默契后,设计师对着原型出图,工程师对着PSD编码,复杂点才在Tower上备注。唯一严谨的产出是一份近500个测试点的测试用例,它既是质量的底线,也是未来整理规范文档的基础。 作者坦诚,这套高效流程的前提是个人本身具备良好的条理性和规划能力,工具只是将已有的条理放大并沉淀下来。对于追求效率的小团队,这种轻文档、重协作、靠工具透明化的方式提供了非常实际的参考。

本机暂存
IT 2013-06-18 13:53:50 / 累计浏览 4,195

技术领导人需要的一些特质

这篇讲的是技术领导者如何与业务部门有效沟通的真实案例。作者从一位从Oracle来的技术副总身上观察到,技术团队常常陷入一个困境:埋头做出的成果(比如架构改进、技术负债处理)不被业务方理解,导致资源难以获取甚至项目被随意削减。 问题的核心在于,技术团队习惯用“扩展性”“稳定性”这类专业术语汇报,而业务负责人(如COO、PM)需要的是“这能带来什么实际好处”的直观答案。文章以一个组件化项目为例,技术副总一针见血地指出:如果连COO都不知道你在做什么,遇到困难时谁会支持你?他建议用业务语言“营销”技术价值,例如向相关PM明确说明项目能为他们带来的具体收益,从而争取理解和支持。 这种思路也体现在具体管理方法中:将技术负债处理转化为业务能看懂的“Roadmap”计划;推行SCRUM时明确用“猪还是鸡”来界定角色责任,避免模糊地带。作者总结,这位领导者的特质在于总能用双方有直观印象的语言沟通,提问题多像“选择题”而非“主观题”,这背后是清晰的逻辑和事前准备。 对于技术人而言,这篇文章揭示了一个关键点:职位的成长往往不只取决于技术深度,更在于能否将技术价值翻译成组织共识,用对方听得懂的话“卖”出去。

本机暂存
IT 2013-06-08 23:37:17 / 累计浏览 8,107

腾讯敏捷开发及快速迭代

这篇讲的是腾讯如何从2006年开始,在研发规模膨胀的背景下,将敏捷开发从理念落地为一套独特的、适合自身的实践体系——TAPD。 文章梳理了腾讯从引入ThoughtWorks培训、试点到全面推广敏捷的完整历程,并坦诚分享了过程中遇到的挑战:产品线多元、团队规模差异大、长周期项目(如QQ客户端)的适配问题,以及大量新人融入的难题。正是这些挑战,催生了腾讯混合吸收XP、Scrum和FDD精髓的“并行迭代”模式。 在具体实践上,文章细节很多。产品侧采用类似FDD的“特性驱动”,由产品经理滚动定义需求;项目管理借鉴Scrum,但强调每日晨会、规划游戏和时间盒的灵活运用;开发侧则落实了持续集成、自动化测试和“全员测试”文化。最具腾讯特色的创新点包括使用“故事墙”可视化进度、推行“自运转团队”以减轻项目经理负担,以及大规模应用“灰度发布”来安全快速地验证产品。 整篇文章展示了一个大型互联网公司如何将敏捷“本土化”,在规范化与灵活性之间找到平衡,最终服务于快速迭代的产品目标。

本机暂存
IT 2013-06-02 19:41:12 / 累计浏览 3,818

《打造 Facebook》笔记

这篇讲的是作者从雅虎到Facebook的亲身体验与观察,核心是探讨两家公司截然不同的文化如何塑造了工程团队和产品开发。 作者首先指出雅虎存在严重的部门墙(BU),团队协作差,文化上缺乏整体使命感。与之形成鲜明对比的是,Facebook强调所有人为了整个公司的发展而工作。这种理念差异具体体现在诸多实践中:例如在招聘上,Facebook通过“文化适应性面试”和集体决策会议,严格筛选不仅技术一流、且认同公司使命的人才,认为一流人才只会与同等水平的人共事。在工程管理上,这里鼓励工程师发挥主动性、快速迭代产品,并持续改进内部工具以提升整体效率。作为管理者,重点在于“榜样示范”和设定合理挑战,而非单纯管控。 对于想提升技术团队效能与文化的读者,这篇文章的启示在于:伟大的产品源于对“人”的极致重视,包括严格的筛选、文化的塑造以及赋予工程师真正的自主权和责任感。它展示了一种将“文化”从虚泛口号,落实到招聘、开发、管理每个具体环节的系统性方法。

本机暂存
IT 2013-05-21 22:54:20 / 累计浏览 5,079

项目经理是干什么的

这篇讲的是职场新人小M在仰慕项目经理光环后,向资深S总深入请教“项目经理究竟是干什么的”的职业选择故事。它通过对话形式,清晰地拆解了这个常被向往却未必被理解的角色。 文章首先定义了项目经理是公司委派的、对项目全过程负责的直接领导者。S总总结了其核心职责是达成“铁三角”:按预期交付成果、让客户满意、让员工满意。具体到IT项目,任务贯穿售前支持、项目交付、收尾移交、干系人管理以及团队建设,项目经理因此被称作“推动者”与“协调者”。 更深入的是,文章重点探讨了“你是否适合”的问题。S总指出,性格特质和思维习惯比单纯技术能力更关键,他列举了领导力、责任心、积极主动和压力承受四大“先天赋予”的素质,并提供了一份具体的行为特点清单(如换位思考、遇事先找解决方法、懂得倾听等)供自检。这恰恰点明了转型的核心挑战:项目经理之路虽是“无悔路”,但对人的综合要求极高,近乎“迷你CEO”,需要慎重评估自身匹配度。 对于正在考虑技术转管理的读者,这篇文章从“是什么”、“做什么”到“需要怎样的人”,层层递进地提供了清晰的参考框架,尤其那份素质自测清单,能帮助你在迈入管理赛道前,进行一次冷静的自我对话。

本机暂存
IT 2013-05-20 23:23:31 / 累计浏览 3,426

引导扇区实现

这篇讲的是如何从最底层实现一个操作系统启动的第一步:引导扇区。作者从BIOS加电自检后如何找到并执行启动代码讲起,解释了CPU进入实模式后的内存寻址机制,以及BIOS如何通过识别磁盘第一个扇区末尾的特定标志`0xaa55`来加载引导程序。 核心实现思路清晰:引导程序被加载到内存地址`0x7c00`处执行。文中给出了一段精简的汇编代码示例,演示了如何利用BIOS的`int 10h`中断,在屏幕上打印出“Hello,CB_OS!”字符串。这部分不仅展示了代码,还详细拆解了中断调用所需的参数设置,比如显示模式、字符长度和颜色属性。 巧妙之处在于,作者完整走通了从编写源码(`boot.asm`)、用`nasm`编译成二进制文件、再到通过`dd`命令写入磁盘镜像并使用bochs模拟器运行的整个流程。最终,在模拟器中成功看到输出,直观验证了引导扇区工作正常。文章从底层原理到可运行代码的完整路径,让操作系统启动这一抽象过程变得具体可感。

本机暂存
IT 2013-05-20 23:16:24 / 累计浏览 3,085

创业,你真的准备好了吗?

这篇文章从两位创业者的亲身经历出发,探讨了创业的本质与准备。作者“道哥”首先以自己早年运营一个安全论坛的经历为例,指出创业更像一种“感觉”——当你的产品虽不完美,却挡不住用户的热情时,你可能就走在了正确的路上。他后悔没有将那个社区坚持做下去,但也从后续的用户反馈中体会到了创造价值的满足感。 随后,文章引入了创业者周伟的分享。他结合自己创办天勤考研社区和高分笔记三年来的起伏,详细描述了创业者光鲜背后必须承受的孤独、委屈与磨难。周伟以自己曾遭竞品人身攻击、却最终凭借坚持获得成功的案例,强调了不放弃的重要性。他进而提出了创业者需要自省的三个问题:你是否容易放弃?执行力是否够强?创业目的是什么? 此外,文章还提炼了几个关键心得:你的产品需要构建让用户离不开的“护城河”;资源整合能力比个人能力更重要;以及领导者应学会放权,以从容心态解决问题。最后,作者呼吁创业者写下错误而非辉煌,以持续成长。

本机暂存