出現(xiàn)這十種癥狀 說明你不適合做程序員
學(xué)習(xí)是一件艱苦的事情。很多人想要成為程序員,在學(xué)習(xí)編程的過程中,面對各種 bug 和源源不斷的問題,有時(shí)會(huì)對自己是否適合編程這一問題產(chǎn)生困擾。
編程教育工作者、web 開發(fā)工程師 Jonathan Bluks 對這一問題進(jìn)行了思考。在教學(xué)的過程中,他總結(jié)出了不適合做程序員的十個(gè)特征。下面是他的博文。
我經(jīng)常在 Reddit 或 Quora 上看到這樣的問題:「我如何知道我是否能成為一名程序員?」當(dāng)有人在考慮職業(yè)方向,或者對軟件開發(fā)感興趣,并且對成為程序員需要做什么感到好奇時(shí),不可避免地會(huì)出現(xiàn)這種問題。
事實(shí)上,我認(rèn)為這是一個(gè)很自然的問題。這有點(diǎn)像你想成為一個(gè)演員,你就會(huì)想知道你是否擅長表演一樣。
作為一名教授全棧 Web 開發(fā)的教育工作者,我已經(jīng)帶領(lǐng)很多新手成為了程序員。好消息是,我發(fā)現(xiàn)沒有任何人是不能學(xué)習(xí)編程的。我把它看作是一種基本的人類技能,就像閱讀、寫作和算術(shù)一樣,任何人都可以做到。它是我們?nèi)祟惸芰Φ囊徊糠郑皇切枰獙W(xué)習(xí)。
在過去的兩年的教學(xué)中,我目睹了不同的學(xué)生在學(xué)習(xí)過程中的斗爭,以及在他們的掙扎中出現(xiàn)的一些共同問題。如果你看這個(gè)列表,發(fā)現(xiàn)這些事情也發(fā)生在自己身上,放心吧,你會(huì)真正地在編程上吃虧,然后你可能會(huì)發(fā)現(xiàn)其他能夠打發(fā)時(shí)間的事情。但是,如果你仍然致力于成為開發(fā)人員,那么你可以輕松地面對這些問題。
編程是人類的基本技能,就像閱讀、寫作和算術(shù)一樣。任何人都可以通過時(shí)間和努力學(xué)會(huì)編程。
下面的列表將幫助你了解你是否喜歡編程,以及如果你想做出一些改變,你可以做些什么。
1、缺乏好奇心
如果你對計(jì)算機(jī)是如何工作的缺乏好奇心,那么,作為一個(gè)程序員,你將永遠(yuǎn)不會(huì)成功。
學(xué)習(xí)的一個(gè)基本要求是對你所學(xué)的東西有積極的興趣。如果你沒有一個(gè)對技術(shù)好奇的頭腦,你就沒有精力去堅(jiān)持學(xué)習(xí)要成為一個(gè)成功的程序員所需要的廣博而深入的知識(shí)。
相比之下,技術(shù)的世界就像一個(gè)巨大的海洋,里面充滿了各種有趣的領(lǐng)域、相互聯(lián)系的思想和各種可能,它們可以激發(fā)人們的想象力。想要潛入這片海洋并發(fā)現(xiàn)你所能發(fā)現(xiàn)的一切,需要內(nèi)在的動(dòng)力。
找到你的好奇心:問問你自己,編程是否真的讓你感興趣?如果沒有興趣,去找你感興趣的東西,以節(jié)省時(shí)間和精力。但是如果你的答案是感興趣,那么就強(qiáng)迫自己去發(fā)現(xiàn)一些你以前沒有注意到的新事物,認(rèn)識(shí)到浩瀚的技術(shù)海洋,再往下潛一點(diǎn)。
2、缺乏自主性
如果你不培養(yǎng)自己解決問題的能力,你就永遠(yuǎn)不會(huì)成為一個(gè)成功的程序員。
毫無疑問,要成為一個(gè)成功的開發(fā)人員,你必須對自己的學(xué)習(xí)能力充滿信心。這實(shí)際上是一項(xiàng)基本的生活技能,如果你年滿 18 歲,沒有人有義務(wù)教你任何東西。這就是現(xiàn)實(shí)。
當(dāng)你想學(xué)習(xí)技術(shù)所需的技能時(shí),首先要學(xué)會(huì)的是,在谷歌中輸入你想要的任何東西并獲取你需要的信息。除此之外,所有編程語言都有文檔和規(guī)范,這些文檔和規(guī)范對語言的工作方式解釋的非常清楚,它們就像字典一樣。作為一個(gè)程序員,最快速、最可靠的學(xué)習(xí)方法就是簡單地閱讀這些文檔。
當(dāng)你有問題的時(shí)候,在問別人答案和查閱官方文檔之前,強(qiáng)迫自己先搜索一下,節(jié)省別人的時(shí)間。
3、面對問題缺乏毅力
如果你在遇到問題時(shí)輕易放棄,作為一個(gè)程序員,你將永遠(yuǎn)不會(huì)成功。
編程的本質(zhì)是解決問題,這也是計(jì)算機(jī)產(chǎn)生的全部原因!每當(dāng)你開始編寫一個(gè)程序時(shí),你總是會(huì)遇到一大堆問題。一旦你解決了一個(gè)問題,那么幾乎總是有另一個(gè)問題在后面等著你。你在進(jìn)步,但總是會(huì)有新的問題要面對。
這堆問題會(huì)讓人望而生畏,令人感到沮喪。如果你覺得程序應(yīng)該「能用就好」,那么你就沒有精力堅(jiān)持下去,因?yàn)閱栴}還在繼續(xù)出現(xiàn),它們會(huì)一點(diǎn)一點(diǎn)地?fù)魸⒛愕那榫w和決心。從字面上來說,你的工作就是找出程序?yàn)槭裁床荒芘芷饋怼?/p>
從我在課堂上的經(jīng)驗(yàn)來看,通常每個(gè)班都有一兩個(gè)學(xué)生,和其他學(xué)生相比,他們似乎更容易遇到更多的問題—;—;通常是非常隨機(jī)和模糊的問題。我提醒學(xué)生,他們面對的問題越多,學(xué)習(xí)越深入、越徹底的可能性就越大。如果他們能通過這些問題獲得深刻的理解,他們會(huì)很快發(fā)現(xiàn)他們變得更加自信了,因?yàn)樗麄兠鎸徒鉀Q的問題比普通學(xué)生多。
你需要認(rèn)識(shí)到,問題不僅僅只是問題,它實(shí)際上也是挑戰(zhàn)。你所面臨和克服的每一個(gè)挑戰(zhàn)都能讓你更深入地理解技術(shù),更好地面對新的挑戰(zhàn),并迅速解決舊的挑戰(zhàn)。
4、解決問題之后沒有成就感
如果你在解決一個(gè)問題后沒有興奮感和成就感,作為一個(gè)程序員,你將永遠(yuǎn)不會(huì)成功。
與上一個(gè)問題相關(guān)的是,你成功地解決了一個(gè)問題,卻缺乏「良好的感覺」。當(dāng)修復(fù) bug 和問題變成了一個(gè)永遠(yuǎn)不會(huì)結(jié)束的事情時(shí),你會(huì)失去與克服問題的動(dòng)力。
當(dāng)你解決一個(gè)問題時(shí),你需要的是多巴胺的釋放。這類似于在電子游戲中完成了一個(gè)關(guān)卡,或者解決了一個(gè)像縱橫字謎或數(shù)獨(dú)這樣的挑戰(zhàn)。我們都知道,堅(jiān)持通過一項(xiàng)挑戰(zhàn),然后最終贏得比賽,一般都會(huì)有成就感和興奮感。但是如果你失去了感受這些快樂的能力,或者從一開始就沒有真正有過這些感受,你將無法體驗(yàn)到編程帶來的快樂。如果你把編程看作是一種磨礪,你只想盡可能容易地得到結(jié)果,那么你永遠(yuǎn)不會(huì)真正成為一個(gè)成功的程序員。
無論何時(shí),當(dāng)你解決了一個(gè)一直在努力解決的問題時(shí),無論這個(gè)問題多么微小,你總是為你的成就感到驕傲。你需要休息一下,祝賀你自己完成了一項(xiàng)出色的工作,讓成功的感覺滲透進(jìn)你的心里,為你即將面臨的下一個(gè)問題注入活力。
5、對學(xué)習(xí)和理解感到不耐煩
如果你對學(xué)習(xí)感到不耐煩,并且希望快速、輕松地掌握所有東西,那么你將永遠(yuǎn)不會(huì)真正成功地學(xué)會(huì)編程。
作為人類,我們是在能力上有極限的生物。我們的世界變化得越來越快,計(jì)算機(jī)是造成這一現(xiàn)象的一大原因,而我們也只能盡我們的能力跟上這些變化。我們的大腦以一定的速度工作,并且,這個(gè)速度取決于我們的過去、信仰、情緒狀態(tài)、健康……我們都將以不同的速度學(xué)習(xí)和整合信息。
科技的世界就像一片廣闊的海洋。你永遠(yuǎn)不會(huì)到達(dá)終點(diǎn),你永遠(yuǎn)不會(huì)到達(dá)一個(gè)沒有其他東西可學(xué)的大師的地步。如果你讓自己感到不知所措,你總是會(huì)受到一種要去「追趕」的壓力,并且會(huì)覺得你永遠(yuǎn)都知道的不夠多。如果你不能接受你所知道的,然后再多學(xué)一點(diǎn),你會(huì)覺得自己一事無成,然后放棄。
相反,你需要享受為自己學(xué)習(xí)的旅程。你所獲得的每一點(diǎn)新知識(shí)或新技能都需要讓你感到興奮。就像解決問題一樣,你需要讓自己感到自豪,因?yàn)槟阏J(rèn)識(shí)到自己已經(jīng)向前邁出了一步,即使這是只是很小的一步。
承認(rèn)你的進(jìn)步。你還有很多東西要學(xué),編程之旅永遠(yuǎn)不會(huì)結(jié)束。但是,知識(shí)是累積的,所以你要為你所知道的感到自豪,并且相信你在學(xué)習(xí)中所做的每一份努力都將為你的職業(yè)生涯的創(chuàng)造一個(gè)堅(jiān)實(shí)的知識(shí)基礎(chǔ)。
6、因思考而感到無聊或疲倦
如果你懶于思考,并把集中注意力進(jìn)行思考看成是一件微不足道的小事,你將永遠(yuǎn)不會(huì)真正成為成功的程序員。
編程是一種思考活動(dòng)。作為人類,我們確實(shí)擅長思考,但事實(shí)是,即使我們一整天都很自然地在思考一些事情,我們也懶得去思考。如果你不習(xí)慣思考,那么,在一段時(shí)間內(nèi)集中精力去解決一個(gè)問題對你來說是很困難的。
這種情況的癥狀包括茫然地盯著屏幕,感覺一團(tuán)云落在你的思想上,拖延著一個(gè)又一個(gè)問題,在瀏覽器標(biāo)簽之間來回移動(dòng),眼睛拼命地掃描 StackOverflow 尋找「答案」。這些跡象表明,你在精神上已經(jīng)達(dá)到了上限,需要找到一條突破口。
在編程的時(shí)候,你會(huì)感到疲倦,思考就像鍛煉身體一樣消耗體力。當(dāng)你不習(xí)慣利用精神能量時(shí),你就很難集中注意力。但這就像去健身房一樣,你練得越多,你就會(huì)變得越強(qiáng)壯。
你的大腦是一塊肌肉。你要相信,你的大腦就像一塊肌肉一樣,當(dāng)你堅(jiān)持使用它時(shí),它會(huì)變得越來越會(huì)有效地思考。
7、無法獨(dú)立思考
如果你期望別人為你著想,并且主動(dòng)看到你自己所在的處境的細(xì)節(jié),你將永遠(yuǎn)不會(huì)成為一個(gè)真正成功的程序員。
當(dāng)你在學(xué)習(xí)新的東西時(shí),很容易感到缺乏知識(shí)和經(jīng)驗(yàn),并沒有自己的觀點(diǎn)。主動(dòng)做事或者說錯(cuò)話似乎是有風(fēng)險(xiǎn)的。
對于錯(cuò)誤,我們的內(nèi)心都有一種恐懼感。當(dāng)對錯(cuò)誤的恐懼抑制了你的探索和好奇心時(shí),你會(huì)扼殺開發(fā)真正知識(shí)、從經(jīng)驗(yàn)中獲得的知識(shí)和「失敗」的能力。當(dāng)你需要依靠「權(quán)威」的觀點(diǎn)、一個(gè)受歡迎的博客、一個(gè)最佳實(shí)踐或「教科書」的答案時(shí),那么你就沒有真正地整合編程的知識(shí)。
你需要對什么有效,什么無效形成自己的觀點(diǎn)。你需要理解為什么你認(rèn)為你的解決方案有效,以及使用這個(gè)方案有什么好處。你需要建立一個(gè)微妙的視角,超越那些顯而易見的東西。你需要能夠「證實(shí)」你的立場。
為自己著想。通過你的經(jīng)驗(yàn)和批判性思維技巧,發(fā)展出你自己的思想體系。做出合理的猜測,堅(jiān)定立場,并愿意隨著新信息的出現(xiàn)而改變立場。
8、僵化、狹隘、混亂的思維
如果你的思維僵化,并且難以保持代碼的條理化,那么你將永遠(yuǎn)無法成為一名真正成功的程序員。
我有時(shí)在學(xué)生中看到兩個(gè)極端。第一種是僵化和狹隘的思維方式。擁有這種態(tài)度的人拒絕幫助,盡管會(huì)有反饋,但不會(huì)有改變。他們看事情只從一個(gè)角度看,別人給的建議被忽略。
我看到的第二個(gè)極端是思維混亂。學(xué)生們似乎使事情變得更加復(fù)雜,他們的代碼雜亂無章,難以理解。他們過度思考問題,寫 100 行代碼,而其中只有 10 行 是有用的。
當(dāng)這兩種心態(tài)結(jié)合在一起時(shí),結(jié)果就是一種用蠻力的方法去設(shè)計(jì)程序。我們需要的是回顧解決方案,重新評估它,放棄最初的方法,并重新組織方法。
無法看到其他可能性或無法反思反饋會(huì)抑制成長的能力。思維雜亂無章會(huì)減慢你的成長速度,阻止你看到那些原本顯而易見的模式。你的工作質(zhì)量也會(huì)下降。
自我反省。你需要退后一步,看看你是接觸的事物的大局是什么樣子的。你要怎樣才能做得更好?你能做些什么讓你的生活更輕松嗎?你需要什么來幫助你?
9、需要「正確」的答案,而不是識(shí)別一系列「好」和「壞」的答案的方法
如果你認(rèn)為編程的最終目標(biāo)是找到正確的解決方案,而不是一系列解決方案,那么作為一個(gè)程序員,你將永遠(yuǎn)不會(huì)真正成功。
當(dāng)開始學(xué)習(xí)技能或編程時(shí),學(xué)生往往想知道他們所做的是否「正確」,而答案總是「視情況而定」。
計(jì)算機(jī)科學(xué)是一門評估權(quán)衡的科學(xué)。在不同的環(huán)境下,哪條路更好,這完全取決于所處的環(huán)境和目標(biāo)。當(dāng)你把編程看作是一個(gè)有正確答案或錯(cuò)誤答案的測試時(shí),你就失去了對全局的認(rèn)識(shí),放棄了你的創(chuàng)造力。任何答案都可以是「正確的」,前提是你能根據(jù)具體情況證明這一點(diǎn)。
現(xiàn)實(shí)情況是,編程更像是寫詩或?qū)懚唐≌f(如果程序很大,則可能是小說)。在你的代碼中可以看到一種美學(xué)和美麗,這些東西有時(shí)只有你和其他程序員能夠識(shí)別出來。你決定解決方案的原因,以及你對答案的設(shè)想,比「正確的方式」或「錯(cuò)誤的方式」更重要。擁有一個(gè)藝術(shù)家的頭腦可以讓你編的程序具有選擇和可能性,而不是認(rèn)為只有一種處理方式。這就是編程的美—;—;有很多方法可以解決問題,考慮不同的可能性,然后決定哪種方法最適合當(dāng)前的情況。
創(chuàng)造性很重要。你要認(rèn)識(shí)到,解決問題的方法有很多種,通過經(jīng)驗(yàn)和積累,你會(huì)對哪些解決方案比其他解決方案感覺更好產(chǎn)生細(xì)微的理解??v觀全局,想象不同的可能性,相信你的直覺,你會(huì)得到更滿意、更好的解決方案
10、不注意細(xì)節(jié)
如果你掩蓋細(xì)節(jié),忽略一些小事情,你將永遠(yuǎn)不會(huì)成為一個(gè)真正成功的程序員。
計(jì)算機(jī)是精密的機(jī)器。當(dāng)涉及到計(jì)算機(jī)編程時(shí),你需要以計(jì)算機(jī)期望的方式精確地提供必要的命令。如果你不這樣做,什么都不會(huì)奏效。這里面沒有一個(gè)中間地帶,要么是有用的,要么是沒有用的。
這意味著當(dāng)你在編程時(shí),你必須注意細(xì)節(jié)。每個(gè)空格、括號(hào)或分號(hào)都要注意。一旦有任何問題,那么什么都不會(huì)起作用。當(dāng)計(jì)算機(jī)彈出一條錯(cuò)誤信息時(shí),你必須能夠查看該信息并準(zhǔn)確理解它告訴你的內(nèi)容。事實(shí)是,如果你錯(cuò)過了這樣的細(xì)節(jié),你可能需要花幾個(gè)小時(shí)來追蹤一個(gè)問題,而它實(shí)際上是只是一個(gè)打字錯(cuò)誤造成的。
正如人們所說,細(xì)節(jié)是魔鬼。這句話對于編程來說是絕對正確的。
注意細(xì)節(jié)。細(xì)節(jié)很重要,你必須接受這一點(diǎn)。在你編程的時(shí)候,你需要瀏覽你的代碼,找出任何不合適的地方。你可以使用幫助你快速識(shí)別問題的工具。
總結(jié)
其實(shí)我注意到,有些學(xué)生特別注重商業(yè),他們經(jīng)常關(guān)注結(jié)果而不是過程。他們希望得到一個(gè)能夠推動(dòng)他們的商業(yè)理念發(fā)展的應(yīng)用程序,他們認(rèn)為學(xué)習(xí)曲線是阻礙他們實(shí)現(xiàn)業(yè)務(wù)發(fā)展目標(biāo)的障礙。
在回顧那些很難真正成長為程序員的學(xué)生時(shí),我發(fā)現(xiàn)對于這個(gè)過程的不耐煩抑制了他們真正理解技術(shù)所需的學(xué)習(xí)。他們傾向于將技術(shù)視為達(dá)到目的的一種手段,而不是探索和享受的一個(gè)知識(shí)領(lǐng)域。
作為這一點(diǎn)的自然延伸,我發(fā)現(xiàn)有些學(xué)生更傾向于做生意,他們學(xué)習(xí)困難。一般情況下,他們會(huì)爭先恐后地尋找資源/模板,讓項(xiàng)目為客戶工作,或者將工作外包給其他人。他們真的很喜歡編程,但讓人們付錢給他們編程卻更感興趣!
因此,我要補(bǔ)充的是,那些渴望創(chuàng)業(yè)、擅長銷售、網(wǎng)絡(luò)和業(yè)務(wù)開發(fā)的學(xué)生可能比其他人更難以學(xué)習(xí)編程技能。他們天生渴望創(chuàng)造經(jīng)濟(jì)機(jī)會(huì)并將人們與解決方案聯(lián)系起來,這使他們對編程中涉及的繁瑣細(xì)節(jié)感到不耐煩。
雖然編程是一項(xiàng)很難學(xué)習(xí)的技能,但它肯定是大多數(shù)人都能學(xué)習(xí)的技能。上面的列表包含了阻礙我們前進(jìn)的態(tài)度和心態(tài),大多數(shù)人都可以克服這些態(tài)度和心態(tài)。如果不精通編程的話,他們就不能在編程領(lǐng)域發(fā)展出自己的能力。
如果你對學(xué)習(xí)編程感興趣,我鼓勵(lì)你開始這段旅程。記住提到的十條,并開始學(xué)習(xí)、探索在線資源,這些資源可以讓你快速學(xué)習(xí)。你不會(huì)后悔的!