According to our own experience and an informal survey with our friends, some of the best programmers you can find in the web, we have compiled the next 5 highly recommended skills you should have to be a top programmer, or at least you should start working in getting them
Number 1. Regular expressions
Surprisingly, we have found that a lot of university students are not really knowledgeable about regular expressions that pro programmers use all the time and some of them have even built entire databases out of regular expressions. Regular expressions can accomplish so much because it is a way to do pattern matching on the text. The most obvious usage is for searching large codebases for certain pieces of text.
Using tools like Grep or some other code editors like Sublime, Visual Studio Code, or Regex are often used for searching across large codebases, doing search and replaces, refactoring code or they can even be as code checks to prohibit committing certain strings of text, certain styles of coding.
Using regular expressions you can scrape websites, parse per data, create an entire web application where you read the data and validate the user input, store the data in a certain format, and then read that format back… you can do all of that with regular expressions. You do not even need a database, every single we have worked with has depended heavily on regular expressions. If you are not feeling familiar with them, we recommend you start digging inside this subject.
Number 2. SQL
SQL is a database language for querying database tables, creating tables, editing them, reading them, and you might be thinking to yourself “well, I am not a database engineer” but what you might be ignoring it’s its capacity for data metrics, these are very important for any engineer in order to launch any feature.
You need to be able to check out the data, analyze it, logging is very important to measure the impact that you have. It’s clear for us, you don’t just ship a feature, you ship the feature and then you need to say “Well, it increased over our application usage time by two percent, it dropped some other metrics by one but I recover that in some other way”, and SQL is essential for being able to query your data logging metrics dashboards and be able to figure out what data is there.
These days in most companies, in order to launch any feature, you need to have the metrics, the data to back your decisions up, and to obtain those metrics you need SQL. That is why it is very important for any engineer to at least be able to write a few standard SQL queries.
Number 3. Debugging skills
All too often we see engineer that knows how to code but they don’t know how to debug and they don’t pay much attention to it, they can’t figure out where bugs are, it’s like they don’t have any problem-solving ability even though they have acceptable algorithm skills. Debugging is the art of problem-solving.
Being able to quickly identify where in the code a bug might be, because for the majority of engineers, being completely honest with you, most of your task is going to involve fixing small bugs, as simple as that: There is a bug, figure out where it is and then fix it. The problem is that many times the bugs can be obscure, kind of strange, or hard to track down.
The ability to debug is going to be very important because if, for example, you are working on mobile apps you are going to want to be able to use the debugger GDB so you can step through the program, create breakpoints, maybe even check out the source control, check out the versions history of a file and see where it changed at what version and where the issue may have first cropped up.
Oftentimes, an engineer’s value is estimated not because they know some algorithm better than some others, it is simply because they know how to debug a program more accurately and precisely so it is very important to practice about analytical and problem-solving skills
Number 4. Scripting tooling
We don’t intend to become controversial but one point that separates the truly great programmers from the mediocre ones is scripting tooling, being able to create tools for yourself. The best programmers are writing their own tools, if you are not writing your own tools to speed up your process, your workflow, you are just going to be limited.
What really makes software engineers highly productive, the difference between an engineer who is outputting 1x code versus 2x code or 5x or 10x code is the tooling and usually, these tools are going to be written in a language like Python or PHP, Ruby or Rails and these scripts can be used to help expedite your overall workflow.
For example, for Cobra factors, you may be writing a script that can analyze a repository of code and override, detect unused files, maybe buggy lines of code, and so on. You can always write our own script wrappers on top of version control so it’s not necessary to always use Git or Mercurial, for version control you might prefer using your own system and it is always useful to have your tools to work on your own workflow.
This maybe involves having some familiarity with Bash, Linux, and a language like Python or something alike.
Number 5. Feed the community, not only individuals
Let’s say you go to your co-worker James and you say something like “Hey James, how is it going? are you feeling ok buddy? do you want to go grab a beer? is there any way I can cheer you up friend?” and so on. All of that is not really providing much value for anybody and James may even decline your invitation to go our because he is a busy guy focused on creating value for the company. Let’s say that the standard social skills are not really useful, but you still need some sort of social communication, it is still very important to share.
These skills are more about communicating without being necessarily social and this may involve writing emails, creating wiki pages, posting to groups and forums, setting in PowerPoint presentations, create Excel sheets and notes, and properly circulating them.
In some companies, you might send a private message to somebody and that person would explicitly decline to communicate back because this person would say that private messaging does not surface the conversation to anybody else to see. That type of socialization is actually frowned upon and what top programmers really want is a way to preserve history, preserve the knowledge and circulate it with as many people as possible at the proper forums for that, like a wiki or a widespread email message or something like that where many people can see and learn from the conversation.
This may involve that if you have a one-on-one conversation with somebody you will have to find the way to capture the important points of the conversation in a manner in which you write down the notes of the meeting and then you circulate that across your team so that everybody knows what was discussed.
If you want to know more about how to be a top programmer, we also recommend you to learn from the best. Find here an interview with Bill Gates on how to become a top programmer: