|
Sponsored Links
Resources
Enterprise Java Research Library
Get Java white papers, product information, case studies and webcasts
|
News
News
News
|
Messages: 75
Messages: 75
Messages: 75
Printer friendly
Printer friendly
Printer friendly
Post reply
Post reply
Post reply
XML
XML
XML
|
 |
Should Java be banned from schools?
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
|
|
Message #243232
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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.
|
|
Message #243233
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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.
|
|
Message #243234
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
General Programming skills
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.
|
|
Message #243236
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
My personal Dijkstra favorite is: "The use of anthropomorphic terminology when dealing with computing systems is a symptom of professional immaturity".
|
|
Message #243237
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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.
|
|
Message #243239
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
"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!
|
|
Message #243244
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Should Java be banned from *US* schools...
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
|
|
Message #243245
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
No, it shouldn't
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.
|
|
Message #243251
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
CS isn't "learning a programming language"...
...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.
|
|
Message #243257
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: No, it shouldn't
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.
|
|
Message #243262
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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.
|
|
Message #243265
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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
|
|
Message #243263
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: No, it shouldn't
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.
|
|
Message #243264
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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:-)
|
|
Message #243268
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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.
|
|
Message #243269
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
no
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.
|
|
Message #243270
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Sorry, but...
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
|
|
Message #243271
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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.
|
|
Message #243273
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: No, it shouldn't
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.
|
|
Message #243272
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Multiple language should be required
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.
|
|
Message #243274
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
One more thing
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.
|
|
Message #243275
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
You own a goldfish so you live in a big house
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.
|
|
Message #243276
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: No, it shouldn't
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..."
|
|
Message #243277
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Would you like fries with that?
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++.
|
|
Message #243278
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Would you like fries with that?
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.
|
|
Message #243283
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
"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..
|
|
Message #243285
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
"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.
|
|
Message #243287
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
i'm tired of these flame bait "articles"
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 :-)
|
|
Message #243290
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
elitist nonsense
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
|
|
Message #243291
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: No, it shouldn't
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.
|
|
Message #243292
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: elitist nonsense
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
|
|
Message #243294
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Joel
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.
|
|
Message #243296
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: No, it shouldn't
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.
|
|
Message #243297
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: elitist nonsense
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.
|
|
Message #243298
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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.
|
|
Message #243300
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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.
|
|
Message #243302
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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?" :)).
|
|
Message #243303
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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."
|
|
Message #243304
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: elitist nonsense
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
|
|
Message #243308
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: elitist nonsense
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.
|
|
Message #243310
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
What CS program focuses on a single programming language?
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.
|
|
Message #243317
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: elitist nonsense
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.
|
|
Message #243319
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Names ARE IMPORTANT
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.
|
|
Message #243326
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Java should be included but not be the only one
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.
|
|
Message #243325
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
This Is Based On One Guy?
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.
|
|
Message #243333
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Names ARE IMPORTANT
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....
|
|
Message #243335
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: This Is Based On One Guy?
+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?
|
|
Message #243336
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Names ARE IMPORTANT
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.
|
|
Message #243337
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: elitist nonsense
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.
|
|
Message #243339
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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.
|
|
Message #243348
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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
|
|
Message #243349
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from 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.
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
|
|
Message #243367
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: elitist nonsense
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...
|
|
Message #243369
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Names ARE IMPORTANT
"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.
|
|
Message #243374
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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?
|
|
Message #243378
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Ho, hum - keeping the flames alive...
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 ;-)
|
|
Message #243383
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: This Is Based On One Guy?
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!
|
|
Message #243385
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Names ARE IMPORTANT
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.
|
|
Message #243387
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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.
|
|
Message #243394
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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.
|
|
Message #243393
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: elitist nonsense
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.
|
|
Message #243397
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Ho, hum - keeping the flames alive...
"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.
|
|
Message #243407
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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?
|
|
Message #243409
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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.
|
|
Message #243413
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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?
|
|
Message #243416
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Should Java be banned from schools?
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.
|
|
Message #243423
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Names ARE IMPORTANT
`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
|
|
Message #243437
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: This Is Based On One Guy?
Would you consider ... relational model to be obscure to SQL programmers? Definitely.
|
|
Message #243446
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Ridiculous.
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
|
|
Message #243449
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: This Is Based On One Guy?
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.
|
|
Message #243451
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: Ridiculous.
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.
|
|
Message #243541
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
It's better than C++
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.
|
|
Message #243553
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: SQL and relational theory
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.
|
|
Message #243556
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: SQL and relational theory
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 ....
|
|
Message #243568
Post reply
Post reply
Post reply
Go to top
Go to top
Go to top
|
 |
Re: No, it shouldn't
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.
|
|
 |
New content on TheServerSide.comNew content on TheServerSide.comNew content on TheServerSide.com |
 |
 |
Reza Rahman explores the features of the proposed JSR 299, Contexts and Dependency Injection for Java EE (CDI). When approved, it promises to be a key feature of Java EE 6.
(November 2, Article)
SAML is an XML-based standard for exchanging authentication and authorization data between security domains. The single most important problem that SAML was created to solve is the Web browser Single Sign-On problem. Many organizations are debating whether to stay with version 1.1 or move to 2.0. This article makes observations about both options.
(September 28, Article)
Joe Ottinger takes a look at how people learn, and applies it to the practice of programming. He notes that understanding how people learn is an essential part of working in a programming team.
(September 22, Article)
Stephen Maryka gave us an article about the Asynchronous Web and posed a number of questions that get examined like an approach to delivering Asynchronous Web capabilities through extensions to existing Java EE technologies.
(July 14, Article)
JavaServer Faces Flex goal is to provide users capability in creating standard Flex components, part of flexSDK which is open sourced through MPL license, as normal JSF components. This article by Ji Hoon Kim will provide an overview of creating a simple multilingual JSF page consisting of JSF Flex tags.
(June 29, Article)
In this session Jeff explores the key characteristics of successful SOA projects. He covers some of the patterns, and anti-patterns, tool sets, and strategies that he himself learned the hard way. Last, he provides a strategy and blueprint for achieving a high likelihood of success in your SOA project.
(June 23, Tech Talk)
Ari Zilka, CTO of Terracotta, Inc., talks about the new features in Terracotta 3.1, announced during JavaOne and available now.
(June 15, Tech Talk)
In this Tech Talk, Josh Long explores an integration challenge using Spring Integration and walks through the implementation, employing and expanding on the basic patterns of Enterprise Application Integration to tie together components into a function integration solution, and then demonstrates how Spring Integration helps address the integration requirements.
(June 15, Tech Talk)
In this Tech Talk, David Geary teaches you: The basics of Google Web Toolkit; How to implement Ajax-enabled applications in Java; Internationalization; Hooking into the browser history mechanism; Remote procedure calls.
(June 4, Tech Talk)
Jon Kern discusses the best architecture/technical solutions and ensure that they are repeated by all developers. By tackling the architecture up-front in a serial manner, subsequent parallel development will be much more manageable and predictable.
(May 28, Tech Talk)
This keynote describes the frustrations of modern knowledge workers in their quest to actually get some work done, and solutions for how to guard yourself against all those distractions. Neal Ford talks about environments, coding, acceleration, automation, and avoiding repetition as ways to defeat the misguided attempts to sap your ability to produce good work.
(May 26, Tech Talk)
Gil demonstrates how new, aggressive uses of already abundant compute capacity by common applications offer competitive value for application designers.
(May 21, Tech Talk)
Chris Keene introduces WaveMaker as a new way to automate the ability to generate Hibernate classes in order to more quickly bring OR mapping into an application.
(May 19, Article)
In this session Nati Shalom demonstrates how to take a standard Java EE web application and scale it out or down dynamically without changes to the application code. Seeing as most web applications are over-provisioned to meet infrequent peak loads, this is a dramatic change because it enables growing your application as needed, when needed, without paying for unutilized resources.
(May 19, Tech Talk)
Mastering EJB was one of the original and most influential EJB books in the industry. Mastering EJB III now returns with two new expert co-authors, updated for EJB 2.1 and 30% new chapters including security, integration, best practices, open source, and more.
(Book PDF Download)
The Application Server Matrix is a detailed listing of J2EE vendors and their application server products, with information on latest version numbers, J2EE spec support and licensing, pricing, platform support, and links to product downloads and reviews.
(Application Server Comparison Matrix)
|
|