Java Forum / First Aid / May 2004
Question for Java Gurus
George Copeland - 17 May 2004 02:24 GMT I have been a professional programmer for about 14 years on MVS, HP-UX, and Windows. I have been following Java since about 1997, but I have never done any app development in it. Here are my questions:
1. Where do the gurus go to get programming information? A newsgroup, website, what?
2. What is the best freeware IDE, and what is the best professional IDE?
3. If you were a professional programmer like me who wanted to get up to speed quickly, what resources would you use?
Thank you very much for your time.
Ryan Stewart - 17 May 2004 03:09 GMT > I have been a professional programmer for about 14 years on MVS, HP-UX, and > Windows. I have been following Java since about 1997, but I have never done > any app development in it. Here are my questions: > > 1. Where do the gurus go to get programming information? A newsgroup, > website, what? http://java.sun.com/ For example: http://java.sun.com/j2se/1.4.2/docs/api/ And Google Groups.
> 2. What is the best freeware IDE, and what is the best professional IDE? Much debated questions. Do a Google search. As far as free ones, I use NetBeans because it's what I learned to use. It has its good points and bad points. Oracle JDeveloper looks promising, though I've only tinkered with it so far. Eclipse and IntelliJ Idea are two other free IDEs I've seen in use. However, just about any experienced Java programmer will tell you to learn the basic command-line stuff before getting into an IDE or you'll end up in trouble. The Java Tutorial (below) is good for teaching you that.
> 3. If you were a professional programmer like me who wanted to get up to > speed quickly, what resources would you use? http://java.sun.com/docs/books/tutorial/index.html And Google Groups. (Notice a trend here? :-)
> Thank you very much for your time. Not a problem. Good luck.
nospam@tampabay.rr.com - 17 May 2004 08:26 GMT <snip>
>> 2. What is the best freeware IDE, and what is the best professional IDE? >> [quoted text clipped - 5 lines] >the basic command-line stuff before getting into an IDE or you'll end up in >trouble. The Java Tutorial (below) is good for teaching you that. While IntelliJ is an excellent tool (I use it), it is most definitely not free. Eclipse, however is.
Pete
Ryan Stewart - 17 May 2004 12:36 GMT > <snip> > [quoted text clipped - 10 lines] > While IntelliJ is an excellent tool (I use it), it is most definitely > not free. Eclipse, however is. Oops, sorry about that. Brain fart.
Robert Klemme - 17 May 2004 08:38 GMT > > I have been a professional programmer for about 14 years on MVS, HP-UX, > and [quoted text clipped - 6 lines] > > > http://java.sun.com/ plus: http://forum.java.sun.com/ http://www.javaworld.com/ http://mindprod.com/jgloss/jgloss.html
I'd recommend these books:
Things that you can easily get wrong in the beginning: Java Pitfalls http://www.amazon.com/exec/obidos/tg/detail/-/0471361747
There's even a new version which I don't know: More Java Pitfalls http://www.amazon.com/exec/obidos/tg/detail/-/0471237515
If you want to dig into multithreading: Concurrent Programming in Java http://www.amazon.com/exec/obidos/tg/detail/-/0201310090
Doug Lea also has a nice website at http://gee.cs.oswego.edu/dl/
Regards
robert
perry - 17 May 2004 13:10 GMT Good question and only someone whose been then there can save you time on it.
While you'll inevitably end up using Borland's tools in one form or another, there are other promising platforms out there (fortunately). But Borlands freebie is not a whole lot different from their full blown version. (And ofcourse there is always the wonderful Together product which you'll find indepensible)
But before you get to enjoy any of that, you really need to start at ground zero. It is quite simply, the quickest way to understand everything Java is about. To fully appreciate Java, one must try to imagine that perfect language they may have always ever thought of writing if ever they wanted to write one themselves or had the time to do so.
Well, enough plugging on Java and more about what you, the seasoned programmer, must do, in order to quickly ramp up how to properly use the language.
The first thing you must do is plan to spend the next 15 days going thru it's certification study guide. There are a few on the market claiming to be the #1 book for this purpose but pick only the one written by the same people that wrote the certification exam.
http://www.amazon.com/exec/obidos/ASIN/0782140777/ref=pd_sxp_elt_l1/103-8442938- 6823845
that is if passing the Java Certification exam is of any interest to you. the reason why i recommend this is due to the fact that i studied this one after i used another and i can say that due to subtle differences in the texts, certain aspects of the Java language are not highlighted. i believe these subtle differences to be of the upmost importance for you, the seasoned professional, to be able to literally port over your experiences with other developement languages and understand how things are done in Java.
now, i know, you'll probably be thinking "but i can do this in a day". why rush? what's the rush? why don't you plan instead to go get this book and find a nice coffee shop somewhere and go thru each chapter, one by one over the course of a week or two absorbing each concept as they come to you (and try not to cheat, because you'll only be cheating on yourself - the answers at the end of each chapter will be an excellent way for you to figure out what you don't fully understand).
beyond that, your in for bit of a surprise. you are probably also thinking, well, it looks nice enough (Java), but i'm not sure if it's a real heavy duty language like C++. well if that's you line of thinking, i'll bet the stockmarket your in for a rather delightful surprise....
but just like the matrix, i can only offer you the red pill, you have to see it for yourself...
as for the seemingly more advanced tools like J2EE, get an understanding of RMI, JDBC and perhaps JNI first. right now, there seems to be a Java framework for every major concept out there and many to choose from to suit your purposes. what i like about it the most though i think is that everything just seems to want to work together, no struggle. everything just seems to fit so nicely. i don't know why C++ people are so intimidated by it, they shouldn't be. use C++ for developing operating systems and areas where tight memory management is absolutely required, use Java where garabage collection is not top priority or wherever you want the best of both worlds and need to get something out the door without reinventing the wheel (for the record, JIT native Java code runs 99.99% as fast as C++, sometimes faster depending on the app). there are other languages too, do not discount those. just don't fall into the trap of Java for everything but appreciate it for what it is....
but being a "professional programmer" i don't think i have to tell you that...
cheers
- perry
> I have been a professional programmer for about 14 years on MVS, HP-UX, and > Windows. I have been following Java since about 1997, but I have never done [quoted text clipped - 9 lines] > > Thank you very much for your time. Chris Uppal - 17 May 2004 13:22 GMT > 1. Where do the gurus go to get programming information? A newsgroup, > website, what? The documentation (the javadoc that comes with the JDK). The source (comes in a zip file with the JDK) These newsgroups.
Worth whisking through the Java tutorial on Sun's java site.
Other than that it depends on your tastes and on how you learn. Some people love books with lots of examples, others (like me) prefer to work as much as possible from the raw specs and standards.
One thing you should decide early is whether you are attempting to learn the Java language (and the associated standard library), or whether you are focussing on learning some application domain like J2EE.
Personally I'd advise against trying to learn domain specific stuff (even you have considerable experience already of that domain) until you've got the foundations solid.
Another thing to ponder: are you already an experienced OO programmer ? That's a very difficult question to answer, even for yourself, since there are a lot more programmers who /think/ they understand and use OO properly, than there are who actually do.
> 2. What is the best freeware IDE, and what is the best professional IDE? I think most people will tell you the same thing. Don't use an IDE until *after* you've got well underway with Java. One reason is that IDEs by there very nature attempt to hide some of the complexity of "what's really going on", and you don't need that when you are trying to /learn/ what's really going on. Another reason, paradoxically, is that all the IDEs I've tried are massively complicated and so you end up putting more effort into learning the IDE than into anything constructive (and, too, you have to understand Java concepts pretty well before you can understand what the IDEs are trying to do).
The only reservation I have about that advice is that if you are new to OO, then using an environment that is designed to emphasise OBJECTS may be an enormous help. If that's the case then the /best/ thing you can do is go learn Smalltalk before Java, but assuming that's not an option for you ;-) then maybe using the BlueJ environment would be a good idea. I haven't tried it myself, but I have read some of their discussion of what they are trying to do and it looks good.
(None of the major IDEs emphasise objects in this way. They are wretched from that point of view -- all you ever see is the source code for classes, you never get a feel for working with real objects at all.)
> 3. If you were a professional programmer like me who wanted to get up to > speed quickly, what resources would you use? Read as much as you can stand of the Java tutorial. Find a book which approaches the subject in a way you are happy with (many people find Bruce Eckel's "Thinking in Java" to their taste). Then *practise*...
Good luck
-- chris
perry - 17 May 2004 13:29 GMT And as for where to get programming information on Java, true, java.sun.com is the authority but they are not always the best tutors. however, i have another surprise for you, depending on your budget, plan on picking up a new Java book per week. the addiction hit me so bad, i lined my office wall off with primarily Java books. as a matter of fact for badness, i'll go find what i did with my old picture and post it for you.
they are expensive but you can save money in two ways. one, to write all this off as a business expense in one form or another. the 2nd method is to go to 2nd hand book stores, because the beauty of Java is that it really hasn't changed all that much since it's inception, hence books written from the start are actually very useful. just another reflection of how everything works well and builds on top of itself with Java. i can say, it's been the best attempt at the principles of OO i've ever seen successfully used in today's programming environment.
as for websites there's a new one everyday....
other than that you'll have to contact a consultant from one of the more reputable companies, that is, with a focus on doing quality work versus wasting your time... the best one i worked for is based in Dallas, TX.
www.osgcorp.com
and get whoever your working for to hire some consultants to come in and give you a first hand view on Java and Object design principles and how it can best help your company.
cheers
- perry
> I have been a professional programmer for about 14 years on MVS, HP-UX, and > Windows. I have been following Java since about 1997, but I have never done [quoted text clipped - 9 lines] > > Thank you very much for your time. David Segall - 17 May 2004 14:40 GMT >2. What is the best freeware IDE, and what is the best professional IDE? I'm no Guru but I have spent some time looking at IDE's. I was coming from Visual Basic and my requirements were minimum cost and a "What You See Is What You Get" editor for graphical user interfaces. Here are my findings.
Netbeans (www.netbeans.org) is free and Open Source. I think you will find it the best choice. Borland's JBuilder Foundation (http://www.borland.com/jbuilder/foundation/) is also a free download. I found JBuilder felt the closest to the VB IDE. Oracle's JDeveloper (http://otn.oracle.com/products/jdev/content.html) is a free download but the license severely restricts what you can do with programs you write if you do not pay for it. If you are into large database applications it is well worth your attention because it comes with the equivalent of VB's data bound controls and is the cheapest of the commercial "Enterprise" IDEs. It's also a great WYSIWIG HTML editor.
Sun One Studio 4 Community Edition, which is derived from Netbeans, is still available, without charge, from http://jsecom16d.sun.com/ECom/EComActionServlet?StoreId=8&PartDetailId=FJCI9-401 -TL9M&TransactionId=try&LMLoadBalanced= but has been superseded by Studio 5. Sun suggest you use Netbeans if you want a free version. Sun have some free on-line courses in using Sun One and the transition from Sun One to NetBeans is trivial.
Websphere Studio Application Developer (http://www-3.ibm.com/software/awdtools/studioappdev/) is based on Eclipse but has many enhancements including a WYSIWYG editor for GUI's. It is not free but a 60 day trial is available. I mention Eclipse in this summary only because there will be an irate follow up if I don't. :) Eclipse (www.eclipse.org) is a popular Open Source IDE and there are free or cheap plug-ins like http://www.cloudgarden.com/jigloo/index.html, http://www.assisiplugins.com/index_start.html and http://www.eclipse.org/vep/ that provide WYSIWYG GUI development.
To complete this list I should also mention the popular IntelliJ IDEA (http://www.jetbrains.com/idea/index.html) which has recently added a GUI builder. It is not free but you can download a 30 day trial. I have not tried it.
Tim Tyler - 17 May 2004 22:54 GMT In comp.lang.java.advocacy David Segall <david@nowhere.net> wrote or quoted:
> Netbeans (www.netbeans.org) is free and Open Source. I think you will > find it the best choice. [...]
> I mention Eclipse in this summary only because there will be an irate > follow up if I don't. :) Giving it that sort of billing is likely to prove ineffective at preventing such responses.
 Signature __________ |im |yler http://timtyler.org/ tim@tt1lock.org Remove lock to reply.
Enrique - 17 May 2004 19:53 GMT > I have been a professional programmer for about 14 years on MVS, HP-UX, and > Windows. I have been following Java since about 1997, but I have never done > any app development in it. Here are my questions: > > 1. Where do the gurus go to get programming information? A newsgroup, > website, what? Multiple resources, really. I read textbooks, visit ngs. Some people like mags, but I feel they re-hash a lot of information that is free elsewhere.
> 2. What is the best freeware IDE, and what is the best professional IDE? I, personally, use a plain text editor. The IDEs will generate lots of code for you, but that doesn't help you learn what the code does.
> 3. If you were a professional programmer like me who wanted to get up to > speed quickly, what resources would you use? The platform is huge. Read java.sun.com to get a sense of the breadth of technologies out there. White papers or other "executive summaries" will provide similar perspective.
But to know the language you have to write the code. If you know what specific applications you are targeting, focus on related technologies. As you write the code, you will find yourself reading the API documentation. That's where the learning really happens, IMO.
Apache.org is one big resource for learning about how the technology is advancing. Folks keeping building more software on top of existing software.
Finally, learn the command-line tools before you get wrapped up on what IDE(s) to pick. All of those IDEs are using the command-line tools.
You can probably get as many different opinions on how to go about this as there are respondents.
Michael K?lling - 18 May 2004 10:43 GMT enrique@pineda.org (Enrique) wrote in message news:
> > 2. What is the best freeware IDE, and what is the best professional IDE? > > I, personally, use a plain text editor. The IDEs will generate lots > of code for you, but that doesn't help you learn what the code does. I think this is very bad advice.
I know, it is repeatedly said that IDEs are bad for learning Java, because they
- generate too much code for you, or - are too complicated, or - hide too much stuff from you - or all of the above.
While this is true for many IDEs, it is not true for all of them.
I am involved with the development of an educational IDE (so I am heavily biased!), and I am convinced that you can learn to understand OO _much_ better given the right environment tools.
The solution is not avoiding IDEs, it is choosing the right IDE.
This question comes up every couple of weeks, so a while ago I wrote a summary of arguments why I think the "Don't Use An IDE"- advice is wrong.
If you're interested, you can find it here:
http://homepage.mac.com/mkolling/mrt/C54415237/E848832883/index.html
Regards,
Michael
Ryan Stewart - 18 May 2004 12:54 GMT > enrique@pineda.org (Enrique) wrote in message news: > [quoted text clipped - 32 lines] > > Michael I can agree with you on all but your third point. I would like to say a majority, but I'll limit it to "a whole lot" of the newbs that come through the groups (not mailing lists, btw) are having problems related to either classpath or directory structure. If everyone took the time to at least write their "Hello World" program in a text editor and compile and run it at the command line, I suspect we'd all be better off.
Chris Smith - 18 May 2004 15:46 GMT > I can agree with you on all but your third point. I would like to say a > majority, but I'll limit it to "a whole lot" of the newbs that come through > the groups (not mailing lists, btw) are having problems related to either > classpath or directory structure. If everyone took the time to at least > write their "Hello World" program in a text editor and compile and run it at > the command line, I suspect we'd all be better off. I must be missing something here. It seems to me that, if students are constantly running into problems with the details of command-line Java tools (such as classpath and the like), then it would be best if they didn't use those command-line Java tools. You seem to conclude the opposite; that they should face them head-on and overcome their difficulties.
I suspect that the difference lies in how fundamental we think those concepts are. I think that the classpath environment variable is a rather peculiar aspect of the JDK command-line tools. I much prefer, say, Eclipse 3.0, where I can choose project properties and just check all of the user-defined libraries that my project uses and expect everything to work, without dealing with questions of whether I can set an environment variable in one place or another, or oops I only set it in this shell so it doesn't appear in other shells, etc. I think it's clearly possible to develop Java software without worrying one bit about environment variables. So I question why understanding the CLASSPATH environment variable (or command-line option, etc) would be a necessary prerequisite to learning programming in Java.
So, I guess I'm with Michael on this one.
 Signature www.designacourse.com The Easiest Way to Train Anyone... Anywhere.
Chris Smith - Lead Software Developer/Technical Trainer MindIQ Corporation
Galen Boyer - 18 May 2004 18:24 GMT > I suspect that the difference lies in how fundamental we think > those concepts are. I think that the classpath environment [quoted text clipped - 10 lines] > command-line option, etc) would be a necessary prerequisite to > learning programming in Java. This is analogous to java programmers thinking they can code database applications without understanding the underlying database. Oh, I'm sorry, the JVM is the only world one needs to know.
 Signature Galen Boyer
Chris Smith - 18 May 2004 20:26 GMT > > I suspect that the difference lies in how fundamental we think > > those concepts are. [...]
> This is analogous to java programmers thinking they can code > database applications without understanding the underlying > database. Oh, I'm sorry, the JVM is the only world one needs to > know. Well, I'm sure you won't be surprised to find that I disagree.
What we're talking about in this case are two different ways to provide the same information to the JVM. One is rather more convenient because it makes use of both persistent knowledge about the subject matter (which JAR files and classes correspond to which libraries) and GUI interfaces (adding things to a list rather than redefining an environment variable). The other works, but is rather arcane.
And we're talking about an educational environment: which things should be taught. The motivations for teaching a concept are (a) how relevant it is to the teaching goal, and (b) how necessary it is for the student to make progress. Clearly, setting the CLASSPATH environment variable is neither the point of teaching programming, nor necessary to succeed in Java programming, assuming you have the right tools. The choice of setting PATH and CLASSPATH versus using an integrated environment is relevant to neither functionality nor any other characteristic of the result of programming.
That's clearly different from a database, where the information model of the database, its performance characteristics, and its features have a direct impact on the software development process.
 Signature www.designacourse.com The Easiest Way to Train Anyone... Anywhere.
Chris Smith - Lead Software Developer/Technical Trainer MindIQ Corporation
Dale King - 18 May 2004 16:18 GMT Hello, Chris Smith ! You wrote:
> And we're talking about an educational environment: which things should > be taught. The motivations for teaching a concept are (a) how relevant [quoted text clipped - 5 lines] > relevant to neither functionality nor any other characteristic of the > result of programming. To go along with this train of thought is not only which things are taught, but *when* they are taught. So in addition to your decision guidelines is the question of whether the student has enough of the basics to serve as a framework for understanding the new concept. In this case understanding the classpath requires a great deal of other knowledge before tere is evenm a basis for understanding it. That is why an IDE like BlueJ that hides this from the student is so valuable.
The other issue I haven't seen mentioned is a good debugger. Without an IDE the student is left with no tools for figuring out what went wrong.
 Signature Dale King My Blog: http://daleking.homedns.org/Blog
Galen Boyer - 18 May 2004 22:39 GMT >> > I suspect that the difference lies in how fundamental we >> > think those concepts are. [...] [quoted text clipped - 13 lines] > things to a list rather than redefining an environment > variable). The other works, but is rather arcane. No, its different, but setting an environmental variable is not an arcane operation, especially for a programmer.
> And we're talking about an educational environment: which > things should be taught. How to program involves understanding the environment as well as the language. The best programming teacher I ever had was an author of a compiler. He not only taught us how to program but what was going on as the compile translated what we wrote to what it could understand.
> The motivations for teaching a concept are (a) how relevant it > is to the teaching goal, and (b) how necessary it is for the > student to make progress. It isn't progress if the programmer is completely dependent on a tool or some admin guy to set up his environment for him.
> Clearly, setting the CLASSPATH environment variable is neither > the point of teaching programming, nor necessary to succeed in > Java programming, assuming you have the right tools. Look at your assumption and you see your flaw.
> The choice of setting PATH and CLASSPATH versus using an > integrated environment is relevant to neither functionality nor > any other characteristic of the result of programming. Understanding one's environment is expected, so it should be taught. Just because there are tools around that might make it so you don't have to perform that operation doesn't mean those operations are now, somehow, arcane and don't need to be understood.
> That's clearly different from a database, where the information > model of the database, its performance characteristics, and its > features have a direct impact on the software development > process. Man, I can't believe you don't think there are performance characteristics of the JVM.
 Signature Galen Boyer
Chris Smith - 19 May 2004 15:33 GMT > [a lot of stuff] I don't find it promising to engage in this conversation, given your insulting tone and your preference to pick out ways to mock me by misconstruing my comments instead of actually reading what I said.
Best of luck,
 Signature www.designacourse.com The Easiest Way to Train Anyone... Anywhere.
Chris Smith - Lead Software Developer/Technical Trainer MindIQ Corporation
Chris Uppal - 19 May 2004 10:54 GMT > And we're talking about an educational environment: which things should > be taught. The motivations for teaching a concept are (a) how relevant [quoted text clipped - 5 lines] > relevant to neither functionality nor any other characteristic of the > result of programming. I can see your logic, but I find it unconvincing.
The problem is that (in my experience with Java IDEs) getting the relevant settings right is at least as difficult as it is in a command-line environment. And that's a problem -- in a command line env, the beginning programmer is seeing the issues clearly separated out from other issues. He or she can see where the classfiles are being generated, can change directories and re-run the java command, and so on. I.e. he or she is getting a chance to learn the abstract concepts of "locating classfiles" in a way that doesn't mix in a load of other issues.
In a typical IDE, in my experience, the same problems of locating stuff arise, but the "solution" is buried in ISE settings, and arcane (unless you already understand the concepts) library lists. All the would-be programmer is going to learn is how to treat a /specific/ IDE as a black box and a magical recipe to "make it work" -- not a valuable learning experience.
OK, that's exaggerating slightly, but not much, and only to make the point clear.
-- chris
Bradley E. Rintoul - 19 May 2004 01:26 GMT > This is analogous to java programmers thinking they can code > database applications without understanding the underlying > database. Oh, I'm sorry, the JVM is the only world one needs to > know. Man, talk about a broad stroke! "java programmers" know nothing about databases!
Oh I'm sorry, *you're world* must be the only world one needs to know.
Galen Boyer - 19 May 2004 02:33 GMT >> This is analogous to java programmers thinking they can code >> database applications without understanding the underlying [quoted text clipped - 6 lines] > Oh I'm sorry, *you're world* must be the only world one needs > to know. Nope. Met quite a few java programmers that are quite good at db work. Understand what they are good at and that there are major differences between the platforms. But I've met far more that think it is a black box and they should be able to treat it that way.
 Signature Galen Boyer
Ryan Stewart - 19 May 2004 00:13 GMT > > I can agree with you on all but your third point. I would like to say a > > majority, but I'll limit it to "a whole lot" of the newbs that come through [quoted text clipped - 9 lines] > opposite; that they should face them head-on and overcome their > difficulties. Others have made some good replies, so I'll be short. I wasn't talking about people running into classpath issues while doing command line work. I'm talking about the multitude that have classpath issues and don't even know what the word "classpath" means because their IDE has been shielding them from it. Whatever your opinions otherwise, you must acknowledge that the Java classpath is at the very core of how Java works, that it must be set properly in one way or another for *any* Java-based application to work, and that a programmer that knows about it is better able to diagnose NoClassDefFoundErrors than one that doesn't.
Galen Boyer - 19 May 2004 01:10 GMT > you must acknowledge that the Java classpath is at the very > core of how Java works, that it must be set properly in one way > or another for *any* Java-based application to work, and that a > programmer that knows about it is better able to diagnose > NoClassDefFoundErrors than one that doesn't. But, based on what they are saying, all you need is a proper tool. If you get that error, you should just find a new IDE. But, wait a minute, isn't downloading from the web an arcane operation?
 Signature Galen Boyer
Chris Smith - 19 May 2004 15:24 GMT > Others have made some good replies, so I'll be short. That's okay. I much prefer your reply to the insulting rhetoric coming from Galen.
> I wasn't talking about > people running into classpath issues while doing command line work. I'm > talking about the multitude that have classpath issues and don't even know > what the word "classpath" means because their IDE has been shielding them > from it. Okay, in which case it's clear that their environment is impeding their success at learning Java. At that point, it's necessary to either teach how to use it or choose a different tool. Of course, I'm not advocating switching tools; that has an inherent cost so that it's best to probably plow ahead and teach the student how to locate their third-party classes in whatever environment has been chosen. And I'm all for choosing an environment that's conducive to learning and understanding; and that's more likely to be the command line than it is to be Eclipse, for example.
But I don't think it *has* to be the command line. BlueJ is very promising in terms of making things work without dealing with classpath issues.
> Whatever your opinions otherwise, you must acknowledge that the > Java classpath is at the very core of how Java works, that it must be set > properly in one way or another for *any* Java-based application to work, and > that a programmer that knows about it is better able to diagnose > NoClassDefFoundErrors than one that doesn't. You see, I don't acknowledge that. The classpath falls into the realm of "making your tools work". In the context of teaching computer programming, that's a negligible space of education. The classpath is a fundamental concept of neither programming in general nor the Java programming language. The JVM spec, for example, suggests the classpath as one possible implementation of locating Java classes, but in no way requires its use. The only reason it seems any more sensible to call CLASSPATH a core part of Java than, for example, calling some specific method of location C's angle-bracket includes a core part of C, is that Java virtual machines happen to implement it a little more consistently.
On top of that, in practice few Java developers need to deal with classpath issues in their regular line of work. Probably the vast majority of Java code is written in a servlet or EJB environment, in which there are other ways of providing references to third-party libraries (e.g., WEB-INF/lib), and use of the classpath in the invoking JVM is terribly poor form and non-portable. Applets can't reasonably use the classpath. The majority of application code, which is the major remaining bit, ought to be deployed as executable JAR images or Java WebStart applications, in which case the standard mechanisms for setting classpath are ignored entirely.
IMHO, the only possible justification for teaching the classpath to programming students is that they might need to deal with it in order to see the immediate results of their work in simple test code. If they can see the results of their work otherwise without incurring other negative consequences, then why bother?
 Signature www.designacourse.com The Easiest Way to Train Anyone... Anywhere.
Chris Smith - Lead Software Developer/Technical Trainer MindIQ Corporation
Ryan Stewart - 20 May 2004 05:16 GMT > > Others have made some good replies, so I'll be short. > [quoted text clipped - 20 lines] > promising in terms of making things work without dealing with classpath > issues. I think we're seeing eye to eye here now. :-)
> > Whatever your opinions otherwise, you must acknowledge that the > > Java classpath is at the very core of how Java works, that it must be set [quoted text clipped - 29 lines] > can see the results of their work otherwise without incurring other > negative consequences, then why bother? I see where you're coming from, but still can't entirely agree. Whether you're developing webapps or applets or whatever doesn't matter at all. You still have to compile into class files, and for that the compiler has to know where to go to get the details of the pertinent classes. However your IDE chooses to implement it, it's essentially the classpath. I've seen a fair bit of confusion among new programmers using NetBeans about "why class X can't see class Y". (The NetBeans classpath includes any directory or JAR that's "mounted".)
Chris Smith - 20 May 2004 15:05 GMT > I see where you're coming from, but still can't entirely agree. Whether > you're developing webapps or applets or whatever doesn't matter at all. You [quoted text clipped - 4 lines] > X can't see class Y". (The NetBeans classpath includes any directory or JAR > that's "mounted".) Let's draw a distinction (and it's an important one, in my view) between the general concept that a compiler and application need to be told the location of their code, and the specific mechanism of doing so. Certainly students need to be taught that they have to specify the location of their code to development tools. But it's the mechanism of doing so in the command-line tools that I don't think of as a core educational goal.
Clearly, that mechanism differs in practice depending on the environment and tools, as I explained before. Yes you need to specify the location of code in all cases, but in my experience more people are tripped up by the mechanism of doing that, rather than by the need to do it in the first place.
 Signature www.designacourse.com The Easiest Way to Train Anyone... Anywhere.
Chris Smith - Lead Software Developer/Technical Trainer MindIQ Corporation
Ryan Stewart - 20 May 2004 18:05 GMT > > I see where you're coming from, but still can't entirely agree. Whether > > you're developing webapps or applets or whatever doesn't matter at all. You [quoted text clipped - 18 lines] > the mechanism of doing that, rather than by the need to do it in the > first place. Still, how do IDE's compile code? They call javac, just as you would from the command line. You just don't see it happening. This is why some people (including myself) recommend doing a little compiling on your own, just so you can see what's going on behind the scenes and have a frame of reference for what the IDE is actually doing. As for the classpath setting itself, any IDE or J2EE container I've ever seen passes a classpath to javac.exe and/or java.exe. Your development and runtime environments don't matter. The classpath must always be there unless, as you said earlier, you're using some odd compiler that decides to implement it differently. But then it would just be the same thing under a different name, I think.
Chris Smith - 20 May 2004 18:49 GMT > > Clearly, that mechanism differs in practice depending on the environment > > and tools, as I explained before. Yes you need to specify the location > > of code in all cases, but in my experience more people are tripped up by > > the mechanism of doing that, rather than by the need to do it in the > > first place.
> Still, how do IDE's compile code? They call javac, just as you would from > the command line. You just don't see it happening. Sometimes that's true. On the other hand, I use Eclipse, which contains its own compiler and doesn't use javac at all. I'm not aware of any ability to use Eclipse's compiler from the command line, and I doubt there exists code to parse a "-classpath" command line option or to read the CLASSPATH environment variable from within Eclipse.
So you say:
> unless, as you said earlier, you're using > some odd compiler that decides to implement it differently. But then it > would just be the same thing under a different name, I think. As for whether Eclipse's compiler works in a similar way, there are perspectives from which it does, and perspectives from which it doesn't. It certainly offers the same basic choices (add a JAR file or a directory of classes) at its core, and there are *some* of the same problems that could trip people up (for example, I could see someone accidentally adding a directory to an Eclipse user library configuration and expecting all the JAR files in that library to be added), but there are others that simply don't apply (such as whether to use ; or : as a path separator, or most importantly where to set an environment variable in your specific operating system so that it's consistently available).
Given that Eclipse is probably one of the most commonly used Java compilers out there, I don't think it's quite fair to characterize non- classpath implementations of compilers as a fringe case. Instead, it makes sense to admit that the mechanism of locating code is pretty much unspecified, and that some tool sets use CLASSPATH as their implementation because it's the only suggestion provided by the (non- normative section of the) specification. It then makes sense to treat the characteristic of calling javac behind the scenes as an implementation detail... one that might or might not be there, and that could be easily changed in the future without changing the expected behavior of the environment.
Speaking of virtual machines, you have an initially stronger argument in that most common virtual machines use something like CLASSPATH (except that some third-party implementations lack Sun's rt.jar special case, so you have to locate the system classes and include them in the CLASSPATH- equivalent mechanism, so there are still differences). Except that this is exactly when non-application code (such as servlets, applets, midlets, etc.) and applications packaged as executable JAR files start to be an exception, so that worrying about classpath is largely limited to applications distributed as a bundle of loose class files.
> This is why some people > (including myself) recommend doing a little compiling on your own, just so > you can see what's going on behind the scenes and have a frame of reference > for what the IDE is actually doing. But this is assuming that the IDE is using javac as its compiler, and/or that you're running your code as an application.
I certainly don't mean to overstate my case. I don't want to encourage new developers to grab Eclipse, or any other environment that adds too much complexity to be easily used. I just think a sort of cult following has grown around the advice to avoid IDEs when learning, and it reflects unfairly on options like BlueJ, which is designed for learning and does an excellent job of it; or on simple environments like JCreator, for that matter, which is simple enough to help Java students without adding extra matters to confuse things.
Simply put, although I think many IDEs get in the way of learning, I don't think that'd true even remotely because they save you from CLASSPATH hassles. CLASSPATH hassles are the opposite of good education in programming, not its goal, and any way you can find to avoid them is progress.
 Signature www.designacourse.com The Easiest Way to Train Anyone... Anywhere.
Chris Smith - Lead Software Developer/Technical Trainer MindIQ Corporation
Michael K?lling - 21 May 2004 18:21 GMT > Still, how do IDE's compile code? They call javac, just as you would from > the command line. You just don't see it happening. This is why some people > (including myself) recommend doing a little compiling on your own, just so > you can see what's going on behind the scenes and have a frame of reference > for what the IDE is actually doing. I fail to see how typing "javac ..." compared to clicking a "Compile" button enlightens you any more about what is going on "behind the scenes".
How are you doing "compiling on your own" when invoking the compiler via a text command, but not when you invoke it via a button? The difference is completely arbitrary. It is as if I argure that you only do it properly when you type in the raw ASCII codes for the invocation...
The question here seems to be the exact line people draw between accepted abstraction and "magic that keeps you dumb". The problem is that the real criteria people use to draw this line usually is: the way I have learned it myself is the only real way to do it.
I have talked to many people who argued that students need to learn assembly language first to properly understand what they are doing (of course these are usually the people who themsleves started with assembly language), others argue that everyone should at least know how the compiler works (those are the ones that ...), and others argue that you need to learn procedural programming before you can understand OO (those are the ones -- you get the idea).
Arguing that invoking a compiler with a text based commend is better (more "doing it on your own") is in the same spirit, me thinks.
Cheers,
Michael
Andrew Thompson - 21 May 2004 18:35 GMT > I fail to see how typing "javac ..." compared to clicking a "Compile" > button enlightens you any more about what is going on "behind the > scenes". It's not in the 'javac', it's in the '...'. ;-)
Knowing how to set those parameters and the effect that they have, then enables you to configure most IDE's to do more subtle things than can otherwise be achieved by 'clicking a button'.
 Signature Andrew Thompson http://www.PhySci.org/ Open-source software suite http://www.PhySci.org/codes/ Web & IT Help http://www.1point1C.org/ Science & Technology
Mohun Biswas - 21 May 2004 21:38 GMT > I have talked to many people who argued that students need to learn > assembly language first to properly understand what they are doing (of [quoted text clipped - 3 lines] > that you need to learn procedural programming before you can > understand OO (those are the ones -- you get the idea). I think it would be more fair to suggest that the metric such people are using is "the lowest level you MIGHT have to drop down to". I didn't start with assembly language, for instance, so your thesis doesn't apply to me. But I *am* stymied on a project right now by my lack of assembly experience (I need to overwrite some stack pointers and haven't found the time yet to go groveling around learning the assembly stuff). That's a legitimate case where I have to drop down to a level I wouldn't normally have to.
By the same token, people who argue that you should learn your way around outside the GUI are afraid that some day you'll need to do something the GUI/IDE doesn't handle for you. Or that you'll need to work around a bug in the IDE. Using Windows for analogy, I cannot count the number of times some GUI has let me down and I had to straighten out the problem by going to a command-line tool, or direct to the registry, or whatever. And since the GUI never tells you what config file or registry entry it's modifying under the surface, it's a classic case of "magic that keeps you dumb". And I've used plenty of other tools whose GUI's either (a) have bugs requiring you to bypass them at times or (b) only cover some fraction of the functionality available in the underlying engine.
Bottom line, when IDE's work so reliably and cover all possible use cases, the learn-the-command-line people will fade away. But that hasn't happened yet.
 Signature M.Biswas
Michael K?lling - 22 May 2004 16:13 GMT Mohun Biswas <m.biswas@invalid.addr> wrote in message news:
> I think it would be more fair to suggest that the metric such people are > using is "the lowest level you MIGHT have to drop down to". ...
> By the same token, people who argue that you should learn your way > around outside the GUI are afraid that some day you'll need to do > something the GUI/IDE doesn't handle for you. I have the impression you are wandering off the original topic of this discussion.
I don't think (as I read this discussion) that anyone ever argued that you should not learn to use the command line, not learn compiler options, not learn the specific internals, etc. I would claim that every good programmer should definitely know how a compiler works and how to write assembly language.
But that's not the point.
What we were discussing (or so I thought) is how a beginner should start to begin learning Java.
It is a pedagogical problem to try to teach too many things _at the same time_. When I argued to avoid unnecessary detail (such as compiler options), I was not implying that nobody should learn about those. Everybody should. But nobody should be required to have to slough their way through those details while they are trying to learn to program.
Handling classpath options is a distraction while you are trying to learn what objects and classes are, and how you structure an OO program.
The necessity to learn a lot of things does not mean that you have to learn everything at the same time. In computing education, there is a 'pedagogical patterns' movement (see http://www.pedagogicalpatterns.org/ and http://csis.pace.edu/~bergin/#pedpat ). These people collect and describe successful computing teaching methodology (in a pattern language), and one of their most popular patterns is 'Early Bird' (see http://csis.pace.edu/~bergin/PedPat1.3.html ).
'Early Bird' describes a pedagogical technique that is based on identifying the most important learning goals, and addressing them early and often.
If you goal is to learn object-oriented programming with Java, then these goals would have to be understanding objects, classes, methods, encapsulation and abstraction.
Things like classpaths, compiler options, and even GUI building are details compared to those.
Sure, Chris Uppal's earlier remark that this does not apply when you are an experienced programmer who just wants to switch to Java is very true. That's a different situation.
But Galen Boyer made a remark: "The only problem I see with this approach is that you've set the expectation that they won't need to know it. Alot of them will spend the rest of their programming lives staying away from the guts because their first taste was with something that "just worked". "
This, I cannot see at all. I have not seen any evidence, either in the literature or in my work, that supports this one bit. I would like to know what this statement is based on. (I am working in training programmers, and have done so for many years, starting from beginners through to masters and PhD level degrees. I have certainly watched many students start with an educational environment, and I have never observed the effect that Galen states there.)
And, of course, I expect people to know the detail at the end. My students have written compilers and assemblers before they leave our institution, they have experience in language design, and are experienced in the construction of OO systems.
Yet they start with a learning environment that hides the Java VM details.
Regards,
Michael
Galen Boyer - 22 May 2004 17:55 GMT > Mohun Biswas <m.biswas@invalid.addr> wrote in message news: > But Galen Boyer made a remark: "The only problem I see with [quoted text clipped - 5 lines] > This, I cannot see at all. I have not seen any evidence, either > in the literature or in my work, that supports this one bit. I see this alot. The very big example of a GUI to command-line fight is when a windows user is asked to start using Unix, ie, learning how to be proficient with a command line dominated environment. Most of them never get past "ls", and they stay frustrated by the "arcaneness" of it. But, when a Unix user is asked to learn and use windows, she will and usually becomes quite skilled at it. This is mostly attributable to the ease of windows, but my point is that someone who started with the command-line will usually be comfortable in both worlds, but not the other way around.
Another analogous example (and directly in the middle of my profession) is when an entry level Oracle developer starts out with a GUI tool and not sqlplus, he invariably never gravitates toward learning how to use sqlplus effectively. He considers it arcane and hard to use. That becomes a huge hindrance when the database has been deployed to the production environment and he is tasked with analyzing why performance is an issue. The only tool you will be given will be sqlplus. If you start out learning how to be proficient with the most basic tool, then the GUI just becomes "another tool". Maybe this is my main issue. Starting out with a "GUI first" learning approach usually means you only have one tool type in your professional toolkit.
The windows only user, and this includes developers, comes to depend on the GUI tool and will have a very hard time when those tools aren't available, while the command-line user can much more easily move to a GUI world. Even to the point that if you took away his command-line and made him only use a GUI, he'd be fine. Could the same be said of the GUI only user?
> I would like to know what this statement is based on. (I am > working in training programmers, and have done so for many > years, starting from beginners through to masters and PhD level > degrees. I have certainly watched many students start with an > educational environment, and I have never observed the effect > that Galen states there.) I'm not describing effects seen from a professor student relationship because I don't teach, but instead what I've seen in professional programming environments. I would bet this, that if students learn with a GUI, they don't want to and find it a chore to learn how to program without one. This is why I would suggest they first learn without one.
> And, of course, I expect people to know the detail at the > end. My students have written compilers and assemblers before > they leave our institution, they have experience in language > design, and are experienced in the construction of OO systems. Well, as long as you make sure they do, then, I think you are doing the correct thing. My question is, do they gravitate toward the "I have to bring it all together myself" that you get in the command-line environment or do you see them considering it a chore? If its a chore, then you may be doing them a disservice by starting with a GUI. In the words a teacher would love, programmers should thirst for understanding everything about their environments.
 Signature Galen Boyer
Elspeth Thorne - 24 May 2004 08:46 GMT > The question here seems to be the exact line people draw between > accepted abstraction and "magic that keeps you dumb". The problem is > that the real criteria people use to draw this line usually is: the > way I have learned it myself is the only real way to do it. </snip>
Well.
I'm in a bit of a quandry, here.
I started my programming learning with java, using the GUI on a windows system. The next year of my university education, I was using gvim on a SunRay. Concepts-wise, that first year was mostly cut-and-paste; usually from examples that didn't compile. I learnt a lot from fixing the lecturer's mistakes. The second year was much the same, except I was producing compile-worthy code away from computers for much of the assessment, and dealing with a few environmental issues.
I learnt a bit of syntax, a few data structures, UML, the theory about testing ... but didn't really understand what it was that I was doing, and realistically, this 'learning' could have been done in about a month, or perhaps six weeks, if it had been the only focus of study.
In parallel with this, I was also learning about a couple microprocessors and their attendant assembly languages. This didn't teach me much about programming either, except about 'how to fit a complex program in 512 bytes' and 'which pins to solder to which holes'.
In my third year, things finally started to come together: I learnt about compilers, and suddenly a few more things made sense. I learnt about functional and logical programming, and twisted my brain in new and interesting ways. I learnt about the guts of an operating system. I learnt about networking - and incidentally about how objects interact with one another in a non-trivial system.
I could finally see what on earth was going on.
A couple of years later, here I am, still learning. But at least now I have a solid basis from which to build.
In short, I'd have to say that for a new java programmer, who is also new to programming, you're not going to be able to teach them everything overnight, or even in a short amount of time. Yes, by all means, start with the GUI, but give them buggy programs to fix, so that they learn all about errors and what they mean. Then throw them at the 'primitive' interface, like a vim or an emacs, with command-line compiling, let them struggle to understand the environment within which they operate - but after they've sorted the basic language concepts. Then move on to more complex tasks that require a lot of concept development - lots of object interaction, compilers, that sort of jazz.
That's my advice, as a recent student of the system.
Elspeth.
javac - 20 May 2004 23:33 GMT [..]
> I can agree with you on all but your third point. I would like to say a > majority, but I'll limit it to "a whole lot" of the newbs that come through > the groups (not mailing lists, btw) are having problems related to either > classpath or directory structure. If everyone took the time to at least > write their "Hello World" program in a text editor and compile and run it at > the command line, I suspect we'd all be better off. i'm happy with the command-line stuff i *already* know. however, i've yet to use a class path. i'm ok with vi/pico/choose your poison. in fact, i'd happily muck around in those.
i'm on a mac (the one with the hemisphere base and swivel screen) at an internet cafe. having no idea how to use fetch, i spent five minutes finding the console to use ftp the old-school way.
once you know how to burn a cd-rom with the command line, for example, it's easy. however, as a newbie, i still have no idea how to compile a java program. i don't want to mess around with settings, just hit compile foo.java + extraneous switches/whatever.
i'm waiting for "head first java" to arrive from the library so i can take a closer look at this. learning command line stuff from scratch (say, from windowsXP) would probably confuse people.
-javac@mail.com
Chris Uppal - 18 May 2004 12:56 GMT > > I, personally, use a plain text editor. The IDEs will generate lots > > of code for you, but that doesn't help you learn what the code does. > > I think this is very bad advice. No. It's very *good* advice. Maybe not the *best possible* advice, but still very good.
People tend to think that all IDEs are roughly the same except for different ticks in their feature lists. Indeed for the vast bulk of Java IDEs that has been true (VAJ was something of an exception). And -- since they are also unsuitable for learning -- the general advice is to avoid them. If there was much difference between them (on this issue) then the advice would be more specific.
I quite agree that it's not /necessarily/ the case that an IDE is bad for learning. In fact its demonstrably possible to make an IDE that is excellent for learning -- although Java is not the language of choice for this.
I mentioned BlueJ in my own reply to the OP, as a possible exception to the general rule. But, since I haven't actually /used/ it myself (or tried to teach anyone with it), I can't honestly recommend it -- I /can/ (and do) say that it's looks promising but I can't claim from personal knowledge that it delivers on that promise.
In the absence of a wide user-base for BlueJ, questions about what IDE a beginner should use will usually elicit a clamour of votes for peoples' own personal favourites -- and that list is unlikely to include BlueJ. So those of us that think that Eclipse, NetBeans, IntelliJ, et al, are bad learning tools will continue to try to balance the clamour with a blanket "no IDE" recommendation.
> If you're interested, you can find it here: > > http://homepage.mac.com/mkolling/mrt/C54415237/E848832883/index.html One comment on that: Obviously I don't agree that the standard advice is "rubbish", but leaving that aside ;-) you've missed a reason for not using IDEs, or -- if you prefer -- you've missed a reason for using BlueJ in preference to a mainstream one. All the Java IDEs I've used or played with have the same problem -- they are focussed on the mechanics of producing code. They all emphasise syntax-colouring, code-completion, folding, and all the other claptrap. Stuff which has a lot to do with the mechanics of editing text, but nothing whatever to do with objects. And (IMO, anyway) the objects should be the programmer's primary focus -- /behaviour/ not code. If you add the code-centric attitude of the IDE to the already code-centric attitude that the Java language tends to promote (through the intricacy of its syntax and surface semantics) then it is hard for a programmer ever to get a feel for objects. And, IMO, that's a very serious problem indeed.
When I looked at BlueJ some time ago, what I liked most about it was that its designers seemed to feel the same way, and were trying to bring the objects right into the foreground. That's why I suggested it might be a good place to start if the OP wasn't already happy working with objects.
I hope that's still true, but just dropping in at <http://www.bluej.org/> to see what's new, I find Syntax colouring (14 May 2004) New extension: Checkstyle (14 May 2004) at the top of the News and Developments list -- not at all what I'd hoped for
:-( Although, to be fair, the article behind the Syntax colouring headline does make a very good point.
-- chris
Anon Amous - 18 May 2004 14:01 GMT Chris, you have obviously put a lot of thought & experience into your post. Well done.
> > > I, personally, use a plain text editor. The IDEs will generate lots > > > of code for you, but that doesn't help you learn what the code does. [quoted text clipped - 60 lines] > > -- chris Andrew Thompson - 18 May 2004 14:12 GMT > you have obviously put a lot of thought & experience into your post. You have apparently lost your delete key. For help, check here.. <http://www.physci.org/kbd.jsp?key=del>
;-)
 Signature Andrew Thompson http://www.PhySci.org/ Open-source software suite http://www.PhySci.org/codes/ Web & IT Help http://www.1point1C.org/ Science & Technology
Michael K?lling - 18 May 2004 20:27 GMT ...
> > I think this is very bad advice. > [quoted text clipped - 3 lines] > People tend to think that all IDEs are roughly the same except for different > ticks in their feature lists. I still have to disagree. The fact that people have misconceptions or are not fully informed about available IDEs does not make ignoring the most appropriate solutions good advice.
...
> I mentioned BlueJ in my own reply to the OP, as a possible exception to the > general rule. But, since I haven't actually /used/ it myself (or tried to > teach anyone with it), I can't honestly recommend it -- I /can/ (and do) say > that it's looks promising but I can't claim from personal knowledge that it > delivers on that promise. Yes, you did mention BlueJ - and I am very happy about that. I have used it in my own teaching for seven years now (and I'm still using it) and I can only agree with your reasoning here.
But then again - I am the designer of BlueJ, and I would, wouldn't I?
> In the absence of a wide user-base for BlueJ, questions about what IDE a > beginner should use will usually elicit a clamour of votes for peoples' own > personal favourites -- and that list is unlikely to include BlueJ. BlueJ has downloads of about 40,000 a months and is used for teaching at least at 500 universities and training institutions around the world - that is a large enough user base to make some reasonably confident statements about it.
And our experience generally is: teachers who have actually used BlueJ and another environment (and thus can make a first hand comparison) are usually the most devoted users of BlueJ.
> > If you're interested, you can find it here: > > > > http://homepage.mac.com/mkolling/mrt/C54415237/E848832883/index.html
> [...] you've missed a reason for not using > IDEs, or -- if you prefer -- you've missed a reason for using BlueJ in [quoted text clipped - 8 lines] > semantics) then it is hard for a programmer ever to get a feel for objects. > And, IMO, that's a very serious problem indeed. I couldn't agree more!!!! (Can't even decide how many exclamation marks I should shoot behind this...)
I am aware that this is missing from that web page, while actually being the main argument. This was, in fact, the main goal at the beginning of the design of BlueJ.
I think, essentially, we are on the same wavelength here.
Regards,
Michael
Chris Uppal - 19 May 2004 10:59 GMT > > People tend to think that all IDEs are roughly the same except for > > different [quoted text clipped - 3 lines] > are not fully informed about available IDEs does not make ignoring the > most appropriate solutions good advice. Fair enough. But | think my POV can be expressed by considering the hypothetical, but IMO quite plausible, response of an imaginary newcomer to Java (not a newcomer to programming, which is a different population).
"Hmm, I'm told that BlueJ is good to start with." ....checks www.bluej.org... "Ah, this is a tool for beginners -- I'm no beginner, I don't need hand-holding, I want the Real Meat! BlueJ is like <insert IDE here>, only cut down for beginners, so I'll use <insert IDE here> instead of wasting time with a toy"
I hope it's obvious that I /don't/ think BlueJ is a cut-down IDE, or a toy, but I can see how I might have thought that if I'd been starting out in Java today (with years of C++ behind me).
> > In the absence of a wide user-base for BlueJ, questions about what IDE a > > beginner should use will usually elicit a clamour of votes for peoples' [quoted text clipped - 5 lines] > world - that is a large enough user base to make some reasonably > confident statements about it. That's very impressive!
It makes it somewhat puzzling (I'm not being snide here) that it doesn't get mentioned more. I downloaded the latest version yesterday (40,001 downloads now ;-) and played with it for a couple of hours. Not a real test by any means, but I liked what I found. I'm quite likely to /use/ it for real code too. (I have some reservations about the editors handling of tabs and spaces, but I assume I can fettle that somehow). I wonder if the "problem" with BlueJ getting mindshare is that it isn't obvious that it /can/ be used for real code, so people use it for a while, and then think they /have/ to graduate to a "real" IDE to do real work. It obviously isn't suitable (the UI design) for handling large numbers of classes in a package -- but I'm not sure that large numbers of classes /should/ be in one package... Other than that I found the simplicity and absence of "fluff" appealing and effective.
One thing I noticed is that BlueJ doesn't foreground the notion of package -- it puts stuff in the default package for instance. I can see that simplification is highly desirable for beginning (and perhaps not too talented) programmers -- a programming class as part of a normal school curriculum for example. But it isn't really appropriate for anyone who is already a programmer, and who wants to start Java -- the package concept is just too central to Java to be glossed-over. it took me some time to find how to put code into packages in BlueJ, and the process is more than a little tedious (error message telling me I have to create a package first instead of giving me the option to create one, not possible to move a class into a package from the UI -- drag-n-drop say -- you have to enter a package statement in the editor, no option to create a package for a project at the same time as the project itself, etc). I suggest an option to make BlueJ more package-friendly (similar to the way JUnit support can be activated). Perhaps too, an option to switch to a less hand-holding set of templates. The idea being that a user can at some /appropriate/ time (maybe straightaway, maybe never) switch BlueJ into a mode that is more suited to serious programming, and thus postpone the day when he or she has to start coping with the complexities of Eclipse, etc.
I'm not trying to suggest that you should position BlueJ as anything but an educational IDE. But if I'm right in suspecting that people don't recommend BlueJ because their memory of it is as something they had to graduate from before the could be a "real" programmer, then a few /optional/ tweaks to the UI might help you gain mindshare in the "pro" community.
Or maybe the community is just too obsessed with complexity...
> I think, essentially, we are on the same wavelength here. So it seems. I think I shall add BlueJ to my recitation of the "standard advice" from now on.
-- chris
Scott Ellsworth - 18 May 2004 20:35 GMT > > > I, personally, use a plain text editor. The IDEs will generate lots > > > of code for you, but that doesn't help you learn what the code does. [quoted text clipped - 11 lines] > much difference between them (on this issue) then the advice would be more > specific. I disagree - I think that general advice is incorrect in many cases. A good ide like IDE or Eclipse can help a student stay focussed on objects, rather than syntax.
If you are trying to teach a language, or use it in a teaching situation, you have a lot of choices about presentation. In the main, though, you have a very limited number of facts that you can slip in to the lesson, without overwhelming your students. Thus, you have to pick and choose.
Learning javac, directories, jar files and command syntax, and the like can be useful, and will be important to a student eventually. Given a choice, though, between a student thinking about the proper methods for their class, and thinking about the proper directory layout to make javac happy, I want them thinking about the object and its behavior, not the mechanics of the command line tool.
[...]
> They all emphasise syntax-colouring, code-completion, folding, and all the > other claptrap. Stuff which has a lot to do with the mechanics of editing [quoted text clipped - 4 lines] > surface semantics) then it is hard for a programmer ever to get a feel for objects. > And, IMO, that's a very serious problem indeed. To me, you learn best by doing. Thus, the best way to learn how to write decent classes is to write some, and then go through a critique. I would rather they spend much of their early time thinking about the result, rather than the process of getting there.
I want students to bang out a lot of code, with enough feedback so they can see what good classes look like. If they can see the ideas I am trying to get across in many contexts, they are more likely to see the meaning behind the syntax.
If syntax coloring makes them familiar with what Java code should look like syntacticly before we delve into the details, I am happy. They will need the details, no way around it, but having the editor get them started is a big help.
Put another way - in the early stages of learning a language or library, there are a lot of facts to pick up. A good ide hides some of that complexity. You will need to learn it eventually, which is why I also get them using ANT fairly quickly, but I want their first Java efforts to be pointed at the classes and what that means, rather than at the mechanics. Let an IDE make those mechanics easier during the early stages, so that they stay focussed not on code, but on solving their problems with it.
Scott
Galen Boyer - 18 May 2004 22:20 GMT > Put another way - in the early stages of learning a language or > library, there are a lot of facts to pick up. A good ide hides [quoted text clipped - 5 lines] > stay focussed not on code, but on solving their problems with > it. The only problem I see with this approach is that you've set the expectation that they won't need to know it. Alot of them will spend the rest of their programming lives staying away from the guts because their first taste was with something that "just worked". Why should I have to do that work? Then, in the middle of a development effort, their IDE craps out, doesn't support something, the admin guy is on vacation, ... and they are SOL.
Sort of like most java programmers I run across that code against databases. Somebody at a beginning java class spouted "Database Independence" and three years into their career, they still can't code a "group by", and the "Database Independence" translated to "Database Ignorance".
 Signature Galen Boyer
Chris Uppal - 19 May 2004 11:02 GMT > I disagree - I think that general advice is incorrect in many cases. A > good ide like IDE or Eclipse can help a student stay focussed on > objects, rather than syntax. I don't agree with this in general, but I think I've already made my point as clearly as I can.
I just wanted to reply to a couple of specifics.
> Learning javac, directories, jar files and command syntax, and the like > can be useful, and will be important to a student eventually. I take it as starting point that command line, directories, and files are understood. If that's not the case then it's something that has to be fixed independently of, and before, learning Java.
Jar files now, are something else. I think that I'd recommend ignoring them entirely as an "advanced" topic that is not needed (and indeed hinders) basic understanding. I'd suggest to any beginner, experienced programmer or not, that (if they aren't using BlueJ ;-) they set their classpath to point to /one/ directory, and that they compile with the options to put the output into that directory always (use a shell script to compile). That's how I started out (though it took me some time to work out that that was a good way of working because there's no guidance on how to keep things /simple/ in the Java world, complexity-obsessed as it is). It's surprising just how very effective that settup is. I'm still using essentially the same thing now...
> To me, you learn best by doing. Thus, the best way to learn how to > write decent classes is to write some, and then go through a critique. > I would rather they spend much of their early time thinking about the > result, rather than the process of getting there. I don't entirely agree. I think the best way (or an important part of it) to learn how to write decent classes is to interact with their instances. Yes, I agree that practise in writing *lots* of classes is a very, very, good thing, and of course the value of critique (if it's available) is inestimable. But if you haven't worked in an environment where you are always in touch with your objects, then you probably don't realise how enlightening that experience is. Of course, running from the command-line isn't "being in touch with the objects" either but at least the tools don't get in the way.
> Put another way - in the early stages of learning a language or library, > there are a lot of facts to pick up. A good ide hides some of that [quoted text clipped - 4 lines] > stages, so that they stay focussed not on code, but on solving their > problems with it. But -- with the exception of BlueJ -- I just don't agree that the current crop of IDEs do that. They /could/, but they don't. They just give you another layer of complexity, another tool to learn, and another distraction from the task at hand.
I guess we just disagree ;-)
-- chris
Hank Kester - 24 May 2004 01:11 GMT > I mentioned BlueJ in my own reply to the OP, as a possible exception to the > general rule. But, since I haven't actually /used/ it myself (or tried to > teach anyone with it), I can't honestly recommend it -- I /can/ (and do) say > that it's looks promising but I can't claim from personal knowledge that it > delivers on that promise. As someone who is using BlueJ, has been taught using BlueJ, and has taught others using BlueJ, I feel it's a very good tool for the job. Of course, I have an obvious bias, but what can I do? :)
-Hank
asj - 18 May 2004 03:36 GMT > I have been a professional programmer for about 14 years on MVS, HP-UX, and > Windows. I have been following Java since about 1997, but I have never done > any app development in it. Here are my questions: > > 1. Where do the gurus go to get programming information? A newsgroup, > website, what? Over the years, I've noticed I get the most programming knowledge out of books I've borrowed or bought (mostly bought), followed closely by the internet docs. The reason is probably because books provide a much more structured approach to learning, whereas most internet docs are either too short and hasty, or scattered.
Some sites that might be useful for what books to buy: Amazon.com actually has a Java section all to itself: http://www.amazon.com/exec/obidos/tg/browse/-/3608/ref=br_bx_c_2_0/002-5868930-0 098408
Also, I just found this http://www.javashelf.com/
> 2. What is the best freeware IDE, and what is the best professional IDE? Someone already gave a good list for general IDEs (eclipse, netbeans, etc).
But if you're thinking of doing any J2ME work, and using stuff beyond the J2ME Wireless Toolkit, then here are some more: http://www.microjava.com/articles/techtalk/ide
IBM's Websphere Studio Device Developer is awesome because it allows development beyond just Midlets into CDC profiles for handhelds and more powerful smartphones:
http://www-306.ibm.com/software/wireless/wsdd/
> 3. If you were a professional programmer like me who wanted to get up to > speed quickly, what resources would you use? depends on what niche of java you're going to get into, eh. server-side? mobiles and other pervasive devices? smartcards? desktop and gui (gasp!)?
probably for general purposes, i quick stop at javasoft.com would be warranted, then head over to javaranch.com for newcomers...
> Thank you very much for your time. no problem.
Free MagazinesGet these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...
|
|
|