如果你正在閱讀這篇文章,你可能剛剛開始做第一份工作——祝賀你,獲得第一份工作是你在技術路上遇到的最為困難的事情之一,你一定為此付出了很多努力。
或許你還沒有工作,但是你想了解可以從第一份工作中期待些什麼。
不管怎麼樣,在這篇文章中我將闡述一些常見的擔憂和問題,比如在工作中應該期待什麼,以及怎樣在事業上成為一名成功的開發者。
以下是我們將要講的內容:
在工作中可以期待什麼這一天終於到來了,你第一次作為一名新的開發者走進辦公室(或者參加早會)。即使你很緊張,也要記住和適應你的第一天。這是非常激動人心的時刻!
你工作的第一天很可能做流程上的事情:配置電腦,適應和培訓,和一些人力資源方面的事情(如銀行信息,保險等)。
讓新開發者在第一天就向產品中 push 一個小實踐是一種常見的做法。通常是一些小的任務,比如在公司網頁上添加自己的名字和照片,或者修復網頁中的一個錯字。這會測試你的計算機環境是否配備良好,給你一點成就感,以及讓你參與到開發團隊中。
你的公司希望你成功對於一名新入職的開發者,錄用你的公司知道你目前的知識和技能的局限,他們知道為了你的成長,他們需要投入大量的時間去教你和訓練你。
記住,公司想要你成長!他們站在你這邊,會投入大量的精力來發現、面試、錄用你。對公司來講,無論是在時間和金錢上都是一個昂貴的過程。他們不會把你晾到一邊——那將是他們投資你的一種糟糕的方式。有些技能你一開始就能掌握,但是有些技能在專業環境之外獲取是非常困難的(也不是不可能)。
既然這是你的第一份工作,可能你從來沒有與使用原始碼管理工具或者維護生產應用程式的大團隊合作過——沒有關係!這些技能在生產環境中是很容易學到的。
你的第一天/周當你的電腦設置好了,你可以使用所有你所需要的工具。你的第一個任務可能是改進一個小功能或者處理一個小 bug,這些只是讓你在不同的項目中試水。
除了純粹的技術知識之外,每個公司都有你需要掌握的領域知識或者「業務邏輯」(公司做什麼產品或服務,以及是如何做的)。
如果公司有多種產品,他們可能會在每個原始碼中給你一些小任務讓你去探索這些產品。可能他們會在團隊中給你分配一個帶你或者至少在前幾周為你解答問題的導師。
在最初的幾周裡,你只有一個目標:學習,學習,再學習。
學習你正在使用的技術,學習公司是如何運轉的,學習怎樣和你團隊的成員協作。在這一階段你的工作產出不重要,重要的是你的成長速度。
接觸生產原始碼當你開始接觸公司的代碼庫,你可能會覺得非常困難。這是非常正常的——寫代碼比讀代碼容易得多。
生產代碼跟你學過的教程或者練手的項目有很大不同。
首先,生產代碼可能存在了數年,期間由不同的人進行開發,他們有自己的編程風格並且犯過不同的錯誤。
此外,軟體依賴或者插件可能比你以前遇到的更多,你可能需要處理一些教程文檔中沒有講過的不常發生的事例(比如錯誤處理)——這是一個真正的應用程式。
一開始你可能會不知所措,但是閱讀別人的代碼是你必須提升的技能,你會在你的整個職業生涯中用到它(在文章末尾,我會給你一些關於此技能的建議和幫助)。
最後,不要害怕尋求幫助!你的同事會支持你,在過去的某一個時候,他們可能也在問相同的問題。
對於新開發者的期待首先,公司並不會指望你能夠迅速適應,去開發新功能。他們知道你需要時間去學習你還沒有掌握好的技術,比如熟悉原始碼,如何有效進行團隊合作。
你的領導可能會與你碰面來制定 30/60/80 天計劃,如果他們不這樣做,你可以主動詢問!任何領導都會欣賞你擁有自己的工作規劃。
在起初 30 天,你可能通過寫一個小需求或者處理一些小 bug 來熟悉公司產品和代碼。60 天的時候,你可能會做稍微大一點的功能以及 bug 修復。到 90 天的時候,範圍會擴大一點,但是他們還是不會期望你獨自負責大的功能。
公司希望你能不斷學習和吸收身邊的信息。你不可能什麼都知道,也不可能在 90 天后都知道,沒關係,一天天慢慢來。
新開發者的思維模式進入一家新的公司,有很多東西你沒法控制,但是有一個你可以控制的非常重要的事情,那就是你的心態。 你每天所想、實踐以及你如何內化發生在你身邊的事情將決定你的成功。
有時候你會困惑,有時候你會感到不知所措,有時候你甚至會懷疑你是否能做到(我確實這麼想過)。你如何消化這些想法很重要。記住,這些問題不僅只有你會遇到,所有新開發者都要面對。保持冷靜,你會成功的。當你遇到令你困惑或沮喪的事情時,端正你的想法:這個障礙是一個學習的機會。
這是一個了解新事物和成長的機會。在這個過程中你可能會很痛苦,但不久之後,你會成為一名好的開發者。這就是在面對新事物時需要面對的現實。
不要說:
「我今天被困住了 10 次」
而應該嘗試說:
「今天我有 10 次學習的機會」
這是非常有力的轉變,你的同事會看到,你的工作表現也會證明。
保持頭腦清醒,不要讓失敗的感覺悄悄潛入,這不僅能幫助你在這種情況下表現得更好,而且還能在你擺脫這種情況時增加你的知識和技能。深呼吸,放輕鬆,尋求幫助並堅持下去。
在一天結束的時候,輕鬆地聳聳肩。在當天你離開辦公室或者關閉電腦的時候,把它忘了。開始全新的第二天,準備迎接新一天的挑戰。
還有,記住慶祝一路走來的小的成功!隨著時間的推移,這些小成功會積累成為巨大的成功之山。
還有一件重要的事情你要記住:給你自己犯錯誤的空間。你會搞亂代碼,你會做一些糟糕的資料庫更新(我就犯過這種錯)——這些都是可以恢復的,不是世界末日,也不是你工作的結束。任何有經驗的開發人員都會犯這些錯誤,這只是過程的一部分。
新開發者最好的技能你可能沒有意識到,作為一名新的開發人員,最好的技能是學習如何去學習。
你已經學會了如何處理困難、複雜、模糊的問題,並將它分成塊,一步一步地解決。
無論你學 JavaScript、React、Ruby 或者其他任何東西,你學到最好的事情是如何自學。多利用你掌握的這個技能並每天都實踐它。
擁抱自己的成長對於處於職業生涯任何階段的開發人員來說,這可能是最重要的:你的事業是你自己的,你必須擁抱它,你必須管理自己的成長。
有時你的公司、職位或老闆會幫助促進你成長,但最終還是取決於你。大多數公司都有某種固定的審查程序,可能是季度或年度。如果他們有,那很好。如果沒有,管理自己的成長!定期徵求上司的意見,並按他們說的去做。如果有人提到了你從未聽說過的東西,問問他們,或者自己去研究一下。
「微小收益的力量」我最喜歡的書之一—— James Clear 的《Atomic Habits》,有一個非常棒的圖表標題叫 「微小收益的力量」。這是一個簡單的圖表,它顯示了每天 1% 的提高和 1% 的下降之間的差異。
如果你每天都有 1% 的提高,一年之後,你會比年初好 38 倍!這就是「微小收益」的力量,對於成為一名偉大的軟體開發人員來說也是如此。
每天你都有機會學習新東西,不管它有多小,也許是一個你不知道的數組上的新函數,一種不同的 CSS 結構化方法,一個新的文本編輯器快捷方式,或者是一些全新的東西,比如學習 SQL 以及如何在資料庫級別存儲數據。
無論如何,每天提高 1%(大多數日子你會做得更多),你職業生涯最初幾年的成長將是驚人的。
每天一頁我曾經在一檔程式設計師播客上聽說過一個故事,講的是一位為 Ruby 維護pg gem 的人。pg gem 是 Ruby 和 Postgresql 之間的一個接口。這是一個相當嚴肅的事情,因為大多數 Ruby 開發人員每天都在使用它。
他如何成為 gem 的維護者的故事非常有趣。他說剛開始的時候,他會打開 Postgresql 文檔並閱讀一頁——每天只讀一頁。
隨著時間的推移,他對 Postgresql 有了廣泛的了解,並開始為 pg gem 做貢獻。過了一段時間,他成為了 gem 的維護者。
這是積累點滴的完美例子——每天一頁就夠了。我們每個人都可以做到這一點,我鼓勵你將同樣的理念應用到你正在使用的任何語言或系統中。
實踐出真知你以前可能聽說過這個短語:實踐出真知。
我的鋼琴老師使用了不同的短語:正確的實踐出真知。
我認為他說得對,我可能會用錯誤的方式練習鋼琴,如:用糟糕的技術,馬虎,沒有穩定的節奏,結果就是馬虎的鋼琴演奏。
重要的不只是實踐,而是你如何實踐。我可以一遍又一遍地練習一首歌曲的第一小節,並把它寫得很完美。但如果我只關注第一小節,我就永遠學不會這首歌。我可能可以以世界級鋼琴家的水平演奏這首歌的第一小節,但我想彈鋼琴,所以我不得不學習整首歌。
這對於開發來說是一個完美的對比。你實踐開發的方式(你的日常習慣、開發方法以及路線)決定了你將成為什麼樣的開發人員。
一開始你會犯很多錯誤(每個人都會犯),但是如果你對你的工作上心,你就會發現你有可以改進的地方。這些都是完美的練習時刻,是學習新東西或以更好的方式做某事的機會。
當你從現在開始回顧十年的職業生涯時,你想要的應該是十年的成長、實踐和學習,而不是一年的成長、實踐和學習,經歷十次。
所以去問那些愚蠢的問題,問那些可能顯而易見的問題。當別人提到一些你不知道的事情時,大膽地問「那是什麼」,我希望他們能以一種和藹可親的方式回應。無論如何,你都要做好學習的準備。
這一切都會見證你的成長。
T 字型的人在你的開發生涯開始時,你可以從了解許多方向中獲益,因此你希望努力學習多個學科的知識。如果你立志成為一名全棧工程師,你可能需要掌握 HTML、CSS、JS、一種你想使用的後端語言、SQL、Git 等。在每一個方向中都有比較容易獲取的知識,你可以慢慢進行吸收。
隨著時間的推移,你會發現你最喜歡哪種開發,可能是前端、後端、資料庫、運維、設計或者這些和其他的一些組合。
隨著你事業的發展,你會開始成為 T 字型人才。T 字型人才,就像字母 「T」,指對很多事物有廣泛而淺顯的了解,而在一些領域有豐富的知識和經驗。
這種深刻的認識需要一段時間來建立,每一步都要比前一步付出更多的努力,這正是你在精通一門學科時的事實。在開始的時候,在廣泛的學科領域裡,掌握所有那些初學者容易掌握的東西。
擁有 T 字型的能力將幫助你成為一個更好的開發者了解資料庫模式的前端開發人員,或者了解如何在前端將資料庫表用作模型的後端開發人員,將比那些只局限於自己領域的人更有見識,也更能成為好的團隊成員。
在開始階段,對開發的各個方面的小嘗試也有助於找到吸引你的東西,並給你一個軟體世界中更大的藍圖。
追隨你的興趣,保持求知慾!
給新開發者的一個建議現在我們已經介紹了你的期望以及如何考慮它們,這裡有一些實用的技巧可以幫助你成為一名優秀的開發人員,一名團隊成員喜歡與之共事的開發人員。
#1 溝通是非常非常重要的第一天上班時,你可能沒有令人驚訝的開發知識和技能,但你可以有令人驚訝的溝通技巧。
作為一名新開發人員,你將需要大量的幫助和指導。沒關係,這裡有一個如何有效地尋求幫助的小竅門。
被困住是令人沮喪的(對我來說就是這樣)。這種挫敗感很容易將你壓倒,你可以向旁邊的同事請教(或者通過電子郵件和聊天應用)。
類似:
「我困住了」
「顯示錯誤」
「頁面不能加載」
現在退一步,從你請求幫助的那個人的角度來看待這個問題。像「頁面無法加載」這樣的信息對這個人毫無幫助。沒有上下文,沒有信息可以讓他們繼續。事實上,他們還得向你獲取更多的信息。這樣做效率非常低,而且會讓試圖幫助你的人非常沮喪。
尋求幫助的一個更好的方式是像填詞遊戲一樣思考(如果你還記得 freeCodeCamp 課程中有一道這樣的題目的話):
我正在做 _____,但是在我嘗試_____的時候,卻發生了____。
我試著_____,_____和_____,我發現_____ 和 _____。
舉個例子:
我正在處理用戶密碼重置錯誤的 bug,但是當我嘗試生成密碼重置連結時,用戶的令牌已經為空。
我看過令牌是在哪設的,我發現令牌在資料庫中,但是這個令牌在文件 Y 的 X 行上丟失了。
如果你給別人發了上面的信息,他們可以理解:
對於你尋求幫助的人來說,這是一個豐富的信息。他們會非常感激你給了他們如此清晰的信息,並且你已經嘗試自己去解決它,這讓他們知道你尊重他們的時間,而不是你在等待他們簡單的施捨。
尋求幫助並沒有錯,但是如果有人只是幫你解決問題,他們實際上是在剝奪你學習和成長的機會。
這並不是說你必須解決這十個問題,然後你就再也不會遇到問題了。作為一名開發人員,你每天都會遇到問題。所以最好的結果是,他們給你足夠的幫助讓你擺脫困境,但允許你自己獨自解決問題。
#2 用好谷歌就像在武術中施展技能一樣,作為一名開發人員,隨著時間的推移,你將施展谷歌的才能,這就是用谷歌搜索答案的藝術。這是每個有經驗的開發人員都擁有的一項真正的技能,它是隨著時間的推移而開發出來的。
有時,你只需要直接鍵入你所遇到的問題(這對報錯非常有效):
有時粘貼整個錯誤消息可以得到結果有時,搜索準確的錯誤信息將產生正確的結果,正如上面所做的。你遇到了一個技術問題,其他人也遇到過完全相同的問題。
但有時你需要對搜索信息進行一些編輯,以刪除特定項目的信息:
如上圖,谷歌從未在 gotta_catchem_all.rb 文件中見過 whos_that_pokemon_its_pikachu() 這個函數(但是我仍然還在搜索它)。刪除特定項目的信息並添加通用信息將會返回更好的結果。
基本的通用錯誤#3 嘗試使用計時器
作為一名新開發人員,你會遇到很多困難。可能會出現以前你從未見過的錯誤消息,如何處理這些情況將決定你作為開發人員的成長速度。
儘管這可能是非常令人沮喪的時刻,這些是你學習和成長的時刻。你不能通過一遍又一遍地做同樣的工作來學習,只有在經歷坎坷的過程中才能成長。
當你遇到其中一個問題時,請花些時間嘗試並自己解決它。有些公司會把這句話作為培訓的一部分來告訴你,比如「30 分鐘後再尋求幫助」。在其他一些公司,雖然沒有這麼明確,但這個提示依然適用:盡你所能。如果你還是卡住了,那就尋求幫助。
這不僅讓你有機會弄清楚,而且也是尊重在專注於自己的工作的團隊成員的時間。因為一些你本可以很快意識到的事情而去打斷別人,這將對團隊來說是一種淨損失。
所以好好嘗試一下,然後再尋求幫助!
下面是成為一名優秀的新開發人員的秘訣:總是重置計時器。
假設你被困住了,嘗試了 30 分鐘,然後再去尋求幫助。下次你被困住的時候,去尋求幫助之前,再試 30 分鐘。
顯而易見,當你覺得你遇到了一個又一個問題的時候,你會感到沮喪,你會想要在遇到下一個問題之前尋求幫助,這是很自然的。
深呼吸,去快走一會兒,用全新的視角來看待每一個問題。
(當然,說起來容易做起來難!)
#4 記住放鬆和休息記住,當事情開始讓你感到難以承受時,要休息一下。
去散個步,接杯水,如果可以的話,放一個晚上。有時候僅僅睡一覺或者動一動就可以幫助你重新調整自己。
請記住,每個開發人員都曾經歷過你這種情形,你會度過難關的。
在某種程度上來講,開發總是令人沮喪,你永遠不會停止犯錯或者不再遇到問題。但隨著時間的推移,你會越來越擅長處理這些問題,你解決這些問題的信心也會增強,所以這些問題對你的困擾會越來越少。
#5 小黃鴨調試法你是否曾向某人發郵件或簡訊描述你遇到的一個問題,然後在你點擊發送之前你已經知道了解決方法?在軟體世界裡有這樣一個短語:小黃鴨調試法。
這個名字是引用了《實用程式設計師》一書中的一個故事。在這個故事中,一個程式設計師帶著一隻橡皮鴨,通過強迫自己一行一行地向橡皮鴨解釋代碼來調試他的代碼。
通過寫電子郵件或與另一個人交談,你被迫整理整個上下文邏輯,以便讓另一個人理解發生了什麼。
用這種方式解釋這個問題, 你自己必須有邏輯地思考和整理。僅僅是試著為別人準備上下文的行為就會讓你從不同的角度來思考問題,很多時候你自己就會找到解決方案。
回到嘗試使用計時器,在你尋求幫助之前,試著用你沒有發送的郵件解釋問題的概要。你很有可能在不打擾別人的情況下對這個問題有了新的見解,最糟糕的情況是,你有一封很好的郵件或聊天信息要發送給他們(我也見過很多人把真正的橡皮鴨放在桌子上!)
#6 記筆記這個建議可能看起來很明顯!
當你第一次加入一家公司的時候,你會接觸到很多不同的東西:原始碼、產品、人、業務邏輯,不可能把這些全部記住,所以把這些東西寫下來。
當我開始我的第一份工作時,我的老闆告訴我他可以向我解釋任何事情,但是他不想解釋兩次。那時候我明白,但 8 年後的今天我真才真正明白,這是在尊重你的團隊成員以及他們的時間。
如果他跟我解釋了某件事情,我卻忘了,我們就浪費了彼此的時間,所以只能再問他一遍。在他的建議下,我甚至開始在我的顯示器上貼物理便利貼,記下我想經常遇到和需要記住的事情,就像:
#7 每天與冒名頂替綜合症作鬥爭如果你不知道什麼是冒名頂替綜合症,你的腦海裡這樣想:
我不屬於這裡,我是一個冒名頂替者。除了我,其他人都知道這一點。
這是一種你每天都要與之抗爭的心態。作為一名開發人員,會有令人沮喪的時候,但是你已經面對過挫折並努力克服了它。每個開發人員都有這種感覺,而且這種感覺也會過去的。
實際上,冒名頂替綜合症看起來更像這樣:
冒名頂替綜合症「高級」和「初級」開發者之間的一個關鍵區別當然,高級開發人員比新開發人員有更多的知識和經驗,但這並不是他們的根本區別。
一個高級開發人員有一個解決問題體系。
當我第一次開發時,我想我最終會停止犯錯誤——停止遇到報錯。
相反,我每天仍然會犯很多錯誤:錯誤的語法,錯誤的文件,錯誤的函數。
我沒有停止犯錯誤——我只是很快就修復了。
這是一種隨著時間發展而來的技能,需要有意識地解決問題。
這裡有一些關於如何構建這個體系的提示。
5個調試技巧#1 不要盲目敲代碼我看到許多新開發人員遇到問題時會開始瘋狂的開始改代碼(我是新開發者的時候也這麼做過)。他們沒有系統的代碼評估過程,只是對代碼做大量的修改,看看這樣是否能解決問題。
這是一個很壞的習慣,這樣做只會犯更多的錯誤。你應該做的是:
#2 讀錯誤信息這個建議似乎很明顯,但實際上是在讀取信息。錯誤是什麼?發生這個錯誤的文件是什麼?錯誤產生在哪一行?這些都是至關重要的信息。
如果你不願意快速更改代碼的話,你可以直接跳到錯誤產生的地方。
這是有經驗的開發人員的方式:讀取消息然後直接找到問題所在。
這樣做會為你節省大量的時間和精力。
#3 不要把時間浪費在不可能的事情上(或者是至少不可能的事情)不要把時間浪費在不可能的事情上我看到的新開發人員會經常做這樣一件事:他們在代碼中遇到錯誤,然後在代碼中發現了一些他們認為是問題的東西,然後不相信這有問題。舉個例子:
"我發現問題出現在第 14 行,它會檢查 is_admin" 變量是否為真,但是它不是真,然而用戶確實是管理員!
他們是這麼思考這個問題,「這怎麼可以!」 ,而不是 「為什麼會這樣?」
有時候你會遇到核心語言或框架的 bug,但在 99.9% 的情況下, 你可能是做錯了什麼,或者情況並不像看上去的那樣。
有些事並不像看上去的那樣,被不可能的事情嚇到只是在浪費時間。開始解決問題吧,不要在眼前不可能展開的事情上花時間,質疑你對情況的假設。
#4 「當有疑問時,列印更多的信息」我不知道最初是誰說的,但這是最有效的調試技術之一。當你不知道發生了什麼情況時,開始在你認為發生問題的地方列印程序的相應信息。
user 變量中有什麼?HTTP 請求的響應是什麼?在這種情況下,我們使用了 if 或 else 分支嗎?我們調用過這個函數嗎?是否在此頁面?
我見過無數的開發人員嘗試調試和修復一個問題的時候(我自己也做過很多次),他們甚至沒有在正確的文件中進行調試。快速列印或者在「控制臺」中可以顯示你實際上正在查看實際運行的代碼。
#5 一次只做一件事每個新開發人員都會犯的一個常見錯誤是:一次做的事情太多了。
他們想要編寫 30 分鐘的代碼,單擊運行,然後查看結果。他們發現,花了 30 分鐘來編寫 bug 和錯誤,現在修復起來簡直是一場噩夢。
當我在應用程式中新建一個頁面時,我做的第一件事就是把<p>hi</p>標籤放到頁面上。我想確定我所有內部代碼設置是正確的,以至我可以在頁面上看到hi。我一次只做一件事。
一次只做一件事。在頁面上看到 「hi」 顯示。接下來獲取用戶輸入,接下來保存輸入。如果你一步一步來,你就知道問題發生在哪裡,該如何解決。
即使在從事開發工作 8 年後,我仍然是一步一步來。我知道我將會犯很多錯誤,而且我想立即知道這些錯誤在何時何處發生的。
總結讀完這篇文章,你已經了解了很多,但是你還有很多知識得學,很多技能需要提升,也有很多樂趣和有益的工作在等著你。
抬頭挺胸,記得要休息。每天提高 1%,一年之後你就會對結果感到驚訝。
感謝閱讀!
原文連結:https://www.freecodecamp.org/news/how-to-become-an-astounding-junior-developer/
作者:John Mosesman
譯者:Miever1(GitHub ID)
校對者:Miya
非營利組織 freeCodeCamp.org 自 2014 年成立以來,以「幫助人們免費學習編程」為使命,創建了大量免費的編程教程,包括交互式課程、視頻課程、文章等。我們正在幫助全球數百萬人學習編程,希望讓世界上每個人都有機會獲得免費的優質的編程教育資源,成為開發者或者運用編程去解決問題。
點擊「閱讀原文」
在 freeCodeCamp 專欄閱讀更多