How I got started with C++
by Jens Weller
We always hear and see what the latest news on C++ or some particular subset of it is. What one usually does not get to know, is how people got started with C++. But one thing for sure, all of us in the C++ community are either still getting started, or did once. There is a good section on how you could get started today at isocpp.org, but the past did not offer such a luxury.
Organizing Meeting C++ has a few perks, one of them is getting to know most "famous" people in the C++ world. While they are aware of their fame, it hasn't made them forget their own, humble beginnings. Usually, they are enjoying the exchange on thoughts related to C++ and also general IT topics with the community.
On the contrary, I do see a certain cult of experts in the C++ community, only willing to listen to people who have the right experience. I wish we would hear and listen also more to those who get started in C++, and how others got started in the past. Surely, lots to learn from that. So, here is my story.
TL;DR: this is a long story, and much more then how I just got started. But I think its worth sharing.
How I started
So, I'll start with one simple fact: I never planned to become a programmer/coder/IT something before I stumbled into it. Back in '98, my knowledge about Computers was how to get that thing running and start a game. Writing letters I could, some excel. Very basic knowledge, and I'm not a computer nerd, not really into the technical sides of computers, software and hardware. But I know how to type, and would like to get to know a bit more about PCs/Computers during my highschool year in the US. Thats why I'm not impressed to see type writers, not PCs in the room of the basic computer course at my high school. So, I decide that is not an option, and ask to be moved into a different computer class, after all I know the alphabet and can type. Not particular fond of spending my time typing ASDF though.
Computer science is the only available option, everything else is already fully booked. What do I have to loose? Well, I am from germany, where - at least back then - computer science is a thing for the elite. You'll have to be really good at math to be accepted and some other requirements. So I'll end up in a small class, with a very funny, but also well talented teacher. Basic is being tought, I didn't miss much, and pick up this new skill quickly. Yet, most of the class is theory, actual coding of some program is rare, and cumbersome, as its on 2/86 machines (or 3/86? DOS for sure though). I enjoy this class, until I need to change school, as I have to change my host family.
I remember the day when I enter the new highschool, in Marlow OK. A very small town with a tiny high school, compared to my old one. I don't expect them to have computer science at all, so I'm thinking about what other class would ruin my days in high school the least. The grades I earn in Highschool are meaningless when I return to Germany, I strive to be a good student, but not to put any extra effort into things. To my surprise, this highschool does have also computer science, with a tiny difference: Windows 95+ C++. Its '98, so thats pretty high tech for a school, at least from a german perspective. It takes a while for me to pick up new concepts, like functions and the syntax differences to the BASIC I'm used to.
So in the early summer of '99 I return to Germany, with the basic knowledge of C++. Not much, but enough to get me hooked on expressing my own ideas in code, and seeing its usefullness. Its a different way to express my creativity, so I end up visiting a computer course in C++ over summer. Then I enroll in business school, a two year school setting you up to become a business man in various fields (your choice), after this usually follows an apprentence ship in some company, before you'll end up being some sales or manager person. Other professions I thought about taking up are photography or taxidermy. But, C++ has hooked me enough, to see it as a hobby at first. So I do buy Visual Studio 6.0 after lots of thinking about it. Its quite expensive when you're going to school. I explore C++ and start writing simple programs. Like a program that calculates your age in days and silly stuff like that.
Programming as a hobby
I think that is one thing in common with lots of people who get good at something, like C++. That they're connection to it isn't purely making money, there is other aspects, which draws us to coding. Expression of creativity, and the joy of coding it self. Those who get to experience this while in school, quickly find a use case for coding: doing home work, especially for math.
You're supposed to do this in your head with a little help by your calculator. I was never really good at this. But, once I get to write programs, that solve my math home work, things change. My math grades are now really good, as programming helps me understanding what is going on. Down side of this is, when I have an implementation error or don't get to grasp a concept fully, my grades are either really good or really bad. Driving my math teacher crazy.
Also during this time, the internet comes around, and so I find my first online community where I thrive in reading, learning and helping others in C++: cplusplus.de, especially the forum. Also during that time I begin to notice, that I the better I get in C++, the less time I spend on the computer playing games, instead I'm coding. Also, its clear for me now, that this is the career option I'd like to follow. I'm not to fond of the computer science I have in business school, don't want to spend my time in the office with word, excel and access.
Also, in these days, lots of todays rich resources did not exist. Most of the books out of this time are german, only later I would start to prefer the english originals. But for lots of things, there were no books, and paper becomes outdated to quickly. So lots of things I learned, was through the online communities for C++. Forums, tutorials, IRC, and often googleing specific problems.
Between business school ends, and my military service begins, I have 3 month time to do something. So I start reading books on gamedev, my first really big project shall be a tank game/simulator, in 2d. Animations, sprites etc. everything is written from scratch. Its a fun project, until its almost done. I'm still a C++ hobbist, the program is for my taste complex and I use containers and the STL, as thats how you do C++. At least thats the vibe of things I picked up in the online community, and so I'd like to follow that advice. Only problem is, when the its the computers turn to move the tanks, the program crashes. And with it the computer, as its still the good old days of blue screens.
Booting the PC, starting the IDE getting back to the program is really annoying, and though after a few days I loose interest. Also, my time is almost up, soon I'll be spending my days on something else. In the after math, I decide that game dev is - at least for now - nothing for me. I'd first have to become better at C++ and also as I see C++ in my career, writing applications in it, has its own challenges. The next project is to write an mp3 player in MFC, as I don't like any of the overboarding music programs of the time. Its a success, and while I lost the source code, I still use it today from time to time. Listening to my old playlists.
The IT Industry
I accept the offer from Vodafone to do the apprenticeship in "Application Development", one of the reasons I'm picked is the interest in C++. Excited I am, but for the next 3 years, C++ will stay mostly a hobby. The time at vodafone gives me a solid background in IT, Databases and some exotic things related to what you use a big business corporation. Also, we get to see every 6 month a new part of Vodafone in Düsseldorf, changing between departments is very interesting. As an Apprentice, you're often seen as cheap labor, and I do get to hear some stories from other people about this sometimes. Vodafone sends us to trainings, where everyone else is a teamlead or so. Really expensive, speciallized trainings, because the department thinks that whats needed to get us up to the task for that 6 month. My first assignment is a 6 month stride into Java and JSP, my mentor gives me the advice to drop C++. A good advice, as the Java hype is just about to start. Yet I don't listen, as it is my hobby anyways. I'm to good at C++ already, to be assigned into the very few C++ related apprentice jobs they have. During that time I learn PHP, SQL, handle lots of Database things. Often its us who writes new Intranet tools for the department we're in, usually a combination of PHP, HTML, CSS and MySQL. But, as a telco driven business, the Internet is not really a first class citizen at Vodafone.
Its 2005, and my apprenticeship ends. It was a great time, we were a class of our own, so my knowledge about other companies and how they do IT is limited. Also, as Vodafone always invested in us, we were ahead of the school we visited, and, as we were 28, formed a class of our own. Very little exchange on how IT looked else where during this time and the next 2 years, when I work at the test department.
So, after my apprenticeship I get started as a dev in the test department. Automation and test support is my group, we're not involved in writing tests, thats what freelancers mostly do. During the first days, I get to do some research on what options exist to automate the testing of links in a mobile internet portal (WAP). Testsuits exist, but only few cover link testing and usually its not very well documented AND only the large, professional and expensive ones seem to have support for it. You'd buy a whole supermarket, but only need one product out of it actually. So I'm stupid enough to ask why we don't write this on our own. I'm the only dev in the team, and hence this an entire new option to my team leader. As I have no idea how to use HTTP and WAP in C++, I do some research, decide to go for Java, as it seems to have a WAP capable HTTP library. Its the only Java program I have ever written, and its also little miracle for my team leader. Instead of spending time to get budget for buying some test suite, the job is already done. For the next one and a half years I'll get to write C++ tools for supporting the test automation and support team.
One of my next jobs is to write a new program for the hand over matrix, a hardware specially build for testing cell handovers in mobile GSM/UMTS. Its having a protocol of its own, via a hardware port, text based. The old interface is excel like, I decide to go for a different approach, n circles representing the cells arranged in a circle. Clicking every cell creates a path the test takes. Mindblowing for some people in my team, but I also learn that testers are a very critical audience. Its not easy to write tools for them, so I also have to implement the old interface too. Most of the time until summer 2007 I get to pick my own projects in C++ now, or have to update some of the other tools.
Before I move on, let me also quickly tell you, that I was a little bit shocked at my first day in the test department. During my time as an apprentice, I did get to see roughly 6 departments, others did the same, but none had been in my new department. I had seen the good, but also the worst in teams at vodafone. Some teams were toxic, some teams had toxic management, and others got a long quite well. But a separation between management and teams is pretty usual. So I get to meet the head of the department on the hallway, directly once I arrive. He greats me by my first name, which is a little embarassing, as I'm not good with names, and for a while don't have any idea what his name is. During lunch, he joins the rest of the department for well, lunch. There is a certain mix, but no visible separation between different levels, like teamleaders, department heads or newbees like me. From all departments I saw during my time at Vodafone, the test department had the best climate. Friendly and almost family like.
Becoming a 'professional' freelancer
So the one down side of Vodafone was, that during this time, budget cuts were everywhere. Also lots of people got fired, non in IT, but some of the people which they couldn't fire, would get jobs in IT. Also some other part of IT was about to get outsourced... I'd have loved to stay at Vodafone though, but getting into a fixed position after my time contract of 2 years was impossible. So one morning I get the offer to become a freelancer, and get to do my projects for Vodafone through this. I like the option, and decide to take the risk.
Its exactly one project I do for Vodafone, the rest of this project, falls short to the budget cuts. But its a great background to get work else where as a freelancer. I do some C++ first, then during the crisis mostly PHP, until I decide to specialize in C++ only. As a freelancer you get to see lots of companies and lots of different code. Often you're asked to fix a certain problem or implement something that is out of scope for the local devs, and you are seen as the expert. Usually there is no time to fix up or refactor a code base, either because of timing, or also, as an external dev, you're not in the position to decide on architecture related things. Also politics, but that is a different story.
During this time I worked for a very few clients directly, but after becoming burned on one of my first projects, I quickly opt for the professional freelancer market: working with agencies, which hold the contracts to the jucy hunting grounds. It gives you professional clients, that know what they want, and payment through the agency is almost guaranteed. But that makes also your own skillset kind of anonymous, you can't be too specialized, as your jobs vary. Pay is good, but also depends on what the market currently pays, not your skill set. I enjoyed this, my background through vodafone also got me interested in writing Apps, as this was a common misconception amongst people I met.
Days as a freelancer can be lonely, especially in the home office, so I started to organize local meetings about writing Apps with Qt for MeeGo. During this time I also visited the first Qt conferences, after attending lots of yearly meetings of cplusplus.de. After MeeGo failed, I decided to continue this work with starting a local user group for C++. This was in December 2011.
Visiting C++Now in the next year, motivated me to organize a conference for C++. But as I never liked conference websites for being dormant half the time, I thought about combining it with things which were missing for C++. User Groups for one thing. Also where would you go for C++ related news? Thats how I got started with my work on Meeting C++. But I've already blogged some of the details on Meeting C++ earlier this year.