Category Archives: 電腦

電腦不止是一份職業﹐也是從少到大的嗜好。

AI寫code實戰心法

看網絡上講AI寫code的實在太多外行充內行,甚至開班賣課賺不懂寫程式麻瓜的錢,實在看不過眼,在thread上嗆他們一句半句只是耍樂子。倒不如自已執筆寫一篇AI實戰文章,公開地打他們的臉,引他們過來我主場留言反駁。

有人會問我是什麼來頭,有什麼資格說三道四?我是行內人在一線AI大廠的工程師,早幾個星期剛剛完成公司內首個「AI工程師」的部署。不過職銜和公司名片只是用來唬人,真正的資格是因為工作關係,見識過無限GPU和無限tokens的威力,隱約看見今個世代基於LLM的AI技術的極限在那兒。

這篇文章是全人手寫,幫助腦袋思考的副產品。若果文筆不通順有錯字,廣東話入文看不慣,讀起來沒有起承轉合,讀者請自行餵給AI書僮伴讀。反正在AI年代,把乾貨的真知識記錄下來才最重要,日後有時間才叫AI編輯潤筆添加水份,一魚多吃。癈話不多說,讓我一一戳破網絡偽AI達人常說的廢話。

教人使用便宜的開源LLM去寫code

不要浪費時間在次等的LLM上,因為你的時間更寶貴。沒錯開源LLM的確很便宜,亦只是落後頂尖LLM三個月,但在AI世界三個月就等於人類的三年,你不會想用過時的技術吧。撇開愛祖國用國貨的因素,最大問題是你不知道何時LLM會鬼打牆,頂尖的LLM不是萬能,但遇到鬼打牆的機率少很多。你的時薪也不只二十美元,只是遇上幾次鬼打牆,你浪費掉的時間已經比頂尖LLM的月費更貴。

那便宜的LLM是否亳無用處呢?當然不是,自已用就要用最好,給別人用就要考慮成本將貨就價了。若果你十份肯定一些情況,便宜的LLM足已能勝任,用頂尖LLM就殺雞用牛刀了。寫code時有些簡單的任務,不妨交給便宜LLM去執行。若果你不太肯定,專業的做法就是先用頂尖LLM做了出來,然後建立評估去測試省錢的下限,LLM沒有最便宜只有更便宜,若8B模型能用說不定本地內建的1B也能成功呢。

教人使用no code平台去開發應用

不知何解,網絡上有一票教n8n的AI導師,很好奇他們是否收了讚助費,或是拿上一個cycle流行no code時代的東西出來循環再用。我不是因為自已是工程師所以輕視no code平台,我沒有用過n8n但我有微軟Power Automate的證書資格,公司有一半的東西是使用M365,未有AI前我自已也畫了不少flow去自動化流程,在Linux的另一半當然是shell script更加好用。

若果你今年一月時問我,那時MCP還未一統江湖,GPT5世代的推理模型還未面世,我會認同使用no code平台很正路,至少比去年流行的langchain/graph,用古怪的python語法寫workflow來得直覺。可是到十月還在教人用n8n的人,大慨就是把心思用在編寫課程打廣告收生賺錢,沒有花時間繼續進修追上一日千里的AI發展。若用Claude Code或Codex作為AI agent的開發基礎,接駁好MCP後,剩下的工作就只是寫system prompt。若果用no code平台畫出來,就是把所有connector全接到中間那個大方塊,畫完等於沒有畫。

今年有不少新世代的agentic framework面世,那個最好用目前下結論還太早。領先的兩大廠分別有Codex同Claude Code的agent SDK,Google和微軟緊隨其後,人家有什麼功能就抄什麼。獨立開源的我使用過huggingface的smolagent和後MCP時代的fastagent,而後者我更增添一個我公司需要用的小功能,發送了pull request回饋開源社群。我想要過多久時候,網絡AI導師才會教agent SDK,這些真正實用的東西呢,恐怕到時這些東西又可能過氣了。

Vibe Coding 無用論 / 萬能論

要說2025年度詞語 ,肯定是Vibe Coding一詞莫屬,年初由大神Andrej Karpathy發明,來形容全AI不經人手開發程式。群眾對Vibe Coding的反應兩極,一邊廂說普通人現在也可以寫程式,工程師軟件開發人員全部失業,另一邊廂說Vibe Coding寫出來的只是玩具,不可能拿出來作實際應用,還有更恐怖的資安外洩,整個資料庫被AI清空等都市傳說。

當外行人為Vibe Coding爭辯過不亦樂乎之際,專業的早已全面擁抱AI寫Code,科技大廠超過70%程式碼由AI生產不是神話,我自已團隊就AI生產超過200%的程式碼。你問有可能超過100%嗎?有,因為AI生產出來的有很多垃圾不能用。AI不是無用亦不是萬能,只是一件很好用的工具,需要學習才能有效地靈活運用。

在我對AI基礎技術的認知上,與其說LLM是人工智能近似人類思考,不若說LLM更像是MySQL那類的算力黑箱引擎。明白了LLM的運作原理,就不會有在與AI對話的幻覺。實際的流程是prompt+context輸入,LLM另一頭輸出一堆文字。若果輸出有問題,正確的做法不是與AI繼續對話,而是改變另一組輸入再嘗試,這個輸入到輸出驗證再試的輪迴,以前我們叫它做debug。

Vibe Coding並不是新事物,未有AI人工智能前它的名字是印度外判,也算是另一種AI(Actual Indians)。沒有管理和系統架構經驗的初級工程師,習慣所有程式碼一手一腳自已包辨,手腦合一沒錯是寫code又快又靚,但極限是一個人一天只有二十四小時。當你的項目超過你一個人的能力時,就要帶領團隊分工合作才能完成。傳統上資深工程師負責架構,初級工程師負責執行,只要薪火相傳把知識教授給後輩,上級不用去費心執行細節上的問題。

可是印度外判的出現,完全顛覆這種師徒制的理想開發環境。外判就是要節省成本,結果就是一分錢一分貨,印度外判對工作亳不上心,說漏一句就亂來錯誤百出,就好像現在的AI一樣。不知是幸運還是不幸,當年我帶領五十人的外判團隊,原本一心只想當個輕鬆發號司令的經理,結果白天我要親自把的技術執行拆件細分,寫好文件和檢收要求分發給外判去做,晚上就和他們開會做code review,他們亂來就拒收發回重做。相對起來AI比外判實在太好用了,至少AI不會明明做錯還堅持自已是對的,要我花半小時去證明為什麼他做錯了。總之受過印度外判痛苦洗體的資深工程師,早已學懂了如何運用AI去Vibe Coding的技巧,說穿了就是engineering最基本的常識,divide and conquer, clear specification, automated acceptance test。

哲學上有個無限猴子理論,若果給無限隻猴子無限台打字機,邏輯上遲早會打了部一莎士比亞名著出來。在AI比猴子聰明,大約比印度外判好一丁點,我發明一個無限印度外判理論,只要有無限GPU和無限tokens,AI遲早會寫出你想要的程式。

Database Design for Mere Mortals – Michael J. Hernandez

我學懂寫SQL已經很多年,但我從來沒有正式地學習如何設計一個database,大多數只是隨便地上網找些SQL例子現炒現賣。這本課本是database設計的天書,已經有二十五年歷史出版至第四版。整本書內沒有教一句SQL語法,若果連SQL還未懂的話,恐怕這本書太過艱深了。

有三分一本書的篇幅,談論應該如何訪問database的用家,在開始設計database之前,先找出database需要儲存的資料和要做什麼類型的query。現在看完書後回顧重溫,覺得這部份有點是想當然爾的常識,但我初次閱讀那些章節時,很有增廣見聞的新鮮感。我工作上寫了程式幾十年,那些系統需求的規格,自問見過不少亦做過不少,但我始終是邊做邊學紅褲子出身,第一次接觸如此有系統寫系統需求的方法。

Relational database是什麼,說到底就是一個個table,寫著一行行的資料,每筆資料有很多field載著data,而每個table之間用key去互相連系。在看這本書前,我連什麼是normal form也不知道,不過看完書,其實我還是一知半解,因為normal form實在太深了。作者教用另一個設計方法,一步步把資料的fields組合為不同的tables。由細到大一層層建築上去,比起從一個大table開始,然後用normal form去分拆成不同的tables,雖然工序更多步驟更費神,但初學者比較容易明白。

Database設計最重要是資料的可靠性,「唯一」就是設計的關鍵,每一項資料只存在一個地方,每一個地方只儲存一項資料。可以計算出來的資料,就不要浪費地方去存放,有需要加速就建立view來暫存。聽起來好像很容易,實際設計database時,要很有耐心去逐項逐項校對,才不會不小心產生設計上的缺陷。

Seven Databases in Seven Weeks 2nd Edition – Luc Perkins

很多年來我一直只懂SQL,沒有學習其他database,早十年NoSQL還是剛冒起,我還有點看輕它,覺得它冇用。俗語有云,當你手拿著鎚子,所有的問題都變成釘子。只懂SQL,很自然習慣把所有問題都用Relational Database去解決,儘管要花更加多的氣力,有時殺雞亦要用牛刀,因為只得一把刀。

這本書2018年出版,已經是第二版,很多年前第一版時已經想看。只不過是短短三年,書中有些code已經過時了,新版本database的syntax有點不一樣,不過基礎理論沒有改變,仍然合用。NoSQL有太多選擇,想學習也老鼠拉龜無從入手。這本書介紹最熱門的七個database,從傳統SQL的Postgres為起點開始,然後逐一講解其他NoSQL DB的優劣trade-off,什麼情況適合應用。比起每次只教一種database的書,讓讀者有宏觀的視野。

因為一本書要教七個DB的關係,這本書的內容非常壓縮,簡單的基本操作甚至略過不談,直接叫讀者去看官方document。每個DB的教程分為三部份,讓讀者可以連續七個星期,每個週用三日學完。我一口氣一次過看完,一章大約要用四個小時,不過我只是跟著example打code玩下個DB,沒有個每日的功課,若果做埋功課,大約要兩倍時間。

第一章Postgres是溫習SQL,我以前用開MySQL同SQLite,也算是學新野。第二章教HBase是columnar database,沒有隨意search的功能,要靠index去讀data,但是非常scalable,是Google Cloud Bigtable的開源版。第三章教MongoDB是document DB,search JSON的功能很強大,不用寫schema很方便。第五章教couchdb,與MongoDB一樣都是寫JSON object,但couchdb的read要事先建立views,另外監視change的功能也很好用。

第六章教是我最有興趣的Neo4J,但書中教了graph DB的很皮毛,連Cypher語法如何閱讀也沒有教,我要上網再找資料自學。Graph DB同SQL很大分別,完全是另一個類型的應用,學了大開眼界。第七章教AWS DynamoDB,個database本身很平平無奇,強大是AWS後台的支援,連著AWS其他功具一起教,學習寫data pipeline,提升用DB的另一個層次,真正的big data。最後一章教redis,簡單易用夠方便,我認為redis應該早些教,in memory key-value store都啱做一些quick and dirty job。

這是一本不適合新手的入門書,教的東西很廣闊但很膚淺,主要是給讀者一個perspective,之後讀者就要靠自己去看document了。若果要看完一本書就能立即上手揼project,拖著一步步教導如何建站,這本書並不適合你。反而這本書更像是sampler,淺嚐每種DB的味道,並例一起觀察它們的異同,然後覺得那個DB有用,就再上網去找資訊深造。讀這本書有一個好處,讀完後基礎理論打了底,讀official document快很多,可以直接跳過不用看其他書,反正去到最後都係要翻查參考official document。

Mastering pandas for Finance

自疫情爆發各國央行狂印銀紙,股市瘋狂大上大落,吸引不少人進場投資投機。買賣股票總不能盲模模亂信網上貼士,要自己做功課研究市場資訊,發掘價格波動的趨勢。Python是最流行的程式語言,因為方便好用又多library,差不多日常寫程式都用它。以前研究股票會用Excel,pandas基本上就是Python的Excel,Excel做到的功能,試算表統計數字畫表等等,pandas全部都可以做到。

看pandas我最初只是上Towards Data Science看tutorial,基本大致明白matrix計算的原理和如何寫程式,然後不知怎樣信手貼來這本Mastering pandas for Finance來看。這本書多code多圖少字,可以當成跟著做的練習,簡單地示範如何用panads製作,所有睇市要用的分析工具。由最簡單的下載價格資訊,畫股票圖計算平均線,到計算期權的各種greek,計算portfolio風險管理,甚至電腦自動操盤也有教。

這是一本入門級的書,有個應用目標去學pandas,比起其他書的虛構例子較沒那麼枯燥。書中關於股票計算知識的簡介,亦是一個很好的溫習。書中的程式例子只是一個起步階,像菜單一樣為讀者介紹有什麼項目可以做。到真正自己寫工具去分析股市場時,基本上完全不到書中的範例,因為有其他更加好用library。本書只有三百多頁,照書中的練習打入電腦執行一次,大約一兩天就做完,就算不懂pandas也很簡單容易上手,不過就需要有Python的基本知識。

有時看網上直播見投資專家用Metastock,幾百美元一個分析股票軟件,左看右看python加pandas有齊所有功能,還更加flexible更加powerful。

Programmer’s Python: Everything is an Object – Mike James

因工作上的需要,去年我才開始學習Python,寫了Python程式接近一年,寫起來漸漸得手應手。Python不愧為近年冒起得最快的語言,它集傳統OOP語言如C++和快速interpret語言如Perl兩家之大成,syntax簡潔易用,dynamic typing和duck typing寫起來更輕鬆自由,若果對typing不放心還可以optional type check。我久不久要回去寫C++,寫開Python忽然要寫上一代language,很不習慣,然後就咒罵為什麼C++沒有那些好用的功能,當然鬧了兩句後,就會記得C++比Python運行速度快很多倍,static type是有其存在的原因。

學習一個程式語言,除了學習syntax學習使用不同library外,若果要學得深入學的精專,就要明白程式語言的運作原理。C++只要有C的基礎,而C只要有Assembly的基礎,只要弄懂pointer其他就很易明。Python也是一樣,只要明白它任何東西也是object的核心,它的variable和funciton scope是如何resolve,其他所有「進階」syntax只是飾裝的外衣。

市面上有很多Python課本,亦有不少online tutorial,絕大部份都是教你應用Python去寫code,沒有真正講解Python的內部結構。Python official document有提及,我由頭到尾叫做看過一篇,不過寫得太枯燥無味,內容零碎沒有系統,不適合一般人閱讀。這本《Programmer’s Python: Everything is an Object》是進階讀物,並不適合初學者,甚至不會你寫Python,而是從程式語言設計的層面,去解釋Python內裏的運作原理,換一句話說就是解釋那些double underscore builtin attributes有什麼作用。

這本書是I Programmer網頁的作者出版,這個網頁是我follow開講computer science專業級知識的網頁。網站上有這本書的試看版,差不多也有半本書的內容,因為實在寫得太好,所以一定要賣回來看全本的內容。這本書非常冷門,不要說一般書店或網上書店沒有得賣,連加拿大Amazon也沒有入貨,更不要說網上沒有盜版pdf,我要特地去美國Amazon訂購回來。

這本書有沒有實際用處?很難講。日常寫Python程式,其實不需要理會它如何運作。看完這本書後,讓我懂得欣賞Python設計的巧妙。若果對程式語言設計有興趣,這本書亦講述很多程式語言設計理論,對日後學習其他語言會很有幫助。