Your First Programming Interview - Day One and Beyond
So you have landed your first programming job, nice work! Give yourself a pat on the back, now the fun is about to start...
I can remember googling this exact subject and not really finding any answers that satisfied me. I was unsure of what to expect on my first few weeks and if you know me you know I like to be prepared! So in Part 3 of this series I am going to share with you some of my own personal experiences that hopefully will prepare you somewhat in your amazing new job. I am going to cover:
- You really don't know much
- Thrown in at the deep end
- More professional environment
- Manage deadlines
- Tips and advice
If you are still job hunting, take a look at Part 1 and Part 2 in this series for some tips and advice about finding your first programming position. They cover everything from getting the interview, what to expect and some preparation tips.
You really don't know much
Yes, you read that correctly. So I graduated with a first class Computer Science degree and thought I had a good level of knowledge, I was very wrong! I honestly believe this is a very common occurrence for many graduates entering the working world, so don't worry. Many of my fellow classmates discovered the same thing, however, we can in fact put a positive spin on this situation, you will learn so much every single day from people with years of experience. From day one of my first coding job I was constantly learning new skills from some extremely clever people and enjoying every minute of it. I made plenty of mistakes and more importantly learned from them. Not once did I ever get in trouble for making these mistakes, its all part of the learning process. Heck I made some really stupid mistakes! I had excellent support from the senior developers who would take the time to assist me if I was stuck on a particular problem, they would also show me innovative ways to complete tasks or debug errors. I felt a lot of these techniques and approaches to problems can only be picked up with hands on real world job experience. Now of course sometimes the senior developers are unable to give you constant support and that leads nicely on to the next section in this post.
Thrown in at the deep end
So my first position was with a very small company with only a handle of developers. From day one I was thrown in at the deep end and it was sink or swim. I had to think quickly and attack my given tasks, many times I did not know exactly how to achieve the task but with persistence and of course some help from Google I would get there in the end. Now after a code review I may have to go back and make some changes to improve my work but this is all part of the learning process. As time went on I was completing tasks much faster and to the standard required. Now please don't panic at this approach, I believe this is a good thing. During my three years with the company I learned so much and enhanced many of my skills. My advice would be to break down your tasks into more manageable pieces, ask for help from the senior developers and attack your given task. Don't be afraid to make mistakes, everyone makes mistakes just ensure you learn from them. You can even share your mistakes with the other developers so everyone can learn, or just laugh at you!
In this role I worked in many areas of software development including front end, back end right through to testing and deployment. I felt this gave me great exposure to many different areas of programming. With this exposure I got a much better understanding of what areas of programming I would like to specialise in. I truly believe becoming a specialist in a given area is the way to go. Working in an area you prefer is more enjoyable, you will have greater motivation to enhance those skills and you will be highly valued within your organisation. I am sure if you are working for a larger company the opportunities will be available, don't be afraid to ask your manager and show plenty of enthusiasm to learn and progress.
More professional environment
You will be collaborating with other developers in many aspects of software development. One area that will become a daily activity is source control. Source control is the management of an application where each developer can commit changes. Take a look at GIT and Team Foundation Server (TFS), they are both very popular but also very different ways to manage an application. Even knowing the basics of these source control systems will help you massively when you start your new role. I may create a post about the two systems.
When you code in your own time you have full control over every aspect of the application, this will be different in a professional environment. Now depending on the size and type of company you are working for, will determine how much influence/input you will have. As I mentioned earlier, I worked for a small company and had a say in the direction of both the product and functionality. We only had a handful of developers and had to cover everything from design, planning, implementation and testing. In larger companies you will have many more employees who will specialise in each stage of the process and you will be allocated your work load in a given area. You may or may not have a say in the technologies used, the way the system is designed etc. This is something that really will depend on the company you will be working for but I thought it would be useful to make you aware of.
You are given a task to complete and you project manager turns to you and asks 'How long is this going to take?'. This happened to me and I had no idea whatsoever! The best piece of advice I can give you here is to ask your project manager to give you some time to breakdown the task and this will allow you to give a more accurate estimate. Then go away and do exactly this, breakdown the task into small manageable pieces and this should make it much easier to determine the amount of time you require. Get some help with the steps to achieve the task and always remember to add in some contingency just in case you encounter some hurdles along the way. Estimating tasks will become easier with experience, but by following this advice there is no reason you cannot keep your project manager happy and off you back!
Now you probably wont be thrown straight into a meeting with a client, but more likely be invited along to see how things are run. Getting to know the process and the clients themselves is something I really enjoy and I think you will find most clients are very fair and friendly folks. Of course there will always be situations where clients are not happy for whatever reason, but just be professional at all times, understand what the issues is and do your best to resolve this.
Tips and Advice
Something you should always be looking at is the source code of the application. Understand as much as possible, ask questions about why it has been coded this way, what a piece of code does and anything else to fully grasp the application. By knowing this information will help you fix bugs, add new functionality and generally be a better programmer.
A benefit you will have over almost everyone in the company is that you are fresh to that environment. What I mean by this is you can come in and improve existing processes with a clean outlook. Many of the current employees may not have considered a certain approach that you could suggest, now this would not be something I would input on day one but keep track of some of your ideas and make suggestions where you feel appropriate. This shows you are trying to go beyond the role and contribute to your new company, so go for it!
Let's Wrap Up
These are my key points to take away from this post to set you on the right path for your new programming role:
- You probably don't have as much knowledge as you first think, however, you will learn so much every single day from the senior members of the team.
- You will make mistakes, learn from them and share your knowledge.
- Sink or swim, get stuck into your tasks and attack them as best you can. Ask for help when you need to.
- Try to get experience in many different aspects of software development, from this think about about an area you would like to specialise in.
- Be prepared to collaborate with multiple developers and familiarise yourself with source control.
- Breakdown your tasks to give accurate time estimates. Always add in some contingency.
- Be professional with clients at all times and embrace the opportunity to do so.
- Always be learning, analysing the source code and asking questions.
- Note any ideas you may have to improve company processes and make suggestions where appropriate.
So that is it for this post and in fact the series. I really hope you took something from this series, whether you are looking for your first programming job or are about to start one. If you have anything to add please do leave a comment or get in touch.
Until next time, Ben.