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

开发者

共 811 篇文章

IT 2013-11-20 00:17:15 / 累计浏览 3,532

程序员的18个有趣的事实

这是一篇充满黑色幽默与职业共鸣的程序员文化观察。作者从开发日常中提炼出18条令人会心一笑的“真理”,精准捕捉了程序员群体在自嘲中展现的独特智慧。 文中的事实从多个角度切入:有对版本迭代的幽默解构(“如果第一次运行不成功,那就叫它1.0版吧”),有对bug的哲学化开脱(“那些只是开发出来的随机的功能特征”),还有对编程本质的尖锐洞察(“编程是10%的科学,20%的创造力,和70%的让这创造力符合科学”)。这些看似玩笑的语句,实际映射着调试的挫败感、对完美的执着、以及咖啡与代码间的生化反应。 文章没有停留在单纯的趣味列举。它像一面镜子,照见了程序员在理性框架下的感性挣扎:既抱怨被用户“不够友好”地对待,又承认自己或许“没有源代码”去改变世界;既明白代码错误需用一生维护,又依然享受着编译通过瞬间的纯粹快乐。这种矛盾恰恰揭示了这个职业最真实的核心——在严谨的逻辑系统中,依然保有鲜活的人性与创造力。 读罢这些事实,你或许会笑,但更会思考:在那些看似怪诞的幽默背后,藏着多少深夜调试时的心照不宣,又定义着怎样一种用逻辑丈量世界的浪漫。

本机暂存
IT 2013-11-19 23:20:30 / 累计浏览 4,108

十种更好的表达“你的代码写的很烂”的方法

如何指出代码质量问题是许多技术团队避而不谈的尴尬。直接说“你的代码很烂”可能引发对抗,而沉默或抱怨又无法解决问题。这篇文章正是从这个常见的协作困境出发,提供了十个具体、可操作的沟通策略。 作者并非空谈理论,而是结合了iOS开发者Tim Burks、Adobe研究员Tom Jacobs等业内人士的实践智慧。这些方法的核心思路是将“批评”转化为“协作邀请”。例如,“开门见山”法不是指责,而是诚恳地请求对方帮你理解代码逻辑;“糖衣炮弹”法则在提出改进点前后,先肯定代码中值得学习的部分;“偷换概念”法通过改变主语(如“我需要重构这段代码”而非“你写得乱”),有效降低对方的防御心理。 文章最实用之处在于,它揭示了所有这些技巧的共同点:将对话焦点从评判“人”转向优化“代码”本身。无论是通过非正式的啤酒聊天来理解对方的编码习惯,还是通过组织编程大赛来营造安全的讨论氛围,目标都是让代码质量提升成为团队共同追求的目标,而非个人之间的对错之争。对于任何需要进行代码评审或团队协作的开发者,这些沟通心法都值得借鉴。

本机暂存
IT 2013-11-05 23:26:58 / 累计浏览 4,907

个人订阅的10佳博客与相关介绍

作者从自己长期订阅的200多个涵盖数据库、编程、分布式系统等领域的技术博客中,根据更新频率、文章质量及对自身实际帮助等标准,精心挑选并介绍了10个“宝藏级”博客。 这些推荐并非简单罗列,而是作者多年深度阅读后的经验沉淀。例如,ACM Queue上的文章被形容为“顶级论文水准”,尤其在并发与性能领域极具价值;Amazon CTO Werner Vogels的个人博客,则展现了技术领袖坚持写作与阅读论文的独特实践。此外,还介绍了系统性能优化专家Brendan Gregg的技术博客等。 这篇文章的核心在于分享一套经过实践验证的优质信息源筛选方法。对于面临信息过载的技术人而言,这10个博客提供了一个高质量的阅读起点,其筛选思路本身也比清单更具参考意义。

本机暂存
IT 2013-10-23 12:59:38 / 累计浏览 2,758

代码重构方向原则指导

这篇讲的是,当代码重构没有像“消除代码异味”那样现成的、明确的方向时,开发者可以遵循哪些具体的原则来指导决策。作者将重构比作爬山,指出在缺乏明显路径时,我们常陷入罗列更多“坏味道”模式的讨论,却鲜少给出建设性意见。 文章的核心价值在于提供了一套清晰的重构决策清单。它首先厘清了重构的两个基本方向:通过“归纳方法”分解组件以实现复用,或通过“内联方法”消除琐碎函数。随后,针对“如何知道哪种方法是正确道路”这一编程艺术中心问题,作者直接抛出了17条可操作的原则。 这些原则极具针对性,例如:偏向用多态(多形)替代switch语句;不确定时优先使用组合而非继承;用guard语句和封装来简化条件逻辑;甚至建议尽量将代码逻辑放在model层而非controller层。这些指导超越了简单的“代码整洁”,直指提升代码可维护性、降低耦合的工程实践。对于在重构中感到迷茫的开发者,这份清单提供了一张值得参考的路线图。

本机暂存
IT 2013-10-23 12:58:46 / 累计浏览 19,418

如何写好一封邮件

这篇讲的是把“写好一封邮件”这件看似人人都会、却常常被忽视的职场基本功,拆解成一套可执行的系统。作者从知乎上的讨论出发,提炼出邮件沟通的三大核心原则。 首先是“礼貌原则”,它强调基本的尊重与专业,比如正确使用收件人与抄送栏、保持用词正式、及时回复。其次是“战地记者原则”,要求直切主题、内容单一、长度精简,确保信息高效传递。最后是“金字塔原理”,主张邮件结构应中心明确、分层叙事,并在开头用“四个W和一个H”(谁、什么、何时、为什么、如何)说清核心,引导收件人快速理解意图。 文章后半部分深入到容易忽视的格式细节。从标点符号的误用(如连续多个问号显得情绪化)、字体的谨慎选择,到段落对齐、行间距的视觉优化,都给出了具体建议。特别强调了工作邮件用词需朴实准确、多用短句、避免术语堆砌。 此外,文中还分享了重要的职场沟通智慧:邮件如同“白底黑字”,发出前需深思;避免在邮件中陷入多轮争论;抄送名单要精简且有关联。文章最后给出一个实用的写作顺序建议:先处理附件,再写正文,然后标题,最后填收件人,并在发送前出声朗读一遍。整篇文章将常见问题与解决方案结合,把邮件写作从习惯动作提升到了专业技能的高度。

本机暂存
IT 2013-10-17 12:30:06 / 累计浏览 7,278

一张图让你看懂各开源License

对于许多开发者来说,开源协议(License)那精炼却晦涩的条款读起来颇为费劲,而且像GPL、MIT、Apache这些常见的名称,它们之间的关键区别又在哪?这篇内容就聚焦于此。它没有进行冗长的文字解读,而是直接引用了一张广为流传的清晰图表,直观地拆解了各类主流开源协议的核心限制点。 图表将不同协议在“是否必须开源衍生作品”、“是否允许闭源商业使用”、“是否要求保留原作者版权”等几个关键维度上进行了横向对比。比如,MIT协议最为宽松,几乎不做限制;而GPL则有着强烈的“传染性”,要求任何修改或衍生作品都必须以相同协议开源;Apache 2.0则在提供明确专利授权的同时,也对保留修改声明有清晰要求。 通过这张图,开发者能迅速根据项目的具体需求(是希望最大程度推广,还是希望保护自身专利,或是要求回馈社区),来选择最适合的开源协议,避免了因理解偏差而带来的法律风险。它将复杂的法律文本,转化成了可直接参考的技术决策工具。

本机暂存
IT 2013-10-16 22:34:23 / 累计浏览 3,215

如何更好用业余时间做互联网创业?

这篇讲的是作者从大量业余创业者的沟通中,观察到几个容易让项目陷入困境的共性问题。他发现,技术出身的创始人往往在产品开发上得心应手,但当项目进入运营阶段,由于身份和精力的限制,推广投入不足,很容易被后来者反超。团队也存在隐忧——很多成员的参与动力只是“最近有点空”,一旦本职工作忙碌起来就容易退出,影响整体士气。此外,同时兼顾两线作战带来的疲惫感,甚至可能波及家庭生活。 基于这些观察,作者给出了几条务实的建议:要像全职项目一样设定运营里程碑,哪怕目标定低一些;在产品设计上务必精简,只做核心功能,避免野心过大;他特别指出,业余创业是降低风险的起点,而非终点。当项目验证了正向反馈后,就应考虑寻找资源转向全职,因为“鱼和熊掌不可兼得”。文章为那些在理想与现实间寻找平衡的创业者,提供了一份清醒的行动参考。

本机暂存
IT 2013-10-15 13:59:04 / 累计浏览 4,271

用TAB缩进, 用SPACE对齐

这篇讨论聚焦于一个经典争议:编程时到底该用TAB键还是空格键来缩进?作者没有简单地站队,而是提出了一个清晰且实用的区分原则。 他指出,大部分情况下TAB和空格都能正常工作,但关键在于用途。对于代码的**缩进**,即行首的空白,TAB是更优解——只需按一次键就能统一缩进层级,避免了数空格的麻烦,也终结了“用两个空格还是四个”的无谓争论。 然而,文章真正的点睛之笔在于强调“对齐”的场景。为了代码的竖直对齐(比如让等号、注释在列上整齐),**必须使用空格**。作者展示了一段代码,清晰地说明了空格在此处的不可替代性,而这与缩进是两码事。 因此,文章最终给出了一个干脆利落的结论:**用TAB缩进,用SPACE对齐**。这相当于为TAB和空格找到了各自最合适的岗位,各司其职,既提升了编写效率,又保证了代码在需要精确对齐时的美观与可读性。对于被这个小问题困扰过的开发者,这篇文章提供了一个清晰的操作指南。

本机暂存
IT 2013-10-15 13:55:03 / 累计浏览 3,322

为什么很多技术合伙人参与创业时会先谈钱?

这篇讲的是不少技术合伙人在参与创业时,为何会先提出费用或兼职需求,而这常让一些创始人感到困惑,觉得对方不够“全情投入”。 作者从十多年与技术群体打交道的经验出发,剖析了这背后的理性考量。核心观点是,这并非不信任,而是技术人员因其职业特性(如黄金期短、技术成长至关重要)在进行必要的风险控制。文章指出,技术人员若在创业项目中失败,可能面临代码价值归零和职业成长中断的双重打击,因此他们对短期回报和风险的评估更为直接。 作者还澄清,兼职常是陌生合作下的过渡阶段,一笔象征性的费用能加速产品原型验证与信任建立。这恰恰给了创始人主导项目、证明自己想法可行性的机会。文章提醒,理解技术合伙人的立场,通过具体付出与协作逐步建立信任,比空谈未来更有效,毕竟把产品做出来才是第一步。

本机暂存
IT 2013-10-08 12:27:01 / 累计浏览 6,183

在 Mac OS X 终端里使用 Solarized 配色方案

作者从自己的使用体验出发,发现长期使用终端后眼睛疲劳,于是尝试了广受推荐的 Solarized 配色方案。这篇文章详细分享了在 Mac OS X 上配置该方案的全过程。 Solarized 本身是一个覆盖广泛的配色项目,支持多种操作系统、终端和编辑器。作者指出,在 Mac 上要获得一致的视觉体验,至少需要对终端、Vim 和 ls 命令这三个环节进行配置。文章提供了具体的步骤:通过双击文件将 Dark/Light 主题导入 Terminal 或 iTerm2;将 Solarized 的 vim 配色文件复制到指定目录并在 .vimrc 中启用;对于不显示高亮的 ls 命令,则通过在 .bash_profile 中设置 CLICOLOR=1 来解决。 最终,通过这一系列设置,能够实现在终端、代码编辑和文件列表查看中保持统一的配色风格,提升长时间工作时的视觉舒适度。

本机暂存
IT 2013-09-26 22:31:43 / 累计浏览 4,591

每个程序员都应该了解的知识有哪些?

这篇内容整理自Stack Overflow一个关于“网站上线前开发者需要考虑哪些关键技术细节”的高赞问答。作者以资深开发者的视角指出,许多像Jeff Atwood这样的技术专家也可能忽略基础要点,并系统梳理了从界面体验到安全防护的核心清单。 在界面与用户体验方面,文章强调了跨浏览器兼容测试的必要性,至少需覆盖Gecko、Webkit、IE和Opera等主流引擎。同时,需关注移动端与无障碍访问(如WAI和Section508标准)等非常规使用场景。作者还提醒注意用户交互的细节,比如避免显示明文邮箱、为用户添加的链接设置rel="nofollow"属性,以及实现POST后的重定向以防重复提交。 安全部分则重点引用了《OWASP开发指南》,详细列出了应对SQL注入、XSS、XSRF等常见攻击的方法。文中特别指出,必须对用户密码进行加盐哈希处理(推荐使用bcrypt或scrypt),并切勿自创认证系统。此外,使用SSL/HTTPS加密敏感页面、及时更新系统补丁等,都是必须坚守的底线。 这些知识点虽基础,却易被实际项目中的赶工心态所忽略。文章的价值在于提供了一份清晰的自查清单,帮助程序员在追求新功能的同时,巩固这些关乎产品可用性与安全性的根本防线。

本机暂存
IT 2013-09-23 13:49:40 / 累计浏览 3,983

我是如何变成一个Loser的

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

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

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

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

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

打开视野

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

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

在命令行快速切换目录

这篇讲的是如何告别在命令行中反复输入冗长的 `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,968

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

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

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

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

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

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

学你妹的计算机!

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

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

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

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

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

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

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

本机暂存