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