C++ college courses vs learning on your own..

Started by
14 comments, last by termhn 9 years, 7 months ago

So I want to begin learning c++, Ive used some python and ruby before, never got really into c++.. My question is, has anyone taken any C++ College Courses? The reason I ask is that I have about 18 months left in my software development program (champlain college - VT) and I have two C++ classes to take. I would ideally like to get a good grasp on the basics before I get thrown into a fast paced class.

I am currently using "how to program in C++ for the absolute beginner" by Mark Lee. I understand this may not be the best to begin with, but the way it makes you create small simple games holds my attention as opposed to a Java book I have that is mind-numbingly boring.

-What is a good, easy to read book or tutorial to help, I'm open for online tutorials and stuff like that as well

also, I would hopefully be able to create something other than just display a triangle or rectangle to the screen, which I have heard some people have taken programming classes and this seems like their big final project (though some of these people were in Information Systems and not strictly a software based degree)

also, if anyone is willing to 'mentor' or just kind of keep me on track, show me how they started and what small programs they started with, as far as people to reach out to professionally, I have nearly no one in my social or professional circle that understands any of this, nor would want to learn haha.

Any help would be great, thanks.

Advertisement

I think the tutorials over at cplusplus.com are a good place to start. http://www.cplusplus.com/doc/tutorial/

But also, just get familiar with you OS/IDE environment.

As far as the class, this will have everything to do with your professor, the text book, their knowledge, and skills as a teacher. I don't even think you can ever really know what you're in for unless you talk to someone else who's had that teacher. I'd see if you can find out from other students in the program who they had, because there's really nothing worse that a bad programming instructor.

If you are just starting out with C++, don't try jumping in too fast or trying to make the next great computer game.

I think, therefore I am. I think? - "George Carlin"
My Website: Indie Game Programming

My Twitter: https://twitter.com/indieprogram

My Book: http://amzn.com/1305076532

Thanks,

Yeah I took a java class and it felt like i could have learned everything on my own and then some in the same amount of time than the class took. And no I dont expect to have some insane computer game in 13 weeks but Id hopefully get a better grasp than just getting a shape to print to screen. I have seen some good tutorials out there its just trying to hunt them down. thanks again


As far as the class, this will have everything to do with your professor, the text book, their knowledge, and skills as a teacher. I don't even think you can ever really know what you're in for unless you talk to someone else who's had that teacher. I'd see if you can find out from other students in the program who they had, because there's really nothing worse that a bad programming instructor.

To add to this: It also depends on the professor's teaching style. Let me explain, when I was in my senior year of high school, I had a student teacher in economics. He told our class about a college professor he had that would say maybe three sentences on the course before turning the whole class time into a discussion about a family vacation, things he had seen in his childhood, ... basically anything other than what the course was about. All that was written on the board was the chapters and homework and the next class time he would spring a pop quiz over what they should have read. His reason was that he wanted to make the students self reliant rather than just coasting through the course and not really learning anything or pay attention to lectures. So, yeah, you have to be sure what type of professor you are getting.

Other than that story I was told, I agree 100% with what Glass_Knife told you.

Mmm. It depends on the depth you go.

If you are majoring in Computer Science. Then you will go much further than what learning on your own can do.

But if you are only going to CS II, and leaving it at that. You are better off learning on your own.

But then again. There are tricks, tips, and secrets that you will learn in college, that you will normally only learn under chance if you teach yourself.

That chance being you going onto the internet to ask questions, and then someone happens to mention it.

--------------------------

Examples. When you learn on your own, you will more than likely avoid pointers. But pointers are your best friends with a gun to your head. You can get a LOT more done with them and much more efficiently. Both in speed, and in resources. You will also be able to make a program that is more "Real World"

You are very unlikely to learn advanced AI outside of college courses. The most you'd probably get on your own are state machines and motor control.

You are really unlikely to learn how to create your own graphics engine. Sure, there are ones pre-written for you. But even then, major games actually make edits to the render code to make it suitable for what they need. You are also unlikely to go any further than basic graphics.

Really, don't expect to make an overly advanced game without college teaching. But this is highly dependent on your professor, and your ingenuity.

My question is, has anyone taken any C++ College Courses? I would ideally like to get a good grasp on the basics before I get thrown into a fast paced class.


College / university studies are generally NOT job training.

If I am reading the web site correctly, it looks like your school has two options: Computer Science (curriculum) and Software Development (curriculum). Going over their requirements, the first looks like the traditional CS degree, the second looks like a trade school degree.

Not that either of the choices are bad, they are just different. The world needs many types of people.

In my own studies in undergrad and grad school, there were some 100-level and 200-level courses that focused on programming languages. Everything after that they assumed you would pick up the languages on your own as you studied more fundamental topics. Languages come and go, new ones are invented every day. Looking around at three local CS programs, I only found one with a language course in the third year, it was an optional course on "assembly language and computer internals". In compiler theory we needed to not only implement two different languages but also devise our own. It looks like your CS program follows a similar philosophy.

CS usually focuses on algorithms, data structures, analysis of systems, mathematics, and computer theory. Trade degrees tend to focus on using specific languages, moving data from place to place, transforming from database tables and disk into displayed content and back again, and otherwise converting specifications from human code to computer code.

Different jobs call for different skills. The world needs people who encode human specifications into computer code. The world needs people who analyze problems to create and adapt algorithms in unexpected ways.

I would hopefully be able to create something other than just display a triangle or rectangle to the screen, which I have heard some people have taken programming classes and this seems like their big final project (though some of these people were in Information Systems and not strictly a software based degree)

3D computer graphics is more about mathematics than code. Arguments about a structure-of-arrays or an array-of-structures are implementation details that depend on your hardware and usage patterns.

The manipulation of points and vectors and matrices is math, not code.

In my computer graphics course back when I was in school (CS450) the prerequisites included linear algebra and discrete mathematics.

You need to know the topics well enough to describe them to another before you explain them to a computer. If you don't know how to manipulate matrices and vectors, if you don't understand the reasoning behind projecting from R3 to R2, how do you expect to explain it to a computer? If you can't understand the relationship between dot products and vector angles, how will you manipulate the algorithms you don't understand?

I dont expect to have some insane computer game in 13 weeks but Id hopefully get a better grasp than just getting a shape to print to screen.

In CS450 mentioned above we studied computer graphics. In CS455 the following semester each team of three built a networked 3D game in 10 weeks.

I don't know why you chose "Computer Programming" instead of "Computer Science". Job prospects are still good, but the things you learn over the years of education are quite different.

Knowing how to translate someone's algorithm into code is the job of a coder. Coming up with the algorithms is the job of a computer scientist.

I don't expect someone who is "just a coder" to understand the concepts behind a view frustum and the transformations involved in positioning point clouds through transformation matrices. I don't expect "just a coder" to understand how to effectively use the basis vectors inside the transformation. I don't expect "just a coder" to understand the relationship between surface normals, silhouette edges, and shadow volumes.

I do expect the same "just a coder" who didn't understand the math concepts could take an algorithm using those features and translate them into computer code in an efficient manner.

It is just a question of which job you want. Do you want to be a person who encodes algorithms previously designed by others, or do you want to be a person who invents and discovers new algorithms to problems that haven't been imagined yet? Or do you want a different job entirely?


What is a good, easy to read book or tutorial to help
C++ Primer (latest edition) by Lippman, Lajoie, and Moo (starts at beginners, works you through to intermediate skills)
Accelerated C++ by Koenig and Moo (similar to above, starts simple, works up through intermediate)
Effective C++, More Effective C++, Effective STL by Meyers
Exceptional C++, More Exceptional C++, Exceptional C++ Style, by Herb Sutter (Explains many subtle insights and also gotcha's)
The C++ Standard Library by Josuttis. (Dated, but still extremely instructive. Expects a lot of knowledge, gets very in depth.)
C++ Coding Standards by Sutter and Alexandrescu
Modern C++ Design by Alexandrescu
C++ Templates: The Compete Guide by Vandevoorde and Josuttis
You'll note that several of the co-authors are duplicated in those books. Several of these people are heavily involved in the C++ language committee, such as Herb Sutter who has been in charge of the committee for most of its life. Koenig, among other things, helped with several important language features including what is referred to as "Koenig lookup". Alexandrescu's work has helped improve consistency among a bunch of features along with a lot of pioneering work on features most of us take for granted. Other authors on that list are similarly well-regarded.
Many people also recommend The C++ Programming Language (4th edition) by Stroustrup so I'll mention it, but I wouldn't put it with the others above. While the first and second editions (1986 and 1992) were effectively the C++ language standard during that era, those days are long past. There is a standards committee and he is on it. While the language stems from his work at AT&T and he continues to guide it through the committee as a member, it is not him but the committee in charge of the modern standard that was released 1998 and updated in 2003, 2007, 2011, 2014, and another expected in 2017. While this book has the occasional insight and covers some history, if you're at the point where you'd use this as a reference you are probably better off going directly to the actual current standard instead.

To add to frob's list I will post my normal list for learning C++:

  • Programming Principles and Practice Using C++ Second Edition by Bjarne Stroustrup
    • Is a book designed to help you learn to program (if you have never programmed before) using C++ as a tool. It is also the intro course book for several degrees at Texas A&M University. Not to mention it is written by Bjarne Stroustrup himself.
  • C++ Primer Fifth Edition by Stanley B. Lippman, Josee Lajoie, Barbara E. Moo
    • The usual recommendation for Beginner C++, but that phrase is a little misleading. It isn't a book for someone who as never programmed, but rather a book for a programmer who is experienced in another language and looking to learn C++ now. It covers C++ more in-depth.
  • The C++ Standard Library Second Edition A Tutorial and Reference by Nicolai M. Josuttis

    • ?Covers the standard library in-depth.
  • The C++ Programming Language Fourth Edition by Bjarne Stroustrup

    • I recommend this purely as a reference book. It too is written by Bjarne Stroustrup. You can certainly read it cover to cover if you like, but it makes a better reference than a book about learning due to its technical nature.

-What is a good, easy to read book or tutorial to help, I'm open for online tutorials and stuff like that as well

also, I would hopefully be able to create something other than just display a triangle or rectangle to the screen, which I have heard some people have taken programming classes and this seems like their big final project (though some of these people were in Information Systems and not strictly a software based degree)

also, if anyone is willing to 'mentor' or just kind of keep me on track, show me how they started and what small programs they started with, as far as people to reach out to professionally, I have nearly no one in my social or professional circle that understands any of this, nor would want to learn haha.

I post C++ video tutorials on my website when ever I have spare time. You'll also find a step-by-step tutorial series that takes you from a blank Visual Studio project to a 3D dungeon crawler game created using OpenGL. So if you are interested, have a look.

I also take requests for video tutorials. If there is a specific topic that you want to learn, just email me and I'll create a tutorial and post it on my site if I haven't covered the topic already.

Currently, I am taking a C++ course called Graphic programming but its a CS 370.

You should read a book called OpenGL. I would say you should read a book and learn on your

own. it is always better.

Use this site http://www.cplusplus.com/doc/tutorial/

and get familiar with C++ library because C is just programming side and C++ is the extended

version of it which is objected oriented too.

In terms of IDE you can use Eclipse, or netbeans.


You should read a book called OpenGL
There are several books featuring OpenGL as the primary part of the name.

The three major books are the "red book", "blue book", and "orange book". The "Red Book" is the OpenGL Programming Guide. The "Blue Book" is the OpenGL Reference manual. The "Orange Book" is the OpenGL Shading Language.

The current version of the Red Book is often used as a teaching guide, followed with the Orange and Blue books as reference. All of them assume you are comfortable with programming in C already or using a language with C bindings like C++, including the manipulation of function pointers.

There are also the older "white book" and "green book" that target Windows 95/NT and X11 specifically, but both are from the mid 1990s and have not been updated. Avoid them unless they issue a new version.


get familiar with C++ library because C is just programming side and C++ is the extended version of it which is objected oriented too.

Wtf?

C and C++ come from the same language roots. Before the great homogenization compilers needed to be adjusted and modified to fit different machines. During the 1970s there were hundreds of variants of C that came out of different labs that modified the compilers to different machines. Ultimately the K&R version evolved in to modern C, and the AT&T Labs version evolved into C++. The languages have been different since around 1987.

For trivial programs you can write code that runs on lots of systems. I've seen creative (but still trivial) programs that can compile and run on java, C#, C++, and C.

For any non-trivial program, the languages forked over thirty years ago. Modern C and C++ and Objective C are close siblings, sharing their root from the pre-K&R C language.

Well-written C code does not compile on a C++ compiler. Even back in the 1980s the C++ compiler would complain about all the conversions, especially as everything in C slides through the void* conversion. Memory allocations should either warn or not compile due to conversion issues. Initializing blocks of memory should similarly complain. Most object manipulations will complain about it as well. Many new C features don't exist in C++. Large code bases are likely using keywords found in C++.

Similarly, well-written C++ code does not compiler on a C compiler. The extra keywords and additional language constructs are different.

As for the "object oriented" part, that is a usage paradigm. Much of the object oriented feature set came out of C; the language can absolutely follow object oriented paradigms. Remember that early C++ compilers simply translated the code, mangled some names and added hidden parameters, then ran it through a C compiler. Most C programmers absolutely follow object oriented paradigms.

C and C++ are different languages. They are closely related siblings, but have their own separate identities.

Of course, you can limit yourself to a pre-1979 subset of proto-C, something resembling both languages and mostly works okay, but I'd avoid that if possible.

This topic is closed to new replies.

Advertisement