Is It Hard to Become a Software Developer?

I’ve had many interesting conversations with people about how it is hard to become a developer and how it’s almost impossible to get a job without a computer science degree. It’s a really interesting topic for me and I think the same may be true for many people, so I decided to write about it a bit more.

First of all, let’s answer for the most important question: is it hard to become a programmer without a computer science degree? Yes and no. It’s not as hard as many people think. Yes, it’s difficult, but if you spend some time learning programming and do it regularly, you’ll learn everything that is needed to become a developer and you’ll get your first job without a computer science degree!

Studies

Let’s talk about the studies. It’s a common belief that during the course of your studies, you’ll learn everything you need to know. Well, that’s not true. Let’s start from the beginning and home in on the real details.

To graduate, it took me five years (3.5 years/7 semesters for BSc, and 1.5 years/3 semesters for MSc). Of course, it could take longer if you don’t pass some exams and need to retake them. Considering that you have 5 years to learn something, imagine how much time that is!

I had a lot of different subjects, some that were connected with computer science and some that weren’t. If I remember correctly, I had eight or nine different mathematical subjects, two different physics, P.E., and some other, more redundant subjects (in my opinion).

On the positive side, during those 5 years, I took a lot of programming in various languages like C, C++, Java, Python, MATLAB, PHP, JavaScript, and HTML & CSS. There were two different subjects about databases, some about algorithms, data structures, compilators, software engineering, basics of computer science, and networking.

You may think all of this was really useful and helpful but add into the equation that I started working part-time as a Ruby Developer between my second and third year (4th and 5th semester).

Before I started, I needed to know something about databases, data structures, algorithms, git, HTML, CSS, JavaScript and Ruby. Unfortunately, most of those things I didn’t learn until my 5th semester or later, if at all, so I needed to learn everything on my own. This wasn’t so easy, especially when you need to learn several different subjects, study for exams, work on different projects, and have a social life on top of that.

I started learning about Ruby (which wasn’t included in my studies), JavaScript and databases. I knew some of the basics of HTML and CSS which was at some point helpful. I was studying at night, sleeping for periods of 3-4 hours… This was the decision I made, and I had a huge motivation to learn something different from what they teach you in university.

In fact, I didn’t have these technologies in my studies at the time – so in this case, the studies were not helpful at all. Moreover, I was spending more time learning something different. In fact, the situation would play out the same had I chosen an entirely different subject for my studies; learning in my own time and working part-time as a developer.

Is it possible to become a developer without a degree?

There are a lot of ways you can learn computer science and programming; the crucial thing is planning and motivation.

Don’t think that it’ll be easy, I’ll say it again: you must be consistent and persistent, even if you feel that you can’t do it. Everything at the beginning is hard, trust me. Even now, when I’m learning something new in the world of IT, at the beginning it’s not so straightforward.

You must be patient and spend a lot of your free time on it. You won’t learn it in one or two weeks or even months. It’s like when you learn a new language, you won’t learn Spanish in two months, even if you spend most of your day on it and you have a person with whom you can practice.

You should prepare your plan and think about how much time you can feasibly spend on it. Do you have a free two or three hours a day? Can you dedicate every day? Regularity is the most important thing. It’s better to learn every day for two hours, than spending one whole day once a week. That whole day will not always be available to you.

Bootcamps

I noticed that a lot of people who want to change their profession or learn programming attend boot camps. What are boot camps? A boot camp is something like a crash course, they usually last two or three months (8 hours a day, 5 days a week) and you learn how to code with the help of teachers.

Let’s take a Ruby boot camp as an example. They teach you how to code in Ruby and how to use databases. You’re doing your first real project in a team and later thanks to this, you have a really good grasp of the basics and can find your first job.

Well, in my opinion, it’s a really good initiative but there are two small problems for me. Not everyone is able to pay a lot of money for a course like that (around $5000 or more), and not everyone can take a break of three months to take part.

Another thing is that you can acquire all of this knowledge on your own. You won’t have a teacher but there are a lot of courses which cost just $20/monthly. I’m pretty sure that upon completion, you’ll probably have as pretty solid basic understanding as after a boot camp. Moreover, you’ll be able to learn whenever you want.

Just to clarify, I’m not saying that you shouldn’t attend a boot camp, if you have a spare $5000 and free months, but there are other, cheaper, and just as effective options for learning alone.

Software Engineering

A programming language is not everything; it’s just the beginning. You also need to know how databases work, how to use a terminal, how to test and deploy an application to a server, how to configure a server (if you don’t want to use a ready-built solution), how to use Git (a version-control system for tracking changes in computer files) and more.

On the other hand, we’re not talking about applying or a Software Engineer role at Google or Amazon, so really detailed knowledge about computer science won’t be required in your job at all. Moreover, it won’t be required before you start learning, or even when you’re looking for your job.

As a web developer, you’re not creating another operating system or programming language. We use tools which have been invented by someone else. At the beginning, you don’t need to know anything about how a system memory works, what a thread is and so on. You just need to learn some basics – bonus if you already know them – about algorithms, data structures, variables, functions, conditions etc.

University degree

Another important thing is to mention about a computer science degree: A lot of people think that without one you can’t find a job. Well, everything depends on a company’s policies and requirements.

Think about it for a second: is it better to hire a really knowledgeable, experienced person without an IT degree, or an IT graduate without any specific knowledge, which seems to be an average person? I think that you can answer this question by yourself.

I remember when I was recruiting people here at Nopio, I never paid much attention to whether or not a candidate held an IT degree. For me, the most important thing was if someone knew how to code and what they knew.

It’s not so hard to prove that you’re right for the job. You can engage in some really cool projects by yourself, mention them in your CV and link to a source code. Remember that a degree doesn’t write your code, your skills do it. It’s also not important how and where you get them!

Resources

So where to find this resources? Here are a lot of free online courses, eBooks, tutorials and screencasts to be found everywhere. While you don’t necessarily need to pay for them, of course, there are some really cool paid resources which are worth checking out.

Let’s start with the online courses. I started on codecademy. This was a few years ago when it looked a bit different, and everything was separated into small courses, like PHP, Ruby, SQL etc. Now, there are more courses which are divided into paths, and looks much clearer now. This site is a really good place to start and do your first steps and is mostly free.

Another great resource is codeschool – a page where you can find screencasts in which different lecturers covers various technologies. Everything is really clearly described and there are also some exercises to do after each video. Also, like on codecademy, there are different paths which you can follow (Web, Mobile etc.). Some courses are for free and some you need to subscribe. There is a lot of Ruby, Rails and JavaScript stuff.

Now that we’ve covered mainly Ruby and Rails, let’s look at the tutorials available on the web.

One of the most popular is railstutorial.org. For me personally, it’s one of the best tutorials I have ever read. Everything is so detailed and the author shows good code practices.

Other great resources include railscasts and gorails. Here, almost every part of a Rails application is covered and described in a screencast. Authors show how to write a feature or how to solve a problem using ready-made libraries or how to build them from scratch.

If you like to read articles, RubyWeekly might be for you. It’s a newsletter which finds and presents to you the most interesting articles from the past week about Ruby and Rails. Thanks to this, I discovered a lot of cool blogs and authors; it’s worth seeing if it could be really useful for you!

For other useful information, you can also check out official documentation. They describe how a specific part of a language or framework works. For those just beginning, this is something you could come back to later, as it is more advanced stuff.

If you’re looking for eBooks, almost everything you can find is here on the it-ebooks page. It offers free and full IT eBooks which you can read online or download to your hard disk. It’s free for both private and personal use.

I noticed that a lot of IT companies also have technology blogs, where they write about various programming languages, problems and interesting things. Even here, at Nopio we do it; check it out here. If you’re interested in learning Ruby, Rails or any different technology, try Googling these companies, with phrases like: ruby agency, ruby development house, there will likely be plenty to find.

How should I study?

The best way is to learn by doing. Reading too many books or articles will result in you forgetting what you’ve read after a while. Instead, when you’ve learned something, don’t copy the code, try to type it on your own and think about what’s going on there.

If you’re completely new to web development, start with HTML and CSS. Every page uses these technologies. Moreover, HTML and CSS are not so complicated and are fundamental for web pages.

When you have fully understood what HTML and CSS are, you can try to build a small webpage on your own, or even copy an existing one and build it from scratch. This is called learning by doing. Even if you don’t know how to do something, try to search for it.

One of the most important things is to know how and where to search for information, solutions or almost anything else. If you don’t know how to build a web form, try searching: how to build a web form using HTML. You’re likely to find it within the first five search results you come across.

After you complete your first project and you feel comfortable with HTML and CSS, try to build something really simple in JavaScript. Try to do it using codecademy or codeschool. Again, it’s a good idea to start small.

You will probably notice that you’ve missed something like changes history – to check what you modified, how it looked a few days ago. At this point, you should check how to use git – a version-control system for tracking changes in computer files. This tool tracks changes your files and is able to show the differences between all changes. Really, I can’t imagine a project without Git. It would be almost impossible to track changes and see what has been changed, when and by who.

After discovering Git, start learning Ruby and how to write code. Learn what is a variable, class, what is a method and how to write your first script. After that, you can start developing your first web application – follow the railstutorial and later try to create something really easy by yourself. I’m pretty sure that you’ll find something when you’ve completed any codecademy or codeschool courses.

When you start doing web applications, you’ll learn something about databases, how a web request works, or how to deploy an application to a production server – for example Heroku. You’ll find everything you need – all you need is to Google a valid resource, like: “how can I deploy a Rails application to Heroku?”.

Remember to be consistent; it’s better to spend one hour every day and concentrate on it, rather than spending two hours doing nothing.

Another thing is a computer, you can use your current PC, without the need to buy a Mac or something more powerful, even a 5-year-old computer will be fine at the beginning.

First job

When you feel strong enough in web development, have already created a few personal projects and you know how an HTTP request works, what a controller is, an N+1 query problem, how to use indexes in a database – you can start applying for your first job.

There are a lot of companies which look for beginners and interns. It’s not true that you can’t get a job as a beginner. You just need to search well. Another thing is that a lot of companies start internship programs during summer. This is because students have more time to work since there is a break between the summer and winter semester.

Don’t expect to get a job after your very first interview. For every job opening, there are probably around twenty or more candidates. Be realistic and give yourself plenty of time. Use these interviews to see what is the most difficult for you, what you should improve upon and where you have a problem.

Remember, the world is yours! Just be patient and you’ll eventually learn how to code and find your first job. Good luck!