6 ms·
A Very Quick Comparison of Popular Languages for Teaching Computer Programming
- samirahmed 15y ago> I spent about 15 minutes, failed, then searched Google for an example. It is understandable that Java can be verbose, but 15 minutes followed by failure, make the author seem almost clueless about Java.
- georgieporgie 15y agoThe author explained that: I'm actually kind of embarassed I had so much trouble with this - I've been working on a commercial Java package for two years, but because it's GUI based I rarely have to deal with reading from the console. Real Java programmers will probably look down on me with a mixture of pity and disgust. Such is life.
- Wilya 15y agoI'm not sure I could write that code right without Eclipse, or at least not without quite a few runs through the compiler and looks to the docs.. I'm not a Java guru, but I have used it quite a lot. It's not hard in itself, but it is overly long, with a lot of things to remember.
- deleted 15y ago[deleted]
- nierman 15y agoyeah, the use of java.util.Scanner would make it much more succinct: import java.util.Scanner; public class Addup { public static void main(String args[]) { Scanner sc = new Scanner(System.in); int i1 = sc.nextInt(); int i2 = sc.nextInt(); System.out.println(i1 + i2); } }
- techtalsky 15y agoVery interesting, although he does indeed say: > The extensive class library is however quite daunting. It appears there's a class for almost everything, and much of "programming in Java" seems to consist of "searching for the right class". Even after two years I find I cannot do much in Java without constant reference to the documentation.
- cgag 15y agoI think it's fairly reasonable to not remember how to deal with user input in java when you need to remember what combination of streams and readers and buffers and scanners you need to put together to do it.
- noblethrasher 15y agoWas anyone else initially confused by the 'Postscript' heading at the bottom? At first I thought it referred to the programming language (PostScript) but in fact it's just referring to the "writing after the writing" (P.S.).
- tomku 15y agoHis postscript is a debatable improvement, as input() in Python 2.x (which was what the article was written using) actually evaluates the input as a Python expression before storing it. It's equivalent to wrapping the input functions that the other languages use in eval(), which is (imo) a very, very bad practice to teach unless you're asking your students to write a REPL.
- aroberge 15y agoYes, he should have been using raw_input().
- Androsynth 15y agoI used to think: C is a horrible language for beginners, they should learn python due to its simplicity. This will allow them to learn about control structures and program flow in a simple and easy to read environment. But the more I think about it, the more I like C. It gives you the best understanding of what computations are actually being done by your processor; the mental exercises involved with fulling understanding pointers is valuable at the collegiate level (much less so if your learning to program on your own, I believe college is a time to increase your analytical abilities rather than just learn raw facts); It also has the simplest syntax to learn (for a procedural language). You dont have to explain argv, argc or the details of scanf to beginners. Thats like saying python is complex because you need to explain iterators and generators. You don't need to dig that deep into the language as a beginner, you just need to be able to understand the structure, control flow and be able to get your programs working.
- cheatercheater 15y ago> But the more I think about it, the more I like C. It gives you the best understanding of what computations are actually being done by your processor Yes, because C is exactly how computers work inside! SO CLOSE TO THE METAL > the mental exercises involved with fulling understanding pointers is valuable at the collegiate level I have learnt about mappings in mathematics in kindergarten. Literally. Then in university we have had exactly one sentence to flesh out the idea in ZFC. You really think C is so mind bending?
- ufo 15y agoAnd at the same time we have a whole generation of people that don't know what a tail call is. C might be closer to the metal then most languages but it still is a leaky abstraction in some places. And anyway, the real problem is not C being complicated. Its that the other alternatives are also perfectly reasonable while also being simpler.
- AdamTheCamper 15y agoI believe it is quite close to the metal. When I had my Systems Programming course in first year of college we started with C, and then continued with x86 assembly. One of interesting parts was, when we compiled our C code to assembly and then compared with our hand-written assembly code. Was fun :)
- wizzard 15y agoIn the Java example there is a ton of error checking that is not being done in the other examples. Not really a fair comparison. The author said the programs should complete the task of "reading two numbers from the user, adding them together and printing out the result." The Java program does more than that, so of course it looks more verbose.
- hythloday 15y agoI think it is a fair example: both NumberFormatException and IOException are checked exceptions, so the code will fail to compile if they're not caught.
- anonova 15y agoDespite being checked, they do not necessarily have to be caught if you add a `throws` clause in the method declaration.
- sunsoong 15y agoSurprised to see Scheme was not included.
- cheatercheater 15y agoTo everyone who was interested by pg's idea of a simple language for parallelism, check out pi calculus: http://mainisusuallyafunction.blogspot.com/2011/09/lambda-to-pi.html http://mainisusuallyafunction.blogspot.com/2011/09/lambda-to...
- nivertech 15y agoErlang version (abc.erl): -module(abc). -export([main/0]). main() -> {ok,[A]} = io:fread("A=?","~f"), {ok,[B]} = io:fread("B=?","~f"), C = A + B, io:format("C=~f~n",[C]). or -module(abc). -export([main/0]). main() -> {ok,[A,B]} = io:fread("A,B? ","~f ~f"), C = A + B, io:format("C=~f~n",[C]). Compile and run from REPL: c(abc). abc:main(). Or just execute in REPL: {ok,[A]} = io:fread("A=?","~f"). {ok,[B]} = io:fread("B=?","~f"). C = A + B. io:format("C=~f~n",[C]).
- LeafStorm 15y agoThis was a very interesting read, but the Python code sample was painfully out of date. It might be worth it to create a modernized version of this post, with updated code samples for all the languages included, and additionally adding newer languages like Ruby and JavaScript.
- deleted 15y ago[deleted]
- JVIDEL 15y agoThis is old, and there are no mentions of Erlang, Haskell or Scheme. Not even PHP which while it isn't perfect it's still pretty easy to learn.