“I want to become a programmer, and I have a few questions…” — IT industry is very lucrative right now, and a lot of people consider changing their occupation. I have been doing programming for a while, and people sometimes ask me for advice on starting up their careers in IT. A lot of these questions are similar, so I thought, why don’t I put them on my blog.
Disclaimer: everything below is nothing more than my opinion, based on my own experience and may diverge from common sense.
Should I do it or not?
My deep belief is that you should love (or at least like) what you do, no matter what it is. The best way to figure out if you like programming or not is to give it a shot. Try learning something simple and see if it amuses you. It is a good sign if you get excited when you type in a few lines of code and a computer (a piece of rock, metal, and plastic) starts doing what you told it to do. Small things such as beeping, blinking or printing “Hello World!” should be perceived as a little wonder. See if after learning the basics, you naturally want to learn more. Or, if you are already going through a training program, see if you spend extra time learning more material or trying out more things on your own, without any incentive.
Programmer’s job is unrewarding and dull most of the time, professional burnout is real. Natural curiosity in the subject allows you to work on problems longer, without asking yourself why you are doing that. Working on problems longer allows you solve them, get the reward and be happy.
So, if you tried programming and could not find any passion — better do not do it at all, it will be hard to progress, and you will have very little satisfaction from work. Otherwise, I do not see a reason not to become a techie.
Do I need a Computer Science degree?
It is a controversial question. Generally speaking, all you need is the right mindset and some skills, both you can acquire by yourself. However, if I had an option of getting a proper education or going straight to work, I would choose an education. It is true that you will not get much of a hands-on experience and will not be able to put a bunch of fancy technologies on your resume after 4–5 years of college. However, having to solve mathematical and algorithmic puzzles for a continuous period, drastically affects the way you think and forms that “techy mindset” in your brain. Knowing the basics and being able to explain anything, that computer does, in the tiniest details expands your horizons and will keep helping you every day throughout your career. Also, do not underestimate the power of the network, you acquire in college. Often it is the most powerful network people have in their lives. Many current students are good at telling you how useless is their education but most will change their opinion in a few years after starting a professional career. I am one of them.
So, no, you do not need a CS degree to become a programmer and find your first job. But if you have an opportunity to get one — just go and get it, it will not be a waste of time.
What about online courses, coding boot camps, crash courses, etc.?
It depends. The demand for an IT education is high, and there is no shortage of supply. A lot of these things are very young and created with a single goal of making their owner rich. So, the quality of education there may suffer. Do not expect to find there any information that is not available online for free. Also, do not expect to acquire an in-depth fundamental knowledge — three months can not fit what barely fits in four years.
A few things that I would expect are:
- Get acquainted with the IT and find an “entry point” when you are completely new to it and have no idea where to start.
- Get some guidance on what to read and what to do.
- Surround yourself with people who have the same problem (getting into IT).
- Get some introductions to help you land your first job (do not expect too much).
- Use it as a forcing function until you figure out whether you like IT or not and be ready for self-education.
In general, self-education is the most powerful thing in IT, so expect to get 90% of knowledge by yourself, by reading the internet, books, and working on projects. Short time programs can be helpful, but be careful. Do your research before investing time and money, try to find alumni on LinkedIn and ask their honest opinion.
What should I do for my self-education?
There are so many things you can do by yourself, so let me share some suggestions.
- Read the books. If you have time for thick books, try reading some classics like Introduction to Algorithms, or Computer Networks By Andrew S. Tanenbaum or The C++ Programming Language (even if you are not going to do C++). Good books are usually well structured and give a comprehensive knowledge of the subject. Try to avoid books about specific technologies and libraries. They typically do not focus on fundamental principles, get outdated quickly and often just re-phrase the documentation.
- Try coding contests like Topcoder, Codeforces or Kaggle. If you do it long enough, you will improve your algorithmic thinking, ability to write a bug-free code fast and get a ton of debugging experience. The competitive component will keep you motivated and add a drop of adrenaline if you participate in big, worldwide contests.
- Come up with real-world ideas for practice (they do not have to be big). It is much more fun to work on something that people can use, rather than a templated “blog site” or a “TODO list” assignment from a book. Ideally, plan not just to finish the coding part but also launch the project and attract some users. You will get not only a lot of satisfaction but also a real thing to put on your resume. Check out ProductHunt to get the idea of what people are building (and also to launch your project when it is ready ;) ).
- There are many of high-quality lecture series from top universities on YouTube. You get for free part of what Stanford or Harvard students pay big money for, so watch them.
Programming methodology from Stanford
Machine Learning from Stanford
Introduction to algorithms from MIT
- Read blogs and news to explore the industry. Hacker News, Tech Crunch, Hacker Noon.
- Go to meetups to meet new people and learn from them, although not too often.
So, what should be my first milestone?
If you are in college — finish your education, otherwise get into the industry ASAP. That, in most cases, means find an internship. IT world looks much different from inside the company, and you want to see it from there. You want to surround yourself with more experienced people, get mentorship and start working on real-life challenges. All three problems are best solved by joining a real company.
What about freelancing?
Freelancing is a very special thing, and I do not think it is good for starting, although I myself started from doing some simple HTML work remotely. Freelancing may work financially well if you live in a country with a low cost of living and can work for customers from the U.S. or Europe. However, freelancers are expected to be already experienced and solve problems on their own; no one is going to mentor you. Internships, on the other hand, are made to help beginners to get started in the industry, and companies find prospective employees at the early stage. So, find a job in the office for now and save freelancing for later, when you have a ton of experience, and everyone is willing to pay for it.
I want to do an AI but I could only find a QA job.
Do not worry, if you like what the company does in general — just join it. Remember, most of the programmer’s work is boring, and only you can make it fun. Every area is full of challenges that you can solve and contribute to the overall success. It is just safer for companies to assign interns to less critical (and often less fancy) projects, as they are typically less reliable. If someone hires interns for core projects, chances are they can not hire anyone more experienced. So, you will not be able to learn much from other people in such a company.
Should I learn the backend, frontend or mobile first?
Just focus on the principles and be prepared to do anything. As an intern, no one expects you to know any particular library, framework or area. Everyone, however, expects you to pick things up fast. Understanding fundamentals will help you a lot with that.
The best approach would be to pick an educational project first. Then figure out what technologies will be required. Then learn them and implement. If you do not have a project in mind, just pick a programming language. I would prefer a low-level language like C or C++ because it gives you much more exposure to how the computer works.
What should I put on my resume?
Do not put too much, fit it on one page or less. Do not put every technology that you have ever touched, pick one or two that you spent the most time with. The person, doing pre-screening, will only look at your resume for 10–15 seconds, so show him the most important things about you. Do not put words like “hardworking,” “passionate” and “self-learner,” they just occupy space. In the absence of previous work experience, personal projects will help you a lot, especially LIVE ones. If there is nothing else to brag about, tell them about a few areas where you want to grow and explain why did you pick them.
What will they ask at the interview?
The interview style varies, but most companies use typical algorithmic tasks like sorting, list operations, string operations, numerical puzzles, etc. This book will give you a good idea about interviews in general.
Most of the interviewers try to judge your ability to communicate and act confidently in an unfamiliar situation. It does not matter that much whether you solved the task or not. The most important part is how quickly you understood the question and what is challenging in it. How well you analyzed limits and corner cases, and how well you explained your approach to solving the problem. If you have done all that but still do not have a solution — do not worry, the interviewer will give it to you through hints or directly. Even if you did not solve anything in time but were communicating well, you still have a good chance of being hired. Sometimes you may be asked to finish the task at home and send the solution by email.
So, my tip is to practice solving interview tasks but more importantly, practice communicating your thoughts. Try finding a programmer friend and do some practice interviews with him. Try explaining a few algorithms to someone, who knows less than you.
Where should I look for an internship?
Use your network, ask friends who work in IT, personal references work best. Use AngelList and LinkedIn (I find AngelList better for job seeking). Join chats and forums related to the technologies you use, most of them have job boards. Go to the job fair in your university. The direct path through filling out an application is typically the longest one. Recruiters in good companies have to scan through dozens of resumes every day, and it is hard for them to select good ones blindly. They prefer to rely on personal references or find good candidates through other, more reliable channels. So, keep sending applications, it is free, but always look for a way around. Ideally, make the recruiter come knocking on your door. Winning a prestigious contest or building something that people like is a good way of attracting attention.
I hope my post helps someone find a first job or a new passion. I am sure, people reading this have their own questions and opinions, so feel free to leave them in the comments. I will pick the best ones and add to the tail of this post. Good luck!