結束程式設計師對程式設計的恨

itjhwd發表於2014-05-05

  用筆者的經歷現身說法,程式設計的確是一件需要極大、極大耐心的活兒。加上使用的是 Emacs 編輯器,會犯更多的小錯誤,解決起來也更加令人煩惱。耐心很重要。對於第五條,也比較贊同,筆者已經習慣了遇到錯誤去百度一下錯誤程式碼,同 時會瀏覽一下相關的錯誤例子以及原因,學習很快。最後一條同樣重要,周圍的很多同學,遇到一點小問題就跑到論壇問老師,個人很反感。我想:在現在這個階 段,只要你想,應該沒有你不可能獨立解決的問題。

  每個人剛開始的程式設計技術都不理想,所以我們決定列出一張清單,寫上大家都能接受的理由,還有提高程式設計能力的建議。

  1.  程式設計適合所有人嗎?

  開門見山地說,程式設計並不適合所有人。它比較適合那些有耐心去解決難題,改變生活的人。

  我們就以一個 16 歲的孩子克里斯蒂安·歐文斯(Christian Owens)為例子吧,他追隨他的英雄史蒂夫·賈伯斯,從事自己喜歡的工作。他從 7 歲開始接觸計算機。3 年後,他獲得一臺 Mac 電腦,隨後開始自學網頁設計。2008 年,他建立了自己的公司。 這是一個不少人都知道的小網站 Mac Bundle Box。該網站符合蘋果的設計指南和風格,在兩年的時間中賺到了人生的第一個 100 萬美元。

  他成功的唯一要素,就在於他做什麼事都有耐心。所以,如果你發覺自己缺乏某些激勵因素,或許那就是你無法取得成功的原因了。我繼續研究並最終發現,金錢推動著很多人勇攀高峰。

結束程式設計師對程式設計的恨

  克里斯蒂安·歐文斯

  2.  程式設計是一項需要花時間才能掌握的技術

  像其他東西一樣,程式設計本身就是一門藝術。是的,你最初可能會遇到麻煩,但是如果你堅持下去,你的程式設計技術將會得到提高,你會成為一個幹勁十足的 程式設計師。很多人被書呆子、白痴、天才兒童,甚至是程式設計本身嚇到了。不用害怕,無視他們,把精力集中在於你的技術有關的事情上面。我在大學剛開始學習計算機 時並不是很瞭解程式設計;在我認識程式設計之前,我是一名敢於提出問題並面對挑戰的程式設計師。

  3.  他們的觀點錯誤

  當人們開始抱怨不懂得傳授技術的專家、助教、蹩腳的編譯器、整合開發環境,甚至作業系統的時候,我已經習以為常了。只要你不斷的抱怨,你的程式設計技術只會原地踏步。所以,請用積極的態度面對問題吧。

  你知道“夢幻遊樂園”遊戲幾乎都是用匯編語言寫程式嗎?想想看吧。有志者,事竟成。

  4. 我一點都不理解抽象概念

  程式設計需要你創造性思考(think outside the box)。當你是初學者時,你會遇到演算法、資料結構、協議,還有一大堆讓你摸不著頭腦的東西。

  慢慢來,無論開始學習什麼,都要從點滴做起。如果你不瞭解維基百科,Google 一下,或者問那些知道的人(順便提一下,這是我學習新事物的祕方)。試著弄懂一些例子,直到你完全理解。

  如果你連基礎知識都不知道,你又怎麼能弄懂更高深的問題呢?

  5. 等等,我們可以藉助 Google

  當你在除錯程式碼時遇到困難,或者不知道如何解決某些問題時,Google 是你最好的朋友。由於程式碼抄襲的原因,我並不鼓勵藉助 Google 去解決問題。如今我支援這種做法,是因為有很多人也許碰到過相似的問題。你猜怎麼著!其他人在 Google 上面幫助他們解決問題,並提供解決方案。

結束程式設計師對程式設計的恨

  就這麼做吧。每個人都這樣,因為這是最明智的辦法。

  所以,如果你忘記怎麼去生成一個隨機數,你不理解一個程式錯誤,或者你只不過是解決不了某些問題,那就 Google 一下吧。如果你想更進一步瞭解如何掌握搜尋技巧,請參見國外開發人員 Andriy Solovey 在他的博文《如何使用搜尋技巧來成為一名高效的程式設計師》。

  6. 認真的規劃和設計?對,需要未雨綢繆。

  在我幫助他們程式設計之前,我會先看看他們的演算法。如果他們無法提供的話,我會讓他們先把演算法寫出來,然後他們就會知道為什麼他們的程式不能執行了。

  所有的演算法都是一個框架,是一個程式的根基。很多初學者都不去設計演算法,只是根據他們的想法去程式設計。當問題發生的時候,他們就迷失瞭解決問題的方向,程式變得難以除錯。

  所以下次,省下你自己的時間,把程式設計的規劃寫在紙上。直到你知道如何去解決問題之後才動手程式設計。我是這樣做的,這個方法非常奏效。

  你不希望你的程式看起來像個蹩腳的傢伙吧。所以你在程式設計之前得好好地規劃一下演算法,未雨綢繆。這也是成為一名優秀程式設計師所需要知道的 15 件事之一。

  7.  我的程式有一大堆錯誤!!我該怎麼辦??

  冷靜下來,放鬆點。錯誤是難免的,而且出現的頻率比你想象的還要多。錯誤發生的時候,往往伴隨著有行數、簡單的說明,有時候還有一條建議。返回 去盡力弄明白哪裡出錯了。如果還弄不明白,那就把出錯資訊拷貝複製貼上到 Google 中。大多數時候都能找到相應解決方案。

  另外我們可以試試以簡短片段的方式編碼和頻繁地編譯。這個方法可以保證你不用關注所有你不理解的錯誤提示資訊,並且將提高你的程式設計速度。

  8.  我不理解程式語言、語法、或者程式設計環境

  好吧,如果你不理解這些東西,那確實是一個大問題。在我的高階設計培訓班,我們正在用 Ogre3D 語言設計一個視訊遊戲。我跟你說吧,這不是最好的經歷,因為我們從課程一開始我們一直在程式設計,從來就沒有很好地認識編譯環境。我們終止開始了 8 周的專案,不得不花費兩個星期,平均每天 8 小時的時間去做這件事。最後幾天我們花了超過 14 個小時的時間,同時上了3-4 節其他課程……

  這段經歷教導我們在開始程式設計之前,要預先花時間去真正理解與程式語言相關的所有細節,語法、概念和編譯環境有關的所有東西。這樣做,節省的不僅是小時數,而且是天數。

  9. 但這個問題好難!

結束程式設計師對程式設計的恨

  看看我是如何解決這些難題的!!

  你有程式演算法嗎?這是你的第一個問題。如果你還沒有解決,那就休息一下吧。人們在離開電腦時,往往會想出怎樣去解決問題。我試過很多次在睡夢中 制定出問題的解決方案。很多時候一個程式設計師需要的全部東西,只是一些新鮮的空氣,甚至一種娛樂而已。這能讓你的思維煥然一新,可能會讓你看到之前你所看不 到的東西。

  甚至有時候,解決問題的最好辦法需要一個優雅的環境。所以下次你在嘗試為一個 IPhone 遊戲提供費解的主意時,試試 Doodle Jump 這款遊戲吧。你所需要做的只是跳躍運動,別人會設法賣出五百萬張這款遊戲光碟。

  10.  我在等我的朋友來解決這個問題

  為什麼一些人程式設計不怎麼樣,這也許是上面所提到的之外的頭號原因了。如果你所做的就是等你的夥伴來幫你解決問題,那麼你將學不到任何東西。很明確的說,他們花了時間去試著解決問題,不過最終,經驗才是解決問題的關鍵。

  所以停止去依賴別人,以及學習如何獨立做事。如果你無法這樣做,或許就是你為什麼不能成為一個大人物的原因了。(也許你有幸成為像 Mark Zuckerberg 那樣的人)。

  感謝 Tony、Jay、 Chris、 William、Miguel、 Al、 Roby、Joseph、 Felicia、Benjamin、Jesse、 Pierre 和 Erick 給出的建議。

相關文章