极客时间上我的专栏《全栈工程师修炼指南》

抱歉近几个月博客文章更新不够频繁,也有朋友问过,现在我想告诉大家,那是因为我写专栏去了。今天,专栏 《全栈工程师修炼指南》终于上线了,下面的内容,就是我将这些年来,关于全栈开发,自己的一些经验、心得、感悟,总结起来,并且酝酿思考了很久,撰写的这个专栏。我想,目前市面上某一项具体技术的教程通常好找,但是系统的全栈技术关系树,包含这些技术之间的演进、权衡和本质介绍,并引发思考的学习材料却并不好找。值得一提的是,这个专栏中我将全程朗读所有的技术文章,为的就是能够尽可能地把原汁原味的技术内容传达给读者,希望你可以从中享受技术单纯原始的快乐。

下面的内容就是关于这个专栏的介绍,你也可以直接拖动到文章 [……]阅读全文

几个问题的思考:时差问题、地图算法和 Windows 更新

有时候忽然上下班路上,会去思考一些司空见惯的问题,有一些问题随着思考深入,发现还挺有意思的,就记录在这里。问题之间关联关系不大,有点散。

倒时差的问题

西雅图夏令时和北京时间的时差是 15 个小时,有一个简单的换算方式,就是把当前西雅图时间昼夜颠倒一下(加 12 小时),再加 3 个小时,就得到北京时间了。举例来说,现在是 8 月 16 日晚上的 9 点 37 分,昼夜颠倒一下,就是 8 月 17 日的上午的 9 点 37 分,再加 3 小时,就是 8 月 17 日中午的 12 点 37 分,这就是北京时间。

这几年跑了几次北京和西雅图以后,发现一个规律,就是从北京来到西雅图倒时差非常困难,而从西雅图回到北京倒时差就相对容易得多。我曾经以 [……]阅读全文

分析运行中的 Python 进程

在 Java 中打印当前线程的方法栈,可以用 kill -3 命令向 JVM 发送一个 OS 信号,JVM 捕捉以后会自动 dump 出来;当然,也可以直接使用 jstack 工具完成,这些方法好几年前我在这篇性能分析的文章中介绍过。这样的需求可以说很常见,比如定位死锁,定位一个不工作的线程到底卡在哪里,或者定位为什么 CPU 居高不下等等问题。

现在工作中我用的是 Python,需要线上问题定位的缘故,也有了类似的需求——想要知道当前的 Python 进程 “在干什么”。但是没有了 JVM 的加持,原有的命令或者工具都不再适用。传统的 gdb 的 debug 大法在线上也不好操作。于是我寻找了一些别的方法,来帮助定位问题,我把它们记录 [……]阅读全文

谈谈 Ops(最终篇):工具和实践

除了主要内容——工具和实践,这篇文章也对 “谈谈 Ops” 系列做一个汇总,提供一个访问入口。之前几篇,从一个纯粹 dev 狭窄的视角,谈了谈自己对 Ops 的一些认识:

在往下继续以前,如果没有看过前面的文字,不妨移步阅读,因为上面的内容对下面的内容做了一定程度的铺垫。

现在在写的这一篇文字,我准备是最后一篇,主要谈论这样几个事情:一个是工具,另一个是实践。我依然还是从 dev 的视角,而不是从一个专业运维的视角来记叙。

工欲善其事,必先利其器。我在主要且通用的工具 [……]阅读全文

HTTPS 升级

昨晚花了几个钟头,把 blog 的 HTTP 升级成 HTTPS 了,虽然这件事做的晚了一点。为什么要升级,不是我说明的重点,想了解的朋友可以阅读这篇文章。我记录的是我升级的过程,踩到的坑。

备份

首先,文章中有许多以 http://www.raychase.net 开头的 URL,比如某些图片和链接,可以把它们改成 https 的,也可以全部改成相对路径,这样的适用性更广。

UPDATE xx_posts SET post_content = REPLACE(post-content, 'http://www.raychase.net/', '/');

到浏览器里面访问看看,似乎没有什么问题。[……]阅读全文

不要让业务牵着鼻子走

这篇文章算是要和之前写的 《程序员懂业务有多重要?》“唱反调” 了。

从工作开始,我就不断被灌输着一种业务至上的观点,无论在中国的公司,还是美国的公司,衡量一个决定或者一个需求的价值,都是在业务上有多大的帮助,都说 business impact 是什么。我从不怀疑单纯这样做的初衷,但是我质疑单纯这样做的结果。我觉得,即便是一个业务驱动为主的团队,在决策的时候,技术的占比,应当占据显著的地位。因而我说,不要被业务牵着鼻子走。继续把这一点发扬光大,我认为它对团队发展,对个人发展,都是如此。

曾经认为,这样的观点应该是公认的,但是我越来越发现,事实并不是这样。应该说几乎所有程序员都看到了业务上 [……]阅读全文

LeetCode 题目解答—— 第 416 到 460 题

从第 416 到第 460 题,跳过了需要付费的题目。付费的题目会单独放在一篇里面。

416
Partition Equal Subset Sum
40.0%
Medium

417
Pacific Atlantic Water Flow
36.9%
Medium

419
Battleships in a Board
65.2%
Medium

420
Strong Password Checker
17.9%
Hard

421
Maximum XOR of Two Numbers in an Array
50.5%
Me[……]阅读全文

我也谈一谈 996

最近程序员圈子里最闹腾的事情就是 996 ICU 了。这个事情是如此之火爆,我觉得都没有必要再把它介绍一遍了,连 GitHub 项目都被封了(指国内的主要的几款浏览器)。作为一个号称和希望长期话说程序员和为程序员说话的博客作者,作为一个同经历过大于 996 和小于 955 这样反差的程序员本人,我应当是具备一些说几句的资格的,但奇怪的是,除了大家都已经熟悉的那些烂大街的评论,想了几天却依然没有很系统的想法,似乎有不少头绪却不知从何说起。也罢,就说一点零散的观点吧。

关于我的经历

我工作已经超过十年了,从 2008 到 2012 年初,我是在华为度过的。华为这张招牌胜过一切 996 的广告语,从工作时间来看,最 [……]阅读全文

谈谈 Ops(三):事务、团队和时间分配

作为普通的开发人员,我们会遇到对于时间分配的思考,没有金标准,只有某些看起来也未必靠谱的 “最佳实践”。不同人眼中对于整体的时间分配也有自己的看法,这篇文章旨在探讨其中的一两种情况。

Ops 的事务类型

Ops 的事务很多很杂,首先要明确一点的就是,Ops 远不止 oncall,远不止线上产品维护。整个软件工程流程中的配置、部署、环境搭建、升级、打补丁,甚至问题定位、故障排查等等,都或多或少可以算作 Ops

记得在读书的时候,老师给我们把日常事务划为四个象限:紧急重要、紧急不重要、不重要但紧急,以及不重要不紧急。Ops 和一般软件开发活动在这四个象限的分布上来比较,更多地,会偏重于 “紧急 [……]阅读全文

LeetCode 题目解答—— 第 372 到 415 题

372 到 415 题,同级别的题目反正是越来越难。老规矩,跳过了那些付费题目。

372

35.5%
Medium

373

33.3%
Medium

374

38.9%
Easy

375

37.3%
Medium

376

37.0%
Medium[……]阅读全文

谈谈 Ops(二):流程和人

第二部分,我想谈一谈流程,依然来源于我的理解。Ops 的实践上面,有两部分内容紧密结合,不但共同显示了 Ops 的生产力,也在相当程度上体现了 Ops 的技术水平。这第一部分就是流程,也是今天要说的内容,另一部分是工具(也包括和使用工具相关的技能),下一次再说。

我认为 Ops 可以分为几个层次,最次的的一层,其特点是重度依赖于的人的直接 “操作”。风险管理、因果行为,都通过流程来统一把控,并且遗憾的是只有流程——除了它基本没有可靠有效的工具,或是其他办法。

其实,流程本是个好东西。有时候某些工程师被散漫和自由主义惯坏了,听到流程就反感。事实上,流程在很多情况下都有着举足轻重的作用。它们很容易控制[……]阅读全文

谈谈 Ops(一):我的运维经历

偶然地,在会看这些年写的文章的时候,发现涉及到软件工程方方面面的内容,但是关于 Ops 的内容却非常少。我觉得这是不太合适的,因为在实际工作中,Ops 显而易见地占据了一大块比重。于是我调整了分类目录,增加了这个单独的分类,并且这一次,我想零零散散地讲一讲我关于 Ops 的一些经历,以及关于 Ops 的一些观点。

所谓 Ops,指的就是 Operations,在中文翻译上看,我觉得 “运维” 这个词可能是最恰当的。作为一个软件工程师,Ops 有时会特指 DevOps,关于它的定义,在维基百科上有这样一张图片,我觉得基本正确地描述了 DevOps 涵盖的内容(见右侧图)。

可以看到三方面的内容,可是,由于我们会把 [……]阅读全文

写在曼联主教练又一次更迭之际

作为一名好多年的曼联球迷,在后弗格森时代,第三任教练下课的时间点上,总有很多感慨,也有不少想说的话。英格兰足坛浮浮沉沉,进化了这么多年,那个老四强时代已经过去,那个群雄乱起的时代也接近尾声。这两年看来,可以说强弱集团军已经分明。第一集团属于曼城和利物浦,去年在联赛中不可一世的曼城,在今年也遇到了真正的竞争对手。第二集团包括阿森纳、热刺、切尔西和曼联,其中热刺现在位于第一和第二集团军之间,但是我认为从长远来看,加之阵容厚度考量,它是属于第二集团军的。整体上看,英超在世界的格局中目前是往上走的,这些进入欧冠的豪门也已经闯入淘汰赛了。这个时间点上可以谈的事情似乎很多,我想按照自己的理解来谈谈几个敏感 [……]阅读全文

倔强的程序员

对于程序员来说,大多数人公司都有技术和管理两条发展路线,通常在同一家公司,管理路线的发展可能性,要相对广阔一些;但是技术路线也有技术路线的好处,比如相对而言更依赖于硬实力,因而工作机会丰富。我相信有不少程序员都和我一样,坚守着技术路线,无论是进还是退,都对管理者的岗位没有什么兴趣。

兴许大家都听到软实力和硬实力的概念。对于一个技术人来说,硬实力大致上可以认为是计算机和软件工程相关的技术能力,1 还是 0,是还是非,会不会算法,懂不懂设计,清清楚楚,明明白白; 而软实力则反过来,听起来挺抽象,挺模糊,比如沟通能力,自我管理能力,但是却扮演者重要的角色,甚至随着职业生涯的发展,它的影响力越来越大 [……]阅读全文

为什么互联网外企在中国总是失败?

最近在读吴晓波写的《腾讯传》,不少有意思的内容。其中给我印象最深的是讲当年 QQ 和 MSN 大战的一段。可能很多人和我一样,都注意到,互联网行业中,在中国的外企鲜有成功的,多数都是高调进入,灰溜溜地退出。有人把这种现象简单地归因于四个字 “水土不服”,无疑是武断而缺乏思考的。

在书中短短的一节分析本土企业和外企互联网大战的内容中,就看到了当年那些经典的战役。比如 C2C 市场,ebay vs 淘宝;比如 B2C 市场,亚马逊 vs 当当(虽说后来当当的份额也被淘宝商城和京东蚕食得够呛);比如搜索市场,Google vs 百度;再比如打车市场,滴滴 vs Uber;再再比如书中最重头的例子,即时通讯市场,[……]阅读全文

幸运的时代

差不多四年来第一次回国,感触颇深。中国的发展,尤其是互联网发展就像一个孩子的成长,如果每天都盯着看,没觉得有什么变化。但是如果稍稍离开一段时间,回头就发现巨大的变化。

互联网正在不断融入生活,其中最显著的变化,便是支付。

依然记得 2012 年初我刚到北京的时候,直到 2014 年离开,那些时间基本上还是现金走天下的年代。由于种种原因,老早就兴起的信用卡没有办法流行开来,大家还是习惯于装一兜子钞票,然后在各个不同的地方大票换小票花掉它们。

如今呢?当我结账的时候,被问到 “微信还是支付宝?”,我弱弱地回了一句——“现金”,引来一阵哄笑。足以见得,那么短的时间,互联网已经占领了老百姓的支 [……]阅读全文

给车换电池的神奇经历

水文预警。

这段故事,像小说或者电视剧一样的故事,发生在三天前的下午。我不相信这辈子还能遇到第二次。我本来发在朋友圈上,而且我觉得这样悲催而搞笑的经历,除了哄笑一番以外,应该没有什么价值。但是好几个朋友看到以后,表示对我的神奇经历有了解详细情况的愿望,希望通过给我的悲惨故事他们带来欢乐…… -_-|| 我仿佛看到了那个得意的和嘲笑的嘴脸,好吧,我就稍微详细一点讲……

准备开车去附近买个午饭,车启动的时候挣扎了一下。凭借我二把刀的用车经验,我猜应该是车在向我发起抛锚警告,但是我对我的车抱有十二分的信任,我相信它的顽强,我相信它的潜力——出去买个饭总不至于出问题吧。

好吧,判断失 [……]阅读全文

关于一篇讲华为 “狼性文化” 文章的不同看法

最近微信的朋友圈和公众号,被 《离开华为三年,我才真正认同狼性文化》这样一篇文章刷屏了。基本上,评论都是正面的,表示支持、理解,或者赞赏。还有许多人表示,正是因为华为这样的狼性文化,这样的领导管理方式,才造就了公司今天的成就。

一开始我也没有太在意,后来发现大量的一边倒的正面评价和转发,我觉得我应该唱个反调,在这里谈谈不同的看法。如果您还未读过原文,不妨先移步阅读。

对于文中的观点,除去在开头的案例,我大致是认可的。特别是强调了实打实地做事给钱,坚持原则和不找借口,我觉得是值得用来树立一个好的典范的。只是开头这个案例太过瘆人,太过引起不适:

同事为与家人团聚,想调来我们办事处。

[……]阅读全文

谈谈微信的信息流

最近才更新到微信的最新版本,早有耳闻公众号变成了微博似的信息流展示信息。之前也没有太在意,这次微信客户端版本更新以后,发现坏了坏了,以往的阅读习惯已经被彻底毁掉了。下面两图都是我手机上的截图,左边是新的信息流模式,右边是信息流界面下点击右上角图标,回到的 “类似以往” 的基于订阅号发布者的模式。

image1 image2

首先我要澄清的是,我认为信息流是绝大多数 SNS 软件都乐意采用的信息传递模式,简洁而且高效,包括我经常使用的那些应用,比如微博,比如知乎,比如 LinkedIn,甚至绝大多数 RSS 软件,因此,它绝不是一个新东西。毫无疑问,基于信息和基于信息发布账号(公众号)的方式比较起来,通常前者更有优势,但是此事

[……]阅读全文

从 Mac 下的包管理和安装工具说起

先说点别的。

可能很多人和我一样,最开始习惯使用的是 Windows,后来开始接触 Linux,再后来,接触到 Mac,几周以后,一发不可收拾。

如果说,在 Windows 下面,基本上习惯了便捷友好的图形化界面,以及经历了对 “系统在干什么” 一无所知的恐惧之后,那么接下来 Linux 就带来了另一个极端的体验,知道系统在做什么,但是总是觉得不那么便捷而友好(刚开始很长一段时间都没有接触 Linux 图形界面)。我记得大致有这么一句话,“Linux is user friendly, but it is selective who its friends are.”,Linux 也是对用户朋友友好的,只 [……]阅读全文

back to top