再論軟件工程沒有銀彈


爲什麼說軟件工程沒有銀彈?

上篇文章論述了軟件工程之所以不存在銀彈是因爲,軟件工程本身存在複雜性,一致性,不可預見性,不可視化性。有些專家就這個問題持有相反的觀點,大致可以分爲以下幾種

  • 時間倒退
    在20世紀50年代,開發程序還是使用紙帶打孔,我們在那個時候根本沒有考慮到計算機硬件會發展的如此之快,更不會想到會有今天的智能編輯器和統一的開發環境,在今天看起來是次要困難的事情,可能在那個時候就是主要困難。也就是說現在看起來的主要困難在未來幾十年後,很可能被解決。就像未來簡史所說的,在21世紀人類戰勝了饑荒,瘟疫和戰爭,但是這些事情,在上個世紀看來是完全不可能的事情,但是這個世紀我們做到了。著名的尤瓦爾赫拉利教授說這個世紀我們要重新找點事情做做,那就是我們這個世紀要解決的問題就是獲得永生,永遠快樂,直接成神。他並不是說,這些夢想一定可以實現,從某種意義上來說,我們可能朝着這個方向發展。

但是我們反過來看,饑荒瘟疫和戰爭都是屬於某個領域特定的問題,但是軟件工程卻不是,它本身就存在複雜性。即使在20世紀50年代,那個時候的程序在軍用上也有指令集非常複雜的程序,就那個時候來看,硬件限制的問題依然是次要問題。

  • 開發人員沒有深入理解面向對象的思想
    可重用和可交互構件的開發是解決軟件工程的問題之一,是的,我非常贊同這個觀點,但是可重用和可交互的軟件也需要良好的設計和建模,以適應各種複雜的應用場景,這種情況下,我們只是通過複雜的建模和設計來掩蓋軟件工程本身的複雜性。

面向對象的開發-這顆銅質子彈可以嗎?

面向對象的編程語言使我們使用更大的零部件去構建軟件開發工作。但是還是需要構建…,所以說,要想避免掉軟件開發的複雜性就是不開發軟件(購買軟件),或者最大程度的使用軟件包,即最大程度上進行軟件重用,比如說,alibaba提供的fastjson,dubbo rpc服務或者數據庫服務等等,我們發現這些都是針對特定領域問題的解決,如果真實集成到我們的業務中去,還需要一定的困難,即這些服務必須有良好的設計,完善的文檔。我們可以想象,抽象出來這些工具類的使用,說起來容易,做起來是一件非常困難的事情。

銀彈的本質-形勢沒有發生根本的改變

雖然說,就目前來看,我們沒有辦法從根本上解決軟件開發的複雜性,但是我們可以通過一些技術選型或者建模等方法的使用,降低軟件開發的複雜性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章