Discussions

News: Should Java be banned from schools?

  1. Should Java be banned from schools? (75 messages)

    Edsgar W. Dijkstra once said: "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration." Java CS student seem to be not much better than their predecessors. As Joel Spolsky pointed out in his article The Perils of Java, starting from the easy to learn Java language also has a negative impact on the development of abstraction ability and mental agility. A while ago, I had a conversation with a chief scientist of a Java consulting and service firm. Initially, he sneered at the concept of domain specific modeling (DSM) and claimed that he had been doing similar thing for the last four years . Prepared to hear some insight opinions, I was disappointed to find out that he actually did not have even the lowest level understanding on what he was claiming and commenting about. When the topic changed to Java vs XSLT, he started to criticize the XSLT for not allowing programmatic configuration. Specifically, he was not able to change values of XSLT variables. I thought, by programmatic , what he really meant was imperative. Therefore, I explained to him that this was not a flaw of XSLT. XSLT (at least in 1.0) did not have the concept of mutable variables because it was designed as a declarative language. He should change his mindset for this (imperative to declarative) paradigm shift and learn where and how XSLT was supposed to be used and avoided (in fact, he was wrongly using XSLT for application configurations rather than for data or configuration transformations). However, he disagreed and replied: "By programmatic, I mean the opposite of imperative .... and not force people to make a paradigm shift". So, according his description, his so-called programmatic programming would be something that: 1. is opposite to the imperative programming, 2. does not force mindset shift (to the declarative paradigm), 3. supports mutable variables. If a senior Java professional, after using XSLT for four years, still has neither the idea of declarative vs imperative programmings nor a passion and mental agility to explore new paradigms, what about average Java CS graduates? Is there a large collection of information simply not being taught? Is Java part of the problem, or is it the schools' issues? Message was edited by: joeo@enigmastation.com

    Threaded Messages (75)

  2. Re: Should Java be banned from schools?[ Go to top ]

    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.
  3. Focusing all your CS curriculum on any paradigm is the issue, not what that paradigm is. I'd personally think Java is great general purpose language in schools in that you get to focus more on the problem you're trying to solve than weirdness of pointers, etc, as if the course was being taught in C. [I had no Java in school.] But that does not mean you stop there -- you still need exposure to other paradigms.
  4. General Programming skills[ Go to top ]

    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.
  5. CS department do not only teach programming languages. If they were only doing that, then why have a degree in computer science rather than getting certified? Programming languages are taught as a different subject and many universities cover a lots of these languages. Java is best at conveying programming concept and I will recommend it at university level. Jj.
  6. This Is Based On One Guy?[ Go to top ]

    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.
  7. Re: This Is Based On One Guy?[ Go to top ]

    +1. "Should Java be banned from schools?". This is an insane conclusion that is only meant to grab readers attention and drive traffic to the poster's website. Its hard to believe that TSS editors actually approved this post as is. Exactly how would banning Java from schools improve "Senior Java Professionals" understanding?
  8. Re: This Is Based On One Guy?[ Go to top ]

    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!
  9. Re: This Is Based On One Guy?[ Go to top ]

    Would you consider ... relational model to be obscure to SQL programmers?
    Definitely.
  10. Re: This Is Based On One Guy?[ Go to top ]

    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.
  11. Re: SQL and relational theory[ Go to top ]

    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.
  12. Re: SQL and relational theory[ Go to top ]

    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 ....
  13. Ridiculous.[ Go to top ]

    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
  14. Re: Ridiculous.[ Go to top ]

    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.
  15. Re: Should Java be banned from schools?[ Go to top ]

    My personal Dijkstra favorite is: "The use of anthropomorphic terminology when dealing with computing systems is a symptom of professional immaturity".
  16. Re: Should Java be banned from schools?[ Go to top ]

    I certainly don't want Java or any programming language for that matter to be banned from schools. Lazy teachers should be. Students should be exposed to as many programming paradigms as it is possible and learn about their strengths and weaknesses, and Java is not that bad to learn about OO, components and the like, so why ban Java? If it is banned in favor of some obscure programming language created by a guy from the school (it happened to me with Eiffel) just to show off, it's not useful.
  17. Re: Should Java be banned from schools?[ Go to top ]

    "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:
    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: 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!
  18. Names ARE IMPORTANT[ Go to top ]

    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.
  19. Re: Names ARE IMPORTANT[ Go to top ]

    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....
  20. Re: Names ARE IMPORTANT[ Go to top ]

    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.
  21. Re: Names ARE IMPORTANT[ Go to top ]

    "What that means? I see this argument repeated over and over again and I never understood what its point is." It's a very old argument. Known to the ancients and satirised by Lewis Carroll: http://www.literature.org/authors/carroll-lewis/through-the-looking-glass/chapter-06.html `When I use a word,' Humpty Dumpty said in rather a scornful tone, `it means just what I choose it to mean -- neither more nor less.' Like somebody else said, names are often a "smokescreen". People can agree or disagree simply because they lack a common understanding of the terms. Like the definition of "imperative" in this case. Solution: Don't use short cuts to thinking, say what you mean clearly and simply.
  22. 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 ;-)
  23. "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"?" :-) That is exactly the point Lewis Carrol is making. As another example; I'm a Mathematical Physicist by training, but I don't consider that I understand the physical concepts unless I can explain them in plain English. The Math(s) is more precise but only serves to hide the ideas from people that don't understand the language.
  24. Re: Names ARE IMPORTANT[ Go to top ]

    `When I use a word,' Humpty Dumpty said in rather a scornful tone, `it means just what I choose it to mean -- neither more nor less.'
    Quite interestingly, that quote appears on the first page of one of the early Java specifications .. the Java Lanugage Specification (JLS) if I remember correctly. Peace, Cameron Purdy Oracle Coherence: Data Grid for Java and .NET
  25. Re: Names ARE IMPORTANT[ Go to top ]

    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.
  26. Should Java be banned from *US* schools...[ Go to top ]

    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
  27. No, it shouldn't[ Go to top ]

    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.
  28. Re: No, it shouldn't[ Go to top ]

    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.
  29. Re: No, it shouldn't[ Go to top ]

    Paul, I don't teach programming but I'll take a shot as answering your questions.
    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.
  30. Re: No, it shouldn't[ Go to top ]

    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.
  31. Re: No, it shouldn't[ Go to top ]

    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..."
  32. Would you like fries with that?[ Go to top ]

    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++.
  33. 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.
  34. Re: No, it shouldn't[ Go to top ]

    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.
  35. Re: No, it shouldn't[ Go to top ]

    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.
  36. elitist nonsense[ Go to top ]

    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
  37. Re: elitist nonsense[ Go to top ]

    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
  38. Re: elitist nonsense[ Go to top ]

    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.
  39. Re: elitist nonsense[ Go to top ]

    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 Oracle Coherence: Data Grid for Java and .NET
  40. Re: elitist nonsense[ Go to top ]

    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.
  41. Re: elitist nonsense[ Go to top ]

    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...
  42. Re: elitist nonsense[ Go to top ]

    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.
  43. Re: elitist nonsense[ Go to top ]

    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.
  44. Re: elitist nonsense[ Go to top ]

    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.
  45. Re: No, it shouldn't[ Go to top ]

    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.
  46. ...or any other technology. Computer Science should not be a vocational program. A CS student should learn concepts that transcend the rapidly alphabet soup of industry, how you can see those concepts (mis)applied is industry, and how they can be appropriately applied.
  47. Re: Should Java be banned from schools?[ Go to top ]

    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
  48. Re: Should Java be banned from schools?[ Go to top ]

    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:-)
  49. Re: Should Java be banned from schools?[ Go to top ]

    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.
  50. 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.
  51. no[ Go to top ]

    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.
  52. Sorry, but...[ Go to top ]

    Isn't Joel Spolsky that guy who had worked on those horrible VB for Applications thing? Even funnier, isn't he the guy working on Bug tracking system written in something like ASP, and then wrote ASP to PHP translator to... make this multiplatform? Sorry, Joel, but You're last credible guy to talking about Java ;). And Dijkstra was right about Basic, even if it's Visual Basic ;) regards Artur
  53. Multiple language should be required[ Go to top ]

    Java should not be banned from schools. However, I do strongly feel that CS programs should require that all students learn at least 6 different programming languages. Every language has it's quirks and until you work with several of them, it's very difficult to understand that it's the concepts that are important, not the familiarity with a single language's specific standard libraries. Also, by cross pollinating ideas and idioms from different languages, students become much more well rounded.
  54. One more thing[ Go to top ]

    The languages that students use should not be the focus of their coursework. Rather they should simply be an implementation detail of their assigned MPs. CS students should be expected to be able to pickup a new language within the first couple weeks of a semester.
  55. It's a big stretch to having one conversation (with someone who admits to *not* being a CS grad) to blaming Java for people being idiots (and I'm not saying he is because he clearly wouldn't be where he is if that was the case). Java's not perfect but it's very good at what it does. Lots of people in this industry don't understand what they're talking about but that's not unique to IT roles so why blame the tools we use? It's true what they say about why you shouldn't assume: you make an ASS out of U and ME.
  56. Re: Should Java be banned from schools?[ Go to top ]

    "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..
  57. "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.
  58. 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.
    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. My 2 cents, Nikita Ivanov. GridGain - Grid Computing Made Simple

  59. 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.

  60. 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.
  61. 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?
  62. 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.
  63. i'm tired of these flame bait "articles"[ Go to top ]

    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 those things. If a CS program is teaching Java programming (or any other language) and not teaching the fundamentals related to the "science" of programming, then it sounds like it's not a degree program at all. Certainly CS majors should learn data structures, compiler theory, analysis of algorithms, blah, blah, blah. That is a separate topic to whether Java is a good language. But then, that wouldn't have made such tasty flame bait :-)
  64. Joel[ Go to top ]

    He lost his credibility after talking how he developes the FogBugz.. Gah.. i doubt he has coded any java in 10 years. Java is all right for teaching , this topic and title is actually stupid anyway.
  65. Re: Should Java be banned from schools?[ Go to top ]

    I think it's high time that CS be split into two fields the way that Engineering and Physics are split. One would focus on finding discoveries and proving theories and the other would focus on putting theories and discoveries into practice. I think there is a lot of validity to both sides of this argument. There is a need for programs that teach theory and explore wildly new ideas. There's also a need for a lot of people that know how to get things done. Personally, I don't think either need is very well served in most universities and colleges.
  66. I think it's high time that CS be split into two fields the way that Engineering and Physics are split. One would focus on finding discoveries and proving theories and the other would focus on putting theories and discoveries into practice.

    I think there is a lot of validity to both sides of this argument. There is a need for programs that teach theory and explore wildly new ideas. There's also a need for a lot of people that know how to get things done. Personally, I don't think either need is very well served in most universities and colleges.
    Hi James, I think the issues are more basic. A university degree should teach you how to think not what to think. You should leave well aware of all the concepts, ideas and competing theories. This is different from vocational training, where you are merely taught how to do a specific job, perhaps using a specific tool just like some one trained to flip burgers at a burger joint. As others have said here, programming is an intellectual exercise, and good programmers have a number of ways of thinking at their disposal based on a number of approaches and paradigms. The issue for me is how to best equip graduates to navigate through the minefield of technologies and solutions being pushed upon them by eager vendors; recognize the key concepts and then make informed choices for themselves. Lets not forget that the leading mainstream programming languages today are proprietary. Language and thought are closely linked. If all you know is the concepts exposed by a single proprietary language then you are limiting your thinking to what someone else thinks you should know. Much like the person who only knows how to flip burgers! Paul.
  67. Hi James,

    I think the issues are more basic. A university degree should teach you how to think not what to think. You should leave well aware of all the concepts, ideas and competing theories.

    This is different from vocational training, where you are merely taught how to do a specific job, perhaps using a specific tool just like some one trained to flip burgers at a burger joint.

    As others have said here, programming is an intellectual exercise, and good programmers have a number of ways of thinking at their disposal based on a number of approaches and paradigms.

    The issue for me is how to best equip graduates to navigate through the minefield of technologies and solutions being pushed upon them by eager vendors; recognize the key concepts and then make informed choices for themselves.

    Lets not forget that the leading mainstream programming languages today are proprietary. Language and thought are closely linked. If all you know is the concepts exposed by a single proprietary language then you are limiting your thinking to what someone else thinks you should know.

    Much like the person who only knows how to flip burgers!
    I don't disagree. As I said above, I don't think either branch of CS is well taught at most universities. At my own school I could have easily taken the easy VB-only road but I chose to take classes with the 'hard' professor that most students avoided. But I don't think Java should be banned. I don't think anything should be banned. But I do agree that no CS or Software Engineering (for the lack of a better term) program should only teach a single programming paradigm. But a good Software Engineering program should probably teach some really common languages and not necessarily because they are good languages. As one of my physics professors used to say "a smart person learns from his/her mistakes but a really smart person learns from the mistakes of others."
  68. Re: Should Java be banned from schools?[ Go to top ]

    Truely thanks for all responses :) The post was largely an open question, althought the title to inspire discussions. As many of you pointed out, the problem is not with the Java language (I definitly agree) but with either the schools or, in some cases, those programmers themselves. I certainly do not assume a CS graduate or a self educated programmer should know all terminologies of Java or XSLT (at least myself do not meet that requirement). However, I don't see it is reasonable that a Java programmer who has used and criticized XSLT for years does not know "imperative vs declarative programming" and does not know where XSLT should be used and avoided. Would anyone considering "OO" to be an "anthropomorphic terminology" for a claimed Java professional? The key point I tried to express through this story is that it seems many programmers today lack the necessary passion, abstraction ability, and mental agility to the level that is already harmful to this industry. To be fair, this observation applies to programmers starting from other languages as well. I have seen many similar cases from C++, Ada, and even Ruby programmers (and another open question of "should language X be banned from schools?" :)).
  69. My CS involved very little programming but focused on the theory, algorithms, structures and as far as I was concerned to much mathematics and engineering electives. Programming languages were just tools that we used to prove we had grasped the concepts and we were required to use not just one language but various ones in accomplishing this. It sounds like the CS program you are describing is pretty rudimentary.
  70. I think that there is a common misconception that a good programmer is one who understands pointers and low level arithmetic etc. While it's important to know your programming I have found that it's a small part of good software development and there is so much more to bringing value to your project. These skills include: 1. Not being religiously tied to one technology. .NET is evil or Java is crap really doesn't help any one. It's best to get a feel for several languages and understand the best circumstances to use each one. In this case it might be things like, we need to deploy on UNIX or all our programmers only know .NET 2. Understand that an application spends 90% of it's life cycle in maintenance mode so attaining higher reuse, documentation and testing are not a waste of time but very valuable skills to have. 3. Understand the different frameworks available and why they are useful. What is Hibernate? What is Spring? Which project would you use these in and under what circumstances would you use/not use them? 4. The ability to be fluent in scripting and programming. Java is not Perl but they are both very useful tools.
  71. Re: Should Java be banned from schools?[ Go to top ]

    Whatever. Dijkstra is just pissed because guys like me with non-CS bachelor degrees learned java in their spare time and are now pulling down $150,000 a year and WE DIDN'T EVEN TAKE A CLASS ON POINTERS, BOOLEAN ALGEBRA AND ALL OF THAT OTHER EGGHEAD STUFF!!! Waaaaa.
  72. Dijkstra is just pissed...
    He actually died like 2-3 years ago (he was teaching at some University at Texas - of all the places). The whole discussion in my opinion is BS. In school you have to learn many languages - period. That develops your brain. In real-life you will most likely work with Java or C#. At least today. And if you are really "lucky" you may end up "crafting" in something like Ruby, Haskel, Schema, etc. Well, good luck with that :) Best, Nikita Ivanov. GridGain - Grid Computing Made Simple
  73. Re: Should Java be banned from schools?[ Go to top ]

    Emphatically NO! Are we going to ban German from foreign language studies because it uses case endings, which are largely unnecessary? (Apologies to our German readers, I love the language but case endings add no meaning to a sentence.) Why not ban French because it retains the Passe Simple verb tense? Somehow writers and scientists have developed their minds using these languages and gone on to do great work. Banning Java, or any other language, is simply avoiding the real issues with college education: is the curriculum setup to develop students' minds and are the professors qualified educators? By qualified educators, I mean do they have training in Learning Theory and the different stages of mental development a human goes through? Are they committed to being educators or are they simply teaching because the university requires it?
  74. Re: Should Java be banned from schools?[ Go to top ]

    I've read Joel Spolsky's blog "The Perils of Java" again. The first time I read it was a few months ago but I didn't really think too much about what he said. After reading it again, I think his premise is wrong. His main premise is that Java dumbs down programming because it doesn't cause a student to understand two critical topics: pointers and recursion. What is it about Java that makes learning recursion any different from learning it in C? The principle points of recursion are that you have a function that is capable of calling itself with each call either reducing the problem (the General Case) or solving the problem (the Base Case). Java allows implementation of a function calling itself. Recognizing the General and Base cases are the non-trivial part and this recognition is language independent. As far as pointers go, you can still implement any data structure using Java references and the mental exercise is the same. The real task is not nulling references to next/previous too soon when, for example, adding a node into a linked list. Prof. Dijkstra made a point about problems with students not letting go of BASIC flow control using GOTO. His frustration doesn't indict BASIC so much as make an observation that humans like to use what they know to solve problems. It's the skill of the teacher that causes a student to let go of their "safety blanket" and try approaching a problem in a different way. (If you're a parent, you see this scenario playing out over-and-over again with a baby developing skills.) Again, what about Java causes a student to NOT grasp key CS concepts?
  75. Re: Should Java be banned from schools?[ Go to top ]

    The real task is not nulling references to next/previous too soon when, for example, adding a node into a linked list.
    Oops, my bad. This should not have read "nulling references". Changing the next/previous assignments in a particular order, so as not to dangle an object, is the mental task - when writing a doubly-linked list. It's no more difficult in C than it is in Java.
  76. It's better than C++[ Go to top ]

    Java is a much better teaching tool than C++ I have been exposed to C++ classes twice: once at Uni, and once when my girlfriend did a Computer Science diploma as an evening course. In both classes things went pretty smoothly for the first 5 or 6 lessons, until pointers happened; after that, 50% of the time in exercises was spent trying to remember the pointer syntax rather than exploring how to solve problems with imperative programs. Java is a good teaching tool because it is simple; you can do all the basic good stuff with a clear and simple syntax. I think that the problem lies with the courses not explaining that any language, e.g. Java, has good and bad points. The courses should also present other languages e.g. Groovy that have different strengths.