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