今天來跟大家分享一下我對於一個好的軟體專案是什麼樣的觀點和看法。
首先說一下一個好的電影到底是應該是什麼樣的評判標準?
首先我們要來說一個好電影,一定是講清楚了某一個具體故事的。
實際上我們都認為每個電影都至少講清楚了一個故事,但是也看到了很多的爛片講的故事根本不值得講或者是是講了這個故事虎頭蛇尾,甚至有些時候根本講的都不是一個完整的故事。
所以一個好的電影必須是講一個值得講的故事,並且講的清晰的故事。
其次,講這個故事是需要有一個非常好的一個劇本。
換句話來說,我們要講清楚某一件事情、某一個故事、某一個畫面,並不是採用一種平白直序的方式來描繪這個故事,而是用一個良好的劇本圍繞這個故事為主線來展開。或跌宕起伏,或婉轉道來,每一個劇本每一個場景,每一個轉折點都能夠支援這個故事的線性發展。
一個好的劇本沒有一處是多餘的,每一個畫面都是為了表達某一個想法,某一個觀點或者為了鋪墊下一個高潮。
與此相反,有很多爛的電影在劇本上面往往會出現很大的問題,很多時候用了大量的時間去敘述某一個場景或者畫面,但是和電影的主旨卻毫無關聯,觀眾看了二十分鐘對於某個情節的刻畫,滿以為會和後面的高潮情節關聯起來,看完了才發現看了個寂寞,半毛錢關係沒有,直接剪掉二十分鐘完全不影響它還是個爛片。
對於劇情和情節設計之牛逼,這裡面非常典型的我認為就是周星馳的電影,舉一個具體的例子,就是《九品芝麻官》這個電影裡面有大量的細節上面的場景上面那些描述,但往往我們看到了它在後面都是能夠前後呼應,真的可以算得上沒有一個畫面,沒有一個買伏筆是多餘的。比如周星期在雜技班學習吞劍,就在後面對簿公堂上使用了這一招。
最後一個點,我覺得每一個電影畫面是有細節的,而且這個細節是鮮活的。
往往說細節是魔鬼,一個細節往往在最小的地方有著最大的感染力。往往細節都是普通卻撼人心魄的,一次流淚,一次微笑,一次幽默,一次反轉,一次回頭,一次牽手,一次擁抱這些都是一部好電影不可或缺的細節,往往就是無數個多個細節構成了畫面和情節,最終直擊我們的心靈。
當然細節是要有在好劇本的情況下才能夠體現的,但是很多電影往往講不好整個故事,卻在細節處下苦工。有些時候就會變得畫虎不成反類犬的既視感。
所以很多爛片裡面你會發現它也存在很多搞笑的一些情節,但是你會發現在沒有一個良好順暢的主故事線路的鋪墊下,這種細節反而成了扭泥作態,強行搞笑,刻意逗樂觀眾。
好,我們說完了一個好電影的幾個特點,那麼我們回過頭來看一個好的軟體工程應該具備什麼樣的特點?或者說為什麼我們說一個好的軟體工程實際上就是一部好電影?
首先第一個點一個好的軟體工程一定是系統性的解決了某一個問題。
這個我相信一個好的軟體系統工程和一部電影一樣,電影要說清楚一個問題,而一部好的軟體工程要解決一個好的問題。
在網際網路軟體行業裡,我們更在乎的是一個軟體工程是不是能夠系統性解決某一個問題。除了在各方面能夠達能滿足需求外,在效能、體驗、成本、安全上面也是滿足合格的。
其次,一個軟體系統是要跟一個電影一樣,具有一個非常良好的結構的。
這個就是我們所謂的一個系統架構,軟體系統架構要具備一定的優美性、結構性、可擴充套件性。和電影有點不一樣,電影的結構是給觀眾看的,而一個軟體工程的內部結構是給開發者去看的。這個就是所謂的這同樣滿足了某一個需求之後,軟體的質量是完全不一樣的。用同樣的相關的邏輯,儘管也能寫出一份滿足需求的功能程式碼。好的軟體工程和軟體工程在結構性,在魯棒性,在穩定性,可擴充套件性都是不可同日而語的,這個就非常考驗軟體工程師的架構設計能力,這個就如同一部電影需要有一個非常好的劇本一樣。所謂骨架即架構,良好的骨架就能支撐一個生命體動態的活著。
和好電影一樣,一個非常好的軟體架構應該是多一行程式碼嫌多,少一行程式碼就跑不起來了。每一行程式碼,每一個模組,每一個方法,都有它具體和清晰的功能。或者換個專業說法,模組內的邏輯一定是緊耦合的。
好的工程裡不存在累贅的,複雜的,多餘的,無效的程式碼。這個就是如同電影裡面的每一個臺詞,每一個場景,每一個細節都承載著它具體的功能的。
最後就是程式碼是有細節的。
儘管解決某一個特定的功能都可以用不同的程式碼方法,但是在好的軟體工程裡面解決某一個最具體的問題的時候,一定用的是一個當下最佳的辦法。比如在處理某一個變數或者列表的時候,有沒有用上一個很好的函式?比如同樣處理一個常見問題的時候,是否運用了恰到好處的高階函式?
如對於兩段處理相同的邏輯,有沒有抽象到一個公用的函式來解決這個問題?
比如比如對於異常的處理是不是已經非常的明確,在面對各種各樣的邊界異常情況都能夠展現出一個很好的使用者體驗?
比如在核心的場景鏈路裡面有沒有設計可以自動降級的邏輯,可以在次要的介面異常的情況下的話,不會損害主幹的功能?
這個就是所謂的魔鬼細節。
當然和電影的劇情和情節一樣,如果只是有程式碼細節而沒有全域性的架構,那麼這個細節不值一提。
所謂細節決定成敗,細節是魔鬼,往往是在有全域性觀的情況下,細節才能夠彰顯出來它的魅力。
所以一個好的軟體工程就是一部好電影。一部好電影可以是一個很好的藝術品,一個軟體工程也可以是一個極好的藝術品。