This page describes people we always would love to join our team.
- Bachelor's degree in Computer Science, or similar
- Smart
- Gets things done
- Not a jerk
- Team player
- English-speaking
- Develop, deliver and support software products
- Strictly follow MLSDev Development Standards
- Strictly follow MLSDev Project Management Process (out of the scope of this document)
- Track spent time daily
- (advantage, optional) Write technical articles to corporate blog or any other web site
- (advantage, optional) Contribute to open source community
- Junior
- Middle
- Senior
- Team Leader
- Software Architect (out of the scope of this document)
- Data Structures
- array, matrix, linked list (single and double)
- stack, queue, deque
- map aka hash table (and collision resolution)
- set
- tree (and memory representation)
- graph (and memory represenation)
- tuple
- Algorithms
- time complexity, big-O notation
- widespread algorithms for data structures above (sort, search, BFS/DFS, path finding, tree traversal etc)
- Bitwise Operations
- bitwise AND, OR, XOR, NOT
- bit shifts
- Regular Expressions (string search and replace)
- Object-Oriented Programming basics
- class, object (and the difference between the two)
- instantiation
- method (as opposed to, say, a C function)
- virtual method, pure virtual method
- class/static method
- static/class initializer
- constructor
- destructor/finalizer
- virtual destructor (with call sequence)
- superclass or base class
- subclass or derived class
- inheritance
- encapsulation
- multiple inheritance (and give an example)
- delegation/forwarding
- composition/aggregation
- abstract class
- interface/protocol (and different from abstract class)
- method overriding
- method overloading (and difference from overriding)
- polymorphism (without resorting to examples)
- is-a versus has-a relationships (with examples)
- method signatures (what's included in one)
- method visibility (e.g. public/private/other)
- Object-Oriented Design basics
- Basic understanding of client-server app architecture
- Multitasking/concurrency basics
- know how to run task in background (for example, HTTP request)
- know how to implement non-blocking UI
- Relational Databases
- database relations (tables)
- records and attributes
- primary and foreign keys, constraints
- indexing
- basic CRUD queries
- Basic Source Code Management skills (Git, Mercurial, SVN or another)
- Can chat with client (written English), basic spoken English
Junior responsibilities plus:
- Keep projects structured and organized
- Learn new services, frameworks and technologies
- Estimate new projects
- Write functional and technical specifications
- Create wireframes
- Perform Ongoing Code Review
- (advantage, optional) Help Junior developers
- Write Coding Conventions-compliant code
- Aware of programming anti-patterns
- Strong OOD skills
- Design Patterns (GoF book is recommended)
- Refactoring (Fowler's books is a must-read!)
- Source Code Management with Git
- resolve merge conflicts
- understand and follow A Successful Git Branching Model
- rebase
- stash
- configure
- hooks
- Networking
- knowledge of HTTP protocol (according to RFC)
- full understanding of RESTful architectural style
- (advantage, optional) sockets/WebSockets
- Relational Databases
- know how JOINs work
- practical experience with ORM frameworks (e.g. CoreData) or DSLs (e.g. Ecto)
- Multitasking/Concurrency
- what is process and what is thread
- OS resources allocation, consumption and sharing
- synchronization
- how to avoid live locks and dead locks
- platform-specific concurrency programming skills (e.g., GCD for iOS)
- Basic UNIX/Linux command line experience
- TDD/BDD
- Basic Functional/UI testing skills
- Continuous Integration
- Memory Management
- Familiarity with Agile and its advantages over Waterfall and vice versa
- Can understand the needs of the business/client
- Can complete most tasks without supervision
- Can speak with client (confident spoken English)
Middle responsibilities plus:
- Always follow platform-specific development best practices
- Perform Project Start and Ongoing Code Review
- (advantage, optional) Help Junior and Middle developers
- Code-complete
- (advantage, optional) Legacy code support experience
- C programming language
- Functional/Integrational testing
- Performance Testing and Analysis
- Load Testing (for web developers)
- Networking
- knowledge of TCP/IP protocol stack
- understanding Peer-to-Peer architecture (or similar, e.g. WebRTC)
- know how live audio/video/data streaming works
- knowledge of the one of script programming languages (bash, Ruby, Perl, Python etc)
- Advanced UNIX/Linux user
- basic shell scripting experience
- users and groups, permissions
- package management
- understanding UNIX file system layout (
/
,/bin
,/usr
,~
) - ssh and security keys
- (advantage, optional) how daemons work
- Databases
- for web developers: NoSQL, difference between RDBMS and NoSQL
- (advantage, optional) understanding of denormalization (when, how)
- (advantage, optional) query performance optimization skills
- (advantage, optional) Basic knowledge of another platform (iOS -> Android, iOS -> Rails, Android -> HTML5, Android -> Unity, Rails -> Android etc)
- Can propose alternative solutions to problems, if client solution is not applicable
- Can precisely estimate new projects and tasks
- Can do any task without any supervision
Senior responsibilities plus:
- Enable new technologies and engineering practices usage
- Advice on new project architecture and technologies to use
- Lead the development team to get the job done
- Help Junior, Middle and Senior developers
- Carry out Performance Appraisal of colleagues
- Organizational skills
- Leadership abilities
- Can help anyone to complete any task
- Can teach/train anyone
- Steve Yegge. Five Essential Phone Screen Questions
- Joel On Software