程序员or需求工程师,谁决定软件的最高水平?
最近的熱點話題就是美國的技術斷供,不但有芯片斷供、操作系統斷供、將來還可能有工業設計用軟件(CAD等)斷供、甚至企業管理類軟件的斷供(ERP等)。相比前面的各類產品而言,ERP類的產品技術難度要低,而且中國有數量巨大的企業和需求,對軟件商而言鍛煉成長的機會非常多,但為什么我們做不好、做不大、也做不強呢?(看看高鐵、橋梁等領域在需求和數量的驅動下都是后來居上!),原因有很多,這里重點談一下軟件生產的重要角色之一:需求工程師的作用和存在的問題。
提到軟件行業,人們的關注點大都在程序員身上,很少有人提到需求工程師(IT行業以外的人甚至不知道存在這個崗位),需求工程師也經常抱怨說自己夾在客戶和程序員中間兩頭受氣。在軟件行業中,需求工程師的核心工作是把模糊不清的客戶需求轉換為清楚的可指導編程的設計資料,通常可能是一個比程序員還要辛苦的角色,他的定位不清,干著“臟活累活”,卻沒有相應的地位和職責。舉例一些常見的問題(不限于此)
■作為需求工程師的定位、資格、責任、價值不清晰、不明確。
■在客戶現場調研時經常會被調侃是傳聲筒、錄音機,什么也決定不了。
■被領導輕視地說:需求工程師不需要什么技術、能寫文檔就行了。
■IT技術僅僅指的是編程工作,需求分析和設計不屬于技術范疇。
■與程序員意見不同時,常被告知“你提的需求做不了”,或“怎么做我說了算”。
■需求工程師大都由不同行業和崗位轉職而來,缺乏需求工作的相應理論、方法、工具和標準。
■程序員可有4年大學教育,還有很多的培訓編程的機構可選擇,但需求工程師技能獲得的來源基本上靠自學、或是師傅帶徒弟的方式等
決定一款軟件產品價值高低的不僅取決于編碼技術水平,首先是需求分析和設計的水平。甚至一個應用軟件公司的核心競爭力很大程度也取決于需求工程管理水平、需求工程師的業務水平。這一點有很多的軟件企業還沒有充分地認識清楚,他們只強調軟件行業自身的個性、沒有看到軟件行業與其他行業相似的共性,這個共性就是“產品的價值來自于分析與設計”。
為什么這樣說呢?其實道理很容易理解,與其他的行業做個橫向對比就明白了,IT行業以外,不論哪個行業(建筑、制造、服裝、科研等)都有設計師的崗位,生產任何產品的第一步都是做分析與設計,然后依據設計結果進行生產,這是人人皆知的常識,設計工作的內容包括了對產品需求的調研、分析、以及基于需求分析成果對產品進行的設計。沒有人懷疑是設計師的水平決定了產品價值的高低,還有一個重要的區別是在其他行業,“需求與設計”是工作都是由設計師完成的。
但是軟件行業不同,軟件公司有單獨的需求工程師崗位,大一些的軟件公司有架構師崗位,但不論軟件公司的規模大小與從事哪個領域的業務,都沒有明確的設計師崗位。
軟件架構師與一般行業中xx設計師有所不同,軟件架構師的概念是偏向編碼技術的角色,他的工作重點是系統的結構部分,而不是系統全部內容的設計,通常產品的客戶價值大小也不是他的主要關注點。由于沒有清晰的“需求”與“設計”崗位定義,事實上大多數軟件公司的需求工程師不但進行了產品的需求分析,同時也參與了產品的業務設計和應用設計,而 “需求分析、業務設計、應用設計”的工作成果恰恰是決定產品客戶價值大小的關鍵,這就是為什么說需求工程師的工作成果決定了產品價值高低的原因(當然程序員的編碼水平、新技術的應用等也會影響產品的價值)。
再與國外軟件商同行進行一下價格對比就更清楚了,外國大牌公司的(SAP、IBM、ORACLE的等)設計方案動輒就要大幾百萬、上千萬,高的更不用說了,而反觀國內廠家的提出設計方案報價就很低,甚至是免費的,目的是能掙到開發費就可以了。設計方案的核心工作就是調研、分析和設計,同樣的工作,國內國外廠商獲得回報差異巨大。
從上述對比可以看出來,軟件行業需求工程師要做的工作接近于其他生產行業設計師做的工作,需求工程師需要同時考慮客戶的需求(經營層面、管理層面、操作層面、系統層面等)、軟件商的需求(功能、成本、周期、能力等),需求工程師是與客戶銜接的窗口,他的理解、分析和表達能力決定了產品的最高價值(這個價值包含了客戶與軟件商雙方)。在其他行業中設計師的地位很高,是受人尊重的崗位,是產品生產過程的龍頭,對產品結果擁有決定權。與之相比,軟件行業的需求工程師雖然也做了類似的工作(分析、設計),但由于在行業內或軟件公司內部沒有明確定位和資格要求,所以地位就比較尷尬,他本人也不清楚他可以決定什么。
為什么會形成這種現象呢?究其原因可能有以下幾個方面(不限于此)
■長期以來,軟件企業以“系統功能交付”為主,系統設計不是“價值導向”,因此需求工程師只需要傳遞客戶的功能需求即可。
■受過專業培訓的需求工程師很少,大都是“自然成長”,或“師傅帶徒弟”的形式,能力參差不齊,且高水平者不多。
■廣泛地存在著不清楚如何與外部的客戶溝通、調研、記錄和分析,也不清楚如何與內部的程序員溝通、應該傳遞什么文檔、內容、標準等問題。
■軟件的需求工程尚未沒有形成一套技術性的體系,缺乏相應的理論、方法、工具、標準和流程,交付成果的形式很隨意(以文字描述為主),因此需求工作不被看成是“技術工作”,需求工程師也不被看成是“技術崗位”。
■由于缺乏培養需求工程師的“技術”體系,通常只是將需求工作作為一門“經驗”傳遞,內容松散、缺乏實操流程和標準,與編程技術體系相比有很大的差距。
■缺乏一套評估需求工程師能力的體系。等等。
順便說一句,分析與設計交付物的低水平,又常常造成后續技術開發工作的質量低、進度慢和成本高的問題。
因此,培養合格的、高水平的需求工程師,是軟件公司提升產品質量、客戶價值所必須要先做的基礎工作。需求工程師應該成為客戶與程序員之間的橋梁,他應該做到將客戶的需求用程序員可以理解的方式表達出來,同時將軟件完成預期效果告訴給客戶。作為一名合格的需求工程師需要掌握三個方面的知識:
■知識1.需要精通需求分析和軟件設計的知識(這是需求工程師的看家本領);
■知識2.需要理解客戶的業務,掌握相應的業務知識;
■知識3.需要了解軟件實現的原理、過程等的IT知識;
需求工程師的水平提升可以帶動開發工程師的水平提升,從而帶動產品整體水平的提升。因此在某種意義上可以說
■需求工程師的能力,決定了系統的最高水平(易用、好用、價值等)
■程序員的能力,決定了系統的最低水平(可用、性能、安全等)
相比較而言,需求工程師的平均年齡要大于程序員的平均年齡,但是需求工程師的平均專業水平要低于程序員,這是因為絕大多數的需求工程師都沒有受過相應的專業教育和培訓,提升軟件產品水平和價值的關鍵在于提升需求工程師的能力,需求工程師是一個可以學到老做到老的工作崗位(高級咨詢師、咨詢顧問等)。
希望學習分析和設計的知識、快速地提升需求工程師的能力讀者可以參考《大話軟件工程-需求分析與軟件設計》一書。
總結
以上是生活随笔為你收集整理的程序员or需求工程师,谁决定软件的最高水平?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序设计原则——优化程序
- 下一篇: linux qt应用程序全屏,QT中MD