看了評(píng)論, 于是我想先說一下,希望大家能關(guān)注的是這篇博客中關(guān)于寫程序的方面,不要關(guān)注AI,我基本上也沒寫關(guān)于AI的什么東西,看篇幅應(yīng)該能很明顯區(qū)別出來。偏偏就簡(jiǎn)單提到的幾句被重點(diǎn)關(guān)注了,而重點(diǎn)寫的東西居然沒人注意。
今天早上看了一篇這個(gè)主題的文章,總有種作者不知道在抱怨什么的感覺,于是想寫一下我的看法。
首先,要說寫程序,首先不得不提一個(gè)經(jīng)典的等式:程序 = 數(shù)據(jù)結(jié)構(gòu) + 算法。見過很多人一邊說這個(gè)經(jīng)典是廢話,一邊卻并不知道怎么寫代碼。其實(shí)這個(gè)等式是對(duì)一段程序乃至一個(gè)系統(tǒng)開發(fā)的入手有很好的指導(dǎo)意義。
當(dāng)你不知道怎么開始實(shí)現(xiàn)眼前的代碼時(shí),你需要考慮的就是兩件事,一件是你需要什么樣的數(shù)據(jù)結(jié)構(gòu),另外一件是你要怎么使用這個(gè)數(shù)據(jù)結(jié)構(gòu)--也就是算法?! ?/p>
需要什么樣的數(shù)據(jù)結(jié)構(gòu)這件事在現(xiàn)今的大多數(shù)業(yè)務(wù)系統(tǒng)中幾乎已經(jīng)可以等價(jià)于你需要什么樣的對(duì)象去表達(dá)你的業(yè)務(wù)概念,小到一個(gè)對(duì)象的設(shè)計(jì),達(dá)到非常大的系統(tǒng)領(lǐng)域設(shè)計(jì),這方面著作非常豐富更有完整的理論體系可以指導(dǎo)整個(gè)設(shè)計(jì)進(jìn)程,比如DDD。如果讓AI去寫程序,這一點(diǎn)提供足夠的訓(xùn)練集,找出一個(gè)合適的模型,這一點(diǎn)看上去十分有實(shí)現(xiàn)的可能,雖然可能需要?dú)w納的模型會(huì)非常的多,但畢竟還算收斂。理論上最理想的情況是每個(gè)行業(yè)的行業(yè)協(xié)會(huì)去規(guī)范一個(gè)業(yè)務(wù)體系模型,當(dāng)然現(xiàn)實(shí)不現(xiàn)實(shí)這事。。。,但畢竟是個(gè)努力的方向。
比較麻煩的是算法, 其實(shí)我更習(xí)慣把這一部分換個(gè)通俗的說法---腦筋急轉(zhuǎn)彎。我經(jīng)常和別人說我之所以喜歡寫代碼,更多的是喜歡做腦筋急轉(zhuǎn)彎,程序 = 數(shù)據(jù)結(jié)構(gòu) + 腦筋急轉(zhuǎn)彎。面試中遇到過很多程序員說他們就寫業(yè)務(wù)代碼了,感覺沒什么發(fā)展,所以想換工作,這種其實(shí)就是屬于寫代碼不走腦子的,到哪都不會(huì)有太大變化,這種程度的代碼AI未必寫不出來。重點(diǎn)是怎么寫好代碼,在寫代碼的時(shí)候要根據(jù)當(dāng)前的情況推論出最適合的解決方案,要秉持每一行代碼都是一個(gè)設(shè)計(jì)的理念去寫,而這種時(shí)候問題就來了,AI更多是對(duì)已有方案的統(tǒng)計(jì)來輔助產(chǎn)生結(jié)論,可腦筋急轉(zhuǎn)彎這種事一般會(huì)比較跳躍,雖然萬事萬物都是有聯(lián)系的,跳躍也是有據(jù)可循的,但是很多時(shí)候這種跳躍跨越了太多領(lǐng)域范圍,比如神經(jīng)網(wǎng)絡(luò)算法,明明是用來分解整合數(shù)據(jù)的,它卻去模擬大腦,那這時(shí)候你就要了解生物學(xué)了,而即使最強(qiáng)大的計(jì)算機(jī)其復(fù)雜程度也遠(yuǎn)不如一個(gè)蟲子的大腦。另外一點(diǎn),關(guān)于程序員年齡上限的問題,我一直保持著一個(gè)觀點(diǎn),除了天賦異稟(事實(shí)上我還真的遇到過),絕大多數(shù)程序員不過而立之年都只能算是能寫程序而已,而立之后,程序員對(duì)程序的看法可能會(huì)有很明顯的不同,因?yàn)榇a也是創(chuàng)作,創(chuàng)作會(huì)包含很多人生的積累,世界觀價(jià)值觀這個(gè)扯遠(yuǎn)了,但是回顧寫過的代碼,無不是在各種場(chǎng)景下做各種平衡甚至妥協(xié),平衡的因素有時(shí)候會(huì)包含工期,團(tuán)隊(duì)的技術(shù)組成,人員性格,配合的默契程度這些不太直觀的因素統(tǒng)合起來決定怎么做才能完成項(xiàng)目。當(dāng)然AI似乎倒是不太需要考慮溝通什么的,然而腦筋急轉(zhuǎn)彎終究是繞不過去的,要解決跳躍性的聯(lián)想,就需要各種看似毫不相干領(lǐng)域的數(shù)據(jù)來訓(xùn)練,光是龐大的量對(duì)技術(shù)的要求就不得了,而且這個(gè)模型誰來規(guī)劃,即使世界知名的軟件工程宗師。。。不過當(dāng)然,那種人的境界咱推測(cè)不了,總之算法我想說的就這些。
至于那篇文章中說的,機(jī)器理解需求的問題,這是個(gè)偽命題,因?yàn)槟苷嬲斫庑枨蟮某绦騿T也不容易見到,所以才有敏捷這回事產(chǎn)生,而用敏捷去推動(dòng)項(xiàng)目似乎AI更合適,因?yàn)樗蝗菀妆幻曰?,不?huì)被次重要的目標(biāo)而忽略了核心目標(biāo),不會(huì)因?yàn)槟承┰~語有歧義而導(dǎo)致理解的問題,至少不會(huì)因?yàn)檎?qǐng)假擔(dān)心迭代周期。這方面不好討論,反正目前人做的項(xiàng)目我也沒見過需求就真的沒理解偏差的。
而且,當(dāng)年的嫦娥估計(jì)也沒想到后來還會(huì)有人登月,看起來現(xiàn)在看AI做項(xiàng)目比當(dāng)時(shí)看登月的可能性可高多了。不過無論什么技術(shù)目前也只是輔助人做決策,至少模型的修正什么的。。。,反正我覺得至少有生之年還不至于擔(dān)心被機(jī)器搶了飯碗吧。當(dāng)然,未來的事,誰知道呢,以上。
==========================================================
咱最近用的github:https://github.com/saaavsaaa
微信公眾號(hào):
轉(zhuǎn)載請(qǐng)注明出處;http://www.cnblogs.com/saaav/p/6784686.html