Re: Should Java be banned from schools? Go to top ] Posted by: Paul Beckford

Posted on: December 03 2007 07:40 EST

in response to Ke Jin Hi, This post made my day. LOL :^) To be fare to Java, it is not the only culprit here. The same could be said of C#. Vendors have worked out that marketing technology to the mainstream has more to do with building on prior context (the C language) and reducing the learning curve (by minimising the number of new unfamiliar concepts) then fitness for purpose. You would expect that academic institutions would be immune to this form of dumbing down, but apparently not. With Vendors like Microsoft sponsoring Computer science departments and providing free/cheap software, it looks like many institutions have been bought. Amongst Alan Kay's many complaints about the current state of computer science is that most academic institutions no longer build their own stuff. So there are few Universities that build their own processors, or their own operating systems, never mind creating their own programming languages. So what are all those professors and post graduates out there doing? "what ever happened to the mighty Standford, the inventors of Lisp?" It would be interesting to here from such people. From what I see most computer science under graduate courses tend to be little more then vocational training. I just don't know why this is. Fortunately for me, my degree was in Electronic Engineering :^). Peace, Paul. Reply to this Reply to original

General Programming skills Go to top ] Posted by: Chris Vandervelpen

Posted on: December 03 2007 08:54 EST

in response to Jess Holle I think to become a good "computer scientist" it is important to follow a learning path that feels natural. By this I mean: first learn about algorithms, data structures. Then go on to abstraction and later on: Object oriented programming. During my education we started with a course of algorithms and data structures which we implemented and practised using Pascal. Then the notion of abstract datatypes and pointers was introduced. I think Pascal is one of the most appropriate languages to learn general CS concepts before going on to learn C, C++ and then languages like Java, C# and the like. Also I think it is very important to also learn some logical and functional programing languages. Reply to this Reply to original

Re: This Is Based On One Guy? Go to top ] Posted by: Ke Jin

Posted on: December 05 2007 13:13 EST

in response to T H Aside from the idiocy of basing your opinion of a language's proponents based on knowledge of these three obscure concepts--what makes you think that this particular individual has any larger significance?

Also, the reference to BASIC is pretty obvious--BASIC was based on the GOTO.

Java does not have that function and I fail to see how the ease of Java instills weakness in your CS graduates.

In fact, this whole article is a big deal over nothing. This guy is very typical. I can't write stories of 100 guys in one post. See my previous reply. Also, if these three concepts were obscure to a person who had used XSLT for four years and was criticizing its fundamental concept and paradigm, what other concepts would not be obscure? Would you consider OOP to be obscure to Java professionals, AOP to be obscure to AspectJ users, MVC to be obscure to JSF or Struts developers, and relational model to be obscure to SQL programmers? Thanks! This guy is very typical. I can't write stories of 100 guys in one post. See my previous reply. Also, if these three concepts were obscure to a person who had used XSLT for four years and was criticizing its fundamental concept and paradigm, what other concepts would not be obscure? Would you considerto be obscure to Java professionals,to be obscure to AspectJ users,to be obscure to JSF or Struts developers, andto be obscure to SQL programmers? Thanks! Reply to this Reply to original

Re: This Is Based On One Guy? Go to top ] Posted by: Ke Jin

Posted on: December 07 2007 11:36 EST

in response to Bostjan Dolenc Would you consider ... relational model to be obscure to SQL programmers? Definitely. Are you referring to those guys who happen to write a line or two SELECT statements without even knowing what are primary key/foreign key/normalization/etc. (sorry for these obscure concepts) and then call themselves SQL programmers? Then, OO could also definitely be an obscure concept for Java professionals! Anyone who could write a Java "hello world" example would be able to claim himself a Java programmer. And using Java, you are definitly able to write out all code examples of any algorithm textbook without knowing OO at all (without ever using interface, implements, extends, etc.). You just proved my point, namely many "professionals" are so ignorant that is already harmful to this industry. Are you referring to those guys who happen to write a line or twostatements without even knowing what are primary key/foreign key/normalization/etc. (sorry for these obscure concepts) and then call themselves? Then, OO could alsobe an obscure concept for Java professionals! Anyone who could write a Java "hello world" example would be able to claim himself a Java programmer. And using Java, you are definitly able to write out all code examples of any algorithm textbook without knowing OO at all (without ever using, etc.). You just proved my point, namely many "professionals" are so ignorant that is already harmful to this industry. Reply to this Reply to original

Re: SQL and relational theory Go to top ] Posted by: Bostjan Dolenc

Posted on: December 10 2007 10:48 EST

in response to Ke Jin Would you consider ... relational model to be obscure to SQL programmers? Definitely.

Are you referring to those guys who happen to write a line or two SELECT statements without even knowing what are primary key/foreign key/normalization/etc. (sorry for these obscure concepts) and then call themselves SQL programmers Nope, beginners get some leeway. I was thinking about DB designers who consider their Excel spreadsheet a perfect database (logical) model, architects who "protect against change" with a key-value tables or query writers who are scared of different joins (sometimes even natural ones) and regress back to loops every few pages. And we all know a programmer or two who thinks that you can "customize" a SELECT statement only in the WHERE clause. Nope, beginners get some leeway. I was thinking about DB designers who consider their Excel spreadsheet a perfect database (logical) model, architects who "protect against change" with a key-value tables or query writers who are scared of different joins (sometimes even natural ones) and regress back to loops every few pages. And we all know a programmer or two who thinks that you can "customize" a SELECT statement only in the WHERE clause. Reply to this Reply to original

Re: SQL and relational theory Go to top ] Posted by: Ke Jin

Posted on: December 10 2007 12:12 EST

in response to Bostjan Dolenc Would you consider ... relational model to be obscure to SQL programmers? Definitely.

Are you referring to those guys who happen to write a line or two SELECT statements without even knowing what are primary key/foreign key/normalization/etc. (sorry for these obscure concepts) and then call themselves SQL programmers Nope, beginners get some leeway. I was thinking about DB designers who consider their Excel spreadsheet a perfect database (logical) model, architects who "protect against change" with a key-value tables or query writers who are scared of different joins (sometimes even natural ones) and regress back to loops every few pages. And we all know a programmer or two who thinks that you can "customize" a SELECT statement only in the WHERE clause. I fail to see how this example could support the argument that relational model was "definitly" an obscure concept to SQL programmers in general. But anyway, I don't care if you insist it is obscure .... Just like many java and C++ programmers insisted OO to be definitly obscure .... and one or two XSLT experts here insisted imperative vs declarative to be definitly obscure, and relational model could definitly be obscure as wll .... I fail to see how this example could support the argument that relational model was "definitly" an obscure concept to SQL programmers in general. But anyway, I don't care if you insist it is obscure .... Just like many java and C++ programmers insisted OO to be definitly obscure .... and one or two XSLT experts here insisted imperative vs declarative to be definitly obscure, and relational model could definitly be obscure as wll .... Reply to this Reply to original

Re: Ridiculous. Go to top ] Posted by: Ke Jin

Posted on: December 07 2007 11:42 EST

in response to Tracy Milburn Those things have nothing to do with programming; I use data structures, lists, algorithms and yes even recursion in Java; it's the same regardless of what language it's being done in. Is someone actually complaining because doing it in Java is less error-prone and more fun?



Tracy Milburn Who said they were to do with programming? What are discussed here are passion, abstraction ability, and mental agility. Who said they were to do with programming? What are discussed here are passion, abstraction ability, and mental agility. Reply to this Reply to original

Re: Should Java be banned from schools? Go to top ] Posted by: Adrian Brock

Posted on: December 03 2007 09:24 EST

in response to Ke Jin It seems we have some communication problem... You are correct we have a communication problem (many of them, I think :-). " I didn't snear at DSM. In fact, I was telling one of our messaging developers to use it. " On Mon, 2007-11-19 at 01:20 -0500, Ke Jin wrote: Adrian, it is my article. Firstly, I apologize that my article wasted your precious time. Not really. I've been advocating the idea (if not your solution) for some time now. :-) " The topic was "usecase xml" which is a way to implement DSM and hide the implementation details without using preprocessors (XSLT or otherwise). Preprocessing was what I was arguing against. I gave the example of JBoss's DataSource configuration for why preprocessors are in general the wrong way to go. "Specifically, he was not able to change values of XSLT variables." No the actual argument was that in general the mapping done by preprocessors does not preserve the original structure used by the user, meaning there is "cognitive dissonance" between the implementation details and what the user is defining. e.g. You can see such confusion in the three different names of the JBoss pooling strategy here: "A while ago, I had a conversation with a chief scientist of a Java consulting and service firm." Since you are talking about me (Adrian Brock, Chief Scientist at JBoss a division of Redhat"). I'd like to set the record straight. The discussion is public, you can find it here (unfortunately the mail software hasn't collected it all in one thread): http://lists.jboss.org/pipermail/jboss-development/2007-November/thread.html scan for "usecase" First, I got the meaning of "imperative programming" wrong. Not being a CS graduate, you can sue me. Which actually disproves the premise of this topic anyway. :-) But like I said in that discussion: "If you read my posts regularly, you'll know I hate names. Ideas are much more important." In fact the whole argument was mainly due to a lack of understanding of what the other person said as we both agreed: " On Wed, 2007-11-21 at 00:46 -0500, Ke Jin wrote:You are correct we have a communication problem (many of them, I think :-). " I didn't snear at DSM. In fact, I was telling one of our messaging developers to use it. " On Mon, 2007-11-19 at 01:20 -0500, Ke Jin wrote:Not really. I've been advocating the idea (if not your solution) for some time now. :-) " The topic was "usecase xml" which is a way to implement DSM and hide the implementation details without using preprocessors (XSLT or otherwise). Preprocessing was what I was arguing against. I gave the example of JBoss's DataSource configuration for why preprocessors are in general the wrong way to go. "Specifically, he was not able to change values of XSLT variables." No the actual argument was that in general the mapping done by preprocessors does not preserve the original structure used by the user, meaning there is "cognitive dissonance" between the implementation details and what the user is defining. e.g. You can see such confusion in the three different names of the JBoss pooling strategy here: http://wiki.jboss.org/wiki/Wiki.jsp?page=JBossJCAPooling And also that partial updates of the user structure do not get reflected in the backend without having to re-run the preprocessing to map it. "He should change his mindset for this (imperative to declarative)" No change in mindset is required. I already strongly support declaritive programming. :-) The point I was making was that you shouldn't have to sacrifice the programmatic (imperative) approach to use DSM. Preprocessing makes the programmatic approach much harder than it needs to be. DataSourceDSM dataSource = ...; dataSource.setPoolSize(100); implementationDetails = preprocessor.map(dataSource); // Yuck! Reply to this Reply to original

Names ARE IMPORTANT Go to top ] Posted by: Andre Aragao

Posted on: December 04 2007 09:11 EST

in response to Adrian Brock But like I said in that discussion: "If you read my posts regularly, you'll know I hate names. Ideas are much more important." What that means? I see this argument repeated over and over again and I never understood what its point is. Using names to represent complex abstractions is what brought the humankind here (technologically speaking). Names are EXTREMELY important. That's how we communicate know what each other is talking about, in an efficient way. If I am trying to build and describe a new idea, built on top of existent concepts, but can't refer to them using the proper names, then I'll end up having to describe not only my new idea, but the details for all the concepts I'm trying to use whose "names are not important". You know where that ends. What that means? I see this argument repeated over and over again and I never understood what its point is. Using names to represent complex abstractions is what brought the humankind here (technologically speaking). Names are EXTREMELY important. That's how we communicate know what each other is talking about, in an efficient way. If I am trying to build and describe a new idea, built on top of existent concepts, but can't refer to them using the proper names, then I'll end up having to describe not only my new idea, but the details for all the concepts I'm trying to use whose "names are not important". You know where that ends. Reply to this Reply to original

Re: Names ARE IMPORTANT Go to top ] Posted by: Karl Banke

Posted on: December 04 2007 12:39 EST

in response to Andre Aragao If I am trying to build and describe a new idea, built on top of existent concepts, but can't refer to them using the proper names, then I'll end up having to describe not only my new idea, but the details for all the concepts I'm trying to use whose "names are not important". You know where that ends. Hehe, actually names can be important as well as act as smokescreen. Think of ESB, Middleware, SOA, Web 2.0, Words where the Deutungshoheit sits with whoever vendor or consultant you actually talk. Names can also be hijacked, like, say "MVC" for Web Applications. And "object orientation" or "polymorphism" can have drastically different meanings depending on your current context.... Hehe, actually names can be important as well as act as smokescreen. Think of ESB, Middleware, SOA, Web 2.0, Words where the Deutungshoheit sits with whoever vendor or consultant you actually talk. Names can also be hijacked, like, say "MVC" for Web Applications. And "object orientation" or "polymorphism" can have drastically different meanings depending on your current context.... Reply to this Reply to original

Re: Names ARE IMPORTANT Go to top ] Posted by: Andre Aragao

Posted on: December 04 2007 12:51 EST

in response to Karl Banke Names can also be hijacked, like, say "MVC" for Web Applications. And "object orientation" or "polymorphism" can have drastically different meanings depending on your current context.... Precisely. And one of the root causes of this lack of precision is the very idea that "names are not important". That concept is extremely counter productive and I fight it every single day where I work - specially because of the unending meetings to "establish common ground" where instead of creating real business value on top of existing concepts, time is spent discussing names and concepts that should be prerequisites for the conversation going on. I apologize digressing from the main topic - but I have to fight this idea every time I see it. It's a useless battle, I know. Precisely. And one of the root causes of this lack of precision is the very idea that "names are not important". That concept is extremely counter productive and I fight it every single day where I work - specially because of the unending meetings to "establish common ground" where instead of creating real business value on top of existing concepts, time is spent discussing names and concepts that should be prerequisites for the conversation going on. I apologize digressing from the main topic - but I have to fight this idea every time I see it. It's a useless battle, I know. Reply to this Reply to original

Ho, hum - keeping the flames alive... Go to top ] Posted by: Andrew Doddington

Posted on: December 05 2007 12:09 EST

in response to Adrian Brock Solution: Don't use short cuts to thinking, say what you mean clearly and simply. If I have to explain the meaning of every word I used, rather than use it, then I will never communicate with anybody - which some might say to be a good thing. E.g. what do you mean by "smokescreen"? Anyways, going back to the original point, Dijkstra was obviously a genius and a major contributor to the art and 'science' of CS. However, he was not infallible and, presumably, was as liable as the rest of us to overstate his point in order to get the message across. I for one, do not believe that it is impossible to teach good programming to students who have had exposure to BASIC. Furthermore, I do not believe that they are "mentally mutilated beyond hope of regeneration". Unless damaged in some way, the human brain is almost infinitely malleable - for better or worse. Dijkstra's proposal is tantamount to saying that somebody who learns to ride a bicycle can never learn to drive a car; or that children who begin by walking will never be able to run. I realise that some people will say that programming is a vastly more complicated activity than walking. Although this is true, I believe that the same basic principle applies. Part of the issue comes back to the rather narcissistic assumption that exists in the programming community that this skill is somehow orders of magnitude more difficult than any other. In this regard, I agree with the previous posting: to me at least, it is nowhere near as hard as some of the more 'pure' sciences. Also, speaking for myself, it's far easier than playing (any form of) musical instrument. I may be flamed that I'm just not very good, or that I'm probably a poor programmer. This may be true, but, if so, I seem to have managed to fool several people for quite a long time ;-) Finally, regarding the earlier posting which said that students should be taught using a programming language what was designed for teaching programming: wasn't that what BASIC was meant to be? How fashions change ;-) If I have to explain the meaning of every word I used, rather than use it, then I will never communicate with anybody - which some might say to be a good thing. E.g. what do you mean by "smokescreen"? Anyways, going back to the original point, Dijkstra was obviously a genius and a major contributor to the art and 'science' of CS. However, he was not infallible and, presumably, was as liable as the rest of us to overstate his point in order to get the message across. I for one, do not believe that it is impossible to teach good programming to students who have had exposure to BASIC. Furthermore, I do not believe that they are "mentally mutilated beyond hope of regeneration". Unless damaged in some way, the human brain is almost infinitely malleable - for better or worse. Dijkstra's proposal is tantamount to saying that somebody who learns to ride a bicycle can never learn to drive a car; or that children who begin by walking will never be able to run. I realise that some people will say that programming is a vastly more complicated activity than walking. Although this is true, I believe that the same basic principle applies. Part of the issue comes back to the rather narcissistic assumption that exists in the programming community that this skill is somehow orders of magnitude more difficult than any other. In this regard, I agree with the previous posting: to me at least, it is nowhere near as hard as some of the more 'pure' sciences. Also, speaking for myself, it's far easier than playing (any form of) musical instrument. I may be flamed that I'm just not very good, or that I'm probably a poor programmer. This may be true, but, if so, I seem to have managed to fool several people for quite a long time ;-) Finally, regarding the earlier posting which said that students should be taught using a programming language what was designed for teaching programming: wasn't that what BASIC was meant to be? How fashions change ;-) Reply to this Reply to original

Re: Names ARE IMPORTANT Go to top ] Posted by: Ke Jin

Posted on: December 05 2007 13:46 EST

in response to Andre Aragao But like I said in that discussion:

"If you read my posts regularly, you'll know I hate names.

Ideas are much more important."



What that means? I see this argument repeated over and over again and I never understood what its point is. Using names to represent complex abstractions is what brought the humankind here (technologically speaking).



Names are EXTREMELY important. That's how we communicate know what each other is talking about, in an efficient way.



If I am trying to build and describe a new idea, built on top of existent concepts, but can't refer to them using the proper names, then I'll end up having to describe not only my new idea, but the details for all the concepts I'm trying to use whose "names are not important". You know where that ends. Agree! Also, if one is not able to communicate using commonly accepted plain old names or terminologies of concepts and patterns, then it is higly questionable whether s/he has fully grasped the ideas. Agree! Also, if one is not able to communicate using commonly accepted plain old names or terminologies of concepts and patterns, then it is higly questionable whether s/he has fully grasped the ideas. Reply to this Reply to original

Should Java be banned from *US* schools... Go to top ] Posted by: Leif Ashley

Posted on: December 03 2007 10:28 EST

in response to Ke Jin Ok, you think that other countries outside the US are banning Java from schools? This whole debate it somewhat ridiculous, but I do see some gems in it. It's true, that people/kids tend to want easy mode and aren't willing to work for things. When Joel Spolsky asks, "Whatever happened to hard work?", it's clear to me that he has not been following US education. "No kid left behind" has turned in to "no kid held back no matter what, or we'll cut your funding". Kids are not trained to work hard now. Don't get a passing grade? No worries, they'll pass you later. It's too easy to slide by. I do agree that many Chief Scientists and CIOs don't "get it" when it comes to language and other CS paradigms. However, they didn't get those positions by understanding these concepts. They understand the concepts of marketing themselves, and that's why they hold those positions (or they knew a friend that put them there). For the rest of us, whether or not java is in or out of schools, or it's C++, C#, Ruby, PERL, BASIC, or LOGO, those that do get it will have opportunities to explore and shine, and those that don't get it, will become managers… or something else being my point. The job of the education system is to educate. When you pull opportunities, such as learning a software development language, out of the curriculum, then the system is not doing it's job. So if Java should be banned from schools, then why not Calculus, advanced Lit, and science? We don't use those much day to day either. For that matter, let's just turn schools into to vocational skills training, and as long as you don't kill someone or loose an arm, you pass. Then countries can outsource their manufacturing to us so we can become an endless supply of cheap labor. Seriously, who came up with this topic title? lol Reply to this Reply to original

No, it shouldn't Go to top ] Posted by: Osvaldo Doederlein

Posted on: December 03 2007 10:32 EST

in response to Ke Jin Dijkstra's comment was motivated by BASIC's lack of structuring, presence of evil features like GOTO, and missing essential features like pointers/references and dynamic memory allocation (so one couldn't do any significant data structure programming). It was NOT caused by BASIC being too easy. Java is an easy language - compared to alternatives like C/C++ - and also expressive enough to code anything, at least in the domain of imperative languages. So it's only missing features to study other paradigms, like functional programming, but then, there is no single language that is good at all paradigms, not even hybrid ones. My first natural conclusion is that a good CS course cannot use a single language. We need enough languages to represent all paradigms, e.g. adding Scheme or Haskell for functional. Even C is justified to allow low-level techniques, for example in an Operating Systems and advanced Compiler Writing courses. I have used Delphi in the past to teach an introductory Programming course for CS, and I found it was a fine choice (by 1996-97 anyway - Java was too new, other alternatives like C/C++ or VB too inadequate). Java is a better language and the fact that it commands a large share of the real world market certainly doesn't hurt; for one thing, the abundance of tools and libraries is a boon to teachers and students. Reply to this Reply to original

Re: No, it shouldn't Go to top ] Posted by: Paul Beckford

Posted on: December 03 2007 12:05 EST

in response to Osvaldo Doederlein I have used Delphi in the past to teach an introductory Programming course for CS, and I found it was a fine choice (by 1996-97 anyway - Java was too new, other alternatives like C/C++ or VB too inadequate). Java is a better language and the fact that it commands a large share of the real world market certainly doesn't hurt; for one thing, the abundance of tools and libraries is a boon to teachers and students. Hi Osvaldo, So how do you teach Java? Do you describe it as an OO language? or a procedural language? Or a bit of both? How do you reconcile the switch statement with OO polymorphism? How do you explain inner classes? Have you ever had a Smart Alex student point out that a virtual function call is not the same as an OO message send? Or that ploymorphism only requires a common Protocol and does not need a shared implementation through class inheritance or a common Interface? The problem for me as a student learning OOP through C++ was that C++ mixed up a number of concepts and ended up being a jack of all trades rather then the master of one. To get to grips with OOP I had to go and learn Smalltalk. How are students meant to understand this stuff through an hybrid like Java or C++? Isn't there an argument for teaching concepts in a pure form first, and then doing vocational training later? Paul. Hi Osvaldo, So how do you teach Java? Do you describe it as an OO language? or a procedural language? Or a bit of both? How do you reconcile the switch statement with OO polymorphism? How do you explain inner classes? Have you ever had a Smart Alex student point out that a virtual function call is not the same as an OO message send? Or that ploymorphism only requires a common Protocol and does not need a shared implementation through class inheritance or a common Interface? The problem for me as a student learning OOP through C++ was that C++ mixed up a number of concepts and ended up being a jack of all trades rather then the master of one. To get to grips with OOP I had to go and learn Smalltalk. How are students meant to understand this stuff through an hybrid like Java or C++? Isn't there an argument for teaching concepts in a pure form first, and then doing vocational training later? Paul. Reply to this Reply to original

Re: No, it shouldn't Go to top ] Posted by: Erik Engbrecht

Posted on: December 03 2007 13:21 EST

in response to Paul Beckford So how do you teach Java? As a "mid-level" language that abstracts away the implementation details of individual processor architectures and operating systems, but does that does not abstract away most of underlying concepts on which they are based. Do you describe it as an OO language? Yes, but I'd give background on the history of the meaning of the term OO. or a procedural language? I don't think they are mutually exclusive concepts. Or a bit of both? Yup. How do you reconcile the switch statement with OO polymorphism? I'd teach the assembly language concept on which switch statements are based (abstracting away the machine details without abstracting away the machine), then generalize switch to pattern matching in functional languages and refer them to some of Martin Odersky's writings on the trades involved in choosing between polymorphism and pattern matching. How do you explain inner classes? As a useful mid-level abstraction on which higher level abstractions, such as closures, can be built. Have you ever had a Smart Alex student point out that a virtual function call is not the same as an OO message send? Show them the Scala actors library. Scala is a statically typed language with virtual methods in the Java/C++ tradition, but the actors library uses message sends (similar to the smalltalk concept, only ansynchronous) for communication with actors, and supplement it with a discussion of partial functions. I'd use this to point out the trades that must be made in determining how software components communicate. Or that ploymorphism only requires a common Protocol and does not need a shared implementation through class inheritance or a common Interface? I'd teach structural them structural typing, and then weaken it to duck typing and refer back to the discussion of message sends and how trades must be made. How are students meant to understand this stuff through an hybrid like Java or C++? I agree. In an academic setting I would teach more pure languages, like Haskell, Scheme, Lisp, Smalltalk, C, and Pascal first. Then I would teach hybrids like C++, Java, Scala, Python, and Ruby - and back to the theme of pragmatic trades. Isn't there an argument for teaching concepts in a pure form first, and then doing vocational training later? Yes but I don't think that works. Think about the advantage of agile development - you receive rapid feedback on something tangible. Teaching a lot of theory up front, and even dwelling on pure languages, leads to too long of a feedback loop before learning something that can be tangibly applied in a commercial setting. I also think CS and Software Engineering should be separate majors, just like Chemistry and Chemical Engineering. Paul, I don't teach programming but I'll take a shot as answering your questions.As a "mid-level" language that abstracts away the implementation details of individual processor architectures and operating systems, but does that does not abstract away most of underlying concepts on which they are based.Yes, but I'd give background on the history of the meaning of the term OO.I don't think they are mutually exclusive concepts.Yup.I'd teach the assembly language concept on which switch statements are based (abstracting away the machine details without abstracting away the machine), then generalize switch to pattern matching in functional languages and refer them to some of Martin Odersky's writings on the trades involved in choosing between polymorphism and pattern matching.As a useful mid-level abstraction on which higher level abstractions, such as closures, can be built.Show them the Scala actors library. Scala is a statically typed language with virtual methods in the Java/C++ tradition, but the actors library uses message sends (similar to the smalltalk concept, only ansynchronous) for communication with actors, and supplement it with a discussion of partial functions. I'd use this to point out the trades that must be made in determining how software components communicate.I'd teach structural them structural typing, and then weaken it to duck typing and refer back to the discussion of message sends and how trades must be made.I agree. In an academic setting I would teach more pure languages, like Haskell, Scheme, Lisp, Smalltalk, C, and Pascal first. Then I would teach hybrids like C++, Java, Scala, Python, and Ruby - and back to the theme of pragmatic trades.Yes but I don't think that works. Think about the advantage of agile development - you receive rapid feedback on something tangible. Teaching a lot of theory up front, and even dwelling on pure languages, leads to too long of a feedback loop before learning something that can be tangibly applied in a commercial setting. I also think CS and Software Engineering should be separate majors, just like Chemistry and Chemical Engineering. Reply to this Reply to original

Re: No, it shouldn't Go to top ] Posted by: Paul Beckford

Posted on: December 03 2007 14:03 EST

in response to Erik Engbrecht In an academic setting I would teach more pure languages, like Haskell, Scheme, Lisp, Smalltalk, C, and Pascal first. Then I would teach hybrids like C++, Java, Scala, Python, and Ruby ... Hi Erik, Thats not fair - LOL :^) By the time you got around to teaching Java, your students would have gained sufficient insight into programming languages to write a useful critique of the Java language themselves, off the bat LOL!! You know this stuff and understand the issues and trade offs, and so would your students. My point is that most CS graduates don't. I'm not for banning stuff, but proprietary languages which come to fame as a result of judicious marketing by vendors, would not be the first on my list when it comes to student tuition. Evidently they wouldn't be first on yours either :^) Nice answers :^), Paul. Hi Erik, Thats not fair - LOL :^) By the time you got around to teaching Java, your students would have gained sufficient insight into programming languages to write a useful critique of the Java language themselves, off the bat LOL!! You know this stuff and understand the issues and trade offs, and so would your students. My point is that most CS graduates don't. I'm not for banning stuff, but proprietary languages which come to fame as a result of judicious marketing by vendors, would not be the first on my list when it comes to student tuition. Evidently they wouldn't be first on yours either :^) Nice answers :^), Paul. Reply to this Reply to original

Re: No, it shouldn't Go to top ] Posted by: Erik Engbrecht

Posted on: December 03 2007 14:19 EST

in response to Paul Beckford By the time you got around to teaching Java, your students would have gained sufficient insight into programming languages to write a useful critique of the Java language themselves, off the bat LOL!! I wouldn't teach all the languages I listed, it was just a sampling. You know this stuff and understand the issues and trade offs, and so would your students. My point is that most CS graduates don't. The funny thing is when I was a freshly minted CS graduate I didn't know it, either. The foundation was there, but it takes years of experience and continued non-vocational learning. My hope would be that some day my student's would say "OMG, didn't Professor Engbrecht as something about this back in school? And I thought he was full of crap..." I wouldn't teach all the languages I listed, it was just a sampling.The funny thing is when I was a freshly minted CS graduate I didn't know it, either. The foundation was there, but it takes years of experience and continued non-vocational learning. My hope would be that some day my student's would say "OMG, didn't Professor Engbrecht as something about this back in school? And I thought he was full of crap..." Reply to this Reply to original

Would you like fries with that? Go to top ] Posted by: Michael Watson

Posted on: December 03 2007 14:23 EST

in response to Erik Engbrecht In an academic setting I would teach more pure languages, like Haskell, Scheme, Lisp, Smalltalk, C, and Pascal first. Then I would teach hybrids like C++, Java, Scala, Python, and Ruby - and back to the theme of pragmatic trades.



So you'd teach languages rarely used in commerce and expect your students to do what? Sell Big Macs for a living? I agree academic concepts must be covered but in a context that can be transferred to the real world, which means using the tools popular with commerce. I learnt Pascal, Delphi, C, Java and Perl as part of my degree. I worked with Delphi for a while but the sheer volume of Java jobs meant I would have been an idiot not to focus on Java. I've never seen a job ad asking for Haskell or Scheme. I've seen thousands asking for Java and C/C++. So you'd teach languages rarely used in commerce and expect your students to do what? Sell Big Macs for a living? I agree academic concepts must be covered but in a context that can be transferred to the real world, which means using the tools popular with commerce. I learnt Pascal, Delphi, C, Java and Perl as part of my degree. I worked with Delphi for a while but the sheer volume of Java jobs meant I would have been an idiot not to focus on Java. I've never seen a job ad asking for Haskell or Scheme. I've seen thousands asking for Java and C/C++. Reply to this Reply to original

Re: Would you like fries with that? Go to top ] Posted by: Erik Engbrecht

Posted on: December 03 2007 14:45 EST

in response to Michael Watson So you'd teach languages rarely used in commerce and expect your students to do what? Sell Big Macs for a living? If my students are so intellectually lazy and disinterested in their field that they will not take time outside of their own studies to learn a "useful" technology then I hope they do end up selling Big Macs instead of writing software. But maybe real professors have lower expectations. On a tangential note, I think statements like "What do you expect them to do? Sell Big Macs for a living?" are extremely destructive. My personal observation is that a person's employability is as much or more determined by their willingness to apply their skills to something useful, and in a professional manner, than it is by the skills themselves. The people I know who got "worthless" degrees who are willing to do something practical usually make almost as much money as those with "real" degrees, and are often far happier in their jobs. Being an English major does not make one unemployable. There's tons of need for good writers. It's expecting to write poetry that no one understands and refusing to do anything else that makes one unemployable. So I think as long as my hypothetical student who learned several obscure languages is willing to hunker down a learn Java so he can make a living, he will be fine. Better off, in fact, than the person who received a vocationally targetted CS education, because when technologies change he will easily change with it. If my students are so intellectually lazy and disinterested in their field that they will not take time outside of their own studies to learn a "useful" technology then I hope they do end up selling Big Macs instead of writing software. But maybe real professors have lower expectations. On a tangential note, I think statements like "What do you expect them to do? Sell Big Macs for a living?" are extremely destructive. My personal observation is that a person's employability is as much or more determined by their willingness to apply their skills to something useful, and in a professional manner, than it is by the skills themselves. The people I know who got "worthless" degrees who are willing to do something practical usually make almost as much money as those with "real" degrees, and are often far happier in their jobs. Being an English major does not make one unemployable. There's tons of need for good writers. It's expecting to write poetry that no one understands and refusing to do anything else that makes one unemployable. So I think as long as my hypothetical student who learned several obscure languages is willing to hunker down a learn Java so he can make a living, he will be fine. Better off, in fact, than the person who received a vocationally targetted CS education, because when technologies change he will easily change with it. Reply to this Reply to original

Re: No, it shouldn't Go to top ] Posted by: William Martinez

Posted on: December 03 2007 18:20 EST

in response to Erik Engbrecht Hello Erick, Hello Paul (long time gone myself). I actually learned Basic as my first language in a TRS-80, Tandy computer. Later at university I officially learned programming using Pascal. Recursion and pointer notion was a killer for many of the students, but it was a safe language. The second course on programming introduced the OO concepts using C++ (of course, they were not true O), but we had Abstract Data Types first implemented in Pascal and DOS. You learned C in another course with concurrency and Unix machines. Then came Prolog in logical programming plus LISP. I special courses you learned Smalltalk or Eiffel. Then I heard eve LogoWritter was an introductory course to teach naturally Recursion, and then I heard that Java is the languages you learn with. So, I guess we need to learn using the correct language for what we are trying to learn. If I need to learn first about flows and structure, I would go to flow charts. When I understand what a process is and loops and that stuff, and I've learned abstraction, I should go to a safe language, that reads like English and tell me when I go farther that I should in an Array. If I need to go learn OO, first I would design in it. Then I would go and learn using Smalltalk for instance. At the end, I have the basic knowledge to get to Java and quickly learn how to use it, and also understand why it is not a truly OOL. Right now, if you learn programing skill using Java, you may end up creating a Script pattern instance (Richardson) instead of a domain model (OO). The problem is learning schools try to teach you the language you are going to use in the street, and not actually teach you the notions of programming. So, Java may be used, but not as the only language, nor the first one. William Martinez. Reply to this Reply to original

Re: No, it shouldn't Go to top ] Posted by: Joe Kauzlarich

Posted on: December 10 2007 20:12 EST

in response to Erik Engbrecht Thank you, Frank. I, too, started with BASIC in 1987 when I was a little older than your son, and I believe it is a perfectly reasonable starting point. And so is Java-- as long as the developer, as you say, has the curiosity and motivation to keep learning new things. By now, I know a host of interesting languages (in multiple 'paradigms'), but few languages are as suitable as Java for long-term maintenance where the code must pass through many hands. The best code is usually the most verbose. Reply to this Reply to original

elitist nonsense Go to top ] Posted by: Cameron Purdy

Posted on: December 03 2007 17:54 EST

in response to Paul Beckford So how do you teach Java? Do you describe it as an OO language? or a procedural language? Or a bit of both? How do you reconcile the switch statement with OO polymorphism? How do you explain inner classes? Have you ever had a Smart Alex student point out that a virtual function call is not the same as an OO message send? Or that ploymorphism only requires a common Protocol and does not need a shared implementation through class inheritance or a common Interface? Come on! What a bunch of elitist nonsense! Being able to spell polimorfism doesn't make your point valid. Either you can solve real world problems, or you can't. The former we refer to as computer scientists; the latter we refer to as politicians. These terms and concepts exist to describe the state of the art; not to define it. The terms are meant to serve us; not vice versa. We employ them in order to have meaningful conversation; not to publicly prove our self worth. One can teach Java by showing how most code in Java has a direct translation down to the operations that are typical of CPU instruction sets, and thus one can teach how Java is a high level language for doing relatively basic things. And one can do the same with Smalltalk. However, it would better profit the student to think in terms of the problems that one must solve, and how the language is designed to help provide elegant solutions to those problems. The ability to compose complex data structures, to manage them with concurrent access from multiple threads and CPUs, the ability to aggregate them into more complex data structures and programs that solve real problems .. these are the benefits (and the only benefits) of computer languages. Java isn't designed to make theorizing philosophers happy. It's designed to help solve age-old computer problems with a little less pain and in a little more manageable manner. It does so quite admirably. I think your later comment illustrates my distaste: By the time you got around to teaching Java, your students would have gained sufficient insight into programming languages to write a useful critique of the Java language themselves, off the bat LOL!! "LOL"? Is there some private joke that only people who code in "Haskell, Scheme, Lisp, Smalltalk" are supposed to get? I don't get it .. Peace, Cameron Purdy Paul,Come on! What a bunch of elitist nonsense! Being able to spell polimorfism doesn't make your point valid. Either you can solve real world problems, or you can't. The former we refer to as computer scientists; the latter we refer to as politicians. These terms and concepts exist to describe the state of the art; not to define it. The terms are meant to serve us; not vice versa. We employ them in order to have meaningful conversation; not to publicly prove our self worth. One can teach Java by showing how most code in Java has a direct translation down to the operations that are typical of CPU instruction sets, and thus one can teach how Java is a high level language for doing relatively basic things. And one can do the same with Smalltalk. However, it would better profit the student to think in terms of the problems that one must solve, and how the language is designed to help provide elegant solutions to those problems. The ability to compose complex data structures, to manage them with concurrent access from multiple threads and CPUs, the ability to aggregate them into more complex data structures and programs that solve real problems .. these are the benefits (and the only benefits) of computer languages. Java isn't designed to make theorizing philosophers happy. It's designed to help solve age-old computer problems with a little less pain and in a little more manageable manner. It does so quite admirably. I think your later comment illustrates my distaste:"LOL"? Is there some private joke that only people who code in "Haskell, Scheme, Lisp, Smalltalk" are supposed to get? I don't get it .. Peace, Cameron Purdy Oracle Coherence: Data Grid for Java and .NET Reply to this Reply to original

Re: elitist nonsense Go to top ] Posted by: William Martinez

Posted on: December 03 2007 18:33 EST

in response to Cameron Purdy Hello Cameron. I agree with some things you say, but I guess I defend the idea that programming is not actually writing in a language. You see, the language is just the way you describe your solution. The higher description of the solution (up to structures and reasons to actually exist and co-exist), is the architecture. The detailed design in UML diagrams is another description of the same solution. The lines of code in Java are another description of your solution. That is, the language per se is not driving the solution, it just allows you to describe it in an easy or not-so easy way. There are some problems I would love to solve in Prolog, because they are more natural to solve there. Some other I would use Pascal. And for some other, Java. Thus, I do programming but not with a language. If you teach programming, you teach ways of thinking to solve a problem, strategies and theory, concepts, game trees, objects and data types. Then you map to a language. So, theory helps you to solve the problem, and you can learn multiple languages just by knowing how to describe your solution in them. In other words, Java in wonderful for what it does, and that is describing solutions. But it was not intended to teach programming, was it? So you cannot use to do that. William Reply to this Reply to original

Re: elitist nonsense Go to top ] Posted by: Paul Beckford

Posted on: December 03 2007 20:38 EST

in response to Cameron Purdy Paul,



So how do you teach Java?



Do you describe it as an OO language?



or a procedural language?



Or a bit of both?



How do you reconcile the switch statement with OO polymorphism?



How do you explain inner classes?



Have you ever had a Smart Alex student point out that a virtual function call is not the same as an OO message send?



Or that ploymorphism only requires a common Protocol and does not need a shared implementation through class inheritance or a common Interface?



Come on! What a bunch of elitist nonsense!



Being able to spell polimorfism doesn't make your point valid. Either you can solve real world problems, or you can't. The former we refer to as computer scientists; the latter we refer to as politicians.



These terms and concepts exist to describe the state of the art; not to define it. The terms are meant to serve us; not vice versa. We employ them in order to have meaningful conversation; not to publicly prove our self worth.



One can teach Java by showing how most code in Java has a direct translation down to the operations that are typical of CPU instruction sets, and thus one can teach how Java is a high level language for doing relatively basic things.



And one can do the same with Smalltalk.



However, it would better profit the student to think in terms of the problems that one must solve, and how the language is designed to help provide elegant solutions to those problems. The ability to compose complex data structures, to manage them with concurrent access from multiple threads and CPUs, the ability to aggregate them into more complex data structures and programs that solve real problems .. these are the benefits (and the only benefits) of computer languages.



Java isn't designed to make theorizing philosophers happy. It's designed to help solve age-old computer problems with a little less pain and in a little more manageable manner. It does so quite admirably.



I think your later comment illustrates my distaste:



By the time you got around to teaching Java, your students would have gained sufficient insight into programming languages to write a useful critique of the Java language themselves, off the bat LOL!!



"LOL"? Is there some private joke that only people who code in "Haskell, Scheme, Lisp, Smalltalk" are supposed to get?



I don't get it ..



Peace,



Cameron Purdy

Oracle Coherence: Data Grid for Java and .NET Hi Cameron, It isn't elitism. It's knowing your trade. There is no such thing as a "golden hammer" that solves all problems in all situations. As programmers we should be able to pick and choose the right tool for the job. Sometimes that may be Java, at other times it could be Lisp. This doesn't make one language better than the other it just makes it more appropriate for a given problem. Even if you code in Java all the time, knowledge of other programming styles is useful and will make you a better Java programmer. An example that comes to mind is ORM for CRUD applications. For most CRUD applications are not immune to type changes (if you add a new column to a database record the changes will ripple through to the UI). So why model database records as objects? The stable abstractions are in fact functions (create, retrieve, update and delete) so perhaps the database records should be modeled as hashmaps accessed using a functional programing style such as with LINQ. What ever your views are, how can you compare these two approaches if you haven't been taught them both? Java should be just one tool in your toolbox. The problem we have today in the Java world is the mentality that says that one tool fits all! And some continue to think this way even when the resultant solutions are hopelessly complex and ridiculous when compared to other alternatives. Regards, Paul. Hi Cameron, It isn't elitism. It's knowing your trade. There is no such thing as a "golden hammer" that solves all problems in all situations. As programmers we should be able to pick and choose the right tool for the job. Sometimes that may be Java, at other times it could be Lisp. This doesn't make one language better than the other it just makes it more appropriate for a given problem. Even if you code in Java all the time, knowledge of other programming styles is useful and will make you a better Java programmer. An example that comes to mind is ORM for CRUD applications. For most CRUD applications are not immune to type changes (if you add a new column to a database record the changes will ripple through to the UI). So why model database records as objects? The stable abstractions are in fact functions (create, retrieve, update and delete) so perhaps the database records should be modeled as hashmaps accessed using a functional programing style such as with LINQ. What ever your views are, how can you compare these two approaches if you haven't been taught them both? Java should be just one tool in your toolbox. The problem we have today in the Java world is the mentality that says that one tool fits all! And some continue to think this way even when the resultant solutions are hopelessly complex and ridiculous when compared to other alternatives. Regards, Paul. Reply to this Reply to original

Re: elitist nonsense Go to top ] Posted by: Cameron Purdy

Posted on: December 03 2007 23:43 EST

in response to Paul Beckford It isn't elitism. It's knowing your trade. Well, I personally find your thinly (if) veiled dislike of the "fake OO" Java language to be a bit elitist. I enjoy learning and studying (and occasionally creating) programming languages, but that is a hobby. As programmers we should be able to pick and choose the right tool for the job. Sometimes that may be Java, at other times it could be Lisp. This doesn't make one language better than the other it just makes it more appropriate for a given problem. In my experience, FWIW, most programmers never get a chance to make such a choice. I like Lisp, from a "playing with it" point of view, but I've never encountered an excuse to use it to build anything for work. (Parenthetically speaking.) The problem we have today in the Java world is the mentality that says that one tool fits all! Well, I'm probably a bit more cynical that you on this one. I think that the problem is that we don't bother to teach people how to _think_. It seems to me that people who learn good architecture and problem solving skills do so in spite of the universities, in spite of their employers, etc. Peace, Cameron Purdy Well, I personally find your thinly (if) veiled dislike of the "fake OO" Java language to be a bit elitist. I enjoy learning and studying (and occasionally creating) programming languages, but that is a hobby.In my experience, FWIW, most programmers never get a chance to make such a choice. I like Lisp, from a "playing with it" point of view, but I've never encountered an excuse to use it to build anything for work. (Parenthetically speaking.)Well, I'm probably a bit more cynical that you on this one. I think that the problem is that we don't bother to teach people how to _think_. It seems to me that people who learn good architecture and problem solving skills do sothe universities,their employers, etc. Peace, Cameron Purdy Oracle Coherence: Data Grid for Java and .NET Reply to this Reply to original

Re: elitist nonsense Go to top ] Posted by: Mark N

Posted on: December 04 2007 00:38 EST

in response to Cameron Purdy Well, I'm probably a bit more cynical that you on this one. I think that the problem is that we don't bother to teach people how to _think_. It seems to me that people who learn good architecture and problem solving skills do so in spite of the universities, in spite of their employers, etc.



Peace,



Cameron Purdy

Oracle Coherence: Data Grid for Java and .NET I agree. It is a people problem or solution. Or should I say personal. I really wonder how many people are actually able to "think" even if you try to teach them. They learn by rote. Unfortunately, thinking is important. But teaching others to do it is difficult for those to which i comes easily. I was going to say this earlier in the day but I doubt it is the language that people learn first. The problem I have seen is many people who "learn" to program or try to program probably have limited ability to learn more one language let alone more than one. I agree. It is a people problem or solution. Or should I say personal. I really wonder how many people are actually able to "think" even if you try to teach them. They learn by rote. Unfortunately, thinking is important. But teaching others to do it is difficult for those to which i comes easily. I was going to say this earlier in the day but I doubt it is the language that people learn first. The problem I have seen is many people who "learn" to program or try to program probably have limited ability to learn more one language let alone more than one. Reply to this Reply to original

Re: elitist nonsense Go to top ] Posted by: John Brand

Posted on: December 05 2007 02:58 EST

in response to Cameron Purdy Well, I'm probably a bit more cynical that you on this one. I think that the problem is that we don't bother to teach people how to _think_. It seems to me that people who learn good architecture and problem solving skills do so in spite of the universities, in spite of their employers, etc. Well, being even more cynical, I´d say that you cant really teach people to think, you can only present the tools necessary to forge ones own view of reality. But, then again, very little work in this industry actually requires you to _think_, usually it is quite enough to pick the appropriate existing thought and apply it to your problem at hand. Scalable, reliable, and in-order multicast-protocols excluded of course... Well, being even more cynical, I´d say that you cant really teach people to think, you can only present the tools necessary to forge ones own view of reality. But, then again, very little work in this industry actually requires you to _think_, usually it is quite enough to pick the appropriate existing thought and apply it to your problem at hand. Scalable, reliable, and in-order multicast-protocols excluded of course... Reply to this Reply to original

Re: elitist nonsense Go to top ] Posted by: Karl Banke

Posted on: December 04 2007 08:34 EST

in response to Paul Beckford An example that comes to mind is ORM for CRUD applications. For most CRUD applications are not immune to type changes (if you add a new column to a database record the changes will ripple through to the UI). So why model database records as objects? The stable abstractions are in fact functions (create, retrieve, update and delete) so perhaps the database records should be modeled as hashmaps accessed using a functional programing style such as with LINQ Are they? I doubt that this abstraction is any more stable than the other (using objects). The question is "stable against what?". Consider your datamodel changes to introduce new required columns (or worse changes to drop them), splits tables or changes the inheritance (specialization) model in the database. There will likely be so many changes in the overall application that the "rippling through" does hardly create more impact. Or consider the all to real world example of moving your application from a proper database to one without triggers, where you need to pull thousand of lines of (largely declaratively programmed) code up into the application. Are they? I doubt that this abstraction is any more stable than the other (using objects). The question is "stable against what?". Consider your datamodel changes to introduce new required columns (or worse changes to drop them), splits tables or changes the inheritance (specialization) model in the database. There will likely be so many changes in the overall application that the "rippling through" does hardly create more impact. Or consider the all to real world example of moving your application from a proper database to one without triggers, where you need to pull thousand of lines of (largely declaratively programmed) code up into the application. Reply to this Reply to original

Re: elitist nonsense Go to top ] Posted by: Paul Beckford

Posted on: December 04 2007 12:51 EST

in response to Karl Banke An example that comes to mind is ORM for CRUD applications. For most CRUD applications are not immune to type changes (if you add a new column to a database record the changes will ripple through to the UI). So why model database records as objects? The stable abstractions are in fact functions (create, retrieve, update and delete) so perhaps the database records should be modeled as hashmaps accessed using a functional programing style such as with LINQ



Are they? I doubt that this abstraction is any more stable than the other (using objects). The question is "stable against what?". Hi Karl, Stable against type changes. You can add a new column to your database table and the functions that manipulate your hashmap (database record) don't need changing. Where as with an object you've got to add a new getter and setter to expose each new property. I could say more but it's a bit off topic. Suffice it to say that there is often more than one way to skin a cat :^) and ignorance of "other ways" doesn't bode well !! Paul. Hi Karl, Stable against type changes. You can add a new column to your database table and the functions that manipulate your hashmap (database record) don't need changing. Where as with an object you've got to add a new getter and setter to expose each new property. I could say more but it's a bit off topic. Suffice it to say that there is often more than one way to skin a cat :^) and ignorance of "other ways" doesn't bode well !! Paul. Reply to this Reply to original

Re: elitist nonsense Go to top ] Posted by: Karl Banke

Posted on: December 06 2007 04:30 EST

in response to Paul Beckford Hi Karl,



Stable against type changes. You can add a new column to your database table and the functions that manipulate your hashmap (database record) don't need changing. Where as with an object you've got to add a new getter and setter to expose each new property. Right your are. But still, looking at it from a day-day perspective, I often see that mixing different "programming paradigm" and flavors thereof in a system can create incredible instability against one of the most important changes that occur in the lifecycle of a piece of software - change of people. Even if these people have been exposed to the concepts they will still need a huge effort to learn the respective tools that come which each technology and implement it with subtle changes to the original meaning. Of course, this does not mean that a university should not teach functional programming or discard object orientation or declarative programming etc. Right your are. But still, looking at it from a day-day perspective, I often see that mixing different "programming paradigm" and flavors thereof in a system can create incredible instability against one of the most important changes that occur in the lifecycle of a piece of software - change of people. Even if these people have been exposed to the concepts they will still need a huge effort to learn the respective tools that come which each technology and implement it with subtle changes to the original meaning. Of course, this does not mean that a university should not teach functional programming or discard object orientation or declarative programming etc. Reply to this Reply to original

Re: No, it shouldn't Go to top ] Posted by: Osvaldo Doederlein

Posted on: December 03 2007 20:08 EST

in response to Paul Beckford So how do you teach Java?



Do you describe it as an OO language?



or a procedural language?



Or a bit of both?



How do you reconcile the switch statement with OO polymorphism?



How do you explain inner classes?



Have you ever had a Smart Alex student point out that a virtual function call is not the same as an OO message send?

(...) You raise a more specific question about picking a language to teach CS theory. This is not what I taught at that time - it was an introductory course for people who had just entered faculty and never programmed in any language (or at least I had to assume that). I had to teach people to implement basic algorithms, use structured programming constructs (no OO at all that stage), loops, variables and so on... you may call that a bottom-up approach, some people will prefer a top-down one, starting with heavyweight programming language theory and "pure" languages. I used the latter as a MSc student, I particularly liked pure and small languages like Pico because students could work with its full source code and implement new language constructs - I sweated a lot doing that, but this experience taught me some 50% of everything I know about programming (thanks Theo!). But then again, that was an advanced course. I also taught Java, but in different contexts - training courses, or using Java just as a tool for courses on different subjects like CORBA. I never had the experience of teaching an advanced university course (frankly, teaching was never my forte and I abandoned this activity after a few years - I'm much happier coding). But if I had to give such a course, why not Java? Yes, it's not a pure OOPL (say like Smalltalk), it raises several hard questions. Yes, it is an OO language, it's just not radical enough to make a huge sacrifice of efficiency in the altar of simplicity and orthogonality (e.g. representing integers as full-blown objects or going wild with dynamic dispatch and metaprogramming). You may call Java a pragmatic OO language. Of course, pragmatic designs are always bound to the technology that is mature by the time they are designed, so these languages get old, but all languages do for some reason or another... Your question about the switch statement is also very good: switch-less languages are typically those like Smalltalk, where people will sometimes add polymorphic double-dispatch methods to core library classes like String or Array, or resort to obscure MOP techniques. I don't know which option is worse, and IMHO both contributed to the doom of Smalltalk for real-world development. The fact is that 'switch' expresses a very useful and efficient technique: dispatch by value. Polymorphism, in comparison, is dispatch by type, and there are many cases where representing each possible value as a type (or as a class) is not desirable and not elegant; it's just an horrendous hack to abuse polymorphism where it doesn't belong. More: most pure OOPLs were created many years before people discovered Design Patterns, Separation of Concerns etc., which are better solutions for the same problems addressed by many old-school pure OO techniques. You raise a more specific question about picking a language to teach CS theory. This is not what I taught at that time - it was an introductory course for people who had just entered faculty and never programmed in any language (or at least I had to assume that). I had to teach people to implement basic algorithms, use structured programming constructs (no OO at all that stage), loops, variables and so on... you may call that a bottom-up approach, some people will prefer a top-down one, starting with heavyweight programming language theory and "pure" languages. I used the latter as a MSc student, I particularly liked pure and small languages like Pico because students could work with its full source code and implement new language constructs - I sweated a lot doing that, but this experience taught me some 50% of everything I know about programming (thanks Theo!). But then again, that was an advanced course. I also taught Java, but in different contexts - training courses, or using Java just as a tool for courses on different subjects like CORBA. I never had the experience of teaching an advanced university course (frankly, teaching was never my forte and I abandoned this activity after a few years - I'm much happier coding). But if I had to give such a course, why not Java? Yes, it's not a pure OOPL (say like Smalltalk), it raises several hard questions. Yes, it is an OO language, it's just not radical enough to make a huge sacrifice of efficiency in the altar of simplicity and orthogonality (e.g. representing integers as full-blown objects or going wild with dynamic dispatch and metaprogramming). You may call Java a pragmatic OO language. Of course, pragmatic designs are always bound to the technology that is mature by the time they are designed, so these languages get old, but all languages do for some reason or another... Your question about the switch statement is also very good: switch-less languages are typically those like Smalltalk, where people will sometimes add polymorphic double-dispatch methods to core library classes like String or Array, or resort to obscure MOP techniques. I don't know which option is worse, and IMHO both contributed to the doom of Smalltalk for real-world development. The fact is that 'switch' expresses a very useful and efficient technique: dispatch by value. Polymorphism, in comparison, is dispatch by type, and there are many cases where representing each possible value as a type (or as a class) is not desirable and not elegant; it's just an horrendous hack to abuse polymorphism where it doesn't belong. More: most pure OOPLs were created many years before people discovered Design Patterns, Separation of Concerns etc., which are better solutions for the same problems addressed by many old-school pure OO techniques. Reply to this Reply to original

Re: Should Java be banned from schools? Go to top ] Posted by: Frank Zammetti

Posted on: December 03 2007 13:14 EST

in response to Ke Jin I remember how I learned how to program, and I now have a 7-year old son that is getting into it, so blending these two perspectives has given me an intersting, err, perspective! I started with BASIC, as most people my age (mid 30's) did. I then moved to a number of years of straight Assembly. I then moved on to a whole bunch of different languages including C/C++, Pascal, Java, VB, Foxpro, LISP, and a couple more that I've since forgotten. I'd have to consider myself a 95% Java-only coder these days and for the past few years, mixing in some C/C++, VB and C# here and there for the other 5%. My son has been playing with QuickBasic and Java a bit. I've also gotten him playing with some more abstract-type "not quite programming" things like game creators and those all-graphical "programming" languages floating around these days. It worked perfectly for me, and it's working for him. The key when you're just getting started is to start off gently and see some immediate results to get the interest level up. For me it was making a guy do jumping jacks via a bunch of prints, a for-next loop for a delay, clearing the screen and drawing the next frame (all with ASCII characters). For my son, writing a simple Pong game did the trick. I don't believe it's important to implement perfect habits right from the start. I started with tons of GOTOs in my early coding and I've had no trouble ridding myself of that habit. For this reason, all the BASIC hate vexes me because I've never found a gentler, more immediately rewarding way to get programming into the head of a young person. Let's face it, at the end of the day *ALL* programming boils down to a list of instructions telling the computer what to do. It's being able to logically order a series of steps to make something larger occur. You can pile abstraction upon abstraction on top of that, but that's ultimately what it is. BASIC allows you to do that in a very human-readable form without being confused by abstractions that a learning brain probably can't handle yet. Kids need concrete things to understand. Hell, not just kids, people in general of any age I think this is true of. Until the concept of a list of instructions, basic loops and branching constructs are second-nature, attempting to introduce layers of abstraction is counterproductive IMO. My son has now just started played with VB a little because that's a good introduction to "object-oriented" programming... now, I don't mean that in terms of OOP, it's more basic than that... When you're in a VB workspace, you click a button on a form, a code window pops up and you attach a few lines of code that does something when the button is clicked, change the background color of the form for example. That's introducing the idea of an object that has some behavior encapsulated within it, but it's doing so in a way that isn't hard to grasp. In fact, it's almost subconscious conprehension. It's very concrete: here's an object on the screen, here's the code it contains and here's the event that has to occur for that code to execute. It's very visual, very natural, specially for a young child. Now, later on you can say "ok, now here's a piece of code that is an object with behavior too", and even though it's not concrete like the button graphic on the screen was, the brain can make that abstract leap because it ties back to something concrete it understands (assuming you explain it reasonably well of course). I'm also a *HUGE* believer in the thought that to be a really top-notch programmer, you have to have done some Assembly at some point. There are of course exceptions, and I'm in no way saying we should be using Assembly day in and day out for things we do in most of our work (save truly low-level coding where it's still a necessity), but in general I believe this to be the case. You get such a fundamental understanding, in a very subconscious way, of how a program works. It's that ability to think, analyze and just *understand* program flow and structure that I don't think you get from any other language. For this reason, my son will get some Assembly time down the road. I don't think starting there would be productive though. So, should Java specifically be banned from schools? No. Should it be the *primary* language taught? No. It's too abstract to be useful for teaching someone new to programming how to code. I still believe some variation of BASIC is the right choice as a first encounter with programming, and then move on to something more low-level, be it Assembly or C. I'm not sure if VB is the right answer either, but it's probably a better choice than Java, and probably a better choice than C/C++, at least in the beginning. Then again, it's the underlying concepts of BEING ABLE TO THINK that someone has to learn to be able to program. Some may argue that's something that can't be taught, but I'm not so sure. I can't tell you how many "programmers" I've met over the years that *appear* to know what they're doing but in reality can't think their way out of a paper bag. The sure test is to have someone troubleshoot a bug... if they can't do it, or can't do so well (which is subjective, but most of us know it when we see it) then regardless of how they learned programming, they didn't learn the underlying concepts. Someone can learn a programming langauge and be as solid in it as they want and they'll be useful on some level, but they'll never go beyond that, and we've already got way too many of those types of people floating around. But, I've also seen some of those programmers improve over time with some mentoring, so I don't think the ability to think is set in stone (although I *do* believe there's a certain degree of predetermined ability and much above that is never going to happen). Also, in the end, anyone that thinks *whatever* you learn in school is going to be sufficient in the real world is fooling themselves. How many times have you seen a CS grade who doesn't know jack about development? How many 15-year old kids have you seen that can code circles around them? How many coworkers do you know that can code a bit but don't put in any effort outside work to improve and thus get past by without knowing it? I also believe programmers have to have a natural aptitude for it, have to have a natural curiosity and drive to learn. Of course, it all comes down to simply being able to think underneath it all, which is an ingredient missing from too many people's toolchest. Dijkstra's comment about BASIC is stupid as evidenced by all the legitimately good programmers out there that started with BASIC. Spolsky's view on Java is short-sighted because Java won't have the negative impact he thinks it will unless the student can't see the forest for the trees and thinks Java is the be-all and end-all of programming and doesn't truly understand the underlying concepts. And none of this makes any difference anyway if the programmer simply can't think logically, which is, at the end of the day, nearly always the problem, not the language or the learning methodology enployed. Frank Reply to this Reply to original

Re: Should Java be banned from schools? Go to top ] Posted by: Rashid Jilani

Posted on: December 03 2007 13:25 EST

in response to Ke Jin It is not a problem of Java or C#. Of course a good CS program should cover Data structures, Concept of Programming language (imperative, declarative, functional, logical etc), OS, and some discrete mathematics; the tools and languages they used to do this is trivial. I blame the generation of what I called "shallow" programmers to the market demand as well as shallow managers and co-workers. Look at the job boards and the technology buzz's(C#, java, XSLT etc) employers and managers are looking for in an individual; some times I joke; if I add all the buzz's and the number of years they are looking for in a programmer, his/her age should be around 200 years:-) Now go back to this imperative and declarative things etc; you will be amazed how many people in the programming world don't have any clue about the basic paradigms and when to use what; but guess what the very same folks are inventing a new framework every week; to make thing worst they also argue hours on this forum why their framework is hollier than though:-) Reply to this Reply to original

Re: Should Java be banned from schools? Go to top ] Posted by: George Coller

Posted on: December 03 2007 13:41 EST

in response to Ke Jin I remember having to learn a range of languages from assembly, to Fortran, to LISP, and C. To say I understood anything about programming by the time I graduated would be a stretch. I think the biggest wake up call after my undergrad degree was how little of the theory you used in day to day programming gigs. Rarely did you write your own data structures or algorithms. The real challenge was finding the right library for the job, understanding requirements and project management issues, dealing with clients instead of instructors, figuring out how to test the results. I'm not sure you can teach "good" programming. I think it has to be absorbed over the years by exposure to both good and bad examples, successful and failed projects, and a wide-range of developers. If you are smart you'll make friends with those who are better than you are in a particular skill and learn from them. I think it is silly to blame colleges for bad programmers. I got a CS degree not a programming degree. Huge difference. One is knowledge, which can be taught, and the other is a skill, which has to be absorbed over time. I could go to school and learn all about the parts of a guitar, how it makes its sound, materials, etc. To learn how to play it means putting in the time. I think it would be interesting to just teach the mathematical concepts and tell the students to code up the homework in whatever language they want. Then discuss and compare the results between different approaches taken. Reply to this Reply to original

Re: Should Java be banned from schools? Go to top ] Posted by: Erik Engbrecht

Posted on: December 03 2007 13:57 EST

in response to George Coller I think the biggest wake up call after my undergrad degree was how little of the theory you used in day to day programming gigs. That's funny because I would say the opposite was true for me. All those libraries of data structures and algorithms are just packaging up the theory into something directly appliable, but I've found people who don't understand the theory simply don't grok the libraries. That's funny because I would say the opposite was true for me. All those libraries of data structures and algorithms are just packaging up the theory into something directly appliable, but I've found people who don't understand the theory simply don't grok the libraries. Reply to this Reply to original

no Go to top ] Posted by: jilles van gurp

Posted on: December 03 2007 13:44 EST

in response to Ke Jin Banning stuff doesn't help. The problem is that most computer science education is either obsolete or of dubious quality (or both). Obsolete is not so bad as it sounds because CS education in the seventies/eighties was quite good. So what if you learn a few useless languages, you still pick up the skills to quickly learn something new. I actually did some lisp and modula 3 in university during the mid nineties. Completely pointless (even at the time) but it taught me that there are different ways of doing the same thing. The dubious quality is a bigger issue. In much of the world, CS teachers are severely underpaid relative to the stupid IT jobs they could probably do in their sleep. In practice that means universities are a strange mix of idealistic and incompetent people mixed with overworked and inexperienced people who do all the hard teaching work that mostly move on to industry after a few years. Think 50 year old professors of software engineering who have never worked on a software system of substantial size or worked in teams larger than 2. Java is not a bad language for education. It's reasonably popular; has reasonably simple semantics; you can do a hell of a lot of cool stuff with it; tooling is excellent; and most young teachers know it very well. The last argument is pretty important because there is nothing worse than a teacher who doesn't understand what he's teaching. So Java is an excellent language to teach all sorts of aspects of computer science and software engineering. Of course a problem would be if this was the only language you ever learn. These days I would say functional programming is still quite essential and actually getting more relevant. My functional programming teacher in Utrecht University (Eric Meyer) now works for Microsoft and helped build LINQ for example. This guy taught me a lot of useful things I promptly forgot but somehow helped me learn a lot of other stuff. And you can do functional programming in lots of popular languages now: (j)ruby, groovy, python, etc. Additionally logic programming is something that you just have to do at least once in your life. If only to understand what it is about. Sadly, commercial use of logic programming is rather limited these days (pretty much limited to stupid business rule evaluation it seems). And finally, at some point in your career you will just have to get your hands dirty with C and C++ (if only to appreciate modern languages even more). Also, no CS study is complete without some messing with machine level instructions, compilers & interpreters, algorithms, etc. Forget about learning a language: a good CS student must be able to design and build language + tool set from scratch. Here's a CPU manual, go implement language foobar for it. Don't come back until its compiler can bootstrap itself. The problem is that many so-called universities don't teach all this stuff. These second rate universities are popping up all over the world. They're called universities but they are just processing mediocre programmers into cubicle occupying, php/Java/VB hacking zombies. A proper university trains you for a scientific career, which has the nice side effect of you learning the proper skills to learn pretty much anything you want to learn. Besides, what you learnt 3 years ago is irrelevant in much of our industry. You need to be able to keep pace with the rapid pace of development everywhere. Some of the best programmers I've seen had theoretical physics or electrical engineering backgrounds. The courses they followed were irrelevant since they learned to think for themselves. Reply to this Reply to original

Re: Should Java be banned from schools? Go to top ] Posted by: Ilya Sterin

Posted on: December 03 2007 16:31 EST

in response to Daniel Botelho "Is Java part of the problem, or is it the schools' issues?"

Maybe your "chief scientist of a Java consulting and service firm", fouled many people to get that job.. or maybe he didn't have 4 years of experience but 1 year plus 4 ;)

Anyway I don't think that this case has nothing to do with java being taught in schools.. Maybe everyone needs to stop personally insulting this man, as most of you other than the original poster don't know him personally and can't evaluate his intelligence. There are many highly intellectual people in the software development field that did not graduate with a formal CS degree and there are many morons with advanced degrees. Maybe everyone needs to stop personally insulting this man, as most of you other than the original poster don't know him personally and can't evaluate his intelligence. There are many highly intellectual people in the software development field that did not graduate with a formal CS degree and there are many morons with advanced degrees. Reply to this Reply to original

Re: Should Java be banned from schools? Go to top ] Posted by: William Martinez

Posted on: December 05 2007 14:21 EST

in response to Nikita Ivanov

Nikita Ivanov.

Despite the fact that I think proper schooling is very important for software engineering I could not agree more with this post. Usually, advanced degree means nothing or very little to me or to anyone I know in software engineering. I guess we are not talking about the degree. Now you can buy one of these papers in Internet. We have here four Universities. The one I work in has a Computer Science career (average 5 years of study). The other one is also CS but a Technical one, the other two specialize in the administrative side of IT and Education. Then there are several private ones. There are also IT schools. There is one that gets you a Java Developer degree in six months, so you are ready to start coding. When I tried to enter Music career, I learned that no one at university age that has been playing by ear the piano is accepted into the piano career, because you are too spoiled. I guess the same happens here. There are great, intelligent guys that missed the opportunity of getting the fundamentals of theory in an university and are condemned to spit Java code all day. And there are others that took 10 years to pass all courses and cannot even structure an if construct. So, add my vote to that. But to the important discussion, schooling is important, it is, and proper tools to teach are too. William Martinez. I guess we are not talking about the degree. Now you can buy one of these papers in Internet. We have here four Universities. The one I work in has a Computer Science career (average 5 years of study). The other one is also CS but a Technical one, the other two specialize in the administrative side of IT and Education. Then there are several private ones. There are also IT schools. There is one that gets you a Java Developer degree in six months, so you are ready to start coding. When I tried to enter Music career, I learned that no one at university age that has been playing by ear the piano is accepted into the piano career, because you are too spoiled. I guess the same happens here. There are great, intelligent guys that missed the opportunity of getting the fundamentals of theory in an university and are condemned to spit Java code all day. And there are others that took 10 years to pass all courses and cannot even structure an if construct. So, add my vote to that. But to the important discussion, schooling is important, it is, and proper tools to teach are too. William Martinez. Reply to this Reply to original

Re: Should Java be banned from schools? Go to top ] Posted by: Paul Beckford

Posted on: December 06 2007 04:11 EST

in response to William Martinez

Nikita Ivanov.

Despite the fact that I think proper schooling is very important for software engineering I could not agree more with this post. Usually, advanced degree means nothing or very little to me or to anyone I know in software engineering.



I guess we are not talking about the degree. Now you can buy one of these papers in Internet.



We have here four Universities. The one I work in has a Computer Science career (average 5 years of study). The other one is also CS but a Technical one, the other two specialize in the administrative side of IT and Education. Then there are several private ones.



There are also IT schools. There is one that gets you a Java Developer degree in six months, so you are ready to start coding.



When I tried to enter Music career, I learned that no one at university age that has been playing by ear the piano is accepted into the piano career, because you are too spoiled.



I guess the same happens here. There are great, intelligent guys that missed the opportunity of getting the fundamentals of theory in an university and are condemned to spit Java code all day. And there are others that took 10 years to pass all courses and cannot even structure an if construct.



So, add my vote to that. But to the important discussion, schooling is important, it is, and proper tools to teach are too.



William Martinez. Hi William, Reasoned and balanced as always:^) You make some very good points in youe usual gentle style. What attracted me to this post, was that the title made me laugh :^). What I've found interesting is just how seriously some have taken it, literally responding to whether Java should or should not be banned in schools. On reflection, I believe the thing that made it funny for me was seeing Java and Computer science in the same sentence. The birth of Java had very little to do with Science. I would describe Java more as a product, born out of the Marketing department. It's purpose was to create a middle ware platform (OS) to steal back/ ring fence market share on the Server from Microsoft, and at this purpose it has been very successful. Sun renaming it's ticker symbol to JAVA is just one example of it's marketing success (this news made me laugh too :^)). In fact Java should be first on the list to be taught in Schools, but not in the Computer Science Department, but in the Business Department :^). As far as computer science is concerned, Java has added very little. Alan Kay's quote, that Java is the worst thing to happen to computer science since MSDOS" is perhaps a bit strong, but it has some truth to it. The lesson to learn from Java is that to be successful as a mainstream programming language, has as much (if not more) to do with marketing a product then it has to do with Computer Science. Basing Java on "C", keeping it simple and giving it away for "free" was a master stroke of Marketing by Sun, which others like Microsoft have been quick to follow. Once we stop taking ourselves so seriously, perhaps we can stop and ponder, just how our industry actually works. Dominated by product marketing. Is that the trait of an industry based on science? I love the honesty of the guy whose says he doesn't care about CS because he's earning $150 an hour peddling Java :^) Paul. Hi William, Reasoned and balanced as always:^) You make some very good points in youe usual gentle style. What attracted me to this post, was that the title made me laugh :^). What I've found interesting is just how seriously some have taken it, literally responding to whether Java should or should not be banned in schools. On reflection, I believe the thing that made it funny for me was seeing Java and Computer science in the same sentence. The birth of Java had very little to do with Science. I would describe Java more as a product, born out of the Marketing department. It's purpose was to create a middle ware platform (OS) to steal back/ ring fence market share on the Server from Microsoft, and at this purpose it has been very successful. Sun renaming it's ticker symbol to JAVA is just one example of it's marketing success (this news made me laugh too :^)). In fact Java should be first on the list to be taught in Schools, but not in the Computer Science Department, but in the Business Department :^). As far as computer science is concerned, Java has added very little. Alan Kay's quote, that Java is the worst thing to happen to computer science since MSDOS" is perhaps a bit strong, but it has some truth to it. The lesson to learn from Java is that to be successful as a mainstream programming language, has as much (if not more) to do with marketing a product then it has to do with Computer Science. Basing Java on "C", keeping it simple and giving it away for "free" was a master stroke of Marketing by Sun, which others like Microsoft have been quick to follow. Once we stop taking ourselves so seriously, perhaps we can stop and ponder, just how our industry actually works. Dominated by product marketing. Is that the trait of an industry based on science? I love the honesty of the guy whose says he doesn't care about CS because he's earning $150 an hour peddling Java :^) Paul. Reply to this Reply to original

Re: Should Java be banned from schools? Go to top ] Posted by: Paul Beckford

Posted on: December 06 2007 13:35 EST

in response to Erik Engbrecht Once we stop taking ourselves so seriously, perhaps we can stop and ponder, just how our industry actually works. Dominated by product marketing. Is that the trait of an industry based on science?



I don't know. I don't think I've ever seen an industry based on science. Can you name such an industry? The only other industry where I've got a fair amount of experience is in the telecoms industry, and there they did a much better job of separating the "business" issues from the technology/science. For example technical terms have a clear and precise meaning. So everyone understands what Pulse Coded Modulation means or Frequency Division Multiplexing and there isn't the same level of confusion and different "meanings" like there is with terms like "Object Orientation" and "Type Safety". And there definitely wasn't/isn't the same techno-marketing gobbledygook that you get in IT like "SOA" and "ESB". I think the computer industry has had a unique history, most of which has been dominated by FUD based marketing and big corporate monopolies. Andy discussion about "the state of mainstream software development", and how it relates to "Computer Science" that ignores this history is likely to miss the point IMO. Paul. The only other industry where I've got a fair amount of experience is in the telecoms industry, and there they did a much better job of separating the "business" issues from the technology/science. For example technical terms have a clear and precise meaning. So everyone understands what Pulse Coded Modulation means or Frequency Division Multiplexing and there isn't the same level of confusion and different "meanings" like there is with terms like "Object Orientation" and "Type Safety". And there definitely wasn't/isn't the same techno-marketing gobbledygook that you get in IT like "SOA" and "ESB". I think the computer industry has had a unique history, most of which has been dominated by FUD based marketing and big corporate monopolies. Andy discussion about "the state of mainstream software development", and how it relates to "Computer Science" that ignores this history is likely to miss the point IMO. Paul. Reply to this Reply to original

i'm tired of these flame bait "articles" Go to top ] Posted by: s h

Posted on: December 03 2007 16:55 EST

in response to Ke Jin Yet again, we have flame bait as an "article". I guess this serves to drive traffic/interest in the site, so they can sell more ads (due to more 'eyeballs' reading)? At any rate (though I shouldn't), I'll grace this flame bait with a response. First, if you read the linked article, the guy rants about how "difficult" pointers are and how that really separates the wheat from the chaff. And he rambles on about how hard CS is as a major (well, at least if pointers are taught), with the uber-difficult-to-learn pointers being what weeds people out. LOL! One of the reasons I majored in CS was because it was so much EASIER than majors like engineering or the hard sciences - I'm not proud of that, but it's true. Well, and I enjoyed it and found it interesting. But to say that it's a hard major or that pointers are difficult, just makes me want to have a good belly laugh. Sure, aspects of CS can be difficult - so much depends on your professor; the wrong professor could make basket-weaving difficult. And, there are aspects of CS like formal languages or various other things that can be challenging, but POINTERS? Gimme a break! Sure, pointers can be a problem from a programming perspective - being somewhat error-prone and potentially causing grief from a maintenance/debugging perspective, etc., but conceptually they are trivial to understand. Second, the premise is that Java is 'easy' and therefore not a good thing to learn. At least the author admits somewhere in his rambling that this is actually more of a feature than a limitation. After all, isn't simplicity (e.g. being "easy") a good thing? Complexity (making something difficult) should be avoided, not encouraged! Sure, there are times when complexity is unavoidable, but simplicity is a sign of good design. If you give me two solutions to a problem, one simple and easy to understand and one complex and convoluted - which is the better solution (all other things being equal)? Of course, there is something to be said for learning the underlying principles - duh! Any good CS program should teach thos