Git Product home page Git Product logo

evergreen-skills-developers's Introduction

Evergreen Skills for Software Developers

This repository includes a list of "evergreen skills" that should serve as a fair assessment of skilled software developers / engineers.

The purpose of this work is to serve as an alternative resource for conducting hiring interviews of software developers / engineers. This document focuses on software development best practices, cross-framework principles and other portable skills; instead of the usual focus on trends and/or specific knowledge of short-lived frameworks, which tend to quickly become outdated and often don't reflect the real value software developers / engineers bring to the organization.

This repository is a derivative work of the following article: "What Makes a Great Software Engineer".

This is a work in progress. Important knowledge might be missing, existing bullets can probably be improved and better grouping strategies could be found. For those reasons, any contributions (i.e. PRs) are welcome. Please feel free to propose changes following the contributing guideline.

Table of contents

Core Skills (aka "soft" skills)

Communication

Teamwork

  • Keep low egos
  • Be an active listener
  • Be a good mentor
  • Share knowledge
  • Engage in constructive decisions

Technical collaboration

Innovation & (self-)management skills

Development process

  • Comfortable with iterative and incremental development
  • Self-organizing capability
  • Avoid creating false expectations
  • Focus on priorities and business value

Problem solving skills

Mindset

  • Don't fear change
  • Dare to fail
  • Be a life-long learner
  • Be rational: question decisions, "let the facts do the talking"

Technical skills

General Technical Knowledge

Principles

  • OOP
  • SOLID, GRASP
  • Functional programming (pure function, recursion,...)

Data Structures

  • Basic structures (basic types, array, matrix, object...)
  • Cache / memoization
  • Hash codes, tokens, encondings (e.g. Base64)

Clean code

  • Self-explainatory code
  • Use good naming (for files, variables, classes, functions...)
  • Avoid long functions and classes ()
  • Extract complex boolean conditions into functions
  • Use lightway documentation instead of inline-comments
  • Semantic versioning

Collaboration and SCM

  • CVS / SCM knowledge
  • Why is versioning important
  • Commits best practices (atomic commits, good descriptions...)
  • Feature branches / feature toggles
  • Trunk-based development
  • Dependency management

"DevOps" practices

  • Build automation
  • Write automated tests
  • Differences between unit, integration and system tests
  • Test pyramid
  • Continuous Integration
  • Continuous Delivery vs Deployment

Field-specific technical knowledge

Front-end development

  • DOM (definition, understanding, virtual DOM...)
  • Responsive design (purpose, advantages, progresive enhancement...)
  • API standards: REST / SOAP
  • State management (associated problems, stateless approach...)
  • MVC and derivatives
  • Websockets

Back-end development

  • Relational databases (how do they work, basic artifacts...)
  • Batch processes / Cron Jobs
  • Database design
  • ORM
  • Session handling
  • Error Handling, Auditing and Logging

Architecture & Infrastructure

  • Externalized Configuration
  • Infrastructure as code
  • Microservices
  • Virtual machines vs Containers
  • Master-slave pattern
  • Client-server pattern
  • IAAS, PAAS, SASS

Security

  • Public-key cryptosystems (e.g. RSA)
  • Principle of least privilege
  • DoS / DDoS
  • SQL injection
  • Man-in-the-middle attack
  • XSS and CSRF

Scaling & optimization

  • Load balancing
  • Redundancy
  • Latency
  • Lazy loading

Concurrency

  • Race condition
  • Deadlock
  • Mutual exlusion

This work is released under the terms specified in this license file, based on MIT License.

evergreen-skills-developers's People

Contributors

romenrg avatar axelhzf avatar

Watchers

Tomasz Jałoszyński avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.