I remember my first Java program that I wrote in a notepad and then I had to edit my autoexec.bat file on Windows 95 machine to setup the classpath to run that program. Initially I wrote many programs in notepad and ran through command line. Also I learned a lot about what goes on under the hood. After few months, I slowly graduated to IDE and it was a great feeling as now I could use cools features offered by an IDE.
It is been 8 years, java was first introduced and within those years as the language has matured, so do IDEs. I have used most of the major commercial as well as open source IDEs within last few years. I value those IDEs, especially while working on the projects that have very aggressive schedules, as they take care of lot of the laundry work for me. But at the same time, I feel that using the IDEs right away can spoil beginners. I am saying this because of the few experiences I have had and I would like to share one of those experiences here. One day a programmer came to me and said he has downloaded some software, but he is getting errors and unable to run it. So I looked at it and found out that the classpath needed to be set for that software. When I told him that, he asked me how to set the classpath? This guy has been using the IDE right from day one and had never set the classpath manually. I can go on and on with other experiences.
In my opinion, the beginners should start with just a text editor, running the programs through command line, doing things manually and then gradually move to IDEs. That way they will have better understanding of how certain things work under the hood.
You have to learn something first, and put time into learning other things later. It's a lot more fun for a beginner to learn how to write a program that actually does something than it is for a beginner to learn how to run the compiler and set the classpath. If you want to really bore a class of students, start with classpath and vm details, and watch them fall asleep.
Once they've learned some about actual programming, then is the time to make them learn about classpath's. At that point they will have to motivation to learn about it.
You can argue that you've had classes where the students were very motivated to learn about classpath's and to write their programs in notepad. And there are - but those people have are also the same people who are bored by the class because they've already had programming experience. And especially since java is so often used as the first language to teach programming, teaching based on what those people like is a horrible approach.
While knowing what the classpath is and how to set it is important for an overall education in java, learning that as your first lesson doesn't teach you any programming fundamentals, and reduces your motivation to learn more about java.
I disagree. The example you gave demonstrated that it was possible for a programmer to be productive without understanding class paths. When the time came and class path knowledge was required, I'll bet the knowledge was soaked up much more readily than if that programmer had to struggle (unnecessarily) with them from day one, on top of learning the vagaries of a new language.
You argument could be extended in many ways... for instance, programmers should initially program with using the built-in libraries, in order that they better appreciate what the libraries do. Or maybe, programmers should initially program in assembler in order to better appreciate what is happening with the computer when they eventually code using a high level language.
Although there is Spartan satisfaction to be gained from knowing you have done things the hard way. In the long term, I think that all that is gained is the ability to things the hard way.
Good IDEs give the ability to achieve greater results for lesser effort. In the commercial world, that's what provides the edge.
I agree with the short article and I disagree with the first reply. From my point of view it was more about NOT using an IDE without at least having a slight idea of what it does. The way you introduce a programming language to a class of beginners is a different point. You are right that, if you want to make them falling asleep, a in-depth discussion on the java classpath is the best thing you can do. Just by accident we discussed yesterday, that IDEs might be more valuable for professionals than for beginners. My main argument is, that you can not expect everybody to use dozens of IDEs to get a clear view of the needs and what is happening behind the scenes. What remains is a black box, that hopefully does what it should. What if not? People are completely lost and they waste their and others time (and money) to discuss stupid things: "I can't use your CVS repository. because my IDE can't import it automatically, can you help!?" "First try to just make a cvs checkout in your shell and run ant to build it!" "shell? ant? manual checkout? " The point is: Does an IDE really make rookies (not 1st class students) more effective? Do the wizards really help to write better and more effective software? Hmmm ....
> You argument could be extended in many ways... for > instance, programmers should initially program with using > the built-in libraries, in order that they better > appreciate what the libraries do. Or maybe, programmers > should initially program in assembler in order to better > appreciate what is happening with the computer when they > eventually code using a high level language. No, you just have to worry about everyday's problems. I never had problems with the Java Vector class - so there is really no need to make on on your own (besides performance - but that's another point). On the other hand I had a lot of trouble with the PATH, the CLASSPATH, orders and names of JAR files, wrong JAVA versions, etc. So, this is still not plug and play and as long as this is an everyday's issue I want to know, what's going on and wrong.
> Good IDEs give the ability to achieve greater results for > lesser effort. In the commercial world, that's what > provides the edge. Yes and good developers are able to make use of this ability. Unfortunatly "normal" programmer's are not - even worse they sometimes don't understand what they are doing at all. :-)
I don't mind using IDE's but I find the ones that are really usefull to me have a steep learning curve. I run Linux, so my choices seemed to be either Emacs or Eclipse. I really like Eclipse, but I don't seem to have the time to sit down and learn all the more esoteric CVS manipulation methods that would really help me.
The project I'm working on is using CVS branching to help keep things straight and Eclipse's method for merging branches seems non-intuitive to me right now. I suspect that once I get some more experience with using command-line merging and editing of files (I like using Nedit) then I'll go back to Eclipse and try again.
I make all efforts to avoid the "evil wizards" as described in Pragmatic Programming as they generate code that I need to learn eventually.
> You have to learn something first, and put time into > learning other things later. It's a lot more fun for a > beginner to learn how to write a program that actually > does something than it is for a beginner to learn how to > run the compiler and set the classpath. If you want to > really bore a class of students, start with classpath and > vm details, and watch them fall asleep.
> While knowing what the classpath is and how to set it is > important for an overall education in java, learning that > as your first lesson doesn't teach you any programming > fundamentals, and reduces your motivation to learn more > about java.
You can write a program that does something in just a text editor too as I am sure the beginner will not be writing complex programs initially. Learning programming fundamentals and classpath & vm details etc go hand in hand. I am not saying that the instructors should spend the whole time on teaching java classpath,but if they could blend the programming fundamentals with this other stuff like classpath & vm details etc,then the students will be benefited more and they will have better understanding of the language as a whole. But I have seen most of the times,the students start using the enterprise IDEs and forget about learning other necessary details of the language.
To my mind there are two issues here: understanding and productivity.
I firmly believe that when you're learning a programming language it's best to understand not only the structure and syntax of the language but also the environment your code will execute in. In the case of Java, I'm talking about the JVM. I think it's important to understand concepts such as the classpath, garbage collection, object management, etc so that as you're writing your code you can take environmental factors into consideration. Manipulating String classes in Java and the resulting explosion of objects it can create is a classic gotcha, yet I've seen new programmers make horrendous mistakes like this simply because they didn't understand the JVM. That's where I think IDE's do not help because they seek to hide some or all of a language's complexity from the programmer without requiring them to understand why.
However, IDE's have their useful side in that for the capable programmer they can significantly boost productivity by taking over much of the donkey work associated with coding - such as typing complex commands on a command line to execute your code, for example, or code-assist to save you having to refer to API documentation. The savings may individually be very small, but they do tend to add up.
So, do IDE's spoil beginners? No, I wouldn't say they spoil them exactly but I would say that they do not promote understanding and so create potential problems for later.
> appreciate what the libraries do. Or maybe, programmers > should initially program in assembler in order to better
You know what ? I believe this to be true. At our company, we have had four people come and go. Each had problems understanding the difference between global and local variables. They did not know what the stack was. One knew the difference between parameters passed by value vs. by reference.
If they had been using assembler at some point, or coded in C instead of Visual Basic, they would have received an understanding of those issues.
Please note none of them stayed here for more than a few weeks.
If they had been using assembler at some point, or coded in C instead of Visual Basic, they would have received an understanding of those issues.
For what it's worth, VB developers need to know the diff between ByRef and ByVal, as well as what global and local variables are. Might be able to get away with stack ignorance, though the call stack is available in the VB IDE as well.
Still, I suspect that the low quality of these developers led them to choose an IDE-based langauge, rather than them having been corrupted by using an IDE.
I think you're asking the wrong questions here. The question isn't do IDEs spoil beginners, but why don't they spoil them enough? You shouldn't need to know about classpaths, etc to use an IDE.
You dont have to start teaching Java with CLASSPATH or JVM details. You can address CLASSPATH when you need to introduce access modifiers and packages, and JVM details when addressing Strings immutability and garbage collection, for instance. I think IDE are for improving productivity not to flatten the learning curve. Great article the The Law of Leaky Abstractions. Thanks, Keith Gaughan.
> "I can't use your CVS repository. because my IDE can't > import it automatically, can you help!?" > "First try to just make a cvs checkout in your shell and > run ant to build it!" > "shell? ant? manual checkout? " > The point is: Does an IDE really make rookies (not 1st > class students) more effective? Do the wizards really help > to write better and more effective software? Hmmm ....
1. IDE != wizard. I would certainly never argue people should use wizards to learn anything, unless it involves generating the code with the wizard then immediately going back to dissect the code.
2. An IDE makes a rookie more effective because they don't deal with classpath issues and the like until they actually need to. It seems like people often forget that someone has to learn this stuff sometime, learning before the other stuff certainly doesn't make it any quicker. You just learn it before you understand why you really need to understand it.
3. "shell? ant? manual checkout? " One can only learn so much in a fixed period of time. Odds are if they took the time to learn ant, and how to use the shell, and how to do manual checkout, they wouldn't have spend that time learning how to actually program. And know that their actually programming already, they're motivated to learn how to use these things to get to your program.
Flat View: This topic has 39 replies
on 3 pages
[
123
|
»
]