To Be A Great Programmer: Mindset And Learning Strategy

Tags: beginners, firstyearincode, progr, career
Published: 2019-12-31 11:34:20

## Preface

Software is continually eating the world, programming is a required skill for many people in the future.

Programming also contains much of fun if you mastered it.

In my career as a software engineer, I met some really great programmers and learned lots from them.

This post will give you some tips for the journey of being a great programmer, especially from the sides of mindset and learning strategy.

Master programming costs much of time, [Peter Norvig said ten years may be enough](https://norvig.com/21-days.html), so please keep patience and let’s get started.

## The mental model

![To be a great programmer: Mindset and learning strategy 3](https://www.coderscat.com/wp-content/uploads/2019/09/image-12-1024x608.png)


Everyone can code, several years old boy could also produce some code which runnable.

However, being a great programmer requires much time and energy to polish skills, also  requires you have the correct mindset, I summarized it as below:

### Lifelong learning   

> “Self-education is, I firmly believe, the only kind of education there is” — Isaac Asimov

Everything is changing very quickly, some technologies died away and some famed up every year. You don’t need to learn every fancy and fresh stuff, but you need to know the trends. And also have base skills to get up quickly when necessary.

![To be a great programmer: Mindset and learning strategy 4](https://www.coderscat.com/wp-content/uploads/2019/09/image-6.png)


John Carmack, the creator of Doom series games, was still trying to [learn a new programming language](https://sdtimes.com/john-carmack/oculus-cto-john-carmack-is-developing-scheme-scripting-language-for-vr/) and trying to apply it into products, he had got in programming several decades. To be a good programmer, we must keep the belief of life long learning, and get ready for the quick pace of the computer industry.

### The Passion and Persistent

Programming is not easy, with the dark side of undocumented code, long time working day, large pressure from a product release. If you are not passionate, debugging will flush your brain cells down the toilet.

![To be a great programmer: Mindset and learning strategy 5](https://www.coderscat.com/wp-content/uploads/2019/09/photo-1570328477202-2414f1da1f31-300x200.jpeg)

In some sense, programming is creating a whole new world. A programmer who loves programming does not feel boring even with too much time spent on the keyboard, on the opposite, he will be enjoyable and satisfied.

### The Curiosity

To be a good software engineer, you need to be curious about many things.

There are many questions need to be answered. For example:

- *How a function is implemented in a library, what are the drawbacks and limitations of it?*
- *How Operating System’s memory management in Linux is implemented, how process and thread are implemented?*
- *What happens when you are sending an HTTP request with a browser?*

The curiosity will push you to get the details of each corner, polish your skills and push you to a higher level.

### Keep standards high

![To be a great programmer: Mindset and learning strategy 6](https://www.coderscat.com/wp-content/uploads/2019/09/image-13-1024x454.png)


Normally, writing code that is just workable will cost not so much try, sometimes you find code snippets from the Internet, and paste it into the editor, luckily it works. But ….., workable code is a low standard, you need to keep it high. Keep a high standard for your work means you need to polish your work to perfection.

Try to ask yourself these kinds of questions:
- *Do you know the meaning of each line of code in the project?*
- *Could your architecture is flexible for different requirements?*
- *Does it work for a much bigger data volume?*
- *Does it readable and easy enough for other people to maintenance it?*

There are many problems need to be solved for keeping a high standard, which will ultimately lead to complex problems, this is also why big tech giant such as Google will employ engineer in a high standard.

### Collaboration

> “Any fool can write code that a computer can understand. Good programmers write code that humans can understand.  — Martin Fowler”

Coding is just communicating with the machine with code, but your code will also be read by others, which means you are communicating with other people through code!

When you get into an open-source project or if you work for some companies, you need to discuss the requirements, exchange ideas with others, present yourself to others, write documents, etc. Of course, some superstar can just ignore these, because they can produce great code to law the world!

For most programmers, expression skills will be a big plus for all the interaction. This is the most important soft skills for collaboration with others.

You can create a tech blog for practicing writing, this is a very detail guide: [How to Start Your Programming Blog?](https://www.afternerd.com/blog/start-programming-blog/). I also inspired by afternerd.com to start this site.

## How to learn

As a programmer you need to study all the time, so the first import lesson is to learn how to learn, learn efficiently. If you got the pattern of how to learning new things quickly. you will be got quicker and deeper for many fields, and become a better programmer.

![To be a great programmer: Mindset and learning strategy 7](https://www.coderscat.com/wp-content/uploads/2019/09/image-7.png)

[**The Feynman Technique**](https://www.youtube.com/watch?v=_f-qkGJBPts) provides a deep, fundamental, intuitive way for mastering new knowledge, It is designed as a technique to help you learn anything faster. 

There are many common concepts in computer science. For almost everything, if you can explain it to others in plain words, means you have mastered it totally, in your own way. In other words, **learning by teaching** is an effective method. Don’t fool yourself.

**Learning by doing is another important strategy**, writing software is not rocket science, it’s more like a craft of skills, such as painting, dancing, playing basketball or piano.

To be an expert, you need to keep practice every day, especially when you are a beginner, you need to spend much time to get the feeling of coding and debugging.

And then, you need to do some real projects for some practical usages, to make sure you understand writing code is to solve the problems from the real world.

## The steps

### Master the basics

Like Chinese Kung Fu, the beginner will spend much time to get the basic strength before he studies some fancy things.

Computer science is about 50 years old, tools(programming languages, editors, platforms) and computing power changed drastically during the years, but fundamental theory develops slower. Virtually all programming languages today are Turing complete.

![Margaret, in 1969, standing beside the listings of the actual Apollo Guidance Computer source code. Photo courtesy of the MIT Museum.](https://www.coderscat.com/wp-content/uploads/2019/09/image-10-247x300.png)


Here are the subjects you must master them:

- Data structure and algorithms
- Operation system
- Compiler and programming languages
- Computer Networking
- Database

Go to get a CS degree in college if possible, it’s beneficial for applying for a job, but it’s not required.

A programmer is not a role like a scientist, which needs more formal academic training. On the opposite, many good programmers just graduate from high school.

For self-taught learners, you could find lots of helpful resources, [books for studying computer science](https://www.coderscat.com/best-cs-books) and programming. There are so many open-source projects, tutorials, and [open courses](https://online-learning.harvard.edu/subject/computer-science). 

As a self-taught beginner, don't do it all alone, try to connect with others, try to find a mentor. This will speed things up and help you avoid mistakes.


Make a plan for your learning path, you don’t need to make a very details plan. Be patient to follow it, it maybe costs almost one year for[ finishing a classic book such as SICP](https://eli.thegreenplace.net/tag/sicp).

By the way, [Structure and Interpretation of Computer Programs](https://amzn.to/2ZYDO0X)(SICP) is a book every real programmer should have a try.

### Find your own track

There are many fields in the computer industry, during your career your maybe just focused on several fields.  Game programming? Web development? System programming? Robot? So when you are young, try to find the hole you what to dig in. If you don’t know currently, [keep looking, don't settle](https://www.youtube.com/watch?v=BjnZ90XwMlM).

Your target is the one in which you enjoy yourself and satisfied mostly.

Make sure you have enough depth in one field, this will give you confidence and your own learning patterns.

### Create some valuable thing

Create a [*Github*](http://github.com/) account if you didn’t have one, run!

![To be a great programmer: Mindset and learning strategy 8](https://www.coderscat.com/wp-content/uploads/2019/09/image-11.png)

 

Github is the place where programmers share projects and ideas, it currently hosts many famous projects’ code.

You should also learn how to push your code to the server, and clone other’s code.

Reviewing other’s code is helpful for yourself, and contributing to other open-source projects also help when you begin to apply for a job.


### Find a Job

The top programmer doesn’t have many opportunities to apply for a job, because the job will find them. Some other great coders don’t need to apply for a job because their open-source projects could make enough money to live. But most programmers need to apply for a job in normal cases.

The candidate needs to pass several rounds before getting the offer. The good news is that software engineers and other IT positions are still in very high demand.

For the interview process, the book: [Cracking The Coding Interview](https://amzn.to/2ZXDjDv) will save you much time, it is a very detail guide for applying for jobs as a programmer.

As for the resume, owning or contributions to great open-source projects will be a spot, some Kernel programmers will just list the patch number in resume.

**The referral is an effective channel** to apply for a job because many companies trust employee’s recommendations and pay some bonuses for a successful referral.

### Jump and expand yourself

During the starting years of your career, if you don’t get improving on yourself on working hours, just jump out and try to find a new job.

Your time is valuable, especially in your early career years, don’t hesitate.

> Always be the worst guy in every band you’re in. – so you can learn. The people around you affect your performance. Choose your crowd wisely. –Chad Fowler

When you got offers from big companies and small companies, [consider it seriously](https://lifehacker.com/is-it-better-to-work-for-a-large-or-small-company-496172191). Remember to find the company which fits your target in a long time, don’t consider the salary only, your career is a very long journey. Normally, the small company implies high risks and also potential high rewards.

## One more thing

Keep healthy is ultimately important, some aged programmers have serious pains after long years sitting. Finger injuries, heart disease, and fat are mainly heathy issues for programmers.

Keep a good lifestyle is the first advice for young programmers, keep enough time for exercise and rest. Coding is not the whole life, find a hobby and enjoy your spare time.


## More resources:

1. [Learn from Source Code (an Effective Way to Grow for Beginners)](https://www.coderscat.com/learn-from-source-code)
2. [How to learn all programming languages, YES! ALL!](https://www.coderscat.com/learn-programming-languages)
3. [The Best CS Books](https://www.coderscat.com/best-cs-books)