Posted By: Wil | Jan 8th, 2008 @ 10:52 AM
page 1 of 2
Comments: 46 | Views: 7001
Wil
Wil
Wil
Sorry if this is old news, but ...

Slashdot has picked up on an article written for a Defense Dept. journal by two retired CS profs from NYU (who now run an Ada software company): "Computer Science Education: Where Are the Software Engineers of Tomorrow?"  The article (online here) claims that CS students aren't being taught the basics:

"Over the last few years we have noticed worrisome trends in CS education. The following represents a summary of those trends:

  1. Mathematics requirements in CS programs are shrinking.
  2. The development of programming skills in several languages is giving way to cookbook approaches using large libraries and special-purpose packages.
  3. The resulting set of skills is insufficient for today’s software industry (in particular for safety and security purposes) and, unfortunately, matches well what the outsourcing industry can offer. We are training easily replaceable professionals."

The authors claim that a big part of the problem is the use of Java as the first programming language taught in the curriculum.

"Because of its popularity in the context of Web applications and the ease with which beginners can produce graphical programs, Java has become the most widely used language in introductory programming courses. We consider this to be a misguided attempt to make programming more fun, perhaps in reaction to the drop in CS enrollments that followed the dot-com bust. What we observed at New York University is that the Java programming courses did not prepare our students for the first course in systems, much less for more advanced ones. Students found it hard to write programs that did not have a graphic interface, had no feeling for the relationship between the source program and what the hardware would actually do, and (most damaging) did not understand the semantics of pointers at all, which made the use of C in systems programming very challenging."
ScanIAm
ScanIAm
On a scale of 1 to 10, people are stupid.
Wil wrote:
Sorry if this is old news, but ...

Slashdot has picked up on an article written for a Defense Dept. journal by two retired CS profs from NYU (who now run an Ada software company): "Computer Science Education: Where Are the Software Engineers of Tomorrow?" 


Back in my day, we had to use punch cards made out of tree-bark.

And we liked it.

Oh, and Ada smells like old people.
W3bbo
W3bbo
The Master of Baiters
Wil wrote:
Sorry if this is old news, but ...

Slashdot has picked up on an article written for a Defense Dept. journal by two retired CS profs from NYU (who now run an Ada software company): "Computer Science Education: Where Are the Software Engineers of Tomorrow?"  The article (online here) claims that CS students aren't being taught the basics:


This doesn't mean C# is a good replacement though, or a general "case against Java", C# has the same attributes making it bad for teaching Systems engineering.
ScanIAm
ScanIAm
On a scale of 1 to 10, people are stupid.
W3bbo wrote:

Wil wrote: Sorry if this is old news, but ...

Slashdot has picked up on an article written for a Defense Dept. journal by two retired CS profs from NYU (who now run an Ada software company): "Computer Science Education: Where Are the Software Engineers of Tomorrow?"  The article (online here) claims that CS students aren't being taught the basics:


This doesn't mean C# is a good replacement though, or a general "case against Java", C# has the same attributes making it bad for teaching Systems engineering.


What the Ada Geezers failed to recognize is something I saw waay back in the day when I went to college:  Most students could understand pointers even if they started out learning C.

Or ASM.

Or Ada, for that matter.


Here's the thing:  It is not the student's job to already know pointers, it is the professor's job to teach them about it in a way that they 'get it'.  Most comp-sci professors are socially inept and sh*tty instructors.  They might be able to guess that the password for WOPR is 'Joshua', but they suck at instruction.

And those are the ones that speak <insert your national language here>.  I wish I had thought to sue my alma mater for putting me in a number of classes with folks who could not and would not put together a coherent sentence using words that might generally be understood by a portion of the population.

From the point of view of a professor, any student who doesn't already get it is a drain on time and energy because that student cannot contribute to the vainglorious future aspirations of that professor.  If, however, you already 'get it' and you understand enough of the work to actually help out, then the prof doesn't really have to make any effort, does s/he.

ScanIAm
ScanIAm
On a scale of 1 to 10, people are stupid.
ScanIAm wrote:

W3bbo wrote: 
Wil wrote: Sorry if this is old news, but ...

Slashdot has picked up on an article written for a Defense Dept. journal by two retired CS profs from NYU (who now run an Ada software company): "Computer Science Education: Where Are the Software Engineers of Tomorrow?"  The article (online here) claims that CS students aren't being taught the basics:


This doesn't mean C# is a good replacement though, or a general "case against Java", C# has the same attributes making it bad for teaching Systems engineering.


What the Ada Geezers failed to recognize is something I saw waay back in the day when I went to college:  Most students could not understand pointers even if they started out learning C.

Or ASM.

Or Ada, for that matter.


Here's the thing:  It is not the student's job to already know pointers, it is the professor's job to teach them about it in a way that they 'get it'.  Most comp-sci professors are socially inept and sh*tty instructors.  They might be able to guess that the password for WOPR is 'Joshua', but they suck at instruction.

And those are the ones that speak <insert your national language here>.  I wish I had thought to sue my alma mater for putting me in a number of classes with folks who could not and would not put together a coherent sentence using words that might generally be understood by a portion of the population.

From the point of view of a professor, any student who doesn't already get it is a drain on time and energy because that student cannot contribute to the vainglorious future aspirations of that professor.  If, however, you already 'get it' and you understand enough of the work to actually help out, then the prof doesn't really have to make any effort, does s/he.



Ediot: important word bolded.
Interesting question. Start high-level and work downwards or start low-level and work upwards. I'd have preferred if my first introduction was something like ML.
I can some of the things follow, some not. That I am also student and studying Software Engineering I would like to tell you my point of view.

Formal Methods and Software Construction:

This is definitely what I lack for. Software Engineering(SE) and also Software Science(SC) is not only programming. It is much more like this. I would like say: There are many good programmers, but too little good architects. How oft I saw that good idea was unsuccessful implemented. But not because of language, programmers or technology, but because of design!

The Pitfalls of Java as a First Programming Language:

This is very good point. At the beginning of my study, I was also skeptic to learn programming with Pascal. Pascal who need it today! But now I know for what was it good.
Start to learn SC or SE with Java or other high languages (also .NET) is like to start to learn medicine with surgery. Basics are essential and are applicable on all languages, without differences.

A Real Programmer Can Write in Any Language (C, Java, Lisp, Ada):

I think this is more wish like reality. My personally opinion is that everybody should find his specialization. Generalist is someone who is asked in other sciences like project management and so on but not SC. Every language has paradigm, which is not (at all) find in other ones. Or maybe you want be specialist for all languages ? I think not possible.

That's my point of view.

Regards
AKa

 
evildictaitor
evildictaitor
if( !succeed( try() ) ) { while(true) try(); }
W3bbo wrote:

This doesn't mean C# is a good replacement though, or a general "case against Java", C# has the same attributes making it bad for teaching Systems engineering.


No. For Computer Science students, C++ (and some C to understand how C++ works) should be the language of choice.

C# and Java are great because they do away with pointers, and thus give the programmer a problem-based rather than implementation based approach to solving problems, but in the real world you need intimate knowledge of how your program will work.

Physics and maths students should learn C# (or Java or Mathematica), because their subjects generally involve turning a problem into an answer. For CS students, optimisation, systems and driver design and more in-depth understanding of how computer work should absolutely nessessitate the learning of a langauge which doesn't have all of the niceties and safeguards that C# and Java have, even it is less easy.
evildictaitor wrote:

No. For Computer Science students, C++ (and some C to understand how C++ works) should be the language of choice.



I agree...
W3bbo
W3bbo
The Master of Baiters
evildictaitor wrote:

W3bbo wrote:
This doesn't mean C# is a good replacement though, or a general "case against Java", C# has the same attributes making it bad for teaching Systems engineering.


No. For Computer Science students, C++ (and some C to understand how C++ works) should be the language of choice.


I know, I feel the same way.

It's just that I felt the post might be interpeted as a Java-bashing exercise since this forum tends to be for C# users, just pointing out C# and Java are pretty much identical w.r.t. the article author's points.
I'd have to say that regardless of what language that is taught during the first year or two, what's really important is that transition into the How and why.

Just teaching a language (any language) would be like teaching a mechanic how to use the tools. Sure you can use the tools and complete a task, but once something comes along that doesn't fit the tools you know how to use, what can you do?

There's that switch between application and conceptual that is difficult, in any subject really. This is the most crucial part whether you learn C/C++ or Java/C# first. There are concepts that can't be well depicted in C especially, a bit less so in C++ just like there are concepts that can't be expressed in Java especially and C# a bit less (since you can get back to pointers and dealing with "unsafe" code). This is where I thing the ball gets dropped or passed too late.

Back in my first year of CS, which was taught in Java, I couldn't believe how little some people understood logic and basic concepts that should already be known: examples like Hexadecimal, conditional logic, etc. I know it was quite a shift for people when the following year you head into assembly then to systems programming.

I think the Higher Education system is geared such that intro level courses teach application rather than concept because a lot of degree programs will have you taking intro level courses in a number of fields (especially if you don't know what field to go into) such that the students can gain a practical application ability from these classes rather than the more in depth conceptual understanding of the material.

That being said, I'm a graduate and undestand CS and was taught in Java (of course, I also cheated by starting to learn the concepts and language before college).
evildictaitor
evildictaitor
if( !succeed( try() ) ) { while(true) try(); }
W3bbo wrote:

evildictaitor wrote:
W3bbo wrote:
This doesn't mean C# is a good replacement though, or a general "case against Java", C# has the same attributes making it bad for teaching Systems engineering.


No. For Computer Science students, C++ (and some C to understand how C++ works) should be the language of choice.


I know, I feel the same way.

It's just that I felt the post might be interpeted as a Java-bashing exercise since this forum tends to be for C# users, just pointing out C# and Java are pretty much identical w.r.t. the article author's points.


Yeah. Personally I prefer C# to Java (mainly due to operator overloading), but I think that both are a bad way to learn performant or system coding, or coding for the "real world" (big apps, compilers, OSes, research, games etc).
evildictaitor
evildictaitor
if( !succeed( try() ) ) { while(true) try(); }
dbl post.
On my university, we are learning more languages. We used Pascal, than C, C++, Java , C#,  Javascript. Something like this opens horizont, because you can see advantages or disadvantages many technologies.
PaoloM
PaoloM
Hypermediocrity
evildictaitor wrote:
...or coding for the "real world" (big apps, compilers, OSes, research, games etc).

Actually, for coding "in the real world" Smiley, Java and C# are just about perfect, considering that the vast majority of code around is in applications that do not need extreme perf or fancy hardware interfaces.

For each line of Linux or NT kernel, there are hundreds of payroll, accounting, inventory, CMM, custom line of business app, etc etc... and those kind of applications are the main target of powerful and "safe" framework and languages (like Java or .NET/VB/C#)
a-ka wrote:
On my university, we are learning more languages. We used Pascal, than C, C++, Java , C#,  Javascript. Something like this opens horizont, because you can see advantages or disadvantages many technologies.


After Java at my alma mater after the first year and so we got into other languages, with possibilities for others. Assembly, C, C++, Lisp, and Prolog were the main course languages. There was even a class for understanding and learning what programming languages are, why are they different, and why they might be used. Of course this is where we learned basic things from the different paradigms (C, C++/Java, Lisp, Prolog). After that classes were actually mostly language independant as the instructor would accept different languages for projects. When you're learning about concepts related to data structures, formal language definitions, systems architecture, networking, etc language takes a back seat to concept, which is how it should be. If you're learning networking you need to understand things like broadcast, medium, data transfer rates, packets, different packet delivery systems, etc and not how X programming language applies this information.
W3bbo
W3bbo
The Master of Baiters
PaoloM wrote:

evildictaitor wrote:...or coding for the "real world" (big apps, compilers, OSes, research, games etc).

Actually, for coding "in the real world" , Java and C# are just about perfect, considering that the vast majority of code around is in applications that do not need extreme perf or fancy hardware interfaces.

For each line of Linux or NT kernel, there are hundreds of payroll, accounting, inventory, CMM, custom line of business app, etc etc... and those kind of applications are the main target of powerful and "safe" framework and languages (like Java or .NET/VB/C#)


That's what you go to university to do a Software Engineering degree for, the guy ranting is a Computer Science professor, a different field.

CS != SoftEng.
Minh
Minh
WOOH! WOOH!
W3bbo wrote:

evildictaitor wrote:
W3bbo wrote:
This doesn't mean C# is a good replacement though, or a general "case against Java", C# has the same attributes making it bad for teaching Systems engineering.


No. For Computer Science students, C++ (and some C to understand how C++ works) should be the language of choice.


I know, I feel the same way.

It's just that I felt the post might be interpeted as a Java-bashing exercise since this forum tends to be for C# users, just pointing out C# and Java are pretty much identical w.r.t. the article author's points.
OK, I'll bash C++ instead.

Those who likes C++ doesn't REALLY know C++. Haha!
Do CS undergrad curriculums not cover VHDL or Verilog? I'm in an MSEE program right now and at my school if I want to take a course on soft processors or FPGA-based embedded systems I have to take it from the CS dept.
W3bbo wrote:


That's what you go to university to do a Software Engineering degree for, the guy ranting is a Computer Science professor, a different field.

CS != SoftEng.


That's is very true. But SE has many in common with CS.
ScanIAm
ScanIAm
On a scale of 1 to 10, people are stupid.
W3bbo wrote:

PaoloM wrote: 
evildictaitor wrote: ...or coding for the "real world" (big apps, compilers, OSes, research, games etc).

Actually, for coding "in the real world" , Java and C# are just about perfect, considering that the vast majority of code around is in applications that do not need extreme perf or fancy hardware interfaces.

For each line of Linux or NT kernel, there are hundreds of payroll, accounting, inventory, CMM, custom line of business app, etc etc... and those kind of applications are the main target of powerful and "safe" framework and languages (like Java or .NET/VB/C#)


That's what you go to university to do a Software Engineering degree for, the guy ranting is a Computer Science professor, a different field.

CS != SoftEng.


Then he really screwed the pooch because he should be able to explain pointers in any language.

What's worse, Computer Science is barely a science and mostly an art.  What wonderous new science is taking place when you get a CS degree?  Math, mostly, and if you wish to get technical, you can get an EE degree, but the rest of the discussion is implementation of mathmatical theories on data organization.

CS means "I do math on machines", but once you get past the pedantry, you'll realize that CS is a catchall for "I work with computers and I got a degree in it".
W3bbo
W3bbo
The Master of Baiters
Minh wrote:
OK, I'll bash C++ instead.

Those who likes C++ doesn't REALLY know C++. Haha!


I'd be a fan of C++ if they combined declaration with definition and stuck to IDL instead of header files.

And define a naming standard in the specification too, one of the reasons I don't like working in C++ are the mixed up identifier casing and naming schemes.

Granted, it's nowhere near as bad as PHP, but please Microsoft... we've got intellisense, so ditch names like "phLSz" and macros. Blegh... I hate macros. Inline functions exist for this very reason.
W3bbo
W3bbo
The Master of Baiters
ScanIAm wrote:
Then he really screwed the pooch because he should be able to explain pointers in any language.


Visual Basic.
Minh
Minh
WOOH! WOOH!
W3bbo wrote:

Minh wrote:OK, I'll bash C++ instead.

Those who likes C++ doesn't REALLY know C++. Haha!


I'd be a fan of C++ if they combined declaration with definition and stuck to IDL instead of header files.

And define a naming standard in the specification too, one of the reasons I don't like working in C++ are the mixed up identifier casing and naming schemes.
Duh, but they spend so much time putting in that awesome text pre-processor!
page 1 of 2
Comments: 46 | Views: 7001
Microsoft Communities