sudo build career22 Oct 2014
I am writing this to sort of fill in the blank of the Vietpro Prospect VI event I went to the other day. As with the Prospects before them, there was little to no information about engineering and technology available in the main parts of the event, and people were relying on the networking and CV consulting sessions to find out. Furthermore, I am not quite satisfied with the CV consulting itself because, again, there is a shortage of actual tech people doing it and they do not go into further details than the grammar and the layout of the CV itself. I won't cover every single thing, but just the sort of topics that were mentioned in the event itself.
Just a note here: I am a Software Engineer, so I am going to talk mostly about IT here. I am going to ask a few engineering friends to weigh in their opinion about their areas, too. However, that's another task for another day.
You want to work in IT, what are your choices?
As with any other kind of engineering, the question you should ask is "What problems do I wish to solve?" Engineering is all about solving problems - it could be a problem employers are willing to pay you to solve. Your vision may not even match up with your employers', but in order to build their vision, they have encountered a problem that is appealing to you. For example, if Ocado (where I work) wants to build a kick-ass warehouse. Roughly, they need:
- people to design their warehouse
- IT department to look after IT equipment in the warehouse
- engineering team to install and maintain the machines
- software people coming in, writing code to run the machines
Or some companies actually do not have their own in-house projects but go and do the work for someone else outsources to them. A prime example of this that is familiar with most Vietnamese audience would be FPT Software.
It could also be a problem you want to solve yourself! This gives rise to the Technology entrepreneurial trend that has been sweeping the world in the recent years.
What is a day's work like?
There is no definite answer to this one, since it varies vastly from job to job. However, there is one common thing about all engineering jobs: you build things, and you fix them. May it be a web system, or a giant bridge, or even a nuclear reactor - the approach to each problem might be different, but the gist of the job description is the same! Use these X skills to build an Y thing, then if it breaks, fix it, otherwise improve it.
I have been lucky enough to experience a wide range of software development/engineering jobs even at the start of my brief career so far, and here is my take:
The more critical the job is, the more stressful you are. I have not worked in a bank or a financial institution (I would normally say I chose not to, but that's just cocky :P), but imagine a huge lump of money crushing you to death? Uncool. I, however, have had experience in an exact opposite environment, working as an intern at the Oxford University Computing Services back in the day, and those were the calmest summer days of 2011 (except for trying to cycle through the hordes of tourists in central Oxford, of course).
I have worked in a startup environment (for a company called Esplorio). The problem with it that I hate the most is that since there is no fixed routine, you are granted freedom, a lot of freedom, sometimes too much freedom. You could end up either overwork or underwork if you fail to manage yourself properly. Sometimes, the worst thing happens when inspiration comes at the wrong time of the day (3am in the morning, for instance) - your mind says yes, but your body says no and the next morning you are screwed. But in the end, some people like that kind of freedom, me included.
At Ocado, since I work in a team with set goals and projects with requirements from "the business", more often than not we have a pretty clear idea of what we are going to work on for the day. We'd use something called agile development and build our things in 2-week or 3-week sprints during which we have a set amount of tasks that the team as a whole have decided upon based on business requirements and level of urgency. Of course there are days where I'd spend on supporting business users and other Ocado teams or supporting deployments. All in all, life is more regulated and the balance is just right. I spend the right amount of time at work (about 40-50 hours a week), pay's decent and stable, while still having enough free time to fit in all of my side projects and builds.
What is the job market like for this sort of things?
To put it into perspective, 2 years back, Ocado could not recruit enough people within the UK for their expansion, they went on and built their own development office in Poland. Things are moving fast, there is a need for quality Software Engineers around town. There is also a small premium on our heads because of the shortage, and it is not going away any time soon because technology is going to play a bigger and bigger part of our lives.
Let's just say it is very good. I find it very surprising that there are so few Vietnamese technology professionals here in the UK.
What is the application process like?
The standard steps would be:
- You send your CV in
- Phone Interview or Google Hangout/Teamview session for live coding on the fly
- Go on-site for interviews/assessment day
- More interviews
- Get a call or email for the results
For interviews, people have often talk about brain teasers they brand as "the Google questions" - I can safely say you should expect none of that and more of straightforward coding questions where you are required to code on a whiteboard or with a pen and paper.
In fact, they like coding interviews so much that for companies like Google or Microsoft etc, they are going to hammer you hard with these kinds of things. My interview day in Microsoft HQ in Redmond had 5 of these formal code interviews. Keep calm, think fast, talk slowly, explain your thought process thoroughly logically in steps, and work with the interviewer when you don't understand something or get stuck. If you fail, always ask for feedback to see what went South and how to fix it.
The process is not as nervy in smaller companies in general, but can still be quite the experience. At a bank technology interview, you may be required to do a group discussion and presentation. In some other places, the test is a lot easier than others, but the competition is still so fierce that it may require you to go the extra mile. Sometimes it is just as easy as a "Dude, I have this awesome idea, you want in?" in a more casual startup setting.
What do I need to prepare for a good application?
There are so many things to talk about on this one, but I can certainly tell you that companies like people who 1- are good thinkers with a good grasp on logic and algorithms 2- can ship things and have shipped things 3- are good learners and willing to tackle problems heads-on.
The best place to show number 2 and maybe a bit of number 3 is on your CV and your GitHub account (if available). No 1 and 3 will certainly be reflected on your interview/assessment day performance. I can't just tell you exactly what to do, but here are a few random general tips:
- People like your projects and want to see a good track record of being able to ship products. Coursework counts, your Github commits count, your side projects out of school time and cool open-source projects counts for extra credit, so go all out on that one. Since you have not had much work experience, this is the effective substitute. If you are a 2nd or 3rd year Computer Scientist in this day and age, you should not use this excuse any more:
- I know engineers are not required to look really formal all the time, but don't underdress to your interview. If unsure, just grab a clean shirt.
- Use a "proper" email address. Your uni email address would be the most ideal choice.
- Don't cram your CV with fancy graphics and odd fonts. Keep it simple and straightforward
- Don't list all of your modules you've learnt in the Education part. Most are not going to care :-s Instead, list just some selected ones - if you are the top 5% of the Department in your practicals score in Concurrent Programming, do say it.
- Focus on your strength. For example, you did not do well in some of your exams - fine, shorten the Education bit and focus on the Experience bit. In a couple of years' time, nobody is going to care much about the Education section, but your Experience & Skills are just going to dominate the CV. Long-term win.
- You don't need to write down every single programming languages you have learnt so far, but demonstrate the main stack you have mastered for each of your project. For example, my CV's Work Experience has a part like this:
· June 2011 - Sep 2011:
Where I worked: Mobile Oxford (mOx) team, Oxford University Computing Services (OUCS).
Job title: Summer Intern.
Responsibility: I built a front-end Android client for the Mobile Oxford web portal.
How I did it: Java, Android 2.1 and the mOx's own API.
already looking so much better than having a separate Skills section from the Work Experience section (imagine something like the LinkedIn profile: great for searching on the web page and their search tools, bad for a CV) * If you have built something and it is portable (a smartphone application or an Arduino project etc), don't be afraid to bring it to your interview and talk about it. Got your own website? Put that down on your CV. If you have your own domain for your email address, big plus
My own CV is probably not the best in the world, but not a bad example either so I am just going to leave it here for reference
Well, it is midnight now and I need moar sleep. I hope that what I have written up has helped. If you have questions about things I have not said here, or perhaps you would like me to take a look at your CV, please ping firstname.lastname@example.org :) Always glad to help since I'd love to see more Vietnamese faces in the Tech community here in the UK.