0. 前言
今天抽空整理了一下澳洲几家大公司对于不同级别的软件工程师的招聘要求,本文作为笔记。
1. Entry Level
Entry-level 主要看计算机基础以及一个人学习、沟通、合作的能力。
Charateristics
- Passion torwards technology: ability and willing to learn new programming languages, frameworks and paradigms
- Professionalism: good attitude, follow standards, participate in design and code reviews, write documentation
- Communication: Verbal and Written
- Problem Solving: Analytical, creative, user-centered, pragmatic approach
- Team Collaboration: Problem and solution discussion
Technical
-
Computing Fundamentals
-
OOP Fundamentals
-
Data structures
-
Design patterns
-
Debug and troubleshooting skills, able to fix bugs
-
Build performant, efficient, reusable (abstractions), decoupled, testable, maintainable code
-
Know how to test code
2. Mid Level
Mid-level 对技术方面的要求高很多。
在这个阶段,我们至少要成为一个领域的专家,并且有意识地积累团队管理和项目经验。
Technical
Coding
- An expert in at least one technical topic/domain, expert-level experience with one or more prominent languages such as Java, Spring, Python, C#, C/C++, or Ruby.
- SQL and NoSQL experience
- Understanding of databases with solid working knowledge of SQL
- Understanding of distributed data processing methodologies, frameworks, and best practices
- Experience with build and management tools (Git, CI systems).
- Networking knowledge
- Operating systems knowledge
- Docker
- Cloud Infrastructure
Design & Principals
-
First Principals
-
Design patterns
-
Micro-service patterns
-
Client-server patterns
-
…
-
Architecture & Standards:
-
SOA architectures(Service-oriented Architecture)
-
Apply architectural standards
-
Tackle architecture challenges
-
System design
-
Solution design
-
API design
- Concurrency
- Multithreading
- Security
- Performance and benchmarking
- System monitoring techniques and tools
- Identify and address performance bottlenecks
- Performance optimization
Project Experience
- Experience with agile software development methodologies like Kanban or Scrum
- Experience with continuous delivery for production environment.
- Drive projects independently, from technical design to launch
Leadership
- Mentor more junior members.
- A real appetite for helping others learn and grow.
- Great creative and innovative problem-solving skills
3. Senior Level
Senior 的关键词是跨界(多个 domain + 跨部门协作),比如:
- Full-stack development experience
- Ability to work cross-functionally across the business, partner across engineering teams to take on company-wide initiatives spanning multiple projects
技术方面除了要满足前面两个 level 的内容之外,对 Senior 的期待值是需要能够解决更复杂的问题;另外,还要有「快速应对变化并拿出解决方案」的能力,做好项目的「消防员」,管控风险,确保项目运转顺利。
Senior 做关键技术决策时注重长期的影响(future-proofing, long-term impact),也就是拥有把控团队前进方向的能力。
Leadership
-
主导更大的项目,管理更大的团队,制定并优化团队的规则规范。
-
注重沟通的有效性以及领导力,比如带领团队完成公司共同目标的能力。
An effective communicator, able to articulate technical & architectural know-how in a way that will influence the engineering teams towards a united vision and goal because building incredible software cannot be done in isolation but together as one team.
Strategic
- System availability, reliability, scalability
- High-availability, fault-tolerant, and scalable systems
- Designing, building, future-proofing and operating large scale data infrastructure in production (performance, reliability, monitoring)
- Continued development of new features, functionality, and optimization
4. 前端要求
- Web development fundamentals
- Vanilla JS
- HTML(DOM, SVG)
- CSS (Element positioning, PostCSS, SASS..)
- Critical Rendering Path
- JS related
- ES6 and difference between versions
- TypeScript (OOP)
- JS APIs
- Node.js
- Package management tools - Npm/Yarn
- Frontend framework - React or others
- State management tools - Mobx or others
- Compiling tools - Webpack, Gulp or others
- Compatibility
- Intimate knowledge of cross-browser and cross-device development
- UX related
- color science
- graphic design
- interaction design
- user research
- fast prototyping ability
5. 结语
总结一下,我认为 mid-level 是最关键的全方面成长阶段(我目前也处在这个阶段)。
在这个阶段,我们应该掌握大部分的 technical 技能,积累项目和团队管理的经验,主动用 senior 的标准来要求自己,比如考虑技术决策的长期性,以及系统的安全、稳定、高性能、可拓展性…
Senior 则需要一手搞定技术难关,一手把握团队前进方向。
与诸位共勉~