軟件開發工程師

軟件開發工程師

從事軟件開發工作人員的統稱
軟件開發工程師是對軟件開發人員的職業稱呼,其主要職責是在有限時間内開發出具有實際實用價值的應用程序。[1]軟件開發工程師要求學會許多編程語言,除了最基礎的編程語言:C語言、C#、C++、Objective-C等,還有數據庫技術:SQL、ORACLE、DB2,NET平台技術,C/S、B/S程序開發,以及諸多如JAVA、SCRIPT、AJAX、HIBERNATE、SPRING、J2EE、WEB、SERVICE、STRUTS等前沿技術。
    中文名:軟件開發工程師 外文名:SDE,or Developer 别名: 統稱:從事軟件開發相關工作的人員 技術要求:各種編程語言

主要職責

具體職責

1、熟悉軟件開發流程;n2、負責與需求人員接口,熟悉項目的需求規劃說明;n3、負責與開發組長接口,熟悉項目的開發計劃,及項目的概要設計說明數據庫設計;n4、按計劃完成功能模塊的功能設計、代碼實現,代碼編寫和單元測試,并提交測試人員進行功能測試;n5、與測試人員接口,完成相關功能模塊的BUG修複;n6、根據項目要求,判斷是否需要完成《詳細設計說明書》的編寫;n7、嚴格遵守相關開發工具的編碼規範;n8、參與需求和設計讨論,對項目開發各個環節進行簽字确認;n9、為前端技服人員提供技術支持,解決技服過程中遇到的相關問題;n10、提交相關年、月、日計劃和總結。n

管理職責

1、對各項目軟件開發、編程等有效程序的質量、進程的自我管理;n2、确定客戶所開發項目的政策、文件等信息保密性;n3、對自編項目的自檢自查。nn

工作權限

1、對公司決策性制度或規劃有建議權;n2、對項目實施過程中出現的風險有自我評估權;n3、對重大技術措施和技術方案,有建議權;n4、項目發展出現不能解決的問題的時候,可以向上級申請協作權。n5、對本部職責範圍内的工作有管理權。

要求掌握的知識

    熟悉計算機系統的基礎知識熟悉網絡操作系統的基礎知識理解計算機應用系統的設計和開發方法熟悉數據通信的基礎知識熟悉系統安全和數據安全的基礎知識掌握網絡安全的基本技術和主要的安全協議與安全系統掌握計算機網絡體系結構和網絡協議的基本原理掌握計算機網絡有關的标準化知識掌握局域網組網技術,理解城域網和廣域網基本技術掌握TCP/IP協議網絡的聯網方法和網絡應用服務技術熟悉網絡系統的基本性能測試和優化技術,以及可靠性設計技術

軟件開發流程

分析

軟件需求分析就是回答做什麼的問題。它是一個對用戶的需求進行去粗取精、去僞存真、正确理解,然後把它用軟件工程開發語言(形式功能規約,即需求規格說明書)表達出來的過程。本階段的基本任務是和用戶一起确定要解決的問題,建立軟件的邏輯模型,編寫需求規格說明書文檔并最終得到用戶的認可。需求分析的主要方法有結構化分析方法、數據流程圖和數據字典等方法。n本階段的工作是根據需求說明書的要求,設計建立相應的軟件系統的體系結構,并将整個系統分解成若幹個子系統或模塊,定義子系統或模塊間的接口關系,對各子系統進行具體設計定義,編寫軟件概要設計和詳細設計說明書,數據庫或數據結構設計說明書,組裝測試計劃。

設計n軟件設計可以分為概要設計和詳細設計兩個階段。實際上軟件設計的主要任務就是将軟件分解成模塊是指能實現某個功能的數據和程序說明、可執行程序的程序單元。可以是一個函數、過程、子程序、一段帶有程序說明的獨立的程序和數據,也可以是可組合、可分解和可更換的功能單元。模塊,然後進行模塊設計。n概要設計就是結構設計,其主要目标就是給出軟件的模塊結構,用軟件結構圖表示。詳細設計的首要任務就是設計模塊的程序流程、算法和數據結構,次要任務就是設計數據庫,常用方法還是結構化程序設計方法。n編碼n軟件編碼是指把軟件設計轉換成計算機可以接受的程序,即寫成以某一程序設計語言表示的"源程序清單"。充分了解軟件開發語言、工具的特性和編程風格,有助于開發工具的選擇以及保證軟件産品的開發質量。n當前軟件開發中除在專用場合,已經很少使用二十世紀80年代的高級語言了,取而代之的是面向對象的開發語言。而且面向對象的開發語言和開發環境大都合為一體,大大提高了開發的速度。n測試n軟件測試的目的是以較小的代價發現盡可能多的錯誤。要實現這個目标的關鍵在于設計一套出色的測試用例(測試數據和預期的輸出結果組成了測試用例)。n如何才能設計出一套出色的測試用例,關鍵在于理解測試方法。不同的測試方法有不同的測試用例設計方法。n兩種常用的測試方法是白盒法測試,對象是源程序,依據的是程序内部的的邏輯結構來發現軟件的編程錯誤、結構錯誤和數據錯誤。結構錯誤包括邏輯、數據流、初始化等錯誤。用例設計的關鍵是以較少的用例覆蓋盡可能多的内部程序邏輯結果。n白盒法和黑盒法依據的是軟件的功能或軟件行為描述,發現軟件的接口、功能和結構錯誤。其中接口錯誤包括内部/外部接口、資源管理、集成化以及系統錯誤。黑盒法用例設計的關鍵同樣也是以較少的用例覆蓋模塊輸出和輸入接口。n維護n維護是指在已完成對軟件的研制(分析、設計、編碼和測試)工作并交付使用以後,對軟件産品所進行的一些軟件工程的活動。即根據軟件運行的情況,對軟件進行适當修改,以适應新的要求,以及糾正運行中發現的錯誤。編寫軟件問題報告、軟件修改報告。n一個中等規模的軟件,如果研制階段需要一年至二年的時間,在它投入使用以後,其運行或工作時間可能持續五年至十年。那麼它的維護階段也是運行的這五年至十年期間。在這段時間,人們幾乎需要着手解決研制階段所遇到的各種問題,同時還要解決某些維護工作本身特有的問題。n做好軟件維護工作,不僅能排除障礙,使軟件能正常工作,而且還可以使它擴展功能,提高性能,為用戶帶來明顯的經濟效益。然而遺憾的是,對軟件維護工作的重視往往遠不如對軟件研制工作的重視。而事實上,和軟件研制工作相比,軟件維護的工作量和成本都要大得多。

薪資與發展

軟件開發工程師的薪資近幾年一直處于上升狀态,2018年畢業生的平均薪資在12k左右,高一點的達到了30w年薪。n據某校園招聘網站發布的《我國人才缺口最大行業排行榜TOP10》數據統計,目前軟件開發相關的互聯網行業、電子商務行業、計算機軟件行業的人才缺口分别排在第1、第4、第8位。另外國内IT軟件研發人才已經百萬缺口,各大招聘平台每天平均發布10萬個左右的軟件開發職位。n所以軟件開發的就業前景是非常好的,且軟件開發崗位在IT産業中薪資待遇是相對很高的,同比其他行業高出50%左右。做軟件開發,未來可以走技術和管理兩條發展路線。技術路線發展到後面會成為技術專家,管理路線可以升職做CTO。

核心競争力

軟件工程師的核心競争力,不是單一能力的體現,而應該是多種能力和價值的綜合體,學習能力、解決問題能力和影響力構成了軟件工程師的核心競争力。n學習能力n軟件工程師最基本的要求就是技術和代碼,招聘網站上公司對招聘軟件工程師的要求都是能掌握一門或多門編程語言,熟練使用工具和框架。但熟練掌握編程語言和看框架還不能構成核心競争力,現在技術更新換代很快,也許我們現在熟悉的語言或框架過幾年就沒有市場了,還需要學習新的技術。n所以,編程語言、框架、工具還不能構成軟件工程師的核心競争力,能夠快速學習掌握新的技術的能力才是軟件工程師最基礎的核心競争力。n解決問題的能力n技術學習了要會用才會産生價值,那軟件工程師如何運用學習到的技術呢?我們可以先看看軟件工程師的日常的主要工作以及需要什麼樣的能力去解決:n

1.實現功能需求------需要先分析需求、然後抽象設計、實現n2.定位修複bug------改bug最大的挑戰就是重現問題,也就是發現問題、分析問題、解決問題n3.重構代碼、優化性能------此最難的在于發現代碼問題在哪,發現性能瓶頸,尋找解決方案,最後解決。n也就是說,軟件工程師的日常開發工作的核心還是在發現問題、分析問題和解決問題,我們可以統稱為解決問題的能力。軟件工程師水平高低恰恰就是在解決問題的能力上面。n發現問題n以前我們需要做一個抽獎系統,負責的程序員設計了技術方案讓我審查,從功能來看是沒有問題,但是在安全方面卻欠妥。n比如用戶用工具模拟用戶操作反複點,這不是就能提高中獎概率,他說可以在前段增加重複點擊限制,那我又說如果通過抓包工具模拟發送數據包,不也是能繞過你的前段檢查麼,這個就需要服務端增加uid的檢查了。n同樣一個抽獎系統需求,新手程序員看到的是如何實現功能,有經驗的程序員會發現可能存在的安全隐患,未雨綢缪,把可能的安全問題消除掉,這就是發現問題的能力體現。n分析問題n生産環境發生故障,新手程序員通過分析把問題解決修複了,就覺得沒事了,有經驗的程序員會在修複後進一步分析故障産生的深層次原因,後續怎麼預防類似故障再次發生,會總結出故障報告供後續經驗分享。n分析問題不是簡簡單單分析問題的表面,還需要去分析問題深層次的原因,以及思考預防同類問題的原理。n解決問題n發現問題和分析問題後,解決問題相對會容易一些,有的時候知道問題在哪,但是不知道怎麼解決也是讓人很苦惱的事情。n工作中,有些新手程序員會問我linux某個命令怎麼用,API怎麼用,我通常不會直接告訴他答案,因為我可能也不知道具體用法,就算知道了我告訴他一次了,下一次他也不會自己解決,我會反問他:n1.查過命令手冊、官方文檔嗎n2.有沒有百度、谷歌過,很過問題别人都遇到過,也提供了解決方案,例如StackOverflow就是一個很好的地方n3.關鍵字是否再次提取優化,有的時候關鍵字的不合适會導緻搜索出的答案不滿足期望,可以嘗試用英文關鍵字google搜索n我也遇到過很多次程序員請求别人問題時,沒人回複,并不是沒有人願意幫忙,而是他的問題沒有描述清楚,别人就很難知道他想表達的意思和要解決的問題。我這裡建議大家《提問的智慧(How To Ask Questions The Smart Way)》這篇文章。n這樣的發現問題、分析問題和解決問題的能力才是程序員的能力才是核心競争力。n影響力n解決問題的能力的确是軟件工程師很重要的一種能力的體現,但是還不能完全體現出軟件工程師的核心競争力。n為什麼很多程序員的技術水平、解決問題能力相差無幾,但有的升值加薪的機會就很多?有的不需要自己去找好工作,總有好工作主動來找他?這其中的差别,就是在于他們的影響力不同。n有些程序員做事情認真靠譜,在公司形成好的口碑和印象裡,大家願意與之共事;有的樂于助人,分享自己的經驗,和别人亦師亦友,在團隊有很高的威望;有的有獨特的項目、公司或行業經曆比如阿裡巴巴大廠的幾年架構師經驗,在業界有知名度;有的寫自己的技術博客,做技術講座,成了技術大V,在技術圈子有一定的影響力;這些影響力不是一朝一夕形成的,但卻是一個軟件工程師最核心的價值體現。n我們需要通過一點點技術成長積累,一個個成功項目的積累,一篇篇技術文章分享的積累,一次次分享經驗的積累,而形成足夠的影響力。n所以綜合來說,軟件工程師的最核心競争力是:n1.最底層、最基礎的是學習能力,通過學習能力,快速掌握新的技術。n2.中間層就是解決問題的能力,利用學習到的技術去發現問題、分析問題和解決問題。n3.最上層就是影響力,核心競争力的綜合體現。

職業規劃

第一階段為起步期,一般為畢業後的3年之内。不論何種背景,這一階段的主要工作基本是編程、測試和維護;主要目标是學習和掌握公司産品/項目的基本技術、工具和流程。本階段是軟件行業所有職業的起點和立身之本,不論将來擔任何種職位,都必須依賴于這一階段打下的基礎。n第二階段為成長期,一般為畢業後的3~10年。這一階段的人員已經掌握了基本的技術技能和經驗,能夠獨立工作、指導或帶領他人工作。公司為這類人才提供了專業和管理兩條發展通道,具體地說有以下七大類發展途徑:n軟件技術方向n職業通道:高級軟件工程師—主管軟件工程師——軟件架構師——高級架構師——技術專家n特點:善于獨立思考,做事謹慎細緻,熱衷于專研技術及其創新,對新技術敏感,技術涉面廣。屬專業技術人才。n準備:努力專研技術,緊跟行業動向,深入研究,掌握精髓,做到該領域的專家;經常發表技術文章,總結交流技術經驗;獲得IBM、MS、Oracle等各主要技術的認證、攻讀軟件碩士/博士學位等。n開發管理方向n職業通道:高級軟件工程師——主管軟件工程師——開發經理/項目經理/産品經理——項目總監——技術管理總監n特點:首先要精通産品和技術,然後還有具備良好的協調溝通能力、能團結人。精通軟件工程的流程與進度控制、質量控制、資源的有效使用等。屬複合型技術人才。n準備:需要有軟件開發各生命周期(如開發、測試)的工作經驗,至少在一項技術方面具備專家水準,能觸類旁通;精通項目管理的知識、技術、技巧與方法;獲得PMP、CMM、軟件工程、MBA等方面的認證和學位等;具備一定的行業知識。n測試技術方向n職業通道:軟件工程師/測試工程師——高級測試工程師——測試分析師——測試專家n特點:做事謹慎細緻,重視細節;精通QC與QA等技術和方法,熟悉IT技術及項目管理流程,精通至少一個行業(如電信、金融、物流等)的業務流程;強調溝通,屬專業技術人才。n準備:精通測試理論、方法與工具,如黑盒/自動化/安全/性能/白盒測試等;有一定的編程能力;獲得GB2000、ISO9001、CMM等質量體系及軟件工程、質量控制等方面的認證和學位;學習業務知識。n質量管理方向n職業通道:軟件工程師/測試工程師——高級測試/品質保證工程師——測試/品質保證主管——測試/品質保證經理——測試/品質保證總監nIT實施方向n職業通道:軟件工程師/測試工程師——高級測試工程師——實施顧問——高級實施顧問——實施經理——實施總監nIT咨詢方向n職業通道:軟件工程師/測試工程師——高級測試工程師——咨詢顧問——高級咨詢顧問——咨詢經理——咨詢總監nIT營銷方向n職業通道:軟件工程師/測試工程師——售前工程師——客戶經理——銷售經理——銷售總監n3.第三階段為發展期,一般為工作10年以後。這一階段的人員已經成為組織内的技術或管理骨幹,可以向更高層次的綜合管理和企業戰略方向發展。如果說第一階段比較容易實現,第二階段通過一定程度的努力可以實現,而第三階段則主要靠機遇和個人奮鬥了。

相關詞條

相關搜索

其它詞條