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