Interviewing and HackerRank and Learning
HackerRank has become the default site for Amazon, Facebook, Google, and Microsoft to send candidates to improve their coding skills.
I interviewed a lot over the course of my career. I was on both sides of the table. I hired several people and everyone wants to know what makes a good hire.
I won't bury the lead,
What is a good hire?
A good hire is someone who is a fast learner and is excited about the opportunity
A good hire is not based on their ability to determine the performance improvements on a binary tree search. I have done one tree traversal in production code in over 20 years. It is their passion to learn and figuring out how they best learn.
I started a job that was solely based on Python and Data Engineering. I never coded in Python in my life, but they gave me the opportunity. What happenened? I learned python, I learned data engineering pipelines, I migrated a flask application from on-prem to Google Cloud with a cloud sql instance of mySql. I built an entire data visualization project and user admin portal in flask. That is what happened.
Working at an agency, I was put on projects ranging from Xamarin to Wordpress, from IoT devices to Unity VR. Did I know all of those technologies? Of course not. I learned quickly, and built projects.
We all learn differently and I think HackerRank is awesome for learning coding fundamentals. You should know what a loop is, what recursion is and why it is not always amazing (insert memory panic here). I love the SOLID principles. Yes, I'm one of those people. I also love simple solutions over clever. Clever is great to impress your friends in college, but clever is often difficult to explain, maintain, and understand after you have left the organization.
I want to tell you how I learn something, and maybe you learn the same, or maybe you learn differently. That is why teaching is so valuable, but I'll get into that at a later time.
How do I learn?
I learn by doing. But that isn't enough. Let's go through it step by step.
Let's stay I want to learn node.js.
The first thing I do is, ask myself several questions:
- Is this interesting to me?
- Is this important to my career?
- Is it something I keep hearing about and need to at least know about?
It usually is a combination of those, but then I start like everyone else does, "Google".
The exact term I would google is: "node.js tutorial"
That will take me to w3 schools and the nodejs.dev tutorial.
I then start from scratch. I create a new directory, and get my environment ready to learn something new.
Ahhh, everyone glosses over "get my environment ready". What does that actually mean right?
Here are my steps (assuming NOTHING):
- I download VS Code - VSCode
- I setup a github account - Github
- I create a new repository on github for this new learning journey
- I clone that repo to my machine
- I setup VS Code to dark mode (yes, you should too, its better on battery life for laptops)
Then I start the tutorial... I don't copy and paste samples, I type them all. Yes, it is a lot of typing but that helps me remembering the details. If you copy and paste, you won't make typos, which is a bad thing. When you make a typo, you are forced to debug.
90% of development is spent on debugging, not coding
After I finish the basic tutorial and I have a sample application running, I start asking real-world questions...
- What am I going to use this for?
- Is this better than other technologies that I already know? If so, why?
- Can I use this in something I'm working on?
Then I get into specifics for the application, in our case node.js
- How do I connect to a database and create a signup flow?
- How do I create an api with it?
- How do I secure the api?
- What kind of load can it handle?
- How do I deploy this to AWS, Azure, GCP?
- Would I use this for production code, or is this great for hackathons only?
That is how I start to learn. After that, I start going down the more and more, depending on if I care past those initial questions.
The other thing I love to learn and really love to learn how I learn is frontend work.
I always start at codepen.io and see what is out there... and then I get excited about it and start forking their examples and tweaking them.
No one knows everything, and no language is perfect. We have so many search tools at our fingertips to find amazing solutions. Sure, we can tweak them, but let's start with the wheel before we build the rocketship. I don't need to memorize everything, imagine if I memorized everything about jQuery and I was an expert on it.... No I don't need to learn React, Angular, Vue, ES6, etc... Because I know jQuery. That is not the industry I choose to be in. I choose to keep learning for over 20 years and each month there is more and more. Guido van Rossum (founder of Python) came out recently that he is going to make Python faster. That was 2 days ago!
That is my point about this whole article: We are not bricklayers, we cannot get so good at something that we simply implement our amazing expertise. Developers need to embrace the learning journey of the career they have chosen. I have met some expert tilers and watching them do what they do is truly exciting to me, they have their system down so well from laying the tile, to grouting and sealing, and the speed and precision they work is amazing to me. However, they do not need to learn 10 new ways to learn tiling, and 5 new tile methodologies, and 8 new tile saws. Developers need to evaluate new technologies and identify the right tool to use, and our toolbelts get so big that we put some tools in storage. :-)
So compete in HackerRank competitions, learn what you want to learn, but realize that if you are ranked in the top 10 on HackerRank, that doesn't mean you are done learning.
Now go build something amazing!