6 ms·
Java vs. Scheme in Education
- bugsy 16y agoSo scheme is better because there is no tool support and with no tools there is less to be confused by. Hm.
- magicofpi 16y agoI think the point is that, with Scheme, the tool you use is less important than the thinking you do. With Java, you have to worry about your environment before you can worry about programming.
- sukuriant 16y agoThat's really not fair. To start, beginning Java developers (or developers of any language) shouldn't be using a full IDE. Anything more than syntax highlighting (yes, even compiling for you), and you're losing important steps. That said, the amount of boiler plate code to do anything in Java can make it quite confusing... though, Scanner has made the input easier, and System.out.println() doesn't seem too much more than memorization.
- namdnay 16y agoI don't see the point of your argument. You say Java developers should intentionally cripple themselves, because they're losing "important steps". What does that even mean? I don't see why I'd lose rename, automatic inherited method shells, auto imports, generate constructors/getters/setters etc... When you buy a car, do you insist that it has manual windows and no power steering?
- thalur 16y ago"When you buy a car, do you insist that it has manual windows and no power steering?" But when you are learning how a car works and trying to build one, you would start off with one with manual windows and no power steering.
- sofuture 16y agoThere's a difference between professionally programming and learning to program. You shouldn't ever find yourself in the situation where you think an IDE is magical and "javac" is a typo of the word "java".
- Sandman 16y agoWith Java, you have to worry about your environment before you can worry about programming. You have to download the jdk and set an environment variable. Then open a text editor. That's about all the 'worrying about the environment' that you have to do before you can start programming in Java.
- masklinn 16y agoNo, you also have to think about various command-line tools invocation (java and javac for starters) and all the boilerplate that goes around what you want to write (create a file, name it correctly, put the same name inside with a `class` statement whatever that means, then put braces everywhere and a `main` and a `String[]` which you don't know jack about) and then you have the joy of wondering why you don't see anything when you run your program (assuming you got it to compile and run) and learn about `System.out.*`. With scheme, you download Racket or whatever (equivalent to downloading the JDK), you open it, and you start typing and getting instant feedback in your window.
- VB6_Foreverr 16y agoThis is where vb6 shines. With vb6 you don't have to worry about anything! :)
- Sandman 16y agoI'm not sure I understand you. You can't just start typing and getting instant feedback in Java simply because Java is not interpreted (well, actually, it is, but you have to compile to bytecode first). So, what you're saying about Java goes for just about any compiled language. No, you also have to think about various command-line tools invocation (java and javac for starters) Use "javac" to compile to byte code. Use "java" to run your compiled program. This is all you need to know about these tools to start programming. There are various options for using java and javac, of course, but it's not like you can't compile and run a simple program without these options. As for this part of your comment: create a file, name it correctly, put the same name inside with a `class` statement whatever that means, then put braces everywhere and a `main` and a `String[]` which you don't know jack about Yeah. You have to know a bit of Java before you actually start programming in it. If that's one of Java's shortcomings, well then, there are a lot of languages with the same shortcoming.
- SkyMarshal 16y agoSame point PG made in one of his essays about text editors vs IDE's. With the former you learn and master the language, with the latter you learn the editor and features like code completion substitute for mastering the language.
- lemming 16y agoThis is utter bull, even if PG said it. I've learned a huge amount about Java by using an editor (Intellij) that has real time static analysis of my code and points out when I'm making common mistakes with corners of the language (calling overrideable methods during object construction, for example). It's incredibly useful and informative.
- SkyMarshal 16y agoEh, was Oliver Steele, not PG. Old essay, somehow I started attributing it to PG instead: http://osteele.com/archives/2004/11/ides http://osteele.com/archives/2004/11/ides Perhaps out of date now, given what IDE's can do, though I personally still prefer to learn a language and toolchain with a text editor, then graduate to Eclipse for the benefits you mention.
- rbanffy 16y ago> I've learned a huge amount about Java But did you learn a huge amount about programming?
- impendia 16y agoI do remember playing with Scheme in freshman CS. It was fun as hell. You type in (+ 2 7) and it spits out 9. No void main(String args[]) { ...
- araneae 16y agoThat's not an insurmountable advantage. In the freshman CS class I took they started us out with a GUI that had an interactive prompt. (DrJava)
- Apocryphon 16y agoAsking as a CS major who first learned C, then C++, and didn't touch LISP and Prolog until the upper divs, how difficult is it to learn a functional language as your first programming one? Wouldn't it be trippy? When I first learned that Berkeley students had to learn Scheme first, it made me think of them as hardcore... though I may be overestimating its difficulty.
- dagw 16y agoMy school taught Haskell as the intro language to math majors, and my basic observation was that people who had never programmed before and people who where really good at programming already got it pretty quickly. On the other hand people in the middle that had programmed a bit before and where competent, but not great, where really confused and never really got it. In the second half of the course, where you learnt Java and OO, was totally confusing to most those who'd just learnt Haskell as their first language and many people who got great grades on the Haskell part failed the Java part. So it would seem that whatever you learn first is easy and normal and whatever you learn after that is confusing and difficult.
- hcho 16y agoScheme(or LISP dialects in general) is not just functional; it's multiparadigm. It sure is trippy, but gives a very solid foundation for later stages of academic and professional life.
- masklinn 16y ago> how difficult is it to learn a functional language as your first programming one? Wouldn't it be trippy? As easy as learning a dysfunctional one if not easier. Now scheme may not be the best example of this as its syntax is entirely alien (then again all syntax is, when you've never developed), but the canonical is the following statement: x = x + 1 If you've never developed before, the only place where you've seen something like this is maths, and in maths this is completely nonsensical. So learning imperative programming does require lots of deprogramming and reprogramming of your brain. Which make up most of the hurdles of learning an FP (or logic, or dataflow, ...) language later on: your brain (or its section that has to do with development) has been baked in imperative idioms and methods, FP languages not only don't use these but use completely different techniques to solve the same problems, so you have to "unlearn" the old ones and "relearn" the new ones.
- CyberFonic 16y ago"As I see it, a software engineer who hasn't worked through SICP with Scheme, a basic editor and command line, is like a surgeon who has never dissected a frog and faints at the sight of blood." -- Priceless !!! Great comment, Stephen.
- kirbman89 16y agoWhat is Scheme? Sounds cake. We used Putty, Pico, and javac. I take it that this school is not an engineering school?