API

API设计原则

(感谢好友 @李鼎 翻译此文) 原文链接:API Design Principles – Qt Wiki 基于Gary的影响力上 Gary Gao 的译文稿:C++的API设计指导 译序 Qt的设计水准在业界很有口碑,一致、易于掌握和强大的API是Qt最著名的优点之一。此文既是Qt官网上的API设计指导准则,也是Qt在API设计上的实践总结。虽然Qt用的是C++,但其中设计原则和思考是具有普适性的(如果你对C++还不精通,可以忽略与C++强相关或是过于细节的部分,仍然可以学习或梳理关于API设计最有价值的内容)。整个篇幅中有很多示例,是关于API设计一篇难得的好文章。 需要注意的是,这篇Wiki有一些内容并不完整,所以,可能会有一些阅读上的问题,我们对此做了一些相关的注释。 PS:翻译中肯定会有不足和不对之处,欢迎评论&交流;另译文源码在GitHub的这个仓库中,可以提交Issue/Fork后提交代码来建议/指正。 API设计原则 一致、易于掌握和强大的API是Qt最著名的优点之一。此文总结了我们在设计Qt风格API的过程中所积累的诀窍(know-how)。其中许多是通用准则;而其他的则更偏向于约定,遵循这些约定主要是为了与已有的API保持一致。 虽然这些准则主要用于对外的API(public API),但在设计对内的API(private API)时也推荐遵循相同的技巧(techniques),作为开发者之间协作的礼仪(courtesy)。 如有兴趣也可以读一下 Jasmin Blanchette 的Little Manual of API Design (PDF) 或是本文的前身 Matthias Ettrich 的Designing Qt-Style C++ APIs。 1. 好API的6个特质 API之于程序员就如同图形界面之于普通用户(end-user)。API中的『P』实际上指的是『程序员』(Programmer),而不是『程序』(Program),强调的是API是给程序员使用的这一事实。 在第13期Qt季刊,Matthias 的关于API设计的文章中提出了观点:API应该极简(minimal)且完备(complete)、语义清晰简单(have clear and simple semantics)、符合直觉(be intuitive)、易于记忆(be easy to memorize)和引导API使用者写出可读代码(lead to readable code)。 1.1 极简 极简的API是指每个class的public成员尽可能少,public的class也尽可能少。这样的API更易理解、记忆、调试和变更。 1.2 完备 完备的API是指期望有的功能都包含了。这点会和保持API极简有些冲突。如果一个成员函数放在错误的类中,那么这个函数的潜在用户就会找不到,这也是违反完备性的。 Read more…

By RSSBot, ago
Linux

Linux PID 1 和 Systemd

要说清 Systemd,得先从Linux操作系统的启动说起。Linux 操作系统的启动首先从 BIOS 开始,然后由 Boot Loader 载入内核,并初始化内核。内核初始化的最后一步就是启动 init 进程。这个进程是系统的第一个进程,PID 为 1,又叫超级进程,也叫根进程。它负责产生其他所有用户进程。所有的进程都会被挂在这个进程下,如果这个进程退出了,那么所有的进程都被 kill 。如果一个子进程的父进程退了,那么这个子进程会被挂到 PID 1 下面。(注:PID 0 是内核的一部分,主要用于内进换页,参看:Process identifier) SysV Init PID 1 这个进程非常特殊,其主要就任务是把整个操作系统带入可操作的状态。比如:启动 UI – Shell 以便进行人机交互,或者进入 X 图形窗口。传统上,PID 1 和传统的 Unix System V 相兼容的,所以也叫 sysvinit,这是使用得最悠久的 init 实现。Unix System V 于1983年 release。 在 sysvint 下,有好几个运行模式,又叫 runlevel。比如:常见的 3 级别指定启动到多用户的字符命令行界面,5 Read more…

By RSSBot, ago
KPI

我看绩效考核

(本来,这篇文章应该在5月份完成,我拖延症让我今天才完成) 前些天,有几个网友找我谈绩效考核的事,都是在绩效上被差评的朋友。在大致了解情况后,我发现他们感到沮丧和郁闷的原因,不全是自己没有做好事情,他们对于自己没有做好公司交给的事,一方面,持一些疑义,因为我很明显地感到他们和公司对一件是否做好的标准定义有误差,另一方面,他们对于自己的工作上的问题也承认。不过,让他们更多感到沮丧的原因则是,公司、经理或HR和他们的谈话,让他们感觉整个人都被完全否定了,甚至有一种被批斗的感觉。这个感觉实在是太糟糕了。 因为我也有相似的经历,所以,我想在这里写下一篇文章,谈谈自己的对一些绩效考核的感受。先放出我的两个观点: 1)制定目标和绩效,目的不是用来考核人的,而用来改善提高组织和人员业绩和效率的。 2)人是复杂的,人是有状态波动的,任何时候都不应该轻易否定人,绩效考核应该考核的是事情,而不是人。 我个人比较坚持的认为——绩效分应该打给项目,打给产品,打给部门,打给代码,而不是打给人。然而现在的管理体制基本上都是打给人,而很多根本不擅长管理的经理和HR以及很多不会独立思考的吃瓜群众基本上都会把矛头指向个人,所以,当然会有开批斗会的感觉。   举几个例子 为了讲清楚我的上述观点,请让我先铺垫一下,先说几个例子吧,韩寒的例子我就不说了。 苏步青同学在小学时成绩很糟糕,全班倒数第一。 华罗庚同学上学时数学还考不及格,要不是王维克老师的鼓励并让他爱上了数学,他可能也就完全埋没了。 郑渊洁上学时,老师要求写《早起的鸟有虫子吃》,郑渊洁唱反调写《早起的虫子被鸟吃》,再加上数学老师发难,于是被开除了。从此郑渊洁没有上过一天学。 列夫尔斯泰大贵族出身,2岁丧母,9岁丧父,16岁上大学,大学三年级自动退学回家进行改革。在青年时期不好好读书,考试不及格,留级。他赌博、借债、鬼混…… 这个的例子太多了,我从另一个方面举几个体育运动相关的例子,可能年轻的朋友都不知道,可以问问你们的父母。 80年代,中国有一批非常优秀的体育运动员,比如:体操王子李宁,打破过世界跳高记录的朱建华,还有乒乓球世界冠军马文革,还有羽毛球世界冠军赵建华,记得有一年参加世界比赛,他们全输了,而输的还很惨。于是国内的一些媒体和民众开始骂他们,甚至说他们是民族的败类、耻辱,还有很多人找上门要教训他们…… 如果我们把绩效分比做在学校里的考试分,那么你是否会和我一样认为,考试的成绩只能代表这个人对这些知识点的掌握或理解,而且仅仅在这个时间点,根本不代表这个人根本就不行,更不代表他一直不行。因为挂科太多被学校开除的同学,并不见得这些人在社会上就无活生活下去,反而,他们中的有些人可能会考试成绩好的人还活得好。不是么?这样的例子在我们身边还少吗? 所以,当我看到某HR说某老员工——“他今天要不自己离开,未来一年也一定会因为绩效问题而被公司开了的”,除了感到居然有人类可以预知他人未来的可笑之外,我感到是一种悲哀,一种管理体制上的悲哀,我感到了在这HR考评背后一股非常强的暗流和不可见的力量让她干出了这样一件匪夷所思的事。 好些公司还考评价值观,价值观无可厚非,我觉得一个企业的价值观是非常必要的,但是考核价值观是件非常危险的事情。这个世界上和传统势力唱反调的人实在是太多了,而被定性为价值观有问题被迫害的人也是多了去了。被批斗被侮辱被毒打的老舍;因为同性恋问题,被迫害而自杀的图灵;因为不同意教会观点被监禁8年都不愿意放弃自己的信仰最终被烧死的布鲁诺,…… 这样的事情已经够多了,新的时代里不应该再发生这样的事了,无论大小。 考核价值观最大的问题就是非常容易的上纲上线,也非常容易的被制造政治斗争,也非常容易的扼杀各种不同思想,老实说,这从很大程度上是一种洗脑的手段——通过对人制造一种紧张或恐惧而达到控制思想的目的。   对公司和管理者想说的话 下面我来谈谈绩效考核我的一些观点。在谈这个观点前,你可以移步看一下这篇新闻报道——《绩效主义毁了索尼》。而近年来,“放弃绩效考核”的斗争已经从科技企业中的Adobe、戴尔、微软、亚马逊,席卷到德勤、埃森哲、普华永道等咨询服务类企业。甚至通用电气(GE)——曾经的绩效管理的鼻祖,也宣布抛弃正式的年度绩效考核。在刚过去的2016年,腾讯的张小龙对微信事业群发出“警惕KPI”的呼声;李彦宏在内部信中将百度的掉队归咎于“从管理层到员工对短期KPI的追逐”;雷军干脆宣布小米“继续坚持‘去KPI’的战略,放下包袱,解掉绳索,开开心心地做事。”;王石也在个人微博中感慨:“绩效主义像企业的脓包”。 绩效考核在本质上就是像学校教育以分数论英雄,而忽略员工的成长和素质教育是一个道理。当学生和老师只关注考试分数时,而只有考试分数来评价老师和学生的优良中差时,老师和学生就会开始使用一些非常形式的方式来达到这个目标,比如:死记硬被,记套路,题海战术…… 而学习的能力的考评彻底地沦为了一种形式主义。反而,分数考的越高,脑子越死。(注:美国现行教育是不允许通过学生考试成绩来评价老师的能力的) 近几年来,一些大公司开始使用 OKR – Objectives, Key Result ,但是在实践过程中,我发现好些公司用OKR,本质上还是KPI – Key Performance Indicator, 因为OKR里面有一个Key Result,用来衡量 Objectives 的结果指标。于是,使用者习惯性的设置上了KPI。我个人认为 OKR 有三个非常大的特性:0)由员工提出,1)以目标为导向。2)全员共享。 举个例子,OKR可能会是制定成下面这个样子的: Objectives:增强用户体验, Key Results: 1)用户操作步骤减少20%以上, 2)客服减少40%以上工单, 3)用户99.9%的系统操作的响应时间为100ms以下 然后,把这个目标分解给产品、用户体验、技术团队,形成子的Objectives并关连上相应的父级的Key Read more…

By RSSBot, ago