You never were that nerdy little guy or gal who had always been good at math, who started tinkering with computers at the age of 14 just to escape the awkward social dynamics of middle school. You probably did something else with your life and thought you were good at it until at some point that career choice you once made, whether completely on your own or by peer pressure, just stopped making sense. At least, that happened to me, one well-traveled, seasoned international reporter with almost 15 years of experience at Russian TV, six of them spent in Europe as the head of bureaus in Brussels and Paris (which really means a glorified correspondent who is also in charge of paper pushing). News is stupid and unnecessary. Television news in Russia is stupid, absurd and dangerous. On that, later. Today we focus on programming.
As Charles Bukowski famously said:
“if it doesn’t come bursting out of you in spite of everything, don’t do it”
That was about writing a.k.a literature. I would not discourage aspiring coders in the same way, but it is time to acknowledge that the discourse on developer training went to the opposite extreme: “Everyone can code”. While technically true (conditionals can be explained to pre-teens, OOP concepts can be easily picked up by philosophy students), that does not mean everyone needs to, neither it means that programs written by “everyone” would ever be needed somewhere.
My own journey in computer programming started two years ago a Codecademy course on Python and this book. I also owe a big thank you to David J. Malan, Eric Grimson and Paul Hegarty. My Ruby/Rails initiation was done at the amazing Le Wagon bootcamp in Paris. So, after hundreds of hours of trying to get through various coding challenges and to build things on my own, here is what I learned:
HTML and CSS are not programming languages
Sorry, guys. They are just not. ML after HT stands for “markup language” and middle S in CSS is for “style”, as in “looks”. They have (almost) nothing to do with the actual logic of an application. Don’t waste your time on learning them first. You will probably never write pure HTML anyway (I mostly wrote ERB) and CSS is plain torture when you don’t use pre-processors. You’ll learn all that in due time, there is no real complexity there.
Don’t be afraid of C
Yes, the C programming language first appeared 44 years ago. This fact is mind-blowing by itself and begs the question whether you should involve yourself with ancient history. At the same time, the very well-known Harvard’s CS50 in almost completely in C and it’s an excellent course. K&R, also known as “The C Programming Language” is Hemingway to technical literature. It’s pure joy to read. Learning C will teach you to think your program through before starting to code, as it is impossible to do anything well in C, unless you really understand what you are doing. Knowledge of pointers is key to understanding things like the difference between passing by value and passing by reference, that can save you hours of debugging frustration at the beginning of your career. It is harder to do things in C, but that’s good for you.
The same program that reverses a given string in C using pointers (left) and in Python (right)
Python or Ruby will make you happy
Ruby was even built with programmer’s happiness in mind, how about that?
“For me, the purpose of life is partly to have joy. Programmers often feel joy when they can concentrate on the creative side of programming, So Ruby is designed to make programmers happy.” – Yukihiro Matsumoto
Loose typing makes writing code much less tedious for beginners and the innate OOP nature of both languages make their use intuitive. There is an
Array (it’s called List in Python) of values. You should be able to reverse it. Maybe we can call
Array.reverse on it? Whoa, it just worked! Both Ruby and Python sometimes sound like plain English. You can unleash your intuition and test any idea that pops into your head.
Never stop being curious. Live by RTFM
Google and StackOverflow are your best friends now. Coding is more about solving problems than knowing code mantras by heart (although whiteboard interviews are a thing). Knowing how to look things up is 50% of the work. Make sure you checked all relevant documentation before asking other humans directly. Documentation is your Good Book. Whenever you hear RTFM, know that stands for this.
Learn to use git and GitHub right away
Git talk can be confusing. You “check out” the branch to switch into it and you “check out” the file to undo changes in it. However, no software in our day is written without version control and Github is programmer’s Twitter, Facebook and Instagram combined. You collaborate on your projects there and it serves as a proud (or shameful) record of your code powers.
There are plenty of good git tutorials out there and you will need to learn just a handful of commands to start. Just remember: always
git add . && git commit -m when you’re happy.
Be prepared to feel intellectually inferior
Being stuck is programmer’s equivalent of writer’s block and, especially in the beginning, a trivial program can easily eat away hours and even days of your time. Seeing other people solving it effortlessly in few lines of code will make you feel dumb. A lot of people out there will be condescending instead of supporting. This is normal amongst humans with higher IQ. Learn to live with it. There’s no place for drama in code and I am still adjusting to this fact.
Learn to handle rejection
HR doesn’t code. HR knows how to subtract dates, though. So if you only started coding two years ago, as yours truly — you are of no interest to HR. I collect rejection letters. They are usually from nice girls who would inform me that “we are currently looking for a more experienced specialist”. Some would even add a bracket in the end as a poor man’s emoji. That’s cute but does not make rejection less bitter.
Remember that code is text too. Make it readable
You will not send a letter to your darling or write a business email with lines all over the place and no indentation whatsoever. Computer languages were created for humans, not machines (machines are perfectly fine with this) so that people can show each other their work. By writing readable code you make lives of programmers around you and after you much easier. It’s a form of respect. Most importantly, all that effort is for the future you. Figuring out how your own code used to work weeks after you wrote it may be harder than you think. Python, for one, is a great language to learn how to code in style, as the would just refuse to work if you mess up the indentation. C programmers, on the contrary, would enter obfuscation contests and write poetry in functioning code just to impress one another. Don’t be like them, unless you really know what you’re doing.
And last but not least… You can do this!
Making a string of text you just wrote on the screen do actual stuff is extremely rewarding. Everyone finds their own joy in programming, but for me, it’s all about leaps I make while coding. A thought, bizarre it may seem, pops into my head, I quickly test if it works and YES, IT DOES. That kind of instant intellectual satisfaction is incredibly addictive. Those moments tend to happen more often with interpreted languages like Ruby and Python where you can open a REPL in a new terminal tab and quickly test an expression.
Okay, I stop right there. You have a lot to discover for yourself. Go ahead! (And don’t freak out when you start dreaming in code).
Just please don’t ask me to do any journalism.
Andy B a.k.a progapandist