Skip to content

Latest commit

 

History

History
216 lines (179 loc) · 7.25 KB

requirements.md

File metadata and controls

216 lines (179 loc) · 7.25 KB

Requirements

This page describes people we always would love to join our team.

General Personal Requirements

  • Bachelor's degree in Computer Science, or similar
  • Smart
  • Gets things done
  • Not a jerk
  • Team player
  • English-speaking

General Responsibilities

  • 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

Levels

Junior

Responsibilities

Technical knowledge and skills

  • 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)

Non-technical skills

  • Can chat with client (written English), basic spoken English

Middle

Responsibilities

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

Technical knowledge and skills

  • 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
  • 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

Non-technical skills

  • Can speak with client (confident spoken English)

Senior

Responsibilities

Middle responsibilities plus:

  • Always follow platform-specific development best practices
  • Perform Project Start and Ongoing Code Review
  • (advantage, optional) Help Junior and Middle developers

Technical knowledge and skills

  • 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

Team Leader

Responsibilities

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

Non-technical skills

  • Organizational skills
  • Leadership abilities
  • Can help anyone to complete any task
  • Can teach/train anyone

References