UVU students just starting into Computer Science this year aren’t exactly getting what they are paying for. Many of these students have a desire to be prepared for industrial software development and are being robbed of the opportunity by a few UVU professors with a greater ambition to further their own ideas than actually instruct and prepare students for the future.
This fall (2009) UVU Computer Science students are being subjected to learning C# as a beginning course rather than C++. This decision was made without consulting students and without consulting industry workers.
In the past students have had the opportunity of choice to pick their development environment. C++ has many different implementations, and can be done on just about any platform. This choice has been taken away as some professors choose to grovel to the great software giant in Redmond Washington. The argument from these professors is that the choice isn’t taken away due to projects like Mono. This argument would seem not to hold much water because it would segregate students not using the “standard” Operating System.
Failing to teach fundamental, and core principles to enable faster development of more abstract concepts robs students of valuable knowledge that could be used to carry them forward in the field of Computer Science. Principles like pointers, and memory management for solving less abstract problems are essential in more advanced courses. Do professors think this all just too hard? Will adding a C# as a crutch help or hurt students?
As a graduate of Utah Valley University I am quite disappointed in the lack of research put into this decision, as well as the lack of concern some instructors have for their students. What will happen to these people as they try to program in C for their future Operating Systems course? My belief is that these professors have truly lost their connection with students, and are much more interested in pushing forward their own personal agendas.
12 thoughts on “#include what the…..? // UVU students”
Sorry, totally disagree here. Beginners should get a language where low level crap like memory management is automatic. My degree was Java-heavy in 1st year and I think it was absolutely the best choice. C++ simply IS harder no matter how you look at it and beginners too dim to install Ubuntu and MonoDevelop are dangerous with malloc. Top down > bottom up
While I agree that this probably isn’t a wise move, and think it’s better that students start with C++ (as it gives them a broader base to start from), I doubt the decision to move this direction is anywhere near as nefarious as you make it sound. It was probably along the lines of:
“C++ is silly and outdated. Let’s teach a modern language instead.”
“Ok… C# is widely used, how about that?”
“Cool, sounds good.”
Unless you have some kind of evidence to indicate there was an ulterior motive here…?
“Top down > bottom up” -Jo Shields
“My degree was Java-heavy in 1st year and I think it was absolutely the best choice. C++ simply IS harder no matter how you look at it…” -Jo Shields
I agree it is harder, but IF one can make it through learning a harder language wouldn’t that enable them to learn an easier one faster? I learned Java after C++ and found Java to be simple.
“Unless you have some kind of evidence to indicate there was an ulterior motive here…?” -Dan
Only overheard conversations…and the fact that I’m quite sure I know who started the whole process.
The problem with starting students in C# instead of C++ is not that they’re being coralled into MSFT-world — because truthfully, that’ll happen when they graduate anyhow. The problem is that if they don’t learn REAL computer science, they won’t be able to use C# to its fullest because they’ll have always lived in a managed code environment and not learned to speak computerese.
I think I was a little hasty in posting this….so hasty in fact that I missed the most fundamental part of my argument. Thank you for pointing that out. (Revised my post)
Ishpeck is on to what I was thinking. It’s not a fact of environment its a fact of the fundamentals of computer science. C# as much as I love the language teaches students things such as garbage collection that are better left for upper division courses. The fact that our initial courses at UVU are still called (and practiced) Object Oriented Programming I & II is the root of the problem with UVU. There is life after Object Oriented Development, and it is good. Developers that don’t learn about Procedural, Declarative, Aspect Oriented, and Functional programming models are at a disadvantage IMO since they only see the world in objects. While this might not be a problem to someone who plans on living only in a Java or C# world, I for one won’t hire an ignorant git that speaks only OOP and can’t tell me how to deallocate an object in C++.
Totally agree! Amen to all of that.
I just spoke with my adviser and she is telling me there is still a choice. i’ll check around further, but this may be a non-issue
This post is a little overdramtic. Memory management *really* isn’t that hard of a concept to grasp. C# enforces modern OOP which is benefitial to get in the habbit of using before learning about things like the folley of multiple inheritence, etc.
Besides, C++ just really isn’t as relevant in todays industry.
“Besides, C++ just really isn’t as relevant in todays industry.”
Tell that to all Embedded Systems companies who have enough bravery to put BS CS next to BS EE on their job requirements.
Maybe memory management alone isn’t that difficult of a concept, but thinking in multiple levels of abstraction simultaneously is a great way to separate the men from the mice. When dealing with pointers one must think about how that pointer is being referenced in terms of the rest of the project. Its a great (high level) introduction to dealing with assembly.
It seems to me that CS is a combination of Pointer Theory and Lambda Calculus. Without the Pointer Theory how can anyone call themselves a computer scientist?
The contention that “students will live in the M$ defined world” out of school is simply wrong. Solaris and HP UX are BY FAR the most frequently run OS in large corporate environments. The code that runs on those environments NOT C#.
Also, large companies strive to avoid getting locked into monopolistic environments where a single vendor can dictate costs….so MS OS platforms are the least desireable place to be….UNIX variants are the place where corporations have negotiating leverage between vendors (HW and SW), so that is where the real money gets spent.
Finally, top down vs bottom up. OOP vs Procedural. C++ vs C# vs C vs Java vs (whole host of procedural languages). Seriously, the best programmers…the ones people fight over, code circles around everyone in all of these languages. And it’s usually the same guy (or girl) who has the full spectrum of skills. Good CS people have a mindset that makes them inquisitive and tenacious. The best folks I know do it all. I say that if you can’t survive a C++ class early on , you need to find another major, because you are going to get stomped by real programmers in the real world.
Ummm… Completely disagree with this post. Seems more like M$ bashing than anything real with substance. Regardless of what you may think, M$ has actually done a pretty good job with C#/VB.Net/.Net Framework and related technologies. Not saying it’s right for every project/situation, but it’s big enough that every CS student should definitely be getting his/her feet wet at some point in time. Understanding and using the M$ dev tools is also an absolute plus in today’s market.
The real purpose of any intro course is to teach intro programming concepts. C# is an excellent language for that task. C# can also be an excellent language for teaching many advanced modern topics as well. And contrary to your post, you actually can teach both pointers and memory management in C#. The fact the C# is GC’d doesn’t mean you can’t teach these topics in the language. It just makes it optional to teach for an intro course. It’s totally up to the instructor and the defined scope of the course work.
C is an excellent language but there’s a reason C++ came around and there’s a reason both Java and C# like languages have come around and there will be something new and (hopefully) better in our future. Any good CS major can tackle the new or old, learn what he needs to be productive/innovative and make his own career/path in the industry. If that means figuring out 8086 assembly or C# or any multitude of other possibilities, so be it. Is also means that the language itself is not nearly as important as understanding important CS concepts/patterns/theories and being able to apply them to a given task using the language and tools at hand. In some cases you’ll need to push for a more advanced language and/or tools as needed. The broader your language/toolset knowledge, the better off you’ll be.
The advanced CS course work at UVU will give each student plenty of additional opportunity to either learn or crumble. The choice is on each student.