要走的路還更遠(yuǎn)
- 來(lái)源:《第一財(cái)經(jīng)》YiMagazine smarty:if $article.tag?>
- 關(guān)鍵字:區(qū)別,AI便簽,工具 smarty:/if?>
- 發(fā)布時(shí)間:2025-01-03 21:25
AI便簽工具的正式版終于開發(fā)完了。最后一步,將版本號(hào)修改為1.0.0,提交,發(fā)布。
斷斷續(xù)續(xù)地,這個(gè)“小”產(chǎn)品居然開發(fā)了一年多,遠(yuǎn)遠(yuǎn)超過(guò)了我最初的預(yù)期。除了一部分工作由閱覽室的兩位創(chuàng)始讀者兼職完成,大部分的設(shè)計(jì)、研發(fā)工作都是我自己動(dòng)手完成的。這是我第一次從0到1地獨(dú)立完成一個(gè)產(chǎn)品的開發(fā)和上線,我也算是“獨(dú)立開發(fā)者”了—我并不以此為豪,因?yàn)槿绻兇鈴纳虡I(yè)角度考慮,這并不是一個(gè)具有性價(jià)比的理智決定。我沒有想過(guò)要將生命中整整一年的時(shí)間花在這樣的一個(gè)“小”產(chǎn)品上,而且還是以工程師的角色。這肯定不是我擅長(zhǎng)的事情。
雖然如此,我還是很高興自己堅(jiān)持把它做完了。完成一個(gè)事情,對(duì)我來(lái)說(shuō)很重要。
那么,如果再做一次,會(huì)有什么區(qū)別?
回想2023年7月重啟閱覽室的工作,當(dāng)時(shí)我的想法很簡(jiǎn)單:每周做一個(gè)不同的產(chǎn)品原型,這樣子一個(gè)月可以做出4個(gè),借此“熱身”,進(jìn)入工作狀態(tài)。一開始決定自己來(lái)寫代碼而不是招人來(lái)做,是考慮到原型對(duì)代碼質(zhì)量的要求不高,我作為一個(gè)三腳貓功夫的程序員在AI的輔助下完全可以勝任,另一方面是認(rèn)為對(duì)于這個(gè)階段的AI產(chǎn)品來(lái)說(shuō),要做出創(chuàng)新和突破,設(shè)計(jì)和工程無(wú)法分開,需要一邊開發(fā)一邊摸索可能性。自己來(lái)做,雖然工程上沒有那么熟練,效率可能反而會(huì)更高一些,迭代速度更快(見2023年9月刊《一個(gè)不同的主意》)。
從原型制作階段的實(shí)踐來(lái)看,這些想法大體是對(duì)的。以可以上線邀請(qǐng)朋友來(lái)內(nèi)測(cè)為標(biāo)準(zhǔn),制作一個(gè)原型實(shí)際上大約要花一個(gè)月的時(shí)間,而不是一周,這當(dāng)中的差異主要還是我高估了自己學(xué)習(xí)新技術(shù)和編寫代碼的能力,但應(yīng)該還是比找人來(lái)做要快的。
AI便簽是其中的2號(hào)原型。原型制作完成后,我們覺得這個(gè)產(chǎn)品應(yīng)該能在市場(chǎng)上占有一席之地,決定再花一些時(shí)間把它開發(fā)成可以正式發(fā)布的產(chǎn)品(2023年10月刊《解鎖創(chuàng)造力的驚喜》)。那是2023年9月,這個(gè)“一些時(shí)間”,當(dāng)時(shí)我們的估計(jì)是一個(gè)月。
首先,一個(gè)再簡(jiǎn)單的產(chǎn)品,只要它是一個(gè)完整的產(chǎn)品,就沒法太簡(jiǎn)單。
拿這個(gè)AI便簽產(chǎn)品來(lái)說(shuō),最初的原型我只寫了千余行代碼,到現(xiàn)在,則已經(jīng)超過(guò)萬(wàn)行了。代碼量增加了10倍,核心功能其實(shí)沒有增加。那增加了什么東西呢?作為原型和作為一個(gè)供人使用、還打算賣錢的正式產(chǎn)品,要求多少還是有些區(qū)別的。舉個(gè)例子,這個(gè)產(chǎn)品有一個(gè)核心功能是將筆記保存到用戶的Notion賬號(hào)中,一開始為了節(jié)約開發(fā)成本,我們請(qǐng)用戶手動(dòng)綁定Notion賬號(hào),用戶需要在電腦上手動(dòng)操作十余步,將兩串代碼復(fù)制粘貼到我們的輸入框中。能完成這個(gè)流程的用戶不足10%?,F(xiàn)在,用戶只需要點(diǎn)擊兩次確認(rèn),就可以完成這個(gè)過(guò)程。代價(jià),是2000多行代碼。
這是一個(gè)付費(fèi)產(chǎn)品,我們需要開發(fā)對(duì)應(yīng)的支付系統(tǒng)和權(quán)限管理;原型代碼的穩(wěn)定性不足,用戶經(jīng)常無(wú)法及時(shí)得到結(jié)果,也需要改進(jìn);還有語(yǔ)音輸入、幫助和新手引導(dǎo)、營(yíng)銷用的官網(wǎng)、注冊(cè)表單……等等。做原型的時(shí)候不需要考慮這些,正式上線的時(shí)候都需要。
所以說(shuō),只要是個(gè)完整產(chǎn)品,就不要太輕視它的復(fù)雜度,這些“沒有不行”的功能,大概就要占90%的工作量。需求文檔中每個(gè)小小的點(diǎn),都是工作量。
兩三周前的一天,我在制作產(chǎn)品的注冊(cè)表單。為了節(jié)約時(shí)間,我用的是現(xiàn)成的表單工具,即使是這樣,從早上開始做,等做完的時(shí)候天也已經(jīng)黑了?;叵胍徽斓墓ぷ?,也沒有什么浪費(fèi)時(shí)間的地方。只能說(shuō),這些工作本來(lái)就要花這么多時(shí)間,只是因?yàn)榇蟛糠值墓ぷ鞫加勺约和瓿?,這些工作量體現(xiàn)得更加明顯而已。
這些雖然占了工作量的大部分,畢竟還算是確定的工作量,做一件少一件。這一年中的大部分時(shí)間,并不是花在這類問題上的。
2023年9月,決定將原型開發(fā)成正式上線的產(chǎn)品時(shí),我也清楚自己的工程能力不足以完成這項(xiàng)軟件工程工作,于是決定找專業(yè)的人來(lái)幫忙(2023年10月刊《解鎖創(chuàng)造力的驚喜》)。我在社交平臺(tái)上發(fā)布招聘帖后,有3位閱覽室的創(chuàng)始讀者以兼職的形式加入了我們,他們都是工程師。
我本來(lái)以為,從原型到正式產(chǎn)品是一個(gè)水到渠成的過(guò)程,對(duì)有經(jīng)驗(yàn)的工程師們來(lái)說(shuō),都是迎刃而解的“已知問題”。實(shí)際上,一個(gè)AI產(chǎn)品的開發(fā),即使是在原型的基礎(chǔ)上將它完善成符合正式上線質(zhì)量標(biāo)準(zhǔn)的產(chǎn)品,也有一些開發(fā)其他產(chǎn)品時(shí)沒有的挑戰(zhàn)。其中,我認(rèn)為最重要的是大語(yǔ)言模型的輸出質(zhì)量不夠穩(wěn)定可靠的問題。來(lái)幫忙的幾位工程師之前都沒有開發(fā)過(guò)大語(yǔ)言模型應(yīng)用,要解決這個(gè)問題,對(duì)他們來(lái)說(shuō)也需要重新學(xué)習(xí)、探索如何解決(2023年11月刊《有不確定性,才可能創(chuàng)新,才能自由自在》)。
由于這項(xiàng)工作需要不斷調(diào)整提示詞、參數(shù)、重新設(shè)計(jì)與模型的交互,和產(chǎn)品設(shè)計(jì)的意圖緊密相關(guān),最后還是我自己完成的。今年從年初到夏天,我都在做這個(gè)工作,在2024年8月刊的《從60分到90分》中我做了詳細(xì)的記錄。
如果僅從結(jié)果的角度考慮,再來(lái)一次的話,我想,也許及時(shí)知難而退是效率更高的做法。只是未知的領(lǐng)域往往會(huì)引起我學(xué)習(xí)的興趣,這樣的一個(gè)挑戰(zhàn)反而對(duì)我來(lái)說(shuō)充滿了吸引力。而一旦開始深入研究,能探究的東西又越多,就越來(lái)越難收?qǐng)隽恕?/p>
解決這個(gè)問題的過(guò)程同樣是一個(gè)軟件工程工作,說(shuō)到底我也還是沒能逃開,只能硬上。AI編程在過(guò)去這一年中有很明顯的進(jìn)步。我剛開始開發(fā)原型的時(shí)候,主要是依靠AI局部補(bǔ)全代碼,今天的AI已經(jīng)可以按照你提出的需求,憑空寫出來(lái)一個(gè)完整的應(yīng)用了—但寫出來(lái)的代碼質(zhì)量也只能說(shuō)勉強(qiáng)能運(yùn)行。我覺得今天的AI編程其實(shí)特別適合用來(lái)做一些“日拋型”的產(chǎn)品,比如給自己寫個(gè)一次性使用的數(shù)據(jù)處理腳本,給孩子寫個(gè)小游戲,或者,就像之前一樣用來(lái)做個(gè)產(chǎn)品原型,這些都可以全自動(dòng)完成,效率和一年前相比可以說(shuō)有10倍的提升。但我們?cè)谧龅氖且粋€(gè)有一定復(fù)雜度的、嚴(yán)肅的軟件工程項(xiàng)目,AI仍然很難獨(dú)立將代碼一次性寫對(duì),這種情況下仍然需要開發(fā)者去理解其實(shí)現(xiàn)原理、給出更詳細(xì)和有針對(duì)性的指令。這對(duì)人的要求其實(shí)并沒有降低,因?yàn)槟阋鞯氖擒浖軜?gòu)、設(shè)計(jì)方面的決策,這甚至不是剛?cè)腴T的工程師能完成的。
我只能說(shuō)我努力去學(xué)了。我的學(xué)習(xí)習(xí)慣,往好的說(shuō)是比較追求系統(tǒng)性,很難滿足于只得到一個(gè)不求甚解的答案,一定要搞清楚為什么;說(shuō)不好的,就是太慢。
回頭來(lái)看,放棄可能是更理性的決定。某種程度上,我們這個(gè)AI便簽產(chǎn)品也在探索大語(yǔ)言模型的能力邊界。問題是,我的主要興趣實(shí)際是在產(chǎn)品交互上,花時(shí)間去探索這個(gè)邊界,以性價(jià)比考慮的話,是不太理智的。如果回到那個(gè)時(shí)候,如果確信大語(yǔ)言模型的能力無(wú)法輕而易舉地實(shí)現(xiàn)我想實(shí)現(xiàn)的效果,我應(yīng)該果斷擱置這個(gè)產(chǎn)品,去做那些大語(yǔ)言模型已經(jīng)被證明能做得很好的事情。等大語(yǔ)言模型的能力演進(jìn)后,再回來(lái)。
如果僅僅追求效率,就應(yīng)該盡量多做自己熟悉的事情,少做自己沒做過(guò)的事情。在過(guò)去幾年的工作中,由于我經(jīng)常成為團(tuán)隊(duì)瓶頸,答應(yīng)的事情沒有辦法按時(shí)完成,我真的定量統(tǒng)計(jì)過(guò),自己估算的時(shí)間和實(shí)際花費(fèi)時(shí)間的差別。數(shù)據(jù)統(tǒng)計(jì)表明,在那些我最熟悉和擅長(zhǎng)的領(lǐng)域,我所花的時(shí)間和預(yù)估的時(shí)間差別是最小的,甚至?xí)阮A(yù)估時(shí)間更快,例如產(chǎn)品策略、信息架構(gòu)設(shè)計(jì)、界面設(shè)計(jì)等。而一個(gè)領(lǐng)域我越不熟悉,預(yù)估時(shí)間的偏差就越大。
這里面還有一個(gè)因素是,即使是一個(gè)自己不擅長(zhǎng)的領(lǐng)域,我也很難放棄對(duì)質(zhì)量標(biāo)準(zhǔn)的要求,這也導(dǎo)致我要花更多的時(shí)間去學(xué)習(xí),每個(gè)問題世界上最好的解法是什么。雖然最后出來(lái)的效果往往都不錯(cuò),但就是過(guò)程所花的時(shí)間是不可控的。一個(gè)典型的例子,就是產(chǎn)品的視覺設(shè)計(jì)。前面說(shuō)到的軟件工程問題、提升大語(yǔ)言模型的輸出可靠性問題,都屬于此類。
這個(gè)過(guò)程中最痛苦的還是工作量永遠(yuǎn)沒有辦法預(yù)估。朋友問我什么時(shí)候能上線,我永遠(yuǎn)都回答“下周”—我每次這么回答的時(shí)候,都是真的覺得眼前的工作量不多了。我猜這大概和在沙漠里看到海市蜃樓的感受是類似的,總是覺得終點(diǎn)近在咫尺,卻永遠(yuǎn)走不到。這個(gè)狀態(tài)持續(xù)得久了,希望慢慢變成絕望,對(duì)自己的信心是很大的打擊,也容易迷失方向,不知道自己今天起床工作是為了什么,和目標(biāo)結(jié)果有什么關(guān)系。我倒不擔(dān)心自己做得不夠好,只擔(dān)心做得不夠快,還沒有走到終點(diǎn)的時(shí)候就已經(jīng)渴死了。這種情緒在過(guò)去幾年一直圍繞著我,在過(guò)去這一年中更加登峰造極。
當(dāng)然,站在今天的角度,那些曾經(jīng)不熟悉的事情,到今天都已經(jīng)變成我掌握的技能了。就拿大語(yǔ)言模型的輸出可靠性來(lái)說(shuō),現(xiàn)在我可以說(shuō)自己對(duì)于怎么做出一個(gè)質(zhì)量較高的大語(yǔ)言模型應(yīng)用,已經(jīng)有明確的概念了。而且我也發(fā)現(xiàn),大部分的產(chǎn)品團(tuán)隊(duì)并沒有花時(shí)間去做這個(gè)事情,那么這就變成我的一個(gè)優(yōu)勢(shì)了。
回想起第一個(gè)版本的原型,去年夏天的一個(gè)下午,我利用prompt在ChatGPT中模擬了設(shè)想中的交互場(chǎng)景,興奮地認(rèn)為自己找到了一個(gè)新的產(chǎn)品方向,然后開始依葫蘆畫瓢地學(xué)寫代碼—如今真是已經(jīng)走了很遠(yuǎn)。
上線后,要走的路還更遠(yuǎn)。
