About diving and software engineering

About diving and software engineering

A frequent question I get "How do software engineering and diving go together?".
The explanation starts with learning, going to improving your skills, caring
about the environment over to mentoring people to improve their skills.

Learning

In this section I will explain how we (@PADI) let people learn to dive and how
I let people learn to code.

Diving

Learning to dive is a live changing experience. The 70% [1] of our earth
covered by water become a place you can start to discover and explore. You will
be able to see turtles, alligators, dolphins, sharks and all kinds of other
magnificent creatures in their natural habitat. Teaching someone to dive is
more about mentoring them to learn diving by themselves. Training every skill in
a safe environment, a swimming pool or a place with pool like conditions, is the
key. This allows the student to tryout new skills and practice them until
mastering them.

How do you you introduce new skills? You demonstrate them with emphasis on the
key features of the skill [2]. After the demonstration the student can then
repeat the skill. Once they have mastered the skill they will perform the skill
by themselves in open water (the ocean, a lake, or such) without prior
demonstration. This ensures that they memorized that skill with the key
features.

Software engineering

When you start software development it opens completely new areas for your
professional career or a new hobby for your time off. It can start letting you
automate your home or find a new job. When new software engineers start in my
team I make sure that they learn to code or improve their skills by themselves.
New skills will be introduced in a safe environment, version control and our dev
stages. This helps the new person to adjust to our processes, naming
conventions, code styles, etc.

How do you introduce new skills? Depending on the current skillset I let the new
person start with a tutorial and then jump into fixing simple bugs. The tutorial
part can be skipped if skills for the current project are sufficient. Code
reviews and pairing sessions ensure that developers can learn, practice, make
mistakes and get the appropriate feedback to improve further. As they progress
they will implement complete new features and participate more in architecture
discussions.

Improving skills

Once you have mastered a base set of skills you want to explore new things.

Diving

Once you have mastered the basics, it is time to advance to new depths, explore
wrecks or dive in cold waters. For these special conditions some more skills are
needed. By now you usually have some idea of what interests you most or which
areas of the world you want to explore. Again you will be looking for a mentor
that can foster safe learning to let you learn and practice the skills so you
can rely on them when needed.

Software engineering

After you have gotten a good taste for the project/programming
language/framework it is time to go deeper, explore basic concepts of
libraries/languages/frameworks used. At this point developers start noticing
areas they are really interested in and you can guide them to explore those
areas more. This helps a lot in T-shaping your team.

The environment

Caring about the environment is very important if you look at things like the
climate change. In the IT world you need to care about the environment by using
resources efficiently and by taking care of the communities you rely on
(stackoverflow, opensource, etc).

Diving

In diving we can and need to take care of the underwater world. We can do so by
documenting the amount of garbage found [3] and cleaning it up. But there are
also things you can do without touching anything, be aware of your fins, avoid
garbage if possible and recycle what ever is possible.

Software engineering

Looking at the amount of computers running now a days, it is always a good idea
to make sure you use those resources properly. You can shutdown unneeded servers
in dev and test stages during nights and weekends or you can try to avoid
servers at all (go serverless [4]).

The other environments that need to be taken care of are the communities that you
rely on. If you are using stackoverflow upvote answers that really helped you.
Of course it is also possible to raise questions and post answers.


  1. https://en.wikipedia.org/wiki/Water_distribution_on_Earth ↩︎

  2. https://www.youtube.com/watch?v=knWMq-fc9dg ↩︎

  3. https://www.projectaware.org/ ↩︎

  4. https://serverless.com ↩︎