今天正好是我开始专业编程的20周年。这些年来,我:
然而,我错过的还有很多,而且花费的时间也太长了。如果我能够更早地应用我所学到的态度、原则和优先事项,我可以更快地达到这些事业上的成就。如果你正在开始你的职业生涯,这篇文章将节约你15年的时间,想象一下在23岁而不是我现在的38岁,就能拥有所有这些成就(除了IEEE需要10年)。
第一部分我将简要介绍我的职业背景。第二部分我将展开介绍我认为最重要的每个建议。
一、我如何度过2003到2023年
2003年12月22日,我睡不着的时候,决定寻找可用的域名,我检索了我想到的域名最终选定了GetSoft.ru,然后就购买了它。
我要用它做什么呢?我这样问自己。我打算做一个软件市场。
那个时候我已经是有7年经验的业余开发人员了(从11岁开始),我一直在制作俄罗斯方块(Tetris)、炸弹人(Bomberman)、射击小游戏(Tanks)等小游戏的克隆版本,然后上传到我的网站上,再把链接挂到其他应用市场上。这样操作起来很不方便,但我知道如何做个更好的。
因为当时互联网上的URL大部分是.php结尾的,所以我学些了PHP。在2004年3月4日,我上线了GetSoft.ru。
我第一个商业网站的谷歌翻译版本
然后我写了一个脚本,用来解析竞争对手的网站,并发送了一些个性化的垃圾邮件,内容如下:你好,(姓名)。我们正在推出一个新的软件市场。请将你的程序(标题1、标题2、标题3……)添加到其中!
这种方法奏效了,我们获得了一些初始内容,这些内容吸引了搜索流量,进而吸引了更多供应商。
这个网站为我在下诺夫哥罗德市的Telma(现在的Harman Connected Services)获得了一个实习生职位。他们最出名的是为摩托罗拉手机制作所有固件(Firmware)。一年后我辞职了,因为我觉得自己更聪明,而且我通过销售广告赚得钱也更多。
这些收入让我变得懒惰。到2010年,市场发生了变化,收入下降,我错过了早期社交网络的黄金时代。我没有构建出一个社区,只靠搜索流量为生。
我无法想出拯救网站的计划,只能作为一名自由职业者开始为他人制作公司网站。某天,我萌生出一个想法:建立一个代理机构。
2011年,我放弃了编程。我遇到了一个朋友,他是一位杰出的老师。他帮助我开始有效地教授我的爱好。2013年之前,我一直在运营摄影和录像课程。然后,他激励我创业,为公寓装修做广告,并将线索出售给真正的装修商。我取得了一些有限的成功。然后他雇我教其他人如何获得订单并将其出售,我一直做到2014年年中。
然后他聘请我担任学习材料制作主管,负责他的教育业务的迭代,然后任命我为CTO和COO。我建立了他所需要的所有IT基础设施,并从头开始创建了一个学习管理系统。
在高峰期,我们有100多名教师、2500多名学生和100多名活跃的联盟营销合作伙伴。在此期间,收入增长了四倍,2015年利润为27.4万美元,是俄罗斯平均工资的600倍。
2016年,他正在重组管理层和薪酬,然后我辞职了,写了一本书,讲述了我对良好工作的了解以及如何升职(到目前为止只有俄语)。
当时我又开始做自由职业者了,因为我有一个永久的梦想,那就是经营自己的事业,这又一次浪费了我的时间。到那时,企业网站的市场萎缩了,简单的无代码服务占据了主导地位。我做了我自己的CRM,但很难销售,它不适合市场。由于我的自尊心,我不能接受一份固定的工作。
到2019年,我终于意识到,由于没有在大公司工作,我错过了很多。我搬到莫斯科,在俄罗斯领先的呼叫跟踪和营销分析平台Calltouch找到了一份工作。2020年秋天,我辞职了,以便重新做自己的事情。
对于我的初创公司,我需要尽可能便宜的移动和网络前端,并决定为此学习Flutter。我不愿意浪费我的积蓄,很快就从使用Flutter的朋友那里找到了一份副业。很快,我暂停了创业,为他工作。与此同时,我开始了这个博客。然后,战争使我们的客户在2022年2月倒闭。
我逃到了格鲁吉亚(一个欧洲国家),在外包软件供应商Akvelon找到了一份工作,这对我来说是一个转折点。他们正在为Apache制作著名的开源项目,通过他们,我结识了一些谷歌工程师。
Apache Beam Playground和Tour of Beam,这两个应用程序是我负责的前端开发,都捐赠给了Apache基金会,并由谷歌工程师管理。
我在Akvelon工作了一年,我在那里所做的一切以及我的写作足以让我获得谷歌开发者专家的称号。
那是移居发达国家的好时机。我厌倦了作为一个没有居留许可的永久游客住在某个地方,因此总是被视为失败者。我多次被拒签,警察只是辱骂我是俄罗斯人。
长期以来,美国一直是我的首选目标。我原本打算通过挣钱获得投资型绿卡,但现在我了解到了EB-1A杰出人才移民计划,发现它并不难达到要求。因此,我决定进一步提升自己的条件以符合该计划的要求。
于是,我加入了IEEE(电气电子工程师学会),并很快被提升为高级会员。
我申请担任CODiE奖的评委,并获得了批准。在获得了一定程度的认可后,事情真的开始迅速发展起来。以下是我事后回顾时感受到的自己的可信度随时间变化的感受:
这个图表显示了很多浪费的时间。如果我现在的思维方式不同,我会这样进行优化。
二、我的建议
1. 到最好的地方去,融入全球网络
我毕业于离家最近的大学,步行只需15分钟。这就是2002年俄罗斯人的心态:一个封闭的小世界。我们班只有一位同学去莫斯科学习,更不用说出国了。根本没有人去远方发展的先例,而且我也没有网络去了解其他途径。
Nizhny Novgorod State Technical University, main building, photo by Alexey Trefilov,license.
另一方面,我在谷歌的主管比我小4岁。他来自墨西哥,在韩国学习,在那里进入谷歌,然后搬到美国。想象一下,在高中毕业后的短短6年里,你自己就能完成这一切。
在这个年龄阶段,每个人都想要你。你可以加入任何一所大学,经过公平的准备,学习任何你想学习的东西。接下来的每一年都会让事情变得更难。
在我的一生中,我一直认为有一个更好的地方,我会在某个时候到达那里。在过去的20年里,那里发生了很多事情,没有我。
有更好的地方,那就搬过去!
我的一个小4岁的朋友在我刚结束家乡城市的四年级学业时被美国一所大学录取。这令人震惊,揭示了一个苦涩的事实:那个机会对我来说也一直存在。
与单一国家的联系也蕴藏着巨大的风险。如果你的国家发动战争或被攻击怎么办?我深有体会。第二公民身份是对此的一种防范。趁现在还便宜,赶快行动吧。我认为,第二公民身份的理念应该成为和教育一样的社会标准,这样人们甚至在20多岁时还未形成自我意识之前,就能获得这一身份。它本身也应该能够减少战争,因为两个国家的人民会反对这两个国家交战。
在身体迁移到其他国家之前,要先融入全球专业人士网络。我国的大多数人都生活在封闭的圈子里。尽管他们确实有英文的LinkedIn个人资料和帖子,但联系他们的仍然是只基于俄罗斯的HR。这是因为改变语言还不够。许多当地社区完全错过了国际协会和会议。你知道更成功的社区吗?加入它,为它写作和演讲。GDE和IEEE只是我发现的例子,有成千上万的全球社区可以为你带来好处。
问题在于,在俄罗斯,人们不相信协会。在苏联时期,所有的工会都是政府的代理,它们只负责分配一些小的福利,比如疗养院的住宿。如果你也有同样的想法,试着看得更远一些。
待在封闭的圈子里是有风险的。截至2023年底,俄罗斯政府正迫使私营企业解雇那些已搬迁并继续远程工作的人。我的许多朋友在2022年匆忙搬家,但没有建立起全球网络,因此被迫返回俄罗斯,并面临所有随之而来的个人风险。
你在美国或欧洲找到一份远程工作需要多少天?如果你不确定,可以加入一些会员组织。
2. 这是生意
我的第一个商业项目就是我之前提到过的软件市场,这是一个很有前景的开始,但后来因为我并没有将其视为生意,所以遇到了很多问题。
第一个问题是,我希望这个项目能够“公平”,所以我除了广告之外拒绝任何形式的盈利方式。我拒绝了任何付费推广,因为我认为学生程序员和成熟供应商在平台上必须平等。这导致我用于开发的资源不足,而竞争对手却在稳步发展。现在我建议积极抓住商业机会。这个世界上所有“免费”的东西都依赖于某人的繁荣和不断发展的业务。你免费提供的任何东西都必须是某个可靠商业过程的附带结果,这个商业过程要有足够远大的前景。否则,你以牺牲资源为代价的慈善行为会毁了你,也会伤害你周围的世界和你试图帮助的人。
第二个问题是资金诅咒。资金让我什么也做不了,所以我一事无成。我对网站做了一些符合我审美的小改进,但从未像最初几个月那样全力以赴。这是领工资的人的想法,而不是商人的想法。我不知道解决资金诅咒的办法。我能告诉你的最好的建议是,无论你依靠什么,它都会崩溃。想想到那时你会剩下什么。
要盈利。
大多数程序员面临的最大问题是他们的想法不是基于经济考虑的。
编程是一项极具创造性的活动,它需要完全的保障,而且可能因个人的不确定性和恐惧而中断。这就是为什么程序员通常都有固定工资,而市场营销、销售、配送、服务等职位的工资中往往有很大一部分是激励性薪酬。
程序员不仅不用担心产品是否畅销,甚至不用担心能否按时完成任务。这里的普遍想法是,程序员领取固定工资后变得懒惰的风险,小于团队因担心收入不足而放慢速度的风险。
是的,编程中的截止日期会带来压力,但这是想象出来的。在一个解雇员工并非易事的国家,我从未见过有人因未能按时完成任务而被解雇或罚款。即使是失败的程序员也经常被安排去做无聊的任务,他们只是没有加薪,很快就会为了双方利益而辞职。
程序员领取固定工资还有两个原因。第一,在大型项目中,很难制定出既公平又能快速反馈以影响你行为的利润函数。在IT行业,典型的自然利润反馈循环至少需要几个月的时间。
另一个原因是,教程序员了解软件公司的经济运作是有风险的,因为这是他们与那些辞职并创办竞争对手企业的员工的唯一阻碍。如果他们想这么做,而且性格外向,那么他们成功的几率就会非常高,超过所有支持人员,如市场营销、销售、客服等,因为他们拥有最稀有、最有价值的技能和专业知识。
虽然固定工资对你的心理健康有好处,但你不会对什么才是对企业最有利的事情产生直觉。管理层可能会向你口头解释各种优先事项,但这永远不如佣金有效。
这会导致很多问题。
程序员抱怨他们希望花更多时间重构代码,而不是开发新功能。或者他们看不出快速推出测试版的理由,而是希望再花几个月的时间把事情“做好”。或者他们向管理层施压,希望扩展最小可行产品(MVP)以加入他们喜欢开发的功能。或者他们推广他们个人偏好的次优技术。我多年来一直在做这些事情。
这样做的后果是:
如果你整合商业思维,你就会获得优势。这里没有什么教育能帮到你,但我知道两种方法可以做到这一点。
3. 获取利润
如果你的工资是利润的函数,你会彻底改变你的工作方式。
作为程序员,你可以为小型企业完成短期项目来实现这一点。例如,为某人制作一个聊天机器人作为额外的销售渠道,并同意在一定时间内分享收入。
任何非编程的佣金工作也都有帮助。销售人员通常对业务有很好的感觉,如果他们转行做程序员,这种感觉会保留下来。
自由职业似乎有助于获得对利润的感觉,因为你可以迅速获得对自己行为的反馈。你完成固定价格订单的速度越快,获得新订单的速度就越快。然而,这很少与业务需求有关,因为你学会了以简单的方式完成每项任务,而不是为业务战略性地优先处理任务。
聘请他人。
一旦你需要在初创公司上花费自己的钱,你的第三只眼就会睁开。在别人项目中只是中等有用的一个小功能,现在可能要花掉你500美元或5000美元,而你会冷酷无情地将其搁置,直到你进入市场并获得收入来资助它。
当你获得收入时,有数百个被搁置的事项,你需要实施那些能立即增加收入的事项。你最喜欢的功能可能并不在优先级列表的顶部。你必须学会应对这种情况,还要向员工解释为什么你不能让他们花费两个小时去做他们想做的事情。
以一种方式管理和调整项目,使其自给自足,并在这种约束下优化其增长,是宇宙中的最高技艺。
尽早学习它。这将为你节省几十年的生命。
4. 尽早涉足新技术,远离即将消亡的技术
人工智能。
几十年来,我听说过神经网络。18年前,我上了一门神经网络课,制作了一个简单的网络。那时还没有TensorFlow或其他类似的东西,我不得不手动为感知器创建一个C++类,以及该级别以上的所有内容。年终时,我把这些知识束之高阁:好吧,人们可以制作文本编辑器、计算器、电子邮件客户端,现在也可以制作一些神经网络了。对我来说,那只是“其中之一”,并不突出。
同时,众所周知,人工智能在未来某个时候将主导整个行业。然而,课程结束后,我并没有将这一知识和我的新技能联系起来,也没有付诸实践。
三年后,我又有了一次机会,当时有人邀请我从事一个从视频流中检测偷窃杂货的系统项目,那是在2008年!但我拒绝了,因为我想做自己的“生意”。
现在,在我目前的创业公司里,我需要人工智能来检测一段代码使用了哪些算法。这比行业的尖端技术要简单得多,但我很难理解,因此一直在拖延。
移动应用。
另一个机会是移动应用。17年前,我上了一门移动开发课。当时用的是Java Mobile Edition,没有特定于操作系统的编码,但令人惊讶的是,你可以在这个口袋里的小东西上运行程序。所以,我用JavaME制作了一个俄罗斯方块游戏,将其放到网上,然后就忘记了。
快速前进14年,现在一切都移动化了。我开始学习Flutter,没有任何Android和iOS开发的先验知识。大多数Flutter的招聘职位要求有原生移动开发经验,并且把Flutter视为在此基础之上的一个花哨玩具,所以我并不符合这些要求。
我的一个朋友是一家“拥有12年移动开发经验”的工作室的技术主管。他们的客户包括KFC、汉堡王、SAP和玛氏。我本可以创办这样一家工作室。但我没有。
相反,我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. 考虑下一步的淘汰
这条建议与即将消亡的技术类似,但它关乎更宏大的图景。不仅技术来来去去,就连我们使用这些技术所采取的“模式”也是如此。这个想法并非一目了然,所以我为此写了一篇单独的文章。请花时间阅读,然后再继续阅读这里的内容。
我相信,整个技术史并非创造的历史,而是淘汰的历史。
Flutter现在很受欢迎,也是我的主营业务。使用它的当前模式是,一家公司雇佣程序员或外包供应商,他们创建、发布和维护一个应用程序。这是值得投资的模式吗?
我们越来越多地听到关于FlutterFlow和AppSheet等低代码和无代码解决方案的信息。恰巧,我了解到我的两位朋友正在独立开发一个“Flutter中的WordPress”,旨在淘汰常规的小型网站,并更轻松地生成Flutter应用程序。
即使技术尚未消亡,你也可能正处于其使用的一个死胡同里。这并不意味着你会像我一样在网站机构的红海中溺水。当时有些人在网站上取得了巨大成功,未来几年也会有人通过手动编写Flutter应用程序取得巨大成功。
只是你可能不再是乘风破浪,而是挣扎着向前游。而且,你可能会浪费本可以用来准备迎接下一波浪潮的时间。
想想你的客户和用户所面临的负担。要知道,总有些东西会消除这些负担。最好是你的产品。
原文地址:https://medium.com/@alexey.inkin/advice-to-my-younger-self-and-you-after-20-years-in-programming-a3a2ccc7a942https://medium.com/@alexey.inkin/advice-to-my-younger-self-and-you-after-20-years-in-programming-a3a2ccc7a942
原文题目:Advice to my younger self and you after 20 years in programming
编辑:黄继彦
校对:林亦霖
译者简介
张一然,哥本哈根大学计算机系硕士毕业, 研究方向为图像补全。现从事自然语言处理工作。感兴趣方向为计算机视觉和自然语言处理,喜欢看书旅游。