This year marks my fifth year as a software engineer. Regarding the following things, I often think: if only I had known them when I first entered this field, I could have avoided many detours and achieved more than I have now. Alas, the past cannot be chased, so here I want to share them with everyone, especially newcomers just entering this field. Please carefully consider whether you understand these 8 things.
1. Good communication skills.
Engineering management is a team activity, even if sometimes the team is just you alone. With so many things needing mutual understanding at every moment, communication becomes the biggest problem. 90% of engineering management is communication. For example, we need to explain what a bug is, how to diagnose it effectively, and how to fully express our complex ideas to others. Communication is the most critical factor in project success. Ineffective communication only leads to a huge waste of time and effort.
2. Foundations of computer science.
To become an excellent programmer, a foundation in computer science is essential. But honestly, computer science and computer engineering are really two different things. However, to become an excellent engineer, you need the curiosity to investigate computer development trends and how computers work, including a deep understanding of potential pitfalls in new trends and some alternative solutions. That gives you the capital to communicate with other engineers. Algorithms, except in interviews, are not very useful in other situations. I mean, in most cases, having class libraries is enough. But that doesn't mean you can completely ignore data structures and algorithms. Furthermore, reasoning about code and optimization are still important, especially when scaling.
3. Learn to read code.
The importance of writing code is known to all without my saying, but few have probably heard about reading code. This might be one of the most valuable skills to master. As for this one, so far, I am still in the process of striving to reach the goal. Speaking of which, if you have the ability to see the essence of things through complex phenomena, then you are not far from becoming an excellent engineer.
4. Learn UNIX and Linux.
These two are almost everywhere, so they are well worth learning. They allow us to quickly manipulate computers via the command line. If needed, you can also install Linux packages and set up servers. You can also quickly edit using vi (that's right, vi. I myself am an Emacs user). Another important point is that UNIX utilities can save significant time. In addition, we need to know how to use sed, grep, find, pipes, and write code using basic bash/zsh.
5. Understand text editors.
Software engineers are masters of text manipulation. Even Emacs and vi, which are now regarded as antiques, are still editors that engineers need to learn. You should be proficient in at least one of the two, because they have different philosophies, and understanding one of them will not only let you write code faster, but also not be confined to any particular environment. Don't just use an editor; make it submit to you, automate it, match your own keybindings, and write scripts that solve problems.
6. Automation mindset.
Because copy/paste is a form of automation, we can definitely write scripts to do it. Writing scripts casually will make programming more interesting. Maybe you can finish a day of tedious work in just 30 minutes. Automation can streamline processes and also let us learn a lot of new things.
7. Understand version control.
I like to use git for everything. Unfortunately, I had no idea about such a great idea when I was in school; how embarrassing. Version control allows us to boldly experiment with code, because if something doesn't work, you can just restore it to its original state or undo the input. It's so easy!
8. Work on a small project of your own.
This is very good training, even though sometimes you may feel exhausted and want to give up. Because our products are abstract, unlike building a bridge where you can see a tangible finished product, we can only keep coding, which is utterly boring. Don't you want to focus on a project you like, treat it like your own child, do your best, and in the process learn new knowledge and learn to use tools—an opportunity you would never have at work? The answer is, of course, YES.
I myself don't manage to do every point above every time, but I still wish that when I first stepped into this field, someone had told me these heartfelt words. I would be truly grateful.
Translation link: http://www.codeceo.com/article/8-things-new-programmer-know.html