Why you want to be a programmer
The software is eating the world, programming will become the future required skills for many people. This post will give you some tips for the journey of being a programmer, especially from the sides of mindset and learning strategy.
Master programming costs much of time, Peter Norvig said ten years maybe enough, keep patience and let’s get started.
The mental model
Everyone can code, several years old boy could also produce some code which runnable. Being a good programmer requires much time and energy to improve skills, also requires you have the correct mindset, I summarized it as below:
“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.
John Carmack, the creator of Doom series games, was still trying to learn a new programming language 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 Interest and Passion
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.
Programming is creating a whole new world, in some sense. 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.
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’s 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 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.
“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 a big project or if you working for some company, 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?
I also inspired by afternerd.com to start this site.
Keep standards high
Normally, writing code which is workable will cost not so much try, sometimes you find some code snippets from the Internet, and paste into 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.
Do you know what’s the mean of your every line of code? 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.
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.
The Feynman Technique 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 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, like painting and dance, like 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, especially for some practical usage, so you understand writing code is to solve the problems from the real world.
Master the basic
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.
Here are the subjects you must master them:
- Data structure and algorithms
- Operation system
- Compiler and programming languages
- Computer Networking
Go to get a CS degree in college, 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. You can almost find all the resources for studying, there are so many open-source projects, so many tutorials, and the open courses are also helpful.
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 until you find it. Don’t settle.
Your target is the one in which you enjoy yourself and satisfied mostly. 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. By the way, Structure and Interpretation of Computer Programs(SICP) is a book every real programmer should have a try.
Create something and learn from others
Create a Github account if you didn’t have one, run!
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 contribution to big projects also helps 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 others don’t need to apply for a job because their open-source projects become their main job which could make enough money.
But most programmers need to apply for a job, usually, 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 will save you much time, it is a very detail guide for applying for jobs as a programmer. As for the resume, contributions to open source projects will be a spot, some kernel programmers will just list the patch number in resume.
The referral is an effective way to apply for a job because many companies trust employees’ friends 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 work time, just jump out and try to find a new job. Your time is valuable, don’t hesitate.
When you got offers from big companies and small companies, consider it seriously. 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.