Skip to content

Instantly share code, notes, and snippets.

@branneman
Last active August 23, 2020 20:47
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save branneman/266435ff9b0dc59c6837 to your computer and use it in GitHub Desktop.
Save branneman/266435ff9b0dc59c6837 to your computer and use it in GitHub Desktop.
Front-End Software Craftsmanship

JavaScript knowledge

  • Operators, operands, operator precedence (unary, binary, ternary)
  • Dynamic Type system: types and conversion
    • Value type vs. Reference type
  • Expression vs. Statement
  • Scope
  • Hoisting
  • Overloading
  • Prototypal inheritance vs. Classical inheritance
    • Instancing
      • new & this keywords, and the instanceof operator
    • Constructor vs. Factory function
  • Execution context, .call(), .apply(), .bind()
  • Asynchronous programming:
    • Event loop
    • Concurrency
    • Call-stack
    • Blocking
  • Regular Expressions

Programming concepts

  • Program to an Interface, not an Implementation
  • Favor composition over inheritance
  • Refactoring workflow. Time spent = 80% refactoring, 20% new feature
  • SOLID:
    • Single responsibility
    • Open/closed
    • Liskov substitution
    • Interface segregation
    • Dependency inversion
  • YAGNI - You ain't gonna need it
  • Loose coupled vs. Tight coupled
  • DRY - Don’t repeat yourself
  • KISS - Keep it simple, stupid
  • Different paradigms
  • Concepts:
    • Indirection

UI programming

  • Two-way data binding
  • One-way data flow

Object-Oriented Programming

  • Duck typing
  • Inheritance vs. Composition
  • Getters & Setters
  • Design Patterns:
    • Module patterns:
      • IIFE
      • Module Pattern
      • AMD
      • ES6 Modules
    • Singleton
    • Factory
    • Decorator
    • Composite
    • Strategy
    • MVC, MVP & MVVM

Functional Programming

  • Referential transparency
  • Immutability
  • Special functions:
    • First-class function
    • Pure function
    • Closure function
    • Higher-order function
    • Recursive function
  • Currying / Partial application
  • Composition
  • Point-free style
  • Category Theory
  • Design Patterns:
    • Lenses
    • Functors
      • Array
      • Maybe
      • Either
    • Applicatives, Monads
      • IO
      • Future
      • Promise

Event-driven & Reactive programming

  • Design Patterns:
    • Observer / EventEmitter
    • Pub/Sub (global Observer)
    • Mediator
    • EventStream / Observable

Unit testing

  • Unit test vs. Integration test vs. Functional test
  • Design Patterns:
    • Arrange–Act–Assert
    • Stubs & Mocks
    • Spies
    • Fixtures
  • Related Design Patterns:
    • Dependency Injection / Inversion of Control (DI/IoC)
    • Facade

Architecture

  • Monolithic vs. Microservices

Tooling

  • Build tools
  • IDE's & Integration
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment