編程開發進階更重要的是掌握的核心設計思惟[圖]

編程開發進階更重要的是掌握的核心設計思惟[圖]:
「單獨寫一個瑣碎的代碼塊就等同於彈奏音階同樣,不幸的是,彈奏音階並不能教會你任何關於音樂的東西,而且很是枯燥」
這是 Eric S. Raymond 在他的文章《How to learn Hacking》中所描述的一段話。做爲一個已經從入門走到進階的編程者,我很是贊同他所說的這句話。
然而,大部分老師,課本和大學課程都會經過瑣碎的代碼塊練習來教授編程知識。
即便這樣的編程練習可讓你明白條件語句和循環的工做機制以及如何編寫一個基本的函數,可是卻不能讓你對編程有一個更深的思考。
瑣碎的代碼塊練習所存在的問題就是它不可以讓你作到如下四點:
提高你的代碼直覺-好比如何模塊化你的代碼
解決如何編寫一個可重用的程序,以便於擴展這個程序去解決新的應用問題
清楚如何權衡代碼的可讀性和簡潔性
關注如何保持良好和一致的編程風格
總之,他們沒有教會咱們關於建立更大程序所須要掌握的核心設計思惟。
編寫可擴展的代碼可不簡單!
除了這些缺陷,這種學習方式還很是無聊!擁有前面所述特色的代碼設計首先可讓你的程序變得有趣。編寫小型的代碼塊沒有足夠的空間讓學生去思考而且得到必要的代碼直覺。另外一方面,在真正的程序設計中,這些技巧又是很是必要的。
這意味着,除了編寫瑣碎的代碼塊,你必須依靠本身去發現問題,經過編程解決這個問題。
編程開發進階更重要的是掌握的核心設計思惟[圖]
找到一個好問題
一個好的問題能夠提供一個平臺,讓你在上面應用你的知識,看到它的效果,總結並改進,而後從新實現你的解決方案。
選擇一個你想解決的問題很是重要——這對你來講也許並不簡單,但同時也會讓你以爲「若是我寫一個程序去解決,這會很酷!」。當你嘗試編寫一個程序去解決你所關係的問題時,你將會有動力去學習和成長。你會總想着如何改進本身的解決方案。
找到一個好問題並嘗試去解決它一開始會讓你以爲很難,這只是由於你把標準定得過高。你可能看了不少遍《社交網絡》,而且想要讓本身的解決方案變成下一個谷歌或臉書。但這隻會讓你定立不切實際的目標,下降你的學習速度,耽擱你的發展。
記住,你的目標不是去寫一個價值十億美圓的軟件,而是經過編寫一個程序爲本身提供一個練習和學習的平臺。
找到好問題的途徑
你是否感受到本身在作一些多餘且無聊以致於可能讓本身變笨的事情?你是否曾但願能擁有一些聰明的寵物或精靈爲你作這些事情?你知道它們能夠把這些事情作的更快,由於它們不會像本身同樣偷懶。
你知道嗎,你已經有了這樣的寵物——你的電腦。每個單調枯燥的任務都提供了一個機會讓你去編寫一個程序,並告訴這個「聰明的寵物」應該怎麼作。
寫下好的解決方案
在你選擇好了問題以後,你須要制定最佳解決方案,讓咱們來看看Brian W. Kerninghan在他的書中是怎麼描述「好軟件」的。
「好軟件的產生有這些最基本的原則:簡易,好軟件的代碼是精簡和便於管理的;清晰,好的軟件可讓用戶很快上手;廣泛性,好的軟件能夠在較廣的用戶場景下使用,而且可以很好地適用新的用戶場景;自動化,好的軟件能夠將咱們從單調的工做中解放出來」
遺憾的是,只有少數的《xx編程入門》書籍涉及到了這些原則,更使人遺憾的是不少大學的編程課程徹底忽略了編程的這個方面。
當你有一個本身發現的問題,你將會擁有一個你很是關心而且願意持續優化它的解決方案。
在這一部分,我將要使用本身的一個例子來解釋我想要表達的東西。
在平常生活中,我常用Chrome標籤!但我發現了一點問題。
真的很是多!
問題1:爲具備長標題的網頁書籤添加註釋
若是你仔細看,你可能會發現我在這些網頁書籤的最後都添加了我的註釋。這是由於,有時候,我很難想起當初收藏網頁的具體緣由或動機。固然,網頁的標題已經能很好地解釋網頁包含的內容了,可是卻不能解釋我當初爲何以爲這些內容頗有用,這就是爲何我添加這些註釋的緣由。
我通常會在網頁原標題和個人註釋之間使用符號「||」分隔開,那麼,問題來了。
有時候網頁的原標題真的很是長,就須要「Ctrl+left」,跳到最後再添加我的的註釋!好麻煩!
我意識到這個問題可能不是很嚴重,可是它有時確實會減緩本身收集知識的速度。並且,正如我前面所說,咱們不是爲了製造一個十億美圓的軟件,問題雖小,着手解決它纔是最重要的!
問題2:將網頁書籤和標題一塊兒複製
我收藏了每個我懼怕失去的好網頁,而且根據它們所屬的話題進行納入到文件夾,添加註釋。所以,它們對我來講很是有價值。每當有人問我一些我所瞭解的話題,我都會嘗試引導話題,以便我能夠分享該話題的一些書籤文件夾。
不,我不是想誇耀本身知道一切或證實我不是自私的人。我是真的認爲這對他們有所幫助,由於:
這個文件夾包含了我關於這個話題的知識。經過網頁的標題和我的的註釋,得到這個文件夾的人就不僅是得到一堆超連接,還得到了它的附加價值。我相信這比口頭解釋和填鴨式灌輸更好。只有當人們本身去瀏覽了這些網頁他們才真正學到了東西。那麼問題來了,據我所知,Chrome沒法提供快速簡便的方式將網頁書籤和標題一塊兒複製。若是我複製一些網頁書籤,粘貼在一些編輯器裏面,我只能獲得一個超連接。
因此,若是我想要分享連接、標題(包括註釋),我就須要切換到編輯模式,全選標題,而後粘貼到別的地方,而後對超連接再作一遍一樣的事情。若是我想要分享一大堆書籤怎麼辦?就須要把前面的流程對每個網頁書籤作一遍!
一項很是單調枯燥的任務
然而,這纔是我理想中的爲Chrome添加網頁書籤的樣子:
我但願點擊地址欄右上角的星形圖標後能有一個「評論」輸入框伴隨着「名稱」和 「文件夾」.
我但願Chrome容許我下載書籤文件夾中的全部網頁到本地電腦上,而且存放在一個純文本文件裏。在這個文件裏,全部的網頁書籤會按照下面的格式展現:
○ 標題 - <bookmark_title>
○ 註釋 - <bookmark_comment>
○ URL - <bookmark_url>
因此我擦了擦個人神燈,「哦,精靈!這些是個人願望。可以請你讓它們成真嗎?」
解決方案
直到上個月,我甚至都認爲實際上沒有可行的方法。我認爲惟一的方法多是使用一個開源的瀏覽器,修改其中的代碼來知足本身的需求。
通過一些初步的研究,我發現我不該該這樣作。瀏覽器是最難和最龐大的軟件之一,我目前確定作不到修改瀏覽器的代碼。
而後,我閱讀了一個Quora問題「對於初學者來講有哪些很棒的程序項目」的回答。它描述了一個新手如何製做一個Chrome擴展將全部Facebook新聞推送中的圖片替換成了貓的圖片。
在這一刻,我意識到了瀏覽器擴展的力量,而且認爲它將會幫助我達成願望。
Chrome 瀏覽器擴展程序和Chrome. API
Chrome瀏覽器有一整套API可供使用,每一個API的名字都是這種形式:chrome.
API。(好比chrome.alarms API、chrome.bookmarks API等等)
任何人均可以使用它們建立本身的瀏覽器擴展程序。Chrome瀏覽器提供了讓開發者得以輕鬆建立更多抽象代碼的基本工具。
一個瀏覽器擴展程序只用到了普通的HTML/CSS 和JavaScript。我以爲哪怕對於初學者,也能輕易建立一個簡單的瀏覽器擴展程序。你所須要的只是一點關於HTML/CSS 和 JavaScript的知識。
我以前已經通讀了《Head First HTML with CSS & XHTML》,可是我徹底不懂JavaScript。我想要避開這個方案,由於我本來只是想要作個項目來提高本身已經掌握的編程語言的流暢度(Python or C++)。
但我也迫切須要一個項目來展現個人Github 我的資料。
是時候學習一門新的語言了
我決定學習JavaScript的基礎,好比變量、函數聲明和定義、循環和條件語句。這幾乎沒有花什麼時間,由於這些基礎在全部的編程語言中都是幾乎都是同樣的。
我會在建立擴展程序的過程當中學習其餘的JavaScript特性,因此如今我就能夠開始建立我本身的擴展程序了。
閱讀並學習文檔
多是由於瀏覽器擴展一直都不是很火,只有少數教程視頻或文章能夠指導你去建立一個瀏覽器擴展程序。
我發現我所須要的東西就在chrome.bookmarks API裏面。結果我發現這是一個不經常使用的調用,不多擴展程序會用到它,這意味着網上也沒有關於如何使用這個請求的教程。
在這以前,我都是從精心製做的教程和指導手冊學習知識,不須要花費太多精力。但此次,我只能經過閱讀這個文檔來學習。
這種感受就像,我在面對一個像兵工廠同樣龐大的工具包,可是隻有一本小型的用戶手冊可供參考。如今,我須要本身去辨別,哪些工具最有助於實現個人目標。
在作這些的過程當中,我意識到「Hello World」程序的重要性
我常常感受到「Hello World」程序被高估了。
個人意思是雖然它很是受新人的歡迎,可是它應該尚未好到讓全部的編程書/教程都須要從它開始的地步。
對我來講,它沒有足夠的吸引力。html

我從新設置了瀏覽器,以便於能夠在本地加載擴展程序。我按照文檔中的說明建立了一些強制文件。如今,我能夠開始使用bookmarks API 編寫真正的擴展程序。城南舊事(http://www.simayi.net/dushubiji/6110.html)讀書筆記摘抄好詞好句及感悟賞析,但是等等,若是設置有問題怎麼辦,若是我錯過了文檔中的一些關鍵性問題怎麼辦?我須要先搞清楚,以避免花了不少時間和精力後才發現程序沒法運行。

這個時候我才真正以爲我須要建立一個叫「Hello World」的擴展程序
我認爲「Hello World」程序與其說是你在項目中的第一個程序,不如說是項目能正常運行的保證。若是能正常運行「Hello World」,那麼個人項目一樣能夠正常運行。
問題1:解決了
這就是我當晚想出來的:
收藏當前的網頁書籤
我認爲網頁標題是書籤的一個很好的默認標題。因此,我沒有在彈出的窗口中添加「標題:」的輸入框。
在撰寫本文時,我寫的代碼沒有模塊化,也不便於管理,它只是能跑起來而已。我接下來會優化它,這纔是我真正的編程課題。
問題2: 不可解決?
據我所知,Chrome不提供任何方式讓你能夠生成並下載網頁書籤的文本文件到本地。這意味着我也不能下載這些網頁書籤。
重寫頁面
官方文檔爲我提供了一個解決方案。
Chrome. API 文檔
讀完後,我想,這就是我要作的。
我將要使用我自定義的書籤管理頁面來重寫本來的網頁書籤管理頁面。
在其中,書籤將不會像如今這樣顯示在可選擇的選項卡中。
若是對於每一個網頁書籤,都有簡單的文本表示,就像大多數其餘網頁同樣,那將會很棒(好比你正在閱讀的這個)。每一個用文本表示的書籤應該有以下的格式:
標題- < bookmark_title >
*註釋- < bookmark_comment >chrome

  • URL - < bookmark_url >雖然我尚未實現這個頁面,可是我有信心能在近期實現。感謝你的閱讀!
相關文章
相關標籤/搜索