One of our WiBiters brought to our attention that a reddit post mentioned us as a “Discouraged Resource” for learning C++. Let’s take a second to look at the criticism and see what we think!
One of our users sent us this URL: https://www.reddit.com/r/learnprogramming/wiki/index
On it, WiBit.Net is listed as a “Discouraged Resource” for learning C++. We took at glance at the justification (because this person only took a short glance at our content) and decided to respond, just for fun. Why not! Our intention is “tongue and cheek”, and playful. No intention to be offensive, dismissive, or combative. So, please read this blog post with that set of ears!
First of all, one important thing to know is that there are a lot of programmers out there that carry a ton of arrogance. What they understand and how they understand it is the “only way” anything can be viewed. We, however, like to put our viewers in the driver’s seat. All of us at WiBit.Net are extremely successful programmers in the professional field of software development. I don’t say that to boast, but just to remark that people that have done it at a high level are typically a great resource to learn from. Not saying we’re the best, but we’re not incompetent (and neither are the other sources listed at Discouraged either). Is there room for improvement? Yes. Are there legitimate complaints put forward by this person? Yes. And we will address them, along with any that are reported to us.
Let’s start by reviewing the exact criticism as made in bullet point form (even putting semicolons at the end of each… cute):
Thanks, I didn’t know of the wibit.net website.
Unfortunately, again the C++ section looks rather bad. (I haven’t looked at the other sections.)
- If you want to learn C++, you should definitely not first learn some C;
- They have no clue what objects in C and C++ are;
- They link to cplusplus.com;
- File input and output is not explaining it properly (no need for open() and close(), for example);
- They use cin.getline() with characters arrays!
This was just the first few minutes of the first two video’s, but I don’t see any potential for improvement. This is a prime example of (not too good) C programmers using C++ as an extension to C instead of what it could and should be.
We believe that everyone is entitled to their opinion, so we don’t want to make this person out to be anything other than a commenter and critic of WiBit.Net. This person admits to only watching the “first few minutes of the first two videos” and I guess watching 10 minutes of a 12 hour course is more than enough to judge the entire content (sarcasm). I recall watching the first few minutes of the movie Inception and knowing everything that was going to happen (sarcasm, again).
This person’s opinion is that learning C before C++ is wrong, or at least not necessary. Here is this justification:
If you want to learn both C and C++, you can do so in any order (even so personally I would recommend C++ and then C). But is you want to learn C++, first learning some C is a very bad idea because although C++ inherits a lot from C, nearly all of it is something to be avoided in C++. Knowing some C will hold you back because you’ll think how to do something (and even worse, it works! so it must be good) and this will hold you back in C++. (This is not just me talking, but also all C++ experts, see e.g. reviews on books which start with C constructs. Not pretty.)
Our opinion is the opposite. Apparently we not only disagree with this person, but all the experts from the book reviews also. That makes WiBit.Net a rebel with a cause! We look at this as just plain and simple. C++ inherits a lot from C. Of course one can be learn without the other. Our outlook is that we recommend learning C before C++, and before C#, Java, PHP, Perl, JavaScript, blah, blah, blah.
We lay out our case to back this opinion in our course content (numerous times). We believe that learning the foundations are extremely important. C is not just the foundation of C++, but it has inspired many other languages (too many to mention). Also, C can be directly used as-is in C++, and there are a lot of great functionalities in C that are easy to use and well established. I have used C written API’s and C written imports in C++ before, and I am sure many others have also. If I did not know C I may not have all the skills I need to work in both languages. Having a baseline understanding of the basic syntax, program flow, how to call functions, pre processor directives, variables, pointers, yada yada, are 100% applicable in C++. We will have to agree to disagree with the opposing opinion. WiBit.Net believes that learning C springboards you into other languages easier (as explained in our C Course, which this person admittedly did not watch).
Programming In C :: Introduction :: Part 1 (00:50)
Bryan: …we think you should learn C now. And that’s because most programming languages that you’re gonna use, if they’re not the C Language, they are probably heavily based on the C Language. Learning the C Language will give you the most versatile, robust, and mobile skill set with which to translate your knowledge into other languages. So once you learn the C Language jumping from C to C++, or C# or PHP…
Kevin: Java…
Bryan: …or Perl or even Pascal, or whatever it is, will be a much easier transition once you learn the root commonality of all these languages, which is The C Language.
Kevin: And where they basically all derived from.
Bryan: Absolutely.
Kevin: So, we’re going back in time so that we can move forward.
Bryan: Also, the C Language has been in wide spread use since its inception. There’s still a lot of cases where you would still use the C Language today. As we said before, it’s lower level, it’s fast, it runs very well, it’s very efficient…
I guess we can put this one in the “Opinions are like ***holes. Everyone has one” category. People who teach come from pretty much one of two camps: (1) Academia and (2) Real world experience. I rarely find people that come from both sides. Those who go down the academic route often teach people how they were taught, and people who teach that learned from real world experience often teach how they learned their skills. We (and many many others) found that C++ made more sense when we went back to learn C. C and C++ are highly connected not only by their syntax, compiler, and many more attributes, but C++ is totally and completely based on C. Also, research the “C-Family Programming Languages” and learn of the many other languages that have their roots in C.
They have no clue what objects in C and C++ are;
Here is the justification for this statement:
I meant the first, although some might see it as the second. What prompted me to this remark were two things. First they refer to std::ios_base as an object (which it’s not and actually never can be) and then they say C++ uses “objects” to handle file input and output, whereas C uses “pointers”. This is highly misleading, because a pointer is just as much an object as are the C++ ifstreams etc.
In C and C++, an “object” is simply an area of memory with a type. That’s it. So std::ios_base is not an object, it’s a “(base) class” or a “type”. Moreover, it will never be an object, because it’s not possible to construct a std::ios_base variable (because it has no public constructors).
Bryan does say “These are all objects… just think of it in those terms” in the Basic I/O video. Technically, they are not objects, admittedly. They are classes and abstract classes. So, this guy “got us” here. The next slide though, Bryan explains the difference at 1:09 into the Basic I/O lesson where he specifically mentions that ios_base and ios are the ‘base classes’ for all of the stream classes. Which this person also points out, but then again, so did we.
I suppose we should specify our opening paragraph more clearly what our intent is so that this is not taken in the wrong context. However, in the Introduction to Object Oriented Programming course we did specify the difference between Objects, Classes and Base (Abstract) Classes, so our viewers most likely would know the difference in-any-event (if they followed the curriculum, as intended).
As far as the statement “they say C++ uses 'objects’ to handle file input and output, whereas C uses 'pointers’…”, and that this is “highly misleading”. I suppose that this viewpoint holds valid, and from a technical standpoint we are not 100% accurate in making this statement. However, the fopen function in C does result a pointer to an instance of the FILE structure, so it is a pointer using native C and rarely not used in this way (at least in all my years I have NEVER seen it used any other way). Yes, pointers are a generic concept in C/C++ (as explained in the C Course, that this person did not watch), but I don’t think it is fair to say this explanation (intended for someone with no knowledge of C++ at all) is “highly misleading”. At worst, it is a “partial truth”, however, this does get cleared up later in the course. This person probably just did not make it that far.
I think this person would need a bit more understand of our content to claim that we “don’t have a clue” what objects are in C & C++. I think we make it pretty clear in the courses in the order they are designed to be followed that we have a very good “clue” what this concept is. We’ll have to agree to disagree with this statement as well.
They link to cplusplus.com;
So do many other resources. This was also mentioned as a Discouraged Resource as well, which we disagree with. We are not a perfect resource, and neither is cplusplus.com, however, not everything is perfect, nor does everything conform to preconceived boxes that some people have. There are some studies that have show that Wikipedia has an average of about 3 errors per article, and others that claim higher. Encyclopedia Britanica was shown to have approximately 4 errors per article. Just Google “how accurate is wikipedia” and do your own research. Not every single resource is perfect, and nor will it likely be.
File input and output is not explaining it properly (no need for open() and close(), for example);
I would like more on this one. For instance, just Google “C++ File Input” and many resources show the method we used in our course. If this person is referring to using streams for file input and output (which is not supported in C) then they should have stuck with the course! We explained streams later on. This person must “have beef” with almost every single C++ resource, I would have to assume, because this is taught almost everywhere similar to how we taught it. I don’t really know what else to say about this.
They use cin.getline() with characters arrays!
Yes we did. Why did we do this????? Well, we had not discussed the string class yet. We assumed that our viewer watched the C course, which uses C Strings. Therefore, our first example showing getline() does in fact use character arrays. This was done to keep the context familiar to the user who “knows” C (from watching the Programming in C course), and does not know the string class yet. After the String lesson we show how a String can be used as a stream, however, we DID NOT go back and show getline() using strings.
So, I will admit “we got got” on this one because we did not show this. Bryan and I will add an addendum when we have a second so that people can have exposure to this. I think that we use getline() with a string in a Lab, however, it should be mentioned in the course content as well.
Alright… Just one more paragraph to get through!
This was just the first few minutes of the first two video’s, but I don’t see any potential for improvement. This is a prime example of (not too good) C programmers using C++ as an extension to C instead of what it could and should be.
So after a few minutes of a few videos this person is so perceptive that he or she doesn’t see “any potential for improvement”, which I have to assume means that there is no potential that the course will improve on itself. I wonder if I could make the same argument in my book club! “I read the first page of the book, and I just don’t see any potential for improvement, so I will not read the rest of the book, or even the first chapter”. I will have to remember that one! We are also accused of being “not too good” C Programmers. Ouch! Actually, we are pretty good programmers. But that is one person’s opinion. This person also knows how C++ “should be” used, assuming that our approach is NOT HOW IT SHOULD be used. Well, again, that is quite opinion rich, and I would not accuse this person of not using C++ as it should be used because at the end of the day a programming language is a tool. You use it however you need to use it to get the job done. In the end code needs to be useable, portable, efficient, supportable, and provide value (that is how I rate code that I review). Again, opinion, but I think it is quite a good one based on a lot of years of experience programming and managing programmers.
We do appreciate the criticisms. Based on this review we have at least two things that we need to add to our C++ course. So, for that we are grateful! Although, it could have been delivered in a less “holier than thou” spirit. To have our C++ course labeled as a “Discouraged Resource” for such small rather nitpicky reasons is unfair, because no source is 100% how YOU want it to be, and there will inevitably be errors, innocent mistakes or unintentional misconceptions.
Out of the billions of Internet resources only a micro fraction of them are non-bias and 100% accurate. We try our best to be as accurate as we can, leave our bias out of it (or at least make fun of our biases) and also keep the fun casual nature of our content to make it more engaging for our viewers!
If you find any inaccuracy, half truth, outright lie, or just something that pisses you off about our course content we would love to hear from you! Just email us at [email protected] and we will be happy to take a look at your complaint, and if we feel an edit or addendum is necessary we will do it! We’ve added addendums many times throughout our existence (most of them are labeled), and almost all of them came from a viewer with a question or complaint.
Thank you for readying my rant! Would love to read your comments if you have any! My intention is not to pick a fight with someone, but really to just have a bit of fun.