王辉的博客

是什么让我对未知世界始终充满热情?

高效的培养新人,要从两个方面考量,一是新人得到提升,二是老师没有过度消耗精力。我从一个真实的错误中学到了一条很宝贵的经验,能二者兼顾。那就是在每次授业解惑前,必须备好课。

有一次,我回看新人的代码,发现不少需要改进的地方,就找到他手把手的演示如何把代码写的更加简洁。因为是临场讲解,有的问题挖的深,有的拓的宽,不知不觉,别的同事都下班了,就剩下了我俩,还有对面暗地里观察我们的老板。事后,老板找到我,说我在新人身上花的时间太多了,自己的任务都给耽误了,他给我分享了一个技巧,帮我更加高效的带好新人。

这个技巧,就是在每次授业解惑前,必须备好课,切忌临场展开大规模的讨论。备课的目的,是事先抓住问题的关键,理清讲解的范畴和思路,规划好哪部分手把手教,哪些让新人自学。这样做的好处,一是把信息更加简洁的传递给新人,并且给他自学的机会,留给他足够多的时间去消化吸收难点。一旦新人能通过一部分的自学解决问题,这就能节省老师的时间。

然而,要彻底的发挥这个技巧的威力,有一个前提,就是老师得事先充分了解到新人遇到的问题,和新人的水平。如果问题了解的不清楚,本来是语文课,结果备成了数学,没用。新人自学能力不足,你甩给他一堆资料,他也学不会。

除了这个前提,还有后续的反馈。新人自学一段之后,要从新评估他对问题的理解水平,作出相应的备课调整,进而再讲解。

高效的培养新人,就是要建立一个,从了解,备课,传授,到从新评估的循环机制。刚开始带新人的老师,可能在每个阶段上都要花些心思,这个循环的周期也可能是一天,两天,或好几天。随着老师带人阅历的增加,不同阶段之间的衔接会更流畅,带人的效率也会更高。

今年参加了法国最佳程序员(Meilleur Dev de France)比赛,结果第一轮就惨遭淘汰,非常可惜,总结一下失败的教训,希望下一年能比的更好。

之所以止步第一轮,有几个主要原因。

首先,是太在意得失了。第一次取的了不错的成绩,大伙包括自己,都有很高的期待。开赛前,老板还给我说,如果进了前二十就请客吃饭。越是在意得失,就越难集中注意力。

除了心态,另外是解决问题的方法。越是到关键时刻,越不能像无头苍蝇一样乱撞。乱撞的成本太高,这次浪费了不少时间,纠结是大于等于,还是纯大于的一些操作上。越是乱,越要冷静的思考,可以画个图,演算一遍算法,每个细节都要有理论的支撑。

冷静之后,还要提高考虑问题的层面,不要着急的直奔方案,而是要先申清楚所期待的输入输出,避免做一些错误的假设。如果开头的假设,是不正确的,就像盖楼一样,盖得再高,也要推到重做。具体的来讲,就是可以花上一分钟的时间,把题目举得例子都先扫一遍。

最后一个原因,就是生搬硬套。这些年来,大大小小的比赛也参加了不少,自己也积累了一些常用问题的解决办法。可过多的依赖已经写过的代码,也是有风险的。已经写过的代码,往往是经过提炼和抽象,解决一类问题的。如果要重用这些代码,必须把现有的问题转化成既有方案能适用的样子。这个转化的过程,很容易拖慢解题速度。比如这次我遇到的问题,其实是一个很简单的深度遍历的问题,如果生写代码,几分钟也就能搞定了。我却过度的依赖一个已有的框架,做了一些转换,结果转换的过程中,出现了一些差错。

可归根结底,还是平时训练的少,自己如果真的掌握的已经炉火纯青,也不至于在压力的情况下就败下北来。

失败的滋味,很不好受,特别是这种有排名的比赛,就觉得你都工作七八年了,还比不过,那些还没有毕业的大学生,情何以堪!当天晚上回来,就一直懊悔,为什么会犯那么低级的错误。虽然会难过,但也会暗示自己:不能只注重结果,过于的在意输赢,很容易就导致一个人在失败的时候,完全放弃。参加比赛,更重要的是激励自己平时的积累,保持思维的敏捷,学习不能停。失败了,就意识到了不足,继续加油!

在Murex工作了七年,到了说再见的时候。在这里,回顾一下在Murex的成长历程,解释一下离开的原因,也对未来做个展望,希望能对大家有所帮助。

成长

七年里,得益于优秀的同事,我一直在成长,回想起来,有几个关键节点,分别是积累的效果,主人翁意识的觉醒,以及对程序员价值的探索。

积累的效果

日积月累,虽然每次进步特别小,但慢慢的,会有惊喜。拿每周四中午的CodingDojo来说,虽然有时候,两个小时,一个问题也解决不了,但慢慢的,从心底领会到了,动态编程的奇妙,优先队列的强大,双指针的无敌搭配。这一点一滴的积累,加深了我对数据结构和算法的理解。注重积累,不仅让认知能更深一层,而且当我们注重点滴的进步,而不是最终结果的时候,我们能更好的克服拖延症,更好的保持长期学习的动力。

除了CodingDojo,还参加了很多其他的活动,当初参加的Scala学习小组,就为我今天找到新工作打下了基础。还有那么多次的CodingGame比赛,HashCode比赛,让我接触到了工作中不可能碰到的离散优化,人工智能,今天没有用,搁一边暂且不说,视野得到了扩展,说不定哪天就用上了。

主人翁意识

主人翁意识,简单的说,就是自己对自己负责。职业规划,工作环境,没有人会为准备好一切,你必须主动管理。

这个意识,工作久了,才容易体会到。起步时,需要学的东西很多,做完,领导会分配下一个,让人应接不暇。上手后,有了时间和精力,观察身边的人和事,并非都如意。可能所在团队目标不清晰,可能代码中测试太少,可能同事间的分享不够多,可能会议效率低。如果你认为这些都和你没关系,或者天真的以为领导们会解决这些问题,那么等待将会是漫长的。

主人翁意识,就是主动找路子。我曾做过一次尝试,为了营造交流的氛围,办了一个Java技术交流会。不仅结识了很多大牛,还改变了身边的技术环境。

程序员的价值

最后一个关键节点,是对程序员价值的探索。如果说前两个节点,注重的是自身技术的提升,自我意识的培养,那么关于价值的探索,让我跳出了我的范畴,因为我终于体会到,一个人的价值,不仅仅取决于一个人本身的能力,更多的是这个人如何用他的能力,去帮助其他人

离开

离开一个工作七年的地方,是一件不容易的事情。因为离开的不仅是企业,还有朝夕相处的同事,朋友。究竟是什么原因,让我做了离开的决定,起初的时候,我心里也不清楚,但总有一个声音在暗示我,要换换地方了。后来明白了,原因有很多个,一是为了探索。换个地方可能更好,也可能更坏,没有人能预测未来,这就是探索,有风险也有回报。其次,就是当你欣赏的人,陆陆续续都走了的时候,你留下来的动力就会越来越少了,确实有一些人有这样的魅力,能带你走。

探索

首先是不同的企业所处的阶段不同。Murex,已三十有余,成熟的商业模式,遍布世界各地的客户,毋庸置疑,这是一家成功的企业。还有的企业,可能在竭力生存,也可能在兴奋的扩张中。我想置身于这种环境去体验初创的感觉。也希望在这种多变的环境中,多作贡献。

其次,就是探索一个新的行业。有些人讨厌金融,说玩来玩去都是钱,但金融里能让我们学会管理风险,衡量一个东西的价值,培养投资者的思维。除了金融,还有很多有意思的领域值得尝试,比如电商,我想尝试一种新的行业,也解锁一些新的技能。这里插一句话,我们应该珍惜和利用作为程序员的优势,因为我们几乎可以从事任何行业。

最终,就是探索一种新的做软件的方式。传统的软件行业,软件带来的效应更多的是数字化,自动化,提高效率。而大数据背景下,软件改变的是人们思维方式,以数据为导向。我想探索大数据公司中,数据工程师,数据分析师,数据科学家,还有产品,销售的人们是如何工作的。除了数据导向之外,还有软件交付的模式,传统的交付模式,是把软件安装的客户端,SaaS是一种基于云计算的交付模式,用户不需要安装任何东西,打开网页就能使用,它的好处是软件的交付周期可以更短。

探索,表面的意思,是尝试一些新的东西,初创也好,大数据也好,其实更深次的意思,是一种危机感,怕跟不上行业发展的速度。

欣赏的人走了

我比较欣赏的同事,从我离开的前一年,就有人走了,当走了第一个的时候,我觉得是他有自己的打算,后来,离开了第二个,第三个,第四个,最后就是带领我们往前冲的领导也走了。每走一个,就代表着朋友就少了一个,就意味着能当你老师的人少了一个。直到最后,你会发现能和你一起玩竞技编程游戏的人没了,能和你讨论Clojure的人没了,能交给你如何使用strace命令追踪系统调用的人也走了,留下了一丝悲伤,这时候也基本是自己要走人的时候了。

感谢

说到最后,还是要感谢Murex给我带来的七年美好时光,还有在Murex交下的那么多好朋友。也许有一天,我在外面混久了,发现所有的决定都是错误的时候,还希望能回到这个梦开始的地方。

身边有不少朋友都知道,我正在谋划一款外卖应用。筹备过程中,我请教了好几家餐馆老板。先抛开应用的具体功能不说,老板们,无论男女,清一色的都特别友善,让我很感动,很受启发。

虽然我性格比较热情洋溢,做这款应用也是为了给餐馆带来更多的客户,但是在和老板们打电话之前,心里依然没谱。担心,老板们日理万机的忙,没时间听我瞎白活。可出乎意料的是,他们每人,不仅听我把应用介绍完,还帮我提意见,最后还鼓励我说,“大家都在创业,不容易,希望能多帮助,多合作”。

这给我心理造成了比较大的反差,后来我突然意识到,也许正是因为他们友善,所以他们才做成了老板。因为对人友善,保持共赢的心态,可以让合作的大门常打开,给别人一个机会,也是给自己多谋条出路。

罗振宇2018跨年演讲,有一句话,颇具深意。说咱们这些传统的小企业,没有开发互联网产品的能力,是不是意味着,就要被这个时代给抛弃了?答案是否定的,我们虽然没有独立开发产品的能力,但我们身处一个好时代,只要略微保持一点开放的心态,像阿里,腾讯这些巨头们,早已给我们准备好了粗壮的大腿,让我们抱!那些将被时代抛弃的人,是那些大腿放在了他们面前,都不愿意抱的人。

后来,我开始反思自己,在平常的工作中,是不是有些时候,我忙昏了头,丢了耐心,听不进别人的想法或建议,是不是做了那个大腿放在面前,都不愿意去抱的人。

非常感谢友善的,捌玖零的郑老板,锅色天香的金老板,京品堂的张老板,和蜀味的张老板对我的帮助。

在与创业公司谈论期权时,很多人会感到困惑。我也曾面临同样的难题:一家公司给出高工资,另一家公司则提供期权,怎么选?为了弄清期权的运作方式,我做了许多功课,也请教了一些行业资深人士。现在,我想通过这篇文章,帮助你了解期权的本质,以及如何与初创企业谈好期权。

期权的本质与作用

最简单的薪酬构成就是固定工资。无论你的表现好坏,薪水定期发放。而期权则提供了另一种激励手段,它不仅仅是一份工资补充,更是公司与员工共同承担风险的方式。

公司提供期权有两个目的:

  • 激励员工:期权使得员工对公司整体发展更加关注。你不仅希望自己表现优秀,更希望公司价值提升,因为公司越值钱,你的期权也越值钱。
  • 分担风险:初创企业面临许多不确定性,通过期权,公司能够在未来有更大成长潜力时,减少今天的现金支出,让员工一起分担风险。

简单来说,期权是未来买股票的选择权,这意味着你未来有机会用较低的价格买入公司股票,前提是公司运营良好。

期权的运作机制

期权并不等同于立即获得公司股票,而是通过逐步“兑现”的方式获得实际的持股权。大部分公司采用归属期(Vesting Period),来确保员工在公司长期服务。

  • 归属期:公司不会一次性将所有期权授予你,而是按年逐步授予。例如,如果公司承诺给你100股期权,通常你需要在工作一年后(Cliff期)才能开始持有部分期权,一般是四分之一,然后每月获得更多,通常需要四年才能全部获得这些期权。
  • 行权价格:行权价格是在未来以固定价格购买股票的权利。例如,你签署的协议允许你两年后以每股10块钱购买公司股票。如果公司运营成功,两年后股票市值涨到20块钱,你只需要支付10块钱,获得每股10块的利润。

期权的价值与风险

期权提供了巨大潜力,但其价值完全依赖于公司未来的表现。未上市公司股票的流动性问题是期权的最大风险。如果公司没有上市或被收购,你可能很难将手中的股票变现。

同时,持有期权并不代表你可以马上获利。你还需要考虑以下几个因素:

  • 公司上市与否:未上市公司的股票很难找到买家,只有在公司上市或被收购时,你的股票才容易兑现。
  • 未来的不确定性:尽管期权提供了潜在的高回报,但也存在风险。如果公司经营不善,期权可能最终毫无价值。

因此,期权是一种长期的赌注。你押注的不仅是公司当前的表现,而是它未来的增长潜力。

实例分析:两家公司的期权实践

为了帮助你更好地理解期权的实际运作,我分享两个我亲身经历的案例:

案例一:B轮融资互联网公司

这家公司刚完成4200万美元的B轮融资,规模有200人。他们没有为普通员工提供期权,薪资主要由固定工资和奖金组成。即使我多次提出想要期权,公司也坚持只有达到一定管理级别的人才有资格获得。这表明,公司资金状况充裕,不需要员工分担风险,更重视现金流的吸引力。

案例二:A轮融资金融公司

另一家公司刚通过500万欧元的A轮融资,团队只有15人。他们提供较低的固定工资,但通过期权来弥补差距,并希望员工和公司一起分担成长中的风险。公司乐观预测其未来三年内估值翻十倍,以此吸引我加入。对于这类初创公司,期权是吸引人才的主要手段之一,但风险也显而易见:公司的未来尚不确定,员工需要权衡眼前的固定收入与期权的长期回报。

如何谈判期权?

在与初创公司讨论期权时,最重要要考虑两个因素:

  • 公司的发展阶段:初创公司的不同发展阶段会影响期权的风险和潜力。较早期的公司通常期权较多,但风险也更大;成熟公司的期权可能较少,但相对稳定。
  • 个人风险承受能力:你是否愿意用未来的不确定性换取现在的固定收入?如果你对公司发展信心较足,并且能承担一定的风险,期权可以是有吸引力的选择。

我的选择与反思

2018年,我面临两个选择:一个没有期权但工资较高,另一个工资一般但承诺期权。最终,我选择了没有期权的第一家公司。我的理由有三点:

  • 职业发展:第一家公司让我进入了大数据领域,而数据越多,挑战越大,对我的成长帮助也越大。相对来说,第二家公司则局限于法国市场,发展机会有限。
  • 公司前景:电商行业蓬勃发展,意味着第一家公司未来几年内不太可能倒闭,而第二家公司从事的是风险较高的股票交易领域,我认为不够稳定。
  • 团队的可信度:第一家公司虽然没有提供期权,但他们的CTO和团队更务实、稳重,这让我对公司的长远发展更有信心。

之后的三年

  • 2018年5月,我加入了第一家公司,三个月后获得了期权。
  • 2019年,我从程序员转型为管理者,带领团队继续成长。
  • 2020年,公司在新冠疫情中实现了逆势增长,成功融资近2亿美元,并跻身独角兽行列。同年,公司决定将期权分配给所有正式员工,让大家共享发展红利。而第二家公司没能挺过疫情倒闭了。
  • 2021年,公司再次融资5亿美元,成为法国初创企业中单次融资最多的公司。

我庆幸自己当初的选择。尽管没有期权起步,但通过扎实的工作和公司的成长,我不仅获得了期权,还分享到了公司快速发展带来的红利。

总结

期权是初创企业吸引和留住人才的重要工具,但它也是一种风险与回报的平衡手段。在与公司谈判时,你需要清楚了解期权的潜在价值,并且根据公司的发展阶段和你个人的职业规划做出明智的选择。

感谢《Operating Systems : Three Easy Pieces》这本书,我终于看透了操作系统是如何控制CPU的。很久以来,我都有一个疑惑:操作系统是代码,应用程序也是代码,同为代码,凭什么操作系统对CPU有控制权,这种控制是如何实现的。

第一个问题,凭什么操作系统有控制权。当资源有限的时候,大伙对资源的使用,必定会出现分歧。如果没有人控制,就没有秩序。有的人抓住资源不放,有的人等到花儿谢了也轮不上。各自都只给各自着想,公平无从谈起,更分不清个轻重缓急。所以,我们需要一个管理者,让资源的使用更加高效,更加公平,更加灵活。

第二个问题,操作系统如何保证对CPU的控制,如何阻止不法分子钻空子。下面大家会看到,所谓的控制权,就是看CPU跑的是谁的代码,如果跑的是应用程序的代码,应用程序就决定CPU做什么,如果跑的是操作系统的代码,操作系统就可以选择,下一步把CPU交给谁。

第一招,叫系统调用。大概意思就是,应用程序,你用吧,我让你用,但你不可能只用CPU吧,如果你需要内存,文件,网络等资源,你就得调用我。如果你调用了我,CPU就跑了我的代码,我就可以把控制权拿下。可这一招,有漏洞,有的程序,对CPU的需求特别大,对其他资源的需求少,所以它就可能长时间占用CPU。

第二招,时钟中断。就像大圣打妖怪,打不过,就找菩萨,找老君。操作系统也一样,权利再大,它本身也是代码,遇到解决不了的问题,就求救硬件。时钟中断就是一个例子。你的主板里,会有一个时钟,滴滴答答的走着,每隔一段时间,它就会给CPU发信号。CPU收到信号,就会执行预先设定好的操作系统的代码,一旦这些代码被执行了,操作系统就有控制权了。

这两招合在一起,操作系统就实现了对CPU的控制。后来我体会到,更多的权利其实意味着更多的责任和义务,操作系统虽然会强行执行自己的代码,但它做的事,都是为了别人,让大家都有使用资源的权利。利人不利己,所以大家信任他。

我们在设计上层数据模型的时候,要对底层的数据结构抱有同情心,不要硬把关系型的数据模型,裹挟到只支持key-value的NoSQL数据库里。否则,就像是牛最爱吃的是草,你非得让它尝尝巧克力一样,不对口。

对数据结构抱有同情心,就像Martin Thompson在设计软件的时候,同情计算机中的机械硬件,是一个道理。Martin主张,要想开发出来高性能的软件,不要一味的追求流行的技术,而是深入理解底层硬件的工作原理,实现软硬的和谐。比如说,为了解决False sharing问题,他在设计队列的时候,故意给队列的头和尾指针加上填充,来保证他们不出现在同一个缓存线里。

基于key-value的NoSQL数据库,说白了就是一个Hashmap。Hashmap的最大特点,是能够快速的实现数据的保存和读取。假如我是一个使用hashmap的数据库,然后你告诉我,你们全校每个同学的颜值(假设大伙的颜值都不一样),只要你说个值,我只动一下手指头,就能告诉你它对应的人名。可是如果你的问题是,我们学校里谁颜值最高,我算起来可就麻烦了,得一个一个比一比。这时候,如果我用的不是hashmap,而是一个对有序数据更友好的Treemap,找到颜值最高的人,基本动一下手指头就行了。

除此之外,key-value数据库还有一些常见的其他因素值得注意。比如,每插入一对数据,除了主数据以外,往往还得加上一些辅助数据,比如主数据的修改时间。如果辅助数据所占的比例很大,数据库的使用效率就会很低,这时要尽量提高主数据的占比。你开一个动车,只送一个乘客,必定赔本,所以要尽量每趟多拉一些乘客。

只有理解底层数据结构的特点和局限,并且同情他们,在设计上层数据模型的时候,把它们考虑进去,才可能开发出一个和谐,高效的系统。

关于牛的事,我没有做过实验,万一你家的牛喜欢巧克力,只能祝福你能挤到巧克力味的牛奶。

0%