His eyes widened in excitement then narrowed in disbelief. “But you gotta know it like skateboarding”, I added. I had his attention. “You know, when you want to bring your board wherever you go and try things. Maybe you’re not too confident, but you try it anyway?”
He got the picture. And he started reading.
Now, to be fair, in my area a mid-level Node or front end developer makes around that much money. I was setting him up with the expectation to become a mid-level developer rather than “just break in.”
But does it really only take that much knowledge?
At it’s essence, I think it does. We tend to over-think most things we do. There are all the frameworks, dependencies, build environments and other skills we pick up along the way. I see this as the things we pick up anyway when we’re passionate about something. Put another way, I was telling my son that if he knew the fundamentals and was passionate about doing it, he’d be a solid mid-level engineer.
The book I handed him covers:
- The basic structure of well-crafted piece of code
- Building more complex pieces of code
Getting this right, and anxiously looking for a chance to apply these things gives us the kind of momentum to make things.
When it Goes Wrong
As a counter example, I recently did it all wrong. I took a Node and React project and started glomming on all the dependencies. Everything interesting or shiny made its way into the project. I had the most “powerful” webpack build setup.
Then I tried to move my project and install the dependencies on another machine. Fiasco. I couldn’t do it.
Some dependencies had changed, or something I could no longer understand was going on. 15 hours and all the foul language in my vocabulary later, I could not make this terrible ball of mud with 858 library dependencies in it do anything but take up space on my hard drive.
I told a friend these are dark times in the technology world. I told another friend the Node world was a dumpster fire. I told all my friends all the commiserating nonsense I could come up with. None of that was true. I had lost site of the simplicity of what I was doing and therefore wasn’t actually accomplishing anything worthwhile.
A Clojure Example
I was fortunate enough to be sitting about 30 feet away from Tim Ewald while he gave this talk, Clojure: Programming with Hand Tools. It’s a well-received talk about the essentials of coding, applied to Clojure.
“It’s all just chisels, all the way down.” Tim got laughs from this. He was talking about how fundamentally all of the wood working tools are just chisels, even drills and saws. His favorite book on woodworking was published in the mid 1700s. It was written at a time when people did this every day to feed their families and had no other choice. They really knew how this stuff works.
As he talks about woodworking, his tools, his bench, hold fasts…I think I could really see myself working in a similar workshop. I have that boyish desire to do more wood working. That’s the passion to create things a developer needs to succeed.
Let me drive to the point Tim’s making. Why does he use hand tools?
- Simple to the point of primitive
- Great precision and control
- Flexibility to make anything
- Connects me to my work, my effort to results
- Takes time and effort to learn
I like his qualifier for this last part. It takes time and effort, but not a ridiculous amount of time and not a ridiculous amount of effort. By learning the materials, tools and environment well, we can be productive and effective building worthwhile things.
A Machine Learning Example
Another example involves machine learning. Machine learning, statistical learning, data science have been hot for a while. These are well-paid, well-sought-after skills. Most tutorials, books and papers I’ve worked through over the last 10 years or so on the subject go deep quickly into the subject. Many offer mathematical proofs for everything they do. This is wonderful information, but it does little to build essential knowledge and passion in its practitioners.
Running counter to this is Jason Brownlee. Jason starts with practical training. Get something running, use the same generic approach to every problem, keep going until you get what you were looking for.
Here’s his wonderful book on deep learning. Pick up this book and within 3-4 hours you are solving actual problems with real data using incredibly sophisticated tools. And, in my case, with a smile on my face.
If you want to get the fundamentals and passion for machine learning right, you won’t go wrong with Jason Brownlee.
This isn’t Typical
Typically, this isn’t how we learn things. Not as coders. We get into the thick of things and pretty soon we’re tired and battle worn and maybe not better off from it all.
Here’s how the same process went yesterday with my daughter:
We were writing a RESTful API and I wanted her to be able to do this. I handed her one of my project folders and asked her to doodle as we talked. She knows my good friend Rex who would be building the front end to the system. My opening explanation went something like:
- We’re building an API
- An API is a way that we can hand things across the table
- On one end, I’m handling data and how to use it
- On the other end, Rex is making something pretty like this (I show her a mockup)
That’s where she gets into drawing Rex as a dinosaur and a table and a security guard that looks like a robber showing the authentication piece. You can see she got excited about one of my test snippets that mentioned a Fluffy Bunny Brigade. She couldn’t stop laughing and had to draw bunnies.
But, at the end of the day (around 1 in the morning), she was up watching Sherlock and I was putting my work away and I walked her through it. She had already worked with me for several hours that day. She knew how we were building APIs. She had watched me test them with an automated tool. She had watched me use cURL and get things back manually. I then showed her the new things. I showed my token authentication strategy and she got it. I showed her several end points and she knew enough to ask questions and get into it.
She is getting the fundamentals. She has a passion. I didn’t walk her through the thick of things. I walked her through the important part of things. I sincerely think I may have two budding coders living in my house right now because they are working on this from a useful angle.
And this is the advice I’d give bootcamp people, whether they’re just starting or trying to get into some of the development shops as they finish. Keep a passion for working the things they taught you. Keep building things and keep them simple. Show that you do this stuff and look for more ways to do this stuff. It’s a little bit of a disconnect: you had so much knowledge and practical experience jammed into a few short weeks and now you’re out in the world trying to get a job. Let that be the beginning of something wonderful. Know it like skateboarding or wood working and you’ll do just fine.