onboarding_intro - Code-Over-Time/varcade_games GitHub Wiki

Onboarding

Onboarding is a process that you will likely go through many times throughout your career.

It's usually the first thing you do when you start a new job and throughout your career you will likely 'onboard' on to many different projects.

Each experience will be different. Not every team does onboarding the same way and some won't even have a formal process for onboarding (you will likely find this in a start-up type environment).

Throughout your career you'll also likely find yourself 'onboarding' others onto various different projects too.

So this is an ongoing and constant process for software engineering teams and one that is crucial for any team that wants to be able to grow and adapt to the dynamic environment around them - which is most high performing teams.

Considering all of the above, I figured an onboarding focused course was worth doing.

The process can itself be challenging because understanding another person's code can be like trying to understand the inner workings of their mind.

There are potentially years worth of design and product decisions implicit in the project you'll be working on. You weren't there when those decisions were made, but that doesn't mean they won't have a significant impact on your day to day work.

I call this historical context, and it's an important part of onboarding. The more you understand about the product you're working on and its history, the more effective you will be as an engineer working on that project.

Over the years I've found that the most effective way to onboard new team members is with a combination of documentation and hands-on tasks, and that is exactly what you will be doing in this course.


The Tech

Throughout this course you will work with code, markup and scripts using:

  • Javascript
  • Python
  • HTML
  • CSS
  • Bash script

And you will use industry standard and modern technologies, such as:

  • Vue.js
  • Django
  • Node.js
  • Flask
  • Docker
  • Linux
  • Phaser 3

These lists may look intimidating now, but don't worry, you will have a lot of support in your journey.


Learning outcomes

By the time you're finished this course you'll understand how to:

  • Run a set of micro services using Docker
  • Set up an efficient developer workflow using Linux
  • Run a web application with Vue.js
  • Run application servers with Django & Flask
  • Run a multi-player game with websockets

How to approach this course

There are a few things I want you to keep in mind as you go through this course - some guiding principles.

When asked how he trains track and field athletes, renowned strength coach Dan John answers:

Throwers throw.
Jumpers jump.
Sprinters sprint.
Runners run.
Hurdlers hurdle.

I would like to add Software Engineers engineer to this list.

The premise here is simple. If you want to get better at running you need to run. If you want to get better at jumping, you need to jump. Similarly, if you want to become a better Software Engineer then you need to do some engineering.

The progress you make as a software engineer is directly related to amount of time you spend doing actual engineering work.

Reading books and blogs, following online courses and watching videos are all useful resources to have and they will help (especially good engineering books that focus on patterns and ideas). But that's all theory. The bulk of your time should be spent on practical activities.

I often say that engineering is surprisingly similar to sport in that you can watch others play a game and read all of the books in the world about that game, but that won't make you an athlete. You have to go play the game.

And every game will be different. The opposition, the playing surface, the weather etc...

You need to get out there and experience it.

This is exactly why I have created Code Over Time - it is an environment in which you can get this real hands on experience, and here are my guiding principles.


Little and often over the long haul

Practicing something for 30 minutes every day over many weeks is far better than practicing something for 4 hours once a week.

Consistent exposure is key, so try and build a habit of sitting down for a few minutes as often as possible and getting your hands dirty.

Ideally you'd make at least 30 minutes a day available to work on becoming a software engineer. A lot more if possible.


Give yourself time

This point leads on from the last.

This is a marathon, not a sprint - you can't know everything so don't try to cram it all in there.

Taking short cuts as a beginner is a sure fire way to hinder your future progress. Take the time to really understand what you are doing.

The secret to becoming a really good software engineer? Read code, write code, test code, design systems, release products and repeat for about 8 years.


RTFM

RTFM is a less than polite way of telling someone to see if the official documentation can answer their question.

Understanding how to extract the information you need from documentation is vital. You will depend on documentation written by other people at every turn throughout your career.

Some of it will be great (like Redis and Vue.js) and some will be awful (not going to call anyone out here). But that doesn't matter - you still need to figure it out, so get some practice in - read the official docs first whenever you get stuck.

During this course you will need to go read some docs and try to understand the tech you are using.


Set some goals

What would you like to be able to do?

Maybe you like to build your own game and add it to your own Varcade Games? Or perhaps you are interested in server tech and want to be able to optimize and push server systems to their limits.

What ever it is, keep it in mind - but in the back of your mind.

Focus day to day on getting through this course - your goals will shift and become more defined as you learn more.

Head, meet wall

There will be many points throughout this course where you will feel as if you are just banging your head against a wall and not making any progress.

Embrace this feeling - it's all part of the journey.

Perhaps more importantly, it will never go away. It doesn't matter how experienced you are or how good an engineer you are - there will be days where it feels as if computers are conspiring against you.

Also remember that there will be moments of joy, accomplishment and satisfaction. Those moments never go away either - embrace them too!

And finally

Please try to have fun - it's only code.

- Kev

⚠️ **GitHub.com Fallback** ⚠️