It felt like I was born a programmer. When at one time in 1995 I was given a book like ‘BASIC for the little ones’ (in 4 volumes and with pictures), I was reading it nonstop, even though I couldn’t try everything I’d read, as I had nothing to try it on.
And it was difficult to imagine the whole process indeed, as the programming books at that time, even the children’s ones, were too theoretical and skipped such now familiar items as ‘where to enter all that stuff’ and ‘how to run all that stuff later’. So even when my family got a gaming console and then the computer (famous Poisk-2, Soviet IBM PC/XT replica – translator’s note) it took some time for the idea of ‘programming’ instead of ‘dreaming of programming’ to invoke in my head.
There was some luck in this misfortune, even in two of them, to be precise. First of all, at school we now had computer classes with hometasks. Secondly, while I was sledging on a Christmas Eve I bumped into an unexpected tree stump, hurt my right leg, and spent the rest of the winter on the sofa in front of the computer. I finished both ‘Princes of Persia’, ‘Dangerous Dave’ and some other hits of that time in a couple of weeks and just out of boredom got to the Borland Pascal 5 input box. And I was lost.
It suddenly turned out that ‘real programming’ was way more difficult than reading about it, especially for those who had idle and monkey mind, which didn’t allow them to hammer at books. But it was also way more exciting. I guess, I’ve never done any tasks from the textbooks, I started creating some games, demos, joke programs right away, which I was massively proud of. My friends were suffering from them, as they visited my place to play some computer games, but instead they observed how some numbers were gleaming with all possible colors (by which I mean 16 of them, as my computer could display only that many of the colors). As a consequence, I was able to recolor the text on the screen and beep with the computer speaker even before I had a chance to grasp what a cycle is or how to copy and paste (it was rather unusual in DOS programs at that time... so if I wanted to repeat the same sound effect twenty times, I just typed the same command sequence 20 times, cause why not?).
Weird recommendation ¹1. If you’re crazy about programming, you need just a little bit of knowledge to start. There’s plenty of time to gain some more through reading later.
Bonus weird recommendation. Even if you slipped down the ice slide a thousand times, it doesn’t mean you’ll be okay sledging. But you can accidentally become a programmer instead.
A few years later (let’s just skip my first failed attempt to earn some money with programming, having written some accounting program which printed billing statements, it didn’t work out), I defended myself from my doubtful parents and entered the university and the faculty, which were all about programming. I knew for sure who I wanted to be, so, of course, I had to at least have a degree. To top it off, my father, who was a researcher, mentioned that ‘at university you’ll be taught how to think, unlike in school’. So I imagined something like “Dear students! This is how to think...”
... Well, I gave up my programming studies somewhere in the middle of my sophomore year.
No, I visited classes and even, as a result of some consequences, I received a cum laude degree, but apart from that, 80% of the ‘subjects’ were lost on me. Sometimes it was obviously because I was young and wild and loved theaters, girls and alcohol... but the main reason was the boredom. My unfortunate university distinguished all the professors into the ‘old masters’(like a 70-year old lady, a system programmer, who was an assembler and a low-level optimization fan) and the middle-aged ‘academicians’(in a bad way), including the one who taught us C++, reading the teach-yourself book during a recess. There were also 1% of young idealists, who combined teaching with their main job, but it didn’t change anything.
Weird recommendation ¹2. It’s better to learn programming from the doers. Programming is a craft, mastership and skills more than it’s knowledge and memorizing.
But even dull professors and senseless structure of the subjects at the university didn’t discourage me from programming. On the contrary, they invoked a teen angst like ‘I can work all this stuff out way much better!’ That’s why after taking an interest in games and demos as before, but for Windows and in Delphi, I turned to some global ideas and tries ‘to understand how all those things work in this IT thingy’.
Delphi was replaced with C++ (and I still love it, even though it’s horrible!), teach-yourself books and manuals were changed to the programming theory and project management books and whatnot. One of the few cool university subjects was the compiler development; it sparked my interest in what’s inside of programming languages, what kind of the languages there are, and encouraged me to make a huge e-collection of even the weirdest and the most unknown of them. Funny enough, that messy self-education period of my life later proved itself useful (but we’ll talk about it in the following paragraphs).
Weird recomendation ¹3. Despite the previous recommendation, it becomes obvious at some point that the theory and understanding the basics are essential. It’s important not to miss this point or even to anticipate it and make yourself get into the Big Theoretical Books, given that they’re usually very engaging.
For example — look through some timeless classics, such as SICP, Code Complete, Mythical Man-Month; eye-opening The Humane Interface by Jef Raskin èëè The Art of Unix Programming(even if you’re going to do iOS programming!); a little bit old-fashioned, but interesting modern classics such as Design Patterns by the Gang of Four or Extreme Programming by Kent Beck; if you find some free time, you can open Design and Evolution of C++ by Stroustrup, when you’re reading it ,it feels like a real detective.
In my 4th year of studies, after a couple of unsuccessful job interviews, which were unsuccessful mostly because I was thinking too much of myself and had a rather random education, I got my first job. It was an almost full-time one with the salary of 80 dollars a month. It might sound bizarre, but in early 2000 in Kharkiv it was enough for a family of two. The job was rather educative, we were developing the software based on neural networks for traders. I got a sight of a ‘real’ commercial development for the first time, was self-studying like hell (my boss, who was a pretty good programmer back then, gathered a decent collection of books in English), mastered another couple of languages... and quit a year later.
As a surprise to me, it turned out that I didn’t like working in an office. I hated it, to be precise. So I’ve never worked there since then.
And it also turned out that I wasn’t satisfied with ‘any job, if it’s a programming job’, as I thought before. The idea of making an AI, which would predict currency fluctuations to help stock gamblers, seemed meaningless and dealt the final blow.
Weird recommendation ¹4. ‘Working as a programmer’ is not everything. The ones who just start often forget to think about what they actually want to do, who to work with, how to plan their time... And if for the first job thinking that it’s good ‘to be employed and have a salary in time’ is okay, later it shouldn’t be embarrassing to think “Am I going the right way? What do I actually want?”
To be honest, I left the office with a Secret Goal to write my own software, commercialize it with a price of $20-30 and become Incredibly Rich (that was the high noon of the shareware, which subsided in 2000s, something like the mobile apps high noon in 2010s).That didn’t happen, I had too many ideas and, as I understood in the process, too few skills in entrepreneurship, planning and programming itself. It appeared that, despite my comprehensive knowledge of C++, I still had difficulties in using it to create something, including the user interface, documentation, versions planning and lacked some common sense while picking the features.
All in all, some next years I spent trying to finish any of my projects with almost no result and at the same time quite productively looking for the languages, instruments and approaches, which would finally help me to become productive and useful – the kind of programmer I dreamt to be as a child.
If the reader started to feel sympathy towards my family here, which as any other family of an ‘artist in quest of himself’ should be hungry, do not. It suddenly turned out that the attention to informational technologies and tons of scanned books might allow earning money in rather surprising ways. For instance, I had a chance to be a journalist at legendary Computerra (printed magazine), had columns and wrote news for half a dozen of IT titles. I was a self-proclaimed (i.e. I had no degree, but lots and lots of satisfied clients) usability consultant, technical documentation writer for some large systems and cheap software reviewer for a huge catalogue... Well, all of it was fun, after all.
The funny thing is that most of that experience came in handy later and still does. Whenever necessary, I bit by bit got the hang of the IT history, information architecture theory and ways to quickly analyze the new technologies, so I wouldn’t feel embarrassed when I wrote about it. All those things are incredibly helpful when you want to consider a work matter in all its bearings.
During my work as a journalist I also met some wonderful editors, who were able to transform a long and complicated text into a short and easy-to-read one. Later I found out that his technique could be applied to coding too.
Weird recommendation ¹5. If you were doing some other stuff before programming or had an interest to it, do not let it go. Accounting or washing machine repair, railway car loading or even cross stitching, any past experience might have some useful ideas or metaphors, which would help to comprehend programming matters.
During all that time I kept my hopes up and continued searching for My Language (having deprived low-level C++ of that rank), so I could start writing Something Awesome using it. I was crazy about some D language for a year and was even using it to write something. Then there was a period of Perl. Later I read some books about Python, but didn’t come to appreciate it. Etcetera.
And then some unfamiliar for me Ruby language was praised by someone on some message board and I was lost completely.
Ruby appeared to be the language convenient for me tî think in (I’ll remind you that I’m certain that each of you can find a language which would be convenient for you specifically), so in a year I’d read all the available literature on Ruby (starting with wonderful and sufficient Programming Ruby by Pragmatic Programmers), then analyzed the source code of the interpreter to have some notion about how it works. I was actively writing letters in horrible English to the Ruby-talk feed, as at that time one and only Matz had enough time to answer some questions from the newbies and I followed all possible famous Ruby blogs as well...
... and finally I finished a Big Functioning Project.
It’s a little bit embarrassing to recall this project in my mind now, but, frankly speaking, it’s also very pleasant. It happened by chance, I was helping my friend who opened a small computer store, so I created a simple script to process differently formatted Excel-files with components and accessories from suppliers. Then I created Windows-interface for this script, which allowed comparing different processors and keyboards. Then I added a feature to it, which allowed calculating out prices according to the suppliers’ prices. And collect orders. And track orders. And register the income. And prepare documents...The store expanded, I was paid for that job (2-3 hours a day) along with the journalistic one, the system became a multiuser one. I added there stock balance recording, backups, role management and export to the website...
The funniest thing is that I fell in love with Ruby from the very beginning and at the same time disliked Rails. So when I created a multiuser system, a decent web-server with web-interface, I accidentally wrote my own web-framework from scratch. Don’t try to find it on GitHub, it was a horrible Darkness Creature, copying famous at that time Camping. But I was always far from web development, so it was helpful for me and allowed to come to grips with MVC architecture and its alternatives, HTTP-servers logic and tons of other things, which I was gently protected from while working with Ruby. By the way, my project is still used and in progress (thankfully, not by me anymore...I still shudder at the memories of it!), keeping on track the operating of the large store with several branches and dozens of employees.
Weird recommendation ¹6. ‘Acorns were good till bread was found’. Look for technologies which are suitable for you and will make you feel happy while programming. When you find them, search them through until you know them inside out. Or at least try to.
And then... here I am. I work in a huge company, do a bunch of open source projects and some public speaking on conferences and teach students. The ‘understand and explain’ part is the most favorite one in my work, whether it is explaining to a silly computer how to implement something or sharing some of my happiness of the fact that I have some cool instruments and results with a smart student.
I continue to keep on top on Ruby evolution and new ideas on RubyFlow, RubyNewsWeekly, /r/ruby. Recently I got into scientific programming and some ideas brought to life in Wolfram Research. I read GitXiv with the newest scientific researches on GitHub and Wolfram Research blog. And well, why deny it, I also follow some specialized hubs at Habrahabr (a Russian collaborative IT blog – translator’s note), mostly because I want to be up-to-date. If it was translated for Habrahabr, it would definitely be worth seeing.
There you go. Love programming and never stop.