顯示具有 程式設計/APP開發 標籤的文章。 顯示所有文章
顯示具有 程式設計/APP開發 標籤的文章。 顯示所有文章

2026年9月11日 星期五

Spring Boot:建置與執行

 


在漫長的 Java 語言開發平台發展路途中,自從由官方主導的 Java EE 被開源社群擁護的 Spring 攻城掠地後,長期不動如山的 Servlet 網頁程式開發技術,也逐步被 Spring MVC 取代。然而,Spring 框架越來越龐大的類別庫相依性,卻成為 Java 工程師建置開發環境時的夢魘。Spring 開發團隊敏銳地發現,如此龐大的開發成本將會阻礙框架的普及,因此推出了 Spring Boot。其簡化的依賴性管理、簡化的部署以及自動組態三大特性,讓 Spring Boot 重新成為 Java 開發者喜愛的程式框架。

其實之前就已經看過兩本 Spring Boot 的專書,也已經將手上的專案全數改成 Spring Boot 框架。因此,閱讀這本《Spring Boot:建置與執行》的原意,只是單純想湊齊看完市面上這一主題的書。特別是由O'REILLY出版的電腦叢書,早期在 Java 領域裡幾乎等同於官方教材般的尊榮地位。雖然隨著網路興起,類似資訊隨手可得,讓系列叢書逐漸變得乏人問津,不過這兩年開始發現,碁峯和O'REILLY聯手出版的新書,有著充實的技術說明,輔以實用的程式範例,相當類似我最欣賞的Manning出版社In Action系列書籍。而在看完這本《Spring Boot:建置與執行》後,一方面吸收到之前兩本書中所沒有的內容,另一方面也重新溫習了已經學過的技術。

書中從最基礎的Spring Initializr專案建置工具講起,先用最單純的 Hello World 程度 REST API 程式,向讀者展示 Spring Boot 是如何簡化網頁程式開發的複雜度。接著再話說從頭,細數應用程式組態在 Spring Boot 框架下的規則,以及如何靈活運用。有如JMX 的致動器(Actuator)便是這本書獨有的章節;其他像是如何打包、部署成容器,也都是其他書裡沒提過的內容。和資料操作有關的 Spring Data 幾乎是必講的重頭戲,書中一次展示如何連接關聯式資料庫、MongoDB、Redis 三大儲存體,讓讀者不論挑選哪一種儲存技術,都可以找到參考範例。

全書我覺得最值回票價的部分,是學到了 Spring WebFlux 的反應式網頁程式(Reactive Programming)技術,以及之前一直沒有實作的 WebSocket 應用。也因此茅塞頓開地弄懂了 React、Reactive、WebSocket 三種常同時被提及,卻又截然不同、用來改善網路程式瓶頸的技術。甚至讓我破除了單一主機 TCP 連線只能到 65,535 條的迷思,可說是收穫滿滿,開卷有益莫過於此。


Throughout the long history of Java development platforms, Java EE was once the official choice for Java developers. However, after Spring, supported by the open-source community, gradually became more popular, the long-standing Servlet-based web development technology was also gradually replaced by Spring MVC. However, the growing number of library dependencies in the Spring Framework became a nightmare for Java engineers when setting up their development environments. The Spring development team quickly realized that such a high development cost could prevent the framework from becoming more popular. So, they introduced Spring Boot. With three major features — simplified dependency management, simplified deployment, and auto-configuration — Spring Boot once again became one of the most popular frameworks among Java developers.

Actually, I had already read two books about Spring Boot and had also migrated all of my current projects to the Spring Boot framework. Therefore, my original reason for reading *Spring Boot: Build and Run* was simply to complete my reading of the books available on this topic. In particular, computer books published by O'Reilly once had an almost official-textbook-like status in the Java field. However, as the Internet became more popular and similar information became easily available online, these book series gradually became less popular. Over the past two years, however, I have noticed that the new books jointly published by CITE Publishing and O'Reilly provide detailed technical explanations along with practical programming examples. They are quite similar to the *In Action* series published by Manning, which is one of my favorite book series. After finishing *Spring Boot: Build and Run*, I learned some new things that were not covered in the previous two books. At the same time, I also reviewed some technologies that I had already learned.

The book starts with the basic project creation tool, Spring Initializr. It first uses a very simple Hello World-level REST API example to show readers how Spring Boot can simplify the complexity of web application development. The book then goes back to the basics and explains the rules of application configuration in Spring Boot and how to use them flexibly. The Actuator likes JMX is one of the topics that I had not seen in the other books. Other topics, such as how to package an application and deploy it as a container, are also not covered in the other books I have read. Spring Data, which is related to data access, is naturally one of the major topics in the book. It demonstrates how to connect to three major types of data storage: relational databases, MongoDB, and Redis. No matter which storage technology readers choose, they can find useful examples in the book.

The part of the book that I found most valuable was learning about reactive web application development with Spring WebFlux and finally getting some hands-on experience with WebSocket, which I had never implemented before. Because of this, I finally understood the differences between React, Reactive, and WebSocket. These three terms are often mentioned together, but they are actually completely different technologies that can be used to address different kinds of problems in web applications. The book even helped me get rid of my old misunderstanding that a single host can only have 65,535 TCP connections. I learned a lot from this book. This is probably the best example of how reading a good technical book can be truly useful.


2026年7月12日 星期日

Java程式設計師應該知道的97件事:來自專家的集體智慧

 

ISBN:9789865027148

我自從約15年前因為專案需要實作訊息佇列,開始著手研究 Apache ActiveMQ 這個開源產品後,程式開發的重心也從微軟的 .NET 平台轉向 Java。而後又更進一步採用 Apache Camel 這個開源框架打造訊息交換平台,接著步入 Hadoop 大數據開發領域等因緣際會下,就此熟悉並喜愛 Java/Apache 相輔相成的軟體生態系。想當然耳,看到這本《Java程式設計師應該知道的97件事》的書名,毫無遲疑地就會買來翻閱,想瞧瞧所謂專家們的智慧。

這本書的編輯形式相當獨特,它匯集了97位頂級的 Java 開發人員,請他們各自以一篇文章分享自身認為 Java 程式設計人員最該關注的事情。由於書後的附錄收錄了這群人的經歷簡介,可以發現他們每一位都足以被稱為大神的頂尖工程師,不論是出身正統科班的 IT 博士、開源專案的貢獻者、資訊書籍的作者,還是服務於大型企業的顧問、講師。來自四面八方的宗師級人物,依據他們各自深切關心的議題,文章探討的內容也因此五花八門,從 Java 語法細節、JVM 效能工具、非 Java 的 JVM 語言,到軟體測試、專案管理、參與社群等等。內容可說是超乎想像地豐富,但又名副其實地淺嘗即止。

所謂人多口雜,此書的缺點也輕而易舉地浮現,連書籍編輯都直接在序言中提出,97位專家的建言肯定會有相互衝突的部分,而且很多文章的重點可能放在非常枝微末節的語法問題,因此會產生一種奇妙的認知悖論:如果你讀了能產生共鳴,那表示你早就懂了;如果你的程度還不夠,看了也形同嚼蠟。整體來說,閱讀這本書的過程,既沒有學習到具體技能的成就感,也沒有獲得實用新知的充實感。對現階段的我而言,讀起來如同雞肋,只是多了一本曾經讀過的電腦書的回憶。

About fifteen years ago, I started working with Apache ActiveMQ, an open-source message broker, because I needed to implement a messaging queue for a project. Since then, my main development focus has gradually shifted from Microsoft's .NET platform to Java. Later, I adopted Apache Camel to build a message integration platform. Combined with my subsequent experience in Hadoop and big data development, I gradually became familiar with—and grew to appreciate—the Java/Apache ecosystem and the way its open-source projects complement one another. So when I came across the title *97 Things Every Java Programmer Should Know*, I didn't hesitate to pick it up. I was curious to see what insights these experts had to offer.

The format of this book is quite unique. It brings together 97 experienced Java developers, each contributing a short article about what they believe every Java programmer should know. The appendix includes a brief biography of each contributor, and it's clear that every one of them is a highly respected expert in the field. They include PhDs in computer science, contributors to open-source projects, authors of technical books, consultants, and trainers working for major companies. Because the contributors come from such diverse backgrounds, the topics covered are equally diverse. They range from Java language details, JVM performance tools, and JVM languages other than Java, to software testing, project management, and participating in open-source communities. The breadth of the content is impressive, but each topic is explored only briefly.

As the saying goes, "Too many cooks spoil the broth." The downside of this format becomes apparent as well. Even the editors mention in the preface that the advice from 97 experts is bound to contain conflicting opinions. In addition, many articles focus on extremely subtle language details. This creates an interesting paradox: if an article resonates with you, you probably already know the topic well. If you don't have enough background knowledge, however, the article may be difficult to appreciate or learn from. Overall, reading this book didn't give me the satisfaction of learning practical new skills, nor did it leave me feeling that I had gained many useful insights. At this stage of my career, the book felt somewhat underwhelming—neither bad nor particularly rewarding. In the end, it simply became another technical book that I can say I've read.


2024年5月12日 星期日

敏捷與Scrum軟體開發速成

 

對於軟體專案管理方法,始終沒這麼引起我的興趣。畢竟第一線研發工程師的日常,忙著找解法和實作程式碼才是工作重心,至於專案範圍、時程主要還是讓專案經理煩心。然而最近怡好參與一個採用Scrum管理方法的新專案,一開始難免一頭霧水進退失據,想來只好反求諸己,拿這本敏捷與Scrum軟體開發速成來補補知識量,以便更快調整好步調完成任務。

愛書人總會被書所關照,隨意挑選的一本Scrum著作,出乎意料地是言簡意賅的精典作品。有別於瀑布流程將軟體開發劃分成需求收集、設計、編寫程式和測試,採用一切都得事前設計的思維(BDUF-Big Design Up Front)。敏捷開發則是主張漸進的累積,以一點點的需求收集、一點點的設計、一點點的編寫程式和交付一點點的價值貫穿整個專案。敏捷價值觀如下:
個人與互動 重於 流程與工具
可用的軟體 重於 詳盡的文件
與客戶合作 重於 合約協商
回應變化 重於 遵循計畫

不過理想很豐滿,現實很骨感,這種顛覆傳統的專案管理手法,前提必定要出資者理解與採用,不然若是瀑布思維的客戶遇到敏捷思維的開發團隊,雙方對做完了的定義完全不同,肯定會導致衝突與齟齬。

在Scrum團隊成員分成三類角色,代表客戶提出需求與排定優先順序的產品負責人,主導Scrum流程與會議的Scrum教練,以及實際從事開發任務的團體成員。三個角色各司其職卻又要充分的協同作業以獲得團隊共識。由於敏捷開發與瀑布法的差異甚多,如果團隊成員沒被明確告知各個角色之間的責任,將會出現不可預測的管理風險。最明顯的例子就是在瀑布法位於最末端的測試,在改敏捷開發時必須融入在每個小週期內完成,甚至是連系統開發文件也被包含在一點點的設計工作裡。也因此採用敏捷開發的團隊多半也樂於懷抱測試驅動開發的程式撰寫流程。

敏捷與Scrum軟體開發速成是本值得一看的佳作,特別是想瞭解Scrum管理的獨特之處。然而這些理論與觀念,如何真正促成專案的成功,最終的變數還是執行的Scrum團隊成員。這也是Scrum管理沒有明確聲明的前提,團隊成員必須擁有相當程度的實務經驗與技術能力,因為產品負責人只負責提出客戶需求,要怎麼如質如實地打造出堅若磐石的軟體,反而是由團隊成員主動反饋、規劃和實作。軟體開發的道路上,不論是管理手法或是技術架構,本來就沒有可以一勞永逸地適應各種場合的解決方案。如果以為敏捷開發是可以確保專案開發神功護體的銀色子彈,那可誤會大了。

2023年2月18日 星期六

玩真的!Git ? GitHub 實戰手冊 - coding 實境、協同開發、雲端同步,用最具臨場感的開發實例紮實學會!



Git工具在軟體版本管理領域中的地位我想已經不用多言,基本上除非是上古時期的恐龍工程師,絕大多數的碼農都至少熟悉一種版控工具,而Git是其中的佼佼者。它被廣泛地整合到各種IDE(整合開發環境)中,也有數種方便好用的GUI(圖形使用者介面)工具,一但有協同開發的需要,Git對軟體工程師而言是非常友善的選項。

話說回來,也因為工具整合的太好,常見的操作根本用不著親自下指令,所以許多人連基本的Git指令都沒打過。更別說一些合併失敗的異常情況,是需要瞭解Git的設計與觀念才能迅速、正確的排除。如果沒打好基礎,偏偏又在專案Deadline前遇到,那可真的會讓人冷汗直冒。而這本「玩真的!Git ? GitHub 實戰手冊」正是以實例帶領讀者利用最符合職場開發情境的範例,完成一項又一項具體的Git任務,讓你從初學邁到進階的一本佳作。

不論是全域參數檔設定、修改/壓縮commit註解和運用stash暫存區等,這些被一般書籍視為「進階」的Git功能,書中都用簡明扼要的描述並配合直接的例子讓讀者心領神會,對比其它以Git為主題的書,這本的CP值是遙遙領先。最終章更是將使用Git時常困擾開發者的一些疑難雜症條例出來,一一提出具體解法。這本書放在案頭,可以讓你有如服下定心丸般,盡情使用Git來滿足協同開發與版本控制的需求。

2022年12月25日 星期日

最親切的Git入門教室


身為程式開發人員,若不曾用過版本控制軟體,那可真的不夠專業。畢竟程式碼錯綜複雜,專案開發時又常涉及一整個團隊成員。如果沒有穩定可靠又方便操作的檔案管理工具來輔助,中大型的軟體專案在開發與後續維護時,肯定是事倍功半自找苦吃。市面上知名的版本控制軟體不少,而Git肯定是時下最廣為人知且流行的開源碼方案。

許多工程師和我一樣,日常作業是透過便利的Git用戶端工具來操作Git指令,「知其然,不知其所以然」,雖然能靈活地使用Git進行軟體開發業務,但對Git的設計概念還是一知半解。此時回到原點從頭瞭解Git觀念是相當划算的自我投資,而「最親切的Git入門教室」正是本面向初學和想打好Git基礎的入門書。

如同作者所說,講白了Git操作不外乎「複製(Clone)」、「提交(Commit)」、「推送(Push)」、「拉取(Pull)」。實務上,令人煩心的都是在排除程式碼裡的「衝突(Confict)」,再「合併(Merge)」程式碼來提交結果。雖說Git操作很制式,但對新手來說,剛開始時,肯定會對「暫存區(Stage)」的設計有點摸不著頭緒。一查資料,接連不斷又出現「儲存庫(Repository)」、「追蹤分支」...等Git特有的名詞,更讓使用者手足無措。不用擔心,抱著輕鬆的心情備好一台電腦,隨著「最親切的Git入門教室」的內文一步步練習,你將打下扎實的Git基礎。
 

2021年10月16日 星期六

Eclipse完全攻略(第四版)[Gradle自動化建構Java開發專案]

 

工欲善其事,必先利其器。Java這種編譯式語言不像直譯式語言(Shell Script, Javascript)即寫即用,因此在程式開發的實務上,工程師多半會挑選順手的整合開發工具(IDE)來使用。Ecplise便是在Java業界老牌的IDE,雖然近年來IDE的後起之秀不少,但它依舊保持極高的市佔率。

「Eclipse完全攻略(第四版)[Gradle自動化建構Java開發專案]」一書是日本人撰寫,由於該系列會不斷地配合Eclipse IDE新版推出新作,在日本儼然成為Ecplise的非官方手冊。台灣的繁體中譯本有出二、三、四版,由於我先前看過第二版的「Eclipse完全攻略: 從基礎JAVA到PDE外掛開發」印象不錯,也想粗淺地瞭解一下它副標中的「Gradle」,所以這次就買了第四版來瞧瞧。

在IDE基本功能的介紹算是可圈可點,除了原本開發中常用的功能外,書中會說明在操作Eclipse時常會到的觀念/詞彙(視景、工作區),也分享不少實用但略嫌冷僻的設定步驟(如何關聯副檔名、如何進行檔案差異比較)。但從「開發Web應用程式」的章節開始,就可以體會到這本2015年著作的致命傷...「太舊了」。介紹的外掛程式(Plugin)和軟體框架都是近十年前的東西,而Gradle的章節更慘,工具介面的功能完全不同,沒有參考價值。

近年來我已經不再急切地大肆添購電腦書,其中最關鍵的原因是「沒辨法在賞味期限前看完」。IT技術一日千里,特別在工具和產品的領域,幾乎是年年有新版。若要隨著一本幾年前的電腦書按步就班地操作、練習,光是軟體版本的差異就讓人心灰意冷。因此我現在是秉持著「工具型的電腦書,有需要再買」的觀念,盡量讓每本讀過的書發揮它最大的效益。而這本「Eclipse完全攻略(第四版)」,只能套句夏亞的名言「這是年輕犯下的錯」。


2021年8月25日 星期三

Python大數據特訓班(第二版):資料自動化收集、整理、清洗、儲存、分析與應用實戰

 

大數據的定義中有四V,巨量(Volume)、快速(Velocity)、多樣(Variety)和疑真(Veracity)。我在數據工程的實務中,主要是負責大數據平台Hadoop和Spark平台的維運與開發,面對多樣化資料(Variety)的處理是相對陌生的。恰好看到這本「Python大數據特訓班(第二版)」,主軸環繞在使用Python語言進行網路資料擷取、數據清洗與儲存等實用技術,想當然耳要買來研習一番。

Python世界中有五花八門的模組可讓工程師運用,而書中挑選的Numpy、Pandas和Matplotlib都是數據處理時核心的選項。比起自個在Stack Overflow網站中查閱零碎片段的程式碼,書中以小節為單位,漸進式地展示這些模組的用法,整理了許多執行數據工程任務時常用的功能,讓我覺得十分受用。相信熟讀「Python大數據特訓班(第二版)」後,未來在面對專案的數據爬蟲需求時,能充滿自信地說一聲「I'm ready」。

全書內容簡潔充實,很適合做為大數據入門的教材,若搭配個兩天16小時的上機練習,完全就是一堂收費上萬元的資◯會課程,可以學到基礎的網站爬蟲與數據清洗實務。可惜的是雖然書名有寫著「第二版」,但看來再版時編輯並沒有再次詳細檢閱內文。書中後半的練習無法讓讀者照本宣科地完成,原因是當做範例的網站頁面內容已有變動。對初學者來說肯定十分苦惱,但轉念來看,如果把它看成進階的練習題,強迫讀者活學活用剛從書中學會的技巧,自力完成分析網頁結構的挑戰,倒也不是件壞事。

 

2020年7月26日 星期日

演算法圖鑑:26種演算法 + 7種資料結構,人工智慧、數據分析、邏輯思考的原理和應用全圖解




依舊記得在自學程式的過程中,看過某本電腦書上寫著「程式=資料結構+演算法」,簡單又有說服力,便對「演算法」這詞彙留下深刻印象。那時真心覺得要成為一個程式高手,肯定得在演算法下苦功。更因此到某大學的資訊工程研究所在職專班,修習「計算機演算法」學分,原文課本唸得我嫑嫑的。

隨著工作經驗的與日俱增,漸漸地不再迷信演算法對工作實務的重要性。不過這是因為我從事的是應用系統(AP)的設計/開發,即便後期主要在做大數據/機器學習的應用,也是直接受惠於高階程式語言和各種開源函式庫/架框。這領域的工程師已經很少花費心力在處理底層運算中枝微末節的效能議題,像Big O這個評量算法複雜性的衡量單位,真的在職場上沒遇到有同事拿來相互討論。

這不表示程式設計師可以不用瞭解精典演算法背後的概念。列表(List)、陣列(Array)、堆疊(Stack)、佇列(Queue)等資料結構,是各種程式語言中必備的核心類別/元件。而排序(Sort)算法則是實際開發時最常被使用到的基礎算法,瞭解不同排序算法的優缺點,會大大地改善程式執行的效能。因此「資料結構」和「排序算法」這兩章可視為程式工程師必備的業務知識(Domain Knowledge)。

陣列搜尋、圖形搜尋、分群以及最後一章的「其它演算法」則是各擅勝場,在特定應用領域中都是最廣為人知的核心演算法。最值得一提的是第5章介紹的「安全性演算法」,它從最基本的數位加密觀念開始介紹,一步步地擴展到「共用金鑰密碼系統」和「公開金鑰密碼系統」,而後者正是目前網站加密技術的核心。「數位簽章」和「數位憑證」說明了HTTPS的運作原理,更是網頁程式設計師不可遺漏的業務知識。

嚴格說,書名副標提到的「人工智慧、數據分析」有點言過其實。所提到的資料結構和演算法,對於數據分析、機器學習/人工智慧領域,都是不足掛齒。本書適合給有志成為程式設計師的人當做學習教材,抑或是程式設計同業用來複習或做為消遣的小讀物。在主旨為講解計算機演算法的書海中,這本「演算法圖鑑」是最容易讓讀者吸收的傑作。

2018年11月29日 星期四

Flask網頁開發第二版


在大數據、機器學習和人工智慧喊得震天作響的現在,Python語言得利便於數據分析的優勢,儼然成為新世代的首選程式語言。從事軟體開發已經十多年,後半段的時間都是在處理後端資料面的應用,已經好多年沒有開發第一線的網站程式了。之所以研究起Python網頁開發技術,主要是將PySpark機器學習模型包裝成線上可用的API服務。向同事打聽主流的Python網站開發框架有那些後,就挑了比較輕便的Flask來學習。

「Flask網頁開發第二版」一書旨在教導讀者如何使用Python開發網頁程式。它手把手的帶領讀者,用Flask框架來打造一個小而美的部落格網站。完整地介紹了網站開發中各種核心元件的觀念與實作,從基本的前端表單元件、資料庫ORM,一路到API、測試、效能等進階議題。用300頁的內容就讓讀者進入Python網站開發的領域,作者在書籍章節設計上的巧思令人折服。

雖然多數的核心元件的章節頁數不多,僅講說了最基本的概念和功能。想要深入瞭解各元件的細部實作,得另外再找其它資料研究。但對於想要在短時間內掌握Python網站開發技術的工程師而言,「Flask網頁開發第二版」是非常不錯的敲門磚。

2018年3月30日 星期五

Python網路爬蟲王者-Selenium

ISBN:9789863794127

相信時致今日,沒有人可以否認網路上的資料近乎無窮無近,只端看你要如何使用它。

《Python網路爬蟲王者-Selenium》完全是目的導向的工具書。目標讀者是有心瞭解網路爬蟲技術的人。書中從基本的網頁結構開始講解,尊定讀者後績學習的基礎。再藉由一小段一小段的程式練習範例,讓讀者自然而然地熟習網頁元素定位的技巧。在看完第4章之後,我已經能完成工作上需要的網路爬蟲任務了。

書本的中後半段,是把重心轉向網頁程式的自動化測試。這原本就是Selenium當初出被開發出來的用途。只是Selenium實在太好用,所以僅是拿來當成網路爬蟲的工具,就已經是值回票值了。網頁程式自動化測試目前在台灣IT圈,應該不算普遍被採用的技術(人工測試比較多),對於網頁程式工程師來說,多瞭解絕對是好事,或許能有派上用場的一天。

如前文所述,網路上的資料什麼都有、什麼都不奇怪,藉由網路爬蟲的協助,取得有意義的資料來做分析、應用,用以優化企業流程,在未來是各行各業都可能探用的作法。從事後端工程師職務的從業人員,都應視為基礎能力的一環。

I believe that, even today, no one can deny that the amount of information on the Internet is almost endless. It all depends on how you choose to use it.

**《Python Web Scraping King – Selenium》** is a very practical book with a clear goal. It is written for people who want to learn about web scraping. The book starts with the basic structure of web pages, building a good foundation for further learning. It then uses short programming exercises to help readers gradually become familiar with how to locate elements on a web page. After finishing Chapter 4, I was already able to complete the web scraping tasks I needed to do at work.

In the second half of the book, the focus shifts to **automated testing** for web applications. This was actually the original purpose for which **Selenium** was developed. However, Selenium is so useful that using it only as a **web scraping** tool is already worth the price of the book. Automated testing for web applications is probably not yet widely used in Taiwan's IT industry, where manual testing is still more common. For web developers, learning more about it is definitely a good thing. You never know when it might come in handy.

As mentioned earlier, the Internet contains almost every kind of information you can imagine. With the help of web scraping, we can collect meaningful data for analysis and practical applications, and use it to improve business processes. In the future, this could become a common approach in many different industries. For people working as backend engineers, web scraping should be considered one of the basic skills worth having.