For disclosure, before I decided to have a girlfriend, I was writing some HTML back in the day when we would use tables for layout. So in other words I had my first contact with "coding" back in 1998 or so. I did it for a couple of months before I gave up after friends ridiculed the color I picked for my website (#E4AB93).
I didn't really dive deeper into technology despite my sympathy for computers, I didn't study computer science nor did I spend my youth locked out in the attic hacking into pentagon. Quite the opposite. I always thought that coding was a boring thing for boring people.
Fast forward to 2012 and I had seriously started learning to code. I won't go into details now, why I have started but the bottom line was: I had to get this shit done.
Now, what was my experience like? Well, it turned out that writing code was more like actual writing rather than math or physics. Of course I'm not building compilers and video compression software but let's be honest, most of the applications built these days revolve around managing simple information. Writing those applications is actually not as difficult as we all think.
I like to say to people: If you can verbalize something, if you can put it down in writing then it can be easily built with code. It's just a function of your time and effort.
Let's talk about the most common myths related to programming:
You have to be a genius
Nothing could be further from the truth. My personal guess is that most of us are intimidated by the people who spent the last 15 years of their life coding and then developed this funny notion that they are actually smarter than other people.
This is not cool and this is not true.
In fact most of "software engineering" is a pretty straightforward process. It depends more on organising the work and "conceptualizing" what you want the software to do. The whole "translation" from human to computer language is a fairly simple task. I often see how people who think that they are super smart, tend to over-think the "translation" part and completely forget about being clear about the business value and the actual functionality. That leads to super concise, overly complex software, that no one but those super-humans can work with.
Today, when we need to modify our code constantly to remain agile. Simplicity and readability of the code is more important than pretty much anything else. Not only does it make your code easier to update but also easier to find bugs, security issues and be able to fix them, not to mention, it makes it possible to work in teams.
Simple code is better than "genius code", even at the expense of performance.
Code is hard to understand and read
So yes, and no. Code can be hard to read but doesn't have to be. The upside is, once you know something as easy to read as Ruby, you can move on and try to wrestle with more complex syntax of other languages.
You have to start to learn when you're 12
In fact many great developers didn't start until their twenties. Frankly, age should be the smallest of your concerns when you start learning to code. Since programming is explaining to a computer how to handle information (hence IT stands for information technology) your domain expertise might be more important than knowing how to code. Learning that final step might be a great way to leverage your knowledge without a middle-man-developer. Another reason this might actually be great for you is that nothing gets lost in translation between you and some coder who has no clue about your domain.
And as we all know, domain knowledge takes years to develop. We also live much longer - chances are, you have a lot of time to learn to code.
You have to have a CS degree
I'm not saying that you shouldn't get a Computer Science degree, especially if you are still young and deciding about your education and possible career path. To the contrary, I'd advise just the opposite. If you already passed that stage in your life and you made different choices, don't worry, the truth of the matter is that most of software engineering has very little to do with actual science. If you plan on being a scientist - go ahead and get the degree, then do your PhD and build an awesome new technology, that we, the common people, can later use to write software with.
We need scientists, visionaries and geniuses because they build server operating systems, programming languages, cloud infrastructure and they make things go forward. However, applications such as Facebook started with NOTHING that was very scientific (maybe except for all the crowd psychology ;-) ), yet it influenced the lives of hundreds of millions of people in ways that were hard to predict.
You will spend many years before you can build anything
It takes 3-4 years to get a bachelors degree. That's a lot of time. From my experience I can say it takes about 2-4 weeks full-time, to get something off the ground when you're just starting to learn. Of course it will not be a state of the art piece of code and I can guarantee that you won't be proud of it when you read your code after a couple of months, but guess what? It's ok, nobody cares. All that matters is that you can get it off the ground. Get it off the ground, prove the concept and either kill it or push forward.
As long as you care about something deeply enough, you can learn to execute.
Learning to write code is very much like learning to write in a human language. Just with a couple of differences:
- there are less words you need to know
- there are NO irregularities or exceptions
- grammar is a lot simpler
- you can actually learn all by yourself and be good
Think about it for a second. If you ever learned a foreign language, how long did it take you to become fluent? 5, 6 , 15 years? It took me a long time to learn English, and even now, I'm far from "native" level. On the other hand, if you had spent 5 years learning a computer language, not only would it pay for itself along the way, but also you would have reached a much higher level than after the same time with a human spoken language.
Give yourself a chance and learn to write code.