Different Types of Coding

The first thing to recognize about coding is that there are different kinds of coding.

Personally to me, the most important to trade off when writing code is to find the write balance between:

  • How long the code will live

  • How fast do you need to write the code

Different kinds of coding (but not limited to):

  • Software Engineering

  • Product Engineering

  • Architecture

  • Hacking

  • Scripts

  • Programming competitions

  • Exploits

  • Infrastructure

  • Networking

  • Servers

  • Serverless / faas / functions as a service

  • Full Stack Engineer

    • Backend engineer

    • Frontend engineer

  • "Mobile" Engineer

  • Game engineering

Balance

Properties you should balance when writing code:

  • Code Longevity

  • Time to write code

  • Maintainability

  • Code complexity

  • Short term vs long term

Code Longevity

Short Lived

Short lived code can be more inconsistent.

Properties:

  • Fast to write

  • Generally "throw away" code

Includes:

  • Scripts

Long Lived

The longer a code is supposed to live the more readable and maintainable it should be

Requires:

  • Clarity

  • Consistency

  • Maintainability

  • Readability

Includes:

  • Architecture

Maintainability

Pros:

  • Better for long term

Cons:

  • Reduces speed

Notes:

  • Speed can be improved with proper testing

What benefits Short Term

  • Shortcuts

  • Speed

  • Reusing abstractions or existing frameworks

What benefits Long Term

  • Reduced complexity

  • Easy to read code

    • Consistent styling

    • Stylized with a prettier

  • Tests

    • Unittesting

    • Continuous integration

  • Documentation

    • Design documentation, why certain design decisions were made

  • Tooling

  • Refactoring, or rebuilding as needed

Product Engineering

From Forbes:

"full stack" focuses on an engineer's pure execution capability across the stack

"product engineering" focuses on an engineer's capability to deliver the end goal: a product.

Needed for an early stage startup.

  • Delivers "good enough" solutions

  • Less focused on technical numbers questions:

    • For example: Design a cache that can support 10TB.

      • How many machines?

      • How many queries can each machine handle?

Digital Agency Engineer

  • Continually starts projects from scratch

  • May have surface level experience with lots of different technologies

  • Most likely to have breadth over depth

  • Most likely not used to firefighting in a product company

  • Because they always start on new code, they dont have the ability to inherit code from others, and thus dont know how to share code to be handed over

Cons:

  • No experience with dealing with technical debt, or reducing it

  • No experience with scaling

Last updated