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

开发者

共 811 篇文章

IT 2012-12-03 23:54:23 / 累计浏览 2,737

我是产品经理我需不需要学技术?

这篇讲的是产品经理是否需要学技术,以及应该怎么学。作者以自身从技术转产品的经历出发,认为PM确实需要懂技术——这不仅能帮你抓住AR、无线充电等前沿机会,也能让你和开发沟通时不再“被当猴子”。 不过,PM不必(也很难)精通编程细节。作者提出的学习方法核心是:关注技术的原理、边界和成本。比如,了解无线充电或文件传输的基本原理,能让你建立整体认知;关注iOS早期应用数据隔离的“边界”,才能明白为何需要开发专属组件;而避开拖拽效果这类“细节黑洞”,或不盲目依赖不成熟的开源方案,才能有效评估开发时间。文章还提到,像PhoneGap这类技术正在降低多端开发成本。 总的来说,作者主张PM应从产品视角理解技术,把握其能做什么、受什么限制、要花多少代价,从而做出更明智的产品决策。

本机暂存
IT 2012-11-26 13:51:37 / 累计浏览 2,441

那些害人的编码“神谕”

这篇讲的是编程世界里那些被奉为圭臬、却常常断章取义的“神谕”,如何反过来成为技术债和团队协作的障碍。 文章以两句广为流传的名言为靶子:一句是 Donald Knuth 的“过早优化是万恶之源”,另一句是 Steve McConnell 的“好代码本身就是最好的文档”。作者指出,大家往往只记住了前半句的教诲,却忽略了其完整的、带有条件的上下文。这导致这些名言在实践中被异化成了逃避责任的借口。 比如,在“过早优化”的庇护下,一些工程师对明显的资源浪费视而不见。作者列举了公司内部的真实案例:一个模块因自建内存池管理不当,导致服务器周期性内存泄漏宕机;一个仅加载几KB配置的代码,竟因使用了巨大的固定数组而占用超过1GB内存;甚至一个公共日志库,无论是否开启日志,都会无谓地执行系统调用。在这些基础性问题面前,谈论“避免过早优化”显然为时过早。 而对于“代码即文档”的断章取义,则助长了不写注释的风气。作者犀利地指出,多数人的代码清晰度远未达到能自我解释的程度。当接手那些传说中的“大神”留下的、成百上千行无注释的代码时,带来的不是敬仰,而是维护的噩梦。因此,作者在团队中旗帜鲜明地主张:注释是不可省略的,甚至是应该强制执行的。 这些被简化的“神谕”,反而让开发者忽视了最基础的编码规范和资源意识。文章提醒我们,在引用任何原则之前,都需理解其全貌,否则它们可能从指引明灯,变成阻碍进步的绊脚石。

本机暂存
IT 2012-11-11 23:43:29 / 累计浏览 4,676

如何避免重构带来的危险

代码重构是提升软件质量的常见手段,但盲目重构往往带来更大风险,甚至导致系统崩溃。这篇文章的核心观点是:除非必要,否则不要轻易对代码进行大刀阔斧的改动。作者明确划定了“红线”——如果你不理解代码的历史背景、逻辑过于复杂、项目时间紧迫或你是团队新人,那么重构的条件并不成熟。 相反,在分析清楚代码臃肿原因、确保有充足时间与测试资源、且修改后逻辑将显著更清晰时,重构才是合理的。文章特别强调,所有重大修改都必须与团队共同决策。 如何安全落地重构?作者给出了几条关键建议:首要任务是建立自动化回归测试,以此作为快速验证修改的“安全网”;其次,应采用短周期的开发与发布模式,并将重构代码尽可能隔离,便于问题定位。同时,一份涵盖回归、功能、性能等多维度的测试计划必不可少。 文章还提倡“小粒度重构”,即在修改现有代码时顺手优化其局部,保持代码整洁,但务必与同事讨论。最终,作者提醒我们:忍住重构不理解代码的冲动,不断学习新技术,但更应审慎思考其适用场景,避免为了用而用。

本机暂存
IT 2012-11-02 13:11:33 / 累计浏览 6,004

我自己研究开源项目源代码的两个重要习惯

这篇讲的是作者在长期研究开源项目源代码时,逐渐沉淀出的两个核心工作习惯:撰写代码流程分析文档,以及编写不同场景的测试用例。文章以分析 HBase 的 HMaster 和 HRegionServer 启动流程为例,具体展示了这些习惯是如何落地的。 作者并非一开始就追求完美的分析。他会在文档中按方法调用顺序梳理流程,允许自己留下未完全理解的“TODO”标记,甚至可能包含一些初期的错误理解。这份文档会随着研究的深入,经过多次反复和迭代而不断完善。关键的是,他会将这份“过程文档”提交到版本库中,既为了保存,也为了记录自己的理解历程。 文章贴出了一段真实的、略显“粗糙”的分析记录作为示例。我们可以看到,从构造 ZooKeeper 节点、生成核心组件,到复杂的初始化与分配逻辑,每一步都被尽可能细致地追踪和记录下来。这份文档的价值在“冷启动”时尤为明显——当作者时隔数月后需要重新投入某个项目时,对照着这份自己写的、充满个人注解的文档,能迅速恢复到当初的理解水平,避免了从零开始的巨大时间成本。 这两个看似“普通”的习惯,其威力在于将抽象、易逝的阅读和思考过程,转化为了具体、可版本化管理的资产。对于需要长期维护或间歇性深入的复杂代码库而言,这是一种极为高效的知识管理策略。

本机暂存
IT 2012-11-01 13:20:04 / 累计浏览 4,308

当我加入项目时,我要了解什么

这篇文章讲述了一位经验丰富的技术人员在频繁加入新项目时,如何快速把握全局并投入工作的核心方法。作者认为,理解项目应从三个层面循序渐进:首先是业务,目标不是纠缠细节,而是能在五分钟内清晰说明“这个系统是做什么的”,避免将技术细节与业务混杂讲解。 在技术层面,作者主张先宏观后微观。先确认整体技术栈(如Java或.NET),再借助一张系统架构图理清外部集成与内部模块划分。对于模块和层次,作者特别指出很多系统的问题在于模块职责模糊、依赖混乱,而清晰的分层结构是现代系统的关键。深入细节时,应从集成点入手(如了解MQ中传输的是XML),再探查源码目录结构,但不必在初始阶段过于深入。 最后,团队运作方式同样重要,例如站会、迭代会议的时间安排,是否存在常规的Code Diff或Session分享墙,以及与客户是否有定期沟通机制。作者通过这些问题往往能快速识别团队协作中的潜在问题。整体来看,这套结合业务、技术与团队维度的系统性了解路径,能帮助开发者在一到两天内建立对项目的完整认知,为后续高效协作打下基础。

本机暂存
IT 2012-10-29 13:26:12 / 累计浏览 6,112

应届生选择大公司还是小团队

这篇文章是针对一位应届硕士的典型困惑给出回应:在互联网巨头稳定的非核心岗位,与一家发展不错但前景不明的团购小公司之间,该如何选择。 作者“怪蜀黍”的核心观点很明确:通常建议应届生优先进入大公司。他从“心态培养”和“职业路径”两个角度分析。一方面,他认为应届生普遍缺乏在小公司所需的主动性、自学能力和挫折承受力,过早进入小公司容易产生“一切都怪环境不好”的抱怨心态,而大公司的规范环境则迫使职场人直面问题,有助于建立更平稳的职业心态。 另一方面,作者指出大公司能有效锻炼“为人处事与沟通方式”,这是从平均值来看的普遍优势。更重要的是,他点明了一个现实的路径选择:先进大公司,打造一份漂亮的履历,之后跳槽去中小公司相对容易;反之则门槛要高得多。他将大公司比作一剂“麻药”,既捆住手脚又提供优渥待遇,容易消磨斗志,但也正因如此,它为职场新人提供了宝贵的缓冲期和观察窗。 最后,作者也赞同“大中小公司都做一圈”的经历,认为这能帮助个人最终认清自己想要什么、适合什么。

本机暂存
IT 2012-10-26 22:18:44 / 累计浏览 2,872

项目管理中怎么做资源平衡

这篇讲的是项目管理中一个常被忽视的难点:资源平衡。作者从一个包含A到G七个作业的实际工程案例出发,清晰地展示了在进度管理中,计算工期和计算最少人力这两个任务在难度上的巨大差异。 文章先用关键路径法快速得出结论——关键路径为B-D-F,项目最短工期为7周。但真正的挑战在于如何确定整个工程最少需要多少人。作者指出,在不推迟工期的前提下,关键路径上的活动不可变动,而非关键活动的安排则需要借助甘特图进行细致分析。 通过将非关键活动(如A、C、E、G)在允许的时间窗口内合理排布,并对比各时段所需人力,文章最终推导出该项目最少需要10人。整个分析过程生动地揭示了:在理论上可行的进度方案,在资源受限的现实中可能需要复杂的权衡与计算。这对项目经理而言是一个非常实用的视角。

本机暂存
IT 2012-10-26 13:30:19 / 累计浏览 4,408

程序员如何保持优秀

这篇观点类文章从程序员的长期成长出发,提炼了20条保持优秀的核心准则。作者强调的并非追逐最新工具,而是扎实掌握少数关键技术并深刻理解其底层原理。 文章认为,优秀超越了单纯的代码优化,更在于对数据结构和算法设计的深刻洞察。它鼓励程序员跳出日常编码,去真正理解用户需求,并将分析与编程这两个不同性质的工作在时间上分开处理。其中一些具体建议极具实践性,比如坚持正确的命名规范以提升代码可读性,永远不为图省事而写重复代码,以及通过亲自构建框架和重构他人“神奇但混乱”的代码来学习。 作者的核心观点是,数据永远比理论更重要,而持续学习的最佳方式之一,就是将所知教授给他人。这些建议最终都指向一个目标:帮助程序员建立扎实、清晰且面向长期价值的技术习惯,从而在职业生涯中持续精进。

本机暂存
IT 2012-10-14 22:23:50 / 累计浏览 3,391

跨领域人才

这篇讲的是2012年《三联生活周刊》对斯坦福大学的一次深度观察,它将这所名校称为“硅谷的心脏”。文章并非泛泛而谈学术成就,而是聚焦于一个关键视角:跨领域人才的培养。斯坦福的魔力,不仅在于它培养出众多技术创始人,更在于它如何刻意打破学科壁垒,让工程、商业、人文甚至艺术的学生在校园里就相互碰撞、协作。这种氛围催生的不是单一维度的专家,而是能理解技术、市场并洞悉人性的“桥梁型”人才,这正是硅谷持续创新的底层燃料。文章提醒我们,真正的创新生态,始于教育系统中那种敢于跨界、乐于融合的文化基因。

本机暂存
IT 2012-09-30 15:26:14 / 累计浏览 3,511

纸上读来不觉浅

这篇讲的是很多团队都习以为常的产品开发流程——从创意提出,到开发、内测、公测,最终发布,环环相扣。但作者敏锐地指出,当整个团队都沉浸在“按流程完成”的满足感中时,真正的挑战其实才刚刚开始:发布之后呢? 文章揭示了一个关键盲区:这种线性的、以“发布”为终点的思维,往往将产品成败交给了运气。它忽略了发布只是产品与真实用户碰撞的起点,而非终点。作者的核心观点在于,健康的产品生命周期管理,必须把“发布后”的反馈收集、数据分析、快速迭代,甚至可能的复盘与转向,纳入主流程的规划之中,而非视作随机事件。 这对技术团队的启发在于,我们需要重新审视“完成”的定义。代码上线、功能发布并不意味着任务结束,持续监测用户行为、建立数据驱动的反馈闭环,才是产品能否在市场中存活并进化的关键。流程固然重要,但流程之外的系统性思考,或许更能决定一款产品的最终高度。

本机暂存
IT 2012-09-30 15:17:40 / 累计浏览 2,398

回忆Windows开发中的古老概念

这篇讲的是作者对早年Windows开发经历的回忆与反思。文章从那个技术概念刚兴起、信息尚不完善的时代切入——当时维基百科尚未诞生,许多计算机术语的定义模糊不清,而微软的技术动向则牵动着所有开发者的神经。作者回顾道,在那个年代,软件开发几乎等同于在Windows平台上耕耘,因为只有这样才能获得商业回报。 文章特别指出了微软战略上的一个关键转折:没有及时推出应用商店。作者认为这绝对是一个巨大的失策,因为这一缺失不仅改变了后来移动生态的格局,也间接映射出PC时代软件分发与盈利模式的局限。通过这段亲历的回忆,文章不仅呈现了早期技术圈的生态,更引发了对平台策略、技术文档普及以及开发者与巨头关系的持续思考。

本机暂存
IT 2012-09-20 13:50:56 / 累计浏览 5,028

gcc的内联汇编取全局变量地址

这篇讲的是在GCC内联汇编中高效访问全局变量地址的实用技巧。作者从一段需要优化的代码出发,其中频繁使用了全局变量,直接硬编码地址或使用冗长的符号引用会让内联汇编变得笨重且难以维护。 文章的核心解法是利用GCC提供的扩展语法,直接在内联汇编模板中引用C语言变量名。例如,通过`"a"(global_var)`或`"m"(global_var)`这样的约束描述符,可以安全地让汇编器在编译时获取变量的地址或值,而无需手动计算偏移量。这不仅保证了代码的可读性与可移植性,还能确保编译器正确处理内存对齐和优化。 实现上有一个巧妙之处:对于需要在汇编指令中直接使用地址的场景(比如`lea`指令),可以将全局变量作为操作数传入,让GCC负责生成正确的地址引用。这种方法避免了硬编码地址带来的风险,尤其当变量可能被链接器重定位时。 文章通过具体代码片段展示了如何声明和使用这些变量,强调了这种方式如何让内联汇编与C代码更自然地结合,最终写出更清晰、更稳健的混合编程代码。

本机暂存
IT 2012-09-20 13:50:00 / 累计浏览 7,981

我学编程时犯的最大两个错误

这篇讲述了作者在自学编程过程中因信息过载而犯下的两个典型错误,以及他如何从中吸取教训。作者大学毕业后怀揣创业梦想,但发现自己不会编程,于是听从建议开始自学。他最初泡在Hacker News、Quora和StackOverflow等平台,搜集了大量技术名词,列出一个包含HTML、CSS、PHP、Javascript、Django、Python等二十多项的杂乱清单,试图全部掌握,结果陷入迷茫。 核心错误之一是学习了太多与原型开发无关的技术。实际上,他后来认识到,只需精简到关键工具:用HTML构建网页结构,CSS设计样式,Javascript和jQuery实现动态交互,Python处理数据,以及Django作为Web框架连接一切。这个清单不仅更实用,还帮助他理清了学习路径。 另一个错误是过度依赖阅读而缺少实践。他花时间读了很多编程书籍,却没将知识应用到项目中,导致学得快忘

本机暂存
IT 2012-09-18 23:57:04 / 累计浏览 3,247

c关键字-sizeof的种种

这篇技术博客深入探讨了C语言中一个常被误解的关键字——`sizeof`。作者从它作为编译时关键字而非函数或宏的核心身份切入,剖析了其值在编译阶段确定的根本特性。 文章通过一系列经典且易错的示例,直观展示了`sizeof`在不同上下文中的行为差异。例如,它对数组名和指针的计算结果完全不同,这一细节是许多C程序员必须厘清的知识点。同时,文章也详细讲解了`sizeof`对结构体、联合体等复合类型大小的计算规则,包括对齐方式可能带来的影响。 作者的讲解侧重于原理与实践的结合,帮助读者理解编译器是如何思考并计算这些大小的。掌握这些细微之处,能让你在编写涉及内存分配、数据结构布局的代码时,做出更精准的判断,从而避免潜在的内存错误。

本机暂存
IT 2012-09-18 23:55:11 / 累计浏览 5,667

C语言的那些个关键字们

作者分享了一次在感冒状态下参加技术面试的真实经历。文章从作者带病前往心仪公司面试开始,描述了因迟到引发的紧张情绪,以及在高压时刻身体出现的意外反应——鼻涕突然停止了。这个细节生动展现了面试者对机会的重视,以及压力如何影响生理状态。作者以幽默的口吻,将个人体验与技术面试的常见挑战相结合,核心观点在于:在技术能力之外,心态管理和应变能力同样决定面试成败。对于读者,尤其是常面临面试的技术人员,这个故事提醒我们,突发状况下保持冷静的重要性,以及如何将压力转化为动力。文章通过这个小插曲,启发读者在技术学习之外,也需培养心理韧性,以更从容地应对职业中的不确定性。

本机暂存
IT 2012-09-18 23:34:10 / 累计浏览 1,813

一个简单的例子让你认识测试驱动

这篇讲的是用一个非常具体的例子,带你理解“测试驱动开发”(TDD)到底是什么。 文章没有从理论开始,而是直接模拟了一个开发“用户登录”模块的场景。作者先展示了传统“先写功能代码,再补测试”的思路,并指出了它可能带来的测试遗漏和设计问题。接着,演示了TDD核心的“红-绿-重构”循环:第一步,先写一个最简单的失败测试(红灯),明确一个微小的功能点;第二步,写最少的代码让测试通过(绿灯);第三步,重构代码以提升设计。通过这个小例子,TDD“测试先行”、“小步前进”、“持续设计”的特点变得非常直观。 文章最巧妙的地方在于,它让读者看到,TDD不仅仅是一种测试技术,更是一种引导你写出高内聚、低耦合、可测试代码的设计工具。当你看到最后那个结构清晰、易于维护的登录模块时,就自然明白了这种开发方式的价值所在。

本机暂存
IT 2012-09-10 23:34:30 / 累计浏览 3,862

C++11(及现代C++风格)和快速迭代式开发

这篇讲的是作者在微软亚洲研究院参与英库拼音输入法开发时,全面采用C++11及现代C++风格进行快速迭代式开发的实战经验。项目由自然语言处理组、互联网搜索与挖掘组等多团队协作,作者作为客户端核心开发人员,将大部分精力投入编码实现。 文章从项目背景切入,分享了在实际开发中如何利用C++11的新特性(如lambda表达式、自动类型推导、移动语义等)以及现代C++编程风格(如Herb Sutter提出的Elements of Modern C++ Style)来提升代码简洁性、性能和协作效率。作者结合输入法开发的具体场景,讨论了这些技术如何支持快速迭代,例如通过改进内存管理和并发处理来加速功能开发与测试循环。 对于C++开发者来说,这篇经验文章提供了可借鉴的实践案例,展示了如何将现代语言特性融入日常开发流程,以应对快速变化的产品需求,从而提高整体开发效能和代码质量。

本机暂存
IT 2012-09-10 23:27:42 / 累计浏览 3,841

创业并快乐着的六个习惯

这篇分享来自Buffer创始人Joel Gascoigne的创业心路。他回顾了自己从决定创建Buffer,到此前长达一年半的另一段创业旅程,在近2年多的实践中,逐渐提炼出了一套能让自己在创业高压下保持快乐与平衡的规律。 文章并没有谈论复杂的产品策略或融资技巧,而是聚焦于创业者的内在状态。作者发现,快乐并非偶然,而可以通过一些刻意的习惯来培养。这些习惯帮助他应对创业必然伴随的起伏,让过程本身变得可持续。比如,如何设定节奏、处理压力、从日常工作中获取正反馈,这些具体的行动准则构成了文章的核心。 对于技术创业者和开发者来说,这篇文章的价值在于,它跳出了“增长黑客”或“技术架构”的视角,从更本质的“人”的层面提供洞察。它提醒我们,打造一款成功的产品,首先需要构建一个能持续创造、保持健康的自己。文中分享的习惯具体且具有可操作性,能为身处长期项目中的读者提供切实的参照。

本机暂存
IT 2012-09-10 22:58:53 / 累计浏览 7,673

聊聊ThoughtWorks面试

这篇分享的是一位应聘者亲历ThoughtWorks面试的全过程与深度思考。文章细致梳理了从技术笔试、一对一技术面、案例讨论到小组情景模拟的完整流程,清晰呈现了每个环节如何考察应聘者的不同维度。 作者特别指出,ThoughtWorks的面试并非单纯考察编码能力或特定技术栈的掌握程度。例如,现场编程题更注重思维过程的清晰与沟通,案例讨论则看重对业务价值的理解与权衡。整个流程被设计成一次综合性的职业能力评估,尤其侧重考察应聘者解决开放性问题的思路、协作沟通能力以及对软件工程价值观的理解。 这种面试设计的底层逻辑,实际上是将未来的工作场景前置,让面试官在真实互动的动态过程中判断候选人是否适合公司的文化与工作模式。对于读者而言,无论是否目标为ThoughtWorks,这篇文章都提供了关于现代技术公司面试趋势的洞察——即对综合思维与软性技能的重视正日益凸显。

本机暂存
IT 2012-09-06 23:41:20 / 累计浏览 3,956

敏捷开发者必读书籍

这篇整理了敏捷开发者在工程实践、团队协作与持续改进等不同维度上的核心书单。作者从“工具思维”和“系统思维”两个层面切入,推荐了涵盖估算规划、持续交付、测试驱动开发与团队协作的多部经典。 书中既讲解了《敏捷估算与规划》如何将故事点、燃尽图与发布计划落地,也剖析了《持续交付》中从代码提交到生产部署的完整流水线设计;《测试驱动开发》则通过红绿重构的循环,展示了如何在开发中内置质量防线。针对团队沟通痛点,《敏捷教练》一书提供了具体的引导技巧与反馈模型,而《重构》则从代码层面示范了如何通过小步修改维持系统健康度。 这份书单并非泛泛而谈,而是结合具体技术实践(如依赖管理、验收测试自动化)和团队场景(如远程协作、需求梳理),指明了每本书最能解决的典型问题。对于想在速度与质量间找到平衡的开发者,这些书籍构成了从个人编码到团队工程化升级的清晰路径。

本机暂存