This is my first post ever in this site. This do not aim to all kind of the reader, at best, this aim to the Information Technology student, who will become a programmer someday. So if you are already an experienced one, or you find it not useful, just skip it :). But, you’re always welcome to give me feedback to improve this post, or share with us your experience by leaving a comment.

Table of contents

OK, so you are an fresher who’ve just finished your study in college, or even better, you are an high school student, want to write code in a professional manner some day. Following tips may help you:

Practice touch typing

When you become a programmer, most of time you play with text file in the monitor, and mostly about edit them (until the day you grow to higher level, do more reading than writing). Do you want to spend your time turn your head down, looking for the right key to touch? Do you want to disrupting your though by press Backspace, fix a typo just because you miss pressed some keys?

But do programmers mostly spend time thinking, don’t they? Yes, it’s true. Programming is about thinking and solving problems, and the better programmer usually writes less code. But do you trust a driver who don’t know how to control his car. The same with programmer, no one can trust your skill if you couldn’t control your keyboard.

OK, so how fast? That’s not really matter. The thing is: you are just need to be able to know where is the appropriate key you need and move your finger on it, like a habit, without interrupt your thinking. Also, know your keyboard can help you trigger the shortcuts faster, and make your work done faster. This is not only apply for programming, but also all other jobs for which we need a computer.1

Also read this: We Are Typists First, Programmers Second

Learn to manage things

Think about this: the source code is like a house; and each file is like a room that have its special feature; in each room you have lots of thing you need to remember (functions, variables, constants…) which each one have its own special feature contribute to the room feature. You need to understand the house well in order to quickly identify the root cause of bug, or at least know where to start debugging (in such giant house that have thousands of room and have been build for years). With new feature, you will have to build up new room, how could you done that without broken existed room, if you don’t know the house’s structure. That’s why you need to manage your source code well.

The example is about source code. But I don’t literally mean only source code. I mean everything: time, file, data, requirement, money, health… Yes, you have to learn how to manage everything in your life. Your time should be used wisely, so that you can complete your job while keep your personal life balance. Your tasks should be prioritize and adapt to your customer requirements. Your source code need to have a strictly coding convention, so that all of your team member could understand others code (and fix it as well). Your file should also follow a naming convention, so that you could file exactly what you need without searching in your directory.

Managing things is hard. Of cource. There a lot of thing to care about. But trust me, it’s only hard is the beginning. Make it a habit. And when you feel comfortable with it, you will naturally do it right, without mentally effort. If you don’t do it in your young years, then later, you end up messing your life.

This is a big topic, I don’t want to make this post become a book in length. There’re a lot of great posts and article discuss about this topic already, just try search for it.

About the techniques or best practice to chooses, I recommend you give a read for following link:

Naming convention

Semantic versioning

Time

Others

  • On Commit messages: Guide to write a good commit message. You don’t know what is a commit? Learn Git now. Learn about Github also. The sooner you start to use Github (and join the open source community), the faster you improve your development skill.

  • Google style guide for some programming languages.

Understand your tools.

You’re probably using an browser to view this post. Did you know that Alt-D gives focus on the address bar, also select all the text? Did you know that that shortcut work on most of the browser, include Chrome, IE, Firefox, Opera; and it also work on Window Explorer? And did you know there is another shortcut give you the same feature: Ctrl-L 2? Did you ever try hitting ? on Facebook, Twitter, or Github? If not, try it now, you are missing one of the best feature of those sites to make your browsing easier.

Did you ever read the manual of your tools?

Let me tell you my story. I used to be like this: try the tool, disappointed about it, find other tools that may fix my problems, sometime I could find one, sometime I have to accept the fact that nothing work for me out of the box, and I end up mixing a lot of tool just for use each one a little bit. Later, I really that all the feature I need are already supported in one of my tools. It’s just because I were too lazy to learn its features. Sound familiar?

Is it about remember all the shortcuts of the tool? No, the shortcuts is just a one of the topics about how to use your tool effectively. There a lot of thing you need to know in order to understand it:

  • How to tweak your tool to suit your needs?
  • How to tune its performance?
  • How it interacts with other tools in your box?
  • What it really does in the background for each command you give to it?
  • How to improve it, or even better, extend it, become an contributor?

Take Vim3 for an example about different between memorizing all shortcuts with understand the tool. To a non-programmer it’s just a text editor that very hard to use, and a very unfriendly GUI since it work best inside the command line. To a beginner4, it seems too hard to remember every single shortcuts and commands. Things become more headache when you combine them together. But when you learn its concepts, realize that Vim is a editing language , your editing skill with Vim will be improve significantly.

Is great tool/software suppose to work out of the box with minimal effort from the user? Yes, of course, that’s also the first thing to consider when I choose new tool. But there’s not alway the right thing that work out of the box without any disappointment, unless you build it yourself. We have to adapt or customize it, more or less.

You cannot imagine how powerful you are when you mastering your tools. Spend your time to learn your tools, it’s worth.

Mastering your skill

It’s really good if you are interesting with technology world, and never stop learning new thing. But this world is changing rapidly, some technologies are famous these days may become obsolete in just next few next years. Some ideas you hard to believe may become enormous success. You never know. If your interesting is changing day by day, for each technology news you have heard from somewhere, and you just try, without deep dive into that thing, then you will never go beyond the Hello world level.

How could you become success?

Spend your time to master a small subset of your interesting. Become an expert in that kind of technology. It would become obsolete some day. But your experience stay still, and with that strong foundation, moving on to another technology is easy.

Remmeber: master them one by one. You won’t have enough time to master everything. And you cannot keep concentrate on each single thing also. You will messing around, never become an expert.

Well, your job may not easy, deadline is pushing up so that you cannot reseach the best practice, learn to use the tool correctly. What worse? Your company’s project may not be long-term, after it, you have to work on another project, different kind of technologies for that you’re completely new. You have to learn them from zero again.

How to deal with that case? I’m sorry I have not found any correct answer5. I could only give you 2 ideas. The First: leave that company, find another one with have long term project that work with the technology you love. I would say that the best idea, except the part that your need to be really strong on that technology to be able to get such kind of job. The Second: make the best of your for your project, write test, document everything for make future maintenance easier, and, use your free time to improve your skill on the technology you love, working on your pet project, for fun, for money, for whatever you want, but use your time wisely to master your skill.

Play as a team member

How many skill needed to build a good web app6. Let’s make a simple list. We need to know HTML, CSS, JS to build the interface. We need to know a server side technology. We also need to a choose the right database for our application. But that not enough, to make the web attractive, we need design skill (and the skill of using Photoshop, Illustrator, maybe). To keep user love our web app, we need a good UX7. Is that enough? No, we need QC skill to ensure the quality of our application, marketing skill to make it become popular and gain more users… No one could do it alone (unless they are so lucky). We need to work as a team.

When you are in a team, your code is not belong to only you. Your bugs won’t only affect you, your mistake won’t only come back to you. They affect the whole team. The same thing happend with other members in your team (assume that you have one). So, be responsible, be professional, and always try your best to produce good work.

Always learn from the more experienced people in your team. They may not know the best practice, but they know what are the wrong ways. At least, you could never facing the same issues they have faced before.

Always help less experienced in your free time, and help with sincerity. The sooner their become experienced, the less bugs they produce (and if they couldn’t fix, then you will have to do that).

If you already have a team, and you love them. Great. Keep the good work. If you don’t, build one.

Why post this?

Because I wish I could know these tips before, so that I could better than myself now. I were spend time playing game while I were being at college, just because I didn’t play them before, and I thought that in the future, when I go to work, I never have time to play them. So silly. Now when I realize that all the gaming stuff is useless for my dream, time had gone, never came back.

If you are younger than 18 when you read it, and you just begining learn programming, you have at least 2 years more than me for preparing before jump to the industry8. You have great chance to become a better programmer than me. Learn my tips, learn other people’s tips. Start practice now. Become a better programmer than us.

Good luck!


  1. For your information, my speed is about 50 WPM when typing normal English (around 70 WPM for Vietnamese, using VNI input method). But when programming, it’s really different, because sometime your IDE can generate boilerplate code for you, sometime, you have to write it all, from scratch. So, don’t bother with such question like: How fast can a programmer type? You don’t really need to beat world typing record. Just as fast as type without need to look in the keyboard. 

  2. Actually, the two shortcut not the same. On some Unix file manager, Ctrl-L gives focus to address bar, whileAlt-D behavior is depend on the software. For example: it do nothing on Nautilus/Ubuntu, but make a bookmark for your folder in Mac OS. Since I mostly use Window, I prefer Alt-D because it just need one hand to press. 

  3. If you don’t know about Vim, it’s a 20 years text editor, an advance tool for programmer and is installed as default in most Linux distro. Learning Vim will make you think again about effective typing. Read more about Vim 

  4. Honestly, I’m still a beginner in Vim. Too many things to learn in that little 10 MB software, but it’s never get boring. 

  5. That’s also my story. And I’m going with the Second Idea. Until I become strong enough to switch to First Idea. 

  6. Web site vs web app? See this answer on Stackoverflow. 

  7. UX is stand for User Experience. What is UX different with UI? My short and dump answer: UI is the expression: That’s what user see on their screen, the layout, the color, the font family…. UX is the interaction. How the users use our app? How they feel? Is our app easier to use, is it matche what their need. Want a longer answer, see this post (from a more experience writer, not mine). 

  8. I’m not sure about other countries, with different educations. So I speak for a normal Vietnamese student like me.