Page 1 of 2

What kind of programmers are schools creating today?

Posted: 2004-08-31 02:59am
by Durandal
I got into a little discussion with one of my hardware and architecture professor today, and we got to talking about the programming courses that students take at the school. Up until last semester, we started students off in C++. There is a two-course sequence designed to introduce them to programming.

Now, those courses have moved over to Java; I'm taking the last C++ section of the second course to be offered. I told her that I thought this was a bad idea, mainly because after getting out of those two courses, the students wouldn't be familiar with memory. A language like C/C++ provides lower-level memory access, so you have to develop good programming habits, like freeing your objects after using them. All this is done automatically in Java since it has its own garbage collector. Java does a lot of things for free since it's a higher-level language.

My gripe is that by starting programmers out with such a language, you get them used to the idea that they get all these wonderful things for free. Then when they run into a language where they actually don't, they have to pick those habits up. By not developing those good programming habits initially, I argued, you create drones instead of actual programmers. They're drones who just kind of see programming as scripting some events, with no real understanding of what's happening behind the scenes.

Also, my school's computer science program, at least at the point I'm at, really seems to be in love with Microsoft. All our programming projects must be submitted as VisualStudio projects, and I get the feeling that these kids think that VisualStudio == Programming. Even in my C++ class, it seems like I'm the only one who actually makes an effort to understand things. Coincidentally, I'm the only person in the class who uses an IDE other than VisualStudio. I was the only person in the whole damned class who could explain what the #ifndef/#define/#endif directives actually are, what they did and why they were necessary for class headers, and those were things that we were supposed to have learned in the first-level course!

So my question is this. Is this a growing trend across the nation? Are more and more schools getting swept up in this "C++ is so, like, yesterday" wave? Are more schools teaching students platform-specific ways of programming (as in VisualStudio == C++)? Are more schools teaching programming more as a "Just do this and you'll be okay" kind of field, where no understanding is required as to why you need to do this?

Posted: 2004-08-31 03:45am
by Edi
A Finnish viewpoint:

Back before I flunked computer engineering, I didn't see this trend in my school. We had kick-ass programming teachers who explained things from the ground up, and we started off with C. Not even C++, but C, and they drilled the good habits into us from the beginning. We also used a lot of different tools, not just Visual Studio.

In any respectable computer engineering faculty they should teach things from the ground up and drum the good habits into the students to begin with. The kind of situation you're describing is what they do at the schools that turn out Bachelors of Economics with an emphasis on IT technology (mainly programming) where they have to go the easy route because of all the other stuff. If a computer engineering faculty does this, it is an indication that its administration is incompetent.

Edi

Re: What kind of programmers are schools creating today?

Posted: 2004-08-31 04:06am
by Pu-239
Durandal wrote:I got into a little discussion with one of my hardware and architecture professor today, and we got to talking about the programming courses that students take at the school. Up until last semester, we started students off in C++. There is a two-course sequence designed to introduce them to programming.

Now, those courses have moved over to Java; I'm taking the last C++ section of the second course to be offered. I told her that I thought this was a bad idea, mainly because after getting out of those two courses, the students wouldn't be familiar with memory. A language like C/C++ provides lower-level memory access, so you have to develop good programming habits, like freeing your objects after using them. All this is done automatically in Java since it has its own garbage collector. Java does a lot of things for free since it's a higher-level language.

My gripe is that by starting programmers out with such a language, you get them used to the idea that they get all these wonderful things for free. Then when they run into a language where they actually don't, they have to pick those habits up. By not developing those good programming habits initially, I argued, you create drones instead of actual programmers. They're drones who just kind of see programming as scripting some events, with no real understanding of what's happening behind the scenes.

Also, my school's computer science program, at least at the point I'm at, really seems to be in love with Microsoft. All our programming projects must be submitted as VisualStudio projects, and I get the feeling that these kids think that VisualStudio == Programming. Even in my C++ class, it seems like I'm the only one who actually makes an effort to understand things. Coincidentally, I'm the only person in the class who uses an IDE other than VisualStudio. I was the only person in the whole damned class who could explain what the #ifndef/#define/#endif directives actually are, what they did and why they were necessary for class headers, and those were things that we were supposed to have learned in the first-level course!

So my question is this. Is this a growing trend across the nation? Are more and more schools getting swept up in this "C++ is so, like, yesterday" wave? Are more schools teaching students platform-specific ways of programming (as in VisualStudio == C++)? Are more schools teaching programming more as a "Just do this and you'll be okay" kind of field, where no understanding is required as to why you need to do this?
Yep- I'm rather annoyed that my CS class taught Java rather than C++ - I had to pick up C and C++ programming independently- did some programming for my robotics team for a PIC, which was very educational (somewhat dumbed down though, but was enough to grasp the concepts). My CS teacher allowed us to turn in projects in any language, and I chose C to make a disk based hashtable database (not enough time to make a tree based one). Of course this year with an open curriculum we are doing C++ for game modding (though I will be leaving that HS in 2 months).

Posted: 2004-08-31 04:18am
by Seggybop
I was in the last C++ section of AP Computer Science that was taught at my school. It's all Java now. I didn't do very well at it, but even with that it was blatantly obvious that I had a better idea of how the system actually operates than the ones who came after. I can't say much else... agree with all.

Posted: 2004-08-31 04:24am
by Pu-239
On the brighter side, more jobs for those of us who know the lower level stuff.

Posted: 2004-08-31 09:56am
by Dahak
At my university, the students learn the algorithms, structures, et al. currently with ADA95, before that there was Modula.
Only in later semesters you get contact with Java or C/C++.

Posted: 2004-08-31 09:57am
by GoldenFalcon
Luckily my programming course this year entails C++. Hmph, take that Java~!

Though I won't be able to make those elite website thingamajigs, but oh well.

Posted: 2004-08-31 12:21pm
by Durandal
GoldenFalcon wrote:Luckily my programming course this year entails C++. Hmph, take that Java~!

Though I won't be able to make those elite website thingamajigs, but oh well.
Java != JavaScript.

Posted: 2004-08-31 12:25pm
by Stravo
Ah...how fondly I remember my Computer programming course in Elementary School:

10 PRINT HELLO
20 GOTO 10
RUN

God only knows what it must be like now.

Re: What kind of programmers are schools creating today?

Posted: 2004-08-31 12:46pm
by Mad
Durandal wrote:Is this a growing trend across the nation?
Yes, unfortunately. Last semester, when I took Object-Oriented Programming and Design (300 level class, where ODU CS students have their first in-class exposure to programming Java), the professor discussed several times the pros and cons to learning Java first. He preferred teaching students C++ first for various reasons, including those you mentioned.

And that professor, Dr. Zeil isn't just some random instructor who happens to have an opinion. He attended a Sun conference on Java (that he was invited to, AFAIK) during our final exam. Just by the way he explains things and supports his beliefs, it's very apparent that the man knows what he's talking about. (And that the other instructors talk about him being super-brilliant kind of helps, too.)

That, and that giving students the foundation and skills to understand why each language works the way it does allows them to make better decisions about what language is best suited to each project. And that's some of what we learned (C++ vs Java) during that class. (We also learned a lot of procedural vs OO stuff... and there are also issues about whether C or C++ should be taught first since getting into one of those habits can sometimes make it hard to think using the other design philosophy.)

So, fortunately, at least my university should keep teaching C++ first for a while. Or at least as long as possible. Still, a lot of universities around here have switched to teaching Java first, and that's putting pressure on us to change.

We're also heavily Unix-dependant in some areas. That's changing, too, at least on the user-side. A lot of instructors require code submitted to run on gcc, so there is a lot of non-Visual Studio exposure outside of the early class and Windows programming classes.

Even without the dumbing down in recent times, there are still plenty of sub-par graduates. The classmates that I aided into becoming real programmers over the semesters have noted how clueless many of their classmates are. An IT major about to graduate commented in wonder during her final semester during a class where they took apart a computer: "So that's what's inside a computer..."

Of course, what this hopefully means is that the skilled have better opportunities ahead of them.

Posted: 2004-08-31 12:51pm
by YT300000
Stravo wrote:Ah...how fondly I remember my Computer programming course in Elementary School:

10 PRINT HELLO
20 GOTO 10
RUN

God only knows what it must be like now.
Well, unless you unplugged the computer, your little Basic program is still going... :P

Posted: 2004-08-31 01:25pm
by Durandal
Stravo wrote:Ah...how fondly I remember my Computer programming course in Elementary School:

10 PRINT HELLO
20 GOTO 10
RUN

God only knows what it must be like now.

Code: Select all

#include <iostream>
using namespace std;

int main ()
{
    int i = 0;
    
    while( i == 0 )
        cout << "Hello.\n";
    
    return 0;
}

Posted: 2004-08-31 01:47pm
by Drooling Iguana
Why not just use whule(1) instead of declaring the i variable and doing a check on it that always returns true every time the loop runs?

Posted: 2004-08-31 02:00pm
by InnocentBystander
At Stevens they teach a semster of java for all science majors, then its all C++, with stuff like Scheme and Assembly and what-not thrown in along the way, what other languages depend on the courses you take.

Posted: 2004-08-31 02:35pm
by Miles Teg
Java is a good language to introduce students to programing with, for the same reason you say it's bad. It allows the student to learn the fundamental concepts of OO software engineering without having to deal with all the crap in a language such as C++ that is *not* a software engineering concept, but rather a feature of the language. By this I am speaking of things like pointers and overloading, that while a useful tool, are a language feature and can easily get in the way of someone's understanding of the core concepts.

In my university, the base language for most classes was Java. We started out with Java, and used it for the introductory classes, the algorithms classes and various other low level classes. Higher level classes (like operating systems) and special focus classes (A.I.) used other languages like C++ and Lisp (and in some cases the language used was up to the student).

The interesting this is, knowing Java, the vast majority of students were able to easily adapt to C++. My personal opinion was that C++ was a whole lot easier to learn knowing Java, since I was already familiar with the major concepts of OO (classes, inheritance, interfaces, polymorphism, etc. etc.) and I could focus my learning efforts on learning the language features of C++ (pointers, overloading, etc.) in something other than a toy program.

Sadly, knowing Java (and C++ for that matter) did little to help (and probably hindered) my learning Lisp and prolog for my A.I. class. Anyone that wants to warp their brain should check out Prolog! *sigh*

Miles Teg

Posted: 2004-08-31 03:00pm
by Durandal
Miles Teg wrote:Java is a good language to introduce students to programing with, for the same reason you say it's bad. It allows the student to learn the fundamental concepts of OO software engineering without having to deal with all the crap in a language such as C++ that is *not* a software engineering concept, but rather a feature of the language. By this I am speaking of things like pointers and overloading, that while a useful tool, are a language feature and can easily get in the way of someone's understanding of the core concepts.
On the contrary, things like pointers and overloading will aid a student trying to understand the language, operator overloading especially. If you tell a student that he's not allowed to use the assignment operator for class objects and that he has to write his own operator function, you give him a better idea of what using the assignment operator actually does and how it does it. It shows him that the code on the screen does not always work at face value, while Java tells him that's exactly how it works.

Re: What kind of programmers are schools creating today?

Posted: 2004-08-31 05:51pm
by Pu-239
Reading more slowly...
Durandal wrote:I was the only person in the whole damned class who could explain what the #ifndef/#define/#endif directives actually are, what they did and why they were necessary for class headers, and those were things that we were supposed to have learned in the first-level course!
:shock:

Posted: 2004-08-31 09:04pm
by phongn
USF starts off their students with Java and then they move into C for the next two courses in the software sequence. The second course covers a variety of topics, including defines, ifdefs/ifndefs, dynamic memory allocation and whatnot.

In addition, all students have to take a few hardware classes.

A lot of the CS department uses Solaris and we are required to ensure that our programs in Data Structures compile and run using GCC on Solaris.

Posted: 2004-08-31 09:22pm
by aerius
To answer the thread title, Microsoft Windows programmers. :)

I've been out of the system for a while now, we started off with Pascal to teach us the basics & concepts in 1st year then we moved on to C/C++ in higher level courses. For the final year, what language we used depends on what we specialized in, some people went with assembler, others stuck with C++, and some ended up using MS visual studio or Java.

I've spoken with a lot of my friends and co-workers, and there is a general trend in our local colleges of moving towards Visual Studio and Java. Most universities are still the same way now as when I was in the system.

Posted: 2004-09-01 01:00am
by Dennis Toy
We here at Strayer University are actually starting from the ground up, my first class was a network class which i got an A. The onto Visual Basic to learn the basics of programming. I then moved onto C++ programming and now i am learning OOP.

OOP ( Object-Oriented Programming) is a fun yet hard to learn program. Im starting to learn how to use pointers in my programming. I want to move to Software Engineering or System Design.

Posted: 2004-09-01 05:58pm
by Slartibartfast
Durandal wrote:

Code: Select all

#include <iostream>
using namespace std;

int main ()
{
    int i = 0;
    
    while( i == 0 )
        cout << "Hello.\n";
    
    return 0;
}
Make that "while (1)" and forget about even declaring "i".

Posted: 2004-09-01 07:10pm
by Pu-239
C++ USING HERETIC- THIS IS THE TRUE WAY:

Code: Select all

#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h> //yes, you can not include this ans just use 1 or 0
					 //for true/false but I like it this way

int main(void){
	while(true){
		puts("Hello.");
	}
	exit(EXIT_SUCCESS);
}
Oh, and btw you are forgetting your void in

Code: Select all

int main()
[EDIT- accidently put void() instead of main()] in between the parentheses. Not having it signifies you can pass anything in as a parameter which forgoes type checking (try it).

Posted: 2004-09-01 07:33pm
by YT300000
Here's part of the course outline for my HS's Grade 12 computer programming course: "Students will learn to use VISUAL BASIC, which wil..."

:roll:

Posted: 2004-09-01 10:21pm
by Drooling Iguana
Pu-239 wrote:C++ USING HERETIC- THIS IS THE TRUE WAY:

Code: Select all

#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h> //yes, you can not include this ans just use 1 or 0
					 //for true/false but I like it this way

int main(void){
	while(true){
		puts("Hello.");
	}
	exit(EXIT_SUCCESS);
}
Oh, and btw you are forgetting your void in

Code: Select all

int void()
in between the parentheses. Not having it signifies you can pass anything in as a parameter which forgoes type checking (try it).
Why use puts() instead of printf()?

Posted: 2004-09-01 10:27pm
by Mad
Drooling Iguana wrote:Why use puts() instead of printf()?
puts() is faster because it doesn't have to do string parsing.