Skip to content

geronimus1/softwareengineerguide

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

68 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Superman's Guide to Transforming from Zero to Hero: A Step-by-Step Reading List for Software Engineers

Introduction

My fellow Supermen and Superwomen, I stand before you today to remind you that we are all capable of greatness. We may not have superhuman strength or the ability to fly, but we have something even better - the power of our minds and the strength of our wills. So let's put on our capes, channel our inner superheroes, and take on the world with all the courage and determination of the Man of Steel himself. Up, up, and away!

We all are Supermans

A friend of mine who currently holds a managerial position expressed interest in transitioning to a software engineer role. They approached me for recommendations on what to read and which language to start with, despite being uncertain about their future path.

To assist them, I have compiled a comprehensive list of recommended reading materials for individuals transitioning from a non-engineering background to a career in software engineering.

Furthermore, even if you are already a software engineer, you can still utilize this manual to enhance your skills and progress towards becoming a super software engineer.

This guide is made for you to change. Please comment and edit this document! If you have problems with editing just write me on Linkedin.

Instruction

Attention citizens of Metropolis! Just like how Superman goes step-by-step to save the day, you too can become a software engineer by following a step-by-step reading list. And the best part? You can stop at any moment, just like how Superman takes a break to eat a sandwich.

It is advisable to follow the sequence of links/books from point one to the next, but you have the freedom to stop at any point. The "manual" has been organized in a manner that progresses from crucial to more intricate concepts.

Please note that I have excluded management practices from this article since my friend is a manager, and he didn't ask it. However, you are welcome to include them if you wish.

If you want only one simple source for software engineering…

If you want only one simple source for Superman... You could always try calling the Daily Planet and asking for Clark Kent. Just make sure you don't mention anything about Superman, or you might blow his cover!

Alright, if you're looking for just one simple source, then here they are:

  1. Only one simple best practice for software developers
  2. Only one simple overview of Software Design
  3. Only one overview of Software architecture (sorry, only in Russian yet)
  4. Only one book to be a good Software Engineer
  5. Only one simple source for programming principles
  6. Only one book about working with legacy code
  7. Only one good employee
  8. Only one simple step-by-step reading list for the transition to a software engineer - this doc

Educational pathway: Steps to be a software engineer

Once upon a time, in a small town called Smallville, Superman was just a regular kid going to school. Well, maybe not so regular with his X-ray vision and super strength coming in handy during science class. After graduating high school, he didn't just fly away to save the world. Instead, he got his Bachelor's and Master's degrees because even a superhero knows the value of education. But let's be honest, those superpowers are what really make him a hero in the job market.

It's important to acknowledge that everything related to software development falls under the umbrella of Software Engineering. This encompasses the entire life cycle of software creation, including ideation, architecture, design, construction, implementation, operation, and ultimately, decommissioning.

However, it's crucial to note that in today's modern world, these steps often occur concurrently rather than in a sequential order.

Conversation with a father about career: Your professional journey

When Superman asked his father about his career, his father replied, "Son, you have to find your passion and fly with it!" Superman was confused, but his father continued, "No, literally, fly with it. That's how you became a superhero." And so, Superman explored various fields of interest, including saving the world, and never stopped learning how to become a better hero.

To ensure that you're on the right path for your future, it's important to determine what skills you should learn. Here are some useful roadmaps to guide you:

  1. Roadmaps for different roles and programming languages (excluding C++ developer).
  2. Roadmaps for C++ developers:

Childhood: Computer science and Object-oriented programming basics

As a little tyke, even Superman had to learn the basics of walking, talking, and making friends, just like the rest of us mere mortals. But let's be real, his true superpower was his boundless curiosity, which led him to explore the world around him and uncover its hidden secrets (and maybe accidentally break a few things along the way).

You should have a basic understanding of two major sections:

  1. Computer science basics - here are a few options to understand the first major section. Since I learned this area a long time ago in university, I'm not familiar with the latest books. So, let's start with this video to get a general idea of what computer science is all about. Then, you can explore two different options on the internet:
    1. For a simpler approach, check out CS50's Introduction to Computer Science Harvard Course
    2. For a deeper dive, here's a more comprehensive list:
      1. Basic algorithm knowledge
        1. State machine
        2. Data structs and related: tree, list, deck, stack, queue, hash function, and hash table. Great algorithm work visualization
        3. Different sort algorithms
        4. Computational complexity (good explanation for data structures and sort algorithms) and memory consumption of algorithms
      2. Basic database knowledge
        1. RDBMS, NoSQL, SQL
      3. Basic operating system knowledge
        1. Process, thread
      4. Basic network knowledge
        1. OSI
        2. TCP/IP (including IP, TCP, and UDP protocols),
        3. Socket, HTTP
        4. SSL, HTTPS
        5. DNS
        6. How a browser works
      5. Basic application virtualization knowledge
        1. Application virtualization types
        2. Kubernetes
      6. Basic API knowledge
        1. API
        2. SOAP, REST, GraphQL
  2. Object-oriented programming basics - let's see on the internet what it is in common, and…
    1. 4 Principles of Object-Oriented Programming
    2. Best practices are below

Conversation with a father about the universe: Overview of Software Design and Architecture

When Superman asked his father about the universe, his mind was blown away like a bird in a tornado. His dad explained how the planets, stars, and galaxies were like pieces in a giant puzzle, and Superman's brain was like a sponge that absorbed all the knowledge like a thirsty plant on a rainy day. From that day forward, Superman's passion for space exploration was sky high!

Before we dive in, let's take a quick glance at Software Design and Architecture so that you have a general idea of what you'll be learning in the future. Who knows, maybe it'll be enough for you:smiley:, especially last book:

  1. Firstly let’s understand the difference between Software Design and Architecture, just for right mind set when you read these words
  2. Secondly, let’s learn the basics of Software Design and Architecture (20-30 mins)
  3. Excellent deep overview of software design and construction - Code Complete: A Practical Handbook of Software Construction 2nd Edition by Steve McConnell (in rus)

School

Elementary school: People and organization communication

Back in elementary school, Superman was just like any other kid, learning the ABCs and 123s. But little did he know that these fundamental skills would become his secret weapons against his toughest enemies. Who knew that the power of reading, writing, and math could save the world?

Understand that software engineering involves a great deal of communication and coordination among people and organizations. The source code is an only description of the software. Software is essentially electrical impulses on CPUs in server/client systems, and not merely text code on your computer.

Therefore, it is important to have a good understanding of how to write a clear and descriptive code that resembles a written book:

  1. How to write “words” and “sentences”
    1. Clean Code by “Uncle” Bob Martin (in rus)
      • More simple with great examples and other information - Common Coding Conventions by Associate Professorship of Embedded Systems and Internet of Things at TU Munich
    2. Rewriting (Refactoring) is very important - Refactoring by Martin Fowler (in rus)
  2. The storytelling of your software through version control (I recommend git)
    1. Write Better Commits, Build Better Projects
    2. The naming of your commits
  3. Do know that your code can sign contracts in modern coding like you, and it is good

Junior high school: Coding starts with coding tests and testing

Superman wasn't just a bookworm in junior high/middle school. He was always pushing his limits, whether it was testing out his superhuman strength or seeing how far he could go with his wild imagination. These early years taught him to never back down from a challenge and to always believe in himself, no matter how impossible the task may seem.

In modern engineering, all the last stages are trying to move forward. In software engineering, it has now become the standard that coding begins with coding tests and testing. So, let's learn about Test-Driven Development (TDD):

  1. TDD getting started
  2. Also Introduction in TDD, and How TDD changed life (in rus)

P.S. Do remember

Legacy code is simply code without tests. Code without tests is bad code. It doesn’t matter how well written it is; it doesn’t matter how pretty or object-oriented or well-encapsulated it is. With tests, we can change the behavior of our code quickly and verifiably. Without them, we really don’t know if our code is getting better or worse.

-- Michael C. Feathers, Working Effectively with Legacy Code

High school: Something from engineering…

During his high school years, Superman not only focused on academic subjects but also began to experience the realities of life beyond the classroom. Through extracurricular activities and volunteer work, he gained a sense of purpose and empathy for others, preparing him to use his powers for the greater good. This combination of academic and personal growth set the foundation for his future as a hero and helped him understand the challenges and struggles of real life.

In most cases in modern engineering, it's cheaper to purchase ready-made modules than to develop them yourself. Therefore:

  1. Modules - it's important to understand that there are various frameworks, libraries, and software that you should be familiar with and use. Additionally, you should be aware of:
    1. Build automation tools and Package managers for the correct use of modules
    2. Different licenses that restrict you from using external modules
  2. Also you need understand that there are many patterns of Software principles, design and architecture:
    1. Software design principles - checkout principles and principle language
    2. Software design patterns - checkout the simplest and most complete registry of software design patterns
    3. Software architecture styles - check out this list of software architecture styles and patterns

P.S. As I have said Engineering is about the whole lifecycle from ideation to destruction so let's read about DevOps The Phoenix Project: A Novel about IT, DevOps, and Helping Your Business Win (in rus)

Bachelor of Science

During his Bachelor of Science studies, Superman delved deep into the mysteries of science and technology, learning all sorts of nerdy things that would make Sheldon from The Big Bang Theory jealous. Armed with this newfound knowledge and a sharp intellect, he was ready to take on the world as a pro software engineer. Plus, he finally figured out how to calculate the trajectory of his punches to make them extra powerful!

Primary curriculum: Software design and architecture

In this are we will understand about modern Software design and architecture:

  1. My outlook on modern software structure and architecture styles (only in Russian) - different styles of modern architectures, storage and messaging technologies, Service Mesh; microservice application design, domain-driven development; cloud-native, reactive, service mesh; deployment technologies - Kubernetes, Helm; data mesh; hundreds of different architectures of modern applications (for different purposes); CI / CD, DevOps, and SRE
  2. Software design patterns and principles - area “Patterns and design principles” in Software Architect rodmap
  3. The modern approach to Software Architecture - Fundamentals of Software Architecture by Mark Richards, Neal Ford (Russian language conspectus)
  4. How Software architecture is practiced in reality - Building Evolutionary Architectures by Neal Ford, Rebecca Parsons, Patrick Kua, Pramod Sadalage (1st edition in rus)
  5. Difficult aspects of Software Architecture - Software Architecture: The Hard Parts by Neal Ford, Mark Richards, Pramod Sadalage, Zhamak Dehghani (Russian language conspectus)

P.S. While there are many more in-depth aspects of software design and architecture to explore, we believe this list provides a solid foundation before diving into more advanced sources when you begin working. We will cover these advanced topics later in this article.

Additional courses: Check everything else about software design and architecture

If you want a more in-depth overview of software design and architecture, you may find the following resources helpful:

  1. Overview of Software Design and Architecture
  2. A classic book about architecture history and design of solid module Clean Architecture: A Craftsman’s Guide to Software Structure and Design by Robert C. Martin (in rus)

On-the-Job Learning: Let's read when you will start work

Well, after completing his formal education, Superman finally joined the workforce and boy was it a rollercoaster ride! From tackling office politics to dealing with cranky clients, Superman learned that the real-world had a lot more surprises in store for him than just fighting off Lex Luthor. But with his superpowers and quick wit, he was able to soar through any challenge that came his way!

This list is curated for the time when you start working. It is crucial to read the best sources to achieve success in real-life situations, rather than just to appear knowledgeable:

  1. More about best practices
    1. Common Coding Conventions by Associate Professorship of Embedded Systems and Internet of Things at TU Munich
    2. Clean tests
    3. Short best practices description from the “Code completed” book
    4. Programming principles (and an additional good list of principles)
    5. Real software engineering - Software Engineering at Google by Titus Winters, Tom Manshreck, Hyrum Wright
  2. More about object-oriented design:
    1. Agile Software Development, Principles, Patterns, and Practices by Robert Martin
    2. Object Design: Roles, Responsibilities, and Collaborations, Rebecca Wirfs-Brock et al., Addison-Wesley, 2002.
  3. How to work with legacy code
    1. Working Effectively with Legacy Code by Michael Feathers (in rus)
  4. More about coding standards, best practices and tips
    1. Common Coding Conventions by Associate Professorship of Embedded Systems and Internet of Things at TU Munich
    2. Coding guides from Google
    3. For C++
      1. C++ core guidelines from C++ language author and other
      2. Tips from Google
      3. Good rules for secure coding
  5. A good style guide from Google
  6. More about patterns:
    1. Design Patterns by Gamma, Helm, Johnson, Vlissides
    2. Pattern-oriented Software Architecture by Buschmann et al
  7. In addition to all the previous - how you should work for success as a programmer - The Pragmatic Programmer: your journey to mastery by David Thomas, Andrew Hunt (in rus)
  8. Another good list of software design and architecture books (only in Russian)

Master of Science: About the big picture

Ah, the illustrious MSc degree, where Superman can further hone his skills and become a real expert in his chosen field. It's like a superhero upgrade - a cape for the brain, if you will! And who knows, with all that advanced knowledge and research abilities, maybe Superman can finally figure out why people insist on wearing their underwear on the outside.

Once you achieve success in your work, you can expand your knowledge to understand broader contexts and the bigger picture, which can help you grow in your career:

  1. “Horizontal” big picture - about the whole software lifecycle:
    1. Modern software lifecycle Modern software lifecycle
    2. Standard SWEBOK (in rus)
  2. “Vertical” big picture
    1. The Architect’s Path

Additional courses: additional topics for learn

Perhaps Superman even took a course on "How to Handle Kryptonite in the Workplace" or "Superhero Ethics 101." And let's not forget about "Superhero Fashion Design," because let's be honest, that cape doesn't just design itself!

This is a list of things that I believe are important, but they are not included in the main text as I have not worked on them enough for this article

  1. Programming:
    1. Good logs
    2. Command line - bash, Powershell
  2. Social activities
    1. Software design document
    2. Architecture decision records
  3. CI/CD
  4. One more software engineer roadmap
  5. DDD
  6. BDD
  7. How to organize your working place:
    • hard: chairs, table, 3+ monitors, vertical mouse etc
    • soft: to succees, you need to use the best software tools available in every area. It's like being a robot competing against humans!

Additional sources

As Superman himself would attest, even superheroes need to do their research! So, in addition to consulting industry experts and scouring academic journals, we may have also received some tips from our secret superhero source. But shh, that's classified information.

This section describes the sources of information from which this list was created. But which were not mentioned in it directly.

  1. https://irina-seng.medium.com/top-20-books-a-software-developer-must-read-updated-b24bcc9ee3d
  2. https://youtu.be/rdToUPeO93s?t=1258 (only in Russian)
  3. https://roadmap.sh/backend
  4. https://roadmap.sh/software-architect

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published