小時候,老師問我,你的理想是什麼?我不假思索說是php工程師,於是長大後果然成了工程師。
工作這麼多年,一直在思考工程師這三個字的意義,終於有一天恍然大悟,原來就是:用技術手段改進世界。
那麼,在軟體方面,目前的世界有哪些問題需要解決呢?有這麼一些問題可以思考:
現在全世界資訊化的程度是偏高還是偏低?
程式設計師的人數夠用嗎?
軟體產業的生產力是偏高還是偏低?
大部分軟體系統都可靠嗎?
我想說說我對這幾個問題的理解。
雖然現在我們的生活與十年前相比,已經發生了巨大變化,例如智慧手持設備已經非常普及,可穿戴設備也在蓬勃發展。十年前我們用手機收發簡訊或郵件,瀏覽非常簡單又老套的wap頁面,但現在,絕大部分人的手機已經取代了電腦,成為日常生活中不可缺少的工具。
我們用手機交流,購物,欣賞影視,閱讀書籍,玩各類遊戲,尤其是飛速發展的移動購物和支付體系,使得我們能在任意場合購買心儀的物品,訂購旅遊服務和賓館,叫快餐,搭計程車等等,生活非常美好,那麼,整個世界的資訊化程度處於什麼層次呢?
我覺得,才剛相當於小學二年級,整個世界的資訊化程度仍然嚴重偏低。從現在算起,往前10年,往後10年,這20年時間中,面向個人的資訊化服務處於高速發展期,這個領域非常吸引眼球,因為它與每個人的生活息息相關。可是,另外還有一些領域,卻非常需要發展,那就是傳統產業的資訊化。
之前有不少傳統行業,進行了一定程度的資訊化,但這個資訊化僅僅能滿足自身運作的基本要求,當它與整個社會的潮流相對接的時候,就顯得非常落後,遲緩。比如說在網購這個大體系中,一般用戶所能看到的是商品展示,比價,下單的過程,但背後的核心環節卻是配貨與物流。
我還在上學的時候,有老師這麼說過,現在電腦業非常火熱,很可能要飽和了,你們不一定非要從事這方面的工作。現在回頭看這句話,覺得很有趣,人真的很難有眼光看到未來。去年我入職蘇寧訓練的時候,孫為民副總講了當年一個決策失誤的例子。 90年代末,公司統計發現全國空調的年銷售量達到數百萬台,覺得很可怕,這個行業可能要飽和,估計要再想辦法拓展別的商品經營了,但現在,全國空調的保有量為七億台,即使完全沒有新增,十年換一輪,每年也賣得出去七千萬台,當年憑什麼說這就飽和了?
所以我現在看程式設計師的狀況,仍然是供不應求,尤其是高端程式設計師,十分搶手。這個問題的背景就是全社會的資訊化進程在加速,之前的程式設計師人數遠遠跟不上需求量。
那麼,要如何解決這個問題呢?一方面是繼續培訓,促使更多新人來到這個行業,並且認真做下去,另外還有一些別的手段需要考慮。
我想追問一個問題:世界上懂業務的人多,還是懂技術的人多?很明顯,懂業務的人多很多,什麼叫業務?其實就是行業常識,生活經驗。
比如說,一個有經驗的倉庫保管員,可能文化程度不高,理解不了軟體的運作原理之類,但一定對產品出庫入庫的流程非常熟悉,包括各種審批過程和異常狀況,但這些,程式設計師是不懂的。那如果要促進這個領域的資訊化,必然要在兩者之間尋找一個結合點,程式設計師可以學業務,業務人員也可以嘗試參與軟體研發過程,目前來說,都是前者比較多,因為程序員相對來說還是比較年輕,學東西快些。但從整體社會效益來說,這其實是不利的,因為程式設計師是更稀缺資源,而傳統業務人員非常多。
之前見過一個問題:如何讓業務人員更好地參與軟體研發過程。這個問題的根本解決方法是DSL(Domain Specific Language),核心解決方案是二次開發平台。
什麼是DSL和二次開發平台呢,這兩個字聽起來很高端,但其實大家有很常用的東西就屬於這個範疇,比如Excel,它提供了各種各樣的公式,還有VBA,使用這些東西的人絕對大部分不是軟體產業的,Excel就是一個很成功的二次開發平台,公式和VBA就可以算DSL了。
很多時候這些東西還不夠直觀,我們可以看到一些圖形化的程式語言,例如Scratch,現在很多小學生的興趣班就會學,這些東西相對學起來就比較容易了,我們也可以做一些類似的抽象,以圖形化的方式讓業務人員能夠參與,例如流程配置等等。圖形化的東西,是最適合非技術人員理解的。
所以,要促進社會的資訊化程度,最好是能夠想辦法把各行業的業務人員都拖進來一起搞。具體的分工大致是:技術人員和業務人員一起定義DSL,技術人員負責DSL的底層平台實現,業務人員負責使用它來建立業務模型和業務流程,甚至業務介面。
那麼,軟體產業的生產力是偏高還是偏低呢?我認為嚴重偏低。什麼叫嚴重偏低?如果以機械力量的變革來對比,軟體產業目前的生產力水準處於蒸汽機發明之前。也就是說,生產力遠遠沒有被解放,大家做的大部分東西將來是會被機械化的,不再需要這麼多人來做這麼重複的勞動。或許很多人會對這段話不滿,怎麼就重複勞動了,你說說我做的什麼是可以被機器取代的?
換個角度看,為什麼幾乎所有外行人都覺得軟體貴呢?因為人力成本太高了,他們覺得,做出這麼多東西,應該是不需要這麼多時間。為什麼雙方的反差這麼大呢?
我覺得其中的關鍵點在於絕大部分工作的抽象程度嚴重不足,另外有很大一部分效率損失在程式設計平台或程式語言的不完善,例如web前端。
從第一代到第四代程式語言,每一代都是損失一定運作效率,而大幅提升編寫效率。隨著硬體技術的發展,軟體程式設計必然越來越粗放,大的趨勢是不特別重視細節效率,只要沒有數量級的效能損耗。
所以我們可以預期,會有越來越多的人使用一些運作效率相對不怎麼高的語言或框架,只是為了提高單位時間的生產力。從老闆們角度想,也會明白,提升運轉機器的效能,要比多僱用幾個程式設計師便宜多了。因此,從整體趨勢來看,追求細節績效的程式設計師們恐怕會離自己的理想越來越遠了,除非是在某些特定領域。
那麼,絕大部分軟體系統都可靠嗎?我換一句話來問:各位程式設計師朋友,如果你們住的房子品質跟你們正在做的軟體一樣,你敢住嗎?感覺大家都在笑,笑是什麼意思,我們都懂的。
那為什麼軟體系統的品質不容易高呢?我覺得主要原因是流程不完善。那為什麼不完善?需求容易變。為什麼容易變?是因為不論程式設計師自己,還是需求方,其實潛意識都認為自己做的東西是變更成本較低的。
試想一下,為什麼沒人在蓋高樓蓋一半變更需求?為什麼沒人脩大橋修一半變更需求?甚至做衣服做一半的時候變更需求,理髮到一半變更需求,都會被人認為是不講理。但是在軟體領域,好像這倒成了普遍現象。
因為整個軟體系統的實現,都是虛擬的,看不見摸不著,並不消耗什麼物料,所以從這個角度想,變起來當然是容易的。但軟體系統的架構,其實也跟實體的沒本質區別,變更時候要考慮很多關聯因素,並不是就那麼孤立的看一小塊地方,當然,也會有一些不影響全局的變更。打個比方說,如果你在蓋房子蓋到一半,那變更外牆顏色肯定是要比變更窗戶大小容易的。要是想變得太多,估計只好拆了重來。
我看過不少公司是透過加強測試的方式來試圖控製質量,但個人覺得這種方式不划算,而且收效不高。要好好應對需求變更,很重要的一點就是不要有這個軟體一定不會改的想法,然後,從架構上做拆分,隔離,組件化等等,力爭做到即使要改,也只改某一塊的內部,不影響別的地方。
很多軟體公司,一方面不注重架構的設計與宣貫,導致變更的時候問題多多,程式設計師也不能很好領會架構意圖,一方面忽視整個過程中對架構的管控,認為架構只是最初那張靜態圖。
任何一種架構方案,都需要一個好的管控機制。沒有哪一棟蓋大樓的只認真管設計圖紙,不控制施工過程。架構其實是跟施工過程嚴格相關的,架構並不是一張扁平的圖,而是立體的東西,作為整個系統工程的骨架。如果能在開發的時候看到這個骨架逐漸建立,血肉充盈的過程,對整個系統的成功把握一定會大
得多,這也就是開發過程中架構管控的理念,具體實現要依賴不同場景。
所以,未來的軟體開發方案,一定是會朝著幾個方向發展:
高生產力,單位時間生產效率更高,普通人員也可以參與
高可控性,整個生產過程更加完備可靠
有時候看現在的小孩子,會覺得他們很幸福,因為等他們這代長大,就不需要像我們現在這樣編寫程序了,那時候,程式設計已經成了一種令人習以為常的通用技能,就像現在的人用Office軟體一樣,所謂的編程,很可能已經不需要敲代碼了,而是圖形化,設定幾個參數就完事了。
免費領取LAMP兄弟連原創php教學光碟/《細說PHP》精要版,詳情諮詢官網客服:http://www.lampbrother.net
|

PHP和Python各有優勢,選擇應基於項目需求。 1.PHP適合web開發,語法簡單,執行效率高。 2.Python適用於數據科學和機器學習,語法簡潔,庫豐富。

PHP不是在消亡,而是在不斷適應和進化。 1)PHP從1994年起經歷多次版本迭代,適應新技術趨勢。 2)目前廣泛應用於電子商務、內容管理系統等領域。 3)PHP8引入JIT編譯器等功能,提升性能和現代化。 4)使用OPcache和遵循PSR-12標準可優化性能和代碼質量。

PHP的未來將通過適應新技術趨勢和引入創新特性來實現:1)適應云計算、容器化和微服務架構,支持Docker和Kubernetes;2)引入JIT編譯器和枚舉類型,提升性能和數據處理效率;3)持續優化性能和推廣最佳實踐。

在PHP中,trait適用於需要方法復用但不適合使用繼承的情況。 1)trait允許在類中復用方法,避免多重繼承複雜性。 2)使用trait時需注意方法衝突,可通過insteadof和as關鍵字解決。 3)應避免過度使用trait,保持其單一職責,以優化性能和提高代碼可維護性。

依賴注入容器(DIC)是一種管理和提供對象依賴關係的工具,用於PHP項目中。 DIC的主要好處包括:1.解耦,使組件獨立,代碼易維護和測試;2.靈活性,易替換或修改依賴關係;3.可測試性,方便注入mock對象進行單元測試。

SplFixedArray在PHP中是一種固定大小的數組,適用於需要高性能和低內存使用量的場景。 1)它在創建時需指定大小,避免動態調整帶來的開銷。 2)基於C語言數組,直接操作內存,訪問速度快。 3)適合大規模數據處理和內存敏感環境,但需謹慎使用,因其大小固定。

PHP通過$\_FILES變量處理文件上傳,確保安全性的方法包括:1.檢查上傳錯誤,2.驗證文件類型和大小,3.防止文件覆蓋,4.移動文件到永久存儲位置。

JavaScript中處理空值可以使用NullCoalescingOperator(??)和NullCoalescingAssignmentOperator(??=)。 1.??返回第一個非null或非undefined的操作數。 2.??=將變量賦值為右操作數的值,但前提是該變量為null或undefined。這些操作符簡化了代碼邏輯,提高了可讀性和性能。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver Mac版
視覺化網頁開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能