Solar wrote:
It's not a war; it really isn't, not for me. This is relaxed chat, for me. If it isn't for you, sorry, and this is my last post on the matter as well.
I don't want discussion to turn in to war either but.. it's super easy to get heated when opinions diverge so much and we do the mistake of trying to convince the other person.
Solar wrote:
This is something I have experience in, and if you and I had the time (I don't, though, sorry) I'd love to show you what I mean in practice. I completely understand your POV, I've been there not that long ago myself. I even started an online blog series to teach C++ "ground up", "oldschool", which was how I learned it myself after all.
Which was exactly when I realized how many problems you create that way.
OK, I appreciate the good intentions. I'd just say that almost everybody out there believes in what you're saying and all the conferences about C++ repeat the same point over and over again. So, I honestly believe that my approach is in the minority here.
Solar wrote:
Not a defect, but a crutch, dating back to a time when pointers were all we had. You don't need pointers when you can have references -- which, incidentially, can never be NULL. References are simply superior to pointers in every conceivable way.
I disagree, but I believe that, in your world-view about software development that makes completely sense. Again, we don't disagree in details, we have a fundamentally different
system of values. We're both right in our own
system of values. Unfortunately for me, most people in the industry are closer to yours than mine.
Solar wrote:
See? You think "linked list", and immediately think about its innards, about the "next pointer" in there. I think "linked list" and immediately know that that's a standard container I can just use.
Yep, I know that position. You don't want to teach people a deep understanding of software. You want them to just use pre-built blocks without thinking. Alright.
Solar wrote:
Thinking about innards, thus breaking the abstraction, is exactly the kind of thinking that perpetuates problem of people approaching C++ bottom-up. It absolutely does not matter how a linked list works internally, because we have a complete implementation available.
If you don't know how it works internally, you won't be able to use it well. You'd use it
mechanically, often in the wrong place or in the wrong way. When I was studying CS, I remember how many students before my eyes didn't pass the test because the professor noticed that they used Java's LinkedList's get(int index) method inside a for loop, leading to a quadratic complexity. They should have used ArrayList instead.
Solar wrote:
The most aggravating thing I know is instructors asking their students to re-implement standard functionality (like writing their own list class, or implementing bubblesort). It's wasted time; chances are you never will have to actually write anything like that in the field -- not if you did spend that time learning what is already there, and how to use it, instead on how to re-implement it.
Well, how can we be further than this? You want people to use things without knowing how they work. That's a very efficient way to write
bad software IMHO. I believe in the opposite: before using something, you need to have a
decent understanding of how it works. The best way of having a good understanding of something is to re-implement it, for educational purposes.
EDIT: grammar and typo fixes.