从 Node.js 到支付你的自由职业者税:采访一位成功的开发者

已发表: 2022-03-11

在 Toptal,我们一直在寻找最优秀的自由职业者。 但是,是什么让自由职业者真正伟大? Luis Martinho 是我们的顶级开发人员之一,深受客户的喜爱,因此我们与他坐下来讨论自由职业者、自由职业者 Node.js 和 HTML5 等技术以及纳税。

那么,首先,您是如何进入自由职业的? 你做过全职工作吗?

“我做过几份全职工作:其中一些是相对公司的,但最近的是在初创环境中,特别是在企业 SaaS 领域,在云中构建性感的管理软件。 我们有一个非常有才华的团队和一个非常雄心勃勃的愿景。 经过四年的发展,我们在一个令人兴奋的领域推出了一款令人兴奋的产品,这很棒,但我并不很高兴。 我需要改变生活方式。 刚开始的时候,我个人并不明白“创业”有多难。 不仅仅是时间,因为您在各种环境和项目中工作很长时间; 这是与创造新事物相关的压力、责任和痛苦。 不全是鲜花和彩虹。 最后,我决定我不是联合创始人的材料(至少,当时不是)。 但这段经历让我对初创公司创始人所面临的压力有了更深入的了解,我知道我因此成为了一名更好的自由软件开发人员。

自由职业看起来越来越像我想要的生活:它提供了一个机会,可以找到有趣的客户和项目,同时获得高质量的工作奖励。

我开始寻找固定工作:首先在我的家乡,然后在该国其他地区,然后在欧洲其他地区。 我设法找到了一些有趣的项目、一些有趣的补偿方案和一些有趣的地点; 但我相信我可以拥有一切。 所以我开始研究自由职业者。 随着我不断地寻找,自由职业者看起来越来越像我想要的生活:它提供了一个机会,可以找到有趣的客户和项目,同时因高质量的工作而获得奖励。”

在您过渡到自由开发工作期间,遇到的最大挑战是什么?

“最初,我认为一个巨大的变化将是你期望从一份全职工作中获得的收入稳定性,在那里你有一定数量的钱,你总是在月底之前得到 - 无论发生什么,你都会得到它。 我认为这是一个主要问题,因为我知道作为一名自由职业者意味着我不会总是有客户。 但这并不是真正发生的事情——有点令人惊讶的是,在 Toptal,我一直设法拥有稳定的客户流,而无需寻找他们。 所以,老实说,主要的挑战真的是安排我的日程安排。 我真的没有固定的工作时间。 我基本上是自己制定时间表,所以我必须比以前更有纪律。 我尝试按或多或少的标准时间工作:我早上起床,开始工作,在其他人吃午饭的时间吃午饭,下午工作,然后吃晚饭。 我尽量按照正常的时间表工作,而不是熬夜,每天都在熬夜。 这门学科一开始是一个很大的挑战。”

但大多数人认为自由时间是自由软件工程的好处。 你对此有何看法?

我发现自律是值得的,因为如果我有一套惯例,我最终会更有效率。

“当然,这是一个好处。 从某种意义上说,如果您遇到任何问题,如果您必须帮助家人中的某个人,或者您有这个很好的机会进行某种休闲活动,那么您可以追求它并享受这个机会,这很酷。 但另一方面,我发现自律是值得的,因为如果我有一套惯例,我最终会更有效率,因为这些惯例基本上指导我:我可以切入正题,完成更多工作在那段时间内。 拥有这种自由很好,但我认为必须负责任地使用它。”

自由软件开发人员享受灵活的时间表和不同的薪酬结构带来的好处。

你的客户爱你。 你的秘诀是什么?

“作为一名自由软件开发人员,在寻找最简单、最便宜的方式来完成某件事时稍微有点懒惰可能是一个很好的特征; 对重复性工作感到非常恼火,因此不断改进​​您的工具链。 例如,您在终端上花费了很多时间:您应该认真考虑创建快捷方式、别名,以及任何可以节省您时间和打字的东西。 最后,你做的很多任务都不是真正的火箭科学。 他们只是通过几个循环来完成某件事。 如果你优化这些东西并摆脱重复性工作,你就有更多的时间来做真正的火箭科学。

如果你把重复的工作排除在外,你就有更多的时间来做真正的火箭科学。

您还必须让其他人处理小时工资和计费,从客户那里获得资金,甚至获得新客户,以便您可以专注于完成出色的工作。 这绝对重要。 当您是一名自由软件开发人员时,您不仅要从事交付工作,而且还要从事营销和销售工作。 而你想要做的——以及你的客户想要你做的——就是在交付上花费尽可能多的时间,而在营销、销售甚至财务上花费尽可能少的时间。 当您为老客户工作时,您总是需要花时间寻找新的自由开发客户,而这不是老客户想要的,也不是您想要的。 你只想专注于做好你的工作。 所以让别人处理账单和寻找新客户是你应该非常高兴的事情,如果你找到了,你会很幸运。

另外,不要忘记:支付你的自由职业者税。”

如何让自己每天保持动力?

他们觉得您与他们的联系方式不仅仅是在计费时间发送。

“在我的动机中起重要作用的是客户的质量。 如果可能的话,我会尽量挑剔一点。 也就是说,无论是解决难题还是在有趣的空间中工作,我都会尝试接受能够在技术挑战方面激励我的工作。 它就是从那开始的。 我总是与客户一起工作,认为我正在朝着一个共同的目标努力:我试图看到更大的图景,并将自己视为团队的一部分。 您永远不会以完全情感的方式真正成为内部或现场软件开发团队的一员,尤其是当您不在办公室时,但就整体项目和质量而言,您仍然可以感觉自己是团队的一员工作。 而且我认为另一方的人(客户和客户团队)会觉得——他们觉得你与他们的联系方式是你不仅仅是在发送可计费的开发时间,你真的担心是否如果工作质量足够好,他们就会成功。”

您在潜在的自由软件或 Web 开发客户端中寻找什么?

这位自由 Web 开发人员正在考虑他的许多客户选项。

“一般来说,我更喜欢最新的技术而不是旧的技术,也喜欢新兴的技术——我不一定会说新兴技术,因为其中一些东西是最新的,但我更愿意与制作单页应用程序并使用 Backbone.js 的人一起工作和带有 Express 或某些 MVC 框架的 Node.js,而不是使用 Java 企业版风格的人。

我是自由职业者,我更希望有一个有一些异步通信解决方案的客户端。 如果你在远程办公,进入一个使用简单邮件列表或在 Campfire 中有聊天室或使用 GitHub 作为协作工具的团队会更容易(最后一个非常好用)。 总而言之,如果客户没有以某种方式捕捉饮水机的谈话,您可能会丢失大量可能影响您工作的信息和喋喋不休。”

这是一个有趣的观点。 还有其他远程办公的技巧吗?

很难记住那个从未在大楼里的人。

“你必须找到一种方法来弥补不在办公室的影响。 我找到的解决方案是积极主动。 例如:分析提交日志。 当你在远程办公时,你应该留出一些时间来浏览一下并了解其他人在做什么。 如果您知道日常站立会议中发生的事情,并通过一些项目管理解决方案得到通知,那么尝试找到有关团队正在做什么的提示是一个很好的做法。 然后,您更容易集成。 这显然是你的额外努力——如果他们有一个非常好的沟通流程,你可能会不这样做,但这可能是一个很好的提示,它可以解决一些问题。 很难记住从未在大楼里的自由开发人员。”

成为一名自由软件开发人员从沟通开始。

自由职业者最重要的品质是什么?

“你必须成为能够在个人生活和工作之间保持流畅平衡的人。 作为一名自由职业者,反应灵敏很重要。 但是反应迟钝最终会对你的个人生活造成很大的影响。 您不必一直查看您的电子邮件——您只需收到通知,过滤它是否重要,然后您就可以回到与家人一起享受时光之类的东西。 你必须是一个好的上下文切换器。 上下文切换通常很昂贵,但您需要使其便宜且快速,这样您就可以通过对紧急情况非常敏感,同时享受到朋友和家人的陪伴,从而获得非常高标准的服务。

你必须是一个好的上下文切换器。 上下文切换通常很昂贵,但您需要使其便宜且快速。

对于通常的自由职业者发展安排,您必须知道如何保守地管理您的财务。 令人惊讶的是,Toptal 并没有真正发生这种情况,但在软件或网络开发人员的工资方面,通常很容易从盛宴变成饥荒,甚至按小时收费。 一个月,你赚了一大笔钱,突然间你没有客户,你也没有更多的工作了。 所以你必须自律:你需要知道平均工资,你需要花那个钱; 所有多余的东西都需要某种缓冲,以帮助您度过从事此类工作的不确定性。 对于 Toptal 来说,情况并非如此,因为客户流一直很稳定,但这仍然是一个很好的做法。”

作为一名自由职业者,您在整个职业生涯中承担了许多不同的软件开发项目。 那么,当您第一次获得对新代码库的访问权限时,您会怎么做? 可以说这是十亿行代码。

“我会尽量遵守自上而下的方法。 这意味着要了解代码库的整体结构。 这似乎很明显,但是当您开始尝试理解代码时,您将被驱使到您在特定时刻所做的工作以及您手头的特定任务。 这将使您的注意力从自上而下的方法转移,并将您置于试图向上的底部,将您正在查看的代码的特定部分组装起来。 在短期内,修复特定错误或添加特定功能可能会更好,但从中期来看,您会希望继续使用自上而下的方法。 然后,您将更好地了解系统以及各个部分的交互方式。”

作为一名自由开发者意味着对新的代码库采取自上而下的方法来有效地开始。

你做了很多前端和后端的工作。 你认为今天的自由开发者拥有这两种技能很重要吗?

“没有。 老实说:我认为你可以从专业化中获益良多,就像你对极少的技术集非常擅长; 但这只是个人选择。 我很好奇,所以我使用了很多不同的技术。 这就是为什么我最终同时做前端和后端的自由职业者工作。

技术会发生变化——今天的热门可能明天或至少在 6-12 个月内就会变得乏味。

话虽如此,我认为对于开发人员而言,在他或她的整个职业生涯中,尝试和学习尽可能多的技术和范例是至关重要的。 技术会发生变化——今天的热门事物可能明天或至少在 6 到 12 个月内会变得乏味——而自由软件开发人员的关键技能之一是快速掌握新技术或新项目。 为此,如果你有一个系统的方法来学习新东西,并且你每年至少学习一种新的语言、框架或范式来练习它,那真的很有帮助。”

您已经使用 Rails、Django 以及最近的 Node.js 完成了大量的自由工作。 三者之间的经历有何不同?

“呃哦,我们要在这里陷入一场宗教战争。 我会说 Node 与其他两个完全不同。 当您第一次接触 Node.js 示例时,您可能很难进入事件驱动范式。 对于一直在做 Rails 工作的人来说,这可能不是 100% 自然的事情。 另一方面,如果您正在使用 JavaScript,那么您可能正在为浏览器开发,因此您已经熟悉事件驱动范式。 就我个人而言,在我使用 Node 的自由职业者经验中,我一直在使用 MVC 框架,所以我还没有为 Node 开发核心技术; 我只是一个特定于客户端的专有框架(类似于 Express)的标准用户。”

您最喜欢但很少有开发人员使用的工具是什么?

Node.js 自由职业者的思维方式必须与 Rails 自由职业者不同。

“在我脑海中,来自 JetBrains 的 WebStorm。 这是一个非常值得一看的 JavaScript IDE。 在 Google I/O 上发布的新 Android 工作室由 JetBrains 软件提供支持,而不是 Eclipse 之类的。 我喜欢 Eclipse,但我在 WebStorm 上玩得很开心。 我仍在学习很多捷径——这也是一个优秀的自由软件开发人员应该具备的一种做法:更多地了解他们的工具。 我仍在了解有关我的 IDE 的更多信息。 WebStorm 有很多智能快捷方式,良好的标准布局,还有一些不错的 ZenCoding 属性,可以让您像以往一样快速地编写 HTML。 总而言之,这是一个很好的工具。”

如果一个自由客户希望你用 Rust 或 Go 或一些你从未使用过的新语言做一个项目,你会说什么?

不管你有多好,总会有设置时间,这对客户来说可能是昂贵的。

“我通常会尝试在客户工作之外第一次接触语言,而不是在客户的时间——无论你有多好,总会有准备时间,这对客户来说可能代价高昂。 话虽如此,如果客户告诉我,“好吧,即使你对此一无所知,我们也很舒服”,我会认为这是一个学习新东西的好机会。 另一方面,如果客户的日程安排要求很高,我会建议他们雇用其他人或使用我熟悉的语言,这样我就知道我可以从一开始就富有成效。”

您在自由职业时必须解决的最大技术挑战是什么?

“我想到了一个自由 HTML5 项目。 深入研究 HTML5 Canvas API 以执行一些高级图形编辑器功能,例如进行套索选择和自由形式选择,您可以裁剪图像的一部分但忽略其余部分,使用像素集进行计算,诸如此类。 这有点像 MS Paint 使用 HTML5 Canvas 并实现了画笔之类的东西:你会认为画笔很简单——如果你只是画一条线,但在这种情况下你想模仿画笔描边,所以我必须使用数学公式来模拟画笔如何接触画布并留下墨水模糊。”

HTML5 自由职业者可能会发现这项新技术需要一些时间来适应。

您最近使用过的最喜欢的新技术?

“我听说 Meteor 很有趣,因为它提供了一个完整的头肩框架来开发单页应用程序。 它处理后端和前端。 我没有使用过它,但我很好奇并渴望尝试一下。”