色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何定義軟件工程師

工程師人生 ? 來源:網絡整理 ? 作者:工程師吳畏 ? 2018-09-14 10:24 ? 次閱讀

軟件產業發展到今天,分工越來越細。程序員做為一個通用的稱謂已經無法確切定義各種工作的特點和分類。正因為軟件開發中各種職責區分不清,無論是剛剛寫代碼的新手還是具有多年經驗的老手,一概被扣上程序員的通用名稱,這也使得很多進入這個領域的軟件開發人員無法制定自己未來的技術職業發展之路。

實際上,軟件公司也逐漸認識到了對程序員分類的重要性,開始將各種職位定義的更加準確。對于從事軟件開發的程序員來說,更需要盡快明確自己的發展方向,并在此方向上將專業知識積累的更深厚,這能讓你盡快逃脫對未來發展方向的迷茫。為此,我們專門推出程序員成長系列的特別策劃,將分別深入探討軟件設計師、測試工程師、文檔工程師、項目經理、產品經理幾種角色的成長之路。

程序員成長系列之一

軟件設計師可以預先構建軟件結構,如同建筑架構師一般。比爾·蓋茨被稱為微軟公司的首席軟件設計師,首先是因為他是一個優秀的架構設計師,中國同樣需要這樣的人才。-微軟大中國區總經理黃存義

從程序員到軟件設計師

2000年1月13日下午,世界軟件業巨人、美國微軟公司突然在位于華盛頓州雷德蒙德市的總部舉行新聞發布會。比爾·蓋茨把微軟CEO寶座拱手讓給長期伙伴史蒂夫-巴爾默,只保留董事局主席一職,但同時出任新職務“首席軟件設計師”。比爾·蓋茨說:“今后我將全力設計開發面向未來的新軟件,同時研究制定微軟的總體技術發展戰略。” 比爾·蓋茨的這一舉動將軟件設計師的稱謂蒙上了高貴的面紗。從程序員的技術方向發展來看,軟件設計師無疑是職業生涯的頂峰。

拿破侖說過“不想當元帥的士兵不是好士兵”,我想不想當軟件設計師的程序員也不是好程序員。但首先要了解什么是軟件設計師,如何才能成為軟件設計師。明了這些,就有可能向軟件設計師發展,創造更輝煌的程序人生。基于這些想法,我們采訪了佳軟CTO廖恒毅,用友軟件副總工程師彭六三和U8產品總設計師鄧適宜,這些中國軟件產業技術帶頭人從他們的切身體會談了對軟件設計師的看法。

軟件設計師的定義

軟件設計師包括軟件系統設計師(System Designer)和軟件架構設計師(Architect)。系統設計師應對“系統結構”所使用的軟件技術非常了解,自身具備良好編程技巧,才能成為優秀的系統設計師。系統設計師的職責是把結構模型對應到實現模型上,從概念到實現期間規劃和組合模型的優劣是決定軟件系統設計師好壞的標準。而軟件架構設計師是程序員技術方向的最終歸屬,也是成長鏈中最神圣的一環,架構設計師的貢獻最大。架構設計師徹底擺脫了語言的束縛,知道軟件發展趨勢。他們會開發新一代產品或者制定新一代產品的方案。軟件架構設計是面向未來的。全球大規模的軟件公司并不多,很重要的一個原因是因為軟件產品的發展都滯后于市場需求,即有需求后再研發產品,而不是預見需求,預先設計,因此往往軟件設計局部是合理的,但從整體的角度看卻不合理。要解決這些問題就要看軟件架構設計師的能力了。

軟件設計可以分三個層次。第一層屬于標準層,像J2EE、.Net的框架設計;第二種屬于系統層的設計,比如Delphi這樣的開發工具就是工具系統級的設計;而應用最廣泛的是第三層:應用軟件設計。基于中國軟件產業發展的現狀,大部分設計都是這個層次上的基于應用的架構設計,本文所非特殊標明,提到的軟件設計師泛指應用軟件系統設計師,當然有些也是架構設計師的能力所在。

從軟件開發歷史看,軟件設計經歷了很多階段。最早是結構化設計,只是把復雜的問題逐層分解,通過流程圖形式將任務逐級細化;后來出現面向對象設計,從底層進行對象封裝、繼承、多態,這時更多的是考慮代碼重用,面向的主要是類和對象。接下來出現組件設計,這主要是面向應用方面。這三種都是面向功能的設計。

從EJB、COBRA技術出現之后,人們開始基于框架進行設計,也就是架構設計。繼續發展,就是基于規則的設計了,比如基于模塊和工作流的設計,這時主要考慮客戶化做的更詳細以及產品的開放性、可擴展性、可靠性、效率方面的問題。

軟件設計師的工作

隨著大型軟件開發越來越多,整體把握軟件架構變的越來越重要。尤其當用戶需求并不明確的情況下,就要開始做軟件,如何防止交付的軟件產品和用戶的要求差的很遠,這就需要軟件系統設計師進行恰當的設計。

在應用軟件開發中,軟件設計師擔當承上啟下的角色,也就是把用戶的需求,基于應用的問題變成計算機系統中可以解決的問題。設計可以分為功能上的設計和技術體系上的設計,但在實際工作中,這兩者很難區分清晰。彭六三談到,NC(用友大型ERP系統)是通過總體設計組這個團隊共同完成軟件設計的。首先要進行產品定義,規定產品要做什么,以及相關的市場、產品周期和前景等問題,產品所應用的技術方向也會有一些描述。接下來是總體設計,總體設計要考慮技術架構以及與應用有關的問題。像跨地域的大型產品肯定要選擇慮B/S架構。每個模塊中功能節點也要定義,應用組件和描述的數據模型也要做出來,諸如形成哪些標準平臺,軟件如何分布,應用環節都屬于總體設計的范疇。總體設計再向下細分就是詳細設計。詳細設計完成之后就是編寫代碼了。

對于軟件設計,廖恒毅有自己的觀點。他認為軟件設計師如果面對很復雜的設計,即便將架構設計出來,別人如何去實現也是很困難的。既然自然語言不如程序語言表達的清晰,他喜歡先用代碼的方式把整個框架架構好,并編寫基本的組件和接口代碼。這樣其他的程序員就可以很方便的復用自己的基礎組件,并利用預留的接口添寫完整的代碼。做為軟件設計師,他能夠提供一個平臺性的開發環境,讓其他的程序員方便的進行擴展開發。這不僅降低了開發難度,而且節省了大量的重復勞動。復用模塊也可以提高系統的穩定性,因為這是經過多次測試的代碼。

軟件設計師的周圍也有很多角色,應用專家對應用需求分析了解的更深。還有技術平臺的專家,因為盡管設計師對技術平臺有一定的了解,但對于細節的內容還要請教技術平臺專家的,還需要程序員做出原型并進行驗證,通過反饋和評估不斷完善。最終用戶的反饋也是軟件設計師非常重視的。

軟件設計師的要求

做為應用軟件開發中最頂層的角色,軟件設計師的能力要求更強,除了具備更強的編程技巧能力外,還需要了解系統結構、主流軟件技術和軟件趨勢,同時要具備相當的專業知識。

多年編程經驗:既包括在專業領域的經驗,也包括在軟件工程領域的經驗。對于一個構架團隊,這些素質要求可由各團隊成員來分別承擔,但其中至少要有一名構架設計師能夠把握項目的全局。和任何行業一樣,經驗是最重要的。軟件設計不是紙上談兵,一個軟件設計師首先要是非常好的程序員。軟件設計師在編程的時候,用的工具和普通程序員沒有任何差別,但使用深度是絕對不一樣的。廖恒毅花了三天寫了個處理表格的程序,因為考慮的很巧妙,代碼不到一千行左右,但有人寫只是畫表格單元的代碼就有二千多行,這就是經驗的差距。做軟件設計的時候,肯定要求是可實施和可測試的,如果沒有做過程序員,就無法保證這個設計是可實施并進行測試。

抽象能力:一個程序員剛寫程序的時候,無非就是為了解決某個功能而進行代碼編寫。隨著程序編寫越來越多,他對自己所做的應用方面的理解也越來越多。不同的企業有不同的需求,但把這些企業放在一起來看的話,就會發現他們的一些共性。將這些共性提煉出來,這就是抽象的過程。抽象出來的共性形成的模型可以把這些企業的需求都包含進去,這是做通用軟件必須要走的一步。

哪些東西是可以抽象的呢?鄧適宜舉例說:企業管理軟件內部有很多內部票據流程,票據傳遞有自己的規則,要把他們內部的關系比較靈活的組織起來,只能把流程做為管理對象,而不能把票據做為管理對象,因為票據只是一個載體。這樣做,整個系統的柔性會更強,產品才能適合不同的企業,讓企業可以靈活的控制,取得最好的效益。。

廖恒毅更是將抽象發揮的淋漓盡致。他整個管理流程抽象成不斷矩陣運算的過程,軟件本身就是做矩陣運算的乘法器和分解器。其他程序員只需要將具體的業務抽象為以XML表達的矩陣,放入到這個矩陣中,利用乘法器做運算就可以了。

面向對象的思想:面向對象是軟件開發出現以來最偉大的創新之一,這是每個程序員都追求的,但是否真正掌握了面向對象的思想,這是需要探討的。面向對象并不受開發工具和語言的限制。很多程序員在用C++寫面向對象的代碼時候,實際上還是在寫C代碼。甚至使用C#這種完全面向對象的語言寫出來的還是流程化的程序。

很多時候學習面向對象用屏幕上畫圖的方法,新的形狀可以從標準的形狀中轉化而來,用來學習繼承的概念。但廖恒毅認為這遠遠不夠,因為屏幕上對象相互之間是獨立的,是沒有作用的離散關系。要真正學習面向對象,就要去學畫表格。表格是由行組成的,同時也是由列組成的,行中又有獨立的單元格組成。作為一個行,要整體去操作這些格,做為列,也要去操作這些格,到底是以行為單位還是以列為單位去操作單元格。如果能把這個搞清楚,那才表明你對面向對象理解的夠深刻。廖恒毅笑著說:“有的程序員在程序中把所有的東西都繼承到一起,爺爺動的時候,孫子跟著跳,孫子動的時候,爺爺跟著晃。實際上,寫面向對象的代碼,一定不要用太多的繼承。最關鍵的是如何傳遞消息和產生動作,以及考慮各個模塊之間通過什么接口來聯系,而不是再繼承。”

面向對象可以應用的領域非常廣泛。不僅在寫代碼的過程中要考慮到面向對象,實際上在設計和分析階段也可以用面向對象的方法。

舍得拋棄:軟件設計是一個漸進過程,是通過不斷碰壁,不斷調整提高的。要想取得突破,就需要舍得拋棄。廖恒毅說:“通常情況下,我寫的第一版程序是要被扔掉的。對于一個功能,我上來就寫,也不做設計,什么都不想,寫到最后,自己都煩了,然后就把這些代碼刪除掉再重新寫,這些腦中有了很多體會和印象,寫完第二版之后,也會扔掉,繼續寫第三版的代碼。這時程序邏輯架構和關系自然就很清晰了。只有用這種不斷消滅自己以前的東西方面才能夠成長的特別快,這就像相當于脫殼,不過這需要自己對自己要求很嚴格,否則又會回到原來的老路子上了。”很多人舍得扔掉自己的代碼的,往往是不斷的修改,最后進入一個惡性的循環。當然,這種拋棄也是有繼承的拋棄,不同時期產品的架構之間也有連續性,不是一個架構就會完全取代前面的架構,好的東西還是可以繼承的,像微軟的.NET架構就是從DNA架構上發展來的。

領悟和突破:程序員技術成長一種是通過學習技巧而成長,一種是通過思想領悟而得到成長,后者更為重要。如果不能領悟開發的思想,僅僅掌握了技巧,一旦改換了平臺和語言,又要從頭學起,所以很多人在轉型過程中失敗了。而掌握了編程的思想,自動就移過去了。廖恒毅表示:“語言本身從來不對我產生任何障礙,各種語言沒有任何本質的差別,就象練武一樣,刀背也可以當錘子用。” 《》

即便是很小的軟件,也可以鍛煉突破性的編程思維。廖恒毅以自己寫拼音加加的經歷講了一個例子。“輸入法體系結構和流程很簡單,就是原生數據庫和后生數據庫加上一個簡單的界面。但在處理退格的時候,你會發現這是一個很復雜的問題,如果按照常規的方法考慮各種出現的情況,程序幾乎是無法寫下去了。其實方法很簡單,只要做一個正向編輯器,定義好一個字母產生什么樣的操作,二個字母產生什么樣的操作,一個字符串產生什么樣的操作,并抽象成為每個操作對應后臺進行什么樣的操作。刪掉一個字母,無非就是把字符串去掉一個,重新處理一遍就可以了。這個問題就變得很簡單。總結出來一種基本的設計原則和思路,就是程序設計千萬不要回溯,否則就會崩潰,這是腦袋碰墻多少次之后才明白的。所以說盡管編程序寫了十幾年了,到現在還不敢稱完全領悟軟件設計,而是一直在找這種感覺。”

非軟件知識:提起軟件設計師,人們很喜歡那建筑師做比較,的確這兩個行業有很多相似之處。古羅馬建筑師維特魯威說“理想的建筑師應該既是文學家又是數字家,他還應通曉歷史,熱衷于哲學研究,精通音樂,懂得醫藥知識,具有法學造詣,深諳天文學及天文計算。”軟件設計師同樣如此。

廖恒毅說“所有讓人去思考,一切美的東西都會吸引我,我欣賞每個行業中有內涵的東西。”甚至包括周易五行,他都覺得這對開發軟件有很大的幫助。“周易五行的一套自我完備運行的體系結構,它也有自己的對象和作用關系。各種對象之間不是獨立的,而且衍生出來的作用關系讓整個系統運轉的更加自然。我編程的時候也用這種思路,努力去尋找整個程序中的內部作用關系。”

鄧適宜也有自己的看法,他覺得軟件系統比起建筑來,更象一臺機械。因為建筑一旦完成之后就很少改變它的結構,但機械不一樣,它是一臺可以通過改裝改變不斷增加功能的系統。“現在機械制造中經常是把機器分解為多個組件,分別生產,只有到最終銷售的時候,才根據用戶的需求把各個組件拼接組合起來產生不同的功能,這稱為延遲制造。這種想法在我們的軟件開發中也經常用到。我們也開發了很多靈活的可視化組件,在實施的時候才根據用戶的需求進行組裝,不僅滿足了客戶的個性化需求,而且也降低了開發成本。U8軟件中的ERB模塊要提供第三方軟件的接口程序,為了保證穩定性和下一代產品的延續性,我們做了一些模塊,可以通過注冊擴展功能,很象機械中的插件。”

向軟件設計師發展

當然,并不是每一個程序員都適合向軟件設計師角色發展的。除了自身的努力之外,還同所處的環境有很大的關系,如果只是幾個人的小公司,對軟件設計的要求不明確,自然也就無法得到鍛煉。鄧適宜說自己早期接觸的軟件開發環境都是比較大型的基于UNIX的大型數據庫環境,從中學到了很多東西,受益菲淺。

彭六三介紹說,在用友這樣開發大型軟件的公司中,程序員成長是很快的。一個普通的程序員,在代碼編寫多之后,首先可以成為一個主程序員。除了他的編程能力更強,在一個開發小組中起主導作用之外,他實際上也具有了一定的設計能力。接下來,就是和深入的了解具體的應用。除了面向對象的程序設計一定要具備,對具體應用的深入了解也是必不可少的,否則無法去設計產品。要想繼續發展,接下來的工作就是要更多了解技術標準方面的知識了。

不過,即便你是一個普通的程序員,沒有機會參與大型的軟件開發項目,也可以在開發中向軟件設計師的思維靠近,提升自己對軟件開發的認識。一個播放軟件,不同的用戶對界面有不同的需求,如何滿足不同的需求也是需要設計的,而播放軟件對不同格式文件的支持也是需要考慮的,尤其是為未來的格式預留接口,這些問題是需要在架構中考慮。不管軟件大小,都可以應用設計模式的東西。

補充資料

新聞:10月18日,微軟董事長兼首席軟件設計師比爾·蓋茨宣布了旨在培養2000名中國軟件大師的“Architect 2000高級軟件研發主管研修計劃”項目。此次微軟推出的“Architect 2000高級軟件研發主管研修計劃”,以培養軟件構架高層次人才為宗旨。該計劃將用一年的時間,通過與中國11個軟件開發園區的合作,為中國領先軟件企業的首席技術官員提供軟件設計體系原則、開發技巧和最新技術的培訓,從中培養出2000個中國軟件架構設計師。

微軟(中國)公司開發合作部經理王靜茹表示,這個項目主要解決中國軟件產品化程度不夠高、軟件開發項目管理程度不夠高的問題。該計劃用一年的時間,通過與中國11個軟件開發園區合作,為中國領先軟件企業的管理人員提供培訓。它選擇的培訓對象來自獨立軟件開發商、系統集成商和大型軟件企業,針對這3類企業選送的技術主管進行培訓。“類似培訓目前在其它發展中國家都沒有開展。國外類似培訓,受訓者每人要付幾千美元,而在中國的這次培訓是免學費的。學員參加開發研討會等也是免費的,只需交1500元的資料費。“王靜茹說。

到目前為止,微軟為這項培訓已經投入1000萬元,用來邀請老師、建立技術支持等等,同時還要做一個專門的網站。“當然,微軟的投入還包括自己的核心技術,這是無價的。”

業內人士評價說:微軟的“Architect 2000高級軟件研發主管研修計劃”其實并不是真正的培養軟件架構設計師,而是培訓使用微軟.NET構架的高級系統分析師。從學員的反饋來看,課程的內容無非是近期微軟的主打基于WEB的企業解決方案及其開發新秀.NET。具體的內容包括三方面:統一的、位置無關的的數據訪問標準XML-.NET的核心之一;Web Service -.NET的應用服務核心;.NET戰略的目的。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 軟件工程師
    +關注

    關注

    8

    文章

    218

    瀏覽量

    21136
收藏 人收藏

    評論

    相關推薦

    特斯拉招募軟件工程師強化無人駕駛與機器人遠程操作

    近日,據外媒最新報道,特斯拉正緊鑼密鼓地招募軟件工程師團隊,旨在加強其無人駕駛出租車及Optimus機器人的遠程操作能力。這一舉措標志著特斯拉在推動自動駕駛與人工智能領域邁出了重要一步。 特斯拉此次
    的頭像 發表于 11-27 10:26 ?543次閱讀

    FPGA算法工程師、邏輯工程師、原型驗證工程師有什么區別?

    ,還需要與軟件工程師、硬件工程師緊密合作,對整個系統進行集成和測試。 總的來說,FPGA 算法工程師著重于算法優化,FPGA 邏輯工程師專注于邏輯設計,FPGA 原型驗證
    發表于 09-23 18:26

    正是拼的年紀|65歲電子工程師上班VLOG #65歲退休 #電子工程師 #搞笑 #上班vlog

    電子工程師
    安泰小課堂
    發布于 :2024年07月25日 11:31:02

    嵌入式軟件工程師如何提升自己?

    嵌入式軟件工程師如何提升自己? 作為一名嵌入式軟件工程師,在這個充滿機遇和挑戰的領域里,如何提升自己顯得非常重要,它決定了你未來的發展方向和成就。接下來,我們一起探討一下。 1.奠定扎實
    發表于 06-12 11:20

    索尼誠邀軟件工程師參與PS免費手游平臺設計

    據悉,近日,澳大利亞知名媒體TweakTown發現,索尼互動娛樂正在為其旗下的PlayStation Studios Mobile招募一名資深的軟件工程師,負責設計PlayStation的免費手機游戲平臺。
    的頭像 發表于 05-23 17:08 ?724次閱讀

    嵌入式軟件工程師和硬件工程師的區別?

    、機器人等。 定義和工作職責 嵌入式軟件工程師的主要職責包括但不限于:設計、開發、測試和調試嵌入式軟件應用程序,以滿足特定硬件和軟件要求。他們需要理解并掌握嵌入式系統的基本原理,熟悉相
    發表于 05-16 11:00

    大廠電子工程師常見面試題#電子工程師 #硬件工程師 #電路知識 #面試題

    電子工程師電路
    安泰小課堂
    發布于 :2024年04月30日 17:33:15

    Cognition發布首款AI軟件工程師Devin

    據報道,Cognition公司今日公布了其首款人工智能軟件工程師——Devin,掀起了打造軟件模式變革的序幕。該產品在SWE-bench代碼測驗中展現出卓越表現,甚至超過了部分頂級人類工程師的水準。
    的頭像 發表于 03-13 10:57 ?622次閱讀

    企業老工程師和高校老師有啥區別

    電子工程師硬件
    電子發燒友網官方
    發布于 :2024年02月28日 17:50:00

    如何構建linux開發環境和編譯軟件工程、應用程序

    前文介紹了如何使用官方提供的鏡像文件啟動開發板,本文將說明如何構建linux開發環境和編譯軟件工程、應用程序。
    的頭像 發表于 01-03 12:31 ?2052次閱讀
    如何構建linux開發環境和編譯<b class='flag-5'>軟件工程</b>、應用程序
    主站蜘蛛池模板: 在线色av| 免费国产成人高清在线观看视频| 中文字幕中文字幕永久免费| 日韩一区二区三区四区区区| 久久久久久亚洲精品影院| 国产成人亚洲精品老王| 99国产精品偷窥熟女精品视频| 亚洲AV福利天堂一区二区三| 日本精品久久久久中文字幕| 久久久久亚洲日日精品| 国产偷抇久久精品A片蜜臀AV| JEALOUSVUE成熟老师APP| 樱桃BT在线观看| 亚洲精品国偷拍自产在线观看蜜臀 | 福利社影院| 99re5.久久热在线视频| 亚洲一区自拍高清亚洲精品| 无码天堂亚洲国产AV久久| 欧洲另类一二三四区| 免费可以看黄的视频s色| 久久精品视在线-2| 黑人巨摘花破女处| 国产亚洲精品免费视频| 国产精品成久久久久三级四虎| 拔擦拔擦8X永久华人免费播放器 | 另类重口bdsm日本tv| 久久99国产亚洲高清观着| 国产亚洲精品品视频在线| 国产成人教育视频在线观看| 第四色播日韩AV第一页| 边做边爱BD免费看片| 不卡一区二区高清观看视频| Chinesetube国产中文| jizzjizz3d动漫| 边摸边吃奶边做下面视频| 扒开美女的内衣亲吻漫画| xxx69欧美| 成人亚洲视频在线观看| 高挑人妻无奈张开腿| 国产成人无码精品久久久免费69| 古风一女N男到处做高H|