Skip to content

cdiggins/SoftwareDevEssentials

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 

Repository files navigation

SoftwareDevEssentials

An open guide to the essential skills every professional software developer should master.

📌 Why This Exists

Today, it’s easier than ever to build working software — LLMs, frameworks, web-sites, samples, and tools have lowered the bar for entry. That’s a good thing.

But it also means that many developers enter the industry with critical gaps in their knowledge. They may not realize what skills are expected of them in a professional environment — until they're already on the job.

This isn’t just a challenge for self-taught developers.

Even students pursuing Computer Science degrees often graduate without exposure to practical software development, system design, or modern tooling workflows. Others may be experts in one niche but unaware of foundational skills expected in others.


🎯 Who This Is For

  • 🧠 Self-taught learners building their own curriculum
  • 🎓 Students supplementing university courses
  • 🛠️ Junior developers preparing for job interviews or career transitions
  • 🧭 Career changers unsure what to focus on next
  • 🧑‍🏫 Mentors & educators looking for a skill checklist

📚 What's Inside

This repository is a curated list of core skills and concepts that every software developer should know to be effective in real-world, professional settings. It’s not about chasing trends — it’s about building solid, adaptable foundation that will last you throughout a career, even while technology continues to evolve


🤝 Contributing

This guide is a living document. If you’ve worked in the industry and noticed a skill many new developers are missing — open a PR! If you’re learning and found something confusing that should’ve been obvious — let’s document it.


🧭 The Goal

To help software developers become competent, confident, and adaptable professionals — not just coders, but engineers of quality, maintainable software who can quickly learn and use new tools effectively. This is done by achieving a deep understanding of how things work.


There is no magic in computer programming, but anything is possible.


Topics:

  • Command Line programming
    • Files
    • Pipes
    • Processes
    • Sockets
    • Standard In, Standard Out, Standard Error
    • Command Line Arguments
    • Environment Variables
    • Console formatting
    • Batch file scripting (BASH, ZSH, DOS BAT)
  • Markup Languages
    • JSON
    • XML
    • YAML
    • HTML
    • SVG
    • INI files
    • LUA
  • Graphics
    • 2D Graphics
    • Bitmaps
    • 3D graphics
    • MPEG encoding
  • Numerical Representations
    • Bits and Bytes Operations
  • Floating-point Numbers
    • How they are represented
    • Accuracy
  • Text and Strings
    • Unicode
    • ASCII
  • Date Time
    • Representations
  • Compression
    • Huffman encoding
    • RTL
  • Memory Management
    • Stack
    • Heap
    • Alignment
    • Big-endian / Little-endian
    • Virtual memory
    • Cache
    • Garbage Collection
    • Memory fragmentation
  • Software Optimization
    • Profilers
    • Cache effects
    • Benchmarking
    • Dangers of early optimization
  • Boolean Logic and Algebra
    • Lambda Calculus
    • SKI Calculus
  • Software Organization
    • Source files
    • Project files
    • Solution files
    • Configuration files
    • Class libraries
    • Versioning
    • Packages
  • Operating Systems
    • File systems
    • Virtual memory
    • Executables
    • Dynamically linked libraries
  • Programming Language Survey
    • Forth
    • Logo
    • JavaScript
    • Python
    • Scheme
    • C
    • Basic
    • ML
    • Haskell
    • C++
    • Rust
    • C#
    • Java
    • Excel
  • Programming Paradigms
    • Object-oriented
    • Prototype-based
    • Functional
    • Data-flow
    • Eager versus Lazy Evaluation
  • Parsing
    • Regular expressions
    • Context Free Grammars
    • Concrete Syntax Tree (aka Parse Trees)
    • Abstract Syntax Trees
  • Compilers
    • Lexical Analysis
    • Syntactic Analysis
    • Parsers
    • Byte-code
    • Optimization techniques
    • Foreign function interfaces
    • Calling conventions
  • Computer Architecture
    • Memory allocators
    • Assembly code
    • Bytecode
  • Programming techniques
    • Structured programming
    • Event driven
    • Asynchronous programming
    • Threads
    • Reflection
  • Internet Protocols
    • HTTP
    • TCP/IP
    • Web-Sockets
  • Databases
    • Relational databases
    • NoSQL database
    • Graph databases
  • Web-Programming
    • JavaScript
    • JQuery
    • TypeScript
    • Node.JS
    • React
    • Rest APIs
    • RPC
    • Postman
    • Curl
    • Web-server
    • CORS
  • Security
    • Hashing
    • Cryptography
    • PGP
    • Data management best practices
    • Hardening
    • Types of attacks
  • Abstract Data Types and Collections
    • Arrays
    • Dynamic Arrays
    • Stack
    • Queue
    • Dequeue
    • Binary Tree
    • Linked-List
    • Doubly Linked-List
    • K Tree
  • Algorithmic Complexity (Big O)
    • Algorithmic Design Techniques
  • Software Engineering Principles
    • Management
    • Dependency Injection
    • Inversion of Control
    • Don't Repeat Yourself
    • Reduce Coupling
    • Encapsulation
    • Information Hiding
    • Law of Demeter
    • Liskov Substitution Principle
  • Graphical User Interface
    • WinForms
    • QT
    • WPF
    • MVC
    • MVVM
    • Spaghetti event code
    • Terminal UI using Console Codes

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors