Relatively new to programming, however I want to learn a bit about C-based languages, could anyone tell me where I should start? I just want your opinions on which are relatively easier to get a grasp of for beginners? I hope this question isn't too vague and causes any anger towards me

Start using C++, but learn its programming features one by one. A lot of people recommend C because it's simpler -- I recommend starting off with C++ but doing mostly C-like things; C++ is essentially C with a lot more features and automation.

Essentially there are a ton of different programming paradigms and features and stuff in the C++ language and it tends to create a lot of confusion because of how many different ways there are to approach any given problem. So don't worry about virtuals, or templates, or all the other fancy crazy stuff until you've got your head around the super basics: Pointers, math, basic classes, and maybe a graphics API such as the opensource libraries SDL and SFML.

Logged

Creativity births expression. Curiosity births exploration.Our work is as soil to these seeds; our art is what grows from them...

My suggestion is to start with C because it's a solid foundation for further learning. My personal opinion is that learning C++ is much easier when you are already familiar with C, and the other way around is, well, harder. In C you need to rely on low level constructs and this forces you to learn about computer architecture and operating systems. It's much easier to get carried away in C++ because much of what you're going to use is abstracted away from you, so you don't ever get to the bottom of it, you just see the effects. In C you get to the bottom of things and this will make you understand what is actually going on in the abstractions you use.

Also learning OOP is considerably easier when you are already well-familiar with the procedural realm.

Start with C++, don't get tainted like many programmers doing things in the C way that can be done easier in C++.

This I can agree with. To be fair, you can become "tainted" either way, but in my opinion it's better to be "tainted" by C++ than by C. Why? Because C is nearly a subset of C++, and if you figure out some crazy way to do something in C, and later have to do it again in C++, you're going to do it the "C way;" while if you learn some crazy way to do it in C++, the odds are that way is just going to be impossible/extremely difficult in C. So you will be forced to learn the "C way" anyway.

Though, it is possible to be tainted by C++ in such a way that you end up writing all your C code with pseudo object-orientation and a proliferation of structs. I just think this is better than writing C-like code in C++ (especially using POSIX stuff instead of STL and other such no-nos).

I also think it's simply not true that C is an "easier" language to learn than C++. In C, you will be very proud of writing an incomprehensible program full of bit twiddling and pointer arithmetic that would have been accomplished in 10 minutes using an STL container and iterators.

C++ is a superset of C, making C not nearly, but exactly a subset of C++

I'm not going to comment on the language of choice but rather emphasize that persistence is key. Whichever you pick, you really need to write actual working code to learn it properly. The choice (especially when the two are so similar) matters very little compared to this.

Relatively new to programming, however I want to learn a bit about C-based languages, could anyone tell me where I should start? I just want your opinions on which are relatively easier to get a grasp of for beginners? I hope this question isn't too vague and causes any anger towards me

Start with C++, don't get tainted like many programmers doing things in the C way that can be done easier in C++.

This I can agree with. To be fair, you can become "tainted" either way, but in my opinion it's better to be "tainted" by C++ than by C. Why? Because C is nearly a subset of C++, and if you figure out some crazy way to do something in C, and later have to do it again in C++, you're going to do it the "C way;" while if you learn some crazy way to do it in C++, the odds are that way is just going to be impossible/extremely difficult in C. So you will be forced to learn the "C way" anyway.

Though, it is possible to be tainted by C++ in such a way that you end up writing all your C code with pseudo object-orientation and a proliferation of structs. I just think this is better than writing C-like code in C++ (especially using POSIX stuff instead of STL and other such no-nos).

I also think it's simply not true that C is an "easier" language to learn than C++. In C, you will be very proud of writing an incomprehensible program full of bit twiddling and pointer arithmetic that would have been accomplished in 10 minutes using an STL container and iterators.

I would have suggested learning C first until I read this. Having gone from C++ to C myself, this actually makes a lot of sense to me. As eigenbom (kinda) said, grab a copy of Visual Studio(Windows) or XCode(Mac) and start throwing some stuff together: http://www.cplusplus.com/doc/tutorial/

Try the wibit.net tutorials. It's good enough for learning professional level programming from scratch. Plus they're fun to listen and follow.http://www.wibit.net/

They recommend C -> C++ -> Objective-C -> Java/C# for a good reason.

You can of course, just go straight to C++ if you like.

I prefer the bottom up approach. It's easier to go top down, but you're less likely to appreciate why some things work that way. It's kinda annoying to 'lose' features like object oriented stuff as you go down. Whereas if you go the other way, it's harder, but more fun as you'll be 'unlocking' new features.

If you're serious about being a programmer, learning low level stuff like C's memory management stuff is important (and a common interview question). If you want quick gratification, do Java/C#.

Relatively new to programming, however I want to learn a bit about C-based languages, could anyone tell me where I should start? I just want your opinions on which are relatively easier to get a grasp of for beginners? I hope this question isn't too vague and causes any anger towards me

I would suggest C for an inexperienced programmer. Simply because C++ is overwhelmingly huge, and you will never learn it in full. So, imo, you should first get a solid understanding of what a programming language is supposed to do by learning C, and only then try C++. That said, C++ is more convenient language.

The main problem with learning C first is that you have to understand pointers and const char arrays to do something useful, while in C++ you have to avoid them as much as possible.

Which is why I would recommend learning to consider C and C++ widely different languages. It's harder than it looks like to ignore your C background when working with C, but you get it by working with widely different languages.

The main problem with learning C first is that you have to understand pointers and const char arrays to do something useful, while in C++ you have to avoid them as much as possible.

I don't recall C++ needing you to avoid pointers and char arrays. Many of us never used the STL, and still don't.

Well, I guess each shop is different. In the lab I work at, we have an enormous C++ codebase filled with horrible coding practices from different academics over the decades. Some of the worst bits of code are those coded by "C people" who are either ignorant of the STL, or think the "C Way" is "more elegant". I'm constantly having to write horrible boilerplate code to interface the non-STL-non-boost C-like code with the newer boostified-STL code. One guy even wrote his own sorting routine that was a bastardized version of merge sort which only worked on his hand-coded linked lists. His code even had #define and printf all over the place for debugging. Down the line, we wanted to add features to his part of the codebase, and were horrified to see this little gem, and weren't sure how to extend it. We ended up gutting the whole thing and replacing it with a single call to std::sort over an STL container. It was both faster and easier to maintain.

So I guess I'm biased toward that kind of coding style -- but of course all of this could have been prevented with actual code reviews and code standards; but that's how things work in academia I suppose.