軟件工程師能力模型探討
高級JAVA工程師通用技能
- Expert Java knowledge JAVA知識專家級
- Object-Oriented Design Patterns 面向對象與設計模式
- High-level design skills 高層模塊設計
- Designing for specific requirements (e.g. security, scalability, optimization) 安全, 伸縮, 優化設計
- DevOps 開發測試運維
- Distributed/parallel programming 分布式/并行編程
- Maintaining and upgrading applications 維護升級應用程序
- Leadership skills 領導力, 帶團隊
- Clear communication skills 清晰溝通技能
- Mentoring junior and mid-level developers 指導初級, 中級開發
- Understanding business and legal context 理解業務, 商業與法律上下文
自覺的規范意識和團隊精神。隨著軟件項目規模越來越大,僅僅依靠個人力量已經無法完成工作,因此,現代軟件企業越來越重視團隊精神。一般來講,軟件企業中的程序員可以分為兩種,一種是程序“游擊隊員”,他們可能對編程工具很熟,能力很強,把編碼編得很簡潔高效,但卻缺乏規范和合作的觀念;另一種程序員編程不一定很快,但是很規范,個人能力不一定很強,但合作意識很好。第二種人更加適合現代軟件企業發展的潮流。對于基礎軟件工程師來說,他們在企業中的角色決定了他們必須具有良好的規范意識和團隊精神。
較強的英語閱讀和寫作能力。程序世界的主導語言是英文,編寫程序開發文檔和開發工具幫助文件離不開英文,了解業界的最新動向、閱讀技術文章離不開英文,與世界各地編程高手交流、發布幫助請求同樣離不開英文。作為基礎軟件工程師,具有一定的英語基礎對于自身的學習和工作極有幫助?! ?/font>
具有軟件工程的概念?;A軟件工程師處于軟件企業人才金字塔的底層,是整個人才結構的基礎,雖然他們從事的工作相對于系統分析師和高級程序員要單純一些,但是他們是整個軟件工程中重要的一環,因此,基礎軟件工程師同樣要具有軟件工程的概念。從項目需求分析開始到安裝調試完畢,基礎軟件工程師都必須能清楚地理解和把握這些過程,并能勝任各種環節的具體工作,這樣的能力正好符合了當前企業對基礎軟件工程師的全面要求?! ?/font>
求知欲和進取心。軟件業是一個不斷變化和不斷創新的行業,面對層出不窮的新技術,軟件人才的求知欲和進取心就顯得尤為重要,它是在這個激烈競爭的行業中立足的基本條件。軟件工程師應具有較強的學習總結能力、需求理解能力和對IT新技術比較敏感,同時,掌握最新的IT實用技術。
軟件工程領導者
Area Competency
Technical
Builds products ensuring they take adequate steps to protect sensitive data, e.g.
- Databases have encryption at rest
- Sensitive data is masked or in restricted indexes in Splunk
- Data is retained only for as long as it is needed
- Dummy/fictional data is used in staging environments and in tests
- Suppliers don't get access to data unless they have gone through the Procurement Management Application process
Technical
Implements appropriate observability and monitoring when building a solution, e.g.
- When adding a new dependency to a system, adds a healthcheck to monitor the dependency's state
- Adds logging that is well-structured and captures useful information about the state of a system
- Builds a Grafana dashboard that visualises normal and abnormal operation of a system
Technical
Evaluates third-party software to use in projects, e.g.
- Can choose between similar Node libraries evaluating code quality, ease of integration, future maintenance, and security concerns
- May be involved in evaluating paid-for third party supplier code
Technical
Leads on fixing live incidents in production, e.g.
- Takes proactive action when an incident is reported on a system they support and resolves it satisfactorily
- Responds to critical issues raised in #ft-tech-incidents taking the initiative to fix them and reports back
Technical
Understands the security attack vectors for their area of technology and mitigates against them, e.g.
- Uses Snyk.io on projects
- Sanitises user input to mitigate against XSS attacks
- Applies security patches to an operating system
- Protecting public API endpoints
- Articulates security risks/benefits when evaluating third party software
- Uses Fastly WAF to protect from malicious requests
Technical
Makes pragmatic decisions about technical trade-offs within their project, e.g.
- Knows when to stop work on a feature that has fulfilled the requirements vs. spending an extra week on making it perfect but delivering little additional value
- When pressed for time, focuses on ensuring test coverage of the most critical system functionality
- Manages technical debt, understands consequences of technical debt vs the cost of fixing it and acts accordingly
- Can explain when something is worth refactoring even when it will impact the speed of delivery
Technical
Delivers high quality code and solutions, e.g.
- Refactors solutions to improve clarity and maintainability
Technical
Encourages others to deliver high quality code and solutions, e.g.
- Implements tooling to enforce high standards
- Reviews pull requests fairly & critically in such away that team members produce better code
Technical
Regularly and independently debugs and fixes bugs regardless of origin, e.g.
- Picks up and debugs an urgent issue that comes in to the team, despite having not written the code originally
Technical
Builds software or services considering resilience, performance and failure modes, e.g.
- Combines multiple data sources in a feature, caching, polling etc as appropriate to cope with problems in downstream services
- Adds healthchecks to a system that detect different ways in which it can fail
Technical
Chooses the appropriate tool, technology or software for a task, e.g.
- If starting a new project, uses tools already understood by the team unless there is an agreed good reason to change
Technical
Builds and works with systems involving multiple, independent technical parts, e.g.
- Adds data sources to or optimises performance of a data pipeline
- Publishes a new origami component that uses other components
- Implements a CDN / gateway that routes to a suite of underlying microservices
- Designs and implements a build pipeline
Technical
Considers the technical direction of their group or the wider department when coming up with technical solutions, e.g.
- Understands how their work feeds into their group's tech strategy
- Can articulate and justify the total cost of ownership of their technical solutions
- Follows their group's Engineering Principles when building technical solutions
Communication
Communicates technical concepts clearly and adapts that communication to the audience, e.g.
- Explains their work in standups knowing which technical details to leave out to make the message meaningful to everyone in the room
- Teaches more junior engineers
- Creates diagrams to document how the different parts of systems interact
- Presents their own work clearly to stakeholders
Communication
Facilitates productive discussions with clear outcomes, e.g.
- Runs meetings with clear agendas and outcomes
- Obtains wide feedback on technical proposals and takes ownership of seeing it through
Communication
Contributes to hiring process, e.g.
- Participates in hiring panels or technical interviews
- Attends recruitment events
- Publicly shares links to open roles
- Goes for coffee with potential hires to talk about what working at the Financial Times is like
- Shares our work publicly, (through blogging, speaking, etc) to show the kinds of work we do here
- Reviews CVs
- Reviews tech tests
Delivery
Prioritises technical work for the team (usually with others)
Delivery
Breaks down large complex technical proposals into discrete tasks, e.g.
- Creates the user stories for the ticket with a delivery lead
Delivery
Communicates team/work's status upwards to a Principal or Technical Director
Delivery
Where appropriate, builds on other teams' work to solve problems, e.g.
- Uses origami components to style a web page
- Uses Biz Ops as a source of system data rather than creating a new system registry
Delivery
Moves blockers to enable more junior engineers to work, e.g.
- Reviews pull requests
- Suggests someone to talk to eg “[X] knows the most about [technology Y], you could ask them”
Delivery
Tackles simple cross team technical issues, e.g.
- Notices a tool used by lots of teams has broken, identifies the problem and fixes (or reports it to the owner of the tool)
Delivery
Actively seeks the views of other teams to help guide work, e.g.
- Attends cross team meetings
- Asks other teams for input and opinions on decisions that affect them
Delivery
Improves delivery process and encourages others to do the same, e.g.
- Updates the scrum process to fit the changing needs of the team
- Champions technical issues that affect delivery such as release cycles, dealing with tech debt and bug fixes
- Encourages other engineers to participate in agile team rituals
Delivery
Manages, prioritises and communicates own workload
Leadership
Influences a community of practice, e.g.
- Is an active member of a Guild
- Answers questions in the #engineering Slack channel
- Gives a tech talk (internally or externally)
- Writes a blog post
- Shares industry relevant content/links with team members that may be interested
Leadership
Is an ambassador for their team across FT technology, e.g.
- Positively represents their team in interactions with other people by seeking to understand their perspectives, values and needs
- Consistently contributes to their team being positively perceived by stakeholders (or by other engineering teams to which they provide support)
Leadership
Contributes to the personal development of more junior people, e.g.
- Is a line manager or mentor
- Is a designated buddy to a new starter
- Regularly meets up with more junior peers to provide guidance
- Pairs with more junior team members
- Writes blog posts to share knowledge
- Gives talks at meet-ups or conferences to share knowledge
Leadership
Shows technical leadership, e.g.
- Is a tech lead
- Runs, or is on the organising team for a Guild
- Leads on large features, stories or projects
Leadership
Shares knowledge with others internally, e.g.
- Gives a workshop on Git
- Runs a regular 101 session for the rest of the business
- More informal knowledge sharing through mentorship
Leadership
Actively fosters an inclusive team culture, e.g.
- Celebrates good work publicly and encourages the team to do the same
- Spots problems between team members and helps to resolve them or escalate them as appropriate
- Models inclusive behaviour to the rest of the team
《The Software Engineering Competency Model (SWECOM)》
在《The Software Engineering Competency Model (SWECOM)》提及
通識素養
能力分解
今天先到這兒,希望對云原生,技術領導力, 企業管理,系統架構設計與評估,團隊管理, 項目管理, 產品管管,團隊建設 有參考作用 , 您可能感興趣的文章:
領導人怎樣帶領好團隊
構建創業公司突擊小團隊
國際化環境下系統架構演化
微服務架構設計
視頻直播平臺的系統架構演化
微服務與Docker介紹
Docker與CI持續集成/CD
互聯網電商購物車架構演變案例
互聯網業務場景下消息隊列架構
互聯網高效研發團隊管理演進之一
消息系統架構設計演進
互聯網電商搜索架構演化之一
企業信息化與軟件工程的迷思
企業項目化管理介紹
軟件項目成功之要素
人際溝通風格介紹一
精益IT組織與分享式領導
學習型組織與企業
企業創新文化與等級觀念
組織目標與個人目標
初創公司人才招聘與管理
人才公司環境與企業文化
企業文化、團隊文化與知識共享
高效能的團隊建設
項目管理溝通計劃
構建高效的研發與自動化運維
某大型電商云平臺實踐
互聯網數據庫架構設計思路
IT基礎架構規劃方案一(網絡系統規劃)
餐飲行業解決方案之客戶分析流程
餐飲行業解決方案之采購戰略制定與實施流程
餐飲行業解決方案之業務設計流程
供應鏈需求調研CheckList
企業應用之性能實時度量系統演變
如有想了解更多軟件設計與架構, 系統IT,企業信息化, 團隊管理 資訊,請關注我的微信訂閱號:
作者:Petter Liu
出處:http://www.rzrgm.cn/wintersun/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。
該文章也同時發布在我的獨立博客中-Petter Liu Blog。














![MegadotnetMicroMsg_thumb1_thumb1_thu[2] MegadotnetMicroMsg_thumb1_thumb1_thu[2]](http://images.cnitblog.com/blog/15172/201503/211054062506158.jpg)
浙公網安備 33010602011771號