Slashdot Mirror


Best Language for Beginner Programmers?

jahardman asks: "I work at a High School that has recently seen a decline in the number of students that want to take our entry level-programming course in Visual Basic. We have been toying with the idea of having the introduction course be in PHP or Ruby on Rails; but are not convinced that they lead well into higher level languages. Does anyone out there have suggestions as to what would be a better language to start students with? Ideally one that might be more 'enticing' as well?"

15 of 448 comments (clear)

  1. consider Python by Tumbleweed · · Score: 4, Insightful

    If I'm remembering correctly, Python came out of a language designed for teaching. The very syntax encourages some good programming principles (indentation, etc.), and it's object-oriented. It's a very common language to find on shared web hosting plans. Also, Ruby on Rails isn't a language - it's a framework. The language is Ruby. Ruby would also probably be a good language for students to learn, though it seems less popular right now than Python.

    PHP as a _language_ is probably not a great idea, but used in conjunction with web development, it would be great, but don't forget MySQL and/or PostgreSQL. And Perl, though that should come later; students need to learn programming with something with decent syntax before being exposed to something like Perl.

    IMO, anyway.

    1. Re:consider Python by sgant · · Score: 4, Insightful

      I second the Python recomendation. It's a great language to learn concepts on and it's very powerful so it scales well when they get into higher level programming. Plus, it's cross platform on just about anything and everything that has a console.

      Give it a look. Tons of resources out there also.

      --

      "Leo Fender was in a 'state of grace' when he designed the Stratocaster." -- Paul Reed Smith
    2. Re:consider Python by gstoddart · · Score: 4, Insightful
      It's quirky in that it allows both spaces and tabs to be used interchangeably, instead of forcing indentation to be done the One True Way, tabs.

      But there isn't One True Way.

      Or you end up with some abortion of how the text is written to the file, and therefore wrong. Emacs, for example, will not write out a single tab for each level of indent. It will collapse them all down to a single character to be space efficient.

      Then you have the encoding for how many levels of indent you actually have being encoded in an editor-specific method. So things like vi, cat, less, lpr (or notepad and printing if you're on windows) don't know how to interpret the content.

      I've had this argument with my co-workers -- some like two spaces indent, we had standardized on 4, but when edited by some editors, it crapped back a broken representation of the string because it was 'cleverly' encoded --- and it was incompatible with other editors.

      This is why whitespace chars shouldn't be interpreted as being syntactic, nor should they be stored in the file in an incompatible way.
      --
      Lost at C:>. Found at C.
  2. Teach programming, not the language. by DaoudaW · · Score: 4, Insightful

    I've been recommending (and teaching) c++ for several years now. Pascal was great, even Java has its good points. The main thing is whatever language is being used to introduce programming use it as an example language for the programming concepts which are being taught.

  3. My answer by Omnifarious · · Score: 5, Insightful

    I don't know about Ruby on Rails, but I strongly agree with you about PHP and VB. I think they both lead poorly to working in other languages.

    I would recommend Python, because I'm more familiar with it than Ruby. It has a clear, elegant syntax, and many concepts in it exist in other languages as well.

    But, Ruby may be perfectly adequate as well. I know that most concepts that exist in Python that aren't particularly language specific have counterparts in Ruby.

    I used to recommend assembly, then scheme, just so all the people who entered thinking they were programmer hotshots because they knew BASIC, VB or C or something would find themselves in deep water and having to learn something new.

    But I suspect that's a bit overly hostile. Depends on the environment of course. Still might be a good idea for people going to a hard-to-get-into technical school to knock them down a peg or two and convince them that there's stuff they don't know.

  4. Python by MBCook · · Score: 5, Insightful
    Python. Python has everything you need and then some. It runs on every platform (Linux and OS X boxes already have it installed), and it's free.

    Python (through the use of forced whitespace) forces them to learn to write more readable code (I remember taking C++ in high-school, the stuff people wrote would make your eyes bleed). The language has everything your students might need for intro programming (for loops, functions, etc). If they want to continue on will Python later (or you want to offer advanced classes later) it has bindings for all sorts of stuff (XML, OpenGL, QT, GTK, and many many other things). It also has all sorts of handy stuff like an interactive interpreter, a "for each" loop, and more. It's object oriented too.

    Look into Python. It's easy to use and would make a great stepping stone if they want to later use a language like C/C++/Java. Or (as I said) Python is great in and of its self and they can stick with it.

    --
    Comment forecast: Bits of genius surrounded by a sea of mediocrity.
  5. Would you like to play a game? by losman · · Score: 5, Insightful

    In school kids have objectives that are more short term. Graduating, having fun and being creative are common examples of that. As educators you have more long term objectives for the kids. Preparing them for college or the professional world being prime examples of that. The answer to your question is somewhere in the middle.

    If I wanted to interest kids in programming and teach them something useful I would try something like a course in Unreal Tournament editing or some other game that has a well defined scripting language. Yes it is a game but the scripting language is very C like in nature. And let's be honest you should really be focusing on teaching them how to analyze, break down and solve problems progamatically regardless of the language. Teach them that and then let them decide if it is something they want to pursue.

    Another great aspect of teaching a course this way is that it shows them both the difficulty and the rewards of programming. It is not easy to create good levels in these games. They have to learn to handle various types of media as well as programming the main logic. As a great bonus they end up with something they all can play with in the end.

    Any how, this kind of idea is not for a conservative environment and if you are in that situation then teach them Java and emphasize object oriented development. If your environment is a bit more progressive then I would look at the gaming route.

    --
    Q: I am short, useless and provide no value. What am I? A: a sig
  6. Java by OAB_X · · Score: 4, Insightful

    Java is easy to learn, gets programs that do real stuff going rather quickly, and is runable on any platorm, and is enterprise level.

  7. Why not C? by dasunt · · Score: 4, Insightful

    Why not teach them C?

    (Oooh, I can't wait to watch the modding for this comment.)

    C has a standard (a few, actually, C89 and C99 are probably the most important). Its not a difficult language to learn, its supported on almost every platform out there, and for certain tasks, its the only choice. Plus, there are many good support tools for C (gdb, valgrind, gprof, etc). Finally, many, many libraries are written in C -- C often ends up being the 'glue' code to tie another language to a specific library. And don't forget the many, many projects that already exist in C -- if you want to extend any of those projects, you need to understand the language.

    I always thought that assembly is not a bad teaching language either. It helps to understand how a processor works.

    I would also recommend lisp, but that has already been covered in this thread.

    1. Re:Why not C? by Better+Than+Bacon · · Score: 5, Insightful
      When I first started with Java/VB, I found programming to be really hard. I decided to learn assembly/C++ and, just like dasunt said, I think they taught me how computers really work.

      Once I knew that everything is a just a number (pointers, instructions, everything) and that memory is just one big linear array, nothing was a mystery anymore -- I could figure out what the compilers and other languages were really doing. This put me way ahead of average programmers my age until 4th year university when they forced everyone else to learn that stuff.

      To be a good programmer I think you have to understand how computer really work, and C/assembly is the best way to pull back the curtain and be confident that you can get anything to work.

      On a related note, when people are teaching object oriented C++ to beginners, it's common to focus on the high level stuff (encapsulation, polymorphism). What I'd like to see is for them to mix in a little bit of "and here's how you would implement polymorphism in C" -- then people see how it all comes together. Er, well, that's what I think :~)

  8. Java, then assembly language by MobyDisk · · Score: 5, Insightful

    Here's my qualifications for choosing Java, then Assembly:

    Java:
    - Is not too verbose (Hello World is not daunting)
    - Any algorithm can be reasonably implemented
    - Any structure can be reasonably represented
    - No low-level complications like pointers
    - Supports modern programming techniques like functional and O-O
    - The student can do real-world things in it
    - The student can experiment at home for free

    Don't forget assembly!!
    - Too many new programmers need to do something low-level, or interoperate with another language, and they have no concept how memory is arranged, what source code compiles down into, or even what a compiler does! They don't comprehend that a string isn't an intrinsic thing the CPU recognizes, and that there are hundreds of ways to store and manipulate them. So when they have to learn about memory-thrashing, multithreading, garbage-collection, optimization, etc. they are lost.

    This must be taught this very early on, not as an advanced course, so that when they learn other lagnauges and algorithms they can see where it comes from.

  9. Re:Pascal WAS a language designed for teaching by fireweaver · · Score: 5, Insightful

    Personally, I am a fan of Wirth-style languages, so I would recommend Modula-2 (successor to Pascal with a cleaner syntax), or Oberon (successor to Modula that adds objects and garbage collection). Although I'd stay away from the native Oberon programming environment since it is quite unlike the environment most of us are familiar with (Windows and its look-alikes). Both of these languages, like Pascal were designed for instruction, but are powerful enough to be used in production environments.

  10. Best Language by deanj · · Score: 4, Insightful

    The best language is the one that the teacher can teach well. If the teacher can't do a good job explaining the language, it doesn't matter how good the language is for programming... there will be a lot of kids in class that will be lost.

  11. Re:Noooooo! by Nutria · · Score: 4, Insightful
    The C version is far more concise.

    I spit in the general direction of "conciseness", and it's kinsman "cleverness".

    To quote Kernighan:
    Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.

    I used to be a clever programmer, but then I graduated and got a Real Job, and had to read the code written by both Clever and Grown-up programmers. Guess which code was easier to modify, debug and add functionality to. Guess which code had less bugs.

    A good (but not huge!) dose of verbosity and simplicity would go a long way towards making more robust applications.

    Another relevant quote, by Jeff Polk, co-creator of CVS:
    There's no obfuscated Perl contest because it's pointless.

    --
    "I don't know, therefore Aliens" Wafflebox1
  12. Syntactic whitespace by Anonymous+Brave+Guy · · Score: 4, Insightful
    YMMV, but for me, having whitespace be syntactically significant is just BAD!

    That was my initial reaction when I first met Python: sacrilege!

    In many other block-structured languages it's customary to indent but the {} or begin...end markers are the syntactically significant things. Unfortunately, when humans read the code, it's actually the indentation they use to parse the logic most of the time, as many a new C student has learned via the standard deviously indented if...if...else demonstration.

    On reflection, that means having the indentation not be significant, yet using other markers that are, is a bit like putting a banner comment at the top of every function with the function name in it: it's fine if you copy it in properly, but it doesn't really help, and it's a maintenance hazard that can actually harm readability if it's changed incorrectly.

    Punctuation in a programming langauge is good, exactly up to the point that it stops increasing readability and/or reducing errors. After that, it's just clutter. So IMHO the question is whether (from some objective, analytical point of view) ignoring whitespace and introducing {} or begin...end markers improves readability or reduces bug count for programmers using the language. I suspect the answer really is a matter of taste: for some programmers it will, and for some it won't.

    This is why not everyone agrees on whether syntactic whitespace is a good or a bad thing. There just isn't a single, universal right answer to the question.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.