[譯]作為程式設計師你不能成功的 10 個跡象

熊咆龍吟發表於2019-04-02

More Stickers Doesn’t Make You More Better. — **Photo by [Tim Gouw](https://unsplash.com/@punttim?utm_source=medium&utm_medium=referral) on [Unsplash](https://unsplash.com?utm_source=medium&utm_medium=referral)**

我經常在 Reddit、Quora 上遇到有人問,“怎樣才能知道我將來會不會成為一名成功的程式設計師?”(事實上,這篇文章實際上是我在 Quora 上給出的答案的一個擴充套件。)當人們考慮更換職業,或者是對軟體開發感興趣,並且對它需要些什麼感到好奇時,不可避免地會出現程式設計問題。

我認為對沒有受過任何正規計算機培訓的人來說,這是一個主要障礙。你會很自然地認為,如果你不擅長程式設計,那麼你是不可能成功的。這有點像你想成為一名演員,並想知道你是否擅長表演。

作為一名 Web 全棧開發講師,我教過很多“初學程式設計師”。好訊息是我很少發現有無法學習程式設計的學生。我認為它是人類的一種基本技能,就像閱讀、寫作和算術一樣。任何人都可以做到,這是我們人類能力的一部分,但也確實需要學習。

在過去兩年的教學中,我看到有很多學生努力學習程式設計,同時,還發現在他們的學習過程中出現的一些共同問題。如果你看一下下面的清單並聯系自身情況,請放心,你會在程式設計的過程中受挫並且應該在你受挫時做點什麼。但是,如果你仍然致力於成為開發人員的目標,那麼你可以輕鬆地面對這些問題並做出改變。

程式設計是人類的基本技能,就像閱讀、寫作和算術一樣。任何人都可以通過時間和努力學習程式設計。

下面的清單將幫助你瞭解你是否會在程式設計方面受挫,以及如果你想改變它,你可以做些什麼。


1 | 缺乏好奇心

如果你對計算機和技術原理的缺乏好奇心,作為一個程式設計師,你將永遠不會成功。

學習的基本要求是對你正在學習的東西有積極興趣。如果你沒有對技術感到好奇的頭腦,你就沒有足夠的幹勁去堅持學習成功碼農必備的更全面更深入的知識。

相比之下,技術世界就像是一片汪洋大海,它充滿了有趣的領域,互相關聯的思想,以及激發人類想象力的各種可能性。

找到你的好奇心:問問自己是否真的對程式設計感興趣。如果你誠實的答案是沒有,那麼還是去尋找你感興趣的東西吧,節省你自己的時間和精力。但是,如果你的回答是“是”,那麼請你自己找一些你之前沒有注意到的新東西,意識到這是一個浩瀚的海洋並深入其中。

2 | 缺乏主動和靈活多變

如果你不培養獨立解決問題的能力,你就永遠不會成為一個成功的程式設計師。

毫無疑問,要成為一個成功的開發人員,你必須對自己的學習能力充滿信心。這實際上是一項基本的生活技能 —— 如果你已經過了18歲,沒有人有義務教你任何東西。這就是現實。你得自行查詢資訊,並幫助你去了解對自己來說哪些是重要的資訊。

在發展的世界裡,你所需要的所有資訊都可以在一個神奇的地方找到,這個地方以前被稱為資訊高速公路。這個龐大的圖書館有一個巨大的入口:谷歌。當你想獲得技術中所需的技能時,首先要跨越的障礙是學會在谷歌中輸入你想要的任何東西並獲取你需要的資訊。

除了要做一個優秀的 googler,所有程式語言都有文件和規範,這些文件和規範非常明確地說明了該語言的工作方式。就像用字典一樣 —— 當你看到一個你不認識的詞時,你就會在字典中查出來。作為一名程式設計師,最快速、最可靠的方法就是直接閱讀文件。就是這麼簡單。

利用資源:要意識到所有你需要的答案都在那兒等著你。向別人尋求答案之前,一定得要求自己先使用谷歌,同時要翻閱文件。這樣當你已經嘗試過卻沒有找到你需要的答案時,也能夠節省他人的時間。

3 | 面對問題時缺乏毅力

如果你在面對問題時輕易放棄,那麼作為一名程式設計師,你永遠不會成功。

程式設計的本質是解決問題。這也是發明計算機的全部原因!每當你開始編寫程式時,你都會遇到一堆問題。一旦你解決了一個問題,它背後可能又會有另一個問題。你正在取得進步,但總會遇到問題。

面對一堆的問題可能會讓人望而生畏、令人沮喪的。如果你覺得程式就應該是“正常工作”,那麼當問題持續出現,一點一點地擊潰你的信心時,你就沒有精力再堅持下去。 確切地說你的工作就是找出程式為什麼不能正常工作。

根據我在課堂上的經驗,通常每個班都有一兩個學生,他們似乎比其他學生更擅長髮現那些不太常見、令人費解的問題。我提醒學生,他們面對的問題越多,學習越深入和透徹的可能性就越大。如果他們能通過這些問題獲得理解,他們會很快發現他們更自信,因為他們面對和解決的問題比普通學生多。

耐心地接受:你需要意識到問題是不可避免的,問題本身不是問題,其事實上對你的挑戰。你面臨和克服的每一個挑戰都會讓你更深入地瞭解並更好地應對新挑戰,從而迅速解決舊的挑戰。

4 | 克服問題時沒有成就感

如果你在解決問題後沒有感到興奮和成就感,那麼作為一名程式設計師,你永遠不會成功。

與前一個問題相關的是,一旦你成功地解決了一個問題,就缺乏“良好的感覺”。當修復 bugs 和問題變成了一個永遠不會停止的單調工作時,你就會失去與克服問題的興奮感。

當你克服一個問題時,你需要的是多巴胺的釋放。這類似於在視訊遊戲中完成一個關卡,或者解決一個像縱橫填字遊戲或數獨這樣的挑戰。我們都知道堅持通過一個挑戰,然後最終贏得比賽會有一種很好的感覺。但是如果你失去了感受這些感覺的能力,或者一開始從來沒有真正在意過這些感受,那麼你將無法體驗到程式設計帶來的快樂。如果你把程式設計看作是一種痛苦,你只想儘可能容易地得到結果,那麼你永遠不會真正成為一個成功的程式設計師。

慶祝勝利:每當你解決了一個你一直在努力解決的問題時,不管這個問題有多小,都要為你的成就感到自豪,休息一下,並祝賀你自己完成了一項出色的工作。讓成功的感覺滲透進身體,讓你在面臨下一個問題充滿活力。

5 | 對於學習和理解沒有耐心

如果你對學習不耐煩,並且期望能夠快速而輕鬆地掌握所有東西,那麼你將永遠不會在程式設計上成功。

我們人類並不是完美的生物。即使世界的前進速度變得越來越快,計算機是其中的一個重要原因,我們也只能儘可能快地前進。我們的大腦以一定的速度工作,並且依賴我們的過去、我們的信念、我們的情緒狀態、我們的健康...,我們將以不同的速度學習和整合資訊。

技術的世界就像一片廣闊的海洋。 你永遠不會走到盡頭,你永遠不會成為一個沒有其他東西可以學習的高手。如果你讓自己負擔過重,你就會總有“追趕”的感覺,並總覺得自己知道的不夠多。如果你不能接受你所知道的東西后再去學習一點,你就會迷失自我,然後放棄。

相反,你應該享受學習之旅。你獲得的每一點知識,或是新技能,都應該是讓你感到興奮。像解決問題一樣,你需要讓自己感到自豪,因為你認識到自己已經向前邁出了一步,即使這是一個很小的一步。

認可你的進步:要學的東西有很多,程式設計的旅途永遠不會結束。但是知識是需要累積的,所以要為你所知道的感到自豪,並且相信你在學習中所做的每一個努力都將為你的職業生涯打下一個堅實的知識基礎。

6 | 對思考問題感到厭煩或疲憊

如果你懶於思考,把集中注意力的思考當成乏味無聊的任務,那麼你將永遠不會在程式設計上成功。

程式設計是一種思考活動。作為人類,我們確實擅長思考,但事實是,即使每天都在不自覺地思考,我們仍懶於去主動思考。如果你不養成思考問題的習慣,那麼很難在一段時間內集中精力解決一個問題。

這種情況的症狀包括:茫然地盯著螢幕、感覺一團雲籠罩著你、拖延問題、在瀏覽器標籤之間來回切換,拼命地瀏覽 StackOverflow 尋找“答案”。這些跡象表明,你的精神已經受限,需要找到一條出路。

在程式設計的時候,你會感到疲倦,並且思考就像鍛鍊身體一樣消耗體力。當你不習慣運用你所需的精神力量時,你將很難集中注意力。但這就像去健身房一樣,你實際操作的越多,你就會變得越強壯。

你的精神如同肌肉:請相信,你的大腦就像一塊肌肉 —— 當你不停使用它的時候,它在思考過程中才會變得更好和更有效率。當你把各個部件拼湊在一起並運用精神時,會發現解決方案變得容易了很多。

7 | 無法獨立思考

如果你期望著別人替你思考,並且不願意認真審視自己的處境,你將永遠不會成為一個真正成功的程式設計師。

當你在學習新的東西時,很容易覺得你缺乏知識和經驗來支撐自己的觀點。採取主動或做錯事/說錯話似乎有風險。

我們對犯錯有一種固有的恐懼感。當對犯錯的恐懼抑制了你的探索和好奇心時,就會扼殺你獲取真正知識的能力,知識是從經驗和“失敗”中獲得的。 當你需要依賴“大師”的觀點、熱門博主、最佳實踐或“教科書”答案時,那麼說明你還沒有真正融合對程式設計的有用知識。

你需要對什麼有用,什麼沒用形成自己的觀點。需要明白為什麼你覺得你的解決方案有用,以及它的好處是什麼。需要建立一個微妙的視角,去超越那些顯而易見的東西。你需要能夠為你的觀點“辯護”,然後在這個過程中,如果你發生了改變,你就可以擁有新的觀點。

自己多想想:通過你的經驗和批判性思維技巧建立你自己的觀點。做出合理的猜測,堅定立場,並願意隨著新資訊的出現而做出改變。

8 | 僵化、狹隘、混亂的思維

如果你的思維僵化,那麼你將很難通過擴充套件思維的條理化和集中化保持程式碼的條理化,僵化的思維讓你永遠不會在程式設計上取得成功。

我有時在學生中會看到兩個極端。第一種是僵化和狹隘的思維方式。這種態度拒絕幫助、不在乎反饋、不會做出改變,只從一個角度出發看事情,忽略他人的意見。

我看到的第二種極端是思維混亂。學生們似乎使事情變得的複雜化,他們的程式碼雜亂無章,難以理解。他們過度思考問題,原本 10 行程式碼就足夠解決問題,他們硬是寫出 100 行的程式碼。

當這兩種思維方式結合在一起時,結果就是一種極端保守的的程式設計方法,就像導致一層又一層的修復和“黑客攻擊”的一種蠻力方法。我們需要的是重新審視解決方案、重新評估它、放棄最初的方法和重新組織的能力。

無法看到其他可能性或接受反饋會抑制成長和提升的能力。雜亂無章會減慢你的速度,阻止你看到那些原本顯而易見的方法,你的工作質量也會下降。

自我反省:你需要退後一步,以便總覽全域性。你怎麼才能做得更好?你能做些什麼讓你的生活更輕鬆嗎?你錯過了哪些可以幫助到你的東西?

9 | 需要“正確”的答案,而不是鑑別出“好”和“壞”的答案

如果你認為程式設計的最終目標是找到一個正確的解決方案,而不是一系列解決方案,那麼作為一個程式設計師,你將永遠不會真正成功。

當學生開始學習技能或程式設計時,往往他們都想知道自己所做的是否是“正確的”,而答案總是“視情況而定”。

電腦科學是一門評估權衡的科學。在不同的環境下,哪條路更好?這完全取決於具體的環境和目標。當你把程式設計看作是一個有正確答案或錯誤答案的測試時,你就失去了對全域性的認識,也放棄了你的創造力。任何答案都可以是“正確的”,前提是你能根據具體情況證明這一點。

現實情況是,程式設計更像是寫詩或寫短篇小說(如果程式很大,則可能是小說)。在你的程式碼中可以看到一種美學和美感,有時只有你和其他一些程式設計師能讀懂。你的解決方案的理由,以及構思答案的思路,比“正確的方式”或“錯誤的方式”更重要。擁有一個藝術家的頭腦可以讓你玩轉選項和可能性,而不是認為只有一種方式。這就是程式設計的美,有很多方法可以解決一個問題,對不同可能性的權衡會讓人感覺哪種方法最適合眼下的情況。

來點創意: 認識到解決問題的方法有很多種,通過經驗和對問題的解析,隨著時間的積累,你將懂得如何辨析最優方案,你就會產生細微的理解。縱觀全域性,去想象不同的可能性,相信你的直覺,你會得到更令人滿意的更好的解決方案。

10 | 不注意細節

如果你掩蓋細節,忽略一些小事情,你將永遠不會成為一個真正成功的程式設計師。

計算機是精確的機器。當涉及到計算機程式設計時,你需要按照計算機期望的方式明確地提供必要的命令。如果你不這樣做,什麼都不會奏效。完全沒有折中 —— 要麼能,要麼不能。

這意味著當你在程式設計時,你必須注意細節。每個空格、括號或分號都要考慮。如果稍有不對,一切都是白談。當計算機列印出一條錯誤資訊時,你必須能夠審查資訊並準確理解它想要所告訴你的內容。事實是,如果你錯過了一些細節,你可能要花幾個小時來找 bug,但實際上只是一個輸入錯誤導致的問題。

正如他們所說,魔鬼在細節中,這對於程式設計來說絕對是正確的。

注意細節:細節很重要,你必須接受它。一旦你注重細節,你就可以開始通過瀏覽你的程式碼找出任何不合適的地方。你要能夠有條不紊地組織好程式碼,並藉助工具來更快地處理問題。

額外補充: 商業化的思維

這是我注意到這樣一個現象 —— 那些特別有商業頭腦的學生,往往關注結果而不是過程。他們希望得到一個“可以使用的 app”,這將推動他們的商業理念向前發展,他們希望“先進入市場”,並且他們將經驗積累視為他們實現商業目標的障礙。

在回顧那些難以在幫助下成長為程式設計師的學生時,我發現對於學習過程的不耐煩,阻礙了真正地理解技術。這些學生傾向於將技術視為達到目的的手段,而不是真正地探索和享受的知識。

作為對此的一個自然延伸,我發現有些學生更傾向於經商,他們在學習上很吃力,但通常會很快讓自由職業客戶報名參加他們自己實際上都不會的工作。他們迅速地尋找資源/模板來讓專案獲得客戶的滿意,或者將工作外包給其他人。 他們確實不擅長程式設計,但卻很擅長讓人們付錢給他們程式設計!

所以我想補充的是,那些渴望創業的學生,他們在銷售、人際關係和商業發展方面都很優秀,但比其他人更難以學習程式設計技能。他們天生渴望創造生財的門路,並將人們與解決方案聯絡起來,這讓他們對程式設計中繁瑣的細節失去了耐心。

總結


雖然程式設計是一項很難學習的技能,但它肯定是大多數人都能學的。上面的清單包含了阻礙學習的一些態度和思維方式,但是大多數人可以克服它們,並在程式設計領域發展自己的能力 —— 如果不是精通的話。

如果你對學習程式設計感興趣,我鼓勵你開始這個旅程。記住上面的清單,網上有很多可以讓你快速前進的資源,快去探索吧,你不會後悔的。

如果發現譯文存在錯誤或其他需要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可獲得相應獎勵積分。文章開頭的 本文永久連結 即為本文在 GitHub 上的 MarkDown 連結。


掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章