Design Patterns 是一個開發人員設計出一個好維護、可擴充的軟體產品,必經的學習之路。
這次依然應邀 天瓏資訊圖書 的邀請,稍微描述了一下我對學習設計模式的一些建議與提醒,每個人有效的學習方式都不一樣,但學習設計模式過程中會碰到的問題,倒是大概都避不掉。
▎天瓏|主題|設計模式
傳送門:https://www.tenlong.com.tw/events/299
希望這些經驗跟建議,可以幫助更多的人,提昇自己的能力,找到自己那份程序員的本心,你會重新愛上自己與寫程式的過程。
#設計模式 #DesignPatterns
#天瓏
#91推薦專區
▎透過閱讀學習設計模式的方式
我建議一次買個幾本不錯的設計模式的書,看某個 pattern 無感或不懂時,就翻另一本是怎麼解釋跟舉例來說明這個 pattern 的,再無感或不懂,就再翻另一本,這樣的方式其實挺有幫助的。
例如:
① 物件導向設計模式-可再利用物件導向軟體之要素 (精裝典藏版) (Design Patterns: Elements of Reusable Object-Oriented Software) :四人幫 那本聖經,沒那麼好讀
② 設計模式之禪:還行,算是陪伴我度過挺多道檻的書
③ 深入淺出設計模式:完全適合初學者,但千萬不要只把自己的例子跟要解決的問題,侷限在不切實際的舉例裡面,一定要想到怎麼解決實務上的問題
④ 大話設計模式:寫得最好的其實是附錄講 OO 的部份,其他講 patterns 的內容,我其實並不推薦。(但這本是一開始引起我興趣的書)
▎為了模式而模式:過度設計
如果你身邊有模式瘋,寫物件導向設計或套用設計模式總是 over design 的朋友,強烈建議那三帖解藥,搞懂肯定有效:
① Refactoring to Patterns
② Simple Design (通過測試、展現意圖、去除重複、越少物件越好)
③ Test-Driven Development
#過度設計的設計模式或物件導向比沒設計還難救
#重點在滿足需求解決問題,#不在用了什麼模式
同時也有1部Youtube影片,追蹤數超過7萬的網紅在地上滾的工程師 Nic,也在其Youtube影片中提到,對於設計模式的學習有多方派系持不同意見,但仔細去思考,會發現設計模式的存在是避免自己發明愚蠢的設計在已經常出現的問題上,在日新月異的科技進步下,隨著商業邏輯更加複雜,軟體工程師所遭遇到的問題也一次比一次還難 Design Pattern 的存在是幫助思考,避免不必要的協作災難,只要能懂得這點並融會...
大話設計模式 在 在地上滾的工程師 Nic Youtube 的最佳解答
對於設計模式的學習有多方派系持不同意見,但仔細去思考,會發現設計模式的存在是避免自己發明愚蠢的設計在已經常出現的問題上,在日新月異的科技進步下,隨著商業邏輯更加複雜,軟體工程師所遭遇到的問題也一次比一次還難
Design Pattern 的存在是幫助思考,避免不必要的協作災難,只要能懂得這點並融會貫通,職業生涯中有更多的時間去學習不同的思考方式、軟體架構以及團隊管理
成為真正的資深工程師道路上,Design Pattern 絕對是一門主修科目,你可以不完全使用,但卻不能不知道
以下是學習 Design Pattern 的推薦資源,其中包含筆記、書籍和程式碼範例
✅ 我的部落格筆記(Ruby) https://blog.niclin.tw/2018/11/18/%E7%89%A9%E4%BB%B6%E5%B0%8E%E5%90%91%E5%9F%BA%E6%9C%AC%E5%8E%9F%E5%89%87-solid-ruby-sample/
✅ 設計模式學習筆記 https://skyyen999.gitbooks.io/-study-design-pattern-in-java/content/
✅ 七天學會設計模式:設計模式也可以這樣學 https://www.books.com.tw/products/0010750585
✅ 大話設計模式 JAVA 版範例: https://github.com/skyyen999/bigTalkDesignPatternJava
章節:
00:00 算我拜託你了
01:00 什麼是 Design Pattern
02:25 學習 Design Pattern 的好處
04:43 實際應用與學習方式
07:34 導入工作
喜歡影片的話!可以幫忙點個喜歡以及分享、訂閱唷!😘
━━━━━━━━━━━━━━━━
⭐ 蝦皮賣場: https://shopee.tw/bboyceo
⭐ instagram (生活日常): https://www.instagram.com/niclin_tw/
⭐ Facebook (資訊分享): https://www.facebook.com/niclin.dev
⭐ Blog (技術筆記): https://blog.niclin.tw
⭐ Linkedin (個人履歷): https://www.linkedin.com/in/nic-lin
⭐ Github: https://github.com/niclin
⭐ Podcast: https://anchor.fm/niclin
━━━━━━━━━━━━━━━━
🌟 任何問題或合作邀約信箱: niclin0226@gmail.com
#designpattern #前端 #後端
大話設計模式 在 大話設計模式練習與筆記 - 布萊恩的技術相談室 的推薦與評價
大話設計模式. 書中藉由兩個工程師的對話,與現實發生的情境來介紹Design Pattern,對我在學習Desgin Pattern的抽象概念幫助很大. ... <看更多>
大話設計模式 在 讀《大話設計模式》 - GitHub 的推薦與評價
讀《大話設計模式》 · 閱讀進度排定計畫 · 簡單工廠+ UML (p.02~22) · 策略模式Strategy Pattern (p.24~40) · 單一職責原則Single Responsibility Pinciple (p.42~47) · 開放 ... ... <看更多>
大話設計模式 在 [心得] 幾本讓我成長很多的書- 看板CompBook - 批踢踢實業坊 的推薦與評價
我是用C++這種可怕語言開發的開發者。
從研究所畢業之後,我只會C和verilog
當時,我只唸了VerilogHDL學會了Verilog,但是完全只是熟語法...
而C只靠大學課程的印象
一路走來,到了軟體公司,才發現業界有些公司其實....說強不強。
我想跟大家分享我看的書以及得到的東西。
希望有興趣的朋友可以看看....
1. K&R2
這本是很有名的書,一開始會看,完全是因為「C學會了再學C++」的誤解。
我看這本書方式,是從第一個字開始看到最後一個字。
因為這本書,讓我重新學習C語言,了解C語言的強項與技巧
enum、struct、pointer、funtion pointer....
2. 螞蟻書
會買這本,有兩個原因,第一,這是我大學時使用的課本(雖然版本不同),
第二,它比K&R2介紹了更多「前置處理器」的用法。
但是其實看完了,還是不太會活用,因為不會花太多心思在它身上。
這本書,我只看前置處理器的章節。
3. C到C++入門速成
這本是在義守大學圖書館找到的,其它大學的圖書館似乎不一定有。
這本很特別,是無意間翻到的,它比較了C和C++各個不同之處集結成書。
這本書,是從第一個字開始看,整本看完。
4. 世紀末軟體革命、從C到C++物件導向革命
為了了解「物件導向」特別去找了幾本,但是都沒看完,世紀本軟體革命,
我是買復刻版,還有找到其中一個作者簽名。(超幸運)
《從C到C++物件導向革命》是抄襲之作...
而物件導向是怎麼了解的呢?
把C++當作verilog寫一次,就明白了。瞬間了解類別是什麼!
5. C++ Primer 4/e
我看的是四版,建議看三版,不過五版已經出了。新功能看來都是人家的舊功能!
似乎五版值得買。
這本是和C++爸爸書一起買的,是為了要找C++好書而開始狩獵,這兩本聖經本
當然不能放過,讓我對C++有了全新的體驗。
這本書看到一半,但是因為當時是一邊看,一邊學,一邊練習,所以很紮實。(應該)
學C++有四個階段
C++ without OO ->做一些C在做的事
C++ with OO
C++ template
C++ general
最精彩的,是OO的部份,const的介紹,return this, return *this的用法、
覆寫運算子.....等。
把整個記憶程式的方式,以心智圖的方式,物件導向的形式呈現
之後,就常常跟人家說,挑一本好的C++入門書,看它的hello world就知道了!
看它的#include 是放stdio.h還是cstdio還是iostream。
看它是教你printf還是cout
看它的main回傳值是void還是int
看它有沒有return 0
不是這樣做不行,而是身為一本教學書,就要以標準寫法為範本。
另外,看別人會不會C++看它的set和get怎麼寫的就知道了。
雖然是coding style的問題,但是C++不把持一點,很容易寫成泥巴。
void SetValue(const Foo& Obj);
const Foo GetValue() const;
把權限最小化,就是最好的寫法。也許你會問為什麼,我只能說,當你要把物件丟
STL到裡的演算法使用時,它就會卡這個。
6. 人月神話
這本很有趣,我也忘了當初是在哪看見推薦的了。寫了這麼久的程式,你真的了解
自己在做的是什麼樣工作嗎?寫程式有什麼性質?有什麼特性?什麼該做?什麼不該做?
有哪些事是過去前人就說超難做的,會不會不知不覺走到了一個前人有說「要小心
不要往這方向去了」的路呢?
這本是開讀書會看的書,從第一個字看,整本看完。
最棒的就是第二系統效應、預估(很難)、巴別塔、外科手術團隊
還有最後的「沒有銀彈」
這本影響我最大的,是它一直提的「整體概念性」是寫程式最重要的一件事。
不管是設計、coding還是重構時,其實都用得上這個概念。
7. 軟體建構之道2
這本可以說是我個人生涯看了最棒的一本書,也是因為它在Inside的排行榜裡排第一名
所以不看似乎對不起自己是程式設計師這件事。
它從設計開始介紹,講了很多寫程式時會遇到的疑惑
這樣寫也可以,那樣寫也沒錯,但是語言這樣設計的用意,應該是兩種寫法不同。
究境是哪裡不同呢?一連串在寫程式要決策的事情,就是設計師的用心之處
在第八章 防禦性程式設計裡有提到條件編譯的使用方式,還有如何讓自己的程式
更強壯或更正確,assert()的使用,最後提到自殺式程式設計來提升
交付程式前的強壯程度。
有看過這種命名的嗎?
int temp; string str; return rtn; void doSomething(); float tmpValue;
void setValue(); int getValue();
是不是讓程式碼與人的距離愈來愈遠了呢?
最有趣的是連return的使用方式,它都有介紹!
程式設計做到最後,就像是把中文翻譯成程式語言。
class包含物件,與class繼承class的差別是什麼?have和is的差別!(超酷的)
前半部,是教你用技術提升品質。
後半部,是教你用管理提升品質。
繁體中文版超貴。建議看簡中會順暢很多,而且還有潤句子和校"完"稿....(懂吧?)
當初看是開讀書會,同時看簡中、繁中、英文。
沒有整本看完,看了前半段就放著了。
強烈推薦要看,尤其是有在code review的公司。
這本書影響我最大的是人月神話提的「整體概念性」實作在class、function、變數命名
分析了「整體概念性」與「名字」之間的重要性,還有命名帶的隱喻,會影射出概念。
讓程式碼可讀性提高,就像是寫文章的譬喻法啦!
8. Effective C++
只能說,要把C++寫得像C++就看Effevtive C++。
翻過,跳著看。沒細讀。它是超棒的書。
很想全系列買下來
之後有看到Effective C#不過只有英文版....
但是,簡中有部落格文章唷!
9. 敏捷開發的逆襲
這本是台灣人寫的!對敏捷式開發的流派Scrum介紹得很深入,也因此對敏捷式開發流程
有了一個範本,在了解其它流派,會更加的知道這是什麼。
這本書,從頭看到尾,很精彩!內容很多。
另外,後面介紹了很多工具在「實作」敏捷開發有很大的幫助(至少有工具),剩下的就是
建立工作流程與工作能力了(單元測試)
10. 大話設計模式
這本是C#的設計模式,是讀書會開的書。
從第一個字開始看,整本幾乎看完,但是看完還是不懂(這是Design Pattern書的特色?)
有些簡單易用的Pattern就可以快速的學下來。
有些難懂的,就先放著,有緣自然就懂了。
看C#的Design Pattern除了因為讀書會看之外,
C++這一本實在是一本「Design Pattern DM」,看看具體實例先
而且,C#的寫法有些C++都要自己手動來。就會上網多找資料。
這本書並不是每個例子都很棒,但是它會從爛code重構給你看(大多數的例子)
所以,還可以看一下重構的過程,我覺得練習一次很有體會。
我是用C++練習的,所以很多地方不需要指標的,要自己看,
要delete指標的要自己判斷一下
以上。
我一直相信,C++之所以難用,是因為它重點在「設計」,
而不是一直使用它既有的語法與功能。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 115.43.209.187
※ 文章網址: https://www.ptt.cc/bbs/CompBook/M.1411144371.A.A44.html
※ 編輯: Zephyr750 (115.43.209.187), 09/20/2014 00:43:29
※ 編輯: Zephyr750 (115.43.209.187), 09/20/2014 11:39:41
... <看更多>