编程二十年,38岁Google程序员万字长文给出16条建议,涉创业、技术淘汰、拿大厂offer...
以能够让项目自负盈亏,并在这一约束下优化其增长的方式来管理和调整项目,这是这个世上最厉害的本事。
原文链接:https://medium.com/dev-publicity/advice-to-my-younger-self-and-you-after-20-years-in-programming-a3a2ccc7a942
未经允许,禁止转载!
距离我正式开始编程的工作已经过去二十年了。在这些年里,我有以下收获:
获得了科学领域“卓越能力”的绿卡申请批准
成为了Google的开发者专家。
成为了IEEE的高级会员。
担任过一家拥有100名员工的公司的首席运营官。
我编写的一段代码的下载次数达1.35亿次。
两次面向2000人的观众发表演讲。
根据国家电视台的评选,我是俄罗斯最诚实的人。
然而,我也有很多缺憾,而且这期间花费的时间太长。我认为,如果我早点应用我学习到的态度、原则和优先事项,就可以在5年内迅速达到事业上的大部分目标。如果你的职业生涯刚刚起步,这篇文章可以为你节省15年的时间。想象一下,如果我在23岁(而不是如今的38岁)就拥有如上所有的成就(除了IEEE,需要10年时间)。
在本文的第一部分中,我将简要介绍我的职业生涯。在第二部分中,我将详细介绍我认为拥有最大影响力的每一条建议。
第一部分:2003年~2023年的职业发展
2003年12月22日,我迟迟无法入睡,于是决定寻找一些域名。我检查了一些突然想到的域名,发现了GetSoft.ru,于是我将它买了下来。
我能用这个域名干点什么呢?我想着。最后,我决定我可以构建一个软件市场。
当时,我成为一名业余开发者已经7年了(从11岁开始)。我制作了《俄罗斯方块》、《炸弹人》、《坦克大战》等游戏的克隆版本,并把它们上传到我的网站,然后将链接放到当时的许多初创市场。当时的那些软件市场确实不太方便,而我知道自己能做一个更好的。
我学习了PHP,不过只是因为当时互联网上的大多数URL都以“.php”结尾。
2004年3月4日,我推出了GetSoft.ru。
我的第一版业务网站(经过Google翻译)
接着,我编写了一个脚本,解析了一个竞争对手网站的内容,并发送了类似于下面的个性化垃圾邮件:
你好,某某某。我们推出了一个新的软件市场。请将您的程序(标题1,标题2,标题3...)添加到其中!
这一招奏效了,带来了一些初始内容,吸引了搜索流量,进而吸引了更多的供应商:
这个网站让我获得了在Telma(如今改名为Harman Connected Services)实习的机会。这家公司坐落于俄罗斯下诺夫哥罗德,与我在同一所城市,由于为摩托罗拉手机制作固件而小有名气。我在那里工作了一年就离职了,因为我认为自己很聪明,有更好的机会,而且当时我通过出售广告赚了很多钱。
这笔收入让我变得懒惰。时至2010年,市场发生了变化,收入下降,我错过了早期社交网络的黄金时代。我没有建立社群,只是依赖搜索流量。
我没有想出拯救自己的网站的计划,于是,我开始以自由职业者的身份为他人制作企业网站。我曾考虑过成立一家代理机构。
2011年,我偏离了编程方向。我结识了一位非常了不起的老师。在他的帮助下,我开始讲课,讲的都是一些自己的兴趣爱好,例如摄影和摄像,一直持续到2013年。后来,他鼓励我投放公寓装修广告,然后将这些潜在客户卖给装修工人。虽然小有所成,但很有限。后来,他聘请我教授别人如何获取订单并售出,这份工作一直持续到了2014年中期。
后来,他又聘请我担任他的另一家教育公司的学习材料制作主管,后来又提升我为CTO和COO。我为他搭建了所有的IT基础设施,并从零开始制作了学习管理系统。
巅峰时期,我们有100多名老师,2500多名学生,以及100多家活跃的联盟营销合作伙伴。那段时间的收入增长了四倍,2015年的利润为274,000美元,是俄罗斯平均工资的600倍。
2016年,他重新规划了管理和薪酬,而我辞职了,并写了一本关于如何做好工作以及如何升职的书(目前仅有俄文版)。
后来,我再次开始从事自由职业,因为我一直有一个梦想,那就是经营自己的公司,而这又占据了我多年的时间。当时,企业网站的市场收缩,简单的无代码服务占主导地位。我制作了自己的CRM,但很难卖出去,因为不适合市场。由于个人的自尊心作祟,我无法接受普通工作。
时至2019年,我终于意识到由于没有在大公司工作的经历,让我有很多欠缺。于是,我搬到了莫斯科,并在Calltouch找到了一份工作,这是俄罗斯一流的电话跟踪和营销分析平台。2020年秋天,我辞职,再次开始创业。
我的这家创业公司需要最便宜的移动以及Web前端,于是我决定学习Flutter。我不想浪费自己的积蓄,恰巧我的一位朋友正在使用Flutter,我就在他那里找了一份兼职工作。那段时间里,我暂停了自己的创业公司,为他工作。与此同时,我开始写博客。2022年2月,战争导致我们的客户破产。
我逃到了格鲁吉亚(一个欧洲国家),在Akvelon找到了一份工作,这是一家外包软件供应商。而这成为了我人生的转折点。这家公司为Apache创建了一些知名的开源项目,通过他们,我结识了一些谷歌工程师。
我在Akvelon工作了一年,由于个人的工作经历以及写作,我获得Google开发者专家的头衔。
当时正是搬到发达国家的好机会。我讨厌成为一名没有居留许可的永久游客,因为身份问题,我总是被人视为失败者。
美国一直是我的首要目标。我曾经梦想赚到足够多的钱,拿到投资移民的绿卡,但现在我了解到EB-1A杰出能力计划,而且发现它是可行的。我决定进一步提升个人资料,达到他们的要求。
所以我加入了IEEE,并迅速晋升为高级会员。
后来,我又申请成为CODiE奖的评审,并获得了批准。
第二部分:我的建议
1. 挑选最好的地方,并建立全球网络
我就读的大学距离我家步行只需15分钟。那是2002年俄罗斯的思维方式:一个小而封闭的世界。在我的同学之中,只有一个人去了莫斯科读书,更不用说出国留学了。当时,身边没有人做榜样,让我看到一个人可以走得更远,而我也没有互联网,没办法了解其他渠道。
反观我的Google主管,比我年轻4岁,来自墨西哥,在韩国上学。然后加入了当地的Google,随后又搬到了美国。想象一下,高中毕业仅6年,你就能达到这个高度。
这个年龄段是人生最美好的时光。做好充分的准备,你可以去任何梦想的大学。之后难度会逐渐增加。
一直以来,我都相信这个世界上有更好的地方,我迟早会到达那里。在过去的20年里,那里发生了很多事情,而我并未参与其中。
我有一位朋友,比我小4岁,在我刚刚在家乡读完四年大学时,他就被一所美国大学录取。震惊之余,我意识到一个事实:机会一直都在等着我。
即便不出国,你也可以建立全球专业人士关系网。我身边的大多数人都如井底之蛙。虽然他们也建立了LinkedIn档案,也发了很多英语帖子,但只有俄罗斯的招聘人员与他们联系。
这是因为仅仅改变语言还不够。许多地方社区都缺少国际协会和会议。如果你知道某个更为成功的社区,请立即加入,然后参与写作与演讲。对我来说,Google开发者专家和IEEE就是很好的例子,全球有成千上万的社区在等待你。呆在井底是有风险的。
2. 创业
我的第一个商业项目就是前面提到的软件市场。虽然有一个很好的开头,但后来我面临很多问题,因为我没有将其视为一项业务。
第一个问题是,我希望这个项目是“公平的”,因此我拒绝了除广告之外的任何变现方式。我拒绝了所有付费推广,因为我认为学生程序员和已建立的供应商在平台上应该平等。这导致我的开发资源不足,而竞争却在不断加剧。所以,我建议你积极抓住商机。这个世界上所有“免费”的东西都依赖于某个人的成功和不断增长的业务基础。你免费提供的每一件东西都必须是某个可靠的业务流程的副产品,并且需要拥有足够明确的光明未来。否则,用自己的资源慷慨解囊的慈善行为将毁掉你,伤害你周围的世界以及你试图帮助的人。
第二个问题是资源诅咒。有了钱,我就什么都不想干,所以我什么都没有干。虽然我为迎合自己的审美稍微改进了一下我的网站,但从未像最初的几个月那样全力以赴。这其实是打工人的思维,而不是商人的思维。我不知道如何克服资源诅咒。我能告诉你的最好建议是,无论你依赖什么,总有一天会崩塌。仔细想想,那时你会剩下什么。
3. 获取利润
对于大多数程序员而言,最大的问题在于,他们并不会从经济角度考虑问题。
编程是一项高创造性的活动,需要绝对的安全性,个人的不确定性和恐惧会导致你停滞不前。这就是为什么程序员大多有固定工资,与市场、销售、配送、服务等其他职位不同,这些职位的薪资很大一部分来自佣金。
程序员不仅不担心产品是否热销,甚至不担心是否按时完成任务。人们普遍的看法是,相较于程序员因为固定薪水而变懒的风险,团队成员因害怕带回家的钱不够而减缓速度的风险更高。
截止日期确实会给编程工作带来压力,但这只是一种假想,我从未见过任何人因未能按期完成工作而被解雇,或者受到处分,特别是在一些国家解雇并不是简单的事情。即使是不称职的程序员也会被安排一些枯燥的任务,只不过不涨工资罢了,而且他们很快就会辞职,对双方都有好处。
程序员拥有固定薪水的原因还有两个。首先,大型项目很难提出一个合理的利润计算公式,既保证公平,又能够快速反馈以影响到个人行为。IT行业常见的自然利润反馈循环至少需要几个月的时间。
另一个原因是让程序员了解软件公司的经济学是有风险的,因为去掉这唯一的障碍,他们不仅会离职,而且还会创立竞争性企业。如果他们愿意,并且性格外向,他们有这类举动的概率远高于市场、销售、支持等辅助人员,因为他们拥有最稀缺、最有价值的技能和专业知识。
虽然薪水固定对心理健康有好处,但不利于我们培养判断什么对公司业务发展有利的直觉。管理层可能会口头解释公司的首要业务,但这远不如佣金来得有效。
程序员抱怨他们希望花更多时间重构,而不是构建新功能。或者,他们不明白迅速推出测试版的原因,想要再多几个月的时间来完善工作。或者,他们向管理层施加压力,要求扩展最小化可行产品,添加他们喜欢的功能。或者,他们希望使用个人喜好的技术,尽管不是最佳选择。
后果是:
我们这些人很难创业,因为我们不知道如何正确地排列各项工作的优先顺序,需要在实践中学习,并且会损失大量资金。
很难找到以业务为导向的程序员,不需要人监管也能关心业务。
以商业思维创业可以获得优势。目前没有任何的相关教育,但我知道有两种方法可以提供帮助。
佣金
如果你的薪资与利润成正比,你会彻底改变自己的行为。
作为程序员,你可以在为小企业做小型项目时获取相应的佣金。举个例子,为某人制作一个聊天机器人作为额外的销售渠道,对方同意给你一些分红。
任何按佣金计酬的非编程工作也是有帮助的。销售员通常具有良好的商业直觉,如果他们变成程序员,也会保留这种直觉。
自由职业似乎也有助于培养对利润的感觉,因为你的行为会迅速获得反馈。完成一个固定价格的订单的速度越快,就可以越快得到一个新的订单。然而,这很少与业务需求有关,因为你只是学会以简单的方式完成每个任务,而不是从业务战略的角度决定优先处理哪些任务。
雇佣某人
用自己的钱创办一家公司可以为你打开一个全新的世界。别人眼中一个不重要的小功能,在你看来可能是500美元或5000美元的成本,你会残酷无情地将其搁置,直到进入市场并有资金支持。
在开始有收入后,你会发现成百上千被搁置的功能,你需要实现那些现阶段能够最大程度推动收入增长的功能。你最喜欢的功能可能并不在列表的最上端。你必须学会忍耐,而且还要向员工解释为什么你没有那么多钱让他们花两个小时做他们想做的事情。
以能够让项目自负盈亏,并在这一约束下优化其增长的方式来管理和调整项目,这是这个世上最厉害的本事。
尽早学会这一点,可以将为你节省几十年的功夫。
4. 接触仍处于早期阶段的技术,及时跳出走向衰退的技术
人工智能
我接触神经网络已经几十年了。18年前,我上过一门相关的课程,做了一个简单的神经网络。当时没有TensorFlow或其他产品,我不得不手工创建一个感知器的C++类,以及在这之上的一切。但没过多久,我就把这些知识抛到了脑后,我只知道我们可以编写文本编辑器、计算器、电子邮件客户端,现在还可以制作一些神经网络。对我来说,人工智能只是其中一项技术,没有特别之处。
其实,当时人们普遍认为未来AI将主导整个行业。然而,在课程结束之际,我并没有将那些知识和我的新技能与将来我从事的工作联系起来。
三年后,我遇到了一次机会,有人邀请我参与一个能够从视频流中检测杂货盗窃的系统,那是在2008年!我拒绝了,因为我想自己创业。
现如今在创业时,我需要一种能够检测代码片段使用了什么算法的AI。虽然比行业最尖端的技术要简单得多,但我理解起来依然有困难,而且我有拖延症。
移动应用
还有一项技术是移动应用。17年前我曾上过一门关于移动开发的课程。当时是Java Mobile Edition,没有针对特定操作系统的编码工作,但令人惊讶的是你可以在一个小到能放进口袋里的设备上运行代码。但我用JavaME做了个俄罗斯方块,放到网上,然后就抛到脑后了。
14年后,一切都变成了移动应用。我开始学习Flutter,事先没有任何Android和iOS开发的知识。大多数Flutter的招聘都要求原生移动的开发经验,并将Flutter视为一种花哨的工具,所以我不太适合。
我有一位朋友是一家“专注于移动开发12年”的工作室的技术负责人。他们的客户包括肯德基、汉堡王、SAP和Mars。我本可以创办这样的工作室,但我没有。
PHP
相反,我在20年前创建了一家PHP相关的公司。在3个月内启动创业公司,这并没有错,但我在那里停留了太长时间。
4年前,当我决定找一份“真正的工作”,而不是自由职业时,我意识到了这一点。PHP的工作很无聊。由于某种原因,大公司新项目的后端几乎都使用了其他技术。
当时,我被现实狠狠打脸。我曾亲眼目睹了其他技术的兴起:Node.js,Go等等。但我一直呆在舒适圈内,我的客户认为PHP是最佳解决方案,而且原因有很多。然而,时移势易,如今PHP的市场正在萎缩。
如果你没有看出某个技术即将消亡的早期迹象,就不得不等到更艰难的迹象出现,付出更高的代价。小公司网站的市场被无代码网站服务扼杀。接着,大一点的公司也转身离开了。
技术不会无缘无故被抛弃。原因是不合适。如果你说你不看重流行度,只要能达到你的目的即可,还请三思。其他更适合行业要求的技术,很可能也更适合你的需求。
对于PHP来说,问题在于标准库混合了你可以想象的所有风格,类型不明确,配置困难。在最后一份PHP的工作中,我花了几周的时间修复和配置linter,而对于Go、Dart或TypeScript之类的编译型语言来说,这是开箱即用的功能。
认清生命周期阶段
我们很难判断某个新兴的技术只是短暂的辉煌,还是会主导整个领域。然而,这个问题的答案在某个时间会变得十分清楚。如果你还说没看见,那么就是自欺欺人。旧技术的消亡亦是如此。
理想情况下,你应该在前景明朗的时候进行切换。至少应该在意识到你在自欺欺人时进行切换。
主动质疑
你必须积极主动。主动质疑:“这仍是正确的选择吗?”
你周围的人可能并不关心你是否抛弃某项技术。
雇主需要你维护现有的技术栈。同事需要你的同意才能安心地切换技术栈。如果你顺其自然,最终可能会被迫去使用一些已经走上末路却仍在假装自己还活着的技术,即便你有机会切换,也将是一段糟糕的经历。
看看StackOverflow的薪水统计表:
他们为Objective-C支付更高的薪水是为了阻止你转向Swift。阻止你从Perl转成Python时也出现了同样的情况。
补充说明
不要因为某项技术很流行就去学,这样你不会有学习的激情。在选择发展方向时,背后必须有更好的原因。我喜欢系统的整体设计,包括后端、前端、基础架构以及许多其他部分。因此,我会熟练掌握一系列系统设计的技能。
如果我在2005年完全投身于人工智能,或者在2006年完全投身于移动应用,就会错过这些技能。那么,我将错过在工作中体验这些技能的机会。我选择技能的根据是个人的习惯,而不是对未来的远见。这是我后悔的地方。
5. 想一想下一个淘汰的技术
这条建议讨论的是技术的淘汰,只不过是从更高层面。不断涌现和消亡的不仅是技术,还有使用这些技术的“模式”。
我认为,整个技术的发展不是一部创造史,而是消亡史。
网站的出现不是因为它们很酷,而是因为必须淘汰纸质目录。
GetSoft.ru之类的市场出现不是因为我们喜欢查找屏幕保护程序,并在早期论坛上聊天,而是为了消灭去店里购买CD的需求。
平台商店导致定制市场没落,因为人们希望在获取应用时省略记住并键入“getsoft.ru”的多余步骤。
一切都变成移动不是因为手机有多好,而是因为计算机的体积过大,是一种负担。
无代码网站的出现是因为从想法变成网站的过程太漫长。
如今Flutter很受欢迎,也是我的主要业务。目前的使用模型是公司雇佣程序员或外包供应商,创建、发布和维护应用程序。这是值得投资的模型吗?
我们听到越来越多有关低代码和无代码解决方案的消息,例如FlutterFlow和AppSheet。一次偶然的机会,我得知我的两个朋友正在独立开发一个“基于Flutter的WordPress”,这样既能够淘汰常规的小型网站,又能更轻松地生成Flutter应用。
即使这项技术尚未消亡,你也有可能处于具体使用的某个已死的分支上。这并不意味着,你会像我当初淹没在网站代理的红海中一样,淹没在Flutter代理的红海中。当年一些人通过网站取得了巨大的成功,而一些人将在未来几年通过手动编写Flutter应用而取得巨大的成功。
只不过你可能不再是乘风破浪的人,而是在努力向前游。你可能在浪费本可以用来迎接下一个浪潮的时间。
仔细想一想你的客户和用户所面临的负担。你必须清楚某些产品的出现会消除这一负担。而这最好是你提供的产品。
6. 开展价值链中的业务
2002年,我尝试制作业余电脑游戏,当时的竞争非常激烈。每天通过各个市场访问我的网站的人只有大约10个,将其变成一项业务会非常困难。于是,我制作了自己的软件市场,第一年日均访客就达到了1100名。
这是价值链中更高的一步。我无须再与其他人竞争,而是将他们的竞争转化为我的优势。我可以提供所有可选择的软件。
很快,我了解到还有一个更高的位置。有个人创建了SoftSearch.ru,这是一个软件市场的搜索引擎。时至2004年,软件市场已达数百个,他充分利用这些软件市场,并真正拥有了每一款软件。我不知道他的收入是多少,但当时市场正在变化,很多被淘汰,他仍然是受益方。2014年,我关闭了GetSoft.ru,而他直到2019年才关闭了SoftSearch.ru。
这是一种模式。这种模式的两个极端的例子是Google和Uber。Google没有与其他网站在内容上竞争,而是更上一层楼,为整个网络建立了搜索引擎,并受益于这些网站。Uber利用了司机之间的竞争,而不是在相同的领域与他们角逐。
你不一定要成为自己行业中的Google或Uber。在大多数情况下,业务及其整合需要截然不同的技能。市场是相对简单的软件,但其中包含的宝藏可能难度高出了几个数量级。当一款软件售出时,作者获得的收入和认可度比市场所有者更多。你可能更擅长自己的业务,而不是组织整个领域。但你应该意识到这种模式。
还有一个居于价值链中更高位置的例子是成为教师。在寻找自由职业者时,如果你没有时间反复试错,一种聪明的方式是找到该领域的一位教师(他有很多成功的学生),并雇佣这位教师来完成工作。虽然比普通自由职业者要贵,但成功率更高。这就是为什么在一个衰落的市场中,教育者是最后失业的人。
我的一位雇主就在教人如何从事大众利益和服务的经营。后来,他转而教人如何成为自己喜欢的领域的老师。后者为他带来了4倍的收入,因为他在教育链中走向了更高的一步。
另一个处于价值链中更高位置的例子是为领域制定标准、行为准则或奖项。这会瞬间将你提升到其他人之上。我认为在成为高手之前,你不必勉强,但要意识到在某个时刻,这些方法可能是你乃至整个行业最好的发展方向。
7. 选择科学而非应用
我是一个喜欢实际行动的人,不太适合学术界。我从事的是能产生实际成果的工作,虽然基于科学和常识,但我不研究新的算法、理论或原则。我不做研究。我做自己的业务,然后等着有人为我提供新的API,让我能够使用新的好东西。我希望自己更接近他们的位置。
实际上,这是在获得学士学位后你要做的一个重大选择。如果选择攻读硕士学位,那么就要从事科学研究。编写有用的产品换不来硕士学位,你需要进行自己的研究或发明,为世界提供新的思路。
我没有攻读硕士学位。在我们国家,工程学位毕业后可以选择工程学位,只需在获得学士学位后进行1.5年的应用性学习,无需两年的研究性学习。所以,我就选择了这个,但我后悔了。
15年前,进入市场是比较容易的。只要把事情做好,就能够跻身行业前列。想一想Facebook。他们并没有在其他人的成果之上创新,唯一不同的是,他们将这款软件应用到了迅速发展的领域。
而今是科学的时代。架构出色和代码清晰的优势已经减弱,因为默认情况下越来越多的人都能做到这一点。这些在战术上很重要,但单靠它们无法独自崭露头角。
与之相对,具备一些“魔法”元素的人很快就能取得成功。一个拥有AI预测或生成功能背景的服务问世,就会导致其他上百个现有的服务消失。
Python的崛起是一个很好的例证。这门语言之所以受欢迎,主要是因为它有丰富的数学库。
对科学的赞美并非新鲜事。40年前,科学家们忙于数据库索引和搜索算法。有的程序员可能希望自己发明了一个好算法,并拥有市场上最好的数据库管理系统。但时光流逝,这些系统成为了程序员构建应用的基础。神经模型也将经历同样的过程。如果你没有参与它们的开发,那只能使用现成的模型来简化更高层次的工作。
不同的是,40年前的科学威胁到了图书馆员和电话操作员的工作。而现在,它正在削减分析师、设计师和助手的工作。程序员将是下一个受影响的群体。他们不会全部失业,但是程序员与科学家的比例正在稳步下降。
而这种趋势将继续。科学离市场更近了。很快,消费者就会直接购买科学。他们将使用瘦客户端,这类产品没有作者,只有一位应用程序员。你听说过为ChatGPT制作前端的人吗?没有,因为他们可以轻易被取代,而且获得的报酬也非常少。
此外,如果你在考虑下一个淘汰的技术,科学家是最早获得信息的人。在寻找下一个淘汰技术的过程中,选择一个科学职业,然后利用你的成果开创革命性的事业。
一些淘汰源于实践,比如社交网络。它们只是将旧技术应用于新领域。但是随着时间的推移,在不借助科学的情况下减轻人类的负担变得越来越困难。
我感觉自己偏应用,但从不会止步不前。我希望自己攻读硕士学位,从事几年的研究,然后再决定哪个更适合我。立足于科学,如果你愿意随时可以降级去做产品。反之则较为困难。
8. 不要仅投资自己
回顾我的整个人生,我一直认为程序员的需求高涨,而且薪资很高。因此,我从未觉得有必要存钱。结果,38岁的时候,我的银行卡里只有2万美元,一辆开了12年的车,以及公寓的四分之一(但我已经离开了那个国家)。
与此同时,我的一些年轻的朋友,虽然收入不高,但他们已经还清了大部分房贷。
20年的时光转瞬即逝,惊讶之余,我意识到过去一直生活在“未来”,却从未将其变为现实。
你应该注重理财。参加投资课程,学习投资,买房子。
由于获得了Google开发者专家的认证,我备受青睐,成为了团队领导和CTO。如果不是这个认证,相信大多数雇主都会选择一个25岁的人,而不是一个38岁的人,更不用说10年后48岁的我了。
我的上一份工作,老板主动要求解约,是因为他们没有适合我的技能的工作了。他们提前29天通知的我。整个团队只留下了一个年轻人来维护现有的软件。我不知道他们的理由是什么。部分原因可能是,高级程序员对维护感到厌倦,随时可能会辞职。但事实仍然是,只有最年轻的那个人保住了工作。
大多数和我年龄相仿的开发人员没有这样的竞争优势,所以你必须做最坏的打算。随着人工智能的发展,没有人是安全的。因此,永远不要认为自己是特殊的人。你依赖的任何东西都可能在某一天消亡。届时,你可不希望自己口袋里只有2万美元。
更糟糕的是,过了35岁,这个世界将你视为一个没有财产和金钱的乞丐。一年前,我申请澳大利亚签证被拒,原因是我没有展现出赚钱和存钱的习惯,也没有任何房产,所以他们担心我会滞留。
我很震惊,因为20多岁的时候,我几乎可以毫不费力地获得美国、法国、荷兰等国的签证,而那时我拥有的金钱和财产更少。
年轻的时候,人们对你充满了希望,所有的大门都会为你敞开,这种幻想掩盖了世界的另一面:如果有门,那是为了将某些人关在门外。
而“某些人”就是年近40的所有人,我们不再“不符合社会标准”。就冲着这一点,我们也要做到符合社会标准。
9. 在IT行业的领军企业找工作
我做了8年的自由职业,到头来什么都没留下。我为当地最有名的的一家牙科诊所制作了一个网站。那又怎么样呢?
我甚至不能向任何人展示这个网站,因为两年后他们又制作了一个更新的网站。我有大约40个类似的案例。
在行业的领军企业里工作,通常拿不到太高的薪资,但你可以快速成长。我知道有人刚开始的工资也就是平均数,六年后翻了10倍。而且他们还有很多可以讲述的资历,可以为他们争取到任何工作机会。
自由职业的难度和有趣程度无法与优秀的企业相比。你不过是用人生最美好的时光换取金钱而已。
多么希望我能早点明白这一点。我看到过很多早期的文章,都在赞扬自由职业带来的自由,所以我从未对这个想法产生过质疑。事实上,能够带给你自由,而且不会让你变成无所作为的流浪汉的唯一方式是建立自己的业务,但这又是另外一个话题了。
在一家小公司工作可能比自由职业有趣一点,因为你可以获得一些管理和市场的经验,但严格来说,这仍然是一份平庸的工作。举个例子,我曾是一家教育公司的CTO。我为他们制作了一个CRM和一个LMS,使用的技术已经流行了十年之久。虽然那家公司发展良好,那又怎么样呢?无论业务的性质如何,对于其他人来说,这些系统只不过是PHP + MySQL+CRUD。
大公司需要很多技术:
分布式系统的架构。
高负载。
事务,处理竞争条件,并行计算。
请求优化,性能分析。
自动化测试以及CI/CD。
正确的重构比例,应对一些遗留代码。
修改和部署代码时须非常小心。
在小公司的IT部门工作,以上技术你统统接触不到。但如果你愿意,可以很轻松地从大公司的专家降级到小公司的某个职位。
这种技能要求上的不对称性决定了你应该趁着还有机会寻找一份在行业领军企业里工作的机会。此外,你还能获得大把吹嘘的资历。
另一个关键原因是,从事自由职业或在小公司工作,你通常都是技术水平最高的那个程序员,所以你只能通过互联网学习。但从同事那里学习比阅读和观看视频学习的效果更好。
这种学习渗透到了空气中。工作时,你能收到大量信号,虽然注意不到,但仍然会被你吸收,成为你的一部分。如果你在家里从事自由职业,外面只有狗叫声,对你毫无意义。但如果你在办公室,周围都是熟练的专业人员,有人正在讨论你从未想过的问题的解决方案,这就变成了你免费学习的机会,甚至不需要你主动要求。
如果你是周围技术水平最高的人,那么你应该逃离这个地方。
好消息是大公司通常会招聘实习生,然后慢慢培养。例如,我兄弟在读大学期间在英特尔工作了两年。这无疑成了24岁的简历上浓墨重彩的一笔。离开学校,就很难获得这样的机会了。
10. 承担关键任务
仅仅进入大公司工作还不够。你有很多选择,看似都差不多,但从个人长期发展的角度来看,就完全不同了。
举个例子,EB-1A绿卡有一个标准要求你承担关键角色,具体定义是根据组织的度量标准有着重大影响。即使你从事的是最尖端的工作,需要掌握世界上所有的技能,别人也不一定会将其视为“关键”,因为影响力有可能是间接的,或者可能有太多像你这样的人,而你个人的贡献度很难评估。
另一方面,你甚至可以在完全不涉足任何现代技术的情况下承担关键任务。例如,我曾经有幸负责一家公司的身份验证系统。那只是一些PHP代码,但我发现并修复了一些关键的漏洞。我还帮助他们在CI中引入了静态分析,减少了意外停机时间。很有可能是这两者的帮助,我才达到了EB-1A计划的标准(我说“很有可能”,是因为我第一次申请就通过了,但没有人告诉我他们是如何统计分数的,但我认为这是强有力的一点)。
当然,你不需要在“关键任务”和“尖端技术”之间进行选择,你可以两者兼之。选择合适的公司和职位,然后花点时间深耕,就可以同时满足这两个检验标准。
在考虑一个职位时,想一想是否可以轻易向外行证明你为项目的成功做出了关键性的贡献,即便你并没有任何正式的领导职务。这可以让你的简历达到一个完全不同的维度,而不仅仅是技术上的卓越。
我只有4年的时间在做在我看来是关键的任务。这意味着,其余16年的时间都白白浪费掉了,对我的简历没有实质性的提升,我本可以提升5倍。
大多数时候,只有做好准备的人才能抓住关键角色的机会。CEO或CTO会直接找你,就像我经历过的那样。但在那之前,你仍然可以积极地寻找这样的机会。
假如我是一名初级程序员,在寻找关键角色时,我希望成为身份验证、加密、高负载系统DevOps或查询优化等领域的助手。这些职位要求你做事滴水不漏,而不是丰富的经验。通常,如果一个职位的错误成本很高,而且无法轻易找借口脱身,那就是我要寻找的职位。
11. 《致加西亚的一封信》
美国作家艾尔伯特·哈伯德的著作《致加西亚的一封信》是一本很了不起的商业书籍。篇幅很短,只需几分钟就能读完。
在我给别人分配任务时,通常他们都会问太多问题。如果是一周的工作,我通常需要花大约两个小时来解释那些我认为理应5分钟就能明确的事情。
如果你一路坚持读到这里,我相信不需要详细展开说明,你已经心领神会了。
另一方面,有些热血青年不问青红皂白就开干,结果往往会做错事。不过这种情况较为罕见,我也不太担心。
我也曾是其中之一。有一次,我需要创建一个端点,以便前端可以显示数据库中是否存在某些记录。我猜想他们可能会需要记录数,所以我返回了记录数。如果他们真的需要,就可以直接使用了。于是,我写了一条非常简单的语句:
CTO在看我的解决方案后非常生气。他要求我统计一下耗时。结果为不到1毫秒,我看不出有什么问题。然后,他要我统计下面这条语句的耗时:
结果快了20倍。
我错了吗?以前我在小企业工作,应用程序的负载都很低,为将来快速改进而做好准备是最重要的技能之一,这就是为什么我问都没问就做了这些工作的原因。我缺乏的是在高负载的系统和环境中工作的经验。
在遇到问题时,你需要判断这个问题是出于某种习惯,还是有必要。然后,根据你的判断决定是放弃,还是问一问。这需要对大环境的深刻理解,包括业务需求、预算、目标、路线图、架构及其限制、待办事项列表、外部依赖、整个代码库的历史等等。
如果你不确定如何完成工作,最简单、最有效的方法是想一想哪些工作需要优先处理。
然后从中得出解决方案。就上面的SQL语句而言,如果我想清楚这一点,可能就不会扫描整个表了。
其次,你需要意识到平衡,根据上述所有的这些项目因素,更好地判断问还是不问。
提问代表积极主动,不去打扰别人代表你能胜任这个职位,二者之间的平衡是你晋升的关键因素之一。
12. 为重要的开源项目做贡献
开源贡献可以为你的简历、面试、会员计划、奖项,甚至人才移民计划加分。
我最受欢迎的开源贡献是PHPStan中的一个功能,PHPStan是最流行的PHP静态代码分析器。我的这段代码下载次数超过了1.35亿次。
这很可能是我通过EB-1A计划的一个标准“为领域做出重大科学贡献”的原因之一,也为我获得绿卡贡献了三分之一的力量。
为了贡献这段代码,我不得不换成兼职工作,因为当时我34岁,已没有精力只利用业余时间写代码。20多岁的时候,我们的时间非常自由,而且精力无限,所以请善加利用。
我还有两个最厉害但不太受欢迎的贡献是,为两个Apache应用(Beam Playground、Tour of Beam)编写的前端以及一款Flutter的代码编辑器。
开源贡献加上写作和演讲,为我赢得了Google开发者专家的头衔。从该计划的面试来看,我感觉开源的贡献比写作和演讲更为重要,但我也不十分确定。
如果你选择了合适的项目,开源贡献就像是在早期购买了正确的股票。之后,你什么都不用做,只需静观下载数量不断增加,直到数百万。就像股票一样,错过这样的机会,到了一定年龄,你将不再“符合社会标准”。然而,与股票不同,即使项目失败,开源贡献也不会下降,评判标准依然是流行度的最高点。
但是,与其他工作一样,为了做贡献而做贡献会很无聊。我为开源做的这些贡献都是因为我在工作中有这类的需要。因此,你应该选择一份工作,而开源贡献只是顺手而已,平衡的秘诀是:无需额外的努力就能换来不错的结果。
我们总是渴望自己的软件包成为热门,这样我们就能成为顶级开源代码库的所有者。但大多数人都没有这么幸运。我最好的Flutter软件包只能排进前16%,很令人心碎。
别把所有的鸡蛋都放在自己的篮子里,你可以去帮助那些有名的人。这可以与自己的项目不火的风险形成对冲。
纵观我的整个职业生涯,只有不到7%的时间在专职从事开源工作,但希望我能做出更多贡献。据我所知,有些Google开发者专家80%的职业生涯都在从事开源工作。你也有这样的机会,只需慢慢寻找。
13. 走向公众
20年前,是否成为公众人物还是个人选择。当时还没有社交网络,互联网也没有视频,为了获得知名度,人们必须为专业杂志撰稿。这需要付出很多努力,所以对于专业人士来说,保持低调也未尝不可。找工作时,你只需发送自己的简历。而对方也别无选择,只能相信你,并邀请你参加面试。
如今,这种方法已经不行了。成为公众人物几乎不费吹灰之力,保持低调只能说明你畏惧、身无所长或者人生规划有问题。即使是内向的人,至少也应该写一些文章,以免引起怀疑。如果你突然出现在社交网络上,有50个朋友,却没有任何作品,也没有关于你的公开记录,那么就很难找到一份像样的工作。
现如今每个人都是公开的,所以你应该积极走向公众才能脱颖而出。你应该把自己取得的每一个成就、每一个发现和每一个可重用的成果都记录下来。
保持沉默理应比向全世界表达自己更难。
多写作
我的第一篇技术文章发表于2004年9月29日。阅读次数为5千多次,我感到非常高兴。那时我是一名大三的学生,许多人已经在学习我的经验了。
由于某种原因,我发表第二篇文章已时隔17年。
最近这两年,我才开始写博客,如今已有十万多次的浏览和几百个粉丝。粉丝的数量呈指数增长,因为这些数字越高越能吸引更多人。如果中间没有间隔17年,我现在可能已成为一名巨星。
下面是我的一些建议:
不要在代码审查和指导会议中重复自己说过的话。相同的话,如果你说了两次,就应该花点时间写下来并发布,然后将链接发送给他们。如果你没有写作的习惯,就从这个最简单的方法开始吧。
在所有流行的平台上发布文章。仅使用一个平台,有可能推荐算法会改变。你花了多年时间建立的粉丝群,肯定不希望他们突然看不到你的新文章了。许多平台都出现过这样的情况,现在主要用作文本的托管。在各个平台发布文章,就可以降低这种风险。
遵循“以作者为先”的原则。选择工作时,请检查该公司是否支持这条原则,并帮忙宣传你的社交账号。有些公司允许你在工作时间内写作,甚至会支付额外的稿费,尽管他们可能不允许你在文章结尾呼吁读者订阅你的个人账号。
将一切重要的知识都转化为文本,即使是签证被拒。这样,你的在生活中就永远不会有损失,因为即便遇到最差的情况,你也为此撰写了一篇文章。
写私人日记。刚开始的时候,可以非常简单,比如“我去了某地。我做了某事。”一年后,你会发现自己在不知不觉中写下了富有哲理的长篇文字。
制作视频
一般来讲,热门视频的粉丝数量是热门博客文章的10倍以上。这意味着,仅靠写作会无形中失去很多。
我不擅长制作视频。通常在正式录制之前至少需要完整地演练一次,但我讨厌演练。我讨厌在镜头面前表演,或者因为说话卡顿重新录制。我讨厌为了录屏提前准备,比如打开文件夹和选项卡等。我讨厌编辑视频,因为太耗时间,而且我总是在事后发现还有许多需要改进。真希望自己能够早一点学会制作视频。
年轻时制作视频要容易得多。因为你有大把的时间,也不会遇到上述我讨厌的所有事情。所以无需理会我的抱怨。
2011年,我开始做YouTube频道,算是比较早,但后来我没有花太多时间在上面。观看次数超过10万,还算不错。不过,我的频道讲述的不是编程,而且其他相关的内容。
我参加过有关视频制作的课程,摄影方面的学习还算不错,制作了3个短片。
我甚至制作了一个关于如何拍摄视频的课程,其中包括不要害怕直播,如何设置相机支架、照明和麦克风,以及专业编辑等15个主题。
文本最大的优势在于你可以随时编辑,直到完美,而视频无法做到这一点。我在获悉绿卡申请结果之前就写下了本文,然后在拿到结果后又更新了相应的部分。视频却不能这样,但是在AI的帮助下,我们可以撰写视频脚本,然后渲染视频,感觉就像自己录制的一样。你的面部表情、屏幕、所有动作都将完美地放入视频,所以我上述所有抱怨的问题将不复存在。话虽如此,那些天生习惯录制和发布视频的人会更有优势,因为他们思维更敏捷,而且具有推广视频的经验,所以尽快开始学习制作视频吧。
在活动中发言
我的童年和少年时期有口吃的问题,所以我会尽可能避免说话。另外,我似乎还患有阿斯伯格综合征(社交与非言语交际障碍),因此我很难清晰地表达自己的想法。长大以后,普通人都具备表达自我的能力,而且他们都很有魅力,而我显得很迟钝(这是我擅长写作的原因之一,算是一种补偿)。
后来,我意识到我错过了很多良机,于是我决定改变。我不得不加倍努力,才能获得其他人从一开始就享受并视为理所当然的东西。
以前,我很害怕讲话,如今却两次面向2千人讲话,尽管是关于政治而不是编程(都是用俄语)。
这种经历很难忘,可以极大地解放自己。
现场演讲是生活和工作的全新维度。你会遇到平时永远不会遇到的人。此外,相比于视频,现场观众对你的印象更为清晰和鲜明,你们之间可以建立更牢固的联系,你可以获得更多信任。你更为真实,而真实的人更有说服力。
在会议上演讲还能让你收获各方面的赞誉:成为组织成员(Google开发者专家,IEEE),移民计划加分等。随着时间推移,你参加演讲的机会将越来越多。哪些人会被邀请演讲?之前发表过演讲的人。
最简单的锻炼演讲的方法是成为大学的兼职老师,让人们认识你。在意识到需要改变自己之后,我就采取了行动。我的一位朋友是老师,在跟教授确认后她同意让我成为一个学期的代课老师。我就这样拿到了锻炼自己的机会。
如果你是某个职位的领导,或者是一名技术高手,就可以轻而易举地成为某次聚会的演讲者。你可以问问你上级在哪里演讲。我就问过我的上司,他感到很惊喜,并安排了我与其他两位大公司的员工共同开展了一次交流会,总共有40名观众。
很多经理都以为程序员不喜欢演讲,因此甚至都不会提这样的建议。与其等待别人恩赐,不如主动去询问。
我很后悔当初没有抓住机会多多讲话。现在我是一名Google开发者专家,每周都受邀参加国际会议,而且我终于有了空闲时间,因此我将接受这些邀请。
14. 保存一切
工作成果
小时候,你可能不太关心自己的劳动成果。只有父母会为你保留童年时期的画作。
后来,你开始在意并尝试保存过去的成果,为的是将来可能有需要,或者只是为了炫耀。
成年后,你会注意到自己害怕失去存档,好像它们已成为你的一部分。你会质疑为什么这些存档对你来说这么重要。你可能会克服这种恐惧,在自己身上找到安全感。逐渐地,你不再那么关注你的存档。你可能不想保存一些庞大的文件或难以整理的东西。甚至可能会故意删除一些东西来解脱自己。
虽然这种态度代表更好的心理健康,但后来你意识到,保留过去的东西仍然很有趣。
我的硬盘在2000年左右损坏了,所以我无法展示15岁前制作的游戏。1998年,我使用QuickBASIC 4.5复刻了游戏《乓》,虽然对你来说没有太大意义,但我多么希望能在这里放一张截图。幸好我还有2001年使用Visual Basic 5复刻的《Digger》游戏,其中所有的宝石都是在3DS Max中渲染的:
在回顾过往20年的文章里,你可以展示自己早期的作品,它们是那么可爱。
反馈
更重要的需要保存下来的是客户、同事、上级给你的反馈。日后需要的时候,就很难获取了。因为他们可能会:
辞职,然后失去了在文件上签字的权力。
忘记你的工作对他们的价值。
变成名人,变得太忙。
更改所有联系方式。
离世。
举个例子,我在PHPStan中进行了一项改进。2020年的时候,这个库还很受欢迎。我以为如果日后需要向某人证明我的工作,看看PR就知道了,因此就没有获取更多的证据。
后来,在申请绿卡的时候,我必须向移民官证明我的贡献,但这位移民官不明白PR的含义,也不明白它的影响。即便你向他们解释,也并非每位移民官都会努力去理解。有些人只看中权威人士签署的文件。有些人会寻找接口来淘汰你。
因此,我询问PHPStan的作者是否可以提供一封信,简单地说明我的工作的意义,但他说他太忙了,无法打印并寄给我一封纸质信函(这是我的律师的建议)。听到这个消息,我感到十分沮丧,因为当时我花费了几十个小时在那个功能上。但时隔三年,人们已经忘记了当初你的工作带给他们的感觉,他们不欠你什么。
如果你付出了很多努力,做好了某件事,那就想法收集一封证明信。在刚结束工作之际,提出这样的要求很自然。
至于我的绿卡,我不得不写信给PHP相关的许多公众人物,其中两人同意出具书信证明这个功能很重要,而且产生了影响。
我的这个请求确实有点奇怪。只有不到10%的人回应了,大多数人都没有看信,有些甚至直接进了垃圾邮件。所以,千万不要等到你被人忘记。遗憾的是,你一定会被人忘了。
15. 保重身体
这部分内容实际上真应该放在文章开头,但那样这篇文章感觉就像是一篇廉价的新时代文章。
我今年38岁,有一些健康问题。
我有脊椎侧弯的问题,呈S形。十几岁的时候,医生告诉我如果不矫正的话背会疼,但每个人17岁的时候都觉得自己无敌,所以我压根没听进去这些建议。
直到25岁之前,矫正都不难。但我一直等到30岁左右才开始关注,那时已经很难了。我通过瑜伽和按摩,用两年的时间将弯曲的弧度从25度改善到了21度,但进展非常缓慢,所以后来我放弃了。我多么希望当时自己没有放弃,因为到了38岁,矫正就更加困难了。近几年来,我的背部一直很疼。
我不能跑步,因为我的膝盖会疼。这是大学体育训练时单腿深蹲造成的。另外,从未有人告诉我如何正确跑步,我的跑步方式会把地面的冲击力直接传递到膝盖。有些运动医生专门研究跑步。他们可以指导你,如有必要,你可以试试。
除此之外还有节食的问题。我曾尝试素食主义,但没有注意我的饮食是否包含身体所需的肉类的所有营养。第一年效果很好,我感觉自己充满活力。但两年半后,我感到不对劲。愉悦感消失了,而且我发现自己的腿和手腕很容易扭伤。我隐隐感觉自己的身体缺少一些东西,然后我又开始吃肉了。现在我希望自己没有那两年半,或者缩减到6个月。
永远不要相信个例。如果受伤,去看医生。素食主义不能拯救你脱离地狱。
请记住以下几点:
每一种体育运动都需要一定的技巧。如果做得不正确,可能会受伤,而且可能无法康复,并引起永久性的疼痛。
如果需要监督你训练的人,请咨询高级运动医生。
在25岁之前治愈困扰你的问题。过了这个岁数,你会失去很多机会。
不要相信年轻时的自愈能力。这种超能力会消失。你对身体所犯的每一个错误都会在30岁后回到自己身上。
16. 不要被绊住脚
上面我介绍了很多自身的变化,其实在做出这些改变之前我就知道自己必须这么做。
我非常恋旧。即使放弃编程四年后,我仍在帮助那些为他们制作网站的人。他们在使用我的引擎,所以我觉得有义务支持他们,否则很无礼。
当时我不知道,如果关闭自己的业务,不会发生什么可怕的事情。他们可以在几天内找到替代品,只不过你愿意帮忙,他们懒得找罢了。对于他们的紧急请求,“下次还是找其他人吧”之类的答复不管用,你必须说不。
至于个人问题就更难了。在过往的大多数关系中,我一直认为如果有一天她回心转意,我们就可以重新在一起了;或者我只是想在她陷入困境时待在她身边提供帮助。我就这样在原地等待,直到自然而然地找到其他人,一切又周而复始重新开始了。
我有一个非常喜欢的按摩师。还有一个很了不起的瑜伽老师,九年了都没有换过。
这些只不过是我自己意识到的事情,没有意识到的肯定还有很多,比如食物、公园、街道等等细枝末节的依恋。
我就读的大学在全球前1500名中都排不上号,但离我家只有15分钟的步行路程,考虑到蝴蝶效应,这可能是我一生中最错误的决定。的确,2002年的时候,我很难获得任何信息,或者找到一个榜样,但有些人确实先行了一步。
最糟糕的情况莫过于被莫名地绊住脚。这是一种潜意识的阻碍,会蒙蔽你的双眼,让你甚至无法认识到某些事情其实并不重要。
这就是为什么人们建议为了改变而进行一些改变,比如每月去另一个地方度周末,尝试新的菜肴等等。这样可以让更大的变化变得更简单,也有可能是避免立即实施重大变化的一种技巧。
面对每一次改变,我都希望自己做好准备。我需要在做出决定之前完成一些事情,这其实是一个谎言。
准备永远不会充分。每一年我都会发现相比于当下拥有的一切,过去一年的依恋只是借口。然而,在接下来的一年里,我会培养更强烈的依恋,而且还有更多理由不做出改变。
我建议你直面这种谎言,现在即刻做你想做的事。
人生真的可以加速吗?
真的可以在5年的时间里做完原本需要花费20年的事?
我原本计划写,据我所知最年轻的Google开发者专家只有23岁(据我估计)。但后来我遇到了更夸张的例子。
在一次Flutter电话会议上,我遇到了Aila McPhail。她和妹妹Sumay在两年前建立了一所在线儿童学校,那时她俩分别是12岁和9岁。如今,她们拥有1500多名推特粉丝(而我只有41名),她们的学校已经为500多名学生提供了服务。姐妹俩居住在美国弗吉尼亚州北部Falls Church,一座人口不到1.5万的小镇。
Sumay还有4年的时间才能申请Google开发者专家的头衔,但她已经能够通过在线会议与Flutter团队的高级经理交流了。Aila需要再等7年才能申请Google开发者专家,但她能够像一个成年人一样表达自己的想法,只不过她的声音和视频暴漏了她的年龄。
我也是11岁开始接触编程,而后在18岁前开始虚度光阴。这两位女孩比我更优秀。你也可以!
▶Vision Pro 凭什么卖到 2.5 万元?外媒最新披露零部件芯片、显示屏等成本高达 44%!
▶英伟达将华为认定为「最大竞争对手」;哪吒汽车 CEO 回应年终奖推迟发放传闻;谷歌称微软必应搜索质量差 | 极客头条
▶Stable Diffusion 3 惊艳亮相,还与 Sora 是同架构,生成图像真假难辨!