Docker and a Life a Failure

I've personally coached ~375 people down the path of becoming professional software developers. Many of them have marvelled at the comfort I have with technology. The thing is, I don't. I often find technology just as frustrating as everyone else does. I accept that it will never change. Innovation moves faster than quality, and software developers are notoriously horrendous at documenting their work.

I have comfort with the fact that I love to learn. The technical knowledge is just patience, practice, and time.

Lifelong Failure (Learning)

There's a popular hashtag people love to use on social media - #lifelonglearning

One thing I've learned through research, and direct observation, is that the human brain learns most effectively by failing at some task and then given direct, corrective coaching. This means that failure is a necessary prerequisite for any learning. The logical conclusion is that the hastag should be #lifelongfailure.

For example, I'm currently struggling with Docker. I have the basics down, but none of the nuanced knowledge an expert has. The tips & tricks learned from many failures.

Right now I'm failing rapidly and willingly. All these failures are quickly training my brain to know what doesn't work. I've done the wrong thing, easily, 80 times this weekend. I've done the right thing about 9 times. That nearly a 9:1 screw-up to success ratio.

I guess that's about right.

What I learned with my last container is that running grunt-contrib-watch inside the container - even with the source code on the host machine bound as a volume - won't catch changes to the code as I develop. The container's purpose is to hold the global npm packages that you may not want to clutter your host machine with.

  1. grunt-cli
  2. http-server
  3. json-server
  4. etc...

I was hoping to have all third-party dependencies running in the container, while only the source code remained on the host machine. Doesn't work. I came to this conclusion by attempting dozens of ways to make it work, and then realizing through research online and observation that it won't.

I learned because I failed many times.

Next Steps

I believe that I could, at this point, configure most applications and services to run in a Docker container and deploy it on a cloud service. Therefore, my next step is to learn a more daunting technology - at least it appears so at first blush - called Kubernetes which will help me orchestrate the deployment of a cluster of containers to a cloud service.

I know full well that there's weeks of failure ahead of me.

That's exciting because that means there's plenty of learning to be had.