初學編程時就應有的信仰

在你學習編程之前,請先思考“我想開發什么”

學會如何編程主要是為了實現某些功能,如果你對最終目標有著清晰地認識,那么前途會一片光明。假使你的目標只是“會編程”而非制作某種給自己帶來便利的程序,你很有可能就會發現編碼是一件極其令人沮喪的運動。

我稍微有點羞于承認我學習計算機科學的部分原因是證明自己是多么的聰明以及獲得一份聰明人的工作。當然,我非常樂于思考數學和理論(這本書對我影響深遠),所以編程契合了我的這一興趣。然而僅僅這樣不足以讓我在編程道路上走得很遠,直到我發現了我真正喜愛的領域(比如音樂和文學)和技術之間的紐帶。

所以,你為什么想要編碼?建網站?做游戲?做App?一個讓你致富的機會?交互式藝術?你是否想打動你的老板或者自動執行一些繁瑣的任務來讓你有更多的時間去欣賞其他照片?也許你僅僅是希望能更好的就業、往簡歷里添加一些時髦的詞句或者完成教育計劃的要求。這些都是有價值的目標!請確定你自己的目標,并以此作為前進的動力。

這沒什么神秘的

編碼同樣也是技巧。像學習語言,有語法和詞匯要掌握;像數學,有完成特定類型的問題的流程;像各種工藝和藝術創作,有人們已經開發一段時間的技術和工具和最佳實踐,你可以自由地使用或修改或放棄以適應特定的不同的任務。

這位仁兄 (非常聰明!他的另一作品我非常喜歡,經常有共鳴!) 提出,碼農的真實想法和其他(在這一領域欠缺獲得成功所需要的能力的)人有條明顯的分界線。這條分界線是,據他所說,指針遞歸(如果好奇,可以參閱相關入門書)。

我在學校里了解到指針和遞歸,等我掌握它們的時候,它令人愉悅地顛覆了我的大腦,這種智慧的快感讓我想把學習計算機科學放在首位。但是,在課堂作業之外,我已經了然于心的概念助我把事情做好的次數已經越來越少。與此同時,當我幫助他人的時候,一次又一次發現人們無需了解任何東西就可以完成有趣而又有益的項目。

如果你足夠睿智的話,懷疑或恐嚇沒有一點意義。當然,你的任務越復雜、越深奧,你更需要精通于它。但是這并非意味著與世隔絕。除非你打算用代碼充滿整個生活,否則你不必成為一個遞歸領域的天才才能做你想做的事情。

沒有第一次就不會有下一次

當你第一次開始學習編程時,這種特殊的經歷很快就會出現:你會覺得已經搭建了所以認為需要的環境,已經檢查了無數次,但是仍然有問題。你不知該怎么樣開始修補它,而且錯誤信息(如果你很幸運地看到了)還在嘲笑你。此時此刻,你極有可能會試圖放棄,極有可能認為永遠都無法弄清楚。當我在第一次嘗試用c++寫程序的時候出現了這種情緒。運行程序,但是只得到了“segmentation fault”的提示。

其實,這種經歷對程序員(無論是菜鳥還是大神)來說是非常正常的,它無關你的智力、技術知識或者是否適合以編程作為終身職業。這種經歷會在你初學編程時出現,同樣也會在你作為經驗豐富的專家時出現。唯一的不同僅僅是你如何去應對它。

我發現菜鳥和大神之間最大的不同是信仰:邏輯和可發現的原因會變糟;問題是可修復的;達成目標的方法依然存在。“不工作”到“工作”的通道可能不是顯而易見的,但事在人為。

總有人告訴你“你做錯了”

括號應該放在下一行括號應該放在同一行使用tabs來縮進但是tabs是魔鬼。你應該使用存儲過程, 但是實際上你不應該使用他們。你應該總是給你的代碼添加注釋, 但是好的代碼不需要注釋

幾乎每一個問題都有許多不同的解釋,沒有惟一的“正確答案”。許多程序員善于提倡他們中意的方法,但是這并不意味著它是惟一正確的方法。去迎合其他人的經歷告訴我“我錯了”,在我職業生涯的早期,試圖找出他們是否正確是造成我緊張的一個原因。

如果你在團隊里編程,幾乎肯定會有人將你正在做的事情拿出來討論,有時他們是絕對正確的,而且事實上,調查你是否出錯總是一件有價值的事情。但是有時他們卻是徹底地瞎搞,或者重新提出一個古老而又無意義的爭論——遵循一個風格指南是最好的。

另一方面,如果你是那種享受古老而又無謂的爭執的人(嘿,語法呆子,我正盯著你呢),那你來對了地方。

總有人告訴你“你不是真正的碼農”

HTML并不是真的編程語言如果你不使用vi,你不是職業的真正的程序員懂C真正的碼農不使用Windows有些人永遠沒能力學習它你不應該學編程你不是一個計算機程序員(但我是)

“編碼”對很多不同的人意味著很多不同的事情,它也看上去和過去相比相差甚遠。而且很有趣的是,工具、包、框架讓新手或是受過訓練的開發者能夠更快更簡單的開發出會被歸類為“不是真正的碼農”的“碼農”。(見: “Return of the Real Programmer”)

在這背后最令人擔憂的是,如果任何人都可以稱自己是程序員,那么這個頭銜將一無是處。但是我認為這看守是毀壞主義者。

使用工具使得我們能夠更容易開發出我們希望的程序。如果這意味著你的游戲是基于Stencyl或GameMaker,而不是從頭構建,那很好。如果你第一次涉足編碼是HTML或Excel宏,那也很好。請做那些你覺得能堅持的。

隨著你獲得更多的便利,你會很自然地開始尋找這些工具的限制而非它的幫助,并開始尋找更強大的代替品。但是絕大多數時間,很少有人會看你的代碼或問你使用的是什么——你做的是什么才是最重要的。

擔心“名揚在外的怪咖”是慢性自殺

在之前,尤其在學校里的時候,我習慣于擔心很多關于我是否因為我的服裝、外表、我閱讀的領域選擇、甚至我的軟件定制選擇而被認為是“非真正的極客”(從而無法進入技術社區)。這浪費了我很多的精力,隨著我決定將其拋之腦后,我開始變得更加實在。

你需要這個內在感受:你善于編程的能力和你是否能融入技術族群無關。如果你在內心深處認為你永遠無法融入,那么你花費在證明自己而非做事實上的精力會加倍。如果在你眼里你是一個不爭的有名的極客,當你評估其他人的名氣時請埋于心底。這可能并非你所想的那樣。

堅持比方法更重要

關于“正確”的或“最好”的學習編程的方法的文章非常少,但是也有很多潛在的方法。你可以從中、完成交互式練習或者調試別人的代碼來學習。當然,還有很多種語言可供你選擇首先去學習。

在“自學編程”項目研討會上,最普遍的爭論是:你會在初學者材料中感受到愉悅,但是很快隨著難度的增加開始出現陡峭的曲線。你知道怎么樣在一張紙上打印文字,卻無處下手。你或許覺得只是在沒有真正理解的情況下走錯了方向,并怪罪于學習材料。

當你進入這個階段,大多數教程和在線資源默認你是有經驗的程序員,所以對你產生的幫助會微乎其微。由于“你不知道你不懂什么”,困難會隨之進一步加劇,甚至試圖規劃出下一步學習什么本身就是一個難題。

你在“學習編程”中無論遇到什么問題都可能會遇到坎,而翻過這堵墻唯一的途徑是持之以恒。這意味著你要始終嘗試新事物、學習更多東西、找到完成你的項目的一點一滴。如果你對為什么學習編程有著清醒的認識,你最終將更有機會獲得成功。

如果有問題不去解決,最終你會被堆成山的問題壓垮(雖然需要很長一段時間)。這時我前面提到的信仰就派上用處了。如果你堅信只要肯用時間和耐心,到時候你肯定將能夠完成整個項目。

英文原文發表于:Things I Wish Someone Had Told Me When I Was Learning How to Code

很久沒寫文章了,也很久沒翻譯外文了,組織語句能力直線下降啊,請湊合著看吧!其實應該也不至于那么不堪的。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容