Skip to content

四火的唠叨

一个纯正程序员的啰嗦

Menu
  • 所有文章
  • About Me
  • 关于四火
  • 旅行映像
  • 独立游戏
  • 资源链接
Menu

Category: Recommended

“残酷” 的事实

Posted on 10/21/201510/01/2024 by 四火

crazy

下面这些文字来自我在知乎的回答:“在真实工作中的编程是怎么样的,与学校里有什么不同?”。

入行愉快。

首先,一言以蔽之,用两个字来概括,就是 “残酷”,但是,好在是加引号的。有的不但残酷,还很无奈;有的则是在残酷的同时,还很有趣。搞工程和学校里的象牙塔大不相同,这也许老早就知道,但是绝对不是七八年前我想象的模样。你可以把它当成我没睡醒的呓语,也可以当成我喝多的胡话,或者是心情太差的时候写的吐槽檄文。反正,它们就在那里,事实就在那里。

总的来说,学校里面编程,或者在工作之余编程,是很有趣的,没有 manager 给你各种压力,也没有各种大神(比如 TMP、PM、SE 等等我都搞不清楚干嘛的职位)给你指点

[……]阅读全文

Continue reading

七年工作,几个故事

Posted on 08/22/201506/23/2019 by 四火

journey

从毕业工作到现在,已经有七个年头,年头虽然不久,但是回过头来看看那些经历的好的坏的有趣的扯淡的事情,还是有很多东西可以总结。所有人都会或多或少走弯路,本来成长就是这样一个过程,有时候想起来会感叹,有时候会唏嘘,有时候会一笑而过。我的前一半时间是在华为,这段时间留给我很多回忆(比如这几个瞬间);后半时间在亚马逊,也给了我不少感慨的机会。下面这些故事都是我经历的真真实实的事,有的事情已经过去好久,但我不想把它永远尘封。也许你和我在某些方面,会有共同的体会。

在我说这些故事前,或者说,吐这些槽前,我想说这样三个观点。

首先,为自己工作。

不是为父母,不是为同事,不是为公司,[……]阅读全文

Continue reading

从 Java 和 JavaScript 来学习 Haskell 和 Groovy(汇总)

Posted on 07/24/201510/08/2024 by 四火

programming language

这是这个系列的最后一篇,从编程范型的角度概览,前面几篇的链接在文章后半部分有汇总。

我在之前已经介绍过编程范型的概念,而事实上,我们到现在为止,纠结在这四门迥异的语言上面,浅看是各种语言特性,深看就是编程范型和思维方法。

下面这张 “神图” 来自于这里,可以说是对于范型和语言归类的概览,从左往右从更强的声明式向着更弱的声明式发展;依据状态分为 Unnamed state(串行或并发,包含逻辑式和函数式这几种分类)、Nondet. state(所谓的不确定性状态)和 Named state(包含数据流、消息传递和状态共享这几种分类),Haskell 出现在了左侧函数式语言的分支内,而 Java 出现在了右侧

[……]阅读全文

Continue reading

一道随机数题目的求解

Posted on 03/13/201506/23/2019 by 四火

random 有这样一道算法题:

给定一个能够生成均匀 1~5 随机枚举数的函数,请设计一个能够生成均匀 1~7 随机枚举数的函数。

就是说,有一个生成随机数的函数 rand5,可能返回 1、2、3、4、5 这 5 个枚举值,其中每个值被返回的概率都是严格的 1/5,现在需要设计一个类似的随机数函数 rand7,可能返回 1、2、3、4、5、6、7 这几个枚举值,每个值被返回的概率都是严格的 1/7。

先掩卷思考,脑海中浮现的思路包括:

  • 调用 rand5 的结果除以 5,再乘以 7,这样的结果范围为 7/5~7,并非所希望的结果;
  • 反复调用 rand5 函数 7 次,结果再除以 5,这样的结果范围为也为 7/5 ~ 7,并非所希

[……]阅读全文

Continue reading

层次

Posted on 07/19/201406/23/2019 by 四火

level

以下文字,看看就好,笑笑就好。

最近在被一个问题折磨,大致上是,公司内部某些技术更替的关系,要把原有的一个鉴权的组件 A 淘汰掉,迁移到一个新的替代品 B 上,我估摸着也就一天时间搞定它绰绰有余了。没料想一猛子扎进去就没那么容易出来了,替换完成以后的测试傻了眼,发现了一个诡异的问题,于是追根溯源,把牵涉进来的林林总总一一拖出来检查排除枪毙,环境比较复杂,debug 起来又比较头疼,折磨了三天半的时间;最后还靠这个替代品 B 的问题列表里面,有某下游产品的工程师跳出来说是这个替代品自身有问题,分析代码怀疑是如何如何的一个 bug,于是我也按照这个思路修改它的代码,编译并且打上补丁以后,才发现确实修复了我遇

[……]阅读全文

Continue reading

Dynamo 的实现技术和去中心化

Posted on 04/28/201406/23/2019 by 四火

Amazon Dynamo 是分布式的 key-value 系统,最近阅读了 Dynamo 最初的论文 《Dynamo: Amazon's Highly Available Key-value Store》,本文想聊一聊它的去中心化(decentralization)。既有阅读相关材料后对其实现的理解,也有自己的思考,其中如有不正确言论欢迎指出。

中心节点

通常,我们见到的分布式存储结构都是具备中心(总控)节点的,比如 Google File System(GFS),包括了中心的 Master 和数据节点 Chunck Server;再比如 HDFS,包括了中心的 Name Node 和数据节点 Data

[……]阅读全文

Continue reading

也谈谈全栈工程师

Posted on 03/29/201410/01/2024 by 四火

thinking

纵使目标再大,人的精力有限,于我来说,早些时候远大目标隐约是 “成功的软件工程师” 这个样子,但是目标是需要逐渐细化的。这些年我渐渐对自己的定位和未来有了一个清晰一点的认识。确实我有很强的观点,觉得软件工程师需要有足够的全面性,在 《我眼中的工程师文化》中我也说 “工程师文化,不是只有权力的一面,它对工程师的要求,是每个人都要足够能干,都要做许多的事”……

但是,全面性不代表没有专精、没有方向。深度和广度统一的问题已经有许许多多过往的人和我说过了,不存在一个在某一领域精深的牛人但是知识却很窄,也不存在一个博学大师但是却没有一个自己擅长的领域;而方向更是不可回避的问题,以前和朋友开玩笑总结 [……]阅读全文

Continue reading

多重继承的演变

Posted on 03/19/201410/08/2024 by 四火

think

本来想告一段落别写编程范型的东西,但是这个话题最近发现很有意思,就拣出来唠一唠。从中除了能看出很多有趣的语言特性,观察不同语言的设计,还可以发现程序语言的发展过程。这里谈到的语言特性,都是从 C++的多重继承演变而来的,都没法完整地实现和代替多重继承本身,但是有了改进和变通,大部分功能保留了下来,又避免了多重继承本身的问题。

C++的多重继承

这个问题我觉得需要从老祖宗 C++谈起,我记得刚开始学 C++的时候老师就反复教育我们,多重继承的问题。比如说二义性问题,也就是说,两个父类如果定义了同名的方法,调用它的时候编译器就不知道怎么办了。

但是需要说清楚的是,多重继承确实是有其使用场景的,

[……]阅读全文

Continue reading

编程范型:工具的选择

Posted on 03/10/201410/08/2024 by 四火

programming language 这是我写的关于编程范型的文章中最后一篇。

在 《编程的未来》里面提到过,很多时候脑子里的算法还是不容易转变成代码,大部分情况下这不是你编码技巧的问题,而是编程语言的问题,或者更严格地说,是编程语言选择的问题。除了复杂性这个软件唯一的敌人,其它真正的困难,早就被数学家们解决了,如果问题和它的解决能够用数学轻松地表述出来,那计算机只是工具而已。极端地说,如果有合适的工具,那么就选择一个;如果没有,那么可以创造一个。仅此而已。

工程师的乐趣,大抵在解决实际问题上,既有解决问题的成就感,也有解决问题的过程。而为了解决问题,又需要分析问题,选择合适的工具,再来使用工具解决问题这几部分。我们对于各种设计模

[……]阅读全文

Continue reading

GWT 初体验

Posted on 02/11/201410/08/2024 by 四火

GWT

最近体验了一下 GWT(Google Web Toolkit),其实这个技术老早就有了,写 Java 代码,代码很像 AWT 或者 Swing,但是最后编译成一个 war 包,也就是说,没有啰嗦的 JavaScript、HTML 和模板语言,Java 从前到后通吃,常用的模块都被封装成组件了。虽说写起来代码还挺啰嗦的(写法上面居然不支持链式调用,这确实让我看不懂),而且也没有传统 Web 开发方式来得直观,但也算一种很有意思的开发方式,值得体验一下。网上有足够多的教程,要系统地学习,官方文档是最好的材料,非常详尽。而我的方式,则更具个人风格一点,比较+吐槽,这可不是教程。

工程结构

我是用 Eclipse+Goo

[……]阅读全文

Continue reading

java.util.concurrent 并发包诸类概览

Posted on 01/04/201406/23/2019 by 四火

Concurrency

java.util.concurrent 包的类都来自于 JSR-166:Concurrent Utilities,官方的描述叫做“The JSR proposes a set of medium-level utilities that provide functionality commonly needed in concurrent programs. ”。作者是大名鼎鼎的 Doug Lea,这个包的前身可以在这里找到,它最好的文档就是系统的 API 手册。

当然,这里参考的 concurrent 包来自 JDK7,比最初 JDK1.5 的版本有了不少改进。我曾经在 《Java

[……]阅读全文

Continue reading

从 DCL 的对象安全发布谈起

Posted on 12/28/201306/23/2019 by 四火

lock

对于 DCL(Double Check Lock)情况下的对象安全发布,一直理解得不足够清楚;在通过和同事,以及和互联网上一些朋友的讨论之后,我觉得已经把问题搞清楚了。我把我对这个问题的理解简要记录在这里。

现在有代码 A:

class T {
	private static volatile T instance;
	public M m; // 这里没有 final 修饰

	public static T getInstance() {
		if (null == instance) {
			synchronized (T.class) {
				if (null ==

[……]阅读全文

Continue reading

不同团队的困惑

Posted on 11/23/201306/23/2019 by 四火

team

小 S 是一名新员工,他和很多踌躇满志的大学毕业生一样,实习+工作,他来到了一家非常对口自己爱好的公司,来到了一支温暖的团队 A,这支 30 人的大团队由老员工和新员工混合组成,年龄结构复合,有男有女,有从二十几岁到四十几岁的程序员,做的视频编解码项目。整个项目组的成员都是视频编解码领域的能手或专家,最多的有 10 年的相关经验,也有几项专利,小 S 觉得这样的人应该很耐得住寂寞,有很深的造诣。

有一位导师手把手地带着他学习和进入项目,陪他一起吃饭,和他聊天,给了他公司内部通用的学习材料。于是他很快上手,最开始有一些疑惑,但是小 S 积极地去询问问题,导师和同事都很乐于帮助他,于是他进步很快。公司有一个专门帮

[……]阅读全文

Continue reading

不适合 Hadoop 解决的问题

Posted on 11/11/201312/26/2019 by 四火

因为项目的需要,学习使用了 Hadoop,和所有过热的技术一样,“大数据”、“海量” 这类词语在互联网上满天乱飞。Hadoop 是一个非常优秀的分布式编程框架,设计精巧而且目前没有同级别同重量的替代品。另外也接触到一个内部使用的框架,对于 Hadoop 做了封装和定制,使得更满足业务需求。我最近也想写一些 Hadoop 的学习和使用心得,但是看到网上那么泛滥的文章,我觉得再写点笔记一样的东西实在是没有价值。倒不如在漫天颂歌的时候冷静下来看看,有哪些不适合 Hadoop 解决的难题呢?

Hadoop

这张图就是 Hadoop 的架构图,Map 和 Reduce 是两个最基本的处理阶段,之前有输入数据格式定义和数据分片,之后 [……]阅读全文

Continue reading

留心那些潜在的系统设计问题

Posted on 09/19/201306/23/2019 by 四火

500在系统设计阶段考虑全面很难,有许多人倾向于把整个设计分成若干阶段,在迭代中完成整个设计,这本身是非常好的,但是,就如同 “先做出来,以后再优化” 这样的经典谎言一样,本身并无错,只是许多程序员都不习惯于真正的迭代设计和迭代优化。举例来说,有一个日益复杂的类,每个人都修改一点点,一直到最后都没有人愿意去做重构,大家的心态都是一样的:“我只修改了一点点,为什么要我去动那么大的刀,于我没有任何好处”。我不在这里谈论这一问题的解决办法,我倒是想说,在开始阶段考虑清楚问题在多数情况下还是很有好处的,设计考虑得越是清楚,在后续阶段代码可以承受越多的变更而不腐朽。

再做系统设计的时候,我们常常会这样说:“一般

[……]阅读全文

Continue reading

再谈大楼扔鸡蛋的问题

Posted on 05/19/201306/23/2019 by 四火

egg 这道题是说,100 层楼,两个一模一样的鸡蛋,某层之上扔鸡蛋就会碎。问要测试多少次才能找出这层楼来。我曾经在去年初的这篇文章里面讨论过这个问题的解法,因为只想记录一下思路和讨论过程,写得很简略。现在,我想重新整理一下这个问题,再稍稍扩展和挖掘一下。希望可以用尽可能清晰易懂的描述,把这个问题的前后说清楚。

现在只有两个鸡蛋,而算法必须在各种合法输入下都是可行的,就是说要能找出这一层来,你得假设你的运气最差,这就意味着,我求解的是在每种扔鸡蛋的策略下都有一个需要扔的次数的最大值,而现在需要求解的是这些最大值中的最小值的问题。如果我只有一枚鸡蛋,这就意味着,我只能从第一层开始老老实实地一层一层往上试

[……]阅读全文

Continue reading

几种华丽无比的开发方式

Posted on 01/22/201306/23/2019 by 四火

work 不要被我的标题骗了。我可不是来宣扬什么模型驱动开发,或者什么测试驱动开发的,那些都弱爆了。今天我要说的,是几种看起来激动人心、华丽无比,但是可以让程序员们痛苦不堪的开发方式,特别适合那些热衷于折磨虐待程序员的项目经理和产品经理们。当然,掌握以后,偷偷用就好了,请不要来感谢我。

 

进度驱动开发(SDD,Schedule Driven Development)

这是在国内最为流行的开发方式,大家心照不宣,口口相交,代代相传,我只是把它写下来而已。它最华丽的地方在于,可以百分之百,甚至百分之二百地压榨程序员的劳动力。

需要实现哪些需求?用什么技术?用什么平台?项目采用什么流程管理?这些

[……]阅读全文

Continue reading

我眼中的工程师文化

Posted on 12/10/201206/23/2019 by 四火

facebook 现在 HR 和猎头也懂得,挖程序员不能光讲钱和项目了,多少号称工程师文化的公司花开北京上海,可是到底什么是“ 工程师文化”?谁能给一个准确的定义?

有人说,什么文化就是什么说了算的意思,工程师文化就是工程师说了算。这未免也太肤浅了。也有人说,工程师文化就是自由上下班、松散管理,做喜欢的项目。我想这依然是不恰当的,这些人只说出了工程师文化给工程师带来的权利,更何况这种对权利的认定还是片面的。

工程师文化的核心是什么:价值观。但是,它不止价值观。我在这篇文章中提到过工程师文化:

  • 首先,这个世界上大部分软件公司采用工程师文化的模式来运作的话,都会死得很惨。
  • 其次,

[……]阅读全文

Continue reading

观点的碰撞

Posted on 12/03/201206/23/2019 by 四火

argue 几周前我写了一篇文章,《对几个软件开发传统观点的质疑和反驳》,微博上、独立域名的博客上,还有 ITEye 网站上,都有一些评论的朋友给了我许多事实和观点。我觉得这些评论,似乎都有理由,无所谓对错,这些是有价值和有意义的文字。相较于那些“ 顶”、“ 支持”、“SB”、“ 沙发”…… 纯灌水或者是没什么意义的信息垃圾,这些文字要显得珍贵得多。

最近看了两本软件和创业方面的书,我的世界观总在不断小范围地崩塌和建立。现在愈发觉得,到底何谓对错,到底何为黑白,我是不是受到中国传统教育毒害太

[……]阅读全文

Continue reading

谈谈盗版软件问题

Posted on 11/15/201210/02/2024 by 四火

pirate 一直很想谈谈这个话题,就从程序员的角度。只是思路一直很混乱,感觉要说的点很多,却没有任何条理。我相信你和我一样,对盗版软件有着自己的看法。自计算机普及以来,盗版和反盗版的话题就从未停止过。

我在这里并不想过多地做出非黑即白的表态,我只想从程序员的视角去看看盗版给程序员的工作和生活、给软件行业带来了怎样的影响。对于盗版的态度,每个人心中都会有答案。在这个问题上,我们需要一些公正和客观的立场,所谓的训诫者和鼓吹者,还有那些无架不欢的愤青们,是会遭到抵触的。

这把剑下,到底淌着谁的血?

欢迎盗版的大有人在。有哪位程序员没用过盗版软件?盗版软件,一度极大地帮助了程序员成长,没有盗版,中国哪有那么多 W

[……]阅读全文

Continue reading
  • Previous
  • 1
  • 2
  • 3
  • Next

订阅·联系

四火,啰嗦的程序员一枚,现居西雅图

Amazon Google Groovy Hadoop Haskell Java JavaScript LeetCode Oracle Spark 互联网 亚马逊 前端 华为 历史 同步 团队 图解笔记 基础设施 工作 工作流 工具 工程师 应用系统 异步 微博 思考 技术 数据库 曼联 测试 生活 眼界 程序员 管理 系统设计 缓存 编程范型 美股 英语 西雅图 设计 问题 面向对象 面试

分类

  • Algorithm and Data Structure (30)
  • Concurrency and Asynchronization (6)
  • System Architecture and Design (43)
  • Distributed System (18)
  • Tools Frameworks and Libs (13)
  • Storage and Data Access (8)
  • Front-end Development (33)
  • Programming Languages and Paradigms (55)
  • Testing and Quality Assurance (4)
  • Network and Communication (6)
  • Authentication and Authorization (6)
  • Automation and Operation Excellence (13)
  • Machine Learning and Artificial Intelligence (6)
  • Product Design (7)
  • Hiring and Interviews (14)
  • Project and Team Management (14)
  • Engineering Culture (17)
  • Critical Thinking (25)
  • Career Growth (57)
  • Life Experience and Thoughts (45)

推荐文章

  • 聊一聊分布式系统中的时间
  • 谈谈分布式锁
  • 常见分布式系统设计图解(汇总)
  • 系统设计中的快速估算技巧
  • 从链表存在环的问题说起
  • 技术面试中,什么样的问题才是好问题?
  • 从物理时钟到逻辑时钟
  • 近期面试观摩的一些思考
  • RSA 背后的算法
  • 谈谈 Ops(汇总 + 最终篇):工具和实践
  • 不要让业务牵着鼻子走
  • 倔强的程序员
  • 谈谈微信的信息流
  • 评审的艺术——谈谈现实中的代码评审
  • Blog 安全问题小记
  • 求第 K 个数的问题
  • 一些前端框架的比较(下)——Ember.js 和 React
  • 一些前端框架的比较(上)——GWT、AngularJS 和 Backbone.js
  • 工作流系统的设计
  • Spark 的性能调优
  • “残酷” 的事实
  • 七年工作,几个故事
  • 从 Java 和 JavaScript 来学习 Haskell 和 Groovy(汇总)
  • 一道随机数题目的求解
  • 层次
  • Dynamo 的实现技术和去中心化
  • 也谈谈全栈工程师
  • 多重继承的演变
  • 编程范型:工具的选择
  • GWT 初体验
  • java.util.concurrent 并发包诸类概览
  • 从 DCL 的对象安全发布谈起
  • 不同团队的困惑
  • 不适合 Hadoop 解决的问题
  • 留心那些潜在的系统设计问题
  • 再谈大楼扔鸡蛋的问题
  • 几种华丽无比的开发方式
  • 我眼中的工程师文化
  • 观点的碰撞
  • 谈谈盗版软件问题
  • 对几个软件开发传统观点的质疑和反驳
  • MVC 框架的映射和解耦
  • 编程的未来
  • DAO 的演进
  • 致那些自嘲码农的苦逼程序员
  • Java 多线程发展简史
  • 珍爱生命,远离微博
  • 网站性能优化的三重境界
  • OSCache 框架源码解析
  • “ 你不适合做程序员”
  • 画圆画方的故事

近期评论

  • Ticket: TRANSACTION 1.922915 BTC. Go to withdrawal >> https://yandex.com/poll/enter/BXidu5Ewa8hnAFoFznqSi9?hs=20bd550f65c6e03103876b28cabc4da6& on 倔强的程序员
  • panshenlian.com on 初涉 ML Workflow 系统:Kubeflow Pipelines、Flyte 和 Metaflow
  • panzhixiang on 关于近期求职的近况和思考
  • Anonymous on 闲聊投资:亲自体验和护城河
  • 四火 on 关于近期求职的近况和思考
  • YC on 关于近期求职的近况和思考
  • mafulong on 常见分布式基础设施系统设计图解(四):分布式工作流系统
  • 四火 on 常见分布式基础设施系统设计图解(八):分布式键值存储系统
  • Anonymous on 我裸辞了
  • https://umlcn.com on 资源链接
© 2025 四火的唠叨 | Powered by Minimalist Blog WordPress Theme