Requirements

All of the contents on this blog are 100% free, but to begin, you’re going to need a couple of things if you want to follow along and become a good programmer in general:

1) Desktop Computer or Laptop with Linux/MacOS

“Desktop Computer or Laptop” is pretty basic. A regular computer or old laptop should be more than fine to learn web development.

Sadly you can’t, or at least you shouldn’t program in a phone or tablet. Not having a physical keyboard would be a major inconvenience as you will be using you keyboard to type a lot of different and new characters.


The ”… with Linux/MacOS” part is little bit more trickier. Not including much support for Windows on the blog was a major struggle for me. I felt that I was leaving a lot of people behind because it is said that the estimate percentage of computers in the world using Windows is around 90%.

At the start of this blog, I was writing all the tutorials with the three major operating systems in mind (using a Windows version that I have installed on my laptop). But after some time it became pretty obvious that doing anything programming-related in Windows was just a major inconvenience (to not say “pay in the ass”).

Here is a short excerpt from The Odin Project on this topic:

Why can’t I use Windows? Ok, we get it.. you’re very comfortable with the system you’ve already got running, and chances are, you’re one of those “Computer People” that actually knows how the system works to some degree or another. You’re probably even telling yourself that if anyone can make this stuff work on Windows, it’s you.

Technically it is possible to get most of the needed elements running on Windows, but many of the required scripts and programs were originally written for Linux, or Mac systems with Windows as more of an afterthought. You will quickly run into trouble, with mismatching versions, out-of-date installers and other similar conflicts that you’ll need to resolve manually (and often repeatedly) and you’re likely to find things that used to work breaking unexpectedly, with rather cryptic error messages.

After all of that being said, if you’re a Windows user, not all hope should be lost on you. If you want to follow the tutorials, I’ll still try to offer some support to make things work in Windows, but I have to say that I strongly recommend you to a least try a Linux system (I’d say Ubuntu is a great choice because is the most user-friendly for beginners).

I have a laptop which has a dual boot of Ubuntu and Windows, and I always use Ubuntu to do almost everything (I still use Windows to play some games from time to time).

In my opinion, some of the areas in which Ubuntu surpasses Windows are:

  • It’s Cheaper (because it’s free)
  • It’s more Secure
  • I like it’s Graphical Interface better
  • The Command Line/Terminal
  • The Development Environment

If you decide to install Ubuntu on your local machine, read this page by The Odin Project on Installations and go to the “Installing Linux” section, in there you’ll see four options, but the option I’d recommend to getting Linux installed is the “Option 2 - Dual Booting”.

Because The Odin Project is a curriculum that mostly focuses on Ruby/Rails feel free to only make the Ubuntu installation and omit all of the others.

2) Attitude

"For success, attitude is equally as important as ability" - Walter Scott

The second requierement is attitude.

In my opinion, having a positive attitude is the critical factor that decides whether you will succeed or fail at becoming a software developer. My objective with this blog is that you discover how rewarding programming is. This is not going to be easy (nothing worthwhile in life is ever easy), so maintaining the right attitude will help you make this process a better journey.

Don’t get frustrated if by any point you find yourself watching the computer in confusion and get the feeling that you know nothing, this is something you have to get accustomed as a programmer. “Shakespeare had to learn his ABC’s”, and so do you.

Having a good attitude as a programmer encompasses many areas. The more important ones that I’d recommend you to cultivate and develop are:

Resilience/Willingness to make mistakes

Written by John Rampton in 15 Characteristics of a Good Programmer

Programmers rarely get everything right on the first try. In fact, failure is almost a certainty. It’s important to find programming staff that sees errors and bugs as a challenge rather than a sign of defeat. Persistence is important, as well as the ability to start over if necessary, even after hours of work.

Laziness

Written by Larry Wall in Three Great Virtues of a Programmer

[This is] the quality that makes you go to great effort to reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful and document what you wrote so you don’t have to answer so many questions about it.

You can also watch a youtube video in which Larry talks about his “Three Virtues” called Hobbits Would Make Great Programmers.

Patience

Written by Alex Allain in What does it take to be a programmer?

At some point in your programming career, you will certainly make small mistakes that cost you hours of debugging only to realize that you were misspelling a variable name so the compiler thought it was another variable. These things happen even to good programmers–and the better you get as you practice, the more you find that your bugs are interesting–but still hard to find. If you’re not willing to patiently work through possible hypotheses and test each one in turn, you’re probably going to find programming to be frustrating as much as it is exhilarating.

If you’re looking to eventually have a programming job full-time, you’ll want to acquire excess patience because you’ll almost certainly be expected to spend a great deal of time working on documenting your code for other programmers and possibly even hunting bugs in someone else’s code.

The benefit of all of this is that you gain an eye for small details that can have ripple effects and you become much better at the process of asking yourself what could go wrong and how can you test it. Finally, you have a lot of tools at your disposal to help mitigate the problems; you can use the compiler to find syntax errors and debuggers to find runtime errors. Life is not bleak: not all of your time will be spent finding bugs!

Curiosity/Willingness to learn

Written by John Sonmez in The 4 Most Important Skills for a Software Developer

There is probably no more important skill in life than learning to learn.

This skill is especially important in software development, because no field I know of changes more rapidly than software development.

You can’t know everything about everything. You can’t even really invest the time it takes to be a master of one particular framework or technology—things are moving way too fast!

Instead you need the ability to quickly acquire the knowledge you need for the task at hand.

If you truly want to have a skill that will propel you through your software development career, learn how to teach yourself.

The only way to develop this skill is to put it into use. Go out and learn a new programming language or technology, even if you think you’ll never use it. You’ll be surprised how quickly you may be able to pick it up because of the foundation you will already have in what you know.

If you can quickly adapt to the rapidly changing software development market and technologies and platforms associated with it, you will have skills that will always be in demand.

Passion

Written by Chris Kite in 5 Personality Traits Every New Programmer Should Have

Why do you want to learn to programming? To be cool? To get a better job? Or because you like to solve problems and build things?

Passion can come from all of those, but if it is the latter, you are probably on the right track. Most programmers are engineers and have an inherent desire to build, disassemble, question, problem solve and conquer challenges that others cannot. They do this because they like to, not because a paycheck is involved.

Passion is what will keep you up all night until you solve a problem. Passion will keep you working nights and weekends to learn or create when others are relaxing on the couch.

Without a burning desire to learn, your attempt to grasp programming concepts will be very challenging. Be honest with yourself and start your journey when you are truly ready.


Finally, I’d recommend that you watch this TED Talk called “The power of believing that you can improve” (you can watch it at a speed of 1.25x or 1.5x). In her talk, Carol Dweck tell us about the “growth mindset” which basically consists in the idea that we can grow our brain’s capacity to learn and to solve new problems just by learning this new mindset. I find this idea very empowering when I associate it with programming because I know I’ll always be learning new things and solving problems.