草庐IT

软件工程师能力模型探讨

PetterLiu 2024-07-15 原文

软件工程师能力模型探讨

高级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 理解业务, 商业与法律上下文


      自觉的规范意识和团队精神。随着软件项目规模越来越大,仅仅依靠个人力量已经无法完成工作,因此,现代软件企业越来越重视团队精神。一般来讲,软件企业中的程序员可以分为两种,一种是程序“游击队员”,他们可能对编程工具很熟,能力很强,把编码编得很简洁高效,但却缺乏规范和合作的观念;另一种程序员编程不一定很快,但是很规范,个人能力不一定很强,但合作意识很好。第二种人更加适合现代软件企业发展的潮流。对于基础软件工程师来说,他们在企业中的角色决定了他们必须具有良好的规范意识和团队精神。

       较强的英语阅读和写作能力。程序世界的主导语言是英文,编写程序开发文档和开发工具帮助文件离不开英文,了解业界的最新动向、阅读技术文章离不开英文,与世界各地编程高手交流、发布帮助请求同样离不开英文。作为基础软件工程师,具有一定的英语基础对于自身的学习和工作极有帮助。  

       具有软件工程的概念。基础软件工程师处于软件企业人才金字塔的底层,是整个人才结构的基础,虽然他们从事的工作相对于系统分析师和高级程序员要单纯一些,但是他们是整个软件工程中重要的一环,因此,基础软件工程师同样要具有软件工程的概念。从项目需求分析开始到安装调试完毕,基础软件工程师都必须能清楚地理解和把握这些过程,并能胜任各种环节的具体工作,这样的能力正好符合了当前企业对基础软件工程师的全面要求。  

      求知欲和进取心。软件业是一个不断变化和不断创新的行业,面对层出不穷的新技术,软件人才的求知欲和进取心就显得尤为重要,它是在这个激烈竞争的行业中立足的基本条件。软件工程师应具有较强的学习总结能力、需求理解能力和对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.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 该文章也同时发布在我的独立博客中-Petter Liu Blog。

有关软件工程师能力模型探讨的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  3. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  4. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  5. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  6. ruby-on-rails - 如何将验证与模型分开 - 2

    我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:

  7. ruby-on-rails - Rails 模型——非持久类成员或属性? - 2

    对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs

  8. ruby-on-rails - Rails - 从另一个模型中创建一个模型的实例 - 2

    我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案

  9. ruby-on-rails - Ruby 中的内存模型 - 2

    ruby如何管理内存。例如:如果我们在执行过程中采用C程序,则以下是内存模型。类似于这个ruby如何处理内存。C:__________________|||stack|||------------------||||------------------|||||Heap|||||__________________|||data|__________________|text|__________________Ruby:? 最佳答案 Ruby中没有“内存”这样的东西。Class#allocate分配一个对象并返回该对象。这就是程序

  10. ruby-on-rails - Rails 3.1 中具有相同形式的多个模型? - 2

    我正在使用Rails3.1并在一个论坛上工作。我有一个名为Topic的模型,每个模型都有许多Post。当用户创建新主题时,他们也应该创建第一个Post。但是,我不确定如何以相同的形式执行此操作。这是我的代码:classTopic:destroyaccepts_nested_attributes_for:postsvalidates_presence_of:titleendclassPost...但这似乎不起作用。有什么想法吗?谢谢! 最佳答案 @Pablo的回答似乎有你需要的一切。但更具体地说...首先改变你View中的这一行对此#

随机推荐