我常常在 Reddit 或 Quora 上看到有人問「怎麼知道本身是否能夠成爲一名成功的程序員」?。當有人在考慮職業轉型,或者對軟件開發感興趣,而且對軟件開發所涉及的內容感到好奇時,就不可避免地會問這樣的問題。
事實上,對於那些沒有正式接受過計算機培訓的人來講,這個問題會成爲他們腦子裏的一個主要障礙。他們會很天然地認爲,若是本身不擅長編程,是否能夠往這方面想?就好像你想成爲一名演員,但又懷疑本身是否擅長表演。
做爲一名教授全棧 Web 開發的教育工做者,我教過不少「初次進入這個領域的程序員」。好消息是,我不多會遇到沒法學會編程的學生。我認爲編程是人類的一項基本技能,就像閱讀、寫做和算術同樣。任何人均可以作到,它是人類能力的一部分,但確實須要進行有意識的學習。
在過去兩年中,我目擊了各類各樣的學生在這個過程當中的掙扎,以及他們在掙扎過程當中出現的一些問題。看一下下面的清單,若是你在本身身上看到了這些問題,說明你可能在編程方面糟透了,你能夠考慮去作一些更適合你的事情。可是,若是你仍然極力想成爲一名程序員,那就能夠輕鬆面對這些問題,並作出改變。
下面的清單將幫你瞭解你是否在編程方面糟透了,而且若是你想要作出改變,能夠作些什麼。程序員
對學習的東西感興趣是學好東西的基礎。若是你對技術沒有好奇心,就不具有足夠的能量堅持下去,由於要成爲一名成功的程序員,須要進行普遍而深刻的學習。面試
技術世界就像一片浩瀚的海洋,充斥着有趣的領域知識、相互鏈接的想法,以及能夠激發想象力的無窮可能性。它須要內在的動力去潛心研究並發現你所能發現的一切。編程
找到你的好奇心: 問問本身是否真的對編程感興趣。若是你的答案是「否」,那麼去尋找你感興趣的東西吧,請省下你的時間和精力。可是,若是你的答案是「是」,那麼就去尋找你以前沒有注意到的東西,潛入那個浩瀚的海洋中去吧。瀏覽器
毫無疑問,想要成爲一名成功的程序員,你必須對本身的學習能力充滿信心。這其實是一項基本的生活技能——若是你年滿 18 歲,沒有人有義務教你什麼。這就是現實。你要本身去探索對你來講最重要的東西。網絡
在軟件開發的世界裏,你須要的信息均可以在一個神奇的地方找到,這個地方之前被稱爲信息高速公路。而這個龐大的圖書館有一個巨大的入口:搜索引擎。你首先要學會在搜索引擎中輸入任何你想要的內容,並得到所需的信息,這是學習技術的第一道障礙。併發
除了成爲一個優秀的搜索引擎用戶以外,全部編程語言都提供了文檔和規範,它們很是明確地說明了編程語言的工做原理。這就像使用字典同樣——當你看到一個不認識的單詞時,就開始查字典。對於程序員來講,閱讀文檔是提高技能最快,最可靠的方法。編程語言
利用資源:你須要的全部答案都已經在那裏。當你遇到問題時,先使用搜索引擎,而後再向其餘人尋求答案或查看文檔。工具
編程的本質是解決問題。這就是爲何人類要發明計算機!當你開始寫代碼時,會遇到一堆問題。在你解決了一個問題以後,一般會有另外一個問題在等着你。解決問題的過程就是你取得進步的過程,但總有新的問題須要面對。學習
老是要面對一堆問題可能會讓人望而生畏和沮喪。若是你認爲事情作到「差很少」就好了,那麼你就不會有足夠的能量堅持下去,由於問題會持續出現,它們會一點一點消磨掉你僅有的熱情。測試
根據個人教學經驗,一般每一個班級都會有一到兩名學生,他們彷佛會比其餘學生遇到更多的問題——一般都是很隨意和模糊的問題。我提醒學生,他們遇到的問題越多,學習就會更深刻、更完全。若是他們可以經過解決這些問題理解到更多東西,他們就會變得更加自信,由於他們比普通學生面臨並解決了更多的問題。
耐心接受:你須要認識到,問題實際上就是挑戰。你面臨和克服的每個挑戰都會讓你更深入地理解和更好地面對新挑戰,並迅速解決舊挑戰。
在成功解決問題後缺少一種「良好的感受」,這與前面的太容易放棄實際上是有關係的。當修 bug 變成一種彷佛永無止境的任務時,從克服問題中得到的興奮感會離你而去。
在應對挑戰時,實際上須要多巴胺的刺激。這種體驗有點像視頻遊戲中的升級或玩填字或數獨遊戲。咱們都知道,堅持完成一個挑戰並最終取得勝利,這樣會得到一種良好的感受。但若是你失去了感覺這些感受的能力,或者從一開始就沒有真正關心過,那麼你將沒法體驗到編程帶來的快樂。若是你認爲編程是一種苦差事,只想儘量輕鬆地得到結果,那麼你就永遠不會成爲一名成功的程序員。
慶祝你的勝利:每當解決了一個困擾你已久的問題,不管是多麼小的問題,都要爲你的成就感到自豪。休息一下,給本身慶祝一下,讓成功的感受進入你的身體,並讓它激勵你面對下一個問題。
人類的能力是有限的。即便咱們的世界發展得愈來愈快,而計算機是促成這種發展的一個重要動力,但咱們也只能儘量快地跟上世界發展的腳步。咱們的大腦以必定的速度運轉,而且取決於咱們的過去、信念、情緒、健康……咱們學習和整合信息的速度是不同的。
技術世界就像浩瀚的海洋,你永遠沒法走到盡頭,沒法成爲一個再也不須要學習任何東西的高手。若是你讓本身不知所措,就會有一種想要「迎頭遇上」的壓力,你會以爲本身知道的永遠不夠多。若是你不能接受你所知道的,而後再多學一點,你會以爲本身沒有進步,而後就會放棄。
相反,你要享受本身的學習之旅。你掌握的每一點知識,或者得到的每一項新技能都應該讓你感到興奮。就像解決問題同樣,你須要讓本身感到自豪,由於你已經向前邁出了一步,即便是很小的一步。
認可你的進步:有不少東西須要學習,編程之旅永無止境。但這些知識是能夠累積的,因此要爲本身所知道的事情感到自豪,並相信你在學習中所付出的一切努力都將爲你的職業生涯打下定堅實的基礎。
編程是一項思考活動。做爲人類,咱們很是擅長思考,但現實狀況是,即便咱們很天然地花了一成天去作這件事,咱們在思考上仍然是懶惰的。若是你還不習慣,那麼要想在一段時間內集中精力解決一個問題是很困難的。
這種狀況的症狀包括茫然地盯着屏幕、感受腦殼上籠罩着烏雲、拖延、在瀏覽器標籤之間切來切去,以及拼命在 StackOverflow 上尋找「答案」。這些跡象代表你已經達到了思考極限。
在編程過程當中,你會感到疲倦,思考就像鍛鍊身體同樣會消耗你的能量。當你不習慣運用所需的精神能量時,會感到很難保持專一。但就像去健身房同樣,你作的越多,就越強大。
你的大腦就像一塊肌肉:你的大腦就像一塊肌肉——當你使用它時,它會在思考過程當中變得更好,更有效率。當你把各個部分放在一塊兒造成思惟概念時,尋找解決方案就會變得容易得多。
當你在學習新東西時,會以爲本身缺少知識和經驗,沒法擁有本身的觀點。太過主動或者作錯或說錯某些東西彷佛是有風險的。
咱們都會有一種固有的恐懼感。當對犯錯的恐懼抑制了探索欲和好奇心時,你就會扼殺掌握知識的能力,而這些知識須要從經驗和「失敗」中得到。當你須要依賴「權威」、受歡迎的博主、最佳實踐或「教科書」給出的答案時,你就沒有真正整合編程的實用知識。
你須要發展本身的觀點,瞭解哪些東西是有效的,哪些是無效的。你須要瞭解爲何你的解決方案是有效的,以及它的好處是什麼。你須要發展一種超越顯而易見的事物的微妙視角。你須要可以爲你的立場「爭辯」,若是你的見解變了,就能夠得到新的視角。
本身去思考:經過你的經驗和批判性思惟技能來發展本身的觀點。作出合理的猜想,代表立場,並願意隨着新信息的出現而作出改變。
有時候,我會在學生身上看到兩個極端。第一種學生擁有僵化而狹隘的思惟方式,他們拒絕幫助,儘管收到了反饋,也不會作出改變。他們只從一個角度看待事物,建議一般會被他們忽略。
第二個極端是思惟混亂。這種學生彷佛喜歡把事情複雜化,他們的代碼很亂,難以理解。他們過分思考問題,10 行代碼就能夠解決的問題他們要寫 100 行。
當這兩種思惟模式結合在一塊兒,就會造成一種嚴密的編程方式,就像使用蠻力同樣,會致使一層又一層的修復和「hack」。這個時候須要回顧解決方案,從新評估它,並放棄最初的方法,而後從新組織解決方案。
看不到其餘可能性或沒法收到其餘反饋會抑制成長和進步的能力。沒有條理性會減慢你的速度,阻止你看到本來顯而易見的模式。你的總體學習質量就會降低。
自我反思:你須要退後一步,從更廣的角度看待你是如何處理事情的。怎樣才能作得更好?能夠作些什麼讓你的生活變得更輕鬆?你錯過了哪些能夠幫助你得到提高的東西?
在開始學習技能或編程時,學生一般想知道他們所作的是否是「正確」的。但答案老是「取決於」。
計算機科學是一門評估權衡的科學。對於不一樣的狀況,採起哪條路經會更好?這一切都取決於具體的狀況和目標。若是你將編程看做是一個正確答案或錯誤答案的測試,那麼你就會忽視大局,創造力會與你擦肩而過。任何答案均可以是「正確」的,只要你能在特定狀況下證實它。
現實狀況是,編程更像是寫詩或短篇小說(大型程序就像是小說)。在你的代碼中能夠看到一種美感,有時只有你和其餘程序員能夠看得出來。你作出決策的緣由和你構思答案的方式比「正確的方式」或「錯誤的方式」更加劇要。擁有藝術家的頭腦會讓你擁有更多的選擇和可能性,而不是認爲只有一種答案。這就是編程之美,解決問題的方法有不少,思考不一樣的可能性會讓人產生一種感受,知道哪一個解決方案是最適合的。
變得有創意:要意識到解決問題的方法有不少,經過經驗和接觸,隨着時間的推移,在選擇解決方案時你會造成一種微妙的理解能力。從大局出發,想象不一樣的可能性,相信本身的直覺,你會找到更好的、更使人滿意的解決方案。
計算機是精密的機器。在進行計算機編程時,你須要以計算機指望的方式精確地提供必要的命令。若是你不這麼作,就什麼都不會發生。一個程序要麼能夠運行,要麼不能運行,不存在所謂的中間地帶。
因此,在編程時,你必須注意細節。每一個空格、括號或分號都很重要。出了一點問題都不行。當計算機返回錯誤消息時,你必須可以準確理解它告訴你的信息。而現實狀況是,若是你錯過這樣的細節,可能須要再花費數小時追查一個問題,而這個問題實際上多是由一個錯別字致使的。
細節決定成敗。對於編程來講,這絕對是至理名言。
注意細節:細節很重要,你必須接受這個事實。若是你能夠作到,那就從一開始就掃描代碼,找出任何不恰當的地方。你能夠藉助一些能夠幫助你快速識別問題的工具。
這是我觀察到的另外一個結果——注重商業思惟的學生每每更關注結果而不是過程。他們但願獲得一個「可運行的應用程序」,幫助他們將商業理念向前推動,他們但願「先進入市場」,認爲學習曲線是他們實現業務目標的障礙。
在反思那些難以幫助他們成長爲程序員的學生時,我發現了他們對這個過程缺少耐心,缺少耐心給他們理解技術帶來了阻礙。他們每每把技術視爲一種達成目的的手段,而不是一個能夠探索和享受的領域知識。
做爲這一觀點的延伸,我發現有些學生頗有商業頭腦,他們在學習中會遇到困難,但每每很快就有客戶與他們簽約,從事本身實際上並不擅長的工做!他們會爭先恐後地尋找資源或模板讓項目跑起來,或者把工做外包給其餘人。他們在編程方面確實很爛,但在讓人們付錢給他們編程方面卻頗有一套!
因此我想要補充的是,那些渴望創業的學生,在銷售、網絡和業務發展方面都很優秀,他們可能比其餘人更難以學會編程。他們天生但願創造經濟機會,並將人們與解決方案聯繫起來,這致使他們對編程中涉及的繁瑣細節感到不耐煩。
英文原文:
blog.usejournal.com/10-signs-yo…做者 | Jonathan Bluks譯者 | 薛命燈