长日无痕(一)
(一) 又是一个闷热的周六,灰霾就像粘在天空一样,依旧笼罩着这个城市。带着小宝,我们三人游荡在蓝色港湾的儿童城中,为小家伙的未来打算着。老婆和丈母娘穿梭于一个又一个玩具店,而我,因为推着童车,不便走来走去,就带着小宝静静地欣赏楼下冰场里玩耍的孩子们。很快,我们的注意力就被冰场上两个正在进行对抗训练的小男孩吸引住了。小宝快乐地随着冰球转动脖子,双眼紧紧地捕捉着…
默认按照写作时间先后顺序(#001 → #260)排列,也可切换为最新优先或按专栏、年份过滤。
当前显示全部 260 篇文章(按时间正序 #001 → #260)
(一) 又是一个闷热的周六,灰霾就像粘在天空一样,依旧笼罩着这个城市。带着小宝,我们三人游荡在蓝色港湾的儿童城中,为小家伙的未来打算着。老婆和丈母娘穿梭于一个又一个玩具店,而我,因为推着童车,不便走来走去,就带着小宝静静地欣赏楼下冰场里玩耍的孩子们。很快,我们的注意力就被冰场上两个正在进行对抗训练的小男孩吸引住了。小宝快乐地随着冰球转动脖子,双眼紧紧地捕捉着…
在计算机领域,我最推崇的一句名言是:「软件开发中遇到的所有问题,都可以通过增加一层抽象而得以解决」(All problems in computer science can be solved by another level of indirection)。 这话不难理解。我举几个例子: 操作系统是裸机和应用程序之间的抽象。想想没有操作系统的时代,应用程序…
敏捷(agile)作为软件开发的一种模式,已经热了有好几年的时间。可很多人连敏捷宣言都不知道或者不理解,就开口闭口谈敏捷,何其谬哉! 敏捷宣言: 个体和互动 高于 流程和工具 工作的软件 高于 详尽的文档 客户合作 高于 合同谈判 响应变化 高于 遵循计划 也就是说,尽管右项有其价值, 我们更重视左项的价值。 不知道或者不理解这一宣言而去实施敏捷,就好像打仗…
和一位朋友聊起一个话题:一个团队里两个同事,相同的职位,不同的工作内容,都好几年没有升职了,但两人的绩效一直都不错,客观上都存在升职的压力。两人的优缺点一对比,半斤八两,现在到了财年末升职加薪季,只有一个升职名额,究竟该升谁? 这是个让人纠结的问题。如果我是管理者,我首先会问问自己是否已经尽了最大的努力去争取更多的升职名额?没有的话,赶紧争取去。 如果再无争…
如果要寻找这个星球上最抠门的群体,那么一定非程序员们莫属了。有个笑话是找对象要找程序员:『挣得多,花的少;常加班,死的早』。 在创业之前,我也是个抠门的主。公司给配笔记本,就绝不自己买。一个 N73 用三年如果不是丢了就不会买新的。东西永远是够用就好,而不管是否在技术上已经落伍;为了找一款软件的注册码,我可以花上一个小时,不厌其烦地注册有注册码的论坛,攒积分…
每个程序员入门的第一堂和第二堂课应该是和unix哲学相关的内容,简言之就是:做一件事,做好它。具体点: 小即是美。 让程序只做好一件事。 尽可能早地创建原型。 可移植性比效率更重要。 数据应该保存为文本文件。 尽可能地榨取软件的全部价值。 使用shell脚本来提高效率和可移植性。 避免使用可定制性低下的用户界面。 所有程序都是数据的过滤器。 再具体一些(TL…
专利并不神秘,也没什么高大上的,就是个公开的解决某个问题的技术方法而已。我认为真正高大上的专利,应该是对人类文明起到推动作用的(改变或者即将改变你我的生活方式或者习惯),比如说苹果的多点触控,tesla的电池技术,甚至twitter的下拉刷新,才算。 按专利发表的目的来说,大体有两种: 产品中使用的『杀手级』技术的自我保护。如多点触控。 为完善自身的专利组合…
在『高效能程序员的七个习惯』里,我谈了 unix 的哲学。这里举个例子: 先解释一下,docker ps -a -q 列出了系统中所有container的id,docker rm 根据id删除某个container。但是我要删除所有的container怎么办?难道要我再做一个新的命令 docker rm-all,或者 docker rm --all? 两种方…
我的第一门实用型的语言是Visual Basic。看了一段时间的windows编程,在各种句柄,消息循环以及繁复的MFC中迷失后,VB让我见识到了简单,直接了当,以及文档(MSDN)的重要性。学习的门槛是个大问题,有些语言(及其背后的框架)没有一定的基础最好不要碰。 当然,语言总是在发展,现在在dotnet框架下的VB已经失去了那种简单直接的美。 第一门语言…
所谓换帅如换刀,新 CEO 的三板斧还未完全打完,公司又开始了轰轰烈烈的创新活动,突然之间,创新变成了挂在老板嘴上的高大上。每个人心里的问号是,这波突如其来的浪潮究竟能持续多久? 我不否认通过公司的执行团队放低姿态广泛纳谏,举办黑客马拉松,定期奖励有创新贡献的员工等等这样的运动来提高整个公司的创新氛围 —— 事实上,这些都是很好的手段,让人们开始关注于创新。…
程序君也年轻过,年轻的代价就是盲目追随。 从MS-DOS6.0开始,程序君就是微软的狂热拥趸。 这种狂热自win95走上高潮(有谁还记得win95光盘里带的Good Times的MV,请举手),历经《未来之路》,windows2000,最后在dotnet发布后到达顶峰。 那段时间,只要微软反对的,就是我反对的。 不喜欢Netscape Navigator,只…
时间管理的基石是『四象限』: 我的案例可能不具备普适性:我每天五点四十左右起床,六点十分左右出门,大概六点五十的样子已经坐在工位上开始一天的事情了。所以我可以做事的时间自然比很多人多出来两三个小时。 当然,多出几个小时的时间并不意味着就可以高效地做事。这里我讲『做事』而非『工作』是因为这段时间我基本都不在工作(除了紧急事件或者开会)。这是很重要的,也是我想讲…
TED上面有个心理医生讲过压力管理的主题。大意是压力本身不是身体机能下降的杀手,相信压力对身体有害的负面情绪才是身体机能下降的杀手。也就是说,当压力来袭的时候,我们要阿Q一点,告诫自己老子不怕,老子很乐观。听上去有点像鸡汤,是不? 但这的确是研究机构数年实验的结果,有科学依据的。 这映衬了哈佛幸福课里面讲过的一个让我印象非常深刻的道理:Belief is s…
除了生活工作中直接的压力,还有一种间接的与别人比较的压力,程序君是怎么看待这种压力的?比如某个基友都结婚了,自己还单着,某个朋友明明实力不如自己却拿了大offer,自己还得苦苦找工作,某个同学当年敢放弃稳定生活大好钱景去追求理想,现在活得有滋有味,而自己为了钱怂了,结果也没赚到预期中的大钱。虽然知道人比人气死人的道理,但有时候情不自禁地就会去想,很影响心情。…
自打踏入了创业者的行列,我就总会不自觉把自己置于某个位置之上,去操心如果是我掌舵,该如何如何。最近,我心头一直萦绕的一个问题是:为什么一家公司,不管曾经多么辉煌,多么具备创新能力,最终都会不可避免地向平庸滑去,甚至走向衰落? 这似乎是『创新者的窘境』中已经讨论过的话题。这本书阐述了破坏性技术是如何取代已有技术,以及管理良好的企业内部所蕴含的强大力量是如何阻碍…
很多刚刚入门的同学都有这样的困惑:我刚刚上完了xx语言的课程(或者自学了xx语言),下一步该怎么学习才能达到开发产品的水平? 办法很多,程序君讲讲自己最喜欢的,也是最暴力的 —— 直接动手使用你刚掌握的技能开发产品。 这有两种途径:(1) 加入一个使用该种技能的团队进行产品开发;(2) 自己动手开发。 途径(1)在任何时刻都是最佳选择,一群人在一起探索(尤其…
现在这个社会,数据库脱裤暴库事件,邮件泄露,信用卡信息泄漏,员工目录泄露等事件层出不穷,防不胜防。如果当你我的私人邮件成为监控者茶余饭后津津乐道的谈资,你我的身份信息,密码信息,银行卡成为骇客用来支付他们奢华生活的工具,你还会觉得信息安全还是和自己毫无关系么? 所以,即使一个人不从事安全领域相关的工作,也需要懂点安全知识。 首先,安全涵盖三个基本内容:可用性…
有篇文章《为啥中国的程序员都被称为码农》(以下简称「码农」)看着让人心酸。文章说的虽然有些道理。但程序君认为:别人是不是码农与你无关,你不该成为那篇文章作者眼中的码农。作者说码农一词强调程序员「地位低下、枯燥和劳累」。作为一个程序员,我也来随便说说。 一般而言,程序员的收入水平不低。我没有具体的数据,但在一线城市,程序员的平均收入应该都能达到该市的中上水平 …
大部分坐班的程序员的收入主要来源都是这几样:工资,奖金,期权,股票。今天我们就说说这几部分收入。 这里讲的工资是严格意义上的基本工资,就是没有任何水分,每个月都会固定发到你手上的那笔钱。当你拿到一份录用通知时,一定要弄清楚里面的收入结构,否则有些薪资看上去很美,但如果很大一部分都是可能看得见拿不到的奖金期权,那么需要好好衡量一下。 工资具有滞后性,它是对你过…
小时候,我常常缠着爷爷,给我讲他的故事。爷爷十四岁参加革命,等他真正开始行伍生涯的时候已经是解放前夕,跟着王震的部队从甘肃进疆,一直「打」(当时新疆已经基本和平解放)到阿克苏随农一师三团驻扎下来,转为建设兵团。听着他讲行军途中的种种经历,每每我都热血沸腾。 我的父亲成长在一个不幸的年代,等他到了适龄上大学的年龄,正值文革;等文革结束,他也过了能报考大学的最低…
很多人看到这个标题的第一印象可能是 —— 这是要讲飞机上的黑匣子么?有点关系,但主要讲软件中的flight data recorder。不过我们先从黑匣子讲起。 Flight Data Recorder(FDR)用于记录飞机行驶过程中的各种关键数据,其规格如下: 电源:115V AC 或 28V DC 电源能力:30天不间断 使用期限:至多6年 包含水下定位…
读书本为消遣和获取知识,读得过程中加上了自己的经验、理解和洞察,便成了智慧。「必读」是个很不好的词,「必」有强迫的意味,有太多的功利性。乔布斯以他在里德学院学了「字体排印学」(typography)为佐证说明 "you can't connect the dots looking forward; you can only connect them look…
对我而言,周末要比平时忙碌得多。陪孩子上课,读书,玩耍是我的必修课程。这也是周末为何我有时比平时还要早发文章。有朋友曾经提醒我,新闻上说了孩子这么小,上各种早教课没用,只会给孩子带来不必要的压力。我不这么认为。我觉得评判一个课程有用没用,要看孩子是否喜欢,大人说了不算。对我而言,我只能提供各种机会和必要的引导,如果她不喜欢,不强迫就是了。为什么要听信和我毫不…
有清晰明确的目标是我们每天生活的动力,(很可能)也是快乐的源泉。之前我年年为了减肥而跑步健身,可每次都是雷声大雨点小,体重还是不由自主地从七十出头滑到了八十。今年在同事的激励下,我设定了一个跑半马的目标,每天跑步的动力十足。原因是「减肥」意义太不明确,我又不是胖到令人发指,减到多少算是个头?所以对我而言这个目标不够好,所以我的动力相对弱一些。可跑半马不一样,…
编程思想是个宏大的主题,我不敢保证我能在短短的一两个小时里讲得全面而深入。推荐给大家一本好书『冒号课堂』,是国内为数不多的讲编程思想的经典之作。无奈这本书已经不再出版,只能在图书馆里一睹芳容(我几年前在国图和它偶遇)。 各种软件思想虽然层出不穷,但其本质是降低系统复杂度,减少重复,减少代码的变更。掌握了这个大方向,理解各种编程思想就容易多了。 下文所涉及的代…
请打开任何一个python解释器,在里面输入:import this。我所了解的任何一门其他语言都没有如此巧妙而又大张旗鼓地将其文化写入了语言本身。 这段文字值得好好消化。你一定会好奇,this究竟是什么?如果你对python的package机制有了解,那么,你就应该知道该从python的安装路径下找这个源码this.py,打开一看,一段格式熟悉,但乱七八糟…
03 年我毕业到神州数码报道的时候,下了西二旗城铁后下巴都快掉地上了 —— 城铁对面的神马大厦/京蒙高科和城铁间夹着条杳无人烟的小马路,一辆装满了农产品的马车(还是牛车,记不得了)在路中间悠闲地走着,仿佛这是条田间小道。我当时很想扇自己一个耳刮子:这么个鸟不拉屎的地方真的是我魂牵梦绕的北京么? 05 年我跳槽离开西二旗到了五道口,舒坦了不少。和西二旗的荒凉相…
以下我所述并不是一个完整的体系,我努力从脑袋里剥茧抽丝,但有些知识太过于下意识,专门想不一定想得起来。本文面向的对象是一线(技术)管理者 —— 因为目前而言我的所有的管理经验来自于一线。 就像大家看到的这样,我刻意模仿『敏捷宣言』(注意也和『敏捷宣言』一样,尽管右项有其价值, 我们更重视左项的价值)写了几条我自以为是的价值观: 信任 优于权威 观察 优于测量…
经历了11小时的航班,程序君终于安全抵达旧金山。这次航班是个奇特的经历,一不小心,我学雷锋做了件好事,连机场的地勤人员都交口称赞,就差给我发条红领巾,颁个好人卡了。不过读完本文后我相信如果你处在我当时的位置,也会和我做出同样的选择的(甚至比我做得还好)。 事情是这样的。我要了个靠紧急出口的座位,位置不那么好,在中间,夹在靠走道和靠窗两个座位中间。左边一位去S…
一月份来硅谷出差,就想参加一下本地的 meetup。可惜当时出差时间短短一周,要和各路英雄 social,又要没日没夜干活,所以尽管自己对两三场技术活动垂涎三尺,但还是无缘参加。这次出差时间稍长,一落地,我想到的第一件事就是赶紧看看 meetup。然后,就发现了三个比较不错的活动:一个是昨天晚上的 Adam Cheyer 的 tech talk,一个是5/2…
今天去斯坦福的教室里听了个"EngX: The Digital Sensory System"的讲座,算是了却了自己一直的一个心愿:坐在斯坦福的教室里像模像样地听一堂课。建议大家如果有机会来硅谷出差,可以先看看event.stanford.edu,有没有中意的讲座。 整个讲座共分为三个环节:Seeing (computer vision), Touching…
(一) 出差赶上了长达四天的小长假 —— 美国这边的长假,办公室直接关闭,想去公司都没门。放假前,老板跟我 1:1 talk 的时候还给我推荐了一堆地点,如king's castle,Hearst Castle等等。,不去哪转转还真对不起这难得的机遇。一个人旅游其实挺无聊,找这里的同事朋友吧,要么都拖家带口早有安排,要么假日要值班,最后只得孤家寡人上路。由于…
未来的世界里,不会编程,虽不会决定你的生存能力,但会影响你的生存能力。 我们仔细想一想编程是什么?编程是通过构建一个系统,将一系列的输入,变成一系列的输出,通俗地说,就是给定一个问题,用计算机高效解决这个问题的能力。放到生活中一些的场景里: 老板给你一堆数据,你要从中筛查,组织出一个报表; 家里的数码资料越来越多,你想找拍摄于某地的一个视频; 工作中对着计算…
谈到大学,似乎都要谈谈「独立之精神,自由之思想」,我没那么大气,只好谈谈自己的大学历程。 追忆过去是件比较痛苦的事情,整个过程像是透过毛玻璃,或者浸了油的纸看自己,不但模糊,还看不太懂。很多时候我就像进入了冥想盆的哈利波特,好想对画面中模糊的自己拽一把,说句「你这样做不对」,可是无从下手,更无从下口。 (一) 我高考那年,赶上好几摊子事。先是大学扩招,接着广…
记不得是91年还是92年,在一个周日的早上,我随父亲看了一场录播的意甲。那场比赛是尤文对国米,2:1,懵懵懂懂中我第一次接受了足球的洗礼。孩童时代的记忆力是惊人的,我记住了比赛的双方,记住了比分,父亲在尤文进球后激动地挥舞双拳大声呼喊的场景的定格成一张tiff图片永远储存在我的大脑里。 我那时就如初恋般恋上了尤文,虽然我还不知道当时尤文的灵魂人物是忧郁王子巴…
这两个概念几乎是大学网络课程的入门概念。Juniper上世纪末兴起的重要原因之一就是严格区分界定控制平面和数据平面,然后用ASIC实现数据平面。数据平面是指一个网络设备用于报文转发的模块,它的效率决定整个设备的效率,一般会由硬件完成。控制平面是指一个设备协议相关的部分,可以没有数据转发那么高效。 当你打开浏览器访问google时,互联网上面的网络设备就开始紧…
我们已经走得太远,以致于忘了当初为什么而出发。 - 纪伯伦 先放下看似变态的996(四大笑了,俺们007),就说说普通人的工作时间 - 每周40小时(虽然大多数人应该不止这个数),以二十岁出头开启职业生涯,到60岁退休计,我们的职业生涯总共大概有80000小时。这时间如此之长,远远超过你的任何一项人生活动,比如和家人在一起的时间;这时间过得如此之快,当你每天…
你不得不承认曾经能够潇洒自如完成前空翻的克神老了。当那粒足以名垂青史,追平大罗世界杯记录的进球打入后,兴奋的前空翻变成了屁股墩。但这个小插曲仅仅让你稍稍感叹一下,然后全部注意力就放在了进球本身。 就克神而言,我是个伪球迷。我不记得自己哪怕完整看过他一场俱乐部比赛,也不知道02年大放异彩后他去了哪,干了什么 —— 甚至,完全迷恋上他的那届南非世界杯,在开赛之前…
世界杯已经进行了一多半,如果每天都熬夜看球,身体机能一定到了一个临界点。熬夜伤身,这是亘古不变的道理,对于那些平时就不注意身体,缺乏运动的三高人群来说,更是如此。所以,在不看比赛的日子里,睡个好觉,多运动运动,健健身,是极好的。 我系统性地健身始于今年二三月,几乎和在公众号上发表文章同步。由于闲暇时间一下子多了一份「工作」,压力陡增,感觉自己的身体似乎要吃不…
虽然以互联网为代表的「新经济」已经发展了十几二十年,但这股浪潮还远未到结束的时候。它广泛地改变着人们生活的方方面面,也许有一天,会从根本上改变我们工作的方式 —— 而这种工作方式的改变,首当其冲的是构筑互联网经济秩序的程序员群体。 我们看近十年来,在互联网行业中涌现出来的程序员的新工作方式: 1) 在家办公。虽然在家办公的初衷是为公司节省运营成本,但在家办公…
先从招人开始讲起吧。如无特指,本文所指人才为各种工程师,如UI/UX/Software engiener,因为创业公司最缺此类...其它职位也许适用也许不适用,请自行甄别。 在互联网一片红火的大背景下,BAT都要动不动搞各种「英才计划」来抢夺精英,所以现在想找到合适的人才越来越困难。对于创业公司来说,去各大招聘网站上花钱招聘,期待「盘亮条顺会来事儿」还要求不…
七月十八日,当北马预报名正式开始,摆在我面前的就是两条路:半马或全马。半马要容易一些,想来报名者会巨多,但名额少得可怜,最后必然形成千军万马过独木桥的局面,像我这样毕生和彩票几乎无缘的人,必定是无法中签的。所以我最终选择了报名全马。 作为一个身体素质非常一般,常年坐在电脑前工作的大龄程序员,参加马拉松是要有一些勇气的,这勇气来源于同事的鼓励,家人的支持,个人…
我的工作历程不算太长,但也不短,11年工龄,30岁出头,要写这么篇文章,其实很尴尬。刨去创业两年时光,我也就是9年在企业里工作的经验,更尴尬的是,这9年时间我就呆了两家公司,而且还在同一行业,这在瞬息万变的IT公司看上去比较少见,所以所述未必合大家的心。 为了便于描述,我还是以时间为轴,来展开讨论。本篇先讲我在神州数码的经历。 在『谈谈大学』里我说到本科毕业…
7月底的时候,我发表了一篇文章「马拉松,突然变成了一件严肃的事情」。当时无论如何是想不到,这「严肃」的事情,一个月以后便成了真。 当时做的计划,每周三次跑步机上10k+ run,周末两次户外15-20k run,一周大概60-70km的强度,执行的还可以(完成度>80%)。记得第一次在奥森10k,肺都要跑炸了,却跑出个八十分钟的成绩,自己都把自己好好鄙视了一…
在lean startup的框架里,测量(measure)是非常重要的一环,它承接着"build"和"learn",当系统的全部或者部分构建(build)出来后,我们需要找到合适的手段去测量这个系统,用以获取足够的信息,来为进一步的学习/反思(learn)提供数据。无法测量的软件功能,就像医生为普通感冒开出的药方,最终成效如何,天知道。 「天知道」不是一个工…
SOA是Service Oriented Architecture的缩写,希望你知道其大概意思。在上一篇文章「测量」中,我引用了Bezos的一段将Amazon的软件架构完全转换SOA的备忘录,它是如此关键,某种程度上可能改变了Amazon的命运(想想AWS)。 SOA是一种思想,而不是wikipedia上列举的一些「已经没落的」技术的合集(XML/HTTP/…
在我们自己的现状和想要达成的目标间,总是横亘着一条名为「先决条件」的大河,似乎除了花费巨大的精力游过这条大河外,别无他法。很不幸,大部分人还没能够接近目标,便被湍急的水流冲走了。然而,还是有少部分人似乎坐上了阿拉丁的魔毯,毫无迟滞地直达彼岸,好像学什么技术都不那么费劲。这是怎么回事? 学一门新的语言,或者新的技术,与其说是一种能力,不如说是一种方法。试问什么…
2014年10月19日,在期待了半年之久,我终于迎来了人生的首马。尽管头天晚上做了一夜的梦都在祈求上苍把风从张家口灌到京城,让蓝天奇迹般出现,可早上醒来一看,天还是令人失望地脏。5点的PM2.5已经达到了两百多,紧接着就迅速攀升到了近四百。 跑还是不跑,到了这一刻,在这个雾蒙蒙的清晨,已经成了个伪命题。半年的准备,就为了这一天,放弃,所需要的毅力要比坚持跑还…
毛小天最近有点心绪不安。他的直接老板赵博士要离职了,赵博士的老板老冯正在考察合适的人选。干了五年的程序员,虽然毛小天依然觉得自己还是非常热爱工程师的工作,但他仿佛看见一个难得的机会在向他招手。 今年毛小天26岁,刚刚结婚几个月。婚前的风花雪月换成了婚后的柴米油盐,夫妻俩为鸡毛蒜皮的小事没少争执和拌嘴。毛小天的媳妇是做市场的,一天八小时恨不得有七个半小时都在和…
文档能力是一个工程师必不可少的基础能力,而高质量的文档往往伴随着高质量的图表。"A picture is worth a thousand words",复杂的概念,逻辑,想法往往能够用图表清晰而生动地表达。一张好的图表离不开制作人的大脑对思维的描述,但同样离不开制作人所使用的工具。好的工具,让同样的事情事半功倍。我是一个工具爱好者,即便手头上有一个称心的锤…
自从签证被check,我就一直处在一种焦虑之中。这种焦虑在上周达到了顶峰。公司人事上的变动让我的前途看起来无比黯淡,2015年的各种计划也充满了变数。这周一晚10点后,我依旧一遍遍拨着位于华盛顿的DOS的电话,按1按0转人工,然后就是漫长的等待。这种等待往往伴随着3分钟的音乐,和随后7分钟拨通却无客服应答的「滴~滴~」声。按惯例,我会在等待10分钟后,无奈地…
这次来美国工作,我持有的是L1b签证。L1是一种短期工作签证,最长可以工作5年(L1b,专业技能者)或7年(L1a,管理者)—— 首次3年,可以再续一次,2年,如果是管理者,可以再续一次,两年。L1的配偶和21岁以下子女可以拿L2签证在美国居留。 L1签证是一种非移民签证,但允许有移民倾向。也就是说,签证官不能以有移民倾向拒绝签发L1签证,CBP(Custo…
编程语言的用户是程序员,她们对语言的要求不外乎是:好用,没bug,能快速开发,容易写出高质量的代码,性能好,可伸缩,容易部署,生态圈完备,blablabla。所以编程语言这块广阔的市场的价值主张也主要围绕着这些需求展开。这个市场和其他赢者通吃的互联网市场来说,不太一样,第一的占有者也就是维持着不到20%的头部,长尾一路延伸到几百名开外。 最初编程语言围绕着性…
除非你只用dotnet开发软件,不然osx/ubuntu会是更好的开发平台。太多太多优秀的工具在osx/ubuntu下可以一键安装,在windows下却不得不花费超过一个甚至几个数量级的时间去安装,更别提有的工具windows压根没有替代品。 如果不认可Rule 1,那么直接可以跳过下面的文字走人。 我在「能花钱的,就不要花时间」文中已经强调,有条件买15"…
一个程序员,无论你人生的第一个hello world是从basic开始,c开始,抑或javascript开始,接下来了解的一个概念一定是「变量」(variable)。变量是可变的(mutable)。数学中永远不可能成立的 x = x + 1 在编程语言中有了新的内涵:赋值。一个变量的生命周期里,只要需要,其值随时改变。这改变可以是因迭代而发生,或者因状态变化…
在如今这个Lean/Agile横扫一切的年代,设计似乎有了被边缘化的倾向,做事的周期如此之快,似乎已容不下人们更多的思考。MVP(Minimal Viable Produce)在很多团队里演化成一个形而上的图腾,于是工程师们找到了一个完美的借口:我先做个MVP,设计的事,以后再说。 如果纯属个人玩票,有个点子,hack out还说得过去;但要严肃做一个项目,…
一次旅行,就像一个梦,虚幻中透着真实。过去的一周,九天时间,我带着全家自驾了加州沿海的几个景区:卡梅尔,一号公路,丹麦村,圣巴巴拉,保罗盖帝中心,洛杉矶以及圣地亚哥。 (一) 请假是半个月前的事,家里人都说你初来乍到(我刚内部换了个Team才一个月),就请一周假是不是不好。我觉得既然入乡就要随俗。老美是典型地工作和生活完全切割的,一个会开到一半一看到点了撂下…
(最近两周项目忙得紧,一直没空写文章出来,请大家见谅) 两周前因为公司一次裁人,好几个人的活都被按在了我头上,这其中的一大部分是一系列REST API,撰写者号称基本完成,我测试了一下,发现尽管从功能的角度来说,这些API实现了spec的显式要求,但是从实际使用的角度,欠缺的东西太多(各种各样的隐式需求)。REST API是一个系统的backend和fron…
这段时间因着工作的关系,在代码里使用了 dynamodb。amazon 的 dynamodb 是个 key-value database,07年 amazon 就发布了一篇著名的 论文 讲 dynamodb,催生了开源界的一些产品,比如 cassandra 和 riak。dynamodb 的优点是显而易见的,比如: - scalability:得益于其基于 …
最近有个朋友让我帮忙看看他系统中的一个问题:他给了我一个用户名密码,让我ssh到他的某台服务器上。那是一台redis server,里面存放数据库查询的缓存和其他的一些业务逻辑。问题断断续续花了不少时间才定位出来,期间应我的要求,朋友又给了我其它两台服务器的用户名和密码。在这个过程中,这个朋友在网络安全意识上的淡薄,可能也是很多web/mobile app开…
来美半年有余,虽然三月底带着全家走了一趟南加,但对我而言毕竟是故地重游,算不得新的旅行,所以一直憧憬者下一程。正好独立日的小长假那周前后team很多人休假,我也干脆请了四天假,凑了九天的行程,准备北上去西雅图。 (一) 本来我们的行程是圣何塞飞西雅图,然后租车一路开回来。三人单程机票小500刀,老婆早早买好。租车的事情,我没有太在意,行前两周的时候才开始张罗…
== 软件性能调优:看数据,还是看概念? 很多人谈到性能,言必及 zero copy。我们看wikipeidia上的定义: "Zero-copy" describes computer operations in which the CPU does not perform the task of copying data from one memory a…
(一) 软件领域有个叫格林斯潘的哥们,估计大家都不怎么熟悉,但下面这句话写过代码可能没几个不知道: Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of hal…
(一) 在前几日的文章『软件随想录』里,我随性写了一句:「现在似乎已经不是lex/yacc 或 bison/flex的时代了。我亲眼看见一个同事在费力地用perl一行行解析某个系统的数据文件,却压根没想到写个BNF。BNF对他来说,不是一种选择。」 很多同学不解,问我:lex/yacc不是写编译器的么?我又不发明新的语言,它们对我有什么用? 从这个问题里,我…
Facebook最著名的工程师文化之一是bootcamp。每个新入职的员工,不管是应届生,还是老油条,都需要在bootcamp里接受洗礼: 6周的训练,每个人都会有一个mentor,会被分配很多技术任务,mentor和你每周1:1,他会帮你引荐做一件事所需要打交道的人。每个人的任务和正式员工的一样,只不过略简单,且不紧急。这些任务来自各个组,可以切身和各个组…
(一)莫名参赛 十月四日,我参加了波特兰马拉松。 报名波特兰马拉松实属偶然。年初的时候,我把今年跑马的全部希望都寄托在纽约马拉松或芝加哥马拉松。我是这么想的:上天再不待见我,总不至于两场抽签,一次机会都不给我吧。结果上天就是这么决绝,给我关上一扇门,顺手把窗户还拿铆钉钉死 —— 两个抽签我都没抽上,原以为囊中物,不需要抽签的旧金山马拉松还报满了。这下我急了,…
如果不写这个公众号,我这辈子也不会认识当时尚在大洋彼岸的 haofei 同学。去年底离开北京,抵达湾区后,不少当地的读者约我吃饭,唠唠家常,haofei 也是其中一个。和他见面的时候,我们无意中聊到了居住的问题,当时我的临时住所和我心仪的新居能入住的时间中有几个月的空档期,正巧他住在湾区,工作于旧金山,每日通勤苦不堪言,有迁居之意,但苦于提前终止还有几个月才…
敏捷(Agile),如今是个让每个科技公司恨不得天天挂在嘴边的词语。在这个 CMM (Capability Maturity Model) 已褪去光环,敏捷大行其道的时代,如果一家科技公司不搞些敏捷的实践,仿佛就成了旧时代的破落户一般。然而,很多公司搞敏捷,只不过是在流程上引入了一些敏捷的实践,却未曾从工作环境和文化上注入敏捷的原力。我见过有公司从 wate…
《技术人创业攻略》的大部分章节,我是在 Sunnyvale 往返 San Francisco 的火车上读完的。五十多分钟的车程,无论坐着,还是站着,我都读得很是津津有味,经常在列车员报了自己要下车的站名后才赶忙背起书包,捧着 iPad 匆匆跑出。 这本书记载的不是一个个成功企业家的光鲜故事,而是一个个平凡却又伟大的技术人艰难刺激的技术取经之路。标题虽然有「创…
在 2014 年末,我写下来当年的总结,和对 2015 的展望。如今,又到了回顾 2015 和展望 2016 的时候了。 2014我的三大目标完成地很好: 1. relocate到硅谷(即将启程) 2. 写一本书(『途客圈创业记』,约14万字) 3. 跑一次全马(北马4:48完赛) 小目标基本上都打了个酱油。 2015年三个大的目标: 1. 把身份和住所稳定…
人常说:读自己的日记,仿佛在跟过去的自己对话。早上在列车上跟半年一年前的自己对了会话,意犹未尽,又开始跟公众号上的自己对话。2015年我在公众号上的产出不算多,但值得重读的文章不算少。 对于入行未深的程序员来说,「如何选择工作」告诉你 可测量 和 可放大 的重要性,提醒你审慎选择行业,老板和团队。「程序员效率指南」也许可以助你在成长的路上走的更快,但 「程序…
过去三周,我在疯狂地使用 elixir,做了两个系统,一个是我上文提到的 policy engine,另一个是个尽可能通用的 activity stream / notification system。前者我花了一周,殚精竭虑,写下了 1600 行代码,production ready;后者我写了两周,1500行,是个可以进一步优化的 PoC(proof o…
一晃新的一年就过去了 1/24,程序君发现自己竟然还没有写上哪怕只言片语,未免让「程序人生」的读者感到失望。如果说之前说自己忙都是瞎忙,如今我是体会到了什么叫忙得连去上厕所的路上都要以 6km/h 的速度前进。不过忙归忙,公众号还是要更新的,今天先来一篇短文,答谢大家的苦苦等待。 系统监控和日志处理这块,有很多现成的工具。除了商业上比较成功的 new rel…
这两周忙活着工作交接,文章放下了不少。本来写了一篇『构建experiment-friendly的公司文化』,却怎么都无法令自己满意,一直断断续续地修改。来美国将近一年了,工作并不如意。可能是美国的大公司都比较懒散吧,我竟找不出在 Juniper CNRD 工作的感觉,更别提创业时的热血沸腾了。有力使不出是种可悲的感觉,加之没抽到H1b,出逃无门,只好默默修行…
请听题:一个使用 rail(或者 django,或者 express,...)和 MySQL 做的 API 系统,最近流量从 6,000 RPM 激增至 20,000 RPM,整个系统的压力骤升,现在需要在应用层设计一套缓存方案来降低整个系统的负荷。要求是:缓存方案不能在 web 层(包括 proxy)做,也不能使用 framework 自带的,或者第三方的…
用过 node.js 的同学都知道,它实现了 Observer 设计模式,做了一套类似于 Python 的 event listener,叫 EventEmitter。你可以创建(或者扩展)一个 EventEmitter,在需要触发事件的时候,emit 你想要的事件,然后在其他的代码中,监听这个事件进行处理。 EventEmitter 在做 library …
我们做系统,做设计,很多时候其实就是在明确边界。函数和函数要明确边界,模块和模块要明确边界,服务和服务要明确边界,应用和应用要明确边界。明确边界能让我们的代码逻辑严谨,条理清晰。边界之内,对于外部世界,是个黑盒,一切物质的非物质的交换都只能在边界上通过已知的接口(interface)完成;同时来自外部世界的 impure data 在这里被校验(valida…
自从阿尔法狗赢了李世石一句后,朋友圈就开始各种人类药丸的论调。赢下第二局,这种声音空前强大,目测超过60%。 我不懂围棋,也不敢妄称懂人工智能和深度学习,所以无法评论对弈双方下的每一子。阿尔法狗让人大跌眼镜,赢得干脆利落,无可挑剔,着实是一件可喜可贺的事情。不过对手强大了,和人类药丸 上古时代,巨兽横行,人类药丸。有巢氏,燧人氏定之。 帝尧时期,洪水泛滥,人…
刚在车上看了段视频,是 Neil Gaiman 在 UArts 的演讲,挺喜欢这段的,奉献给大家。还在上班的筒子们,预祝大家新年快乐!咱们2016再见! Make good art. I'm serious. Husband runs off with a politician? Make good art. Leg crushed and then eat…
最近写了些和函数式编程的文章,有读者和我讨论函数式编程和面向对象编程的优劣。二者都是很好的编程思想,都在着力解决代码重用的问题,也彼此吸收对方的优点,所以大可不必去分个高下。然而,相对于函数式编程来说,面向对象编程领域涉及的语言太多,受众广泛,因而门槛较低,产出的垃圾书(国内国外都有)也足够多,往往把读者带入错误的方向。 我面试过许多号称精通面向对象编程(比…
做拉条子是个苦力活,能把拉条子做好的程序员,写程序也不会差到哪里。 在做之前,你要么手边有本菜谱,要么心中有谱。你「看得见」,「闻得着」还未成形的美食:色泽如何,汤汁几成 —— 仿佛她们就在嘴边,向你招手;写程序前,你的谱就是你的设计,你清晰地知道 goals / non-goals,知道完工那一刻程序的模样。读菜谱是个苦力活,你要了解谱者的意图,知道所需的…
如果我纯粹为今天工作,明天我将完全无法工作。 -- 某子 程序员要面向未来编程。代码重构永远是程序员们无法回避的话题,当你的软件在编写的那一刻起,重构就不可避免。做一个系统,我们为什么要费劲地不断抽象,竭尽全力让自己的代码能够被重用,说白了就是让我们今日所付出的时间,让未来的我们能够更轻松地工作而已。 有位读者让我就 Martin Fowler 的『重构 -…
很久没有把我在 adRise 内部的演讲放出来了,一来最近我分享的频率低了(同事们也做了不少分享),二来有些分享是我们内部的系统,不方便放出来,但今天我跟团队分享的内容和内部系统无关,而是一个 framework,一个学习的 framework。 虽然标题是「如何学习一门新的语言」,slides 的所有内容也围绕着学习一门新的语言展开,但正如我最后放出的两个…
手机,计算机和电视这三块占据着人们生活的重要屏幕,一直是科技巨头们垂涎已久,妄图一统的战略要地。这个三屏合一,并非整合出一个屏幕来解决所有的生活工作娱乐的需求,而是三块屏幕能够互相配合,在最合适的屏幕上展示最有价值的内容。记得早在『未来之路』出版的年代,三屏合一就是一个热门的词汇,如今十多年过去了,巨头们仍然在这条路上徘徊和挣扎着。 然而,Apple TV …
小宝虐爹录(二) (一) 早上同事打电话过来。 我刚接,她跑过来冲着电话大嚷:haofei 叔叔啊 ##%#%#... 我赶忙把她抱走。 (二) 爸爸,你陪我玩吧 不理她。 爸爸,我陪你玩吧 继续不理她。 小家伙抱着我的胳膊,继续无理取闹:Anna 又冻成冰了,需要 true love! 你 true love 不是 Lucas 么? 可是 Lucas 不在…
做软件开发十数年,见识了形形色色的开发者,和各种各样的奇葩软件开发模式。本文跟你侃侃这些软件开发模式及其特点。 大巧在所不为,大智在所不虑。 -- 荀子 天论 IDD,也就是 IDE 驱动开发,几乎是初学者步入软件开发殿堂的必经之路。IDE 为开发者屏蔽了很多细节,并且几乎不用配置(相对于 vim / emacs / sublime)就可以使用代码自动补全,…
(1) 我的一天是这样开始的:清晨 5:25,我被闹铃吵醒,扑腾几下让它闭嘴后,我会贪恋在床上的最后几分钟。当闹铃10分钟后再次响起时,不容片刻犹豫,我必须在15分钟内完成这些动作:起床,上厕所,洗漱,洗澡,穿衣,将mbp装回书包,下楼,穿鞋,抄起一瓶 soylent,再下一层楼到地库,准备驱车至 Sunnyvale 赶 6:13 的火车。任何一个动作耗时超…
人类的智商从低幼逐渐走向成熟的标志之一就是认识和运用数字的能力。当我们三四岁的时候,数数虽然能够熟练地对一百以内的数字随心所欲地倒背如流,但数字对孩童时代的我们仅仅还是数字,即便刚数完了自己桌前有 12 粒葡萄,吃掉了一粒,我们还得费力地再数一遍才能确定是 11 粒(别问我为啥这都门清)。在这个年龄,数字离开了具体的事物,对我们而言便不再具有任何意义。 随着…
在「代码重构之道」里,我犯了个懒,讨论了什么情况下需要考虑重构,以及工具和方法来促进重构,但对如何重构代码本身,或者说:如何把烂代码转化成好代码,或者至少是合格的代码,没有太多提及。这篇文章谈一谈这个话题。 我们先给「合格的代码」做个定义: 满足项目所定义的 lint 规则 代码清晰简洁,没有反人类的逻辑或者刻意为之的 trick 尽可能控制副作用 代码的注…
夫鹄不日浴而白,乌不日黔而黑 -- 庄周 上面的这句话某种程度来说是不妥的,人性(这也是全体生物进化出的本能)趋利避害,如果不施加外力,很容易走向消极的一面。就拿读书这事来说,幼时父母的板子和棒棒糖,老师的教鞭和小红花,硬是在威逼利诱间引导我们从「咏鹅」一路背到了「从百草园到三味书屋」(否则可能是从「风魔小次郎」一路到「诛仙」)。如今一天工作完毕,心力交瘁,…
前一篇文章竟然被很多人批「干货太少」 —— 一看你们就没有看过 Rich 他老人家的 Hammock Driven Development(我很久前推荐过滴),这世界不缺代码,缺的是思想。你们要干货。好,咱们来点干货。正好之前有个读者在留言中诉苦,说看了之前的文章 谈谈抽象 不解馋,虽然学了 clojure 却总也厘不清 macro 的使用,跟着书上的例子可…
去年我写过一篇文章:撰写合格的 REST API。当时 Juniper 裁掉了我们在德州的一支团队,那支十多人的团队有一半的人手在之前的很长一段时间里,主要的工作就是做一套 REST API。我接手这个工作时发现那些API写的比较业余,没有考虑几个基础的HTTP/1.1 RFC(2616,7232,5988等等)的实现,于是我花了些时间重写,然后写下了那篇文…
工程师要有技术观,产品观和数据观。 (1)技术观 什么是正确的技术观? 我觉得首先是对各种技术不排斥,兼容并蓄。初入行的工程师往往会陷入对某种技术的深深的迷恋而不能自拔,以至于一旦有不同的声音出现,就会使出吃奶的智商为自己的真爱辩解。这种单纯和幼稚几乎是每个工程师成长的必经之路,就像情窦初开的少年看上了隔壁班的小芳,就以为世上西子只此一人一样;等到见识到了更…
两周前 rethinkdb 终于正式发布了 horizon,一套基于 rethinkdb 的后台应用:它让你只需要做一些基本的安全配置和 validation,就可以在前端操作 rethinkdb。是不是听起来耳熟?它也、比较像 meteor 使用的 minimongo,只不过实现的方式有些不同:minimongo 是 mongodb API 的一个子集;而…
这周不放文章了,把我今天在 team 的讲座拿出来和大家分享。 今天讲的是 reactive programming —— 更确切地说,是 spreadsheet-like programming。说 reactive 容易和 FRP(functional reactive programming)混淆,而今日的主角 hoplon / meteor / mo…
当我看到金鱼(前工场HR)发过来的 7/30 举办的创新工场老炮儿的活动时,已是北京时间周三。活动的时间是下午四点,正巧是我航班抵京后两小时,算算肯定能赶得上,我连忙填好了申请表,然后惴惴不安地等待申请结果。工场似乎很久没有举办类似把散落在各地的老炮儿们聚集在一起的活动,想必申请人数众多,虽然报名表上说优先清华科技园时代(2009-2010)和第三极时代(2…
是的,程序君已经半个月没出来冒个泡了,哪怕是花一秒钟摁个笑脸,或者传个被我家小丫头骑在身下扮演 Sven(Frozen 里的驯鹿)的照片。 有读者发了个哭脸过来,说刚把你置顶成真爱,就再没看到文章。我回了个大哭脸,说,对不起。我们的真爱经得起时间的考验么?等了许久,就当我悲哀地感慨自己被「真爱」无情地抛弃时,对方发来一段语音 —— 我愣了半天无所适从,战战兢…
又是一个阳光明媚的周六早上,获得了可以工作一天的许可,我在厨房欢快地摊着煎饼。这是次卧突然出来一阵大喊,我连忙关了抽油烟机,才听清楚领导焦急地在召唤我解决她电脑的「严重问题」。她的电脑发出刺耳的滴滴声,屏幕上是一个恐怖的对话框,其措辞的严厉程度和 windows 经典的蓝屏不分上下。我的第一反应是关机重启,但老婆说关不了机,而且对话框上说强行关机会损坏数据。…
在公众号里,被问得最多的问题就是:如何选择一个能够让自己成长的工作?以及,如何在工作中成长?这两个问题的核心词都是成长,而上周末见了一个 amazon 的朋友,聊得最多的也是这个话题。 我们先看第一个问题:如何选择一个能够让自己成长的工作。 这个问题在我 2015 年转的我 2014 年答读者问的文章里已经写过(看,有些问题就是这么任性地反复折磨我们),稍作…
上周六,我!终!于!拿!到!了!我!的!Hololens! 当我忙活一天从图书馆回来的时候,我的 Hololens 已经静静地躺在那里。 我迫不及待地拆箱,感受一下我这辈子买过的最贵的,含税将近三千三百美金的一个大玩具。开箱的体验并不算惊艳,没有我第一次拆开 iphone 包装的那种触动灵魂的美妙。也许是我之前手贱耐不住寂寞,看了太多 hololens 的开…
2016年8月22日早7:40,我所搭乘的 UA889 航班顺利抵达 SFO。出关人略多,但处理速度很快,不一会儿,就到我了。CBP 的 office 见我拿着 AP 卡(Advance Parole,俗称回美证),很快让我按了指纹,照了相,就请我去了 Second Office —— 也就是俗称的小黑屋 —— 去获取所谓的 Advance Parole s…
这是 InfoQ 大咖说我的直播的姊妹篇。 然而我并不愿意重复我在直播中所说的话。那样的话,诸君不如去重温直播。 我想从更宏观的一些方面阐述我的思路。 我们先看职业生涯。从弱冠之岁起,到知天命之年止,一个人的职业生涯有四十多年。这四十多年是需要仔细斟酌的。我感恩我出来创业的两年,这两年是我人生最大的转折:这转折并非是指我变得更「富有」,有更多的人脉,得到更多…
之前我们谈论了 pipe 之美:一件复杂的事务性的工作,我们可以将其分解成一个个小的组件(或者处理步骤),用 pipe 将其串联起来。举个实际的栗子:作为一款带广告的视频播放软件,TubiTV 一个主要功能是在广告机会出现时,遍历符合要求的广告 vendor,向其发送广告请求,然后从响应中过滤合适的广告,最终播放给用户。这是每个视频播放软件的基本功能,其需求…
知乎上有这样一个贴子:张继科为什么突然火了?有这样一个答案:“桀骜不驯目标明确,年少遇挫之后绝地反击重回巅峰。经历多少腰伤的折磨,面对镜头却始终一脸云淡风轻。好像他尝尽了所有光荣与低谷,却仍旧是最初那个鲜衣怒马的少年。” 陈天,曾经是获得过创新工场等知名投资机构投资的创业公司的创始人,走过两年的时光,从梦起到梦碎,经历一步步发展,然后又一点点衰落。蛰伏一年后…
非常抱歉这么久才给出答案。 早起应该注重职业生涯的自我定位和习惯的培养。定位是个很困难的事情。不要把自己定位成,比如说:java 程序员。这样的定位太笼统,很容易泯然众人矣。应该对自己又很具体的定位:比如 java 虚拟机性能调优专家。好的定位让你有更明确的方向。至于习惯的培养:写代码的风格,做事的方法,甚至早睡早起,定时定量阅读等等,这些习惯都会在你职业生…
写了许久公众号,也就推荐过一次安姐和池大。今天借着公众号推荐,写写好几个朋友背后的故事。 安姐一言不发,昨日就给我发了个大招 —— 在她的公众号压轴推荐了我。之前和安姐互推了一次,我都是在借她的势,这次必不例外。简单介绍一下安姐:Angela Zhu,朱赟朱大美女,简称安姐,标签很多:rice大学博士,美女妈妈,airbnb 程序媛,etc.。第一次去 ai…
(1) pain is inevitable. Suffering is optional. - 无名氏 很久没有认认真真跑步了。从国内回来后,肚腩大了一圈。痛定思痛后,连续两周跑了半马。搁去年,不吃不喝跑 20+ 并非难事,它仅仅是绕着风景优美的 lake Elizabeth(湾区 fremont 的一个小湖)的 2 miles 长的环形跑道没心没肺地跑上…
忽一日於驴上吟得:‘鸟宿池中树,僧敲月下门。’初欲著‘推’字,或欲著‘敲’字,炼之未定,遂于驴上作‘推’字手势,又作‘敲’字手势。 - 《鉴戒录·贾忤旨》 两句三年得,一吟双泪流。知音如不赏,归卧故山丘。 - 贾岛·《题诗后》 起名(或者遣词造句)并非一件容易的事,想想你家宝宝出生,你挠破头皮,绞尽脑汁,翻遍字典,抓破诗词古籍的便秘场景,你就该知道多痛苦了。…
刚刚这个国庆,对程序员来说,最糟心的事情莫过于 ZeroMQ 的作者 Pieter Hintjens 的安乐死。想必你的朋友圈也传过了那篇令人感怀的 A protocal for dying。如果你还没看,翻翻朋友圈,仔细读一读,然后收藏起来,一两年后再看上一看。可敬的 Pieter,临终前的 last words,也不放过自己搞 messaging 的本行…
2012年的感恩节前夕,小宝在盛产朝阳大妈的北京朝阳区出生了。 时隔四年,2016年国庆节前夜,小贝在几乎一半人口都是工程师的加州旧金山湾区的圣克拉拉郡出生了。 小宝出生前,宝妈在医生语重心长的警告下,含泪选择了剖腹产;小贝出生前,挨过一刀,已荣升贝妈的宝妈在医生孜孜不倦地鼓励下,坚定了自然分娩的信念,全力以赴顺产成功(按照北京医院的态度,头胎剖腹产,之后就…
一个多月前,facebook 将其开源了一年多的 GraphQL 标记为 production ready ( http://graphql.org/blog/production-ready/ ),几乎同一时间,github 开放了其 GraphQL API 的 early access ( https://developer.github.com/ear…
什么是技术债?通常意义上的技术债是指我们在开发产品或者功能过程中,快速(往往伴随着混乱和各种限制)地在时间和资源受限的情况下完成正常情况下无法完成的工作时引入的技术问题。这些问题可能会导致将来引入新的功能变得很困难,或者开发出来的功能很快到达容量上的瓶颈。这种由于时间和资源受限的情况下不得不牺牲质量引入的技术债是最主要的一种技术债。 第二种技术债是因为开发团…
写这个题目估计会招人骂。 这三个著名的 MVC(或者 MTV) framework,分别对应 Ruby,Python,Elixir 三种语言。说他们是这几门语言的顶梁柱毫不为过。很多人都是慕着 framework 的名而来,进而学了语言。典型的就是曾经大红大紫(现在也算是一线明星)的 rails:很多 rails 工程师最初只知 rails,写了 rails…
今年又参加了在赌城举办的 aws re:invent。讲正题之前,先黑黑程序员。 拉斯维加斯是个释放成年人荷尔蒙的地方。各种花式赌法,无数妖艳的老虎机,美女,壮男,从老少咸宜的秀一路到R级的秀,甚至 private show,总有一款能够满足你。然而,程序员在拉斯维加斯的玩法是这个样子的: 晚上8点吃完晚饭特地打 Uber 回会场参加 keynote。。。U…
Never underestimate the bandwidth of a station wagon full of tapes hurtling down the highway. — Tanenbaum, Andrew S. (1989). Computer Networks. p. 57. 这是 CS 毕业生的老朋友(大家学 OS 的时候都看过他的…
Transformation 是本次 Werner Vogels keynote 的主题。为了契合这个主题,他还穿了印有汽车人标志的T恤上台演讲。这个 keynote 非常值得反复观摩 —— 整个 keynote 的表面上的核心是:我们如何通过 development,data,compute 上的革新来帮助客户成为 internet scale 时代的 t…
车险可能是这个世界最不合理的保险之一。如果你每天坐公交上下班,只是周末偶尔出去玩玩,一周开不了两百公里,一年开不了几十次的话,你还是需要支付和那些天天开车,一年开好几万公里的车主几乎相同的保险费用。这非常的不合理 —— 正常的风险评估下,如果其他因素变化不大(比如说驾驶技术),你是属于风险非常小的客户 —— 开的里程越小,次数越少,出事故的概率就越小。因而,…
中午老婆发来一条消息:昨夜,你梦中叫了一个女人的名字,还两遍。 我大吃了一鲸。平日里我的梦话都 base64 简单编码了一下,怎么昨个直接明文输出了?我赶忙问,小宝还是小贝? 她回复了一行字:Alexa, stop. Alexa, play &@#$(@. 我默默地抹了一把汗。看来语音女神大比拼,Siri(apple),Cornata(microsoft) …
12月是 tubitv 最为繁忙的一个月份。在这个月,广告金主们留下了充沛的预算,挥舞着支票冲进节日的市场;可爱的用户们,一年间就寻觅着这么一个机会,半推半就的休上十天半个月的假,吃喝玩乐,不亦乐乎。高富帅白富美自然是在夏威夷,坎昆,阿斯本等地和大自然一起消磨时光,而屌丝群体,多数在家呆着,只好看!电!视!了!要说美国人对电视的热爱,那简直到了令人发指的地步…
作为一个 video streaming service,TubiTV 很重要的一项功能是保证影视剧按照合约上的要求在规定的时间(窗口期),规定的平台,以及规定的国家发布。比如 Terminator,合约上规定 7/1 10/30(我瞎编的窗口),在美国可以上线,只允许 appletv,iphone,roku,web 访问,那么,如果我们不能正确处理,让加拿…
我曾经发过的 TubiTV 中国团队的招聘贴,基本要求这一页我是这么写的: 作为一个已经命中注定和代码打大半辈子交道的程序员,我们职业生涯的「小」目标大多是 成为一个牛逼(awesome)的工程师。虽然不是每个人都能像 Linus Tolvalds,Bill Joy,Joe Armstrong 等先贤那样伟大,在人类历史的长河里留下不可磨灭的贡献,但下一个 …
TDD(Test Driven Development)一直是程序界追求的一种开发境界。要想真正做到对项目有帮助的 TDD,并不是一件容易的事情。我见过不少团队做 TDD 流于形式,为了写测试例而写测试例,反而拖累了项目的进程,得不偿失,动摇了整个团队继续使用 TDD 的信心。如果你恰巧属于被 TDD 折磨到吐血,或者听到了大量 TDD 毫无意义影响项目进度…
严格意义上来说,我之于 erlang,也是个半吊子,到目前为止,还没有写过真正的在生产环境中使用的 erlang 代码。不过我倒是写了两千行在生产环境中使用的 elixir 代码,还有几千行将要被应用在生产环境中,所以自认为对 elixir 算是略懂一二。由于在 VM 层面和语言核心层面,elixir 和 erlang 一脉相承,所以我也对 let it c…
过去的一周多每天戴着耳机,对邮箱里看得上眼的简历电话筛选。作为一个「内向」的,不那么喜欢电话沟通的人,我从未这么集中地打过电话 —— 我的舌肌和咬肌得到了前所未有地锻炼,仿佛这辈子要煲的电话粥,说的情话,都得在短短几日里完成。 很多招聘者对待面试是一个居高临下的态度,仿佛一份工作机会是一份给予,是施舍,是「有个工作就不错了你还那么矫情究竟想怎样爱来来不来滚」…
美西太平洋时间早上 10 点(北京时间凌晨 2 点),AWS S3 开始出现异常。很多创业公司的技术人员发现他们的服务无法正常上传或者下载文件。有人在 hacker news 上问:Is S3 down? 然后迅速得到大伙的确认。 然而,AWS 自己的 status page (https://status.aws.amazon.com) 却后知后觉,放眼望…
武林外传里秀才怼上姬无命是,来了一段关于「我是谁」的精彩演讲。 我是谁?我生从何来,死往何处,我为何要出现在这个世界上?我的出现对这个世界来说意味着什么,是世界选择了我还是我选择了世界?!我和宇宙之间有必然的联系吗?宇宙是否有尽头,时间是否有长短,过去的时间在那里消失,未来的时间又在何处停止,我在这一刻提出的问题还是还是你刚才听到的问题吗? 我们平时很少问自…
距离 1.2 发布已经有一年多,而 exlirconf 2016 McCord 宣布 1.3 的特性也已过去半年,phoenix 1.3 依旧犹抱琵琶半遮面,迟迟不肯现身。几天前,1.3 RC.0 悄然发布,我们终于可以一睹她的芳容。 因为程序人生的读者大多不是 elixir / phoenix 的用户,所以在这里小小普及一下。elixir 是在 erlan…
上文谈到了像读书一样阅读源码的重要性,今天谈谈如何阅读一份代码。我所谓的一份代码,其范围可能从几千行到数万行,有时甚至可多达数十万行。这些代码作为一个有机体,共同完成某些重要的功能。比如说几个著名的 full fledged web framework,祖师爷 rails,师叔 django 和小师妹 phoenix: 三者对比很有意思 - rails / …
程序员每天都和代码打交道。经过数年的基础教育和职业培训,大部分程序员都会「写」代码,或者至少会抄代码和改代码。但是,会读代码的并不在多数,会读代码又真正读懂一些大项目的源码的,少之又少。这种怪状,真要追究起来,怪不得程序员这个群体本身 —— 它是两个原因造成的: 我们所有的教育和培训都在强调怎么写代码,并没有教大家如何读代码 大多数工作场景都是一个萝卜一个坑…
今个谈谈 erlang。我之前谈过不少语言:elixir,javascript,golang。那些文章流于表面,更多是简单的介绍。这篇文章不同,因为 erlang 并不是一门新语言,简单介绍它的人不算少,我希望这篇文章能在深度上有所区别。写文章,雅俗共赏是件困难的事情:讲深了,初学者或者外行读着扫兴;说浅了,专家们会觉着浪费时间。所以,我会尽量做到深入浅出。…
其实这个问题在『黑客与画家』里 Paul 已经给出了答案:选择那些具备 可测量性 和 可放大性 的工作。 我们来详细说说。注意以下的话跟「敏捷宣言」的措辞类似 —— 当你有选择的权利和能力时,优先选择前者而不是后者。但,这并不意味着后者不好。 首先是行业的选择。蓬勃发展的行业 要优于处于稳定的行业。比如说同样是软件行业,互联网就是比传统软件行业发展速度快得多…
最近一个月,我和一小撮不专业的美国银行从业人员就「我是不是清白地像于谦那样」(写石灰吟的于谦,不是有三大爱好的那位)反复拉锯,又赶上一大波功能上线和融资相关的事情,忙碌地无心在火车上干活,懒散了,便从周根霞退化成了岳根霞。公众号后台和微信里满满地不理解:刚置顶你丫,你丫就耍流氓(这话似乎几个月前听过)。后来苹果微信开撕,有些小伙伴恍然大悟,连忙安慰:叔,不哭…
遥想盖子当年,MS 红火了,谈笑间,640k 内存足矣。 - 程序君 现在已经不是从指缝中扣内存的时代了。bit 在主流的解释型语言中要么失了踪迹,要么被作为高(sha)级(bi)功能被雪藏起来,就像 .net 的 managed code 一样,被压抑得像个旷妇。 HTTP 这样的 string-based protocol 进一步助长了这种气焰,互联网世…
erlang/elixir 是那种你用得越多,就越喜欢的语嫣。 一个多月前,我在 erlang 哪篇文章里,写下了这篇文字: 在 erlang 的世界里,万事万物都是 process。process 就像原子一样,组成分子,细胞,组织,器官,最终构成一副机体(见我的文章:boundary)。那么,process 究竟是什么? 其实它和 OS 的 proces…
这篇文章和同名的书没啥关系,主要想再讲讲这幅图,因为有人问到。 在我懵懂的时候,我的老东家 Juniper 的 ScreenOS 的设计给了我很多启发。防火墙是分 control plane 和 data plane 的,control plane 负责慢速处理,比如 UI,协议层的预处理,比如 IKE 的 phase 1 SA / phase 2 SA 的…
在旧金山举行的 erlang/elixir 2017 大会上周结束。这次,我并未参加 —— 权衡再三,我选择了这周的 complete OTP 培训,毕竟大会的视频 youtube 上找得见,可以慢慢补,培训错过了就没了。 参加一次技术培训,代价往往不菲,像这样一个四天的培训,价格是两千多刀,你很难说出它有多值 —— 培训的主题有一半都是我已经了解或掌握的内…
在谈论一般意义的状态机时,我们先看看有限状态机,Finite State Machine,简称 FSM。 在计算理论(Theory of computation)中,FSM 是一切的基础,也是能力最为有限的机器。在其能力之上是 CFL(Context Free Language),然后是 Turing Machine。 FSM 解决一个输入序列,经过 FSM…
不记得是 08 还是 09 年那会,有网站被脱裤,数百万简单的用户密码被逆向出来。当时我还在 Juniper,公司 IT 发了篇文章建议创建并使用安全的密码。其中一个建议是:用一个句子 + 某些规则来生成密码。 这是个很好的方法,我照做了,然后就养成了习惯,一直到现在。 我来解释一下这种方法。首先你得挑一些你能记住的句子,比如说: 1. life is ab…
red lang 前两天发布 0.6.3 了。osx GUI 终于得到了支持。 这事,连 hacker news 上都没掀出多少波澜。帖子在近二百多顶后,就渐渐沉底,不知去向。 我第一次听说 red 大概是 2015 年。当时在 medium 上有一篇采访 Nenad Rakocevic 的帖子,谈了 red 的思想,red 对 rebol 的传承,以及其雄…
这是我的一次知乎直播的文字版,有删改。 大家好,我是陈天,是 Tubi TV 的 VPE,或者说,研发副总裁。不要被这个头衔吓住了,我这个副总裁,虚的要死,绝不是师级单位,也就大致是个小排长,所以咱们这个 live,是对等的,我不会端着,你也没必要恭恭敬敬的 :) 大家都是为了传道授业解惑而已。我常常开玩笑说见面不如闻名,一切你感觉到神秘的,厉害的所谓牛人,…
上了大学以后,我和我的父亲开始频繁书信往来。虽然常常捧着《傅雷家书》读,但我并不太羡慕傅聪,因为我也有一个称职的父亲亦师亦友地点播我,跟我谈心。没想到, 一晃十七八年过去了,我也到了当父亲的年龄,这接力棒交到了我手上。 我并非没有为此准备,但相较于我在职业方面的储备 —— 两个学位,十多年的经验 —— 我并不真的懂得如何在父亲这个职位上做到最好。做一个父亲和…
关于比特币套利交易的文章,坊间一搜一大堆,尤以 2014,2015 为甚。那时交易所间价差相当可观,套利的机会很多,躺着赚钱并非难事。如今,套利区间收窄,留在沙场上的估计只剩下大玩家,想要不费力气躺赢机会渺茫。最近帮朋友牵线寻找币圈量化交易的机会,本欲做个打酱油的中间人,事了拂衣去,安安静静做个三河市微胖界扛把子,谁料还是一时技痒,不小心昨夜搭进去六七个小时…
上周面试了一个来自俄罗斯的 android 工程师。很 geek,对 office 的 binary format(不是后来的 xml format)做过深入的逆向工程。他在 yandex 做过产品,而不是工程师 —— 拿他的原话说,就是 Yandex 对工程师要求太高,他试了三次都没成功,只能退而求其次做产品。当然,本文想讲的不是这个哥们,而是这哥们现在所…
8月18号,facebook 发文进一步澄清了 react 的 license。这似乎是对 apache foundation 将 facebook 特有的 BSD + patents license 列入 category X 的一种辩解,可惜,社区并不太买账。 先讲讲 Category X 是什么。它是一个列出了那些不能在 apache project …
上周四至今,我大概有 50-70% 的时间在造一个轮子,一个叫 merlin 的工具。 事情的起源是这样的 —— 我们内部的一个重要服务,要升级到 elixir 1.5。之前这个服务的 ansible 部署代码大概是这样的:在目标机器上 clone 代码,编译,生成一个符合 systemd 的 release,更新 systemd 配置,重启服务。那位说了:…
要不要转行(报考)软件开发?程序员的高薪让我流口水,但好日子总有个到头的时候吧?不会我一入行就见顶了吧? 这样的问题让我不胜其烦。为子女未来前途操碎了心的长辈们,长辈们的朋友们,还有微信知乎上的朋友,像候鸟一样,在一年里的两个时间:春节期间和高考报志愿前夕,准时开问。我大概六月份回答过一位长辈的咨询,他说小陈,你说的好像很有道理的样子啊,应该发篇文章我好能转…
在用了六年多 iPhone 后,程序君对 iOS 系统已经深深地审美疲劳,累觉不爱。 新出的 iPhone X 噱头不少,从功能上来看让人大失所望。正好,pixel 2 系列几乎同期推出,程序君便改换门庭,投入 Pixel 2 XL(以下简称 2XL)的怀抱。月初拿到了 2XL,天天机不离手,各种发朋友圈晒功能。朋友说,少得瑟,有那时间都能写篇文章了。想想也…
工作中,我们常常要处理浩瀚如烟的日志。有时候,看日志是为了处理软件中的 bug,更多的时候,是为了从中获取有用的信息 —— 这信息可以用来做 behavior analysis,可以用来做 anomaly detection,甚至也可以做 data recovery。 这个周末两天,家里的活动不少,有一搭没一搭的,在做一个 log parser。这 log …
在美帝面试工程师,是一种有趣的体验。以前曾经在朋友圈里发过一些体验,这两天,面试了两个很有意思的工程师,其中一个勾起了我一份尘封的回忆。对着我写公众号的 git repo,我用 ag 搜索了半天,终于找到了一篇没写完所以没有发的老文章。今天我们讲讲这三个人。 (一) SH 君。我昨天面试的 SH 君。他的背景是广告系统 —— 他在之前的公司现学现用,用 er…
Marissa,也就是大家所熟知的梅姐,曾经媒体的宠儿,淡出公众的视线已有一阵子。上次她被大家记起,还是 Yahoo,这个曾经叱咤风云,拥有过千亿市值的互联网鼻祖,委身 50亿下嫁 Verizon 的时候。 然而在五年前,你要问硅谷最炙手可热的人是谁,如果梅姐敢称第二,小扎都不太敢称第一。她职业生涯的头 13 年(1999-2012)神奇而辉煌,从一个斯坦福…
周日早上爬完香山回来,想起还和一位朋友约了咖啡,赶忙打开微信扫路边的一辆单车。摩拜的小程序提醒我开锁中,请勿关闭小程序。然而这开锁的进度在百分之零的位置停留若干分钟,毫无变化。等了许久,我怀疑网络不畅,于是关闭小程序又重新打开扫描,这下可好,小程序直接告诉我:「您上次用的车还未关锁,暂时不能在用其它车哦」。 这就傻逼了。我对着一辆明明没开锁却被认为已开锁的车…
昨晚连续做了三个可怕的梦。比梦境更可怕的是,这三个梦我都清晰地记得,醒来后还能把每一个细节都讲给老婆听。 晚饭后,小宝说她想去院子里玩一会。我说好吧,给你十分钟。小丫头于是兴高采烈连蹦带跳地出去玩。十分钟后,我呼喊小宝,院子里却无任何回应。我急忙拉开院子门,倒吸一口寒气 —— 映入眼帘的不是我熟悉的小院子,而是一块墓地,活脱脱哈利和赛德里克抓住火焰杯后误入的…
从 2014 年第一篇公众号文章开始,三年多时间我竟然已经写下了 386 篇文章,涵盖技术,管理,创业和一些莫名其妙的感悟。这便是小小的坚持迸发出的能量:不经意间,日拱一卒的零零碎碎汇集出这般美妙的结果。 我常说:读自己的日记,仿佛在跟过去的自己对话。读自己的文章也是如此。早上在 4S 店保养小车,闲来翻翻自己的文字,感觉很棒 —— 这并不是说我觉得我的文字…
scheduling 有很多很多可以谈论的地方,随便一个点就可以做一次讲座。这次我只是讲一个概述。 wikipedia 上是这么说的: In computing, scheduling is the method by which work specified by some means is assigned to resources that compl…
约莫十五年前,当我刚刚开始参加工作时,赶上 Linux 发布划时代的 2.6 内核。在这个大家都翘首期盼的内核版本中,最令人兴奋的便是 O(1) scheduler。本文来谈谈这个算法是如何实现的。不过,在详细讲解 O(1) scheduler 之前,我们先简单回顾一下让人诟病许久的 2.4 scheduler,了解其传承,同时以史为镜。 Linux 2.4…
写了三年多文章,却从未考虑过进一步系统地提升我的写作能力。我笃信以练代学(learning by practicing)和以教代学(learning by teaching),自己也从这些方法上获益不少 —— 就拿写作吧,周复一周不断写作让我能够在打开 atom 后,思维自然涌向指尖,流畅地把要想表达的事情表达出来。 然而,再好的法子也会遇到瓶颈。柳传志老先…
16 年我写过一篇文章,抽象的能力,没有读过的同学可以再看看。那文章算是一个引子,举了不少实战中对代码和对需求进行抽象的小李子。大家重点注意一下最后一个例子 —— feed parser 的抽象。feed 是好莱坞 studio 给我们提供的可供播放的短视频的清单,每家 studio 都有自己的 feed,结构上大同小异,细节上差别不小:格式上,有 xml …
最近从无趣的工作中发现了有趣的事情,工作和业余时间都扑了些精力上去,本待上周末最终的成果出来后再写文章的,无奈事情太多,代码还没写完,二月上旬已过,再不写文章春节就过去了,所以这次程序君先上车,再补票。 事情是这样的:两周前同事催促我升级我之前做的一个轮子 merlin - 见我去年的文章:停下来,歇口气,造轮子。 在那篇文章里我提到了为什么会有需要做这样一…
今天谈谈我自己做研究的方法 —— 它跟随我多年,且一直在演进和完善中。我虽然没有读过 PhD(希望有生之年能够尝试一下),但我自认为这法子并不算差 —— 至少,它让我能够更加高效地进入一个新的领域,并且扎根于其中。如果你一直在读我的文章,好奇为何程序君涉猎范围这么广(就是这么爱给自己贴金),又扎得比较深(被自己帅哭了),那么,你可以仔细读读本文 —— 还是那…
最近一个多月,谈论 blockchain 的人如此之多,以至于连菜头叔都写了篇文章「韭菜席地而坐」。我在朋友圈里转了这篇文章,评论说: 区块链是对此钻研的技术人,场内人士,以及为所有参与者提供服务的人的盛宴,因为他们对此深思熟虑,并且有金钱以外的付出。那些听风就是雨的参与者,仅仅花费时间在 telegram 里打听小道消息,盯盘讨论涨跌的人,都是韭菜,大小而…
居下位而不获于上,民不可得而治也。获于上有道:不信于友,弗获于上矣。信于友有道:事亲弗悦,弗信于友矣。悦亲有道:反身不诚,不悦于亲矣。诚身有道:不明乎善,不诚其身矣。是故诚者,天之道也;思诚者,人之道也。至诚而不动者,未之有也;不诚,未有能动者也。 - 孟子 这次 Code Beam,我演讲的题目是:Build a decentralized, public…
与比特币首次结缘大概是 2013 年我结束创业,回到 Juniper 时。有阵子,饭桌上我的同事东哥经常会眉飞色舞地谈起很多关于比特币和中本聪的轶事,还有他做量化交易的有趣经历,并常常劝我也看看这个主题 —— 即便那时我对此并没有太大的感觉。经历过一次如梦般的创业历程,我还在艰难适应朝九晚六的坐班身份,以及,谋划着未来肉身翻墙的事宜。我浅浅看了网上有关比特币…
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。 - 《道德经》 转眼间女儿到了学琴的年龄。我对乐器,纯是叶公好龙,家里摆着钢琴,小提琴,手风琴,自己却连五线谱也不识,所以无法督促丫头练习,于是这重担落在了老婆身上。老婆是个虎妈,严厉起来毫不含糊,说练不完琴不许吃饭,就不许吃饭,丫头撒泼打滚,哭天抢地,姥姥红着眼圈在旁劝阻都无济于事。这种时刻,我…
(一) 这个二月,对我的整个人生而言,是一个特殊的月份,因为,我终于要跨过那个程序猿们闻之变色的三十五岁魔咒了。 在程序猿的远古年代(89-05),坊间流传着这样一个魔咒:程序猿这种职业,干不过三十五。换句话说,三十五你还没转不写代码「只动动脑子」的 architect,PLM,或者转不写代码「只动动嘴皮子」的 manager,sales,那么你一定会被25…
沃斯大神说过,程序 = 算法 + 数据结构。 程序君认为,等式的右边,数据结构的权重要大于算法。数据结构定义好,基本上,你所用的算法也就确定了,算法的时间复杂度也八九不离十。上周,我在 team 内部分享了一个关于数据结构的主题,在这里,也和诸位分享。 现代的编程语言,内置的数据结构越来越多,从 primitive 的类型:integer, float, b…
在奉上有关「共识机制」的文章前,我们先来点甜点。 在两周前的 BBL 上,我给团队介绍了 bitcoin,相关的 slides 见 github.com/tyrchen/unchained。其中花了点时间谈论了 quantum computing 对 bitcoin 的威胁。上周 google 发布了 72 量子比特通用量子计算机,引发了大家的热议 —— 尤…
2018 年到目前为止最大的一件事,终于落停:周四凌晨,我们(Tubi TV)把所有的服务和数据从一个 region 迁移到另一个 region。工程团队内部给项目起了一个响亮的名字:Move to Oregon。对于技术公司来说,这种迁移,是单向的,不成功,就成仁 —— 一旦我们解决不了迁移中发现的所有严重问题而不得不回滚的话,不光意味着工程团队半年多的努…
最大的收获自然是我和 Joe 老爷子访谈,它是无价的。我前些日子已经放了篇文章:joe。没看过的同学可以点进去看看。我希望我六十岁时,也能像老爷子一样,睿智,洞悉世事,和我聊天的人都有这样的感觉 —— 就跟 Frodo 憧憬未来时夸赞 Sam 那样:Tyr the thinker。 这次 Code Beam,我做了一个三十多分钟的演讲:Release, De…
好久没有聊这个话题,谈谈我的看法。 简言之,无论团队大小,管理者的主要任务是建立 信任,输出 文化,确定 目标和战略(策略),有效 执行,并且和团队不断 学习和成长。 我们一个个说。 信任是人与人之间最宝贵的东西,也是最神奇的东西。在一个团队里,如果人与人之间的关系首先不是信任关系,那么,很多事情的效率就只会变得无比低效 —— 因为你要么得依赖复杂的流程来控…
Joe 老爷子是 Erlang 世界里的一个图腾。 他书中的句子,他的公开演讲或是私下的谈话,都被不同的人到处引用 —— 今年的 code beam,好些 speaker 用 Joe 的原话来佐证自己的观点。Joe 因为 Erlang 的诞生被视作天才,视作英雄,视作传奇。但 Joe 自己却将其归功于 Ericsson 的「大度」:你知道 Ericsson …
宿雨收尘,朝霞破暝,风光暗许花期定。 —— 《踏莎行》晏几道 这是我 3 月 23 日的一则朋友圈。下了一夜的雨后,清晨的 AT&T 球馆,如出水芙蓉,美目盼兮。走在去往公司的路上,我心情复杂,因为我终于要告诉老板我计划四月底离职的消息了。 是的,三月初那次西雅图之旅后,我便已下定决心,挥别 Tubi(虽然非常依依不舍),投身 blockchain 技术。之…
在一段旅程行将结束的时候,retrospective 是最好的临别礼物。Tubi 是一家独特的 startup,站在外人的角度,你很难想象这样一家不到三十个工程师的公司,竟然同时维护着五个主要的产品线:二十多种客户端软件(并且还在不断增加);五十多种自研或者第三方的后端服务(即便第三方,也还需要部署升级记录 metric 等维护工作);一个完备的广告系统;一…
在两三周前的文章中,我提到了我将要离开湾区,迁居到西雅图,做区块链相关的事情。四月底的那个周末,挥别妻女后,我一人一车,在后座上两个静悄悄的儿童座椅和 Ted Radio hour,backstreet boys,邓丽君等的陪伴下,一路北上,穿 Oregon(俄勒冈州)而抵 Redmond(雷蒙德),安全到达朋友家中。如今正式入职 Arcblock 一周,该…
我是 AWS 的重度用户,重度到「饭可以一日不吃,AWS 不可一日不用」,每天我的例行工作就是「吃饭,睡觉,上 AWS」。纵观过去几年我在 Juniper 和 Tubi 的经验,我在 Arcblock 过去的一个月渐渐摸索出来一些使用 AWS 的最佳实践 —— 虽然这些实践的对象是 AWS,但也许对你使用其它云的姿势也有一些借鉴意义。 首先,使用云服务,我们…
(一) 那美克星上,悟空在经历了游走生死边缘的地狱般严苛的训练后,终于以二十倍界王拳的力量直面弗利萨。然而,实力差距过分悬殊,悟空唯有兵行险着 —— 集全部力量于一体,发出了超级龟波气功。这几乎是他最后的希望。可惜,全力一搏并没有什么效果,反而狠狠激怒了弗利萨。力量耗尽,悟空几乎动弹不得,像一只待宰的羔羊:那是他的至暗时刻,甚至是整部《龙珠》的至暗时刻。 同…
好的程序员从来不靠格子衫或者颜值吃饭,就像你家 C 罗明明可以靠脸,却非要用不断精进的身体和技术迷倒你。对伟大前锋来说,进球,以及一个能够迸发出进球能力的身体非常重要。 对靠谱程序员来说,代码质量,以及一颗能够洞悉高质量软件编写之道的大脑弥足珍贵。 本文从 产品,接口,指标,日志,代码清晰度,代码复杂度 等方面,谈谈如何提高代码质量。 好的产品经理未必是…
Paul Graham 在《黑客与画家》里谈到:程序员的职业是个完美的职业,因为它兼具 1) 可测量性 和 2) 可放大性。我们常常说一个「优秀」的程序员可以抵得上三五个,甚至数十个「平庸」的程序员。这话也对也不对。「优秀」和「平庸」都是相对的,所谓「汝之蜜糖,彼之砒霜」,Forrest Gump 放对了位置也不可谓不优秀。 确切地说,一个优秀的程序员应该能…
Oracle,不单是甲骨文,它还有先知的意思。在 Matrix 里,洞悉一切的先知却无法预测 Neo 的未来 —— 记得当 Neo 第一次见到先知的时候,先知并没有告诉他是不是救世主 (the one),而是抛给他一个艰难的选择:Morpheus 深信你是救世主,所以会赌上性命为了救你而牺牲,你和 Morpheus 只有一个人能活下来,你该怎么选择? Mat…
如果你以为本文是在讲 Ethereum,或者 Smart Contract,那我非常抱歉。本文将要讲述的是 Engineering practices 以及我对一些流程的思考和应用。 在展开新工作的第一天,我就试图将 bootcamp 和 BBL 的文化引入 Arcblock。两周后,我们的 bootcamp site 长这个样子: 请原谅这个简单的 UI …
转眼已是七月。距我上次更新公众号,已经一月有余。离我加入 Arcblock,也有两月。如果把人看做一个运行的软件,那么这两个月我已经迭代好几轮,就像龙珠里在飞往那美克星的太空船里不懈修炼的悟空。 人的成长是有诱因的,但不外乎得到他人指点,和自己开悟两种情况。吕蒙原本一介武夫,经孙权劝学后,发愤图强。有次鲁肃跟他议事,大惊失色,于是有了「士别三日,当刮目相待」…
这颗行星上存在着 —— 或者说曾经存在 —— 一个问题,那就是:大部分的居民在大部分的时间里都感到不开心。针对这一问题曾提出过各种各样的解决方案,但其中大部分都是紧紧围绕那些绿色小纸片的运动来着手的 —— 这很奇怪,因为实际上并不是这些绿色小纸片不开心。- 《银河系漫游指南》 我见过五年换过八份工作的人,也见过对自己没有稳定定位,在几个方向上来回飘的人。我还…
Sindre Sorhus 是我一直 follow 并且仰慕的程序员。他的 github 日常是这个样子的: 很久以来我一直好奇 —— 究竟怎样的工作效率能够让一个人在一个月的时间里工作在几十个 repo 里,创造出好几百的 commits?是对编程的狂热?对代码掌握得游刃有余?还是对自动化的极致追求? 过去的三个月里,我畅游在 elixir,ansible…
试问岭南应不好,却道,此心安处是吾乡。- 苏轼 从硅谷折腾到大西雅图地区已经四月有余;而从北京折腾到湾区差不多是四年前的事情了。我的父母给予我折腾的基因,我毫不吝啬地将其传给了下一代 —— 生于新疆的我六岁随着父母折腾回到甘肃,然后十二岁又辗转到广东;而我家小宝两岁就随着我从北京折腾到硅谷,六岁则要带着她两岁的妹妹再折腾到西雅图。虽然写书写不过我父亲,事业上…
Hackathon,黑客马拉松,或者黑客松,是程序员们喜闻乐见的一种愉悦心情,开阔眼界,碰撞灵感的活动 —— 一群人,在一段特定的时间内,相聚在一起,通力合作,针对某个主题,编写点有意思的程序,应用,或者产品。根据 wikipedia 的记载,hackathon 起源于 OpenBSD 的一次密码学活动:「OpenBSD 于 1999 年 6 月 4 日在卡…
前两周上线了 Cybermiles 的 supernode,因为 Cybermiles 主网使用了 Tendermint,于是上周便研究了一下 Tendermint,边学边写了个 slides 介绍 Tendermint。 Tendermint 是一个脱胎于 PBFT 的 consensus engine,并在此之上构建了一个 Appliation Bloc…
天之苍苍,其正色邪?其远而无所至极邪?其视下也,亦若是则已矣。 - 《逍遥游》 对程序员来说,数据是我们时刻都在打交道的东西。我们的代码如同一台机器,把进入的数据转换或者映射成出来的数据。数学上,不过是:y = f(x) 而已。数据就像庄子口中的鱼,在代码的作用下,一会化身为文件,在文件系统里「沉潜」,一会化身为变量,在内存中「浮动」,一会又扶摇直上,化身为…
如果说牛顿的经典物理是爱因斯坦相对论在低速环境下的一种体现的话,我们所熟知的数据库技术,可以认为是区块链技术在弱分布式环境下的一个特例。 「弱分布式」环境是我胡扯的一个词,你可以将其理解为节点数量极其有限,运行环境高度可控的一种分布式环境。一个数据库集群运行在同一数据中心,或者不同数据中心,只要是同一个管理者,那么这就是可控的运行环境。在可控的运行环境下,默…
Nor Time, nor Place, nor Chance, nor Death can bow. My least desires unto the least remove. - "The Time Traveler's Wife" 三年前,当我写下那篇青涩的『永恒不变的魅力』的文章时,我刚刚是 elixir 和 clojure 的入门者。我如饥似渴…
把数学的美妙绝伦传递给一个六岁的女孩儿并不是件容易的事情。我们可以轻而易举地心算出任何一个 100 以内的数乘以 3 的结果,也可以道出「乘法是加法的累进」这样的总结,但六岁的孩子并不理解其中的奥秘。前两天我老婆许是受了数独的启发,在白纸上画了十乘十的格子,给小宝演示 100 以内任意一个数乘三,乘七,乘十一的结果(因为除法是乘法的逆运算,你也可以理解为可以…
两天前,也就是 3 月 28 日,ABT network 正式发布。ABT network 以完全去中心化方式连接编织多条区块链形成的网络,以云节点和织链为网的方式重新定义了新一代区块链基础架构。本文谈谈 ABT network 诞生前发生的有趣经历。 为方便阅读,先简单介绍一下本文谈到的一些概念: ABT network:多条区块链形成的网路。 ABT c…
(一) 这是我开过的最艰难的一次长途了。从家到 springfield(中转站)570 英里,我早上 8:30 出发,下午 4:50 到。进入 Oregon 之后,天就跟漏了似的,一路时断时续的暴雨,有的山路已经形成洪流,车驶过的时候,轮胎被水流带着,方向盘都有些不听使唤。好在一路车少,有惊无险。 - 程序君 04/28/2018 岁月如梭,光阴似箭,湾区的…
产品发布在即,同事遇到了一个 API 的性能问题和我探讨: 我们产品自带的 explorer 有个 GraphQL API,返回 N 个非空区块。这个 API 可以这么调用:从最新的区块起,跳过 N 个非空区块,返回接下来 M 个非空区块。 在 API 设计中,跳过 N 条数据(为了分页)而返回满足某种过滤条件的 M 个结果,是非常常见但并不太好实现的需求 …
(1) 我从未想到在出去一年多半的时间后,会以出差的方式回国。12个小时的无趣飞行后,当飞机停泊妥当,安全带指示灯熄灭后,我几乎第一时间从椅子上跳了起来 —— 终于,漂泊多日的游子又能见着魂牵梦萦的故土。 一下飞机,我便被团团热浪裹着,没一会衣服上浸满了汗,像是烤箱里已经闷出了油的肉鸡。我没想到北京竟然有酷热的如此咄咄逼人的夏天 —— 相比之下,南湾的夏天婉…
软件项目为什么没有供应链管理呢?如果要为软件项目定义供应链,应该是什么样子呢?它会有什么安全风险?你还记得 leftpad 事件么?你经历过 event-stream 被黑客巧妙利用从而神不知鬼不觉盗窃你的资产的事件么?软件的供应链管理,或者说依赖管理,越来越变得重要起来。 最近伟创力被华为踢出其供应链的事情,想必大家的朋友圈都刷了屏。对于一家硬件公司来说,…
对大多数人而言,rust 最令人兴奋的是所有权的概念,零成本抽象的能力,以及通过合适的约束巧妙解决内存安全和线程安全两大难题的优雅 —— 记得看过一个统计,linux kernel 里面这两类 bug 占据了 1/2 强。也就是说,你只要学会了 rust,就躺着消弭了 50% 的难啃的让 kernel developer 都闻之变色的 bug。 但对我来说,…
(一) 一晃在美国呆了 1666 天,或者说,四年又二百零五天。如果一个人的职业生涯有四十年,我的十分之一已然耗散在了这片土地。回头看,刚来时的五年计划,完成得还不错: 一晃在硅谷已经呆了两年半。 两年半,在四十年左右的职业生涯中,仅占 1/16,似乎微不足道,但对于一个五年计划来说,它又举足轻重。14年底,当踏上这片土地时,我所考虑的是花上五年的时光,在此…
我对实习生的要求,除去学习能力外,便是足够长的实习时间。所谓「足够长」,我的定义是至少两三个月。小于这个长度,往往还没有开始贡献有价值的工作,实习生便带着写满好话的评定拍屁股走人了。 娜娜本来原定是六月初来实习的。然而因为她学校办理 EAD(Employment Authorization Document)令人发指的低效,她最终八月初才来报道。这个暑期,我…
起屠维大渊献。 读过《通鉴》的朋友看到这个起手式会会心一笑。这就跟「地振高冈,一派溪山千古秀」一样,是《通鉴》里的黑话。 作为一个通读过《史记》(《书》《表》除外)的程序员,《资治通鉴》这样的大部头我读起来还是觉得非常不方便。首先是时间上的开销很大 —— 一页纸往往要读上半小时到一小时,其中免不了查阅词典,了解生僻字词的读音和释义;其次是难以深度阅读 —— …
前几日,暑期将尽,老婆准备带孩子回国,问我有什么要捎过来的。我恰好想起朋友圈有好几个朋友先后推荐了《非平面》,于是在豆瓣上查了查,震惊于其是一本以漫画形式呈现的博士论文,忙不迭让她带本回来。书拿回来之后,当晚我就看完了一遍,通体舒畅,似醍醐灌顶,如露入心。恰逢有朋友来美国出差,我便又让其帮忙买了三本带过来我好馈赠好友。随即,我给公司订了两本英文版,后又让国内…
(一) 23 年前,也就是 1995 年的 12 月 4 日,当 Brendan Eich 带领下的团队为 netscape navigator 添加了一门蹩脚的由 scheme 语言的思想,self 语言的面向对象模型(prototype)和 Java 语言的语法构成的「四不像」- javascript 后,谁也不曾预料,软件开发的沙箱时代就此悄然开启。 …
今天 code review 时,见到这样一段代码: 为了方便阐述,我把变量名稍微做了调整,隐去不必要的细节。这段代码乍一看问题不大,传入的 inputvalue 被分成两部分,一部分是这次交易的佣金,计入了 balance2,一部分是剩下的部分,计入了 balance1。 仔细想想,这段代码有两个大的问题: 1. 不符合 Open-close Princi…
和波特兰马拉松结缘纯属偶然。 2014 年跑完北马,兴奋之余,想感受一下六大赛,结果报名芝加哥马拉松和纽约马拉松先后失败,只好退而求其次,报了波特兰马拉松。没想到,波特兰马拉松别具一格,全程跑下来,我的感觉是「波特兰马拉松,其实是以马拉松的名义,举办了一场全民音乐会」,于是深深地爱上了在这里比赛的感觉。 2016 年,我继续报名了波特兰马拉松,后来因为出差的…
有次在和同事 1:1 的时候,被提到了这样一个问题:你是如何能写出内容如此丰富的文字呢? 这个问题问得我有些楞。我虽然这两年来文章更新的频率断崖式下跌,但平胸而论,我要是想写,要是有时间去写,一天一篇文字,并不在话下。最近我给我们家小宝开课,顺手开启了一个比较私人的公众号,把课堂上的流水账记录下来(主要是想以后教小贝的时候可以直接捡现成的),一个月来,已经写…
上篇文章介绍了几个视频,有小伙伴私信我能不能介绍更多的视频好闲来无事好观摩一下。正好今天是 1024 节,我就豁出去了,把我看过的一些直击心灵的高清无码视频给大家捋一捋。 Bret Victor 的神作。这个 video 当时带给我的震撼是全方位的,他展现了优秀的工具是如何能够帮助人们思考和创造。我在很多场合都放过这个视频的部分或者全部,即便现在回顾,依旧能…
今天不光是万圣节,31 OCT,也就是 25 DEC,所以也是程序员圣诞节。 。。。 好吧,OCT 代表八进制,八进制的 31,是十进制的 25,而十进制是 DEC。嗯,标准的程序员冷笑话,认真你就输了。 (我仿佛听到了郭德纲的响声在我耳边想起:你有病吧,你有药啊) 进制这个东西,很有意思。我们要感谢进化过程中,人类进化出的是五根手指,如果是 7 根手指,那…
本文共 4300 字,普通阅读需要 10 分钟,精读需要 30 分钟。 最近团队内部的 BBL,我分享了 Wireguard。Wireguard(以下简称 WG)作为新一代的 VPN 的代表,可能很多做技术的同学都不陌生。和其它 VPN 技术一样,我们可以使用它在家庭网络和公司网络之间搭建一条安全的信道,由此可以访问「内网」的数据和应用。 在具体讲 WG 之…
(一) 在孩子们的成长过程中,我大部分时候都是个甩手掌柜的角色。之前小宝的课业,无论钢琴滑冰舞蹈绘画,还是读书写作算术科学,都是妈妈在操心,更别说小贝。我白天忙工作,早上出门时孩子们还在酣睡,晚上回到家时已是夜幕降临,一家人等着我晚餐。饭前我例行公事似的抱抱孩子们,玩耍几分钟;饭后我就把自己关在书房,忙自己的工作,看自己的书,写自己的文章。孩儿们偶尔冲进来寻…
Noise Protocol Framework(以下简称 Noise)是一个用于构建安全协议的框架。与 TLS,IPSec 这样的有完整实现的协议不同,Noise 更多像是一个蓝图,它为那些想创建自己的安全协议的开发者提供了一套模板。就好像元编程之于编程,Noise 是协议的元协议(meta-protocol)。 诸君也许会问:既然有了 TLS,我们为何还…
最近对 git 的底层实现异常迷恋,周末抽空用 rust 和 rocksdb 实现了一个乞丐版的 object store - 可以存储 blob,tree,commit 三种对象。之所以用 rocksdb,是因为我不太喜欢文件系统里的那些细碎的 git 对象,我也没太研究 packfile 是如何进行差分编码的,rocksdb 恰好解决了这两个不爽。本来想…
git stash 是程序员的至宝。老板 biangbiang 甩来一个 case,说这个要下班之前 hot fix,咋办,stash,切到 release 对应的分支,缝缝补补;产品 kuangkuang 砸来一个需求更新,说这个简单,小哥哥帮帮我先做了,咋办,stash 切一个新的 feature 分支,撸袖子干。如果没有 git stash,人生至少要…
在之前介绍 noise 协议的时候,我写了这样一种应用方案: 此外,Noise 协议还可以用于加密文件 —— 只要我有你的公钥,我可以使用单向握手(7.4)加密某个文件(附带握手时发送的消息),然后传输到某个不安全的位置(比如网盘,FTP,IPFS,甚至区块链中),该文件只有拥有私钥的人才能解密。这种应用很有意思,因为它具备非对称加密的安全性,同时又具备对称…
最近小宝参加钢琴比赛铩羽而归,好几天闷闷不乐。宝妈为了开导她,特地找了一部励志电影《阿基拉和拼字比赛》,我们全家人一起看。小宝看得很认真,我也从中汲取了不少力量 —— 尤其是和谐的家庭对孩子的重要性。本来想写上几句,建议身边有娃的朋友们也带着娃一起看看,宝妈说她 09 年看得这部片子,当时感动地一塌糊涂,写下了自己的第一篇博客 —— 在征得她同意后,我得以将…
如今的互联网生活,让每个人都离不开密码 — 操作系统有开机密码(用户密码),各种应用有登录密码,甚至还有交易密码。形形色色的密码让用户头皮发麻,要么使用重复的不那么健壮的密码,要么不得不依赖于各种密码保存服务,比如 1password。我常常在想,有没有一种方式,可以让所有的密码从一个主密码中派生出来,就像比特币 BIP44 钱包派生那样? 正巧,今早看了 …
江汉曾为客, 相逢每醉还。 浮云一别后,流水十年间。 欢笑情如旧,萧疏鬓已斑。 何因不归去? 淮上有秋山。 —— 韦应物《淮上喜会梁州故人》 对我而言,2010 年是个奇妙的起点。一次不经意的饭局,就像洛伦兹那扇着翅膀的蝴蝶,把我卷入了波澜壮阔的互联网时代。如果说之前的十年,是互联网在泡沫之后自我救赎逐渐重生的十年,这个十年就是金戈铁马气吞万里如虎的十年。我…
今天一篇 "a sad day for rust" 霸榜了 hacker news。actix-web 的作者 fafhrd91 在无法忍受 "unsafe shitstorm" 之后,决绝地将这个在各大评测网站名列第一的 web 框架下线了。一时间社区叫苦不迭,所有使用了 actix-web 作为依赖的项目,都受到影响。这件事的影响力虽然不如之前让半个互联…
一晃 2020 年快过完 1/12 了。你的新年计划是否也如期进行了 1/12?过去的这一个月来让人心里堵得慌,先后几起伤医案,令人发指;接着武汉的疫情愈演愈烈,令人揪心。我好些在北京的朋友,大过年的,有家不能回,只能在遥祝家里的亲人;在武汉的朋友,反倒豁达,终于可以清净一下,不用走亲访友的,做个快乐的死肥宅。我跟朋友聊起来,都觉得相对于疫情的可怕,人心的崩…
自从去年 9 月以来,我每天晚上花差不多一个小时给闺女小宝上课。上课的内容很杂,从周一到周日,依次是:历史故事,数学,scratch,科学探索,纪录片,励志电影,以及几何。每每上完课后,我在朋友圈「炫耀」,朋友们都会鼓励我何不干脆把内容做成视频,独乐乐不如众乐乐。后来我做过一些尝试,然而直接录制我跟小宝上课的过程效果不太好,因为一来它太定制化了,二来时间太长…
对于一个喜欢追求新技术的人来说,flutter 火爆了一年多我却没有尝鲜,实在是说不过去。我之所以对 flutter 不感冒,源于我对 flutter 所使用的 dart 语言的无知 —— 我觉得既然市面上有 typescript 这样可以满足 flutter 需要的语言,为何要用 dart 这样一个行将就木的语言呢?但最近有个朋友给我展示了他用 flutt…
一个月前,如果我要为自己最看不上的三个半语言排个名,dart 恐怕会位列其中。dart 是 google 在 2011 年就推出的编程语言,目标是成为一个结构化的 web 编程语言,暗藏着取代人们天天用又天天骂的 javascript 的野心。记得大约 2014 年前后,我在 youtube 上看了 goto conference 的一个关于 dart 语言…
在上一篇文章「dart:失之东隅收之桑榆」里,我写了这样一句: dart 也许未来可以支持 WebAssembly(类似 golang,有没有意义再说);而 TypeScript 没有这种可能。 于是很多 TypeScript 的拥趸不开心了,为什么说我家宝宝不能支持 WebAssembly(下文称 WASM)?有人找出了证据:看,AssemblyScrip…
世界上只有两件事是不可避免的,那就度是税收和死亡。 本杰明·富兰克林 在海外做移动端应用开发,有一家公司是几乎不可避免的:facebook(以下简称 FB)。它打造(并且几乎垄断)了从获客到获利(广告)的一条龙服务,使得你无法抵制那巨大的诱惑 —— 前提是你要在自己的 app 里装入 FB 的 SDK。 在 app 里装第三方的 SDK,享受很多「免费」的服…
和 AI 聊天一时爽,发公众号排版火葬场。为了把 Markdown 优雅地搬运到微信,我用 Rust 写了个自动化上传工具,此文为记。
探讨第一性原理在创新、领导力、问题解决、谈判、财富、写作、健身、幸福、生产力、战略、改变、说服、自由、营销、故事、幽默和智慧中的应用。
探讨第一性原理在优雅、影响力、动力、友谊和辩论中的应用,揭示其背后的深刻哲学。
探讨 AI 革命可能带来的社会变革,以及我们如何应对。
我们不再是建造者,而是这个进化系统的设计者和领航员。我们通过不断完善“意图”的表达,来引导AI为我们塑造一个越来越接近完美的世界。
当AI成为代码的主要生产者,技术债的本质从"代码写得好不好"转向"想得好不好"。我们需要建立从规约到洞察的进化闭环,成为意图的精确表达者和系统行为的策展人。
当AI成为强大的代码生产工具,程序员的价值从"编写"转向"判断、澄清、担责、引领"。我们不再是最强的登山者,而要成为优秀的向导,在技术、商业和人性的交叉路口做出智慧的权衡。
当AI像缆车一样改变了传统的"爬山"成长路径,我们需要重新设计人才培养体系。从"动手做"到"指挥做"和"审查做",从"技术尖兵"到"思想政委",在新的生产力条件下探索科学的成长方法。
深度解析OpenAI Codex CLI的架构设计,从队列对通信模式到Session、Task、Turn三层抽象,探讨优雅架构如何体现对人机协作本质的深刻理解,以及错误处理、状态管理和扩展性设计的哲学思考。
深度探讨 AI 时代编程语言的演进方向,从人类优化的抽象历史到 AI 代码生成的正确性危机,再到面向 AI 原生的设计,揭示编程范式从"语法到结构"、"实现到规约"的根本性转变。
深度探讨大型软件系统的设计哲学,从"一个人能写完"的愿景出发,阐述如何通过黑盒设计、风险隔离、显式契约等原则,构建持久、可扩展、可并行的软件架构,实现从复杂到简单的设计智慧。
深度探讨如何在AI浪潮下教育8-15岁孩子,通过「引导」而非「堵」或「放」的策略,培养孩子正确使用AI工具的能力,让他们成为AI的主人而非被支配者,在实践中学会驾驭这个时代最重要的工具。
我们从一个诡异的并发 Bug 出发,深入探索 Linux 内核内存模型的精妙设计。当多核处理器让内存访问变得不可预测,我们如何在性能与正确性之间找到平衡?这是一场关于事件、关系与因果的哲学思辨。
架构师的真正价值不在于做出所有决定,而在于成为团队的赋能者,通过跨层思维、隐喻沟通、多维视角等方法,让团队变得更聪明,做出更好的决策。从组织层级穿梭到现实世界的架构洞察,全面解析如何培养架构思维。
深度解析 James Lewis 在 GOTO 2024 的演讲,回顾微服务架构十年演进历程,探讨其九大核心特性、设计理念、以及在云原生时代的新挑战与反思。
深入探讨现代 CPU 的工作原理,从流水线架构、分支预测到乱序执行,通过实际案例和性能分析工具,揭示处理器如何通过精妙的设计实现高性能计算,帮助开发者写出更高效的代码。
深度解析 Kevlin Henney 关于编程语言演进的洞察,探讨为什么在技术飞速发展的今天,编程语言却展现出惊人的稳定性。从 ALGOL 68 的革新到 AI 时代的保守效应,揭示语言进化背后的社会因素与技术惯性。
深度剖析 LLM 应用的评估体系与安全框架,从确定性指标到模型评判,从 RAG 三元组到智能体轨迹验证,系统化探讨如何构建可信赖的 AI 应用,让每一个 LLM 输出都经得起质量与安全的双重考验。
深入探讨 GenAI 在代码生成和应用集成中的安全问题。从 41% 的漏洞率到提示注入攻击,从供应链安全到 OWASP Top 10 for LLM,全面解析如何在享受 AI 生产力提升的同时,构建安全的 AI 应用系统。
从一个 email 网关的开发实践说起,探讨 AI Agent 如何改变 Serverless 开发的范式,以及开发者角色的深刻变化。
AI 在具体技法上往往比工程师更"熟练",但缺乏战略直觉。我们需要一套可量化的风险评估框架,来决定何时放手让 AI 自动生成,何时死死握住方向盘。
AI 编程已从星星之火燃成燎原之势。我们该如何认清形势、掌握规律、找到自己的位置?这篇文章从战略高度审视氛围编程的本质,探讨工程师在新时代的生存之道。
这篇文章从第一性原理出发,讲述如何用工业级标准构建账户安全、审计体系和成本控制 —— 为什么这些「看不见的活儿」决定了你能走多远。
为一人 AI 技术公司设计了一套企业级 Kubernetes 基础设施,最后却把它打入了冷宫。这篇文章拆解这套理想架构的设计思路,聊聊为什么最终选了更轻量的方案。完美主义 vs 实用主义,独立开发者早晚要面对这道选择题。
这篇文章手把手拆解如何从零撸一个极致低成本的 Rust 无服务器框架。
内部代码库一旦膨胀,私有包仓库就是刚需。本文手把手教你用无服务器架构在 AWS 上从零搓一个同时支持 Cargo 和 NPM 的私有仓库,月成本压到 10 美元以内。
基础设施到位后,一个人一天内能从零搭出一个生产级应用吗?
产品上线后,第一道门该怎么设?本文详解如何用一个独立的邀请服务为所有应用统一把关,从后端到前端到框架集成,一个人搞定全链路。
一人公司系列收官。回顾七篇文章搭建的完整技术栈,介绍 AI 技能系统的设计,然后把视角从技术拉向商业:获客、定价、营销、商业模式。技术让你活下来,但赚钱才能让你活下去。
产品有了门禁,下一步就是收银台。本文详解如何构建一个独立的多租户计费服务,从信用额度系统到 Stripe 集成,从 Webhook 处理到框架级封装,一个人搞定完整的付费闭环。
Git 统治了版本控制二十年,但它的暂存区、脆弱的 rebase、动辄阻断的合并冲突,正在成为 AI 时代的绊脚石。jj 从底层重构了版本控制的心智模型,而且完全兼容 Git。这篇文章带你看清它为什么值得关注。
当我们退回原点重新思考"计算"的本质,会发现多环境是个幻觉,K8s 是个过度抽象,而 Serverless 的冷启动和连接池风暴是自找的。这篇文章拆解一套基于 Baggage Header 路由、Pingora 智能网关、Firecracker 微虚拟机和 Rust Data Bus 的无环境架构,试图回答:Post-Kubernetes 时代的计算该长什么样。
这封邮件 SPF、DKIM、DMARC、ARC 四道认证全部通过,因为它真的就是 Robinhood 自己发出来的。攻击者没有伪造任何东西,他们让 Robinhood 替他们发了这封钓鱼邮件。
我们花了十年,把可观测性盖成一座漂亮的大厦,地基却是漂浮的字符串:字段名靠默契、基数靠运气、账单靠忍。这篇文章给出一个激进的方案,用 protobuf 给每一件被观测的事正名,把日志、指标、审计统一成一份带版本、带 owner、带保留策略的事件目录,旁边留一扇叫 ForensicEvent 的逃生舱兜住所有未知未知。AI 已经成为代码的主笔,schema-first 的最后一道阻力随之消失。是时候让 schema 重新成为可观测性大厦的
一个看似只是搭 GKE 集群的小项目,最后长成了一套机器学习训练平台的雏形。本文从一次真实经历出发,讲清楚为什么训练平台的难点不在把 Pod 跑起来,而在任务提交、资源排队、状态观测、故障恢复等接缝处。
从软件、可穿戴设备与技术写作三个真实案例出发,拆解如何通过上下文、任务分解、反馈验证与多 Agent 协作,把 AI 从编程工具升级为能够持续交付的工程团队。
DeepSeek 开源了 Harness:模型、工具、Agent Loop 全是插件,基于 Cordis 微内核,两百多个包。和 Rust 单体架构的 Codex 相比,它把「可替换」做成了架构本身,也把 Agent 的缰绳交到了每个人手里。
瑞典外科医生花十年写成的 1100 页数学通史:一张从数的诞生通向微分方程的数学世界地图,把每个概念"为什么被发明"讲得清清楚楚。
Agent 可以替人执行很久,人却可能只思考了几秒。一次 AI 限额引发的争执,让我重新审视独立思考、产品判断,以及工作完成之后究竟学到了什么。