《AI-Powered Software and System Design》是《Generative AI for Software Development》的第三部分課程,旨在幫助我們全面理解生成式 AI 在軟體設計與系統開發中的應用,並通過三週的學習,構建從資料序列化、配置驅動開發到設計模式應用的完整技術路徑。課程結合理論講解與實作練習,為我們提供了一個從基礎概念到高階應用的學習框架。
第一週的課程聚焦於資料序列化與配置驅動開發(CDD)。這週的學習從資料序列化技術(如 JSON 與 Pickle)開始,幫助我們掌握數據存取與共享的核心技能。課程進一步介紹了如何通過配置文件控制軟體行為,提升系統的靈活性與可擴展性。我們還學習了透過 LLM 去了解測試驅動開發(TDD)與行為驅動開發(BDD)的核心理念。課程範例以 CDD 結合 DALL-E API 的應用,實作配置驅動的開發流程。這些技術讓我們能夠快速生成動態配置並將其整合到系統設計中,提升開發效率與結構化程度。
第二週的課程重點轉向資料庫設計與優化。從基礎的 CRUD 操作教學開始,我們學習如何利用生成式 AI 工具(如 LLM)設計資料結構,並生成高效的查詢代碼。課程還包含除錯與效能優化的練習,幫助我們解決資料庫運行中的性能瓶頸與依賴性問題。透過設計並實作社交網絡資料庫專案,我們得以熟悉如何結合生成式 AI 提升資料庫的穩定性與效能,並應用於真實開發場景。
第三週的課程專注於設計模式的應用,特別是四人幫(Gang of Four)提出的 23 種設計模式。課程從設計模式的理論基礎入手,詳細講解了每種模式的適用場景及其解決的問題,涵蓋單例模式、工廠模式、模板方法模式與策略模式等。透過生成式 AI 的輔助,我們能快速生成設計模式的實作範例,並獲得優化代碼結構的建議。這些練習不僅讓我們理解設計模式的核心概念,還幫助我們提升應對大型系統設計與部署挑戰的能力。
這一段的課程相較於前面的《Introduction to Generative AI for Software Development》跟《Team Software Engineering with AI》又更為艱澀一點,且如果平時開發專案的規模不夠大,可能也不容易體會開發模式跟設計模式對於團隊開發跟產品的影響。不過順著課程的結構來進行,再加上可以不斷的詢問 LLM,相信應該可以架構出對這進階的開發概念有完整的理解。我自己花了八天的時間,完成了第三階段課程的認證,除了習作/測驗跟程式碼的撰寫外,第三門課程我花了很多時間去比較不同開發模式跟設計模式,對不同軟體產品的影響。這也是我在這整段課程收穫最大的地方,更進一步發揮了 LLM 的應用能力跟場景。
整體課程以實務應用為導向,注重生成式 AI 技術在開發流程中的價值與實際效能。從資料序列化到資料庫設計,再到設計模式的實作與應用,每一環節都幫助我們建立理論與實務的連結,快速掌握生成式 AI 的應用精髓。這是一門適合希望探索生成式 AI 在軟體開發中的潛力,並期望提升專業能力與開發效率的課程。
《Team Software Engineering with AI》這門課程是《Generative AI for Software Development》的第二段課程,同樣也是安排了三週的內容。課程設計的目標,是幫助學員全面了解生成式 AI 在軟體開發中的應用,並提供一套從測試與除錯、文件撰寫到依賴管理的完整學習路徑。課程在三週內,從第一週的內容逐步深入,讓學員從基礎環境設置開始,逐步掌握生成式 AI 工具的應用方法,並將其實際應用於開發與團隊協作中。
第一週的課程除了環境設置之外,主要聚焦於測試與除錯。這週的設計旨在幫助學員理解測試與除錯的重要性,並學習如何透過生成式 AI 工具(如 ChatGPT)來優化測試流程。跟第一門課一樣,平台本身有提供 LLM,以及開發環境,另外也有教材跟延伸練習的程式碼可以下載。學員首先熟悉 Jupyter Notebook 的操作以及 ChatGPT 實驗室的使用方法,建立穩固的技術基礎。在測試部分,課程詳細介紹了探索式測試和功能測試,並教授如何設計自動化測試來提升效率。除此之外,學員還會接觸效能測試與安全測試的基礎知識,並學習使用 AI 工具分析程式碼中的安全漏洞,進一步理解如何將 AI 應用於日常開發工作中。
第二週的課程重點轉向文件撰寫。文件是團隊開發中不可或缺的一部分,但往往容易被忽略。這週的課程旨在幫助學員掌握撰寫高效技術文件的技巧,提升團隊協作的效率。課程不僅介紹了內嵌註解與文件註解的實踐方法,還探討了多語言環境下文件的適應性。學員將學習如何使用生成式 AI 工具來輔助文件撰寫,並通過自動化工具如 Sphinx 生成結構化文檔。此外課程強調了文件在生產環境中的重要性,讓學員了解文件維護對專案長期發展的影響。
第三週的課程專注於依賴管理,這是軟體開發中一個易被忽視但至關重要的領域。本週的課程幫助學員理解如何解決依賴衝突,並提升專案的穩定性與安全性。學員將學習虛擬環境的設置、依賴研究與安全分析等基礎知識,並進一步探索如何利用生成式 AI 工具處理多語言環境中的依賴問題。此外課程中還包括 GPT 的應用實作,讓學員能夠熟悉使用 AI 工具解決版本與依賴管理問題,並將所學應用於實際專案中。
照例每一週的課程都有作業/考試,程式實作的部分是要求將 Python 2 的舊程式,透過 LLM 的協助來更新為 Python 3 的新版程式,同時也實作了模組依賴版本不相容的解決方式。這跟我們實務開發時經常面對到的困境一樣,以往沒有 LLM 的協助得到個大論壇搜尋取經,或是詢問其他大神。如今 LLM 就是一個隨時可以提供個性化服務的大神。
整體課程是以實務應用為導向,注重理論與實作的結合,讓學員在學習過程中能即學即用。生成式 AI 工具不僅能幫助學員提升開發效率,還能解決許多開發中常見的問題。這門課程強調了技術與團隊協作的平衡,從測試與除錯的基礎開始,到文件撰寫的專業化,再到依賴管理的穩定性,循序漸進地引導學員掌握生成式 AI 的應用精髓。對於希望提升技能並優化開發流程的工程師或技術管理者來說,這是一門不可多得的課程。這門課最後我用了七天的時間(一天平均為八小時),順利完成並取得證書。
Leica CM 相簿 https://flic.kr/s/aHBqjBztRL
Leica M6 相簿 https://flic.kr/s/aHBqjBYr2B
去年六月我收到了老婆(小孩有插花)送給我的生日禮物,一台我期待很多年的隨身底片相機 Leica CM,同時因為我跟佑昌購買的 X100VI 一直沒到貨(後來發現被詐騙),所以我就自己買了一台 Leica M6 作為生日禮物。
使用這兩台相機已經半年,這個月收到了 Flickr 的兩年自動續約扣款通知,於是把這段時間拍攝的底掃檔案都上傳到 Flickr 用相簿來歸檔。我很喜歡 Leica CM 的輕便好操作,全自動對焦加上鈦金屬機身(只有 300 多公克),是真正的口袋相機。雖然二手市場上這台相機釋出不多,且價格很驚人(依品相在六萬到九萬台幣之間),但我使用下來還是強力推薦它。
至於純手動旁軸黃斑對焦的 Leica M6(non-TTL,0.72),我使用了 Leica 28mm f2.8、50mm f2、Voigtlander 75mm f1.5 這三顆鏡頭,操作起來很有樂趣,記錄下了很多我自己很喜歡的時刻,以底片機來說 Leica M6 很符合我的需求。
拍照這麼多年,對於徠卡這個品牌始終有一種情懷,當然它的高價也是這些年來一直讓我卻步的原因,雖然算起來我其他相機跟鏡頭的花費,買上一整組最新的 M 機跟鏡頭都還有找,可是沒真正擁有跟認真拍攝之前總是很猶豫(之前有借過幾台 Leica 試拍)。這半年使用下來,真的覺得相見恨晚啊!
我還是喜歡我的 Nikon、Fujifilm、Olympus、Ricoh、SONY,每一台相機跟鏡頭的使用與操作都會帶來不同感受,而使用了 Leica 底片相機之後,又有了全新的體驗與氛圍,如果你也跟我有類似的情懷,推薦有機會要使用看看。
從基督城的Hadleigh Boutique Lodge啟程時,原本對但尼丁的旅程沒有太多期待。然而,在享用完早餐與房東Jon的閒談中,得知他曾是賽車手的經歷,更推薦了我們路上不容錯過的Moeraki Boulders。這個建議,為我們的旅程增添了意想不到的驚喜。
在Koekohe海灘上,這些最大可達三公尺的圓石散落在岸邊,完美的球形讓人難以相信是自然形成。在細雨綿綿的天候下,整個畫面籠罩在一層迷濛的霧氣中,浪花不斷拍打著岸邊,為這些神祕的圓石增添了幾分詩意。我選擇以黑白的色調來呈現這片景致,試圖捕捉當下的氛圍。
抵達但尼丁後,我們前往了令人期待已久的Larnach Castle。這座位於Otago半島中部山丘上的城堡,雖然找路時有些波折,但沿著海岸線蜿蜒而上的道路,美景足以撫平所有煩擾。傍晚時分,我們抵達了這座紐西蘭唯一的城堡,迎接我們的是溫暖的接待與意外的升等驚喜。
在城堡的晚餐是一場難忘的饗宴。我們被安排在特別的VIP餐廳,享用著當地的黑皮諾配上精緻的餐點,聆聽著這座充滿歷史的房間裡每一件傢具背後的故事。城堡的社交時光更讓我們結識了來自世界各地的旅人,特別是那位健談的英國醫生,與他分享著香港的新年風情,讓這頓晚餐增添了幾分國際色彩。
隔天清晨,在城堡周邊漫步時,霧氣繚繞的花園宛如童話世界。享用早餐時,又遇見了昨晚的醫生夫婦,延續著未完的話題,這樣的早餐體驗讓人感受到旅行中難得的溫暖。
離開城堡後,我們前往了Taiaroa Head的Royal Albatross Colony。在這個被強勁海風吹拂的海角,我們不僅看到了孵育中的信天翁,還在岸邊發現了悠閒的海豹與各式海鳥,構成了一幅生機盎然的畫面。
在但尼丁市區,我們造訪了著名的火車站、聖保羅大教堂,以及熱鬧的八角廣場。在八角廣場附近的餐廳用餐時,意外捕捉到一個溫馨的畫面:一位手臂有著鮮豔刺青的父親,與他如洋娃娃般可愛的女兒。這樣強烈的對比,恰恰呈現出這座城市多元而溫暖的一面。
啟程前往皇后鎮的路上,Central Otago區域展現出截然不同的風貌。從鬱鬱蔥蔥的森林,到光禿的山坡,再到湖光山色,每一個轉彎都帶來新的驚喜。這座最冷最熱也最乾燥的高原,用它獨特的地貌,為我們的但尼丁之旅畫下完美的句點。
從啟程到抵達基督城,歷經了二十四小時的長途跋涉。當飛機降落在基督城上空時,疲憊的身軀終於看到了這座城市的輪廓。透過機艙的雙層窗戶,我小心翼翼地調整相機參數,努力捕捉這第一眼的風景。
在領取了租用的Toyota Camry後,我駛向了下榻的Hadleigh Boutique Lodge。這座被綠意環繞的精品旅館藏身於Eversleigh Street的巷弄中,低調的外觀與紅色柵欄,讓它看起來就像一座普通的住家。熱情的主人Jon與Shirley為我們帶來了溫暖的接待,細心介紹著每一處設施。房間內的一磚一瓦都充滿巧思,從木質地板鋪設的厚實地毯,到浴室中石材與木製傢俱的完美融合,處處展現出精緻的品味。最令人驚喜的是那個能俯瞰後院花園的陽台,繁茂的樹木既保護著私密性,又不會阻擋美麗的景致。
基督城大教堂是這座城市最具代表性的建築之一,很可惜在地震後只能從照片來回憶這棟美麗的建築。教堂內的鐘聲交織出動人的旋律,而偶然遇見的合唱團練習,更為這神聖空間增添了一份莊嚴的氛圍。在這裡,我看到了一場花藝比賽緊接著一場告別式,生活的百態在此交織,見證著這座城市居民生活的點點滴滴。在拍攝教堂內部時,我選擇不使用閃光燈,讓自然光線通過彩繪玻璃灑落,呈現出空間的層次感,同時也保留了這神聖場所應有的寧靜。
穿梭在街道上的復古電車,是基督城最迷人的街景之一。這條始於1905年的電車路線,見證了城市的發展變遷。我特別喜歡在電車暫停時,尋找背景建築物的幾何元素與電車形成呼應的畫面。而蜿蜒流過市區的亞芳河,則為這座花園城市增添了幾分詩意。在河畔等待著捕捉平底船與拱橋上電車相遇的畫面時,我反而拍下了另一個驚喜的場景:橋上行人與電車交錯的瞬間。
這座城市的步調悠閒,街道綠意盎然,處處可見歷史建築與現代生活的完美融合。即使是南島最大的都市,基督城依然保持著怡人的生活氛圍,讓每個到訪的旅人都能在此找到屬於自己的片刻寧靜。