Improve Your Programming Skills
Programming skills are becoming more essential in today's workforce. So how do you stand out? Today's post addresses how you can improve your coding skills and abilities using a number of different sites.
After college in the 90's, like everyone else, I was eager to get into the workforce and started looking for potential career opportunities.
I felt I had pretty good programming skills so I thought I'd apply for a job.
One company I applied to asked me if I would come in for an interview. Of course, I was excited and nervous at the same time. They wanted me to bring some sample code with me so they could see what I've done in the past.
After four hours of meeting and talking with people, I finally got to talk to the developers who wanted to see the code I wrote.
The interesting part of this interview was that my future boss never saw anything like what I wrote. I know, I know, this can be construed. It was primarily a positive statement, not an "OMG...what the heck is that code?" statement.
For those wondering what it was, it was using Clipper with a custom C++ Graphics Library I wrote to generate all types of charts (pie, bar, column, etc) using database data (DBF back in the day). According to my boss, I beat out 88 other candidates with this code example.
Even today, people still want to see how and what you've coded and how it can benefit their company.
The reason I wanted to take everyone through this story was to lead up to another story that occurred about a month ago.
I received an email about an individual who went through an interview process and was asked to write code for a specific scenario and asked how he would solve it. After his interview, he passed the scenario over to me and I recognized it immediately.
It was a sample code kata (Super Market Coding Kata to be exact).
There are companies that look for programmers and then there are companies looking for Programmers. These "Programmers" eat-breathe-sleep code. They want to make sure you know your stuff and you know how to write efficient code.
They look for individuals who keep their programming skills up-to-date and are interested in becoming better and using creative techniques to solving problems.
In today's post, I'll cover some sites to help you improve your programming skills by showing you katas, coding competitions, and training resources (oh my!).
In martial arts, katas are exercises to help you improve your programming skills in whatever martial arts discipline you are learning.
Code Katas are the equivalent in the programming world.
You are given a scenario and asked to solve it using code. That solution could include design patterns, spaghetti code, or however you know how to solve it. It's also a great exercise when you have some free time (what's that?!).
The whole idea of Code Katas is to have each developer write their solution and compare notes about best practices and the most efficient way of writing code.
It's got to be a great site. It has kittens on it, right?
The coding scenarios are on the right-hand side. There are a total of 21 basic katas on the site.
It's still a solid site for programming challenges.
This is, by far, my favorite kata site (yes, I know it's a GitHub repo) for katas.
It's Steve Smith's (from Ardalis.com) catalog of coding katas in PDF format. Just in case you want to test interviewees with a programming test.
He also has a great dev tips newsletter he sends out weekly which is definitely worth it!
For those who've been around and have heard of FizzBuzz, this is a different take on it.
According to the GitHub readme:
Enterprise software marks a special high-grade class of software that makes careful use of relevant software architecture design principles to build particularly customizable and extensible solutions to real problems. This project is an example of how the popular FizzBuzz game might be built were it subject to the high quality standards of enterprise software.
Even though it's a Java project, it provides the interviewer with an enterprise-level approach to how a lead developer/architect would build such a system by providing an example.
Does anybody know if there is a .NET version similar to this?
CodeKatas.org (broken link)
Another great site is the CodeKatas.org. These videos give you an inside look of how developers look at solving these code katas and what to think about when writing code.
Another great Kata collection is Alan Barber from our own CONDG user group (Central Ohio .NET Developers Group).
His GitHub repository has a diverse number of katas geared towards .NET (of course) which I've recently bookmarked and want to dig into.
(UPDATE: 2018-Apr-20) - Steve Smith's Kata Catalog
Steve Smith also has a great collection of katas which he uses in his workshops and sessions for software craftsmanship. His kata catalog includes favorites like the Gilded Rose, Potter, and the popular FizzBuzz.
Definitely check out the collection.
(UPDATE: 2019-03-13) - Neal Ford's Architectural Katas
Architectural Katas are intended as a small-group (3-5 people) exercise, usually as part of a larger group (4-10 groups are ideal), each of whom is doing a different kata. A Moderator keeps track of time, assigns Katas (or allows this website to choose one randomly), and acts as the facilitator for the exercise.
This is the summary of architectural katas. They were first introduced by Ted Neward on his site.
The list is long and provides great scenarios for developers to learn how to become an architect. It isn't meant to be a solo exercise, but more of a business/technical discussion with two presentations at the end describing the solution.
Along with the katas, you always have training sites which teach you how to code by showing you videos (some with code...no..really!).
I've mentioned them in the past and I've always gravitate towards their particular content.
Most of the programming industry's top developers use PluralSight as their platform for teaching others how to write, refactor, and/or architect applications.
And yes, in any programming language as well. There are a number of programming languages you can learn...all for $30 a month unlimited.
This is one of my top picks for learning how to write better code.
Udemy has always had a great number of training material for just about any kind of programming language out there.
The classes are very affordable and always have great material from top authors as well.
While katas are specifically a solo effort (but could be a group exercise as well), there are a number of coding competition sites out there as well. These competitions allow you to bounce ideas off of others as you try to solve programming challenges.
Personally, I've always loved a good coding competition.
You can't program in a vacuum, dontcha know? ;-)
HackerRank is a two-sided website.
I mean that in a good way. On one side, you have developer challenges to rise up in the ranks and be noted as a top developer in your language.
On the other side, you have companies signing up and searching for those cream-of-the-crop developers and offering them possible positions.
You become better at development and you are already on a site where a company may be interested in hiring you. It's a win-win.
Currently, the competing languages are:
- Linux Shell
- Functional Programming
With specialized competitions in:
- Artificial Intelligence
- Distributed Systems
As an example, one of the competitions coming up is to see who is the fastest coder by solving the most challenges in 60 minutes.
Winner gets a HackerRank T-Shirt.
CodeWars is more of a community of challenges as opposed to a race to see who finishes first.
Their diversity in languages is a breath of fresh air as well. Their languages include:
Phew! That's a lot of languages to train your skills.
When you sign up (yep, it's free), you pick your languages and complete challenges specific to your language(s). After you finish your code, you can see how others fared against you with their skills.
Similar to martial arts, you need to practice your coding skills to become competitive in the marketplace. Can you solve a businesses specific problem?
These links provide a number of ways for you to improve over time. I know we live in an age where everything is delivered to you immediately, but no one can know everything immediately.
You cannot cheat experience, grasshopper.
Was there another coding site that you like? Post your comments below and let's discuss.