@Reds and to all the Self-Taught C++ Computer Programmers that currently have programming jobs.

Billserk·8/2/2014, 7:39:01 PM·3 votes·4,168 views

Hello everyone, I'm currently looking for some ways to go about self teaching C++ computer programming and perhaps game programming as well. I've currently got 2½ years worth of programming worth from a University, learned as much from Algorithms, Big-O cost, and gotten the general gist of some of the functions from some of the libraries. I've been using nothing but MVS as my compiler.

Right now I don't want to stop educating myself in C++ , but I'm also frightened about me falling behind from loss of motivation. School kind of gave me a reason to not fail in programming, and I love to program, but I do have a busy life-style that completely stopped me from even playing games for week on end.

So here are my main questions:

  1. What are your preferred websites or programming books do you recommend for learning
  2. When would be the right time to think about getting a simple small programming job. (From my professors experiences, they learned programming a lot better from the job than being taught in the class.)
  3. If those days your at a loss in motivation to self-teach yourself, how do you get out of those slumps.
  4. Should I consider making simple mobile games? If so what game engine would you prefer me using? If DirectX is one of the choices, where should I start learning DirectX?

Thank you for who ever responds, greatly appreciate it.

Also please no troll responses. I really do want real answers, even if it is harsh criticism.

7 Comments

RiotRiot Reinboom8/2/2014, 9:52:58 PM6 votes

Background: I'm self taught, been programming since I was very young, and went to univ for 3D animation because I didn't realize my hobby could be a career (oops!). Slightly different boat, my personal experience comes from C, not C++.

There's two major things that I find are great teachers for code:

  1. A motivation. This is where the impact of the job comes from, though it doesn't have to be that. There has to be something you want to accomplish with your learning other than learning for the sake of learning. This can be from a job, a large goal ("I want to make a game!"), small goals ("I want to add a feature to this open source project!"), or even the text book method of mildly interesting goals ("I guess I want to make a calculator?"). The important thing here is that there is at least a direction to walk towards to get you walking. It's not important if you take the "correct" steps initially, or even if you end up walking in a different direction, the important thing is just moving at all.

  2. Reflection. Whatever you do, you can always do it better and having that sense for learning anything (especially coding) is important. This is incredibly important for C and C++ since the bounds for these languages are very wide. There's the obvious hard results of improvement most people are familiar with: faster, less memory usage, more reliable/less buggy. There's also, I would say eventually more importantly, the soft results of improvements: "Can I make this more readable?", "Is there an architectural layout that would make bugs more obvious?", "Am I using the correct tools?", "Am I thinking about this in the right way?". (Note on readability for C/C++ projects in the wild: For the most part, they are difficult to read and wade through how they work. Many people early in their career will blame this on them not being advanced enough. I would say mostly however... it's that they just have a lot of poorly named things in them... Unless it's excessive template metaprogramming puke. Those are just unreadable inherently.)

Personally, the biggest driver I had when learning was actually working on something of which other people actively used. Something that I was accountable for. For myself, this was a community developed server for an online game (written in C). Small feature additions and gameplay changes provided the small goals and motivation. Needing to respond to both player feedback and feedback from other developers on the project provided the drive for reflection and improvement.

arcticturtle8/3/2014, 12:13:49 AM1 votes

I don't currently have a programming job, but I used to and I am self-taught.

I'm not going to go into each of your points, since Riot Reinboom already gave you good answers. What I will do is share some of my own experiences.

You shouldn't worry too much about falling behind. Once you have a good grasp of the basics, it is easy to get back on track if you've been away for a while. And honestly, you shouldn't lock yourself in to one programming language, like C++. All languages are fairly similar, and it is easy to pick up a new one. You should be focusing more about the type of work you want to do, e.g. prototyping or general maintenance or bug squashing. I never thought much about that myself and got a job with mostly upgrades and maintenance and I was bored out of my mind. So I quit that job and got a job with prototyping which was a lot more up my alley. One thing about starting and running your own project, even if it's a small one, is that you will get a feel for what parts of the process you enjoy working with.

Another beneficial part about starting and running your own project is that you will be able to show some experience. As a self-taught programmer, landing your first job is difficult. You already have some university courses, so honestly I wouldn't consider you self-taught, but let's not split hairs. Thing is, once you have job experience, getting the next job is a piece of cake. I've had several job offers just from accidentally mentioning my background, and I haven't been working actively as a programmer for years. The third job I applied for, they didn't ask anything about what I knew in terms of programming languages or anything like that, they gave me something I would label as an equivalent of an IQ-test, and after that they straight up offered me a position in their department of spear-heading mobile applications. And my application to that job was that I walked into their offices and asked to talk to their staff manager where I just mentioned my background and that I was interested in working at their company. So getting a job once you have experience to point to is easy, the difficult part is that first job. And if you start and run your own project, you essentially create your first job for yourself, but of course you need to make sure that it ends up in a finished product that you can showcase.

So I would encourage you to just start up a product for fun. See where it goes. You'll learn a bit along the way, you'll have some experience to show to potential employers down the line (if you finish it), and if you have a good idea and get a good product you may even earn some money from it before you get employment somewhere.

Here's a little tip for you, if you are really serious about getting into programming as a job; don't do a game. What you should be looking at is an application that automatically searches through code and identifies bugs (i.e. automatically produce input to a software, then compare expected results with actual results). And since you're using C++, make sure it's 100 % object oriented so it can easily be extended. Could be a bit of a hefty task, if you're inexperienced, but you'll learn heaps and you'll have experience that everyone desires.

stokastic8/3/2014, 6:45:57 PM1 votes

I currently have a programming job after 2 years of Computer Engineering (doing a coop tern at the moment). I mainly work in python and perl, but I have done C/C++/Assembly(motorola and intel)/Java as well. Riot Reinboom gave some pretty great answers to your questions, but I'd like to add a source that helps me to stay motivated. I still enjoy coming home from work and doing some hobby programming. I frequent the stack-exchange forum 'Programming Puzzles and Code Golf' http://codegolf.stackexchange.com/ which often hosts really interesting programming challenges, language agnostic. Some of them are simply implementing or formulating your own algorithms, and some of them (code golf) are about abusing language syntax to make your code as short as possible. It keeps me thinking out of the box regularly.

RiotIIIIIlIIIIIIl10/30/2014, 1:22:52 AM1 votes

My take on the 4 questions as a fully self taught programmer working as a profession C++ programmer for several years now:

  1. Depends on what level of expertise you have. Learn C and assembly well first if you don't already know it. Understand smart pointers, memory management, value categories, the STL, and more after that. Write a lot of code. A lot. Write shaders if you want to get into graphics. Write code for different platforms (Win, OSX, Linux).
  2. My honest opinion is that few professors will teach "coding" skill well. They can tell you a lot about the theory (which is CRITICAL, don't get me wrong), but understanding how to code well, and actually doing it is totally different. Sometimes, the fastest sort is a bubble sort :P. Linked lists are almost always terrible, even with tons of insertions and deletions from the middle of the list (read about prefetching, cache lines, etc). ETC.
  3. To get out of slumps, switch gears. Learn a different programming language. Go to a different discipline. Learn math. Learn physics. There's always something. If you suddenly don't want to learn, make sure the other parts of your life are taken care of. Eating, exercising, etc. Friends too if that's your thing (:D)
  4. Why not? Just do it. And make a desktop one too. Do it all, you'll learn different things and they'll all be valuable. Learn DirectX, learn OpenGL. Don't ever learn from just ONE source. Learn from many, and learn to think critically about the resources you draw from.

Hope this helps, Riot3ous

Wertilq10/30/2014, 7:39:09 AM1 votes

I learnt C++ during a summer vacation in high school. That was 10 years ago, and then proceeded to university as a game development engineer. C++ is my main language.

  1. Depends on the topic, programming is a REALLY wide area. Network programming, graphics programming and physics programming is very different, then you get into databases, web based programming with different types of APIs and ways to interact with the web. It has less to do with C++ and more about the topic. Find an interesting area and learn it.

  2. If you have university education, then look for a job. It doesn't hurt to get a job, and you can always apply for jobs. Worst case is that they say no, or that they kick you. As long as you put in hard work, effort and is passionate that shouldn't be an issue though.

  3. This is a hard and very individual question. How I handle all sorts of slumps is through order. I get routines, I plan, schedule and prioritize. Continue even as you are not entirely motivated just because you are supposed to, you'll usually get through and then get to a fun part which sparks your interest. Usually when I get into things I enjoy it, but starting a project I struggle with, or when I get into a boring part.

  4. Making games is good. Do it in Unity, Flash or something similar if you are not experienced. DirectX is not a good choice to make a game in. I tried that during highschool, after 3 months (albeit only like 10-15 hours per week) we had a picture on the screen that could move. I've later on made 3D renderers from scratch in OpenGL, but to even get anything slightly useful it takes months, and to make a game that way would take... year of fulltime work at least, as you are not experienced programmer. You are making a game ENGINE if you work with OpenGL or DirectX directly, not a game.

I recommend you do that as well though, learn OpenGL, learn directX, but don't do it as your first game project. Start with something easier. Unity is probably the best for games right now. Free, comparatively easy to learn with great tutorials, and it is still powerful. You have tons of space to grow when using Unity.