Skip to content

四火的唠叨

一个纯正程序员的啰嗦

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

在家办公,你还有多远?

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

WFH

先上一段全球最著名的“ 在家办公” 的公司——37Signals 的宣传视频(最近他们网站变成了 Basecamp;他们有一本书《Rework》让我很喜欢,当时甚至还写了摘录,他们去年出的书《Remote》居然已经有人翻译了放在网上,感兴趣的话可以去简书看一看):

在家办公是一个经常被讨论的话题。当然,在很多软件公司甚至是一个禁忌的话题。但是,越是这样的话题,越有趣,不是吗?

对于绝大多数软件公司来说,无论算不算具备浓厚工程师文化的公司,在家办公(work from home)都应当是一个不可以缺少的组成部分。我不相信尝试把软件资产锁在公司大

[……]阅读全文

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

中国梦太遥远,还是说点实际的吧

Posted on 03/05/201406/23/2019 by 四火

dream 算不得文章,随便谈谈而已。

“ 中国梦” 是不久前热炒的词,中华民族伟大复兴神马的,尤其在最近那件云南的事情发生以后,微博上满是讨论。很显然,从小就被灌输的正能量,也是和崇尚“ 集体”、“ 共同”、“ 国家”、“ 民族” 的价值观匹配的;事实上,这也是和“ 美国梦” 的重要区别,美国梦强调天赋人权,每个人都有同样的生存、自由和追求幸福的权利。

但是事实总是和书本上不一样。优米网上有一篇揭示中国现今十大问题的文章,从食品安全、房价、物价到恶性事故,可谓针针见血。看着

[……]阅读全文

Continue reading

借助 AngularJS 写优雅的代码

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

AngularJS

接触 AngularJS 还真有点碰巧,在用 JQuery 写数据绑定的时候,我被数据对象和 DOM 之间的同步整烦了,要写一大堆方法绑定和取值/设值的代码逻辑,丑得要死。简单说来,就是:

  1. 数据对象发生变更以后,要及时更新 DOM 树;
  2. 用户操作改变 DOM 树以后,要回头更新数据对象。

这个问题还是举例来说清楚一些,比如我定义了这样一个 queryObj:

{name: "sally", price: 30}

现在有这样的 DOM 对象:

<input type="text" value="sally" />
&lt

[……]阅读全文

Continue reading

编程范型详解

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

programmingLanguage

在上一篇文章 《再谈榔头和钉子》,提到了设计模式和编程范型,相较于设计模式,编程范型往往和语言本身强相关,一种特定的语言,只适用于一种或者几种编程范型。它类似于一种编程风格,也决定了程序员是如何去认识程序的结构、交互和执行的。编程范型是程序员大脑中在设计编码阶段预先考虑到的内容,但是相较于满街跑的设计模式,这个过程往往下意识地被忽略。另外,如果你现在在思考编程范型的时候,脑海里只有“ 面向对象” 和“ 面向过程” 这两者跳出来,那可能是真的被糟糕的面向对象教材毒害太深了。

在维基百科的编程范型页面右侧,有一个相对比较完整的列表:

  • Action

[……]阅读全文

Continue reading

再谈榔头和钉子

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

hammer

不久前写过一篇 《给我一把榔头,满世界都是钉子》,从算法和数据结构的角度谈了谈对于问题和问题解决的工具这两方面我的看法;而最近看到了这样的代码,一个表格,单数行和双数行的样式不同,于是有程序员这样写道:

var trs = $("#spreadSheet tr");
for(var i=0; i<trs.size(); i++){
    if(i%2)
        $(trs.get(i)).children("td").css("color", "RED");
    else
        $(trs.get(i)).children("td").css("color", "

[……]阅读全文

Continue reading

跨域方法汇总

Posted on 02/13/201406/23/2019 by 四火

browsers

做 Web 开发经常需要面对跨域问题,跨域问题的根源是浏览器安全中的同源策略,比如说,对于 http://www.a.com/1.html 来说:

  • http://www.a.com/2.html 是同源的;
  • https://www.a.com/2.html 是不同源的,原因是协议不同;
  • http://www.a.com:8080/2.html 是不同源的,原因是端口不同;
  • http://sub.a.com/2.html 是不同源的,原因是主机不同。

在浏览器中,<script>、<img>、<iframe> 和<link> 这几个标签是

[……]阅读全文

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

做工程和搞研究

Posted on 02/03/201406/23/2019 by 四火

我记得和同事吃饭的时候大家在一起讨论,什么样的人可以称之为牛人,有人当即就提出来,对于我们这样做工程的人来说,谈何牛人呢?真正牛的人应该都是那些搞研究的大拿们。还有人说,这样说也不甚准确,只是牛人的比例和程度不同:

curve1 curve2

搞工程的取得成就的人的比例,要高过搞研究的(左图);但是搞研究的,取得的成就要大过搞工程的(右图)。

在推动生产力前进上,为什么 Page Rank 的发明人是工程师,而不是数学家?因为工程师最擅于把那些尚在理论上的东西转化为实际的东西。再比如像 Jeff Dean 这样的,工程师关心和解决的问题往往是最实际的问题。

但是说到严谨性,做工程和搞研究是同一的。二者都很容易被经验和那些显而

[……]阅读全文

Continue reading

谈谈数据绑定

Posted on 01/27/201410/08/2024 by 四火

data binding

在 Wikipedia 上数据绑定的定义是:

Data binding is the process that establishes a connection between the application UI (User Interface) and business logic. If the settings and notifications are correctly set, the data reflects changes when made. It can also mean that when the UI is changed, the underlying data

[……]阅读全文

Continue reading

从 JavaScript 的单线程执行说起

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

先看一段代码:

setTimeout(function(){
	alert("a");
}, 0);
while(1);
alert("b");

希望在马山可以弹出一个警告提示框 “a” 来,但是始终没有来;而且,在 FireFox 中跑还得到了这样的提示,并提示你是否要终止这段脚本的执行,遇事我选择终止以后,“a” 倒是弹出来了,但是 “b” 却弹不出来了:

Warning: Unresponsive Script

A script on this page may be busy, or it may have stopped responding. You can stop the script n

[……]阅读全文

Continue reading

我为什么坚持写博客(续)

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

blog

大概在两年前,我写过一篇文章,《我为什么坚持写博客》,随着阅历增长,想法是在不断变化的。我想在这里补充一些内容。

一个坚持更新的博客站点就是最好的名片

很多有个人独立博客的人都有这个观点,对于工程师来说尤其如此。我记得以前看过一幅漫画,工程师和 HR 阅读简历的价值杠杆大不相同,GitHub 上丰富的记录、一个高分的 stackoverflow 账号,还有一个独立域名博客,这些都是具有相当加分项的部分。向别人介绍自己的时候,你甚至都不需要自己拿出名片来,不需要自己在简历里面啰啰嗦嗦还生怕遗漏了什么,很简单,拿出你的博客站点来,一切尽在其中。你没有办法作弊,也没有办法撒谎,因为其中的文章全部都是按

[……]阅读全文

Continue reading

数据挖掘学习笔记:分类、统计学习

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

ICDM(国际数据挖掘大会)2006 年从 18 种提名的数据挖掘算法中投票选出了十大算法。这 18 中提名数据挖掘算法分属 10 大数据挖掘主题,蓝色部分即为最终选出的十大算法:

  • 分类(Classification)
    • C4.5
    • CART
    • K Nearest Neighbours
    • Naive Bayes
  • 统计学习(Statistical Learning)
    • SVM
    • EM
  • 关联分析(Association Analysis)
    • Apriori
    • FP-Tree
  • 链接挖掘(Link Mining)
    • PageRank
    • HITS
  • 聚类(Clustering)
    • K-Means
    • BIRC

[……]阅读全文

Continue reading

泛型趣谈

Posted on 01/08/201410/08/2024 by 四火

strange

Java 中的泛型带来了什么好处?规约。就像接口定义一样,可以帮助对于泛型类型和对象的使用上,保证类型的正确性。如果没有泛型的约束,程序员大概需要在代码里面使用大量的类型强制转换语句,而且需要非常清楚没有标注的对象实际类型,这是容易出错的、恼人的。但是话说回来,泛型可不只有规约,还有很多有趣的用法,容我一一道来。

 

泛型擦除

Java 的泛型在编译阶段实际上就已经被擦除了(这也是它和 C#泛型最本质的区别),也就是说,对于使用泛型的定义,对于编译执行的过程,并没有任何的帮助(有谁能告诉我为什么按着泛型擦除来设计?)。所以,单纯利用泛型的不同来设计接口,会遇到预期之外的问题,比如

[……]阅读全文

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

2013 年特别回顾

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

2014 技术关键词

数据可视化 / TP99 / 接口设计 / Hadoop / Spring MVC / 爬虫 / AWS service / 技术选型 / 对思考的思考 / 校园招聘 / Memcached / Mac / 数学和工程 / 技术和生活

丢失的宝贝

  • RSS 阅读的好习惯;
  • 持续稳定的郊外运动;
  • 经常练习的做菜技巧。

持有和新得到的宝贝

  • 又一年坚持思考与博客写作;
  • 有计划地旅行;
  • 英文能力;
  • 无节操的低智商狗一枚;
  • 看了一些书;
  • 明显减少了糖的摄取。

几个难忘的瞬间

  • 来到长滩岛,见到 Puka 海滩的那一刻;
  • 不断思考和讨论,接口设计迭代改进;
  • 几次回老家;
  • 技术选型的调查和讨论;

[……]阅读全文

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 12/22/201306/23/2019 by 四火

上半部分请参见 《排序算法一览(上):交换类、选择类和插入类排序》。

 

归并类排序

归并排序(Merge Sort)

归并排序是一种分治法,它反复将两个已经排序的序列合并成一个序列(平均时间复杂度 O(nlogn),最好时间复杂度 O(n)):

  • 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;
  • 设定两个指针,最初位置分别为两个已经排序序列的起始位置;
  • 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;
  • 重复步骤直到某一指针达到序列尾;
  • 将另一序列剩下的所有元素直接复制到合并序列尾。
public class Sort {
  public s

[……]阅读全文

Continue reading
  • Previous
  • 1
  • …
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • …
  • 24
  • Next

订阅·联系

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

Amazon Google Groovy Hadoop Haskell Java JavaScript LeetCode Oracle Python 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 (7)
  • 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 (42)
  • Business and Investment (8)

推荐文章

  • 聊一聊分布式系统中的时间
  • 谈谈分布式锁
  • 常见分布式系统设计图解(汇总)
  • 系统设计中的快速估算技巧
  • 从链表存在环的问题说起
  • 技术面试中,什么样的问题才是好问题?
  • 从物理时钟到逻辑时钟
  • 近期面试观摩的一些思考
  • 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 框架源码解析
  • “ 你不适合做程序员”
  • 画圆画方的故事

近期评论

  • 四火 on 聊聊商业模式——Atlassian
  • bob on 聊聊商业模式——Atlassian
  • Battlele on 回国感悟
  • Anonymous on 聊聊商业模式——拼多多
  • Battlele on 聊聊商业模式——拼多多
  • Anonymous on 聊聊商业模式——拼多多
  • Anonymous on 所有文章
  • Anonymous on 倔强的程序员
  • rocky on 关于时间管理的一点新的感悟
  • panshenlian.com on 初涉 ML Workflow 系统:Kubeflow Pipelines、Flyte 和 Metaflow
© 2026 四火的唠叨 | Powered by Minimalist Blog WordPress Theme