編程是非常酷的一件事情,但是在酷炫的背后它對很多人來說還是挺難的。很多人在學習編程之初就被困難擊敗了。
當你不熟悉編程的時候,你可能會覺得無從下手,并且不知道如何運用學到的知識。只要你通過了這一困難的學習階段,你就會發現一個全新的世界。
以下是一些能夠幫助你快速提高編程技巧的建議。
編程入門篇:
1. 多寫代碼
學習某件事情最好的辦法就是練習。你應該花大量時間去構建和編寫代碼除非你認為練習對你的幫助不大。你可以從寫一些基礎知識相關的簡單程序開始。
2. 參與不同類型的項目
當你對某種開發語言非常熟悉之后,你應該開始做一些正事了。這樣做能幫你對那種開發語言的性能有個全面的理解,同時也能推動你去學習與這門語言相關的一些東西。過了段時間你會發現你經常用類似的方法去解決類似的問題,將很難從固有思維中跳出來去學習新的技能。
3. 精通一到兩門你使用的語言
讀一兩本關于這門語言的好書。重點掌握這門語言的先進開發理論知識,并且對它的核心和語言庫足夠了解。確保你所使用的語言中至少有一種腳本語言。
4. 開始閱讀
盡可能的多讀書。書能夠幫你系統的學習一門語言,并且能夠帶你了解這門語言的各個方面。對于初學者來說更應該多讀書。
5. 加入討論
當和別人討論的時候,你會產生一些以前從未出現過的主意或者想法。在這個過程中,你能夠從別人那里學到很多,同時這也是一次機會,通過分享你關于編程的看法檢查你到底對于這門語言掌握了多少。
6. 通讀公司內部的技術和培訓資料
比如說,谷歌有很多的代碼實驗室,有著幾十年經驗的大牛們用各種語言寫出來的最好的實踐在實驗室里用來做核心培訓和高質量的指導。如果你公司沒有類似的資源,谷歌的開源了一些他們的指南:https://code.google.com/p/google-styleguide/
7. 寫博客
當你學習編程時,你會遇到各種問題,并且想盡辦法去解決它們。你可以在博客中記錄下你解決問題的過程和你從中學到了什么。其它人看到你的文章后,也能從中獲益。同時,你還能和志同道合的人交上朋友。
至于花在學習編程上的時間,剛開始你應該擠出20%的個人時間致力于提高個人開發能力。如果可能的話,最好是每天一兩個小時而不是一個禮拜一天,因為這樣你能通過日常習慣去提高你的能力。最初的時候效果可能不明顯(當然如果你因為上網或者其他事情分心的話是沒效果的),但是這樣做的目的是讓你在長期的編程學習中有更高的效率。
編程提高篇:
1.首先仔細分析問題
2.接著好好想想如何解決這個問題
3.收集整理所有需求。
花點時間將最終產品要實現的目標寫下來,并且明確哪些是我們的目標用戶群。如果這一步能做好的話,將會給后面節約大量的時間,正所謂磨刀不誤砍柴工。
4.寫一個全面的實施計劃(或模型)。
如果是個小項目,這一步出來的可能只是一個基本的流程或者一個簡單的等式。
如果是個比較大的項目,這一步有助于我們將它切割成幾個模塊,然后再按下面的問題思考:
各個模塊需要執行什么任務
模塊之間如何傳遞數據
如何調用模塊中的數據
雖然比起直接入手去寫代碼,收集和規劃需求又枯燥又無趣,但是如果這一點沒有做好,后面的調試工作就會特別繁瑣。如果我們能花點時間,設計出一個正確的程序流程和結構,那么我們其實在寫第一行代碼之前就相當于已經成功了一半。
5.注釋我們的代碼。
如果你認為你的代碼可能需要做個解釋,那就去注釋它。每個函數都應該提前一兩行就先描述一下它的參數和返回結果。比起告訴你what,注釋應該說明的是why。還有記得在更新代碼的時候也要更新注釋。
6.使用統一的命名規則定義變量。
這將有助于我們追蹤各個類型的變量,并且對每個變量的用途一目了然。這一條的好處可不僅僅是方便我們打X = A+ B * C這么簡單,它會讓我們的代碼更便于調試和維護。目前普遍受歡迎的一種命名方法是匈牙利命名法,它采用的是類型前綴于變量的做法。例如,對于整體變量,我們可以使用intRowCounter,字符串就是strUserName。無論你的命名規則是什么都沒關系,只要保持一貫,并能簡單描述變量就行。
7.格式化編輯代碼,代碼結構可視化。
例如,碰到條件語句(if、else等)和循環語句(for、while等)縮進代碼。還有,可以在變量名和運算符號之間加個空格,運算符號指的是“+”、 “-”、“*”、“/”,以及“=”(舉例,myVariable = 2 + 2)。這不但讓你的代碼更直觀更優雅,還能使得我們的程序流程更加一目了然。
8.全面測試。
首先通過輸入我們期望的值來測試每個模塊能否獨立運作。然后試著輸入一些可能但是很少見的值,繼續測試。這基本上能暴露所有隱藏的bug。測試也有所謂的技巧,通過練習和實踐,我們誰都可以逐步建立起適合自己的技能。測試應包含下列情況:
極端值:正值用0和大于預期的最大值;文本用空字符串,參數用null。
無意義的值。雖然用戶不大可能會輸入亂碼,但是我們自己無論如何先測試一下為好。
不正確的值。在除法中輸入0,或者在預期是正數以及開平方根的情況下輸個負數。當輸入類型是一個字符串的時候,輸入非數字,然后看看是否會被解析為數字值。
9.練習、練習、還是練習。
編程也會隨著時代的前行而不斷進步。所以總有新的東西需要我們學習,——甚至更加有用、更加重要——當然,也總有一些內容值得我們溫故而知新。
10.減少需求改變的風險。
在現實的工作環境中,需求總是在不斷變化的。然而,如果前期我們對需求收集得非常全面,一開始的實施計劃就很有針對性,那么后期因需求改變導致的計劃不周和雙方產生誤會的可能性就會小得多。
我們可以在開始寫代碼之前,通過展示需求文檔和實施計劃,以提高進程的清晰度。這將有助于確保我們的計劃是真正按照客戶的要求去完成的。
如果將項目比作是一系列的里程碑,那么一次只要完成一個就可以了。記住,在任何特定的時刻需要考慮的東西越少,那么我們想得就越詳盡越完美。
11.由易到難,從簡入繁。
如果你的軟件復雜,那么我建議你最好先從簡單的模塊入手。例如,有這樣一個項目:請設計一個程序,要求能出現一個跟著鼠標方向走的漸變圖形,并且還能根據鼠標滑動速度改變形狀。
首先,設計一個正方形,寫一段能做到讓它跟隨鼠標的代碼,這樣就把運動追蹤問題先單獨拎出來解決掉了。當然這才是第一步。
接下來,將這個正方形的大小與鼠標的速度相關聯,即解決了形狀隨速度而變的問題。
最后,創建你想要的實際形狀,并把這三個組件連接在一起即可。
運用這種方法自然而然地就編寫出來了模塊化的代碼。并且每個組件都有它自己獨立的功能。這對代碼重用是非常有用的(例如,你完全可以在其他項目中應用第一步驟(用于實現鼠標跟蹤)的代碼),并讓我們的程序更容易調試和維護。