Dušan Dimitrić

How to Become an Expert (Part 1)

20 Jul 2019

The purpose of this blog post is to help beginner/intermediate programmers get to the next level in terms of their programming skill and hopefully in life. Also I answer some questions that beginners often ask.

Part 1 - Beginner to Intermediate

If you’re just starting out, read this section very carefully.

Realize YOUR potential!

If you’re reading this you’re most likely a member of the human race. We, humans, are very limited and flawed creatures by design. Our mental abilities are not that great. Our animalistic instincts and emotions often lead us astray, if left unmanaged.

This is the first realization we have to make on our path to knowledge. Learning is difficult for us humans! We have to work really hard in order to understand anything at all!

On the other hand, considering our physical and mental limitations, some people have done amazing things in their life! In terms of knowledge and skill - all of us can achieve a lot more than we think is possible! Myself and YOU included!

Fight against the animal instinct of complacency!

In order to reach astonishing results - we have to open our minds to learning and push our human vessels beyond the limit!

What about talent?

The other day a guy left a comment on one of my YouTube videos saying how he envies me and my talent. While I appreciate the flattering comment very, very much, I think that HE and MANY OTHERS might be missing out on important facts.

The truth is - in order to become an expert programmer you don’t need much talent. For example - I would rate my mental abilities as AVERAGE. Some concepts I grasp very quickly and very well, others not so quickly and not very well. That’s just how my brain works. Everyone has strengths and weaknesses.

The thing that actually matters is motivation. My motivation stems from my curiosity about computers. I would rate my curiosity as EXTREME. That’s what allowed me to get really good, really fast.

Keep in mind that this article is about becoming an expert in programming. I can’t really teach you how to reach the heights of Von Neumann, Turing, Knuth, Dijkstra and others since, at this point, I’m nowhere near those kind of people in knowledge or skill. I’m sorry :)

Gather knowledge!

In terms of knowledge availability - we live in the best time in history so far. Thousands of books, courses, videos are available FOR FREE! You can take online college classes FOR FREE! This is the first time in history that we have these kinds of learning opportunities accessible anywhere in the world! Take advantage of it!

There are also countless learning resources available for purchase. Keep in mind that buying learning materials and consuming them is one of the best investments of time and money that you can make.

Ideally you should find a mentor. A good mentor can give you directions so that you don’t go wandering around. Try finding a mentor who can advise you face to face. If that is not possible, resort back to online resources.

Ingest huge amounts of learning materials every day. You need to GULP KNOWLEDGE not sip it through a straw. A 1000+ page book is nothing! Go through dozens of these! GULP KNOWLEDGE!

Don’t restrain from reading books twice, three times or even more. I would even recommend it, especially to beginners.

Power through the fundamentals!

Learning something new can feel very painful and aimless at first. Beginner programmers often struggle with learning because they simply don’t understand that it takes time and effort to learn how to program a computer.

The other day I delved into WebGL (3D graphics programming for the browser) and once again, I felt like a beginner. While WebGL is pretty easy, there are still a lot of fundamentals to go through and understand before you can build anything meaningful with it. While I was very comfortable with general programming and math I knew almost nothing about 3D computer graphics.

This is exactly how it is when initially learning to program a computer.

You start by learning a lot of fundamentals and most of the time you’re not even sure why you’re learning them. You don’t see the big picture - what can be built with these small building blocks? You have to embrace these uncomfortable feelings and just POWER THROUGH. Know that the painstaking process of learning the fundamentals is going to pay off dividends very soon.

Keep in mind that the first 100 hours of learning something new are the most uncomfortable. After you’ve spent 100 hours or more learning something, only then you can make a judgement if that vocation is for you or not.

Pay attention to every single detail

While learning, you have to be extremely precise and pedantic when it comes to understanding concepts. Make sure that you 100% understand everything that you’re learning. This is very hard, but practicing a engineering-like rigor is the thing that will make you an exceptional programmer. Just like engineering, computer programming is very strict. The smallest detail matters.

Pay extremely close attention to every character, symbol, naming convention, terminology, command, abbreviation, acronym, EVERYTHING! Be precise when using terminology in your speech and writing.

Apart for being great for learning, being extremely precise and pedantic at all times is going to prepare you to do your best work once the time comes.

TIP: When going through learning materials, type every example program and run it yourself on your computer! This will greatly reinforce learning.

Be comfortable with not knowing everything

This directly contradicts the previous point, but that’s life. Absolute truths are extremely rare.

A huge emotional muscle that you need to build as a computer programmer is being comfortable with abstractions. We are all standing on the shoulders of giants when it comes to almost anything in life, and this is especially true in the world of computers and programming.

You actually can’t know everything when first starting out and that’s fine. Understand as much as you can and just move on.

Apply knowledge

“Knowing is not enough, we must apply. Willing is not enough, we must do.” - Bruce Lee

As the legendary Bruce Lee says, apply your newfound knowledge as soon as possible. Even if you know very little, try to build a program with that knowledge. This is important because if you don’t reinforce learning by applying what you learned, the information gets lost really fast. By struggling to apply the learnings - our brain reinforces the concepts and remembers them more permanently.

Now, a lot of beginners don’t know what kind of projects to build. I would say pick something you’re interested in besides programming. For example, it can be something about sports, the stock market, fashion, video games, art, music, history, whatever…

Building a project might feel intimidating and hard from a beginner perspective, so feel free to make small toy programs at first, and lots of them. You might go ahead and start building a project just to find out that it actually is too hard for you at that point. That is fine as well. Failure is not important, you’re just practicing.

When I was first learning to program, I started building a graphing calculator in Java, so that I can visualize different mathematical functions (similar to how MatLab does it). Here is how that turned out:

Function Graphs

Needless to say that I failed to create a complete program. But I made SOMETHING and applied what I’ve previously learned. That is the only thing that matters when learning.

So go ahead and write a program!

Even though these practice projects are small and seemingly insignificant, treat them as VERY IMPORTANT. Try to do your best on each and every one of them! This will prepare you to do serious work in the future. When the time comes to create something important, you will be well-prepared to create quality work, since you’ve been doing it all along!

Learn how to find answers on the internet

Today (in 2019) the internet is full of answers to both general and super-specific questions when it comes to programming. As a beginner, you can find everything that you need online. So learn how to use your search engine(s) well!

Large programs are not scary.

As a beginner, you will probably be intimidated by large codebases. I remember, when I was first starting out, that I couldn’t imagine holding even 500 lines of code in my head. That seemed like an awful lot of code! But it’s really not. As you learn and write more and more code, your capacity will grow and you will be able to grasp more and more.

Looking at other people’s code was really intimidating to me as well. Various open-source projects seemed opaque. I thought they were impossible to understand.

Just know that, with time, you’re going to easily be able to read code that you didn’t write and make sense of it relatively quickly.

Attend meetups

Another great way to push yourself is to attend local meetups and user groups. You can find these on the internet, just search for ‘[your_city] programming or technology meetups’. If you don’t live in a bigger city with an active IT culture, try traveling to the nearest one in order to attend.

If you’re a beginner, a lot of the meetup talks/speeches/presentations will fly over your head. It will be too much for you to handle. The speakers / other attendees will probably be way ahead of you in terms of knowledge and skill. It might be very uncomfortable.

But that’s a great thing. Being around people that are way better than you will help you grow via the process of osmosis. Most programmers are willing to help you out or give useful advice. Listen to them very carefully!

Another crucial thing is to be proactive!

Have you ever been to a public meetup where everyone was silent except the speakers? Don’t be like that, be proactive.

Applaud the speaker, participate in the event, contribute to the atmosphere, stay after the meetup and talk to the speaker and the attendees… wake up and contribute!

What programming language to choose?

It doesn’t matter that much. Don’t overthink it, you’re eventually going to learn multiple programming languages anyway. Just pick one and learn it extremely well before moving on.

Here are the important things to consider when picking a programming language:

This is very important because a big, active user community will mean that there are plenty of learning resources available, messaging channels, forums, events, etc. It also means that there should be fewer bugs in the language itself and that the newly discovered bugs / vulnerabilities are going to be fixed quickly.

Is there a big market demand for that language?

If you’re considering programming for money, this is obviously important. A good thing to do is to keep track of the highest paying programming languages and ecosystems, and keep an eye on the upcoming trends as well.

What kind of a program do you want to make?

You might have a project in mind that you want to build at some point. Do some research on the internet (and in person) to find out what language/ecosystem fits your use case the best.

How long does it take to become a proficient programmer?

It takes around 2 years of learning, practicing and working on projects to become comfortable with programming. That means 2 years of at least 40-hours of active work per week.

If that seems like a lot, it’s really not. For comparison, to become a proficient musician it takes way more work than that.

If you’re passionate about programming you’re going to spend way more than 40 hours per week on it anyways, which may allow you to grow faster.

It took me around 2 years to get proficient, but you can go faster by working with mentors. A great mentor will give you the largest possible boost in understanding a topic such as programming. I don’t really offer mentorship these days, but if you’re crazy passionate and driven, shoot me an email and I will consider it.

Do I have to know math?

Many beginners ask this question. Here are the answers:

If you want to be an intermediate programmer, then you do not need math.

If you want to be an expert, then absolutely yes. You do need to know at least high-school level math.

If you want to reach towards mastery then you have to at least be familiar with college-level math.

This also depends on the type of programming that you do, but the answers above are true for most programmers.

Basic math is really not that hard, just go ahead and learn it if you feel the need to.

Moving on…

Applying the principles and practices from this blog post will turn anyone into a proficient programmer.

In Part 2, I’ll write about what it takes to become an expert!