我經常在 Reddit 或 Quora 上看到有人問“怎么知道自己是否可以成為一名成功的程序員”酪刀?。當有人在考慮職業(yè)轉型钮孵,或者對軟件開發(fā)感興趣骂倘,并且對軟件開發(fā)所涉及的內容感到好奇時,就不可避免地會問這樣的問題巴席。
事實上历涝,對于那些沒有正式接受過計算機培訓的人來說,這個問題會成為他們腦子里的一個主要障礙漾唉。他們會很自然地認為荧库,如果自己不擅長編程,是否可以往這方面想赵刑?就好像你想成為一名演員分衫,但又懷疑自己是否擅長表演。
作為一名教授全棧 Web 開發(fā)的教育工作者般此,我教過很多“初次進入這個領域的程序員”蚪战。好消息是,我很少會遇到無法學會編程的學生铐懊。我認為編程是人類的一項基本技能邀桑,就像閱讀、寫作和算術一樣科乎。任何人都可以做到壁畸,它是人類能力的一部分,但確實需要進行有意識的學習茅茂。
在過去兩年中捏萍,我目睹了各種各樣的學生在這個過程中的掙扎,以及他們在掙扎過程中出現的一些問題玉吁≌彰郑看一下下面的清單,如果你在自己身上看到了這些問題进副,說明你可能在編程方面糟透了这揣,你可以考慮去做一些更適合你的事情。但是影斑,如果你仍然極力想成為一名程序員给赞,那就可以輕松面對這些問題,并做出改變矫户。
下面的清單將幫你了解你是否在編程方面糟透了,并且如果你想要做出改變柑蛇,可以做些什么耻台。
1缺乏好奇心
如果你對計算機和技術原理缺乏好奇心蹋砚,那就永遠不會成為一名成功的程序員坝咐。
對學習的東西感興趣是學好東西的基礎析恢。如果你對技術沒有好奇心氮昧,就不具備足夠的能量堅持下去袖肥,因為要成為一名成功的程序員振劳,需要進行廣泛而深入的學習寸癌。
技術世界就像一片浩瀚的海洋蒸苇,充斥著有趣的領域知識溪烤、相互連接的想法檬嘀,以及可以激發(fā)想象力的無窮可能性鸳兽。它需要內在的動力去潛心研究并發(fā)現你所能發(fā)現的一切揍异。
找到你的好奇心:問問自己是否真的對編程感興趣衷掷。如果你的答案是“否”棍鳖,那么去尋找你感興趣的東西吧渡处,請省下你的時間和精力医瘫。但是稼锅,如果你的答案是“是”矩距,那么就去尋找你之前沒有注意到的東西,潛入那個浩瀚的海洋中去吧痊臭。
2缺乏自主性和智慧
如果你不去培養(yǎng)解決問題的能力,那就永遠不會成為一名成功的程序員鸦致。
毫無疑問鲁纠,想要成為一名成功的程序員,你必須對自己的學習能力充滿信心捍壤。這實際上是一項基本的生活技能——如果你年滿 18 歲鹃觉,沒有人有義務教你什么祷肯。這就是現實。你要自己去探索對你來說最重要的東西蒋纬。
在軟件開發(fā)的世界里,你需要的信息都可以在一個神奇的地方找到碾阁,這個地方以前被稱為信息高速公路。而這個龐大的圖書館有一個巨大的入口:搜索引擎横堡。你首先要學會在搜索引擎中輸入任何你想要的內容命贴,并獲得所需的信息,這是學習技術的第一道障礙胸蛛。
除了成為一個優(yōu)秀的搜索引擎用戶之外污茵,所有編程語言都提供了文檔和規(guī)范,它們非常明確地說明了編程語言的工作原理葬项。這就像使用字典一樣——當你看到一個不認識的單詞時泞当,就開始查字典。對于程序員來說民珍,閱讀文檔是提升技能最快襟士,最可靠的方法盗飒。
利用資源:你需要的所有答案都已經在那里。當你遇到問題時陋桂,先使用搜索引擎逆趣,然后再向其他人尋求答案或查看文檔。
3面對問題時無法堅持
如果你在面對問題時很容易就放棄嗜历,那就永遠不會成為一名成功的程序員宣渗。
編程的本質是解決問題。這就是為什么人類要發(fā)明計算機梨州!當你開始寫代碼時落包,會遇到一堆問題。在你解決了一個問題之后摊唇,通常會有另一個問題在等著你咐蝇。解決問題的過程就是你取得進步的過程,但總有新的問題需要面對巷查。
總是要面對一堆問題可能會讓人望而生畏和沮喪有序。如果你認為事情做到“差不多”就行了,那么你就不會有足夠的能量堅持下去岛请,因為問題會持續(xù)出現旭寿,它們會一點一點消磨掉你僅有的熱情。
根據我的教學經驗崇败,通常每個班級都會有一到兩名學生盅称,他們似乎會比其他學生遇到更多的問題——通常都是很隨意和模糊的問題。我提醒學生后室,他們遇到的問題越多缩膝,學習就會更深入、更徹底岸霹。如果他們能夠通過解決這些問題理解到更多東西疾层,他們就會變得更加自信,因為他們比普通學生面臨并解決了更多的問題贡避。
耐心接受:你需要認識到痛黎,問題實際上就是挑戰(zhàn)。你面臨和克服的每一個挑戰(zhàn)都會讓你更深刻地理解和更好地面對新挑戰(zhàn)刮吧,并迅速解決舊挑戰(zhàn)湖饱。
4解決問題沒有成就感
如果你在解決問題后不會感到興奮或沒有成就感,那就永遠不會成為一名成功的程序員杀捻。
在成功解決問題后缺乏一種“良好的感覺”井厌,這與前面的太容易放棄其實是有關系的。當修 bug 變成一種似乎永無止境的任務時,從克服問題中獲得的興奮感會離你而去旗笔。
在應對挑戰(zhàn)時彪置,實際上需要多巴胺的刺激。這種體驗有點像視頻游戲中的升級或玩填字或數獨游戲蝇恶。我們都知道拳魁,堅持完成一個挑戰(zhàn)并最終取得勝利,這樣會獲得一種良好的感覺撮弧。但如果你失去了感受這些感覺的能力潘懊,或者從一開始就沒有真正關心過,那么你將無法體驗到編程帶來的快樂贿衍。如果你認為編程是一種苦差事授舟,只想盡可能輕松地獲得結果,那么你就永遠不會成為一名成功的程序員贸辈。
慶祝你的勝利:每當解決了一個困擾你已久的問題释树,無論是多么小的問題,都要為你的成就感到自豪擎淤。休息一下奢啥,給自己慶祝一下,讓成功的感覺進入你的身體嘴拢,并讓它激勵你面對下一個問題桩盲。
5缺乏耐心
如果你對學習感到不耐煩并希望能夠快速而輕松地掌握所有東西,那就永遠不會成為一名成功的程序員席吴。
人類的能力是有限的赌结。即使我們的世界發(fā)展得越來越快,而計算機是促成這種發(fā)展的一個重要動力孝冒,但我們也只能盡可能快地跟上世界發(fā)展的腳步柬姚。我們的大腦以一定的速度運轉,并且取決于我們的過去迈倍、信念伤靠、情緒、健康……我們學習和整合信息的速度是不一樣的啼染。
技術世界就像浩瀚的海洋,你永遠無法走到盡頭焕梅,無法成為一個不再需要學習任何東西的高手迹鹅。如果你讓自己不知所措,就會有一種想要“迎頭趕上”的壓力贞言,你會覺得自己知道的永遠不夠多斜棚。如果你不能接受你所知道的,然后再多學一點,你會覺得自己沒有進步弟蚀,然后就會放棄蚤霞。
相反,你要享受自己的學習之旅义钉。你掌握的每一點知識昧绣,或者獲得的每一項新技能都應該讓你感到興奮。就像解決問題一樣捶闸,你需要讓自己感到自豪夜畴,因為你已經向前邁出了一步,即使是很小的一步删壮。
承認你的進步:有很多東西需要學習贪绘,編程之旅永無止境。但這些知識是可以累積的央碟,所以要為自己所知道的事情感到自豪税灌,并相信你在學習中所付出的一切努力都將為你的職業(yè)生涯打下定堅實的基礎。
6厭倦了思考
如果你懶于思考亿虽,把集中菱涤、專注的思考看成是一件苦差事,那就永遠不會成為一名成功的程序員经柴。
編程是一項思考活動狸窘。作為人類,我們非常擅長思考坯认,但現實情況是翻擒,即使我們很自然地花了一整天去做這件事,我們在思考上仍然是懶惰的牛哺。如果你還不習慣陋气,那么要想在一段時間內集中精力解決一個問題是很困難的。
這種情況的癥狀包括茫然地盯著屏幕引润、感覺腦袋上籠罩著烏云巩趁、拖延、在瀏覽器標簽之間切來切去淳附,以及拼命在 StackOverflow 上尋找“答案”议慰。這些跡象表明你已經達到了思考極限。
在編程過程中奴曙,你會感到疲倦别凹,思考就像鍛煉身體一樣會消耗你的能量。當你不習慣運用所需的精神能量時洽糟,會感到很難保持專注炉菲。但就像去健身房一樣堕战,你做的越多,就越強大拍霜。
你的大腦就像一塊肌肉:你的大腦就像一塊肌肉——當你使用它時嘱丢,它會在思考過程中變得更好,更有效率祠饺。當你把各個部分放在一起形成思維概念時越驻,尋找解決方案就會變得容易得多。
7無法自己思考
如果你希望別人為你考慮吠裆,并且不愿意自己去探究細節(jié)伐谈,那就永遠不會成為一名成功的程序員。
當你在學習新東西時试疙,會覺得自己缺乏知識和經驗诵棵,無法擁有自己的觀點。太過主動或者做錯或說錯某些東西似乎是有風險的祝旷。
我們都會有一種固有的恐懼感履澳。當對犯錯的恐懼抑制了探索欲和好奇心時,你就會扼殺掌握知識的能力怀跛,而這些知識需要從經驗和“失敗”中獲得距贷。當你需要依賴“權威”、受歡迎的博主吻谋、最佳實踐或“教科書”給出的答案時忠蝗,你就沒有真正整合編程的實用知識。
你需要發(fā)展自己的觀點漓拾,了解哪些東西是有效的阁最,哪些是無效的。你需要了解為什么你的解決方案是有效的骇两,以及它的好處是什么速种。你需要發(fā)展一種超越顯而易見的事物的微妙視角。你需要能夠為你的立場“爭辯”低千,如果你的看法變了配阵,就可以獲得新的視角。
自己去思考:通過你的經驗和批判性思維技能來發(fā)展自己的觀點示血。做出合理的猜測棋傍,表明立場,并愿意隨著新信息的出現而做出改變难审。
8僵化舍沙、狹隘和紊亂的思維
如果你的思維僵化,并且很難保持代碼的條理性剔宪,那就永遠不會成為一名成功的程序員。
有時候,我會在學生身上看到兩個極端葱绒。第一種學生擁有僵化而狹隘的思維方式感帅,他們拒絕幫助,盡管收到了反饋地淀,也不會做出改變失球。他們只從一個角度看待事物,建議通常會被他們忽略帮毁。
第二個極端是思維混亂实苞。這種學生似乎喜歡把事情復雜化,他們的代碼很亂烈疚,難以理解黔牵。他們過度思考問題,10 行代碼就可以解決的問題他們要寫 100 行爷肝。
當這兩種思維模式結合在一起猾浦,就會形成一種嚴密的編程方式,就像使用蠻力一樣灯抛,會導致一層又一層的修復和“hack”金赦。這個時候需要回顧解決方案,重新評估它对嚼,并放棄最初的方法夹抗,然后重新組織解決方案。
看不到其他可能性或無法收到其他反饋會抑制成長和進步的能力纵竖。沒有條理性會減慢你的速度漠烧,阻止你看到原本顯而易見的模式。你的整體學習質量就會下降磨确。
自我反思:你需要退后一步沽甥,從更廣的角度看待你是如何處理事情的。怎樣才能做得更好乏奥?可以做些什么讓你的生活變得更輕松摆舟?你錯過了哪些可以幫助你獲得提升的東西?
9只在意“正確”的答案,不想去找出一系列“好”和“壞”的答案
如果你認為編程的最終目標是找到正確的解決方案邓了,而不是一系列解決方案恨诱,那就永遠不會成為一名成功的程序員。
在開始學習技能或編程時骗炉,學生通常想知道他們所做的是不是“正確”的照宝。但答案總是“取決于”。
計算機科學是一門評估權衡的科學句葵。對于不同的情況厕鹃,采取哪條路經會更好兢仰?這一切都取決于具體的情況和目標。如果你將編程看作是一個正確答案或錯誤答案的測試剂碴,那么你就會忽視大局把将,創(chuàng)造力會與你擦肩而過。任何答案都可以是“正確”的忆矛,只要你能在特定情況下證明它察蹲。
現實情況是,編程更像是寫詩或短篇小說(大型程序就像是小說)催训。在你的代碼中可以看到一種美感洽议,有時只有你和其他程序員可以看得出來。你做出決策的原因和你構思答案的方式比“正確的方式”或“錯誤的方式”更加重要漫拭。擁有藝術家的頭腦會讓你擁有更多的選擇和可能性亚兄,而不是認為只有一種答案。這就是編程之美嫂侍,解決問題的方法有很多儿捧,思考不同的可能性會讓人產生一種感覺,知道哪個解決方案是最適合的挑宠。
變得有創(chuàng)意:要意識到解決問題的方法有很多菲盾,通過經驗和接觸,隨著時間的推移各淀,在選擇解決方案時你會形成一種微妙的理解能力懒鉴。從大局出發(fā),想象不同的可能性碎浇,相信自己的直覺临谱,你會找到更好的、更令人滿意的解決方案奴璃。
10不注意細節(jié)
如果你忽略細節(jié)悉默,忽視小事情,那就永遠不會成為一名成功的程序員苟穆。
計算機是精密的機器抄课。在進行計算機編程時,你需要以計算機期望的方式精確地提供必要的命令雳旅。如果你不這么做跟磨,就什么都不會發(fā)生。一個程序要么可以運行攒盈,要么不能運行抵拘,不存在所謂的中間地帶。
所以型豁,在編程時僵蛛,你必須注意細節(jié)尚蝌。每個空格、括號或分號都很重要墩瞳。出了一點問題都不行驼壶。當計算機返回錯誤消息時,你必須能夠準確理解它告訴你的信息喉酌。而現實情況是,如果你錯過這樣的細節(jié)泵喘,可能需要再花費數小時追查一個問題泪电,而這個問題實際上可能是由一個錯別字導致的。
細節(jié)決定成敗纪铺。對于編程來說,這絕對是至理名言。
注意細節(jié):細節(jié)很重要览徒,你必須接受這個事實扯键。如果你可以做到,那就從一開始就掃描代碼芜繁,找出任何不恰當的地方旺隙。你可以借助一些可以幫助你快速識別問題的工具。
11Tips:掌握商業(yè)思維
這是我觀察到的另一個結果——注重商業(yè)思維的學生往往更關注結果而不是過程骏令。他們希望得到一個“可運行的應用程序”蔬捷,幫助他們將商業(yè)理念向前推進,他們希望“先進入市場”榔袋,認為學習曲線是他們實現業(yè)務目標的障礙周拐。
在反思那些難以幫助他們成長為程序員的學生時,我發(fā)現了他們對這個過程缺乏耐心凰兑,缺乏耐心給他們理解技術帶來了阻礙妥粟。他們往往把技術視為一種達成目的的手段,而不是一個可以探索和享受的領域知識吏够。
作為這一觀點的延伸勾给,我發(fā)現有些學生很有商業(yè)頭腦,他們在學習中會遇到困難稿饰,但往往很快就有客戶與他們簽約锦秒,從事自己實際上并不擅長的工作!他們會爭先恐后地尋找資源或模板讓項目跑起來喉镰,或者把工作外包給其他人旅择。他們在編程方面確實很爛,但在讓人們付錢給他們編程方面卻很有一套侣姆!
所以我想要補充的是生真,那些渴望創(chuàng)業(yè)的學生沉噩,在銷售、網絡和業(yè)務發(fā)展方面都很優(yōu)秀柱蟀,他們可能比其他人更難以學會編程川蒙。他們天生希望創(chuàng)造經濟機會,并將人們與解決方案聯系起來长已,這導致他們對編程中涉及的繁瑣細節(jié)感到不耐煩畜眨。
12結論
雖然編程可能是一項難以掌握的技能,但大多數人肯定都能學會术瓮。上面的清單列出了妨礙我們取得進步的態(tài)度和思維方式康聂,但大多數人都可以克服它們,并培養(yǎng)出編程能力(不一定要精通)胞四。
歡迎工作一到五年的Java工程師朋友們加入Java程序員開發(fā): 854393687
群內提供免費的Java架構學習資料(里面有高可用恬汁、高并發(fā)、高性能及分布式辜伟、Jvm性能調優(yōu)氓侧、Spring源碼,MyBatis导狡,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己约巷,不要再用"沒有時間“來掩飾自己思想上的懶惰!趁年輕烘豌,使勁拼载庭,給未來的自己一個交代!