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

編程開發進階更重要的是掌握的核心設計思維[圖]:
“單獨寫一個瑣碎的代碼塊就等同於彈奏音階一樣,不幸的是,彈奏音階並不能教會你任何關於音樂的東西,並且非常枯燥”
這是 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”程序被高估了。
我的意思是雖然它非常受新人的歡迎,但是它應該還沒有好到讓所有的編程書/教程都需要從它開始的地步。
對我來說,它沒有足夠的吸引力。

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

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

  • URL - < bookmark_url >
    雖然我還沒有實現這個頁面,但是我有信心能在近期實現。感謝你的閱讀!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章