Recently, some friends ask me about how to prepare for the job hunting. Due to their early stage down to their career seeking path, I feel many of my personal experience may help them, and the readers as well. Of course, this article is suitable for those who are looking for
software engineer related work.
The first thing I always tell my friends is the interest. You should have an interest in technology, especially for computer science technology. With the interest, your curiosity helps you find the attractive information, projects and codes. For instance, I always feel passionate when I read something about distributed system’s performance, data mining and machine learning stuff. The more I read, the more I love them. That’s my
secrete to accumulate knowledge. If you do not like the technology, it is just pain when you read about things about them. So find something you are interested in, then keep reading stuffs related to them. TechCrunch is a good starting point, giving you a broad view of things going on in the technology world. It takes some time, but you will have a brilliant talk with your interviewers if they ask “what is your way to keep you updated on technology?”
Second, I value every course project at school a lot. In my opinion, this is one of the best opportunity to help you exercise many skills you have learned. For example, object oriented programming. I do not know how many of you will use OOP to design and develop your course project, but it helps a lot when you do it. Not only for this project, but practice your OO design as well. If you go to CareerCup, you will see many OO design interview problems. Then you can be proud and give your surprising answers.
Another reason I pay attention to my course project is that I often take this chance to do my best programming and performance optimization. In my cloud computing course last semester, I was asked to develop a
cloud-cache which could be used to solve NP-hard problem in a cloud computing fashion. My first version was so much terrible, I could not even understand my code again. Then I re-coded it by giving good class design, variable names, and comments. Then it was much better, even though the performance issue appeared. My program was slow, then I integrated my statistics module into the code, then I figured out the way I designed the distributed computing is low efficient. Later, I came up with a better idea through pipelines, and revised the code. Finally, my program’s performance made me happy. After this process, do you think you learn NOTHING from your course project? Or will you be worried to put details about this project in your resume?
Third, I would suggest you to use some version control system, like Git, to manage your code from the very beginning. Github is a cool place you can start building your portfolio when you are still in school. Put your project there, with good quality of code, will help you a lot to convince people who has a little interest in your background. Besides, your frequent check-ins shows your passion is not just a simply word.
Fourth, I think you should have one programming language among C/C++, JAVA and Python that you are very familiar with. By saying
familiar, I mean you need to know some details of the language. You do not need to know the detail implementation, but you should learn the concepts and methodology. For instance, virtual functions in C++ and how the compiler handle it? If you do not know, just Google it, then you learn. If you accumulate, will you be afraid if the interviewer ask you
Finally, watch an open source project is important. It helps you follow the trends and improve your own coding skills. I am watching Android, Chrome/OS, and Redis, which makes me has a clear idea on what’s going on inside those popular open source project. More importantly, the code base is cool and I learned a lot from them.
Well, it may take one year to gain your skill, but after a year, you have a better shape as a programmer.