軟件開發的核心

「咱們一直這樣作開發,時間作久了,便忘了當初的本意。」編程

有關軟件系統開發,咱們談些什麼?
咱們談過程,編碼規範、開發流程、同行評審、結對編程、持續集成,從瀑布到敏捷再到極限編程。
咱們談架構,企業級、J2EE、容器化、SOA(面向服務架構)、Microservices(微服務化)。
咱們談規模,大容量、高併發、大數據。
咱們還談可靠性、可用率、n個九、響應時間等等。。。
這一切的核心是什麼?安全

先講個電力行業的一個故事,電力的項目我沒作過,對電廠的原理雖有所瞭解,但看見那些大規模的電站仍是感受挺複雜的。
故事是這樣開始的:性能優化

記得有個給咱們上培訓課的主講老師是個鬚髮皆白的老先生,進門後掏出一堆零件放在講臺上,
一盞酒精燈、一個小水壺、一個葉片、一個銅光閃閃的小電機、一盞小燈泡。
老先生往壺裏倒了些水,點燃酒精燈,不一下子水開了,從壺嘴裏噴出了蒸汽,帶動葉片旋轉,而後小燈泡就亮了。 微信

他說:這就是電廠。
他還說:若是燒的是煤炭,這就是燃煤電廠;若是燒的自然氣,這就是燃氣電廠;
若是得到熱能的方式是核裂變,這就是核電廠;若是帶動葉片的能量來自水從高處流向低處,這就是水電廠。
老先生說:大家或許會問 「那咱們看到的電廠怎麼這麼複雜」,答案其實很簡單,
電力項目須要複雜系統的目的,一是爲了確保安全(Safety),二是爲了提升效率(Efficiency)。markdown

安全和效率的平衡,是全部工程技術的核心。架構

看完這個故事,我就感受到所謂 「大道至簡」 大概就是這樣的。併發

開發軟件系統的根本在於知足需求,不能知足需求的系統自己是沒有意義的。
就像一個再安全、有效率的電廠不能發電又有什麼意義呢。
因此軟件系統開發也就是圍繞根本的基礎上確保安全與提升效率。運維

需求做爲軟件的根本差別很大,需求是多樣,需求也是複雜的。
一個大型 ERP 系統,一個大型倉儲系統,一個大型網站系統,到底誰更復雜,沒有一個定量標準,甚至都很差定性分析。
因此前面咱們談軟件系統開發那麼多內容都是關於 「安全」 和 「效率」 這兩個圍繞根本的核心。微服務

全部軟件開發的方法論,像瀑布、敏捷到極限編程圍繞的是開發活動的效率問題,而編碼規範、流程制定、同行評審等等則是有關開發的安全問題。
那麼 SOA 化或進一步微服務化其實同時考慮到了安全與效率,服務化拆分有利於大規模開發團隊的並行開發,提高了開發效率,
但上線部署複雜了下降了運維效率,但運維效率能夠經過自動化來獲得彌補,而開發則不可能自動化。高併發

同理,可靠性、可用性和容災設計這些活動都是圍繞 「安全」 這個核心,而性能優化,提高響應性則是圍繞 「效率」。
有些關鍵的軟件系統必須同時兼顧 「安全」 和 「效率」,例如用在飛機、汽車內用於控制起落、剎車、油門的軟件系統,
不安全或無效率形成事故是會死人的,而另一大部分軟件系統由於不安全或無效率形成的事故則死的是錢。

沒有人去爭論建設電廠究竟是不是一門藝術,但確定有人在爭論軟件開發(程序設計)究竟是不是一門藝術,
但終究大部分的軟件系統開發仍是更偏向於工程技術。


下面是我本身開的一個微信公衆號 [瞬息之間],除了寫技術的文章、還有產品的、行業和人生的思考,但願能和更多走在這條路上同行者交流,有興趣可關注一下,謝謝。

相關文章
相關標籤/搜索