In this era of plug and play, copy/paste programming, many programmers do not take the time to hone their coding skills, which can be detrimental to their career. In this article, we explore what is meant by coding skills, why it matters, and how a person can acquire, nurture, and improve their coding skills.
I gave a few lectures in late 2018 at colleges in Chennai and Computer Society of India, thanks to Dr. Govindarajalu. This article is a summary of one of the presentations. It is primarily meant for my fellow programmers who seek to level up and those who aspire to become programmers or just starting out.
1. Programming ca. 2019
Today we cannot imagine programming without google and Stack Overflow! Online sources provide us with reference material, and also solutions to about 80% of the problems we need to solve while developing any software.
A large number of Open Source software provides us a wealth of components that can be “assembled” to build software quite easily and rapidly. Developing an application has become something like that of putting together a dinner with a meal kit.
Programming is made simpler by IDEs that has become very powerful. In addition to the enormous tooling, they also provide smart code completion, snippets etc. Some also provide AI based assistance!
If machines and the internet can do a lot of programming for us, the question then becomes, are coding skills even necessary?
2. The 10x Programmer
Some say the notion of a 10x programmer – the one who is 10 times as productive as the rest of the team – is a myth. But we all know that few programmers stand out exceptionally from the rest.
What does it take for an average programmer to become a 10x programmer? Is it even possible? I think it is possible to get close, provided these two conditions are met:
- Have a genuine passion for computing and solving problems. If you just do programming for a paycheck, examine yourself and try to cultivate interest. Programming should be fun!
- Attempt to continually improve coding skills.
3. What are Coding Skills?
I have been saying “coding skills” a few times already, but what does it mean? Is it just programming? No! There are several aspects to coding skills than just typing away on a computer!
I have divided the skills into nine aspects, across three tiers. The top tier is all acquired skills, meaning they are not usually taught in schools and colleges. They have to be intentionally practiced. The middle tier is mostly taught in formal Computer Science education. The bottom tier includes lots of soft skills that comes mostly with experience.
Precise Coding: Precision does not happen by chance. The ability to deliver according to specifications, and with high quality is the hallmark of 10x programmers. Always design before you start coding. I believe the best tools for design are notepad and pen. Keep one handy always! Adhere to KISS and DRY principles.
Fast Coding: The ability to code fast not only helps to win programming contests, but it is also very helpful in the workplace! Businesses have timelines and the best programmers thrive under pressure. In early 2013, Marissa Mayer, the then CEO of Yahoo!, locked 18 of us in a room and gave us the mandate to deliver an end-to-end native ads solution in 2 months. We did it in 43 days! The ability to code fast came in handy for many of us.
Practical Coding: Almost every top programmer is a hacker. The ability to experiment a lot, tinker with many technologies and open source libraries etc. will help you find simple solutions to complex problems that are highly practical.
Math: Mathematics is the foundation of Computer Science. It is good to brush up on Math skills once in a while in order to be really good at programming. From understanding computational complexity to applications in Cryptography, Blockchain, Video encoding, to name a few, Math skills are essential to propel a developer to the next level.
Data Structures: These are the heart of a program. Eric Raymond, in his seminal work, “The Cathedral and The Bazaar”, says that “Smart data structures and dumb code works a lot better than the other way around”. Data structures can make or break a system, and top programmers pay very careful attention to choosing proper data structures or designing one.
Algorithms: These are the brains of a program. Most of the time, simple well-known algorithms are enough to solve problems, but sometimes you will have to tweak existing algorithms or invent a new one. A very very small percentage of developers work on sophisticated algorithms that require skills such as dynamic programming. For the rest of us, there is a wealth of open source libraries and APIs available. Even then, to pick the best one to use, a sound knowledge of algorithms and complexity analysis (run time, storage etc) is essential.
Communication: Almost every great piece of software is developed in a team setting, whether it is open source or big corporations or a startup. Having worked with many teams, I posit that being able to communicate well is as important as coding itself. If there are n people in a team, the number of communication channels become O(n^2), which often leads to a lot of chaos in larger teams. Being able to describe your work, as in documenting code or publishing a blog article is also a very important skill to develop.
Discipline: A good piece of code reads like a poem. To develop a beautiful piece of software, you need to have serious discipline: the ability to break down tasks, set goals, have focus and get “in the zone”, follow coding standards and best practices, continuously refactor and follow through to completion.
Tooling: Top developers excel in creating tools that automate tasks and help in productivity. Skills like shell scripting enable a developer to build tools not only for their own purpose, but could also help the organization tremendously!
4. Why Coding Skills Matter?
Now that we have seen what coding skills are, let me give you a few thoughts on why they really matter at this time and age.
It can help you build things. As an engineer, you want to be able to confidently design and build systems. Having good coding skills will empower you to do that and achieve your goals. As an entrepreneur, it gives you infinite potential to bring ideas to life without having to depend on others (at least during initial stages)!
It helps you solve complex problems. You can really think big! With strong coding skills and breadth of experience, you will be able to architect systems that impact millions of people and solve problems at a global scale.
It helps you in your career. Needless to say, top programmers are recognized in every company. They go on to become architects and the go-to guys for solving company-wide problems. Many teams and even companies are built around people with exceptional coding skills.
It helps you to get jobs. Many companies incorporate programming tests to find out skill levels. If you ‘practice’ coding and problem solving, it should be relatively easy to crack these tests.
It helps you to win hackathons! Hackathons are fun events that unleash creativity and help build things. Having good coding skills will help you translate your dream project to reality faster and win hackathons and earn you fame and fortune!
5. How to Improve Coding Skills?
Cultivate Passion for Coding: Coding is a channel to express creativity. It is a means to build useful things. Many programmers who are starting out can get really frustrated understanding concepts like recursion, and can easily give up. Don’t!! Even seasoned programmers have difficulties with advanced topics, and they have gone through the same path as you. Instead of giving up, focus on small wins. It will boost your confidence!
Hard Work: Surprise! Surprise! There is no shortcut to becoming an expert programmer. Similar to how top athletes continuously train, you have to continuously practice programming. Malcolm Gladwell tells us about the famous (or infamous) 10,000-hour rule, that is, to become expert in any field, you will have to work on it full time for 10,000 hours. It actually is true in the field of Computer Science and programming.
Become a Polyglot: Different languages serve different purposes. It is always good to know more than one language, as you would be able to solve many different types of problems. Many modern languages are derivatives of C, and hence learning C is very helpful.
Practice on Coding Sites: There are several online coding practice sites available today. I personally prefer Codesignal, Hackerrank and Project Euler. Although several of these sites are geared towards interview practice, the advantages go far beyond that. I usually hang around on these sites and solve at least 1 or 2 problems every week, as it is fun, very rewarding, and extremely satisfying when I occasionally finish in top 10 ;) It definitely keeps you sharp and gives you the mental energy to tackle challenging problems at work.
Competitive Programming: Taking part in programming contests is a great way to improve fast coding skills. There are several contests available at different levels. ACM ICPC is famous in universities. If you are in college, join or form a team to compete! Hackathons are routinely run in communities and corporations. Join one and hack on!
Communicate: Participating in forums such as Stack Overflow is a great way to improve technical communication skills. Not just ask, but also contribute, even a little! Write technical articles – maintain a blog, post in medium.com or LinkedIn. Attend technical talks & meetups.
Develop Hobby Projects: Last, but not least, developing hobby projects is a great way to improve coding skills. Many useful tools and applications began as hobby projects. It is also a great exercise in product development – you define the scope and can develop at your own pace!
Coding skills really matter in this era of ubiquitous computing. Paying attention to improving your coding skills will help in your career and enable you to build extraordinary things!
Thanks for reading this article. I would love to hear any feedback you may have. If you find this article useful, and you think it will help your colleague, friend, or classmate, please share or tag them.