作者:Sihui Huang
譯者:承香墨影
我想每個開發者在學習成長的過程中,在面臨技術難題的時候,都有經歷過自我懷疑的過程,但是有時候這並不是你的錯,大家都經歷過如此的過程。我們作為一個開發者,在成長的過程中,總有一些小的勝利和小的沮喪,學著為自己喝彩吧。
以下任何一個,是不是聽起來都很熟悉?
你經常擔心自己不夠好。
看看你周圍的開發者們,他們似乎擁有一切。他們的程式碼比你的更簡潔,他們 Debug 的速度比你更快,他們只需要在編碼之前閱讀文件就可以很順利的繼續編碼。他們看起來很有信心,也對編碼富有熱情。
但是,你很擔心。你擔心你對框架和所使用的語言不夠了解,你擔心會引入新的錯誤;你擔心趕不上最熱門的技術;你擔心你沒有足夠的才能,來自然而言的得到這一切。你在想:“也許我不想成為一個開發者!”
如果任何這些自我懷疑的想法,你聽起來都很熟悉。那麼實際上,你並不孤單。Google 搜尋 “self-doubt developers”(自我懷疑的開發者),你會在不到一秒鐘內得到超過 200w 的結果。
我就是你
有一段時間,我也經歷了強烈的自我懷疑。這是在大學時期,我正在複習和準備面試的時候發生的。這些演算法問題每天都讓我感覺到徹底的被打敗了。我和現在的你一樣擔心自己不夠好。
最終,我通過實踐得到了回報,我收到了來自知名科技公司的多份 offer 。一路走來,我學到了兩個重要的課程,改變了對我程式設計的看法,消除了我自我懷疑的想法。
我現在和你分享,希望它們也能幫助到你。
第一課:學習程式設計和鍛鍊肌肉一樣
為了學習如何踢球,你需要去球場上踢球;為了鍛煉出更強壯的肌肉,你需要去健身房舉重;想要學習程式設計,你需要坐下來編寫程式碼。
舉重後,第二天你會感到痠痛和疲憊。而當遇到程式設計難題的時候,這會是非常燒腦的,你將會感到沮喪。
你不會因為疼痛而放棄鍛鍊,你知道這是鍛鍊過程的一部分。但是當你在程式設計的時候卡住的時候,你可能會懷疑自己,想知道自己是否足夠聰明。
因為:
- 你認為卡住是你的錯。
- 而其他人使它看起來毫不費力。
1、卡住是過程的一部分
也許沒有人告訴過你,但在程式設計期間卡住是絕對正常的,它甚至發生在高階開發者身上。程式設計的很大一部分是要弄清楚為什麼你預期發生的事情沒有發生。如果你覺得,孩子第一次站起來的時候能夠走路是荒謬的,為什麼你會希望你的程式碼的第一稿能夠完美執行而沒有任何錯誤?
我記得當我被卡住了很長時間的時候,我想把我的頭撞在牆上。我知道這很難過和令人沮喪(特別是在處理與開發環境有關的問題時)。但是就是掛在了這裡。深入研究這個問題、藉助 Google、問一些朋友、散步。你最終會解決它,並繼續前進。而且隨著你獲得更多的經驗,你會慢慢地陷入困境。
假如下一次你又被卡住了,別再浪費時間自我懷疑了。你應該提醒自己,這不是你的錯。這是正常的。這只是過程的一部分。
如果你是初學者,花費數天時間來建立開發環境是非常普遍的,這些時刻可能會粉碎你的靈魂。你嘗試按照文件一步一步向下執行,但隨機的錯誤不斷出現在每一個步驟中。文件看起來很簡單,但事實並非如此。這不是你的錯。閱讀該教程的人中有 99.99% 卡住了。其餘的 0.01% 是幸運的,恰好與編寫文件的人具有完全相同的作業系統環境配置。
不幸的是,學習程式設計的第一步也是最令人沮喪和心靈破碎的部分。當你看到你無法理解的錯誤時,只需將確切的錯誤日誌複製並 Google 搜尋即可。(把錯誤日誌加上引號或只搜尋錯誤日誌的前半部分可能會有幫助。)嘗試不同的解決方案,直到找到可用的解決方案,然後繼續下一步。
請原諒我再次強調:**在這個階段卡住不是你的錯。大家都這樣做。**我保證,一旦你經歷了這個階段,程式設計將會變得更加有趣。
2、我們把”天生聰明”和”顯得聰明”混為一談
在大學的最後一個學期,我的朋友們對我在《高階資料結構和演算法》課上的表現感到驚訝。當他們很辛苦的學習時,我看起來毫不費力。
他們不知道的是,在課前幾個月,為了準備面試,我花了數小時練習編碼挑戰,涵蓋了與課程完全相同的課題:動態程式設計,深度優先演算法,廣度優先演算法等。它似乎毫不費力,只是因為我已經經歷過這些努力的過程。
當我第一次自學這些概念的時候,我會花上好幾個小時的時間來盯著一個問題,而且無法弄清楚它。當我放棄並在網上查詢解決方案時,我努力去理解它們。當我終於做到的時候,我感到更加沮喪,因為我懷疑自己是否足夠聰明,為什麼自己想不出這樣的解決方案。
有時甚至當我再次遇到同樣的問題時,我可能仍然不知道如何解決它。我會這麼強調,我不得不採取長時間的熱水淋浴來讓自己冷靜下來。
所以,當我說我知道自己懷疑自己,擔心自己做不到的時候,相信我。我以前也是這樣。我可以向你保證,你並不孤單,許多偉大的開發者也經歷過同樣的事情。
下一次當你身邊的人表現出眾的時候,而你正在辛苦掙扎,不要以為是你沒有足夠的才能。很可能,他們只是比你更早地接觸到這個主題或類似的主題。他們的大腦已經建立了“肌肉”來處理這種型別的問題。在經歷了目前的掙扎之後,你也會顯得聰明而輕鬆。
這和我們的常識一樣。
你通過鍛鍊來鍛鍊肌肉。你投入的努力越多,訓練的時間越長,你的能力就越強。學習程式設計有完全相同的過程。你花費的時間越多,你就會越熟練。種瓜得瓜,種豆得豆。
第二課:關注你的技術能力,而不是自己
不要想著你是一個多麼優秀或者多麼差勁的程式設計師。如果你處於隊伍的最後 5%,你想變得更好。如果你有幸進入前 5%,你仍然想變得更好。無論你有多好或多壞,總有人在你面前,同時在你背後也有人。那麼為什麼浪費時間思考這個問題呢?
相反,專注於你的技術能力。別再問你有多好、問你的程式碼有多好。你應該思考,如何使它更好,更快,更可讀?長期關注那些讓你欽佩的工程師,閱讀他們的程式碼,看看和你的有什麼不同?他們最近又正在研究什麼新玩意兒?
如果您已經是一名軟體工程師,則有人會付錢給您編寫程式碼。你應該停下來反思一下,因為這意味著很多:有人要麼相信你的編碼技巧,要麼看到你的潛力。要做到這一點,唯一的辦法就是把注意力集中在你的技術能力上,不斷地改進。
記錄你的小勝利!
你最後一次被卡住了,不確定自己是否能解決問題。而最終,你是如何解決的?
開啟一個新的 Google 文件並將它記錄下來。
下一次你懷疑自己的時候,看看這個文件,並提醒你自己:如果你能解決上次的問題,你也將解決這個問題。
使用該文件來記錄你克服的挑戰性問題的過程以及你從中學到的東西,總是慶祝這些小勝利,用這些小勝利來激勵自己!
如果你看完這篇文字,留下評論,分享上次被卡住的時刻,提醒那些正在掙扎的人,他們並不孤單。
原文地址:
https://medium.freecodecamp.org/to-self-doubting-developers-are-you-good-enough-13de8ebdf53a
今天在承香墨影公眾號的後臺,回覆『成長』。我會送你一些我整理的學習資料,包含:Android反編譯、演算法、設計模式、虛擬機器、Linux、Kotlin、Python、爬蟲、Web專案原始碼。
推薦閱讀: