When beginning a new hobby, knowledge acquisition occurs more rapidly in the beginning stages then in the latter. A beginner need not look far to see the edge of their understanding. The world of programming is boundless, and within such a vast subject, blind spots in knowledge can stifle progression. This list serves as a roadmap for intermediate programmers who are seeking a guidepoint in their journey of developing a deeper relationship with computer programming.

Learn Data structures

Data structures are everywhere. Your language probably has a native type of Array, Hash (or Dictionary) and Set. Of course, these aren’t the only way to structure data. There’s binary trees, heaps, directed graphs, k-ary trees, and many others. Knowing the best data-structure for the task can make a program more efficient and easier to maintain. Knowledge of data structures is portable, and applicable to every other programming language.

Study Algorithms

While data structures provide us with efficient and fast ways to store our data, algorithms are data structures in motion. The study of Algorithms exposes the programmer to new and clever ways of solving a problem. Because there is never a one-size-fits-all solution to a problem, each algorithm has it’s own space/time tradeoffs. Having several algorithmic approaches in the toolbox allows you to evaluate the best approach.

Master the IDE

Your programming environment has a direct effect on the speed, quality and enjoyment of writing code. There is no ‘perfect’ setup. The best editor you can use is the one you like and feel comfortable. Learn something new about your chosen programming editor every day. The time saved through shortcuts, and automating workflows will have a direct impact on your output.

Get good at debugging

Every program has bugs and absolutely no one wants to spend all day debugging when they could be coding. Getting good with a debugger and breakpoints turns a momentum-killing bug into a quick, 5 min fix. The programmers who are good at debugging are usually the happiest. To start, hook a simple program into a debugger and get comfortable with moving back/forth and using simple breakpoints.

Develop with a friend

Things are always better with a buddy. Pair programming with a friend is a great venue to learn new tricks, discuss different approaches, and receive feedback from a peer. Developing with a friend also reinforces the most important aspect of working on a team: effective written and oral communication.

If local friends are hard to find, contribute to a software project on GitHub.

Read other people’s code

Musicians learn by studying great pieces of music. Painters study art history and attend gallery openings on weekends. Writers read every piece of literature they can find. To become better at something, become familiar with the great works in that subject. In the case of programming, read all the code you can. The practice of reading and understanding foreign code is the most efficient way to level up.

Write many types of programs

The world is very large with many types of problems; each with their own specialized software remedy. Software is eating the world and there is no limit to the types of programs one can create. Break out of your comfortable software niche and explore a completely different programming universe.

Web developer? Try writing an Android app for your toaster. Native developer? Write a distributed application in Elixir. Backend dev? Explore embedded code on an Arduino.

Learn a new language

Nothing stretches your mind like learning another programming language. Unfamiliar constructs and idioms make one reflect on the assumptions and patterns of their primary language with a new felt freshness. Learn a language that fundamentally changes your thinking about programming. The benefits go beyond learning syntax, as a new language opens up a new way of thinking about and expressing solutions.

Maintain a blog

If a developer fixes a software bug in the woods, does it make a sound ? Not if they don’t blog about it.

A blog is not expected to be a monumental literary feat. Think of it as a technical journal of the interests, challenges and triumphs felt over the course of a career. Keeping a blog instinctively keeps you on the lookout for the next interesting thing to blog about during the day. Writing everyday will also improve your written communication skills.

What is your tip?

The last tip belongs to you. Think of this as a brute force, recursive N+1 proof that the list of programming tips is an infinite sequence. What is the motivation behind wanting to be better at programming? What does being ‘better’ mean to you? Does it mean writing code faster, fewer bugs, more users for an app, or happier clients?

Zach McArtor

Cocoa Engineer