A long time ago...
I studied at Merchant Marine Academy for 6.5 years, 1.5 of which I spent on ships, during what we called “summer practice” between each school year. I graduated, having an International Maritime Diploma of 3rd Mate of the Captain, proving that I can conduct duties in accordance with SOLAS and other International Maritime Regulations and can keep unattended navigation bridge watch on my own – means, being responsible for the safety of crew, ship and cargo – from day one after the graduation - without any additional “onboardings”, “trainings” and so on...
In spite of being a representative of the 3rd generation of seaman in my Family I decided to continue my career in the IT field after the graduation. Since that time I still a bit confused, why IT graduates are so "green" and almost unprepared to challenges of so highly flexible cruel world of IT business?
Something went wrong
Something is wrong with recent IT education.
Graduates are having a good knowledge of one or two programming languages (usually from the C family) and good understanding of object oriented programming concepts. But very few know more than 2 programming languages. Very few can present their own complex projects. Even less have practical knowledge of using git. And almost close to zero are using tests…
Let me tell you something
I don’t want to look like an old fart trying to teach you life, but – if you want a quick career kick, if you want to be distinguished among the rest, if you want to join a really good company because the rate of candidates/position for good companies is high...
... It would be good if you (as a graduate) have not only theoretical knowledge but also good practical hands-on experience with modern technologies and tools.
The magic list
So let me share what I would expect you to know after spending 5 years at university and applying to a Developer position at company like ImaginaryCloud:
- Ubuntu – you need to be able to install, update, manage and monitor recent Ubuntu desktop and server operating systems.
- Terminal – you have to be comfortable working in a terminal, being able to manage files and folders, create bash scripts, setting the prompt to reflect current git branch, being able to connect to a remote server and so on.
- Vim – yes, I’m serious – sometimes you may need to work on a remote server via terminal and vim could be the only available text editor, so you need to know how to manage it.
- Atom or Sublime – whichever you prefer – you have to be comfortable with the tool.
- Git – you need to have experience of managing your projects with git. You need to know what is “Gitflow workflow” and how to use it. You need to know how to update your code when someone else did a change on the main branch. You need to be able to do complex merges, solve merge conflicts and do rollbacks. You need to know how to operate with git from a command line. Why? Because you may need to do it on a remote server via terminal.
- Bitbucket – use it to store your repos. Also use features like “Issue Tracking” and “Wiki”. Issue tracking in Bitbucket is a very simplified version of Jira – well known issue tracking market leader. Working with a project’s wiki will give you an understanding of Markdown (this page is written in it) and it will teach you to use a Wiki to store project related documentation.
- You need to know the difference between “Development”, “Staging” and “Production” Environments. Also you need to know what are environment variables and how to use them in order not to disclose sensitive credentials in your repos.
- Ruby – for sure – you need to develop several of your own command line programs. As an exercise – try to create a tool which will extract information from MS Excel file and store it in PG Database. You may need to use several “rubygems”, manage DB creation and face file access issues – challenging, but it will be a really good exercise.
- Rails – of course – same task as above, but program the tool to upload the file and do the extraction on the server, showing results in a paginated and sortable table. Use Bootstrap for styling and deploy it to Heroku. Also try to send an email from your system, using Mandrill, Sendgrid.
- HTML, CSS, JScript, JQuery, Sass, CoffeeScript, Haml, YAML, JSON, XML – you need to feel comfortable hearing these names, but not only: get your hands dirty with each one of them as we are using them heavily.
- Tests – we have a rule that each new feature has to be at least 90% covered with tests. We are implementing unit tests and also feature tests. In our Rails projects we are using RSpec. We are using Simplecov to check code coverage and Rubocop for code quality checks.
- Our seniors are doing Test Driven Development. Try it after you start feeling comfortable with the tests in general as it is very important to know how to test and what to test before you start TDD.
- Try different DB engines. We use MySQL, PostgreSQL, Mongo. Try to install and use them in one of your projects. Try to do all DB changes on the server side via migrations only - with no direct interaction with DB – challenging, but you will one day appreciate this knowledge.
- Connect your Bitbucket Rails repo to Semaphore with automatic deployment to Heroku. This is not easy, so solving this task will give you a lot of useful experience.
- If you are an iOS developer – same idea – you need to try as many different things as possible, including git – and also tests (I know how painful it can be for iOS, but you need to try it at least, to be able to understand this pain), different devices (responsiveness), use TestFlight and be comfortable with iTunes Connect. Try to make a simple API with Rails and use this API in your iOS App. All our iOS applications are using APIs for data exchange with back-office servers, so this task will not be a useless waste of your time.
The last but not the least
English language. In our communication with the Clients we are mostly using English (even with local ones). And significant part of our Clients are native speakers.
If your English is not good enough, you will not be able to find a good job in IT - that's for sure. But since you are reading this, I'll just assume your English is good. Moving on.
What to expect at you first working day
You will not be thrown into the water at Day 1 of your first job, but you will thoroughly appreciate each minute that you spent studying modern tools and technologies, on top of what you learned from university classes.
After joining us you will be assigned to one of our senior managers and an appropriate development plan will be created for you. Senior manager will mentor you during the first couple of months, making sure you know where is the toilet, following you to lunch and helping you with Team integration. After joining you will have one week of CodeSchool trainings on web technologies. The second week will be spent pair programming with your Colleagues. In the third week you'll join an existing project and it's expected that you won't be a fifth wheel.
If you are targeting a big corporation, the same suggestions apply: try to learn as much as possible. Your extra knowledge and experience will help you to kick-start, gaining advantage relatively to other graduates and may give you a possibility of negotiating a reduction of your probation period. That’s what I did when I joined Siemens :)
That's it! Even if you are not ready, you are at least informed.