In college our intro classes were in C++. While its a tough language I do wonder if it was advantageous to forcefully learn about 1) value vs reference types via pointers and 2) how allocation maps into memory space. Not having that level of depth kinda worries me
Sure, but a systems-oriented course is the right place to pound that into people. Not CS1.
CS1 should be an introduction to the nature of the discipline. I can think of many things more important and more representative of the nature of computing than the semantics of C.
For 90+% of the problems out there, a business programmer doesn't need to know anything about memory#. Short of a few rules, I don't see why they can't ever go without learning about memory space, allocation, reference types, etc.
They will make mistakes, sure. But they will get the work done, and that's pretty much what most businesses need. Eventually, as problems creep in, the messes created by lack of knowledge get resolved/cleaned up.
Programming is incredibly easy and powerful, when made simple. The problem is that learning programming in C/C++ is anything but simple! And the only reason we'd think otherwise is because we already went through it, somehow.
I've seen non-technical minded people learn programming with C/C++ as their first language. They get frustrated because they don't know why certain things work magically while similar things don't. So they end up learning to memorize what works and what doesn't, and copy-pasting what the book tells them. Eventually kludging together a working solution to a problem in the book. With no hint of understanding why.
Wrong.Customer currently used to google speed.They want very speedy system and fast analytical decision making.Batching is old news,new system must speed 800% because customer paid high end core proc
I can see this rationale as an argument if it was an associate's or 1 yr degree, but for four years of study I expect real depth about what's happening all the way down memory etc
For 4 years study you dont need to learn C as your first language. You also get the benefit of being able to focus on the low level stuff when you finally go over C, instead of having the language do double duty of teaching both low and high level stuff at the same time.
Then I'd say: What you expect is required and what is actually required to complete the task to a client's expectations could possibly be two very vastly different things.
Besides, most of what is being asked of four-year-degreed individuals is not really worthy of it. Which is why I keep mentioning stuff to the effect of "to a client's expectation" to most of my comments on this.
My college programming intro class is C++, which IMO is a total nightmare.
It is not that I don't agree with your point, actually I think It makes perfect sense. Eventually, anyone who considers him/herself as a serious CS student has to get his/her hands dirty with those relative low level languages in order to have a through understanding of what computer really is and in reality how it works.
Ironically, it is this very same reason that makes C++ as a entry point into programming a horrible idea. Because in order to understand it, IMO, a solid understanding of computer architecture is a MUST. Things like how memory is allocated, how call stack works, and why IO interfaces looks like it is now are unrealistically hard to take in a single course for those new comers with definitely zero programming knowledge, who probably would scratch their head out all night wondering why the following code snippet doesn't work (which wasn't valid back then in my freshman year, don't know whether it is valid now):
And as it is a entry level course, usually a lot of details are skipped which makes it even more confusing. Telling from my personal experience, it is really frustrating that I once want to quit programming for good.
Luckily enough, I got to know Python at that time. In relatively short period of time, I could come up with a simple web crawler to scrap and download movie torrent files from the web. This is important to me that for the first time I realize I could do something both INTERESTING and USEFUL with programming language, which in turn gives me the motivation to go back and look at those lessons I run away from.
C++ makes it harder to work with functions/lambdas and the memory management makes some easy things much harder (for example, list and string processing)
This is about an introductory language. No one is saying CS students shouldn't eventually learn those concepts, but why would you want to bog down an introductory course (with non-CS students, many of which probably haven't written Hello World before) on that material?
Valgrind is bandage sadly only available to GNU/Linux developers with lots of RAM to spare. Not fully available, if at all, when other systems need to be targeted.
Fully agree with static analysis.
My point is that at least with C++ you get the help of stronger type checking, RAII and automatic memory management via the available collections.
But of course, the C compatibility is both an advantage in terms of helped adoption, but also a weight in terms of being able to write secure code.