自從我離職之後, 我就一直在想我可以做些什麼。其中, 我也有想過我們離 AI 進行 programming 有多遠?? 我提出一個問題。如果你是 PM, 你怎麼讓 programmer 幫你寫程式? 接下來, 如果你是一個下個世代的 programmer, 你怎麼讓 AI 幫你寫程式? 於是我有了一些想法!
能幫你做 coding 的 AI 是長什麼樣?
AI 能幫你腦補你的 spec 的不足。
AI 會問你一些問題,搞清楚問題的細節。
AI 要有 domain knowledge。
同 domain 內的一些習慣類似, AI 能透過 domain knowledge 補足你沒說的部分。
於是, 你得到一個特定領域的機器人, 可以幫你寫 code。你只要需要大致描述你的需求,機器人可以過去的經驗/實例為基礎,幫你完備你的 spec (你的輸入和輸出該長什麼樣)。這個完備的 spec, 就是可執行的程式。
AI 怎麼學寫程式? 那你怎麼學會寫程式的?
最基本的 hello world 和加減乘除。
簡單的 spec + 解答 example.
step by step 對應 spec 和解答之間的關聯.
練習寫一樣的 code.
題目變化,練習.
一直到內化。
你怎麼寫程式?
看著 spec
寫個簡單的 function 有 input 和 output。
修改、補充中間部分的程式。
測試 (腦中或實際執行)。
對照 spec
回到 3. 直到完成
總結是, 我認為需要一個較易 parse 和使用的 spec 語言(而不是自然語言。專業的 PM 也不完全用一般人使用的語言定 spec。)。AI 能幫我們補充 spec,你提到一個條件,AI 能聯想到其它該有的條件。例如你提到使用者帳號,就會自動聯想到要登入,要有 password 和 ID 之類的。透過 AI 和人類之間的來回修改,完成一個完整的系統。過程就和 PM + 人類 programmer 的運作差不多。
基本上, 就是輔助真人 programmer,自動完成一些事。 yinwang 以乎把 AI coding 這件事想的太神奇, 像神奇海螺一樣。 我比較務實一些。
Linked list 的時間是隨距離兩端的長度而線性成長。而 array 則是隨和尾端的距離線性成長。兩者都線性時,快慢的差別在 coefficient。list 的 coefficient 是讀pointer 的 cost ,array 則是 copy 的 cost。讀pointer 的cost 是固定的,但 copy 卻會隨資料而變。
但,也可在 array 裡放pointet,讓 copy cost 最小化。
but but,一般會把 search 和 insert 分開討論。這篇文章實際上是 search+insert 的結果。先 search/index 到特定 element,然後insert在前面。實際使用 linked list 時,都是 push head or tail,或用其他方法快速找到插入的位置。如 cache or hash table...
ARM 早就有這樣的 solution,but...... 一些 overhead 加在一起, 視狀況而定(task size), 不一定比較好。
另外, mozilla 的 webrender Link1 算是相關的東西
大概從 5 年前,我開始大量使用 OTV,從當時寫的一篇文章開始 Link1 。在大量使用 OTV,並取適當變數名之後,即使註解寫的不多,也不會造成閱讀的困難。當然,是否容易閱讀可能取決於個人。但後來我想清一件事,我好像沒義務寫到每個人都讀的懂,但至少自己在半年之後還能讀的懂,這樣就夠了。
OTV 的問題在於有很多人誤以為這樣會降低執行效率。對某些語言也許會,例如 Python,這類語言因為是在 runtime 編譯,因此無法做太多 optimization。但對於 C/C++/Java 這類語言,如果會降低效能,那就是 compiler 的問題了。不如等到實際 profiling 之後,再針對 bottleneck 做局部改善。(前幾天 ptt 好像有人在抱怨主管時,也討論到類以問題)