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

开发者

共 800 篇文章

IT 2013-09-23 13:49:40 / 累计浏览 3,907

我是如何变成一个Loser的

这篇讲的是一个技术团队管理者,通过复盘自己亲手将部门带向解散的全过程,为我们总结出了一份“避坑指南”。 作者坦诚地分享了自己在担任部门主管一年间的四大失误:对新加入的实习生队友缺乏足够的引导与关怀,未能形成团队凝聚力;在团队技术栈上反复摇摆(C#/PHP/Python/Node.js),导致多人多语言、项目零散,严重消耗了本就紧张的人力;在薪酬竞争力不足时,没有为团队描绘清晰的愿景,致使士气低落、成员相继离职;以及陷入“功能实现”的技术自嗨,忽略了产品本身的体验和价值。 这些看似是管理“大忌”的错误,恰恰构成了真实而宝贵的反面案例。文章没有空谈理论,而是用具体的项目选择、团队配置和个人心路历程,刻画了技术驱动型团队可能面临的典型困境。对于每一位带团队或即将带团队的技术人来说,这些从“Loser”视角提炼出的教训,或许比成功经验更值得引以为戒。

本机暂存
IT 2013-09-23 13:44:19 / 累计浏览 2,441

那些被大佬带进沟里的名言

这篇探讨的是技术圈里那些被“大佬”名言带偏的经典案例。文章以轻松又不失犀利的口吻,剖析了诸如“注重用户体验”、“小步快跑”、“不断试错”、“做轻做小”和“接地气”等流行理念,如何因片面理解而沦为产品开发中的陷阱。 作者用“旋风将军”攻城却不守的比喻,戳破了“小步快跑”只跑不顾运营的幻想;以《三体》的“黑暗森林法则”提醒,“试错”并非毫无章法的冒险,首战即败的代价往往致命。文章指出,这些口号被剥离了关键前提——小步快跑需兼顾运营,试错需谨慎开局,做轻只是切入手段,而“接地气”更不等于恶俗。 最终,作者将讨论引向更深层的认知:产品设计的内核并非优雅的界面,而是切实的价值创造。真正的成功,始于创意,成于持续、深度的运营设计。那些起势汹涌却无疾而终的产品,大多败在了对“运营”这一脏活累活的轻视上。

本机暂存
IT 2013-09-23 13:36:30 / 累计浏览 3,102

打开视野

这篇讲的是作者在ThoughtWorks做面试官时,观察到一种普遍的成长瓶颈。许多在原公司表现不错的程序员,面试时却在宏观思考和问题陈述上显得零散,因为他们长期只负责执行被“嚼碎”的具体问题,视野被日常项目所限。 作者指出,视野的局限会让程序员误把“局部峰值”当成自己的水平。他给出的解药是主动打破环境限制:通过互联网接触更广阔的天地和高手的思维方式;阅读经典书籍进行系统学习;以及走出去参加技术聚会,以近乎零成本的方式与不同经验的人交流。 文章最后,作者用自己早年的故事做了印证:当他在东软感到能力“过饱和”时,正是凭借对外部世界的好奇和探索,最终加入了能持续激发成长的ThoughtWorks。他想提醒的是,具体学什么、怎么学是后话,程序员最怕的是固步自封,第一步永远是把视野打开。

本机暂存
IT 2013-08-28 22:22:29 / 累计浏览 6,721

在命令行快速切换目录

这篇讲的是如何告别在命令行中反复输入冗长的 `cd` 路径。作者从日常开发中频繁切换到 `~/some/very/deep/often-used/directory` 这类深层目录的痛点出发,分享了一个通过修改 shell 配置文件来实现的“目录书签”方案。 核心思路是利用 `mark` 命令为当前目录创建一个别名,之后只需输入 `g 别名` 即可瞬间跳转。此外,`gs` 命令可以一览所有已标记的目录。实现上非常巧妙,作者在 `/etc/profile` 文件尾部添加了一组 shell 函数,包括 `g`(跳转)、`mark`(标记)、`unmark`(取消标记)和 `gs`(列表),并利用 `ln -s` 创建符号链接来持久化这些书签,最终还为 `g` 命令配置了命令行补全功能。 这个方案完全用原生 shell 脚本实现,无需安装额外工具,却能极大提升在复杂目录结构中导航的效率。对于经常在终端工作的开发者来说,花几分钟配置一下,就能永久解决路径切换的烦恼。

本机暂存
IT 2013-08-26 22:55:36 / 累计浏览 4,885

又是一年校招时 – 关注简历书写的细节

这篇从技术招聘方的视角出发,基于实际筛选数十份校招简历的经验,总结了直接影响简历通过率的16个关键细节。作者为每一项建议设置了加分值,让要点的重要性一目了然。 其中,拥有高质量的技术博客、开源项目或实际产品,以及获得ACM等重量级竞赛奖项,被视为最具竞争力的亮点,单项加分高达9分。相比之下,简历文件名的规范、排版专业性、是否有英文版等细节虽然单项分值不高,却能体现候选人的做事习惯和细心程度。 文章也直指常见误区:简单罗列课程或参与过的项目往往无效;使用“全程参与”、“持续参与”等模糊描述无法展现个人贡献;技能栏仅写“了解”或“熟悉”难以获得面试官认可。对于硕士生,明确“精通”或“深入研究”某项技术更为重要。 对于本科生,作者建议更需主动挖掘和突出一两个技术亮点。整体上,这份清单提醒求职者,一份好的简历是精准的自我营销,需要站在筛选者的角度,用具体成果和清晰表述来争取机会。

本机暂存
IT 2013-08-14 13:46:25 / 累计浏览 5,661

为什么C语言需要函数声明

这篇讲的是作者从同事遇到的一个诡异bug出发,揭示了C语言中“函数声明”为何不可或缺。同事的代码中,一个返回double的函数,在函数内部打印的值和外部接收到的值差异巨大。通过反汇编,作者发现了关键线索:编译器生成了一条将整型转换为双精度浮点的指令(cvtsi2sd)。 根因在于,当函数在别的源文件中定义,而调用方没有其声明时,编译器在编译阶段并不知道该函数的真实面貌。它会默认函数返回整型(放入eax寄存器)。由于调用方实际期望一个浮点值(应放入xmm0寄存器),编译器就在调用后强行做了一次类型转换,从而导致了值的错误。问题不仅限于返回值,未声明的函数参数也会导致编译器忽略类型检查,可能引发更隐蔽的栈或寄存器传参错误。 作者指出,现代编译器如GCC能通过-Wimplicit-function-declaration选项对此发出警告。根本的解决之道是养成良好习惯,开启-Wall选项,并确保在使用任何外部函数前都进行正确声明。

本机暂存
IT 2013-08-13 13:34:03 / 累计浏览 8,083

学你妹的计算机!

这篇带着情绪的吐槽,实际上指向了一个现实问题:计算机专业的学习与就业市场之间是否存在落差?作者从一则引发讨论的新闻事件出发,汇集了知乎回答、媒体报道和微博信息等多方声音,勾勒出当时部分从业者和学习者的迷茫与自嘲心态。 文章没有进行严谨的数据分析或行业调研,而是通过情绪化的标题和直接引用来传递一种集体感受——对“学计算机”价值的困惑,以及面对就业压力的无奈调侃。这种自嘲背后,其实隐含着对技术学习路径和行业前景的深层思考。 它更像是一次情绪共鸣的记录,而非技术探讨,但恰恰因此真实地反映了特定时期技术社群内的一种普遍心态。对于经历过或正在经历类似阶段的读者来说,或许能从中看到自己或同行的影子。

本机暂存
IT 2013-08-12 13:56:31 / 累计浏览 6,748

十五个只有程序员会乐的事情

这篇合集收集了十五幅只有程序员才会会心一笑的漫画,用幽默的方式刻画了程序员独有的工作场景与日常体验。从标志性的“大水杯”、项目开始与结束时的鲜明对比,到用编程语言改写爱情故事,作者敏锐地捕捉到了那些潜藏在代码、调试与产品迭代背后的微妙情绪。 这些段子的笑点往往建立在共同的技术语境之上——无论是浏览器兼容性的困扰、项目状态在“开始”与“完成”之间的漫长徘徊,还是将祈求服务器稳定的姿势变成一种仪式。它们不仅描绘了熬夜调试的疲惫、面对需求变更的无奈,也轻松地调侃了程序员特有的表达方式与生活痕迹,比如用二进制纹身。 文章没有深奥的分析,而是通过这种轻松自嘲的漫画集,为技术读者提供了一面共鸣的镜子,也为非技术读者打开了一扇理解程序员幽默感的窗户。它本质上是一次对程序员文化的趣味性扫描,让那些淹没在逻辑与字符中的情感变得可见而可爱。

本机暂存
IT 2013-08-12 13:52:33 / 累计浏览 4,387

数据即代码,我和小伙伴们都惊呆了!

这篇文章从一个实际的技术需求——设计命令行参数解析API出发,对比了几种从简单到复杂的代表性方案。作者以“小伙伴们”的视角,先点评了C语言经典的getopt()函数,它功能基础,只能处理单字符选项,面对复杂场景力不从心。接着是Google的gflags,通过宏定义选项,好用但能力有限。然后探索了Ruby Commander和Lisp cmdline库,它们语法炫酷、功能强大,却也因复杂或晦涩增加了学习成本。 对比最终聚焦到Node.js的LineParser库。仅仅用一个结构清晰的JSON对象,就完整定义了程序信息、子命令、各类选项及默认值、多种使用模式,并支持自动生成帮助信息。这种“数据即代码”的设计,不仅实现了前面几种方案的大部分甚至全部功能,更难得的是直观、易懂。文章通过这个探索过程,清晰展现了命令行解析从过程式、宏到数据声明式的演进,其核心启示在于:优秀的API设计,有时恰恰是让复杂逻辑回归到简洁、直观的数据描述中。

本机暂存
IT 2013-08-12 13:34:04 / 累计浏览 4,168

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

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

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

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

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

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

编程中的硬编码问题

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

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

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

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

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

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

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

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

学习搭建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,108

加班与效率

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

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

程序员最怕的事

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

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

论“重复造轮子”

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

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

编码风格不是编码规范

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

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

Linux大棚版gtest官网教程译文

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

本机暂存