從 Node.js 到支付你的自由職業者稅:採訪一位成功的開發者
已發表: 2022-03-11在 Toptal,我們一直在尋找最優秀的自由職業者。 但是,是什麼讓自由職業者真正偉大? Luis Martinho 是我們的頂級開發人員之一,深受客戶的喜愛,因此我們與他坐下來討論自由職業者、自由職業者 Node.js 和 HTML5 等技術以及納稅。
那麼,首先,您是如何進入自由職業的? 你做過全職工作嗎?
“我做過幾份全職工作:其中一些是相對公司的,但最近的是在初創環境中,特別是在企業 SaaS 領域,在雲中構建性感的管理軟件。 我們有一個非常有才華的團隊和一個非常雄心勃勃的願景。 經過四年的發展,我們在一個令人興奮的領域推出了一款令人興奮的產品,這很棒,但我並不很高興。 我需要改變生活方式。 剛開始的時候,我個人並不明白“創業”有多難。 不僅僅是時間,因為您在各種環境和項目中工作很長時間; 這是與創造新事物相關的壓力、責任和痛苦。 不全是鮮花和彩虹。 最後,我決定我不是聯合創始人的材料(至少,當時不是)。 但這段經歷讓我對初創公司創始人所面臨的壓力有了更深入的了解,我知道我因此成為了一名更好的自由軟件開發人員。
自由職業看起來越來越像我想要的生活:它提供了一個機會,可以找到有趣的客戶和項目,同時獲得高質量的工作獎勵。
我開始尋找固定工作:首先在我的家鄉,然後在該國其他地區,然後在歐洲其他地區。 我設法找到了一些有趣的項目、一些有趣的補償方案和一些有趣的地點; 但我相信我可以擁有一切。 所以我開始研究自由職業者。 隨著我不斷地尋找,自由職業者看起來越來越像我想要的生活:它提供了一個機會,可以找到有趣的客戶和項目,同時因高質量的工作而獲得獎勵。”
在您過渡到自由開發工作期間,遇到的最大挑戰是什麼?
“最初,我認為一個巨大的變化將是你期望從一份全職工作中獲得的收入穩定性,在那裡你有一定數量的錢,你總是在月底之前得到 - 無論發生什麼,你都會得到它。 我認為這是一個主要問題,因為我知道作為一名自由職業者意味著我不會總是有客戶。 但這並不是真正發生的事情——有點令人驚訝的是,在 Toptal,我一直設法擁有穩定的客戶流,而無需尋找他們。 所以,老實說,主要的挑戰真的是安排我的日程安排。 我真的沒有固定的工作時間。 我基本上是自己制定時間表,所以我必須比以前更有紀律。 我嘗試按或多或少的標準時間工作:我早上起床,開始工作,在其他人吃午飯的時間吃午飯,下午工作,然後吃晚飯。 我盡量按照正常的時間表工作,而不是熬夜,每天都在熬夜。 這門學科一開始是一個很大的挑戰。”
但大多數人認為自由時間是自由軟件工程的好處。 你對此有何看法?
我發現自律是值得的,因為如果我有一套慣例,我最終會更有效率。
“當然,這是一個好處。 從某種意義上說,如果您遇到任何問題,如果您必須幫助家人中的某個人,或者您有這個很好的機會進行某種休閒活動,那麼您可以追求它並享受這個機會,這很酷。 但另一方面,我發現自律是值得的,因為如果我有一套慣例,我最終會更有效率,因為這些慣例基本上指導我:我可以切入正題,完成更多工作在那段時間內。 擁有這種自由很好,但我認為必須負責任地使用它。”
你的客戶愛你。 你的秘訣是什麼?
“作為一名自由軟件開發人員,在尋找最簡單、最便宜的方式來完成某件事時稍微有點懶惰可能是一個很好的特徵; 對重複性工作感到非常惱火,因此不斷改進您的工具鏈。 例如,您在終端上花費了很多時間:您應該認真考慮創建快捷方式、別名,以及任何可以節省您時間和打字的東西。 最後,你做的很多任務都不是真正的火箭科學。 他們只是通過幾個循環來完成某件事。 如果你優化這些東西並擺脫重複性工作,你就有更多的時間來做真正的火箭科學。
如果你把重複的工作排除在外,你就有更多的時間來做真正的火箭科學。
您還必須讓其他人處理小時工資和計費,從客戶那裡獲得資金,甚至獲得新客戶,以便您可以專注於完成出色的工作。 這絕對重要。 當您是一名自由軟件開發人員時,您不僅要從事交付工作,而且還要從事營銷和銷售工作。 而你想要做的——以及你的客戶想要你做的——就是在交付上花費盡可能多的時間,而在營銷、銷售甚至財務上花費盡可能少的時間。 當您為老客戶工作時,您總是需要花時間尋找新的自由開發客戶,而這不是老客戶想要的,也不是您想要的。 你只想專注於做好你的工作。 所以讓別人處理賬單和尋找新客戶是你應該非常高興的事情,如果你找到了,你會很幸運。
另外,不要忘記:支付你的自由職業者稅。”
如何讓自己每天保持動力?
他們覺得您與他們的聯繫方式不僅僅是在計費時間發送。
“在我的動機中起重要作用的是客戶的質量。 如果可能的話,我會盡量挑剔一點。 也就是說,無論是解決難題還是在有趣的空間中工作,我都會嘗試接受能夠在技術挑戰方面激勵我的工作。 它就是從那開始的。 我總是與客戶一起工作,認為我正在朝著一個共同的目標努力:我試圖看到更大的圖景,並將自己視為團隊的一部分。 您永遠不會以完全情感的方式真正成為內部或現場軟件開發團隊的一員,尤其是當您不在辦公室時,但就整體項目和質量而言,您仍然可以感覺自己是團隊的一員工作。 而且我認為另一方的人(客戶和客戶團隊)會覺得——他們覺得你與他們的聯繫方式是你不僅僅是在發送可計費的開發時間,你真的擔心是否如果工作質量足夠好,他們就會成功。”
您在潛在的自由軟件或 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)的標準用戶。”
您最喜歡但很少有開發人員使用的工具是什麼?
“在我腦海中,來自 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 並實現了畫筆之類的東西:你會認為畫筆很簡單——如果你只是畫一條線,但在這種情況下你想模仿畫筆描邊,所以我必須使用數學公式來模擬畫筆如何接觸畫布並留下墨水模糊。”
您最近使用過的最喜歡的新技術?
“我聽說 Meteor 很有趣,因為它提供了一個完整的頭肩框架來開發單頁應用程序。 它處理後端和前端。 我沒有使用過它,但我很好奇並渴望嘗試一下。”