# So, I'm taking C++ in college: What will I be able to do?

**URL:** <https://boards.straightdope.com/t/so-im-taking-c-in-college-what-will-i-be-able-to-do/512429>\
**Category:** Factual Questions\
**Created:** [October 3, 2009, 2:42am UTC](https://boards.straightdope.com/t/so-im-taking-c-in-college-what-will-i-be-able-to-do/512429 "2009-10-03T02:42:17Z")\
**Posts on this page:** 5\
**Page:** 2

<div class="post-metadata">

**Author:** ![Superfluous\_Parentheses](https://avatars.discourse-cdn.com/v4/letter/s/8edcca/32.png) [@Superfluous\_Parentheses](https://boards.straightdope.com/u/Superfluous_Parentheses)\
**Post date:** [October 3, 2009, 10:10am UTC](https://boards.straightdope.com/t/so-im-taking-c-in-college-what-will-i-be-able-to-do/512429/21 "2009-10-03T10:10:43Z")

</div>

In response to the question of what you will be able to do after completing the course; if it’s any good, and you want to spend some effort, you’ll be able to figure out how to make **very** basic games and graphics if you can find a nice & simple graphics/multimedia library to go with your C++ environment. Something like [libsdl](http://www.libsdl.org/) might work for you.

---

<div class="post-metadata">

**Author:** ![Superfluous\_Parentheses](https://avatars.discourse-cdn.com/v4/letter/s/8edcca/32.png) [@Superfluous\_Parentheses](https://boards.straightdope.com/u/Superfluous_Parentheses)\
**Post date:** [October 3, 2009, 10:22am UTC](https://boards.straightdope.com/t/so-im-taking-c-in-college-what-will-i-be-able-to-do/512429/22 "2009-10-03T10:22:50Z")

</div>

> [@Spectralist](#):
>
> Really? I found learning OOP made programming much easier. I mean I’m no expert and haven’t taken classes, but I program as a hobby and learning OOP made everything I do easier to conceptualize, faster to produce, and easier to debug. If I had to relearn everything I know about programming OOP would be the first thing I would want to look into. It certainly didn’t seem to add an unnecessary layer of complication. It made programming coincide with how I already thought of the concepts I was implementing.
> 
> I’ve heard the “OOP adds complexity” idea a lot. But to me it always seemed to do the exact opposite.

Speaking for myself, it took me the best part of 3 years to _really_ “get” OO. You’re right that it’s easy to get the basic concepts and start using them - _if you’re already a programmer_ - meaning you’ve already ran into the problems that OO tries to solve. But using OO the right way is pretty complex - it only works if you spend the time to do keep the class / instance / inheritance / composition “meta” design straight with your actual needs. Which distracts from the basic algorithmic stuff that you need to know first. If you don’t know how to do that yet, you’re adding useless boiler-plate code at best.

See the [gang of four book](http://en.wikipedia.org/wiki/Design_Patterns_%28book%29) for examples of stuff that you really do not want to have to teach in an introduction course. - I’m actually quite wary of people who’ve just read that book. It’s an interesting book, but in new readers it tends to cause an explosion of classes and reduces the clarity of the code they’re working on - they seem to forget that you can actually use plain functions for some constructs, for example. Usually, they get better after a while 🙂

---

<div class="post-metadata">

**Author:** ![Capt.Ridley\_s\_Shooting\_Party](https://avatars.discourse-cdn.com/v4/letter/c/cc9497/32.png) [@Capt.Ridley\_s\_Shooting\_Party](https://boards.straightdope.com/u/Capt.Ridley_s_Shooting_Party)\
**Post date:** [October 3, 2009, 11:47am UTC](https://boards.straightdope.com/t/so-im-taking-c-in-college-what-will-i-be-able-to-do/512429/23 "2009-10-03T11:47:44Z")

</div>

Based on the students I get in my class, the answer is “not a lot”. They teach Java at the university here, yet a surprising number of students somehow make it into the second year without being able to write a simple method, or understanding anything of the basics of the language (i.e. why main is a static method).

To echo what the others have said, C++ isn’t a very nice choice for a first language. The matter’s made even worse by the fact that it’s almost a given that what you’ll be taught won’t be idiomatic C++ (i.e. some terrible mix of C and C++, char arrays vs. std::strings, C style casts vs. C++'s safer casting mechanisms etc.), and I’m willing to bet that the vast majority of C++ programs are actually undefined, with respect to the standard (how many times have you seen a\* = i++; or similar, in a C++ program?)

---

<div class="post-metadata">

**Author:** ![Alex\_Dubinsky](https://avatars.discourse-cdn.com/v4/letter/a/dbc845/32.png) [@Alex\_Dubinsky](https://boards.straightdope.com/u/Alex_Dubinsky)\
**Post date:** [October 4, 2009, 5:08am UTC](https://boards.straightdope.com/t/so-im-taking-c-in-college-what-will-i-be-able-to-do/512429/24 "2009-10-04T05:08:48Z")

</div>

> [@friedo](#):
>
> I agree that teaching OO languages in an introductory course is idiotic.

No, no, no. Teaching to write OO is idiotic, but teaching a language that makes use of OO libraries is very wise. At first, people will be pleased with its ease of use. Eventually, when they want to write their own OO code, they will have a much easier time doing so and know why they are doing it.

---

<div class="post-metadata">

**Author:** ![Crowbar\_of\_Irony\_3](https://avatars.discourse-cdn.com/v4/letter/c/f08c70/32.png) [@Crowbar\_of\_Irony\_3](https://boards.straightdope.com/u/Crowbar_of_Irony_3)\
**Post date:** [October 4, 2009, 8:48am UTC](https://boards.straightdope.com/t/so-im-taking-c-in-college-what-will-i-be-able-to-do/512429/25 "2009-10-04T08:48:34Z")

</div>

C++ is just the language. To make games, or produce graphical applications, you would need to learn a library or a platform - SDL is one of the more popular one for graphical applications, while QT 4 is good for GUI. However, C++ is a very deep language and OOP is a really vast topic. The course is just a starting point; at most at the end you know encapsulation, polymorphism and inheritance; more usefully, you know how to manage memory.

Knowing how to do it is one thing though; learning when to apply those principles is a long process of practice, practice and more practice.

[Previous page](https://boards.straightdope.com/t/so-im-taking-c-in-college-what-will-i-be-able-to-do/512429.md?page=1)
