2021-09-08-????編程藝術和編程的本質(zhì)

B-2幽靈戰(zhàn)略轟炸機

傳統(tǒng)家具

編程藝術

最近看老外寫的代碼,感覺他們寫代碼就跟搞藝術一樣,就像珍珠一樣晶瑩剔透,甚至注釋比代碼都多。

國外在產(chǎn)品中注入藝術氣息的不再少數(shù)

法國大餐,秀色可餐。
日本料理,精致溫婉。
蘋果產(chǎn)品,兼顧藝術品味,簡約大氣又耐用。
美國隱身戰(zhàn)斗機,外觀霸氣,操作簡約。
歐洲、日本的汽車流線、顏色都很美,功能人性化。
古羅馬帝國作為橫跨歐洲、非洲與亞洲的強大帝國,格外強調(diào)其建筑的威嚴,以給人不可侵犯的感覺。


法國扇貝
古羅馬建筑

當制造業(yè)開始講求審美訓練,藝術帶給它什么硬核好處?
學習藝術不但可以把工業(yè)產(chǎn)品做得更人性化,還可以把一個行業(yè)帶到新的高度,
國外好的工業(yè)產(chǎn)品在視覺上都會給人很大的沖突感,是美學的一部分。
很多行業(yè)粗制濫造,只追求做出來,不會精益求精,產(chǎn)品也不會賞心悅目,沒有體驗感

「知乎」上有段評論:
老美的代碼看起來是一件藝術品,他們會在代碼文件頭、函數(shù)頭里寫上很漂亮工整的注釋,然后項目有一個龐大復雜的架構,各種設計模式、框架結合使用,好像這些東西用得越多越流逼一樣。

俄毛子的代碼那簡直就是天書,一股濃烈的geek氣味伴隨著灌滿伏特加后眩暈的混沌感撲面而來。變量名寫長一點清晰一點會死嗎?plmm不是漂亮美眉,看了半天代碼連猜帶懵才知道是Platform Link Maintainess Manager。

印度人寫的代碼就像一條工業(yè)流水線出來的產(chǎn)品一樣,每個都很規(guī)矩,但也很死板。一個環(huán)形消息緩存的東西用竟然數(shù)組來實現(xiàn),然后在下標計算時倒來倒去。尼瑪用個鏈表來實現(xiàn)會死是不。

中國人寫的代碼還是比較實用的,但如果不加控制就會犯低級錯誤。你見過為了查找一個用戶id,先用select *從數(shù)據(jù)庫把所有內(nèi)容都撈出來,然后用個大大的for循環(huán)來查找的代碼嗎?我看了當時就淚奔無語了。

崇洋媚外不可取,夏之蟲和井之蛙也不能做。
希望我們能突破自己的認知,站在巨人的肩旁上,讓自己不斷強大。

編程的本質(zhì)是什么?


《教父》里說過:花半分鐘就看透事物本質(zhì)的人,和花一輩子都看不清本質(zhì)的人,自然是不一樣的人生。

所以我們嘗試思考下編程的本質(zhì),或許可以讓我們走的更遠。

對于編程這件事,編寫程序,就字面意思來講,事情的結果是程序。

程序是啥意思呢?

廣義上的程序是指,一系列的動作以相同的方式執(zhí)行,在相同的環(huán)境下,總能得出相同的結果。

你比如開銀行卡賬戶,你需要準備好材料,像身份證,去銀行填表,核身,簽字,最后拿到一張屬于你的銀行卡。

換一個人也要走同樣的程序,同樣要備好材料,填表,核身,簽字,同樣要到銀行辦理,同樣最后拿到了銀行卡。

你會發(fā)現(xiàn),定義里面有三個相同,也就是程序最大的特點就是重復。

只不過上邊例子里的重復,是在銀行這個地方發(fā)生的。每天做著相同程序的業(yè)務,只是不同的客戶,不同的柜員。

但開卡業(yè)務只能在銀行辦理,這就很受局限了。我得花費時間和體力,跑到銀行,還得挑銀行上班的時間。那有沒有辦法,我不去銀行也能把銀行卡開下來呢。
計算機互聯(lián)網(wǎng)的出現(xiàn),就解決了這個問題。

要交的材料,要走的程序,要拿的卡,都不變,只是整個操作環(huán)境,從線下的銀行,變成了線上的某個載體,可以是個 PC 端 Web 網(wǎng)站,也可以是個移動端 APP。

線上就是指互聯(lián)網(wǎng),它能夠讓信息的傳遞跨越空間,而操作的載體,無論是 Web 網(wǎng)站 還是 APP,背后都是計算機程序。

從前你要花一個小時坐公交去銀行,如今足不出戶點點手機就能辦理業(yè)務。

計算機上的這些程序從哪來的?

就是程序員編寫的。

所以程序員要做的事就是,把線下現(xiàn)實世界的事情,編到線上計算機里來做。

這有點像電影編劇的角色,都要取材于現(xiàn)實。

不同的是,電影編劇會充分虛構,保證藝術源于生活又高于生活,產(chǎn)出物是一兩個小時的影像。

而程序員要充分還原現(xiàn)實,保證程序符合正常邏輯不會錯亂,產(chǎn)出物是電子設備上的應用程序。

那編程的目的就很清晰了,用計算機來解決現(xiàn)實世界的問題。

無論是現(xiàn)實世界還是計算機,我們做一件事,都需要有三個核心要素:輸入(Input)、處理(Process)和輸出(Output),簡稱 IPO。

編程就是把現(xiàn)實世界的問題,映射到計算機的 IPO 中。

那怎么把現(xiàn)實世界的問題映射到計算機的 IPO 中呢?

我理解要通過模型。

什么是模型?

模型是指用一個較為簡單的東西來代表另一個東西。

如果要簡單化一個東西,那就需要對這個東西進行分析,然后抽象。

抽象的維度,決定著最后軟件的形式

比如 form-render抽象層次,可以是拖拽式,可以config 配置, 可以是表格配置

如果對計算機本身進行抽象,那軟件就會以機器代碼或匯編語言的形式呈現(xiàn)。

如果對計算處理邏輯進行抽象,那軟件就會以非結構化的高級語言呈現(xiàn),比如 Basic。

如果對問題領域過程進行抽象,那軟件就會以結構化的高級語言呈現(xiàn),比如 C。

如果對問題領域元素進行抽象,那軟件就會以面向?qū)ο蟪绦蛟O計語言呈現(xiàn),比如 Java。

也就是說,編程語言是現(xiàn)實世界到計算機世界抽象的機制。

總結: 枚舉 => 歸納 => 抽象

編程的本質(zhì)就是可計算,可計算的基礎就是建模
建??蓪崿F(xiàn)必須簡化,簡化的方式就是抽象
簡化的前提就是限定范圍。
然后一切編程成為了限定范圍內(nèi)抽象模型的數(shù)學計算的計算機表達

所謂的編程,就是使用某種語言,在某個維度,把現(xiàn)實世界抽象成簡單的模型,然后設計實現(xiàn)出可運行的計算機軟件,也就是完整的 IPO

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容