Slashdot Mirror


The Best First Language For a Young Programmer

snydeq writes "Fatal Exception's Neil McAllister questions whether Scheme, a dialect of Lisp taught as part of many first-year CS curricula and considered by some to be the 'latin of programming,' is really the best first language for a young programmer. As he sees it, the essentially write-only Scheme requires you to bore down into the source code just to figure out what a Scheme program is trying to do — excellent for teaching programming but 'lousy for a 15-year-old trying to figure out how to make a computer do stuff on his own.' And though the 'hacker ethic' may in fact be harming today's developers, McAllister still suggests we encourage the young to 'develop the innate curiosity and love of programming that lies at the heart of any really brilliant programmer' by simply encouraging them to fool around with whatever produces the most gratifying results. After all, as Jeff Atwood puts it, 'what we do is craftmanship, not engineering,' and inventing effective software solutions takes insight, inspiration, deduction, and often a sprinkling of luck. 'If that means coding in Visual Basic, so be it. Scheme can come later.'"

634 comments

  1. English without any shadow of a doubt by Anonymous Coward · · Score: 0

    That way you get access to more texts, more help and need fewer changes to your code to get to a wider market.

  2. Pascal by El+Lobo · · Score: 4, Insightful

    I always considered Pascal (or Delphi) a great language for beginners. Powerful enough, structured, type safe and very elegant. From there, jumping to other languages is quite easy.

    --
    It's time to realise that Abble's products are the biggest abomination these days. Just say NO to the dumb iAbble way!!
    1. Re:Pascal by wilx · · Score: 0, Offtopic

      I totally agree. Whoever has moded the parent post down is an $&@#$&%.

    2. Re:Pascal by maxume · · Score: 1, Informative

      Grandparent (apparently) has bad Karma, no $&@#$&% modded the comment down, it started there.

      --
      Nerd rage is the funniest rage.
    3. Re:Pascal by Devout_IPUite · · Score: 2, Interesting

      Java is also a very nice first language. I know personally that I loved the built in UI stuff (started in C++). Stay the crap away from Flex (no concept of threads, a lot of voodoo beneath the hood, etc).

      I think started in a garbage collected space and then moving to manual memory management is a good path as well.

    4. Re:Pascal by CodeArtisan · · Score: 2, Informative

      When I was an undergrad in the mid-80s, Pascal was the language of choice for teaching algorithms, data structures etc. We were also taught assembler and microcode as we learned about microprocessor architecture. Once we had been indoctrinated with solid programming discipline, we were introduced to C. Pascal and assembler were a great foundation and made the transition to C very straightforward.

      For logic programming, we were taught Prolog.

    5. Re:Pascal by commodore64_love · · Score: 2, Insightful

      Get a Commodore 128 emulator, and start programming a game in BASIC. That's how I started, until I realized that BASIC is too slow so then I switched to C.

      --
      "I disapprove of what you say, but I will defend to the death your right to say it." - historian Evelyn Beatrice Hall
    6. Re:Pascal by TW+Burger · · Score: 1

      Agreed. Pascal to learn structured programming, then assembler to understand how a computer works, then C/C++ and Java to learn objects and threading, then C# to be employable.

      Lisp is not much used outside of AI and difficult to understand without experience.

    7. Re:Pascal by siloko · · Score: 1

      I guess I learnt English first and then migrated to other languages. Incidentally where is Delphi spoken nowadays? And since when did we let kids choose what language to learn? When I was a youngster we just learnt the default in the country of our birth . . . and after that VB.

    8. Re:Pascal by Hurricane78 · · Score: 3, Informative

      Sorry, but I started with Pascal and then Delphi. And it blocked me. Because I always walked around C/C++, and never really learned it.
      I loved it, back then. But frankly, ObjectPascal, as a language, and Delphi, (as in:) the libraries, are extremely outdated today. After years of Java, PHP, Python and Haskell, I found myself crippled by their lack of features. And only C and C++ beat it in lack of elegance. But C/C++ at least have more features.

      I recommend starting out with Python, and maybe the WebDev area (which is much fun right now, with HTML5, JS, SVG, CSS3, Firebug, etc, in Firefox 3.5).
      And then go straight for the full package:
      C and Java (forget C++, it tries to be C and Java, but fails to beat both) on the practical side, and
      Haskell and Ocaml on the fun and educational side. (With Haskell, you're in for a ride, but it is totally worth it.)

      There is no walking around it, by clinging to simple languages for years. The nice thing is, that when you learn the most advanced languages, you automatically learn to program in a better way in less elegant languages (like using full OOP and functional programming styles in C and JS.)

      --
      Any sufficiently advanced intelligence is indistinguishable from stupidity.
    9. Re:Pascal by sammyF70 · · Score: 2, Insightful

      I would say that learning manual memory management first is more beneficial than learning to be lazy ant let the GC do all the work, and, the day you need to use a language which doesn't clean up in your path, write memory leaking piece of feces. Of course, it means that when you need to write in java, you'll be sorely missing the freedom to decide WHEN the garbage is collected.

      It's a bit like the difference between living in your mom's basement and having her come and clean up you room randomly when you're not at home (or when she thinks you are not, but are in fact, having a good time with your girlfri... I mean, inflatable doll) and living alone, having to do the cleaning up yourself, but at least knowing exactly where everything is and deciding yourself that you can live for a day more with your dirty laundry in a corner of the room

      --
      "DRM is like the Ford Pinto: it's a smooth ride, right up the point at which it explodes and ruins your day."-C.Doctorow
    10. Re:Pascal by binarylarry · · Score: 1

      I have to disagree. I'd say explicit memory management only complicates matters for most development projects and moreso for new programmers.

      I mean you could take your argument all the way and state newbies should start programming with assembly, so there's no compiler generating poor quality code for the user.

      --
      Mod me down, my New Earth Global Warmingist friends!
    11. Re:Pascal by morcego · · Score: 3, Insightful

      How about teaching people to write algorithms ? You know, the kind we used to learn on the 60s-80s, which could be used to program in ANY language (from Assembly to Pascal/Cobol/Fortran), and not today's verbalized Pascal that people call algorithm ?

      That was the first "language" I learned and, having learned 20+ languages after that (including some obscure ones lines Forth and Lua), even today I thank my teacher for giving me such a good understanding of programing without relying on any specific language's concepts.

      --
      morcego
    12. Re:Pascal by sammyF70 · · Score: 1

      personally, I'd say newbies starting programming should start with an interpreted language which gives them some instant gratification (my personal favourite being python).

      Java is just too complex for a newbie in my opinion. Complexity-wise it's just short of C/C++. So instead of Java, just use C/C++ and get at least some better understanding on how things work.

      --
      "DRM is like the Ford Pinto: it's a smooth ride, right up the point at which it explodes and ruins your day."-C.Doctorow
    13. Re:Pascal by dunkelfalke · · Score: 2

      Yeah and the mirror is surely the reason your face seems ugly.
      Instead of blaming tools, blame your incompetence. I started with Pascal/Delphi myself, had to switch to C and C# later, doing a bit of Java right now. In no way is Pascal really lacking features and Delphi Language is pretty much as powerful, as any other modern OOP language is. The syntax is different than the syntax of a curly brace language but then again, Delphi Language comes from a different language family (Algol) so it is to be expected. And in no way Pascal has ever hindered me to learn C. It was just my laziness and when I finally had no other choice I just learned C, C# and Java. Knowing Pascal has helped me to learn those languages faster and it helped keeping my coding style cleaner - some really ugly things are possible in C but I rather settle for readability of the code.

      And blaming a language for the (perceived) lack of libraries is ridiculous at best.

      --
      "It's such a fine line between stupid and clever" -- David St. Hubbins, Spinal Tap
    14. Re:Pascal by Stealth+Potato · · Score: 3, Informative

      C and Java (forget C++, it tries to be C and Java, but fails to beat both)

      I'll readily agree that C++ is an awkward and complicated language that is absolutely not suitable for beginners, but how can it try to be Java? C++ predates Java by over a decade.

    15. Re:Pascal by Anonymous Coward · · Score: 0

      (forget C++, it tries to be C and Java, but fails to beat both)

      wait.. are you serious?

    16. Re:Pascal by DudeTheMath · · Score: 1

      Assembly? Ha! In my day, we had a memory-level debugger. We programmed in machine code. And we liked it.

      --
      You save only 59 seconds over 8 miles by going 75 instead of 65. Do you really have to pass that guy? Do the Math!
    17. Re:Pascal by msuarezalvarez · · Score: 1

      A beginning programmer should stay away from threads. In fact, most programmers, beginning and old, should stay away from threads.

    18. Re:Pascal by Anonymous Coward · · Score: 0

      Because trying to compete against video games is hard. Trying to introduce a kid to programming by teaching algorithmic theory would be like trying to excite kids into learning physics by teaching them renormalistion.

      The need to quickly see the results of their play, not spend hours learning abstract dry theoretical material,

    19. Re:Pascal by Anonymous Coward · · Score: 0

      (forget C++, it tries to be C and Java, but fails to beat both)

      C++ is an extension, essentially of C, and has existed with the functionality of Java long before Java existed - it's just you have to do more of the overhead to do what Java has, but that isn't such a bad thing.

    20. Re:Pascal by ElizabethGreene · · Score: 2, Insightful

      I think most of the comments here are missing the point. A first prepgramming language should be about doing "stuff" with as little programming drivel as possible.

      Alice is a language designed for people new to the idea of programming. If your subject is under 14 it is definitely worth looking into. For someone older, stanford has a great intro to programming clas online. It is cs106 with Dr. Sahami. The first couple of lessons are with karel, and then. It eases into java.

    21. Re:Pascal by Hairy1 · · Score: 4, Insightful

      Being a professional software developer who works in Java, and a former nightclass teacher of Java I can say without reservation that Java is NOT the best first language. Java forces you to use Object constructs from the get go. These things get in the way of communicating the principles that you want to teach. Say you want to discuss IF statements, instead of writing this:

      a = 5
      if a>7:
            print "a is bigger than 7"
      else:
          print "a is smaller or equal to 7"

      you need to write something like

      public class Example{

          public String main( String[] args ) {
              int a = 5;
              if( a> 7)
              {
                    System.out.println("a is bigger than 7");
              } else {
                  System.out.println("a is smaller or equal to 7");
              }
      }

      How different is this? Well, first of all you have the concept of a class, which you can either gloss over or explain in full. Students don't know off the bat what is important and what isn't, so the class details obscure the point being made about conditional constructs. Second, the System.out.println lines introduce several ideas, such as Classes (again), the differences between classes and instances (objects) and what methods are. The first example is Python, the second Java. In summary, Python is a far better language to start with because you can teach concepts in isolation.

      Java is still my favourite professional language, and to be sure it isn't a knarly twisted mess like C++, but it still isn't the ideal language to introduce students to.

    22. Re:Pascal by Anonymous Coward · · Score: 0

      C++ is still the lingua franca of many shops. You may have inadvertently missed a great experience/opportunity with it.

    23. Re:Pascal by linzeal · · Score: 1

      What is wrong with starting with ASM? I did and I turned that knowledge into 2 engineering degrees and I am working on grad school. Compilers are over rated.

    24. Re:Pascal by Anonymous Coward · · Score: 0

      If you like Pascal then I recommend Component Pascal for learning computer programming since it is more flexible and contains the seeds (or not) of object oriented programming. The development environment, BlackBox, is the simplest that I have ever used the edit/compile/run process (no explicit linkage step, no explicit debugger).
      Program and go.

    25. Re:Pascal by Massacrifice · · Score: 3, Funny

      It's a bit like the difference between living in your mom's basement and having her come and clean up you room randomly when you're not at home (or when she thinks you are not, but are in fact, having a good time with your girlfri... I mean, inflatable doll)

      Call me perverted, but as a Java programmer, I AM THE MOM, and the program is the permanent teenager. And I don't want that teen to fuck $whoever in the basement, without me knowing - no, without me _asking for it_. Garbage collection is just an automated facility (think of a roomba) to help me control the mess the goddamn kid creates (used condoms and smelly sneakers).

      --
      -- Home is where you eat your heart out.
    26. Re:Pascal by sammyF70 · · Score: 3, Interesting

      nahhh .. in my analogy, the GC is your mom. the programmer is the one with the smelly condoms and the used sneakers.

      This is /. after all, so I guess I should have used a car analogy :

      • Interpreted Script languages (Python, etc) are like an original VW beetle. It won't be fast, it doesn't have anything shiny or particularly exciting in it, the motor is at the wrong end, but it will get you where you want to go ... in its own time
      • C/C++ is like a sports car with a manual clutch and not many gadgets assisting your driving. It's fast, deadly, but if you learned driving on the afore mentioned beetle, you'll be able to drive where you want to and have lot of fun making it do exactly what you want.
        You most definitely don't want to learn driving in THAT, but once you're used to the beetle, you'll want something fast, better .. more sexy. The fact that the beetle and the really fast car are so different in look and feel will ensure that you won't just rush in, and so will be more careful about the idiosyncracies of your new vehicle.
      • Java is more like a sporty limousine. Lots of flashing lights, automatic gear, ABS, EBD, and other stuff with weird acronymes. In Theory, it can drive up to 200mph, but every time you try to get that fast, the motor automagically loses power. If you try to make it slide around a corner, all the nifty lamps light up, things start to blink and kick in, and the car just drives as if on rails. If you learn to drive in THAT, you'll have a hell of a time with the fast but deadly car, and will probably crash it more often than not, because you're used to fast cars but expect them to do everything for you.

      okay .. the analogy is probably a massive fail and I'm burning Karma as if there was no tomorow here, still .. I stand to my point : start with something really easy, and when you want to play with the big kids, use a language which keeps the hand-holding to a minimum.

      --
      "DRM is like the Ford Pinto: it's a smooth ride, right up the point at which it explodes and ruins your day."-C.Doctorow
    27. Re:Pascal by BikeHelmet · · Score: 1

      How about teaching people to write algorithms ?

      You are a smart man. (or woman)

      I can't count the number of times I've just stared at someone coding something, and wondered what the heck they were trying to do. We'd be much better off if programming courses had more problem solving. It doesn't even have to be difficult languages - before I started coding, I spent years making stuff with TGF/MMF - when it was finally time to learn something more low-level, like SDL, I already had all the concepts necessary to throw together a simple 2D platformer, before I had even learned a language.

      I don't consider myself an amazing programmer, but I know enough to get the job done. Many things stump me, but 2D games never have, so I really do believe learning the concepts (and getting results) before learning the implementation helped.

      Also: Double-buffered clip-pane 2D renderer! Woot!

    28. Re:Pascal by architimmy · · Score: 1

      I started programming in HS with Pascal. I loved it! It hooked me on programming for life. Java followed in college and other languages have sort of layered up on that. But I would consider those two to be the basis for my interest.

    29. Re:Pascal by Anonymous Coward · · Score: 0

      Well, your degrees certainly weren't in logic. Plenty of people in grad school with two engineering degrees did not start with ASM. There is no logical connection between the two, which makes me suspect you are actually just some 14 year-old script kiddie in his mom's basement.

    30. Re:Pascal by linzeal · · Score: 1

      Logic was fun but 10 years ago, I'm looking forward to taking a fuzzy logic/neural networking class this fall. I'm a Mech/EE engineer and ASM imho helped me tremendously when working with VHDL and C for controllers. Java does way too much imho and it is too easy to lose sight of the algorithm, and a lot of these languages they are recommending are just sophisticated scripting languages. To say that any language is alright to start a college career with I think is dangerously naive, if not stupid.

    31. Re:Pascal by Jamie+Lokier · · Score: 1

      C++ changed a lot in that decade. Not the language very much, but the way it is used.

      I wrote a lot of C++ in 94-97, but I wouldn't recognise most of what is written nowadays: the STL wasn't usable back then, and anything complicated with templates would crash most compilers. Now STL is standard C++ and used in beginner's code.

    32. Re:Pascal by Anonymous Coward · · Score: 0

      Sorry, but I started with Pascal and then Delphi. And it blocked me. Because I always walked around C/C++, and never really learned it.
      I loved it, back then. But frankly, ObjectPascal, as a language, and Delphi, (as in:) the libraries, are extremely outdated today. After years of Java, PHP, Python and Haskell, I found myself crippled by their lack of features. And only C and C++ beat it in lack of elegance. But C/C++ at least have more features.

      Then you're out of touch. Delphi as a language, as an IDE, and as a set of libraries has improved considerably since Borland spun off its tools development into a separate company. And things have continued to improve after Embarcadero's acquisition of CodeGear. If you haven't yet looked at Delphi 2009, you should make it a point to do so.

    33. Re:Pascal by binarylarry · · Score: 1

      I'm honestly not the guy above you, but I also feel you're a 14 year old script kiddie.

      You should evaluate you comments.

      --
      Mod me down, my New Earth Global Warmingist friends!
    34. Re:Pascal by Stealth+Potato · · Score: 1

      I still wouldn't recommend it for beginners; the sheer weight of all the features and idiosyncrasies (not to mention the occasionally esoteric rules) make it a pretty substantial undertaking to use the language correctly. A good language for a beginner should allow them to focus on learning fundamental concepts, rather than forcing them to attend to countless details like always giving your base classes a virtual destructor and religiously checking buffer lengths and pointers in an attempt to avoid the nasal demons.

    35. Re:Pascal by Jamie+Lokier · · Score: 1

      I agree. C++ has far too many arcane rules, which you must know to avoid bugs and understand other people's code, to be a good beginner's language.

    36. Re:Pascal by OnlyPostsWhilstDrunk · · Score: 1

      C++ gets a lot of hate on the Internet but I think it's quite prominent in the business world. I work in a VxWorks/C++/Corba/Windows realtime (vxworks side) environment and Java simply wouldn't do it for us, and C doesn't offer the OOD which is the point of our project. It's actually working right now. The big problem with C++ to me right now is not the language itself but the way that the files are handled and how compilation is done and our reliance on gnu make.

      Pitfalls:
      Dynamic dependency generation causes make resets!
      Make / C++ can't tell the difference between an interface change which requires rebuilds and an internal change which should require no rebuilds.

      We ARE using java to build the dependency chain amongst our C++ files. Is that odd?

      --
      Sig: I don't spell check and this is legit. This was written while I was drunk, and quite possibly with m eyes closed, b
    37. Re:Pascal by shutdown+-p+now · · Score: 1

      While you have a point about C++ changing, it's definitely not changing in Java direction. If anything, STL is decidedly not like Java.

    38. Re:Pascal by SecondaryOak · · Score: 1

      First of all, I don't think kids' introduction to programming should be by studying any specific algorithm. I personally taught myself the feeling of programming by playing around in Pascal, trying to just make things happen. In retrospect my code must be horrible, inefficient, non-modular, etc. but it was fun and it really gave me the "hanging" of programming. I'm sure many others around here started much the same. Sure, in high-school we were taught proper CS which we sometimes practiced on paper in pseudo-code, but that came later. Secondly, I don't think this is about "relying on any specific language concept". From my experience switching programming language is not that difficult of a thing to do. Having started my way on Pascal might have made ML, Prolog and Befunge more difficult for me to learn, but I have successfully written code in them. A teenager needs a simple, intuitive environment, in which she can play around. I think something like Basic or Pascal fits that role perfectly.

    39. Re:Pascal by julesh · · Score: 2, Interesting

      Alice is a language designed for people new to the idea of programming

      There are a lot of languages designed for people new to programming, and many of them are better known and more widely supported than Alice. And I'm still far from convinced that a functional language is the best way to start. A lot of standard tasks are complicated by the functional approach. Alice at least is based on Standard ML which is not a pure functional language (more along the lines of LISP than, say, Miranda, the language I learned functional programming with), but I'd still avoid it for a few reasons, most notably the fact that the only GUI binding available for it is GTK+ which is a very complicated environment that I would say is not suitable for beginners.

      The choices are, essentially:

      * BASIC. If you'll forgive the pun, basic, but not actually useless. VB.NET is a useful language that you can pick up with relative ease, and it's reasonably easy to transition to C# later because they share the same standard library. BASIC has been widely criticised for not teaching structured programming techniques and leading to a variety of brain damage, but it isn't clear how well these criticisms apply to modern, structured, object-oriented BASIC implementations.

      * Pascal / Object Pascal. Originally designed to teach structured programming techniques. Object Pascal (or, more precisely, "Pascal with Objects" as implemented by Borland in the early 90s) was a breakthrough language for me. Stuff I'd failed to grasp with C++ became much more obvious with the simpler implementation in Pascal. I'd say still useful pedagogically, even if the available systems (i.e. Delphi and a few open-source reimplementations thereof) are a little outdated.

      * Smalltalk. An early object-oriented language, whose main developer was highly interested in the possibility of teaching children to program. A lot of people are put off smalltalk by its differences from most other languages (primarily that code is entered in an interactive environment, rather than written in a text editor and then compiled/executed) and strange syntax (although nothing like as strange as LISP). IMO, Smalltalk is the LISP of the object-oriented world and well worth looking at as a first language.

      Some other contenders weren't designed or developed as pedagogical languages, but are worth considering anyway:

      * Java. As somebody pointed out above, the downside of Java is the high overhead of boilerplate code that's required to do anything. The advantage is that you won't be constrained in what you can achieve by the environment... Java is pretty-much open ended, and almost everything you need to learn can be learned in it.

      * Javascript. Don't laugh. Javascript is quite a good language, with support for a lot of neat stuff like closures, and it provides an interesting environment for a beginner to work in.

      * Python. Interactive interpreter is a plus. Total lack of programming overhead is also a plus. Significant whitespace is a minus for a beginning programmer, as the tab/space confusion problem can be quite tricky for somebody who doesn't understand it at a low level to manage.

    40. Re:Pascal by julesh · · Score: 2, Funny

      I wrote: And I'm still far from convinced that a functional language is the best way to start. A lot of standard tasks are complicated by the functional approach. Alice at least is based on Standard ML which is not a pure functional language (more along the lines of LISP than, say, Miranda, the language I learned functional programming with), but I'd still avoid it for a few reasons, most notably the fact that the only GUI binding available for it is GTK+ which is a very complicated environment that I would say is not suitable for beginners.

      And then I discovered there are two different languages called Alice. Mea culpa.

    41. Re:Pascal by Sam+Douglas · · Score: 1

      Threads aren't bad if you are willing to learn to tame them. They don't automatically make things faster. They are more difficult to program with. They are very much worth learning to use effectively, but in good time. I agree, beginners should stay away. More experienced programmers should probably -use them more often-, to dispell the illusion that they magically make programs faster. They can be very rewarding and fun to use correctly though, or a nightmare and only solid experience will allow you to predict those cases.

    42. Re:Pascal by Sam+Douglas · · Score: 1

      Yeah. The Java collection framework is simple and easy to learn and use without a reference manual or IDE to help you along and doesn't rely on overloading the meaning of operators in the language to emulate another style of programming. Gag.

    43. Re:Pascal by Anonymous Coward · · Score: 0

      Funny... I always felt like Java is a castrated watered down version of C++ with some sweet library sugar on top, plus a garbage collector so that one could hire codemonkeys who cannot wipe their own ass (yes theyre cheaper).
      And as for wiping your ass yourself I feel it's still a great exercise - especially when in time you learn how you can automate that task - so I think C++ is a good choice to start. Well maybe if I'd like to hide all the details (say for teaching children) I'd probably start with something like Ruby or Python.
      Java as a first language seems evil - you will have to explain classes to get them to understand the very first hello world program fully.

    44. Re:Pascal by Svartormr · · Score: 1

      Machine code! Bloody luxury! Plugboards and patch cords, we had, day in, day out.! 'cept when you had to push the trolly around and replace the blown tubes. Uphill. Both ways. In winter.

    45. Re:Pascal by JosedeNoche · · Score: 1

      agree with that point, for a younger teenager, understanding the basics of class programming can be quite confusing, especially when your'e using Java, i remenber that some of my students didn't get clear at lot of class issues because they don't see the diference between writing a instrucction code and using a class library

    46. Re:Pascal by Teancum · · Score: 1

      Amen! I love Pascal as a programming environment, and I've done enough challenges head-to-head with C developers to know that there is little if anything that can't be done with Delphi.

      The only real issue is how Borland screwed up the product line and how Delphi is now incredibly expensive to get that only a serious Delphi programming team would bother buying the compiler in its current incarnation. How I miss the $50 student editions of Turbo Pascal from back elsewhen (something a mere mortal can afford if they have a limited budget, like most college students and casual experimenters).

      Free Pascal and Lazarus do a pretty fair job, but they have all of the rough edges of a volunteer software project.

    47. Re:Pascal by Teancum · · Score: 1

      A beginning programmer should stay away from threads. In fact, most programmers, beginning and old, should stay away from threads.

      I couldn't disagree more. Multi-threaded and multi-processor programming is only going to be more common in the future, not less. I'll admit that trying to debug multiple threrads in a traditional programming environment is something that is difficult to nearly impossible (in some cases) to do, but you don't have to be living in abject fear of the topic.

      IMHO one of the best introductory environments for programming is Scratch, developed by the MIT Media lab. While it is geared more for kids rather than adults, developing software in that programming language uses multiple threads as if it was the very air that you breathe. Except for all but the most simple examples, code written in that language simply must use multiple threads in order to work. And yes, I've seen 8 year olds be successful in writing what would be in most other programming languages a nightmare from hell itself with hardly even a second thought.

      That really is the issue: The thread behavior of a language, if it is to be done right, needs to be something inherent in the language itself and not something tacked onto it ad-hoc after the fact. Most software developers working with threads use operating system calls and tend to work at it on too low of a level to make it work properly without some significant headaches.

    48. Re:Pascal by morcego · · Score: 1

      Ok, thank you for the hook. Going to make full use of it.

      You just pointed there a big, big problem in CS courses these days: pseudo-code doesn't replace algorithms. They are not the same thing. However, most CS courses these days teach pseudo-code as if it were algorithms, which is just bull. Most people will graduate CS without any real knowledge of writing algorithms (let alone good ones). The advent of modeling languages made things a little less painful, since yeah, someone who knows UML (and is good at it) is much better than someone that writes pseudo-code. Both neither are as good as someone with good knowledge of writing algos (speaking from a project manager PoV here). Of course, someone who is good at algos AND UML (extremely rare) is even better.

      Pseudo-code is crap. Useless. If you are going for pseudo-code, just teach them Pascal and be done with it. It will amount to the same thing in the end.

      --
      morcego
    49. Re:Pascal by Anonymous Coward · · Score: 0

      I currently code in both C++ and Java frequently at my job (C++ for the client side, and Java for the server side). When I've done interviews, it is my experience that people interviewing for Java positions were also the ones who were weak in resource management, synchronization and multi-threading, OS fundamentals, etc. However, they usually excelled at OO fundamentals.

      These people must be smoking something. If you don't learn a language such as C or C++ as a first language, it will take a longer time to understand anything about the underlying hardware of the system. The same people who always rely on garbage collection of resources in Java and other languages are often the retards who don't realize it IS important to close DB statements, http connections, and other things as soon as the objects are no longer useful. They are often the same people who don't realize there are different threading models on Windows vs Solaris vs Linux; although at some point in your career, this information WILL be useful. They are often the same people who when provided with a crash dump to debug of any sort, are CLUELESS.

      Although more powerful PCs come out all the time now, that is NO EXCUSE for being a lazy programmer, and not understanding TRUE resource management. Once you master C or C++, ALL other languages suddenly become very simple. Remember, it's easy to go from C++ -> Java, but vice versa (think memory leaks) is what is more difficult.

      Learning a language like C or C++ will help you become more valuable to your employer. I'm not trying to bash other languages; I love writing code in Java, Python, Perl (yes, I said Perl), and growing up, I first learned BASIC and Pascal--it wasn't until college that I learned C, C++, Assembly, and Java. As a software engineer, it doesn't matter what language you write in, as long as you love what you do. However, starting with a language that does NOT hold your hand and allows you to screw things up on a system will make you a much stronger and more prepared engineer in the future.

    50. Re:Pascal by grarg · · Score: 1

      Being a professional software developer who works in Java, and a former nightclass teacher of Java I can say without reservation that Java is NOT the best first language. Java forces you to use Object constructs from the get go. These things get in the way of communicating the principles that you want to teach.

      My first "Introduction to Programming" course was given through Java and it transpired exactly as Hairy1 describes. We got tied up in knots with objects, constructors and parameters and a simple task of multiplying two integers took two weeks to teach because the lecturer wrapped the whole thing up in a pile of "class Rectangle" bullshit.

      By contrast, at the same time, we were being introduced to assembly on a Motorola 68032, and one of the grad students had put together a simple wrapper program to let us write values to registers using simple pseudocode-like commands. I learned more about programming and problem-solving from THAT course than I ever did from the Java one.

      More recently, a friend of mine taught a beginners' course for an evening CS course in the same college (Trinity College Dublin) and when he was casting around for a simple language that wouldn't get in the way of teaching basic programming principles but could still be used to create something more satisfying than command-line output, you know what he ended up going for? PHP. And apparently they loved it.

      You can't start with objects; it's too abstract for a beginner. When you've done variable assignment, operator precedence, control structures, simple functions, scope, loops and arrays, THEN maybe think about introducing classes.

      --
      The conclusion of your syllogism, I said lightly, is fallacious, being based on licensed premises
    51. Re:Pascal by deadkennedy · · Score: 1

      Pascal is a great teaching language. I was taught Pascal in high school and it served as a great introduction to recursion. Our instructor walked us through the steps to drawing Sierpinski triangles on the screen. I suppose it is a combination of both language and teaching methodology.

    52. Re:Pascal by commodore64_love · · Score: 1

      How does learning an algorithm help me make a a human character from Final Fantasy 13 walk across the screen? That seems beyond the grasp of simple paper-and-pencil number crunching (which is why we have computers - to do things old tools could not do).

      --
      "I disapprove of what you say, but I will defend to the death your right to say it." - historian Evelyn Beatrice Hall
    53. Re:Pascal by morcego · · Score: 1

      That is a nice question there. Thank you for it.

      However, that is not the issue. If all you are doing is coding a routine, even to do a complex task (but only one), it really won't help you all that much.

      However, if you have a project with 50000+ lines of code (which is a fairly small project, relatively speaking), it can make a huge, huge difference. If you have a mixed environment project, mixing platforms, languages, agent/manager modules etc, a good algorithm is KEY.

      You see, I don't write algorithms for every piece of code I write. I mean, it makes no sense for me, at this point, to write a complete algorithm for a program with, let say, 500 lines of code. (It would if I were still learning algorithms or programming, of course). However, if you are involved in, let say, a 100000 lines of code project, with 30 other programmers, it is simply HUGE. Even a smaller project, let say 10000 lines of code, with 3 programmers, but with multiple platforms and different programming languages (something I experienced in the past), having a well written algorithm can make or break the project.

      --
      morcego
    54. Re:Pascal by DudeTheMath · · Score: 1

      Ha! I was talking about vacation. Work, now, that was torus magnets on a 2cm spacing wire grid. And two hours at a time on the bicycle for the electricity. Kids these days.

      --
      You save only 59 seconds over 8 miles by going 75 instead of 65. Do you really have to pass that guy? Do the Math!
    55. Re:Pascal by hazydave · · Score: 1

      Totally wrong. Ok, I wouldn't necessarily start a beginning programming class discussing threads... they are a more advanced programming concept. In fact, I would start with functions, then get to variables.

      But threads are an essential part of any modern program, just as important to proper software design as functions, loops, and variables. Much of today's software suffers, greatly, because so many programmers haven't advanced much beyond the BASIC they first learned as a kid.

      --
      -Dave Haynie
    56. Re:Pascal by Svartormr · · Score: 1

      Bicycle! You were lucky to have a bicycle. Punching cards by hand for 12 hours a day. But two lumps of coal at night with 8 of us in a bed. And half a watch on the bilge pump.

  3. best first language? by girlintraining · · Score: 1, Flamebait

    The best first language for a programmer is your favorite language. Duh.

    --
    #fuckbeta #iamslashdot #dicemustdie
    1. Re:best first language? by Norsefire · · Score: 4, Funny

      No, it's *my* favourite language. Your favourite language is awful.

    2. Re:best first language? by Anonymous Coward · · Score: 0

      Brainf*ck it is...

    3. Re:best first language? by rs79 · · Score: 1

      The best first language is assembler so you know how computers really work. If you don't learn this you'll always be at a disadvantage to somebody that knows assembler.

      After that learn C, (not C++) so you understand how it's shorthand for C. No, it actually is.

      Now maybe server software won't be so obscenely bloated.

      --
      Need Mercedes parts ?
    4. Re:best first language? by Anonymous Coward · · Score: 0

      http://en.wikipedia.org/wiki/Kannada

    5. Re:best first language? by Anonymous Coward · · Score: 0

      That's what SHE said!

    6. Re:best first language? by Hairy1 · · Score: 1

      Its only your favourite language if you are incapable of objective comparison. An old friend of mine had a saying - "Horses for courses" - meaning that a language is only "best" in a certain context. If you are doing business applications chances are that C++ will take ten times as long as using Java, Delphi or C#. However, if what you want to do is introduce a student to programming you need to be able to teach each concept in isolation. That can't be done in many languages. Python is the front runner I think because it is similar to the old BASIC language in that it allows very simple programs. It is unlike BASIC however in that it does have OO principles once you understand the BASICs. Sorry.

    7. Re:best first language? by Repossessed · · Score: 1

      My favorite languages are Lisp and Perl. Doing that to a 15 year old would just be wrong though.

      I'd say c++ for a teaching language, i's not something I use myself a lot, but it can be used to explore most aspects of programming, and there are huge chunks of open code in it to learn from.

      --
      Liberte, Egalite, Fraternite (TM)
    8. Re:best first language? by Anonymous Coward · · Score: 0

      Dr. Meyer of the Zurich University makes a very good case for Eiffel.
      THink of it as the PASCAL of object oriented development.
      It has many complete libraries and run time environments. It is (I think) Open Source. It produces .NET code if that is important to you.
      And he has developed many teaching programs, lessons, problems, etc. around it.

      There are apparently some industrial grade apps written in it.
      I have never used it, just read up on it, but it seems to me to be worth consideration.
      Especially if you are a Univ looking for a language to choose for your undergrads.
      pgmer6809

    9. Re:best first language? by james_gnz · · Score: 1

      I agree, Eiffel would be my choice too. Pascal syntax is nicer to learn programming concepts with than C syntax, IMHO. Students can learn other languages once they've learned the concepts. OTOH, I think it's better to start straight on OO than do procedural programming first and 'work up' to OO, because students will come to OO with a procedural programming mindset. The availability of a nice IDE, GUI toolkit and libraries is just as much of a consideration as the language proper. Eiffel does well on all counts, IMHO.

  4. basic by Anonymous Coward · · Score: 0

    I learned to program in basic because that is what was bundled with my tandy 1000. I had a lot of fun making games with it. Later on it was easy to learn other languages and I agree let the young ones use whatever they seem to like. There will be plenty of time to complicate things later on.

    1. Re:BASIC by julesh · · Score: 1

      I wish there were some language like BASIC still around these days. When I started programming a little over 20 years ago (I'm 29) I was able to plug my older brother's Vic-20 right into the TV and start writing code from there. Power on, "3000 bytes free, Ready.", in less than 1 second. You start hammering away with simple BASIC statements and if you want to organize it into a bigger program, prepend line numbers. Everyone can get that.

      VBScript is included with every modern version of Windows and is almost as simple. Open notepad, write simple program, give it a .vbs extension and double-click. Or more usefully, run a command prompt and 'cscript myscript.vbs'. There are plenty of tutorials on how to use it.

  5. Python then C/C++ by Seth+Kriticos · · Score: 2

    I personally started out with Pascal in the mid nineties, and it was nice back then (before Delphi came around).

    Nowadays I would suggest Python as firs language as it is fairly easy, clean and powerful general purpose scripting language. Then extend it with C/C++.

    Just don't start with VB, PHP, Java or C# as it will screw the person up for lifetime.

    1. Re:Python then C/C++ by nathan.fulton · · Score: 4, Insightful

      Just don't start with VB, PHP, Java or C# as it will screw the person up for lifetime.

      I strongly disagree with this. Refusing to learn a new way of doing things will screw the person up for a lifetime. But the blame for that is on the person who is now screwed up, for being lazy.

    2. Re:Python then C/C++ by woutersimons_com · · Score: 0

      I started programming by learning python. Still valuable to know the language. But now I suppose I am screwed for life as I also write Java and C#. Why I would need to learn C++ is beyond me, perhaps I just need more convincing, but I have not had a project where I wished I knew more C++.

      This promises to be a fun discussion, about what is good and what is best and what sucks. Personally, my opinion is that few are in a position to really say that one tool is better than the other. It is like telling a carpenter that he is better off using a screwdriver than a hammer, where obviously he has a purpose for both.

      Best first language? The one you have most fun working with I think. When you have fun with a certain tool you are much more likely to have success and really learn it. But whatever tool you choose, whatever language you prefer, learning about the right way to use your chosen language is smart in any case. For that, python might be a good choice as a first language because it does force you to at least indent properly. If you are more of a mathematician it works well enough for functional programming too, so it does seem to be a safe academic choice.

      Perl anyone?

    3. Re:Python then C/C++ by morgan_greywolf · · Score: 1

      I personally started out with Pascal in the mid nineties, and it was nice back then (before Delphi came around)

      That's not true. I was doing Delphi in the mid 90s. I started out on Turbo Pascal in the mid 1980s.

      Nowadays I would suggest Python as firs language as it is fairly easy, clean and powerful general purpose scripting language. Then extend it with C/C++.

      Agreed.

    4. Re:Python then C/C++ by SirLurksAlot · · Score: 5, Insightful

      Nowadays I would suggest $_language_of_choice as firs language as it is $_reasons[0], $_reasons[1] and $_reasons[2] language. Then extend it with $_arbitrarily_superior_language.
      Just don't start with $_other_language[0], $_other_language[1], $_other_language[2] or $_other_language[3] as it will screw the person up for lifetime.

      Please, I get so tired of arguments like this.

      As long as:

      1. the language (and the associated tools) are available
      2. it has all of the fundamentals of programming (looping, flow control, data structures, variables, etc)
      3. and it grabs their interest

      who cares what languages they learn? If they enjoy it and it allows them to learn how to program why should it matter what language they start out with?

      --
      God, schmod. I want my monkey man!
    5. Re:Python then C/C++ by FlyingBishop · · Score: 1

      My school just began (the fall after I've graduated) a pilot program with our CS1 course in Python. (It was previously Scheme.) So it looks like the curriculum will be moving to exactly what you describe.

      However, while I would call Python appropriate for a High-school or middle-school curriculum, I would think a more direct approach is called for at the university level. Python is a dream, I love it. However, you cannot fully appreciate Python unless you have C++ and assembler behind you.

      Me, I started with scheme, and then took our assembler course and C++ intro out of order, so my language progression was Scheme, Assembly, C++.

      If I had to go back and do it again, I think the ideal progression would be Assembly, Python, C++ (since most of our research was done in C++, it makes sense to teach last what will be used most often.)

      Yes, Python provides much more instant gratification than assembly or C++, and if a "hard science" major is just going to take one CS course, Python is not a bad choice (though I'd say they'd benefit more from C++, given that Python and Matlab are usually learned incidentally, while C++ can give a valuable edge if you need something optimized.)

      However, for someone who intends to take the full gamut of CS coursework, assembly seems like the ideal place to start. No, it won't foster their interest. But it will give them the most solid grounding in what real programming is, and when they reach C++, its boilerplate will seem like it grants endless freedom by comparison.

    6. Re:Python then C/C++ by Turiko · · Score: 1

      too bad most schools learn VB because of MS's power to persuave schools with cost reduction... I'm one of those people that is screwed up for life i guess.

    7. Re:Python then C/C++ by FishWithAHammer · · Score: 1

      You're an idiot. The majority of schools use Java and C, with some Lisp or Scheme to cover functional programming (generally at the university level).

      I'd say they should be using Python and C#, with some Ocaml or F#, but since I dared suggest Microsoft tools (even ones with viable open-source alternatives) I'm going to get bitched at.

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    8. Re:Python then C/C++ by Anonymous Coward · · Score: 0

      New way? Python, GP's first recommendation, was created before most of these languages but isn't old school. I would certainly think of it as more modern than VB or PHP. Indeed, all of those four languages steal most of their syntax and lots of their semantics from much older languages.

    9. Re:Python then C/C++ by elashish14 · · Score: 1

      Yes, but personally, Python is the ideal choice because it gives you all with the greatest simplicity and simplicity is a must for a first-time programmer. My first language was Java two and a half years ago and it was awful. There are just too many rules so that even accomplishing a simple "Hello World" is a tedious task (and I couldn't even do it now without looking up the syntax). Plus there are all sorts of syntax and other things in there like public class whatever { } that just aren't necessary and will confuse someone that's starting out.

      All these rules get in the way of learning actual programming technique and skills. So as long as you have a flexible language like Python with simple syntax that still allows you to achieve everything that you would with a more complicated language like C or Java, that's what you should learn first while learning the ropes (loops, recursion, functions, all that silly stuff). Then you can move on to the more subtle concepts of programming - classes, inheritance, and how to organize it all. No serious programmer can use Python alone, right? But it's a great place to grow your roots.

      --
      I have left slashdot and am now on Soylent News. FUCK YOU DICE.
    10. Re:Python then C/C++ by jDeepbeep · · Score: 1

      This promises to be a fun discussion, about what is good and what is best and what sucks.

      It was fun the first 0x2a times we had the discussion. :p

      --
      Reply to That ||
    11. Re:Python then C/C++ by Abcd1234 · · Score: 2, Funny

      Because <my language> is better than <your language>! And here on Slashdot, we need few reasons to enjoy a good language war. So go away with your "reason" and "logic"! We've got a pointless battle to fight!

      And for the record:

      1) Java and C# suck because they require N levels of nesting before they can type "Hello World".

      2) Assembly/C sucks because they're too low-level.

      3) C++ sucks because it's horribly byzantine.

      4) Scheme/Lisp/Haskell sucks because they're confusing.

      5) Python/Perl/Scripting language du jour sucks because they're garbage collected and hide too much from the programmer.

      6) Every other language sucks because it's not my favorite language.

    12. Re:Python then C/C++ by SirLurksAlot · · Score: 1

      Look, I'm not disagreeing with you exactly, what I am say though is I don't think getting caught up with the relative merits or detriments or a language is productive for learning to program. I haven't used it myself, but I have no doubt that Python is an excellent language, as its popularity speaks for itself.

      My first language was Java two and a half years ago and it was awful. There are just too many rules so that even accomplishing a simple "Hello World" is a tedious task (and I couldn't even do it now without looking up the syntax). Plus there are all sorts of syntax and other things in there like public class whatever { } that just aren't necessary and will confuse someone that's starting out.

      This is kind of what I'm talking about. You got caught up in the all "fluff" of a language, the bits that don't really matter. You know what my instructors said when we asked about pieces of code that had strange/mystifying aspects? "Don't worry about it, we'll get that later. Focus on what we're doing now." If you're smart and motivated enough you'll pick up any language in a matter of time despite its unique syntax (this isn't a knock against you btw so please don't take offense, I'm speaking in general).

      All these rules get in the way of learning actual programming technique and skills.

      You've hit the nail upon the head, HOWEVER that is the essence of programming. From my own observations someone with a programmer's mindset can accept strange rules, arcane procedures and symbols and be just fine with them. These are the wand, the pointy hat, the glyphs and the circle; all part of the experience and no matter what language you use you're going to have that. Don't get caught up in the fake argument that one language in particular is better than another, for learning or otherwise.

      --
      God, schmod. I want my monkey man!
    13. Re:Python then C/C++ by Bazman · · Score: 1

      Brainfuck then. Satisfies rule 1 (the existence rile), rule 2 (the sufficiency rule) and rule 3 - who wouldn't have their interest grabbed by a brainfuck?

      But (more) seriously, you can't teach a class of 30 the 10 languages that grab their individual interests - there's always a compromise. So you teach one that is fairly interesting in the hope of it being sufficiently interesting. And make sure you always teach principles and not exclusively syntax, stressing that other programming languages do this but slightly differently.

        Come project time let them use any language to get the job done. If a student wants to write a web service in Brainfuck, and succeeds, then A++ with a gold star to them.

    14. Re:Python then C/C++ by i.of.the.storm · · Score: 3, Insightful

      I agree, anyone who says that learning language X will screw up a person for lifetime is an idiot. The only people who would be "screwed up" are people who aren't good at programming in the first place. And on another note, Java and C# are pretty damn good languages, and even VB.net is supposedly pretty good if you actually give it a chance. I haven't tried it myself, but it's orders of magnitude better than VB6, which is what most people think of when they diss VB.

      --
      All your base are belong to Wii.
    15. Re:Python then C/C++ by rho · · Score: 1

      There's nothing wrong with PHP. Actually it has an advantage, in that so many open source Web toolkits are written in PHP. Which is great for a young programmer, in that they can get into the code, find something they want to change or improve, type a couple of lines and hit "Refresh". They've just done something, in seconds.

      This kind of immediate gratification can't be overstated for young kids, no matter what skill they're trying to acquire.

      --
      Potato chips are a by-yourself food.
    16. Re:Python then C/C++ by obarel · · Score: 1

      Amen to that.

      I do wonder what the discussion is about. How about we discuss the important question "which medical book should be the first to give to a 15-year old"? Or "how did you teach your son double-entry bookkeeping?"

      Well, if they're interested, they'll find the way, the language, the tutorials, the inspiration. If they're not interested, leave it. The role of the teacher or the parent is to motivate, encourage and help. Not to dictate how to enjoy your spare time.

      When I was growing up, I had only two options: BASIC and assembly. I learned both. I could have just played games and be done with it (of course, I did play games as well), or just leave the computer alone and go and play outside (I also did that). I wasn't told what to do with the computer, even though my mother was (still is) a computer programmer. These days a 15-year old can go to www.google.com and take it from there.

      The whole point of enjoying what you're doing is the freedom, that nobody tells you what to do and how to do it. Can you find a better way to kill someone's motivation that to say "don't learn BASIC because GOTOs are considered harmful. Here's the Hyperspec, Real Programmers use LISP"?

    17. Re:Python then C/C++ by jadavis · · Score: 2, Informative

      # it has all of the fundamentals of programming (looping, flow control, data structures, variables, etc)

      Looping is not fundamental to programming languages. It's an iterative construct that is not necessary in declarative languages -- and not necessary in most languages, actually.

      --
      Social scientists are inspired by theories; scientists are humbled by facts.
    18. Re:Python then C/C++ by jandersen · · Score: 1

      who cares what languages they learn? If they enjoy it and it allows them to learn how to program why should it matter what language they start out with?

      No, I don't agree with that. True, it is important that you enjoy what you are doing, but being a good programmer means, more than anything, that you are good at solving computer problems. And that is something you have to learn; the only way to learn that particulr set of skills is by exposing yourself to problems and overcoming them. Also, a good programmer should know pretty by intuition what happens inside a computer.

      That is why I would always say that the first language you really learn should be C - not because it is the best or most pedagogical language of all time, but exactly because it is so close to the HW and allows you the freedom to commit stupid errors. Remember, the most important thing to learn is not to be productive - that's just what an employer wants from you - but to be good at understanding what you are doing to the computer and good at solving problems. All these languages that protect the programmer from making mistakes are tryin to address the wrong problem - they try to make bad programmers productive. It would be better to try to make good programmers; and it is a lot better that you make your mistakes before you get into a proper career.

    19. Re:Python then C/C++ by Anonymous Coward · · Score: 0

      I'm sure they do in your world, but in my world they don't :-P

      Did it occur to you that the rest of the world might not do as where you are from? Here it is Microsoft tools they use almost everywhere. VB.net, C#, MSSQL and so on. The government actually met with Bill Gates when he was last here like has was a statesman and don't even think about trying to convert them to not use Windows exclusively.

    20. Re:Python then C/C++ by gd2shoe · · Score: 1

      From my own observations someone with a programmer's mindset can accept strange rules, arcane procedures and symbols and be just fine with them. These are the wand, the pointy hat, the glyphs and the circle; all part of the experience and no matter what language you use you're going to have that. Don't get caught up in the fake argument that one language in particular is better than another, for learning or otherwise.

      Mediocre programmers perhaps. Great programmers aren't satisfied until they understand each little nook of their core language, exactly what it means, does, and compiles to. They can accept them while they learn a language, but it's always gnawing at their soul until they understood.

      --
      I won't join Slashcott. OTOH, If Beta goes live, I just won't be back until it's fixed. Sorry Dice.
    21. Re:Python then C/C++ by Anonymous Coward · · Score: 0

      The petty, infantile name calling around here is getting really tiresome. My foes list is probably going to overflow some table somewhere soon...

    22. Re:Python then C/C++ by gd2shoe · · Score: 1

      Good point. Quick feedback is vital. Instant feedback is highly recommended.

      (Insert plug for python and its command line interpreter)

      --
      I won't join Slashcott. OTOH, If Beta goes live, I just won't be back until it's fixed. Sorry Dice.
    23. Re:Python then C/C++ by SirLurksAlot · · Score: 1

      I'm not saying they shouldn't try to understand what is happening, I'm just saying that the quirks and eccentricities of a particular language shouldn't throw them off learning any number of languages, and that it shouldn't surprise them that they will encounter strange things as a programmer.

      --
      God, schmod. I want my monkey man!
    24. Re:Python then C/C++ by FishWithAHammer · · Score: 1

      Did it occur to you that the rest of the world might not do as where you are from?

      Anybody who deals with AP or IB standards for sending kids to American colleges is probably dealing with their standards

      Although I envy you for being able to actually use C# for schoolwork. Java gives me gas.

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    25. Re:Python then C/C++ by SirLurksAlot · · Score: 1

      That is why I would always say that the first language you really learn should be C - not because it is the best or most pedagogical language of all time, but exactly because it is so close to the HW and allows you the freedom to commit stupid errors.

      I don't disagree that programmers should learn about how the software interacts with the hardware, or that programmers should pick up C at some point in their career. I also don't disagree that C lets you commit stupid errors, but really you can make the same stupid errors in just about any language. The difference is that C makes the magnitude of your stupid mistakes much more apparent. However, an infinite loop is still an infinite loop in C or Java or VB.NET. An index out of bounds exception is still an index out of bounds exception. The point is that as long as the core concepts are implemented then the language of choice shouldn't matter, just as nearness/closeness to the hardware shouldn't matter.

      --
      God, schmod. I want my monkey man!
    26. Re:Python then C/C++ by Anonymous Coward · · Score: 1, Interesting

      While I agree that at some point, programming is learning to ignore the fluff, it's funny when people dismiss Scheme as the Latin of programming, and then promote Python with argumentation like the above. Python is essentially Scheme with a bunch of fluff (punctuation and OOPiness) added on.

      The only conclusion I can draw is that quite a lot of people are unable to function without a dense scaffold of fluff. I much preferred my days working with Scheme because the bare, abstract syntax tree of what I was trying to accomplish was right there staring me in the face. You can make just as many elegant expressions of application abstraction through the use of well-factored procedures and data structures, and equally just as many inelegant hack jobs that are "write only" as the summary accuses. There is nothing about the language which causes this, but rather with the cult of language communities and their teaching habits.

      Here's the difference between Python and Scheme in a nutshell, when learning functional programming on generic data structures: "(assoc 'key1 '((key3 a) (key1 b) (key2 c)...))" becomes { "key3" : "a" , "key1" : "b" , "key2" : "c" , ... }["key1"] and both evaluate to "b". Apologies if I haven't used the exact proper Python primitive types for the keywords and values, as all I've learned of Python was from some silly mailing lists.

      The Python folks abuse "hash maps" wherever traditional Lisp people abused "association lists". If you have concerns about performance, you could use a hashmap library in Scheme and it would look something like this to apply appropriate idioms and basic types: (hashmap-lookup 'key1 (hashmap '((key3 a) (key1 b) (key2 c)...))).

    27. Re:Python then C/C++ by gd2shoe · · Score: 1

      Well, if they're interested, they'll find the way, the language, the tutorials, the inspiration. If they're not interested, leave it. The role of the teacher or the parent is to motivate, encourage and help. Not to dictate how to enjoy your spare time.

      Close. The role of the teacher is to facilitate. The student won't necessarily find "the way, the language, the tutorials, [or] the inspiration" on their own. Yes, the desire must theirs, but you underestimate the value of good support. For example, I couldn't start programming until I actually had a computer. From there, the only resource I had to learn from was a short booklet and the BASIC help system (not very helpful). That was all I had access to for years. It didn't stifle my desire (but it easily could have). It definitely slowed me down. If I had had better tools and a teacher, I would have been much, much better off. (You mention that your mother was a programmer at the time. That would have made all the difference.)

      To highlight, I had the desire, but I could have used much better tools. That is (or should be) the heart of the original question. What tools should he offer someone with the proper desire?

      --
      I won't join Slashcott. OTOH, If Beta goes live, I just won't be back until it's fixed. Sorry Dice.
    28. Re:Python then C/C++ by Anonymous Coward · · Score: 0

      I would still start with Pascal.

      I don't feel that starting with Python really teaches unique skills, and to operate it, it still requires a lot of knowledge up front.

    29. Re:Python then C/C++ by obarel · · Score: 1

      Yes, I agree.

      By the way, my mother being a programmer didn't help at all - she hated "small computers" then and she hates them now.

      What did help was: books (including computer magazines of the "good kind", not the kind that tells you what to buy, but the kind that has a program for you to copy and run ;-), friends and a modem I got when I was 14 (for BBS's, not the internet).

      What I'm saying is that this is not the situation today. If you have internet access, then having the same motivation will get you a lot further. You will find free tools for pretty much everything. And maybe the choice will become a lot harder (should I learn PHP or Ruby? Python or C? Java or LISP?)

      But I don't think anyone can or should make this choice for someone else. The internet allows one to explore and to discover, and that's the most enjoyable part of learning and doing - not to be told how and what but to find out yourself.

    30. Re:Python then C/C++ by Anonymous Coward · · Score: 0

      5) Python/Perl/Scripting language du jour rule because they're garbage collected and hide too much from the programmer.

      fixed that for ya

    31. Re:Python then C/C++ by Dragonslicer · · Score: 1

      There's nothing wrong with PHP. Actually it has an advantage, in that so many open source Web toolkits are written in PHP. Which is great for a young programmer, in that they can get into the code, find something they want to change or improve, type a couple of lines and hit "Refresh". They've just done something, in seconds.

      Unfortunately, a lot of the stuff out there that's written in PHP was written by idiots (yes, phpBB and phpnuke, I'm looking at you), and you definitely don't want new programmers picking up habits from some of them. Those are the fault of the programmer, though, and not the language, so you just have to be sure to pick out code that doesn't suck.

    32. Re:Python then C/C++ by Vintermann · · Score: 1

      Yes, there is something wrong with PHP! It doesn't even have proper scoping.

      There are such things as bad habits. There are such things as languages that encourage them.

      --
      xkcd is not in the sudoers file. This incident will be reported.
    33. Re:Python then C/C++ by Not+The+Real+Me · · Score: 2, Insightful

      "...Great programmers aren't satisfied until they understand each little nook of their core language, exactly what it means, does..."

      I'll have to call you out on this. Great programmers understand algorithms. Mediocre programmers are obsessed with their tools, which is what a programming language is.

    34. Re:Python then C/C++ by gd2shoe · · Score: 1

      Nice straw man. Riddle me this: how can a programmer be great if he/she doesn't effectively use the tools on hand? (Including the ones in the language, I haven't even reached the libraries or debugger yet...)

      I'm not arguing your point. I'm just saying it's irrelevant to the point that I made.

      --
      I won't join Slashcott. OTOH, If Beta goes live, I just won't be back until it's fixed. Sorry Dice.
    35. Re:Python then C/C++ by Lemmy+Caution · · Score: 1

      You went to Berkeley?

      I still get misty-eyed when I look at my old copy of SICP. It looks like they're phasing it out at MIT.

    36. Re:Python then C/C++ by gd2shoe · · Score: 1

      If you have internet access, then having the same motivation will get you a lot further. You will find free tools for pretty much everything. And maybe the choice will become a lot harder (should I learn PHP or Ruby? Python or C? Java or LISP?)

      Access to tools and information is much better, but it still can be very challenging to learn a first language. I don't think it's inappropriate at all for someone to try to introduce a specific language as an introduction to programming. (so long as it's a general purpose language) After you've been around for a while, it's much easier to decide what language you want to learn on its own merits. Until you've actually coded something, you don't even have the knowledge sufficient to pick a language to learn. All you can do is rely on the recommendations of others.

      If someone had offered to teach me Lisp or Smalltalk (languages that I've still not touched) I would have taken them up on it in a heartbeat. Such an introduction wouldn't have limited me, but would have introduced me to broad concepts much earlier. In my opinion (and I could be wrong), young programmers who have had their first taste will seek out other languages on their own in due time.

      --
      I won't join Slashcott. OTOH, If Beta goes live, I just won't be back until it's fixed. Sorry Dice.
    37. Re:Python then C/C++ by CarpetShark · · Score: 1

      Which is great for a young programmer, in that they can get into the code, find something they want to change or improve, type a couple of lines and hit "Refresh". They've just done something, in seconds.

      True enough, yes. Webpages are one of the few modern parts of computing that can still be easily done by a kid writing his/her first "Hello World" app. Combined with a quick lesson in the power of CSS for changing background colors etc., it's probably your best bet as a starting point that kids actually recognise as a viable project.

      This kind of immediate gratification can't be overstated for young kids, no matter what skill they're trying to acquire.

      Actually, I suspect that raising our kids to expect instant gratification is what turns then on to drugs etc., and turns them off working hard for rewards, sticking with a healthy eating/exercise program, etc. As Linus would say, "Immediate gratification is a disease."

      nothing wrong with PHP. Actually it has an advantage, in that so many open source Web toolkits are written in PHP.

      PHP runs per-page, like old-fashioned CGI, rather than as an application. Running a new web app for every page is insane, even if you're keeping the PHP instance itself around. Check out some of the independent benchmarks comparing PHP web frameworks with just about any other web framework.

    38. Re:Python then C/C++ by joaobranco · · Score: 1

      >

      As long as:

      1. the language (and the associated tools) are available
      2. it has all of the fundamentals of programming (looping, flow control, data structures, variables, etc)
      3. and it grabs their interest

      who cares what languages they learn? If they enjoy it and it allows them to learn how to program why should it matter what language they start out with?

      Well, I do have some experience (more than 20 years, actually) in teaching programming. I would agree that ANY language can be used to teach programming, but it DOES MATTER which one is used. The reason is, people will go to (and only learn) what's easier to use on each language. On most (all?) languages, all the components are available for people to learn effective programming, but on some of them, the constructs people will use most are not enough to create a full understanding of programming. You create "paper programmers" that can solve (mostly by boilerplate copying) easy or familiar problems, but cannot think outside using those "pre-built" tools. Sure, you can ignore some constructs and just teach the basic components, but then, why are you using that particular language?

      Another question to consider is the "initial steps" required to start doing something. On many languages (and mostly on "powerfull" programming languages), to be able to create something requires either the use of specialized IDEs that take you away from the actual code or lots and lots of complex syntax that is hard to explain to a neophyte other than saying "its required, you'll learn about it later". Neither is ideal.

    39. Re:Python then C/C++ by badkarmadayaccount · · Score: 1

      http://ioke.org/ is good. Just my $0.02

      --
      I know tobacco is bad for you, so I smoke weed with crack.
    40. Re:Python then C/C++ by Lunzo · · Score: 1

      VB.NET is a horrible language. It is exactly the same as C# semantically, however the syntax is ugly.

    41. Re:Python then C/C++ by i.of.the.storm · · Score: 1

      Ugly is subjective. On the other hand, I don't know myself but I've seen people mention some feature in VB.Net that isn't in C# every time it comes up that VB.Net is inferior.

      --
      All your base are belong to Wii.
  6. Old School by Anonymous Coward · · Score: 0

    Turbo Pascal

    1. Re:Old School by Dun+Malg · · Score: 2, Funny

      Turbo Pascal

      What a bloody nightmare. I learned Pascal in high school. Two years later when I learned C, I found myself wondering why the fuck anyone would inflict Pascal on people trying to learn programming. I later ended up maintaining a piece of business software written in Turbo Pascal (and later, stuff written in fucking Delphi) and found myself entertaining fantasies of building a time machine and choking Anders Hejlsberg to death in his bed in 1980 before he could inflict his monstrosity on the world.

      --
      If a job's not worth doing, it's not worth doing right.
    2. Re:Old School by Anonymous Coward · · Score: 0

      Two years later when I learned C, I found myself wondering why the fuck anyone would inflict Pascal on people trying to learn programming.

      Ah, I see. You're an incompetent programmer.

      Pascal was created as a teaching language because it forces people to do things a certain way, which is very structured. It helps you learn how to think as a programmer. C doesn't have these restrictions,which is why you like it better and why it's a much more accepted language. That makes C more powerful, but it makes it so that people can write really obfuscated code. People who learned in Pascal hopefully approach everything they do with the Pascal mindset, and their C programs come out more structured.

      If you think Pascal is a "bloody nightmare" that means that you never learned why those restrictions were a good thing, and you want to write horribly unmaintainable code. Anyone who dislikes Pascal is a fucking moron who shouldn't be allowed to program, lest they release their unmaintainable crap out into the world.

  7. Assembler! by Anonymous Coward · · Score: 0

    Does anybody even know what that is anymore? Oh well, it teaches an appreciation of minimalist efficiency, and an appreciation of what's going "under the hood" of other languages. It's also something that you probably won't study unless you make a point of giving it a try.

    1. Re:Assembler! by Jurily · · Score: 1

      I wouldn't recommend Assembly. Most of the "under the hood" things are not the job of the programmer anymore. That's why we have compilers.

      If I could choose now, I'd learn Python first, for basic algorithmic programming, followed by C, to get a grip on what's really happening at runtime. After that, you're not dependent on language anymore.

      Why do I think C is important, you ask? Read on.

    2. Re:Assembler! by Dr.Syshalt · · Score: 2, Insightful

      I wouldn't recommend Assembly. Most of the "under the hood" things are not the job of the programmer anymore. That's why we have compilers.

      And that's why we have so much of shitty inefficient code around. Even when you program in a high-level language, you still have to realize how the code you write works on the machine level. I've seen PHP programmers throwing around calls to array_diff/array_unique, chaining them without mercy, without thinking about performance - because they think that those function are some magic black boxes and never consider a performance hit. "Oh, it's a C function, C is fast anyway from what I've heard". Like a good driver should know the inners of a car, how engine/transmission etc. work, otherwise he couldn't drive efficiently - a good programmer should know all the chain, from Java/Python/Scheme/Whatever down to the machine code.

    3. Re:Assembler! by FishWithAHammer · · Score: 4, Insightful

      The problem with assembler, little Anonymous Coward, is that it doesn't let you do anything without a significant amount of work, and what you can do is unlikely to impress a fifteen-year-old kid just getting into programming.

      Being able to print a few lines to the screen won't impress that kid and make him want to keep programming. Give him a language that can easily create GUIs, so he can see his stuff in action. To do this, I'd recommend an object-oriented language, maybe Python (though I personally detest it) or C# (which is a very nice language with very nice tools).

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    4. Re:Assembler! by Khyber · · Score: 1

      Exactly. SO MUCH BLOAT.

      For proof of how useful assembler is, I'd suggest checking out things from the demoscene or go play with MenuetOS.

      --
      Still waiting on Serviscope_minor to wake up to fucking reality and realize that Jessica Price isn't going to fuck him.
    5. Re:Assembler! by FishWithAHammer · · Score: 1

      As somebody who makes a good chunk of his living off PHP, I would question whether this is true on a large scale. I mean, it has nothing to do with knowing assembly language. It has to do with understanding algorithms, which can be learned with any language. I don't need to understand the machine code (though I am reasonably conversant with x86 and ARM/Thumb) to realize that, at worst, array_unique() has to loop through the array n^2 times. That has nothing to do with assembly. It has to do with understanding what you're doing and how it would be done.

      The black box programmers are certainly an issue, of course. But assembly doesn't help you magically understand this stuff. Writing a function to do it in any language, and understanding Big-Oh and the like, will.

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    6. Re:Assembler! by Jurily · · Score: 1

      Even when you program in a high-level language, you still have to realize how the code you write works on the machine level.

      1. By "under the hood", I meant assembly vs C.

      2. It's not necessarily machine level you're interested in. You merely have to know the performance characteristics of your language features and your API. You don't care which CPU instructions actually run, because you might not even know what kind of processor your code will run on. What you do care about is whether that string function will run in O(log n) or O(n^3).

    7. Re:Assembler! by pentalive · · Score: 1

      But the goal is to get new programmers interested in the craft. Burden them not with efficiency, How the machine works at a bit level (unless they want to write drivers right off).

      I am not sure which programming language may be best but it will be:

      1) fun. Remember our subject has -never- programmed before.

      2) easy to program (try to avoid a bunch of system.screen.text.print('duh") when print("duh") will suffice.

      3) Has close in support (i.e.) It is the parent or mentor's favorite language.

      4) Should support good programming; so it has all the proper control structures and includes variable scoping.

    8. Re:Assembler! by Blakey+Rat · · Score: 1

      And that's why we have so much of shitty inefficient code around. Even when you program in a high-level language, you still have to realize how the code you write works on the machine level. I've seen PHP programmers throwing around calls to array_diff/array_unique, chaining them without mercy, without thinking about performance - because they think that those function are some magic black boxes and never consider a performance hit. "Oh, it's a C function, C is fast anyway from what I've heard". Like a good driver should know the inners of a car, how engine/transmission etc. work, otherwise he couldn't drive efficiently - a good programmer should know all the chain, from Java/Python/Scheme/Whatever down to the machine code.

      While I *somewhat* agree with the second half of your post, the "bloat" argument is a total non-starter. If you look at a computer program as a percentage of computer capability, programs now are less bloated than ever. I mean, calling things now "bloated" is equivalent to comparing prices without considering the inflation rate-- it's just dumb.

      The other note is that bloat is a tradeoff with delivery. If you sit there and optimize every single feature and every single function, you might make a program with no bloat-- but you'll get nailed in the marketplace by your competitor who shipped his product 6 months ago.

    9. Re:Assembler! by hattig · · Score: 3, Insightful

      Most of the people posting here really haven't grasped (1) and (2).

      Assembly as a first language is ridiculous, yet so many are arguing for it.

      Not only is it irrelevant today apart from microcontrollers, which they might get a job programming in 10-15 years time (assuming they're young now), but it will be incredibly frustrating.

      The student has to come to the decision to use C, Assembler, etc, themselves, when they decide they have to in order to realise their vision for whatever they're programming. I.e., they're not beginners any more.

      In the 80s that would mean writing your game in BASIC, and then finding that performance sucked. You'd extend BASIC with some extensions you found in a magazine or bought (e.g., Sprites Alive! on the Amstrad CPC) to see if that would help, and it would for the first few projects.

      What's the modern equivalent? They've already done their MySpace profile, and so on. Maybe they've done basic HTML and CSS by themselves. Now they want to go further ... or write games online? So is Flash the answer? Java for applets, despite the massive initial learning barrier (shared by most of the languages being recommended in this story)? Or do you scrape them away from the web and onto RealBasic, especially if they look at PHP, ugh.

      I would add in (2a) ability to get quick results, however primitive they are. 10 INPUT "What's your name? "; a$: Print a$ + " is a fag!" : REM: Instant fun.

      I agree with (4) but it shouldn't be overriding.

      Also many young people will never get turned on by programming, whatever you do. Maybe you should get them into repairing cars, or building things, or whatever. Or disown them.

    10. Re:Assembler! by Dun+Malg · · Score: 3, Insightful

      a good programmer should know all the chain, from Java/Python/Scheme/Whatever down to the machine code.

      Yes, but you don't start with assembly language. You start with something conceptually simple, like Python. I started with Basic on the Commodore 64. Before a year was up, I was doing shit in 6502 assembly because interpreted Basic was too slow. Not a chance in hell I could've picked up assembly straight off without some understanding of a higher level language. Throwing assembly at someone is like throwing a pile of parts and fasteners at someone and telling them to build a combine harvester.

      --
      If a job's not worth doing, it's not worth doing right.
    11. Re:Assembler! by Dun+Malg · · Score: 1

      maybe Python (though I personally detest it) or C# (which is a very nice language with very nice tools)

      I'd have to second this one. I too find Python contemptible, mostly for its overly Basic-like syntax, but it is fairly easy to pick up. I think C# is good for two reasons: 1) free tools from microsoft, 2) teaches sensible C based syntax.

      --
      If a job's not worth doing, it's not worth doing right.
    12. Re:Assembler! by Anonymous Coward · · Score: 0

      Assembler is too hard to parse for a new programmer.

      To focus on learning fundamentals they need a language with a straight forward, simple syntax. I suggest Perl.

    13. Re:Assembler! by FishWithAHammer · · Score: 1

      You are a bad man.

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    14. Re:Assembler! by Anonymous Coward · · Score: 0

      It's not that GUIs are that hard in assembler.

      ms windows
      x-window

    15. Re:Assembler! by Anonymous Coward · · Score: 0

      I have been a professional software engineer (i.e. I get paid to do it) for 16 years now. I have run development teams ranging from 2 people to 12 people. Over the years, I have managed dozens of people.

      By far, the best software people are those who have total mastery of assembly language, even if they aren't currently writing in assembly language. When you know what the machine is really doing, then you see through C, you see through Java, you see through Lisp, you understand that languages are all different ways of expressing assembly language. You write better C, you write better everything, when you have mastered assembly. And by "mastering" I mean more than "you can write memcpy in x86".

      I would hire an EE who know how to write code over a CS grad who knows assembly. Any day, and any project.

    16. Re:Assembler! by FishWithAHammer · · Score: 1

      The fact that you call yourself a "software engineer" makes me very dubious of anything you claim.

      And, frankly, I doubt that anyone with a "mastery of assembly language" can see through Lisp. If you're going to make that claim, I'll gladly provide a code snippet and ask for the assembly translation of it. :-)

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    17. Re:Assembler! by FishWithAHammer · · Score: 1

      This is a joke, right? If not, you're even dumber than the average mental-midget Anonymous Coward.

      Here's a hint: even the process of memory management is a bad idea for introductory programming. Do you really think that externing into other libraries is going to do anything except confuse the shit out of somebody?

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    18. Re:Assembler! by Travelsonic · · Score: 1

      Yeah, GUIs are flashy and cool, but of course you'll need to get into the fundamentals of programming too., which is far more than just "printing a few lines to the screen."

      --
      If you believe in privacy, and believe you have "nothing to hide" at the same time, you're a goddammed idiot
    19. Re:Assembler! by Anonymous Coward · · Score: 0

      The problem with assembler, little Anonymous Coward, is that it doesn't let you do anything without a significant amount of work, and what you can do is unlikely to impress a fifteen-year-old kid just getting into programming.

      When I was 16 I learned programming by modifying video game ROMs by hand in a hex editor. First by editing basic data structures, then moving on to pointers and rearranging the data, and then by disassembling individual routines I learned Z80 assembly. This was two years ago. Now I know C (no sweat after ASM), C++, and a fair amount of Python and Perl. What better way to impress a fifteen-year-old than by changing their favorite games?

    20. Re:Assembler! by FishWithAHammer · · Score: 1

      Obviously - but the idea is to get the hook in, inducing them to want to learn that stuff.

      Making it instantly accessible and what they're doing reflected in the application is the key. I've taught a lot of kids, as well as a couple college intro courses, and this method has served me well.

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    21. Re:Assembler! by FishWithAHammer · · Score: 1

      Well, I dunno. I started by writing games in QBasic when I was seven or eight. But I had had my own PC since the age of four or so, and it was a time when the DOS prompt was business-as-usual (meaning that I was still impressable by it, unlike today's kids).

      You're not going to hex-editing ROMs of anybody's "favorite games" these days, because most of them aren't SNES/Genesis fans. Try doing that on a Wii or XBox 360 and get back to me. I know a bunch of the ROM-editing community. What they do isn't remotely novel, nor is it very good at actually teaching programming rather than editing others' work.

      Learning a highly structured language first ingrains good habits, to boot. You might say you know C and C++, but I'd bet dollars to donuts you don't have a good command of higher-level concepts which are generally better picked up in either functional or object-oriented languages (and C++ is not an object-oriented language in the sense of Java or C#--I don't think Python really qualifies, either, as I don't think you can reflect). I've taught a number of kids, and a couple college intro classes. Starting at a high level helps both drive interest (because they're seeing things get done) as well as provide a foundation on which you can build the particulars and little bits that are filled in by languages closer to the metal.

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    22. Re:Assembler! by Anonymous Coward · · Score: 0

      Being able to print a few lines to the screen won't impress that kid and make him want to keep programming.

      Really? When I was a kid the very concept of making a computer do what I told it to was amazing. Didn't matter that the program was

      10 N = 1
      20 PRINT N
      30 N = N + 1
      40 GOTO 20

      It was still cool.

    23. Re:Assembler! by FishWithAHammer · · Score: 1

      Seeing as how that was basically what I started with, I agree with you. In my experience actually teaching kids now, though, they go "it's a bunch of lines on the screen, this is retarded." Just being able to create a window, a few buttons, and manipulate some visual stuff seems to help a lot.

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    24. Re:Assembler! by Anonymous Coward · · Score: 0

      Once you understand assembler, registers, stacks, memory access, etc you can understand how languages actually work.

      It's like being a race car driver without ever having worked on a car or studied how the engine works.

    25. Re:Assembler! by Jamie+Lokier · · Score: 2, Insightful

      Re performance, you're describing algorithms.

      I've programmed for 27 years, in a great many languages, starting with BASIC and several assembly languages at the beginning.

      Honestly, I didn't learn properly about algorithms and algorithmic complexity until I had the chance to learn higher level languages, which weren't available on home computers when I started.

      I *did* learn a lot about raw efficiency, from counting cycles and memory accesses and instructions; things like that. I learned how to write really fast graphics routines, and clever ways to squeeze the most out of a limited machine.

      But learning that O(n log n) is the fastest you can do a sort and that it's worth it? How to do malloc efficiently and when to use a specialised allocator? When to use a balanced tree structure? When to use hash tables, or compare digests? When to cache things?

      That sort of thing started for me with higher level languages, starting with Orwell (a precursor to Haskell), Lisp and C. And with university.

      You don't learn about algorithms just by writing assembly language. Conversely, you do learn about algorithms by reading good tutorials which use clear languages like pseudo-code or Python to explain them.

      So I do advocate some knowledge of assembly language for a feel for what's going on underneath. It's very useful, especially in teaching about memory.
      (I'd advocate hardware compilation, but it's not quite accessible enough yet ;-)

      But it's important to understand algorithms and to know about many classic ones, and how to put them together to make new ones. That's far easier with higher level languages.

      Good algorithms written in Perl beat bad algorithms written in assembly language, or even compiled directly into hardware.

      A practical and theoretical knowledge of algorithms and raw performance, now that is a great combination if you can teach it :-)

      But then beware of becoming someone who can't resist writing fast code when the speed of writing the code itself, and it's clarity to other people afterwards, is more important than it's performance... Knowing when to write for other criteria, such as clarity, and how to do that well, is a very important skill indeed.

    26. Re:Assembler! by Jamie+Lokier · · Score: 1

      Replaces "6 months ago" with "6 years ago (and got bored long before finishing)".

      It takes a long time to optimize every feature and function in any interestingly sized program large enough to have competitors, and especially if you're not doing it full time.

    27. Re:Assembler! by Jamie+Lokier · · Score: 1

      I assure you, people who have written Lisp compilers are both masters of assembly language and can see through Lisp.

    28. Re:Assembler! by FishWithAHammer · · Score: 1

      I wouldn't call them "masters" of anything in particular. I would call them gods. :)

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    29. Re:Assembler! by FishWithAHammer · · Score: 1

      And you aren't going to actually keep a kid's attention doing that. Try to keep up.

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    30. Re:Assembler! by Blakey+Rat · · Score: 1

      Well, yah, I was being generous. The part I don't get is that people who post on Slashdot are part of the IT industry, right? How is it people posting here aren't aware of things like that? Are there programmers *so* insulated from the actual process of developing products?

    31. Re:Assembler! by Rockoon · · Score: 1

      But learning that O(n log n) is the fastest you can do a sort and that it's worth it?

      Common misconception from people who havent *really* studied sorting (and searching) is that O(n log n) is the fastest (worst case) way to do it. It is just the fastest way to do a comparison sort.

      Let me introduce you to me good friends, the Bucket Sort family of algorithms, with the most popular being the Radix Sort. Throw enough memory at a bucket sort and you can approach O(n) behavior.

      In the early days of 3D graphics, when programmers were first toying with alpha blending, they had to sort every alpha blended polygon from back to front. Everyone was using radix sort because those O(n log n) algorithms were way too slow.

      --
      "His name was James Damore."
    32. Re:Assembler! by Sam+Douglas · · Score: 1

      Must people resort to attacking programming languages based on their syntax? (unless it is BASIC or COBOL, they are always fair game) As you say, Python is very easy to learn, whether you are an experienced programmer or beginner. I fail to see how its syntax is Basic-like. Seriously. Back that one up with evidence next time you use it. Python's syntax is 'unique' ... using indentation to indicate blocks can be problematic in some cases, but it is manageable. I worked on a medium sized program in Python (the first time I had used the language), it was surprisingly pleasant.

    33. Re:Assembler! by Jamie+Lokier · · Score: 1

      So true.

      Radix sort is great for a subset of sorting problems. Sometimes it's better, sometimes it's worse, and sometimes it's not applicable.

      If you've *really* studied sorting and searching, you'll know that even O(n) can be beaten sometimes.

      How nice that you mention sorting polygons :-) I developed a commercial game in the 90s using a technique similar to what you've described.

      Radix sort would have been too slow.

      What we used was an ascending-run bottom-up merge sort with persistent ordering between frames. That algorithm was O(n log n) worst case, but ran faster than radix sort for 3D graphics - because the *average* run time was sublinear - less than O(n).

      That took advantage of inter-frame persistance as well as natural clustering of the source data, while still being quite fast in the worst case. But in the same vein, radix sort takes advantage of fixed-size integers and arrays.

      Another common misconception is that the O() well-known results are exact when real problems use finite types like 32-bit integers. They're a very useful tool, but more precise O() descriptions take into account more details like the number of bits in an integer, the non-linear relationship between memory access time and locality (think idealised cache hierarchy), and even whether the machine can do pointer arithmetic in constant time - array machine vs. pointer machine, which by the way is relevant to real embedded devices.

      Then it becomes clear that O(n log n) and similar results are useful approximations which usually apply quite well, but not always, and never precisely to real machines.

      Still, it is really important to know about algorithms, and O() notation and space/time complexity are very good things to learn about if you're serious about writing good code.

      This discussion just goes to show that there's always more to learn after that :-) But it's quite advanced stuff, and shouldn't put anyone off learning about classical algorithms, which are extremely useful in "ordinary" programming work.

    34. Re:Assembler! by Jamie+Lokier · · Score: 1

      IT industry is much larger than software engineering.

      For example, most sysadmins don't do much in-depth software development, if any. Some write a lot of scripts, but some never do that either - it's plenty of work just, well, sysadmining.

      There are a lot of professional programmers on here, but it's clear there are a lot of people who aren't - students, people interested in technology who aren't professionals, non-programmer roles like sysadmins (obviously some sysadmins do program), web designers (ditto), managers even :-)

      And that's just the IT crowd. There's plenty of chemists, geophysists, biologists, novelists, historians, children, etc...

  8. no right answer. by nathan.fulton · · Score: 1

    I think that -- like any other question in pedagogy -- there is no right answer that applies to everyone. But I still find the reasoning in this article absurd.

    You have to look at the source code to figure out what a Scheme program is doing? Isn't this true in.... every language? Even if the "source code" consists of little blocks you're dragging and dropping together?

    1. Re:no right answer. by Anonymous Coward · · Score: 0

      Thank you. I would like to elaborate.
      I am 15, and learning to use C++. I learned the basics in about two days as I already know how to script/program in various other languages. Once you learn one language, picking up others is incredibly easy as anyone will tell you. Sure I still suck with c++ and have to look everything up, but it didn't take very long to learn as I already understood the basic structure.

      It doesn't matter what you teach them, as long as it's a real language with real uses. Don't teach them some LOGO crap. Visual basic is okay... but there's no reason they can't learn javascript, perl, lua, or any of those that have real uses. People use javacsript, people use perl, LOGO? Not much unless you're still learning. Much better off learning a scripting or programming language that is used in real software that they use, no reason not to.

  9. how about c++ by buddyglass · · Score: 1

    In my opinion you should start ingraining the OO paradigm as soon as possible. I would say Java for its relative simplicity, but Java hides a lot of the nitty gritty details that you get exposed to when dealing with a language like C or C++. So then C++ might be a happy medium. You get exposed to all the object-oriented concepts, but are also forced to learn about memory management, linking, etc. Plus, as a little bonus, its widely used in industry. I think this can be appealing to new programmers in a way that learning a "educational" language isn't. I want to learn something people are actually using. Note that I'm not suggesting C++ is the easiest language to learn or master for new programmer. However, actually doing so might be more rewarding, from a "concepts learned" perspective, compared to the alternatives.

    1. Re:how about c++ by ironicsky · · Score: 1

      I agree...
      My first language was Q-BASIC, then javascript, PERL, then *shudder*Java*shudder* and finally PHP

      Having a grasp of OO concepts makes it easier to learn other OO languages. Depending on what your trying to program your options are different(Desktop app, vs web app)
      My recommendation as a first language would be PHP. The nice thing about scripted languages is no compile time! So you can write your code and test it instantly. PHP also provides nice error handling to help you debug.

    2. Re:how about c++ by Anonymous Coward · · Score: 0

      I couldn't find the article, but remember how a couple years ago a CS professor at U of Maryland was saying Java is ruining programmers :-)

      I think the worst thing you can do is start out with OO. I see it all the time, programmers who only know OO and write very bloated programs because they can't streamline their code. I don't want to turn this into procedural vs OO programing, but a good programmer can do both and knows when to use the appropriate methodology.

      As far as the best language to start with, Perl or Python to get the basics down and then good old fashion C.

    3. Re:how about c++ by moon3 · · Score: 1

      C/C++ is for the pros, for hobbyist it is probably better to stick with Visual Basic, C#, Java, Ruby, Perl, Python, PHP, Automator etc.

    4. Re:how about c++ by Omnifarious · · Score: 1

      C++ these days is two languages. Template metaprogramming is a language all on its own that is more closely related to the various functional languages out there. The code that actually compiles to something is a procedural language with OO extensions that's a fairly grungy workhorse of a language.

      I think C++ is way too complex for a first language, and the fact that it is really two languages (three if you count the preprocessor) in one is a big part of why.

      I think having all the details hidden from you when you're starting out is just fine. I think all good programmers should know assembly and have a good idea of how their high level program actually translates into the computer doing what they asked. But getting there is a process, and learning that you can make the computer do things is the first step and should be happen with the friendliest language that has the expressive power to do interesting things.

    5. Re:how about c++ by MathiasRav · · Score: 1

      My recommendation as a first language would be PHP. The nice thing about scripted languages is no compile time! So you can write your code and test it instantly. PHP also provides nice error handling to help you debug.

      I used to like PHP, but today I would recommend Python or Perl over PHP any time.

      I wouldn't say PHP provides nice error handling; in my experience a proper try/catch implementation/whatever is way more beneficial when you're striving for an even somewhat modularised design than the try/catch hack PHP implements - at the moment, there is a base Exception class which is extensible by the programmer, however, this (at least as of PHP5) isn't used or extended by any of the built-in functions/modules - instead, they take the (PHP native) functional error handling paradigm by "triggering" errors (and returning an error-indicating value) which can be caught at top application level. PHP6 might make up for this with the PHP STL, though I'm sorry to say I wouldn't set my hopes too high for that.

      As for myself, I started out with some basic HTML/CSS/JS, then Visual Basic 6 and Borland Delphi, went on to learn classic ASP, quickly switched to PHP, where I stayed for a couple years, then I learned more advanced JavaScript and picked up C++ and Perl and am now learning Java and Python.

    6. Re:how about c++ by Blakey+Rat · · Score: 1

      If you want to ingrain the OO paradigm, do it in a language that isn't painfully difficult and unforgiving. Like C# or even VB.net. But hell, most languages now support OO programming anyway... it'd almost be harder to pick one that didn't. (Javascript is the only one I can think of off the top of my head.)

    7. Re:how about c++ by Anonymous Coward · · Score: 0

      C/C++ is for the pros

      As a freshman in high school, I learned BASIC. Sophomore year, C. Junior year, Pascal. Senior year, C++ with MFC. I was wasn't a pro, just a geek.

    8. Re:how about c++ by Anonymous Coward · · Score: 0

      And in university, you've become The Chosen One.

    9. Re:how about c++ by hattig · · Score: 1

      MODULA3 is clearly the best option.

      It is pick up and go, yet it has object oriented abilities.

      Also there's a lovely Emacs highlighter package for it.

      Shame it's totally irrelevant. But it was a language I really enjoyed in my first year of university (a very long time ago). Maybe it's time for Jodula 3, a Modula 3 system that compiles to the JVM.

    10. Re:how about c++ by Dun+Malg · · Score: 1

      In my opinion you should start ingraining the OO paradigm as soon as possible

      Hogwash. I say give them microcontrollers and teach them embedded programming in C first. Hiding the nuts and bolts of the underlying system behind multiple levels of object inheritance teaches a disregard for the limitations of the hardware. OO programming is better taught as an organizational tool for managing things beyond a certain level of complexity. OO programming excels at tasks that would become too byzantine if attempted in a straight procedural language, but is in my opinion an abomination when teaching "hello world". Throwing new students straight into OO land doesn't give them an appreciation for how the computer actually works.

      --
      If a job's not worth doing, it's not worth doing right.
    11. Re:how about c++ by buddyglass · · Score: 1

      Hence why I recommended C++ instead of Java. I'd suggest some further study on how C++ actually implements its OO constructs. You could certainly start someone off with C to get a (somewhat) more detailed perspective on what's going on behind the scenes, but then you (mostly) lose out on the ability to teach OO concepts. For that matter, C itself is also an abstraction. You could just go with assembly. But then, assembly is also an abstraction. Maybe they should hand-assemble op codes? But what does an operation really "do"? Perhaps they should begin with logic gates and circuits.

      Or we can be reasonable. :)

    12. Re:how about c++ by Dun+Malg · · Score: 1

      I think C++ is way too complex for a first language, and the fact that it is really two languages (three if you count the preprocessor) in one is a big part of why.

      I assert that the object-oriented portion of C++ isn't so much a second language as it is a tool for hiding complexity. The problem with learning languages like Java first is that they force you into OO behavior for everything. OO techniques are best implemented as a simplifying measure that allows you to build complex tools out of simple parts, and there are no simpler platform-agnostic parts than you get with C.

      --
      If a job's not worth doing, it's not worth doing right.
    13. Re:how about c++ by WinterSolstice · · Score: 1

      I disagree strongly with this.

      Teaching people microcontrollers and embedded C first is like teaching people how spark plugs work before letting them drive.

      My issue is that the first thing a person should learn is *what* you can do. Class 2 should be *how* it does it.

      I learned assembler too early - it taught me to truly despise programming, which I didn't get over until being introduced to C.

      Assembler is a nice tool, but it's far too low-level for introductions.

      --
      An operating system should be like a light switch... simple, effective, easy to use, and designed for everyone.
    14. Re:how about c++ by Omnifarious · · Score: 1

      I assert that the object-oriented portion of C++ isn't so much a second language as it is a tool for hiding complexity.

      I'm not calling C++'s object oriented features a second language. I'm calling its template metaprogramming system a second language.

    15. Re:how about c++ by kbrasee · · Score: 1

      PHP is pseudo-OO. It's a little bit of everything, all thrown into one messy pot. It's OK for quick and dirty apps, but I'd take Java over PHP any day.

    16. Re:how about c++ by kbrasee · · Score: 1

      C/C++ is for the pros, for hobbyist it is probably better to stick with Visual Basic, C#, Java, Ruby, Perl, Python, PHP, Automator etc.

      LOL, I guess everyone who programs web apps and services for a living is a hobbyist.

  10. Scheme is the best teaching language by Gorobei · · Score: 5, Insightful

    for the professors, that it. By removing all the syntax, etc, you can be introducing functions, lexical scope, binding, etc in the first week. Data structures and recursion in the second.

    Result: most students quit by week two, and you are left with a fairly teachable remainder.

    1. Re:Scheme is the best teaching language by FishWithAHammer · · Score: 4, Informative

      This is very, very true. We lost a ton of kids in my 100-level programming class because they couldn't "get" Scheme.

      That was a fun class. Got to learn a new language and do almost no work that semester...

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    2. Re:Scheme is the best teaching language by Anonymous Coward · · Score: 0

      Funny always thought that professor were there to open mind and teach things to youg mind. It's seems they are teaching just for money and secure job... You should be ashame. You completely failed in your mission as a teacher and a mentor.

    3. Re:Scheme is the best teaching language by FishWithAHammer · · Score: 1

      Psst. I was a student, you fucking imbecile.

      When I taught it three years later, we still used Scheme, but the body count was a lot lower because the New Media students had had the computer science course removed from the requirements and replaced with the proper programming-for-nonmajors course, as they should have been from the start.

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    4. Re:Scheme is the best teaching language by jadavis · · Score: 1

      This is kind of an "unstoppable force meets unmovable object" problem. No matter how good of a teacher you are, a certain percentage of your students are going to be completely uninterested in the material, and there for some other reason (degree, parents want them to do something, thought it was a different topic and too lazy to change, etc).

      Some teachers engage more students than others, of course, and I have no doubt that it's due in part to the effort of the teacher. But, at some point, there's a tradeoff between losing too many students from the class, and spending too much time pandering to those on-the-fence students to teach the real students.

      --
      Social scientists are inspired by theories; scientists are humbled by facts.
    5. Re:Scheme is the best teaching language by Tablizer · · Score: 1

      But the problem is those who get "addicted" to higher abstraction and powerful concepts cannot handle the tedium of "typical" existing code out there in the field. You might get a Roomba in school, but in the field you're likely to be pushing a broom. (I know, there are exceptions.)

    6. Re:Scheme is the best teaching language by FishWithAHammer · · Score: 1

      I don't think that's really a problem. I think the problem is never having to deal with other people's code, and therefore being unable to understand it.

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    7. Re:Scheme is the best teaching language by howlingmadhowie · · Score: 1

      oh god, don't i know it. writing boiler plate code is horrible :(

    8. Re:Scheme is the best teaching language by josephcmiller2 · · Score: 1

      What's wrong with Scheme? It's intuitive, self-explanatory, has plenty of online documentation, many well-coded examples, great strings processing - oh, wait, WTF am I thinking of? Yeah, Scheme might be great for programming gurus to sit around and contemplate. And it's needed for working with some GIMP scripts. But you want to run off a promising, learning, computer sci student, teach them Scheme. I still say BASIC is a great starting point. You can teach programming concepts in 1-2 classes, then move on to languages.

    9. Re:Scheme is the best teaching language by ncmathsadist · · Score: 1

      Nice. Let's destroy everyone's interest in programming before we start.

  11. It's a balance by ComputerDruid · · Score: 1

    This is very similar to some of the strongly typed versus weakly typed language debates that seem to happen all the time. Should ease of use and fun programming come before or after learning about what's going on?

    As a fan of both python and C/C++, I believe there needs to be a balance. When teaching a language to students new to CS, you have to gloss over some of the details in order to give them a basic understanding and excitement about what is going on.

    My guess is that languages like scheme may inhibit this initial step, so that it is hard for students to catch on.

    1. Re:It's a balance by Wolfbone · · Score: 1

      Your guess seems exactly the wrong way round to me! Scheme *removes* all the barriers that most other languages place in the way of learning and doing. Take a look at some of the testimonials here if you don't believe me: http://home.adelphi.edu/sbloch/class/hs/testimonials/

      I think TFA goes even further in getting things backwards - especially where it implies that Scheme is somehow /necessarily/ all about approaching programming with academic rigour (it isn't) and that it fails to facilitate a more pedagogically suitable exploratory approach (exactly the opposite is true).

  12. Assembler by arthurpaliden · · Score: 2, Interesting

    It teaches you how a computer really works. That way you can become a 'real' programmer instead of an IDE user.

    1. Re:Assembler by sakdoctor · · Score: 5, Funny

      In before old people telling you about punch cards.

      Come to think of it, is there a way to do calculations with kids on/off your lawn?

    2. Re:Assembler by johnsonav · · Score: 4, Insightful

      It teaches you how a computer really works. That way you can become a 'real' programmer instead of an IDE user.

      Really? Seriously?

      I don't think assembler is the best way to instill the magic and excitement of getting the most complex machine in your house to do what you want it to. And, that's what a fifteen year old newb needs. If you start with assembler, you're assuring that it will be months before he has learned enough to be able to take a program that he's written to a friend or parent, and have that person say, "Cool!". And, it will be even longer before he can use even a fraction of the modern technology that computers now have; things like GUI's, and networking. More often than not, it will only cause frustration.

      Back in the day, assembler might have been the right option. But today, I think that's a recipe for killing that spark of creativity and excitement that draws people into programming, and gets them to slog through the nitty-gritty stuff.

      --
      ... and that's when the C.H.U.D.'s came at me.
    3. Re:Assembler by Domini · · Score: 2, Insightful

      Assembly teaches you 'how to bake a cake'. So does BASIC and Pascal and C.

      The problem for me was moving from such basic programming to high-level modeling using (in my view) a much better system of OO design.

      Start them with Objects... I had a hard time getting into OO programming because I started with a very low level language.

    4. Re:Assembler by BadAnalogyGuy · · Score: 3, Insightful

      Since we're talking about learning languages here, I think we need to remember to balance "excitement of programming" with actual learning.

      Assembler is a terrible first language because it doesn't really teach programming so much as learning how a particular CPU works. You could theoretically get away with something like MIX because it's just a simple emulation of assembly, but real assembly language programming is something that really shouldn't be attempted until normal programming is learned.

      On the other hand, using a language that allows a student to create a "cool" application very quickly can't possibly teach them very much about programming and computer science. When there is too much "magic" and "gee-whiz" language support, exacerbated by a heavy-handed IDE, the student learns only how to press the right buttons to make their project work. They don't learn what is going on in enough detail to take those concepts to other more useful languages.

      So a balance definitely needs to be struck. Python, as many have said, is a good language, though I would actually prefer one with static typing. BASIC is another good choice, though it's been much maligned by many. Personally, I think C is a great learning language, though it too has shortcomings.

      Like anything, though, you can't satisfy everyone. But you might as well try to satisfy someone.

    5. Re:Assembler by Anonymous Coward · · Score: 0

      Assembler is a tool, not a language. The language is called Assembly Language. I suppose you call C "compiler." At work when someone is running off at the mouth and spouts "assembler," I ignore them for being an idiot.

    6. Re:Assembler by Anonymous Coward · · Score: 0

      Desktop PCs aren't commonly programmed in assembly language anymore, but microcontrollers are. The "cool" effect comes pretty much instantly when you realize that a tiny chip is completely under your control and does things that you thought could only be done with expensive hardware designed by big companies. Nowadays assembly programming is very comfortable with step-by-step emulation, cross-compiling and in-circuit programming and debugging.

      Many programmers lack that fundamental last step down to the hardware and that omission keeps an undeserved aura of uncertainty and "magic" about computers.

    7. Re:Assembler by arthurpaliden · · Score: 2, Insightful

      Punch cards are an input device not a programming language.

    8. Re:Assembler by funkatron · · Score: 1

      how a computer really works

      Move, move, move move, do something, move, move, move, copy, do something etc.

      It might be important to learn this but it's hardly a good way to start if you want to get anything done.

      --
      "Welcome to our world. We are the wasted youth. And we are the future too." Yes, I know these are stupid lyrics.
    9. Re:Assembler by Anonymous Coward · · Score: 2, Informative

      I always found such statements idiotic. It's the same for the people who found pointers and references hard to grasp. If that is the case, maybe you're in the wrong field. I started by hand-coding machine language (I was too poor back then to afford an assembler). I never found OO difficult in the slightest. Assembly teaches you much more than any other language. It teaches you how things really work. After that, OO SHOULD be cake.

    10. Re:Assembler by Anonymous Coward · · Score: 2, Funny

      Looks like sak was just in time....

    11. Re:Assembler by TheLink · · Score: 1

      Then maybe they should start them with Lisp instead? :)

      --
    12. Re:Assembler by Dogtanian · · Score: 2, Informative

      BASIC is another good choice

      No it's not, it's a godawful choice.

      I don't know if you meant old-school 8-bit-style BASIC or Visual Basic.

      If you meant the former then, WTF? There were technical reasons why it was popular and (to some extent) its use was justified on early microcomputers. These technical issues no longer apply, and it's entirely unsuited to programming on a modern scale.

      And traditional Basic was *notorious* for fostering bad programming habits; I for one certainly suffered from that, and I really wish I'd used more languages sooner. With respect, anyone suggesting it be taught to a newcomer should be shot. :-/

      If it's Visual Basic, then I'm certainly not convinced that for someone coming to it from scratch it's ultimately any easier to learn than (e.g.) C# or other C/C++ derived languages. It retains much of the syntactical clunkiness of old-fashioned basic, and its syntax isn't used much anywhere else, closing off the leveraging effect you get with C-style languages- learn one of those, and you partly know the others. Ironically, this will also make other languages appear more intimidating and locking that person into Visual Basic further.

      VB's raison d'etre in the first place was that when it came out, many people had grown up using traditional BASIC a few years earlier, because *that* had been easy to learn. They'd migrated with BASIC through (I guess) familiarity, and because they "grew" and stayed with Visual Basic as it grew up it remained the sensible choice. But that's an advantage for existing users, not for newcomers, as it's really not that simple any more.

      though it's been much maligned by many.

      For very good reasons, too.

      --
      "Slashdot - News and Chat Sites Deviant". (Click "homepage" link above for details).
    13. Re:Assembler by NotBornYesterday · · Score: 2, Funny

      Hah! You kids and your damn punch cards. When I learned programming, we had to use pointy sticks to press individual zeros and ones into a clay tablet. Assembler? Compilers? Hah again! We learned to bake our code tablets in the sun, because there was always a line to get them kiln-dried.

      This was before lawns were invented.

      --
      I prefer rogues to imbeciles because they sometimes take a rest.
    14. Re:Assembler by rabbit994 · · Score: 2, Informative

      If it's Visual Basic, then I'm certainly not convinced that for someone coming to it from scratch it's ultimately any easier to learn than (e.g.) C# or other C/C++ derived languages. It retains much of the syntactical clunkiness of old-fashioned basic, and its syntax isn't used much anywhere else, closing off the leveraging effect you get with C-style languages- learn one of those, and you partly know the others. Ironically, this will also make other languages appear more intimidating and locking that person into Visual Basic further.

      Agreed, At my college they thought us VB.Net as introduction to OOP programming. We also did C++ and you could do C#. Reason they did .Net is while it wasn't technical school, they did want to teach us a language that was in wide use. However, there is really no other language with similar syntax so when you did some C++, you got to relearn syntax ALL OVER AGAIN.

      If you want to teach someone something marketable for first language and there are plenty of .Net jobs out there, C# is much better choice.

    15. Re:Assembler by Fred_A · · Score: 2, Funny

      Then maybe they should start them with Lisp instead? :)

      Then we'll have lots of programmerth all over the plathe. As if nerdth didn't thuffer from an image problem as it ith.

      --

      May contain traces of nut.
      Made from the freshest electrons.
    16. Re:Assembler by Anonymous Coward · · Score: 1, Funny

      Maybe you're in the wrong field. Can you use a mop wringer?

    17. Re:Assembler by Darkness404 · · Score: 1

      Assembly can be fun with very well documented code. I had a week or two of fun by playing with Mike-OS ( http://mikeos.berlios.de/ ) because it is very, very, very well documented. However, if it weren't for all the helpful comments in the source, I would have been lost. Assembly is not a good first language because it doesn't really -teach- you how to program for anything other than a certain computer. Sure, Ti-86 assembly is kinda fun to write games in to pass the time away in Algebra, but most of those skills become useless when you go to a different language. I would start new programmers off with Python then move up to C and finally Java.

      --
      Taxation is legalized theft, no more, no less.
    18. Re:Assembler by mR.bRiGhTsId3 · · Score: 1

      My first intro to computing spent about 2 weeks what was affectionately referred to as the knob and switch computer, which was a set of simple virtual machines that were controlled by knobs and switches or a simple pseudo-assembly. It gave an interesting introduction to what computers do behind the scenes prior to actually introducing a programming language. I thought it was clever and there was enough visual feedback during execution that it could hold your attention.

    19. Re:Assembler by kaehler · · Score: 1

      When I was in grad school (many years ago) our research group needed to learn programming for our thesis work (we were biologists). We went to the computer science department and asked the chairman of the department what would be the best computer class to really learn programming. He told us to take assembler. We did, and her was right. Once you know that the rest was easy...

       

    20. Re:Assembler by hattig · · Score: 5, Interesting

      I agree that Visual Basic is as bad a choice for a first language as any other complex programming platform.

      What made old skool BASIC good was that it was limited in ability. Admitted data structures were limited to arrays, which was a problem. However a medium-complexity basic like Blitz Basic 2 on the Amiga allowed the creative side to be expressed, without having to wade through complex APIs like you would with a modern language.

      And the best way to learn programming to a young person (under 16) is to allow their ideas to be expressed and implemented, be that writing your first football league tracking application, to a simple game, to a text adventure, and so on. If that means using BASIC, e.g., RealBasic, then so be it. It needs to be pick-up-able.

      I bet there are people saying Haskell and ML on this thread, for some academic reasons. The last thing a young person wants to be doing is learning how to manipulate data structures, functionally, with all the brain-fuckery that involves, and only to get a sorted list at the end. That isn't exciting, it's not even something to be slogged through, it's tedious and will actually put them off, totally.

      10 Print "I am god!" : goto 10
      run

      instant result.

      It's sad that computer magazines don't have programming in them any more, unlike the 80s. Game type-ins promised rewards to typing, and learning was osmotic.

    21. Re:Assembler by denmarkw00t · · Score: 1

      Yeah, I remember when proprietary kiln companies got edgy when we GPL'd the sun.

    22. Re:Assembler by Progman3K · · Score: 1

      I'm with you.
      The very first language I learned was BASIC and it harmed my understanding of how computers worked.
      I then learned Z80 assembler and after, every other language came easy because I understood what they were really trying to accomplish.

      --
      I don't know the meaning of the word 'don't' - J
    23. Re:Assembler by phantomfive · · Score: 1

      At one time my university tried teaching objects first. People in my class were familiar with the words 'abstraction' and 'encapsulation' before they knew what a loop was. The problem is these things aren't really useful until you start doing bigger programs; if all your programs are 20-100 lines long, OO doesn't add anything.

      It turned out it was just too confusing: most of my classmates couldn't assimilate all the information and figure out how to get the computer to do what they wanted.

      Also, my observation on teaching people OO once again is that it is just a confusing topic, no matter what order you teach things in. So I would say (based on experience watching people learn things) you didn't have a hard time getting into OO programming because you started with a low level language, but because it is a genuinely tricky concept that takes a lot of people time to wrap their minds around. Just like recursion: many people have difficulty with it, no matter when it is taught.

      --
      Qxe4
    24. Re:Assembler by commodore64_love · · Score: 1

      >>>We learned to bake our code tablets in the sun..... This was before lawns were invented.

      Nonsense. They had lawns in Ancient Egypt, thanks to the flooding Nile dumping its fertile soil in the frontyard.

      --
      "I disapprove of what you say, but I will defend to the death your right to say it." - historian Evelyn Beatrice Hall
    25. Re:Assembler by Dogtanian · · Score: 1

      However a medium-complexity basic like Blitz Basic 2 on the Amiga allowed the creative side to be expressed,

      I never really used Blitz Basic myself. However, I've heard that over the long term it's more highly regarded and powerful than AMOS, the once-popular BASIC-based programming system for the Amiga that IMHO was massively overated. So maybe it's good, but...

      without having to wade through complex APIs like you would with a modern language.

      As I said, never used BB, but that was a problem with old-school BASIC in general. There wasn't a clear separation between an API and the fundamental syntax, e.g. PRINT was a keyword, and functions were "hardwired", so that you couldn't expand it in a transparent and consistent way.

      If it was possible to devise a hardwired syntax/system for BB that was easy to use, is there any reason it wouldn't have been possible to map it onto an equally straightforward API?

      And the best way to learn programming to a young person (under 16) is to allow their ideas to be expressed and implemented [..] If that means using BASIC, e.g., RealBasic, then so be it. It needs to be pick-up-able.

      I'm sure that there are plenty of more modern scripting languages that would meet that criteria.

      I bet there are people saying Haskell and ML on this thread, for some academic reasons. The last thing a young person wants to be doing is learning how to manipulate data structures

      Oh yeah, I agree. You have to balance the academic stuff with the motivation that feedback and the ability to create stuff gives. Suggesting Haskell or ML as first languages *is* academic self-indulgence.

      Game type-ins promised rewards to typing, and learning was osmotic.

      Not really; it was quite feasible to type in something without understanding it, and I never found it stimulating or educational in itself. Particularly not if it was a machine code program with a Basic loader; i.e. mostly stuff like

      410 DATA 235, 25, 235, 66, 67, 0, 128, blah blah blah

      --
      "Slashdot - News and Chat Sites Deviant". (Click "homepage" link above for details).
    26. Re:Assembler by Anonymous Coward · · Score: 0

      And traditional Basic was *notorious* for fostering bad programming habits; I for one certainly suffered from that, and I really wish I'd used more languages sooner. With respect, anyone suggesting it be taught to a newcomer should be shot. :-/

      AC #2928847 here...

      Wholeheartedly agree!

      When I learned various dialects of Basic on the TRS-80, Vic, Atari 800, and Apple II it always felt.. just nasty. I'm picky about organization, and finally one day for my Atari I picked up a language called "Action!". It was AWESOME. I slid right into advanced placement computer science in eleventh grade with a head start, since the syntax introduced me to many concepts that I'd see again in Pascal. Procedures, parameter passing, etc.

      I'd always fantasized about a 65816 version of Action for the IIgs and Nintendo.

      According to Wikipedia, both languages are based on ALGOL (this doesn't mean much to me as I've never seen ALGOL code).

    27. Re:Assembler by siloko · · Score: 1

      anyone suggesting it [BASIC] be taught to a newcomer should be shot.

      I'm guessing you were thinking this was a distro war and not a languages war . . . in languages wars we only allow severe physical injury not resulting in death, because after all our opinion's will definitely change the world but only if we line up the infidels first!

    28. Re:Assembler by NotBornYesterday · · Score: 1

      Yeah, in Egypt maybe. I was based in Mesopotamia at the time, and the Tigris and Euphrates didn't flood nearly as much as the Nile.

      Glad I got outta there before the neighborhood went to hell.

      --
      I prefer rogues to imbeciles because they sometimes take a rest.
    29. Re:Assembler by jnork · · Score: 1

      When I was your age we had to carve our own ICs out of wood!

      --
      Cleverly disguised as a responsible adult.
    30. Re:Assembler by jnork · · Score: 1

      Actually, I rather like working in assembly. Currently most of my work is on PIC micros and Cypress PSoC micros and I work in a mix of C and assembly. I could do more C if I wanted...

      People think I'm crazy, but ... um, actually, I AM crazy, come to think of it.

      P.S. I did the Times Square Ball firmware in assembly on a Cypress CY8C29466. :)

      --
      Cleverly disguised as a responsible adult.
    31. Re:Assembler by Anonymous Coward · · Score: 0

      You oldtimers are ruining the business. Only metallic gears and shafts will solve the challences posed by executing modern business with customer centric and solution oriented manner, providing the best possible ROI at the end of the day for that quality time with your family and securing your longterm investments with the industrial class risk management solutions offered by our global networked solutions providers. Get with the wrenching programme already and call now!

    32. Re:Assembler by Zeroko · · Score: 1

      I learned to program in QBASIC a long time ago. I learned many other dialects of BASIC along the way (due to acquiring various old computers), including Visual Basic.

      But now I use Haskell for nearly everything & avoid imperative programming whenever possible. I suppose I occasionally use gotos & often use global variables when programming in C, but I only use C if I need to optimize something to death, anyway.

      So I guess if I had to recommend languages, I would suggest C for speed-critical code & Haskell for everything else. Mostly, I would suggest having a good development environment set up, including having language & library help readily available.

    33. Re:Assembler by NotBornYesterday · · Score: 1

      Pfft. That's not what you were saying back when we old-timers solved the Y-zero-K problem for you.

      In hindsight, I can't believe none of us saw that one coming. Well, actually, three of us did, but none of the rest of us listened to them.

      --
      I prefer rogues to imbeciles because they sometimes take a rest.
    34. Re:Assembler by Anonymous Coward · · Score: 0

      This was before lawns were invented.

      That's what you think, sonny boy. I remember it well, all those whippersnappers breaking branches off my trees to make their damn sticks, then ruining my lawn with their dirty clay tablets.

      You may have noticed the extra holes appearing in those clay tables if you left them overnight.

    35. Re:Assembler by dlsmith · · Score: 1

      I don't think assembler is the best way to instill the magic and excitement of getting the most complex machine in your house to do what you want it to.

      Right. That's the problem with a lot of examples being suggested, including (probably) Scheme. The libraries and tools available to the kid are a lot more important than the language. If he can't write something that he finds useful, then he's probably not going to get very excited about it. Here's where I got my start in "programming":

      • BASIC games (back when you copied them out of a book)
      • Turtle drawing
      • Spreadsheets
      • Visual Basic macros
      • HP calculator custom formulas

      None used particularly elegant languages, but all gave me a chance to do something I thought was cool—usually by automating a task in software I already used.

    36. Re:Assembler by ILongForDarkness · · Score: 1

      I have to agree with you there. I think people should learn how the computer goes about doing calculations before they abstract away all the details for libraries and builtin features. As a programmer turned IT guy I've had numerous situations where the fact that I know assembler/a far bit of digital electronics has helped me know at a very deep level what was going on/wrong within a system. Most people I run into that started with Java or the like in university still have the mentality of it doesn't matter. They do a whole lot of stuff and then have no idea why something is slow because they have no concept of what the VM is doing under the hood.

    37. Re:Assembler by orzetto · · Score: 1

      I bet there are people saying Haskell [...] it's tedious and will actually put them off, totally.

      > repeat "I am God!"

      In Haskell you can do it faster and on a single line, and the code actually looks like English. However, there is a lot of bad[ly written] books about Haskell, I'll grant you that. Especially when they try to explain monads. However, functions like map, fold and filter are easy to grasp and lots of fun to put into practice.

      --
      Victims of 9/11: <3000. Traffic in the US: >30,000/y
    38. Re:Assembler by The_Wilschon · · Score: 1

      Why not start by building digital logic circuits out of transistors? Wait, first we'd better teach them about semiconductors and make them build their own transistors. Ooh, I have an idea, let's get them to assemble the silicon atoms by fusing hydrogen! That's how a computer really works after all, right?

      Programming is about understanding, creating, modifying, and using abstractions. If you can't think about a tcp connection (or an industrial robot, or a business transaction) as an item in its own right, as opposed to a bunch of register states, you're not really going to get very far.

      Cf. learning about atoms, molecules, cells before you learn about dogs. In order to get anywhere working in a pet store, you'll have to learn to ignore the vast differences in number, type, and arrangement of cells and think about each dog as being that extremely high level abstraction: a dog.

      --
      SIGSEGV caught, terminating

      wait... not that kind of sig.
    39. Re:Assembler by martas · · Score: 1

      Hah! You kids and your damn sticks and clay. When I learned programming, we didn't even have opposable thumbs to hold anything with. In fact, we weren't even vertebrates. We had to input data and code in our DNA, and wait for millions of years of evolution to get the answer. In fact, the only reason you have eyes today is because I once forgot to free memory after allocating it.

    40. Re:Assembler by Paracelcus · · Score: 1

      I'm so old that we used fingers and toes for computation and we saved the resulting output by sticking boogers to the cave wall!

      --
      I killed da wabbit -Elmer Fudd
    41. Re:Assembler by Vintermann · · Score: 1

      Are you sure Haskell would be so much "brain-fuckery" for someone who wasn't used to imperative programming already?

      Actually, we can answer that. Many people HAVE learned Haskell as their first language by now.

      I came across the blog of a computer scientist (pretty accomplished too) who had. Yeah, that made me feel old, too. I can't seem to find that blog again, but there's sure to be some people on slashdot who are in the same situation.

      (My first languages were C64 basic, then AMOS basic at the Amiga, then the strange C dialect used for scripting quake, then Java. I don't think Basic hurt me all that much, but QuakeC really confused me for some months about OO)

      --
      xkcd is not in the sudoers file. This incident will be reported.
    42. Re:Assembler by Vintermann · · Score: 1

      The problem with higher level languages is that our abstractions leak. They leak bad. Many things that make perfect sense when we look at a computer language as a matemathical construct just don't work very well on real machines. We're trying to build something useful on top of a very simplistic machine, but occasionally it rears its ugly head.

      This is really not the case across the electronics boundary. Transistors don't behave in surprising ways very often. We don't have to say, "oh, but that was doped with gallium arsenide, therefore you can't program so and so". But we may say, about programming in a high level language: "that causes cache misses", "that's not very efficiently implemented on this or this processor", "doing it that way is a bad fit for the memory allocation methods we use" etc.

      As things are today, very many programmers have to go down to that level eventually. And even for those who don't, it's not clear that they won't benefit from a litte knowledge of how things work "under the hood".

      At Princeton, I understand there is a course that teaches x86 assembly as a first language; it uses the book "Programming from the Ground Up" by Johnatan Bartlett. He's a slashdot user. He developed the book in an open manner (and I even made some very small contributions). I recommend that book, especially the bits about memory management will obviously be relevant to lots of people eventually.

      --
      xkcd is not in the sudoers file. This incident will be reported.
    43. Re:Assembler by Anonymous Coward · · Score: 0

      Our stock holders rewarded us for saving few wooden gears and stone tablets here and there, so we really didn't have a chance. Our minds were filled with piles of Sesterius coins and the next tournament at the Circus. The calculations with the barbarians on/off our baths were helpful and funny, though.

    44. Re:Assembler by Anonymous Coward · · Score: 0

      That isn't exciting, it's not even something to be slogged through

      I would argue that it is exciting, but only for the kind of person who should be a computer programmer/scientist.

    45. Re:Assembler by marcosdumay · · Score: 1

      "Come to think of it, is there a way to do calculations with kids on/off your lawn?"

      Of course you can make calculations with that, you'll just have to use probabilistic algorithms. In my times, children were better educated and really got out of old people lawn when they were yeled at. That was the time! You could have used deterministic algorithms by then!

    46. Re:Assembler by Anonymous Coward · · Score: 0

      I went to a secondary comprehensive, so we didn't have enough money to afford a computer, and if we'd had punch cards we would have stolen the punches.

      I don't remember my first program, except that there was a long list of instructions and corresponding patterns for an OMR card (rows of circles you had to fill in to make binary codes). I'll never forget the same class the following week though, when we got the stack of continuous paper back from the college that owned the computer. Most of my schoolmates got a one-liner that said "ERROR", but I had added a two-digit number to itself many times over with a loop and returned the result - the problem that was set for us. I looked at the piece of paper and decided "this is what I am going to do FOREVER!".

      Laugh at the coffin-dodgers for their antiquated point of view all you like, but given a machine which can show you all the porn in the whole world, who would waste time programming it?

    47. Re:Assembler by agnosticnixie · · Score: 1

      I hate to do a me too, but damn, yes, I managed to learn other languages tolerably enough (disclaimer: I'm a student), but I still do BASIC inspired mistakes. Nowadays, it's a shit language, and there's very good reasons the few people around me I know who bother with VB overcharge for VB jobs.

    48. Re:Assembler by wwphx · · Score: 1

      Take a look at http://www.freebasic.net/, they sort of continued in the original BASIC path with some modern enhancements. I use it at work for the occasional quick and dirty job.

      --
      When you sympathize with stupidity, you start thinking like an idiot.
    49. Re:Assembler by hattig · · Score: 1

      Oh I agree about that, but there's a stage beforehand where the person gets caught in the sweet sticky nectar trap of the programming bug, and I think that's what we are finding out - the first language to use, the one that will grab the imagination, and make them get a hard on about going further.

      Lots of formal CS courses do functional programming first, it's more mathematical which is good for a decent computer science degree, and it gives nobody a head start, because lots of students previously did a C-like or scripting languages before, but very few do ML or Haskell.

    50. Re:Assembler by hattig · · Score: 1

      Well I guess at school in the 80s we learned Logo as a first language, and that's certainly quite different, when you get past turtle graphics. Of course it was used because the turtle graphics were more interesting than learning about closures and lambda calculus.

      I really do think the first language has to be the hook, to get those that are willing to be caught, caught. In the end it will be different languages for different people. I don't think Basic was that dangerous if you accepted it for what it was at the time, good for some things, simple to learn but quite well featured, not good enough for things you eventually wanted to do, and thus you learned assembler, or C later on.

  13. Python and Pygame by pcraven · · Score: 2, Interesting

    For a 15 year old? Python with the Pygame toolkit. There are other toolkits besides Pygame, but that one works well.

    1. Re:Python and Pygame by Norsefire · · Score: 1

      No. New programmers should be looking at a problem and thinking "How can I solve this" not "Where can I find a third-party library or toolkit that solves this?" That doesn't teach them the language, it teaches them Google.

    2. Re:Python and Pygame by maxume · · Score: 1

      What's the difference between learning how to draw to an abstract pygame canvas versus whatever abstraction the system provides for drawing?

      --
      Nerd rage is the funniest rage.
    3. Re:Python and Pygame by Anonymous Coward · · Score: 0

      No. New programmers should be looking at a problem and thinking "How can I solve this" not "Where can I find a third-party library or toolkit that solves this?" That doesn't teach them the language, it teaches them Google.

      You recommend making a 15 year old who has never programed before interface directly with the low-level OS APIs?

      Why stop there, why not make them re-write the graphics card driver in assembler before they are allowed to see anything on the screen? If they don't manage this they are clearly too stupid or lazy to be allowed to program computers. As we all know, REAL programers would write the driver directly in machine code in RAM using an electron microscope, but we'll cut these new programmers a little slack because they are young.

    4. Re:Python and Pygame by imbaczek · · Score: 1

      so you suggest kids should be writing their own pygame versions? somehow i don't believe they'll learn anything.

    5. Re:Python and Pygame by Norsefire · · Score: 1

      You recommend making a 15 year old who has never programed before interface directly with the low-level OS APIs?

      No, I recommend making a 15 year old who has never programmed before start with;
      print "Hello world";
      Learning the standard library of the language, learning the language itself, not jumping into using an external toolkit.

    6. Re:Python and Pygame by Eudial · · Score: 2, Informative

      No. New programmers should be looking at a problem and thinking "How can I solve this" not "Where can I find a third-party library or toolkit that solves this?" That doesn't teach them the language, it teaches them Google.

      To be fair, implementing graphics by raw interface with the windowing system is so difficult that a newbie attempting it will give up in minutes, and giving up programming certainly does not teach the language.

      I seriously don't see how a third party library to visualize your computations impairs the teaching of the language.

      --
      GAAH! MY PRINTER IS ON FIRE!!! PUT IT OUT! PUT IT OUT!
    7. Re:Python and Pygame by Norsefire · · Score: 2, Insightful

      To be fair, implementing graphics by raw interface with the windowing system is so difficult that a newbie attempting it will give up in minutes

      I didn't mean they should be writing their own implementations of Pygame, I meant that new programmers shouldn't be doing anything so complex that it requires them to use anything other than the standard library. Learn the language, then play with the extras.

    8. Re:Python and Pygame by FishWithAHammer · · Score: 1

      So you recommend that a fifteen-year-old who has never programmed before do something that will be uninteresting, unimpressive, and likely to turn him off from programming?

      You have to sink the hook by showing him how to do something cool. Then you backfill and cover the important low-lying stuff.

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    9. Re:Python and Pygame by Blakey+Rat · · Score: 1

      There's tons of visual languages that make this pretty easy.

      As a programmer you'll wince at this idea, but you can create a blank Windows form, fill it with sprites (in the form of Picture objects) and a timer, and make a game in a couple hours, at most. Obviously it'll be extremely inefficient (and flickery in XP), but for Space Invaders, it's more than enough.

    10. Re:Python and Pygame by sco08y · · Score: 1

      I meant that new programmers shouldn't be doing anything so complex that it requires them to use anything other than the standard library. Learn the language, then play with the extras.

      Except that Python's "batteries included" mentality means that you've already an extremely broad standard library so "what's in the standard library" isn't a good measure of how complex something is.

      I think the GP is on the right track because kids want to produce something *tangible*. A game is something that they understand and that their friends will approve of. Also, some people might not be interested right away, but if they're looking at a programming class in college and they recall "oh, yeah, I remember we made some cool little games in high school" they'll have a much more positive recollection and be more inclined to go back into it.

    11. Re:Python and Pygame by colinrichardday · · Score: 0, Troll

      But what can a 15-year old do in the standard library that would hold his or her interest?

    12. Re:Python and Pygame by Jamie+Lokier · · Score: 1

      The right thing to do depends on the new programmer.

      I was very happy learning how to write graphical programs from first principles. I even learned assembly language within a year of first touching a computer, at the age of 10.

      But some of my friends would have given up quickly if they had to do that.

      Those people learned better by having good examples of simple games they could edit, and learn how things work by gradually making bigger and bigger changes, until they could write a whole one themselves.

      And that was in the days when you could get pretty results from the built-in BASIC language on most computers.

      Nowadays, you can't do a lot of things without third-party toolkits in a realistic amount of time or effort, not even pretty graphics. Not even web pages: you still need a server, and writing one of those from scratch is not (imho) a good first project for a new programmer. It's good to do, but not as the first project.

    13. Re:Python and Pygame by selven · · Score: 1

      So you would prefer people to write boring console apps that ask you to input 3 numbers and tell you whether or not the sum is greater than 10?

    14. Re:Python and Pygame by Madsy · · Score: 1

      I couldn't agree more.
      Most of my friends who I tried to teach C programming showed a nasty lack of imagination. "What the hell can I do with just the standard library? I can't make GUI windows or fancy graphics!" All but one was put off, even when I gave them pretty decent suggestions.
      With just a R/W file handle I've coded raytracers, triangle rasterizers, maze generators, file parsers and miscellaneous effects. The graphics stuff was dumped as a still frame in the TGA format (Targa), or several if it was an animation. Hell, even my ARM emulator can run code with no other dependancies except the C standard libraries. SDL is used for the psuedo-peripherals like audio and displaying the framebuffer, which isn't needed for just running pure code and emulate a communication port.
      I assume you have an even larger standard library in Python than in C.

  14. Only one answer by Anonymous Coward · · Score: 0

    LOGO

  15. (At least) two distinct objectives... by fuzzyfuzzyfungus · · Score: 4, Insightful

    It seems like TFS is dealing with the fact that there are at least two distinct, and at times temporarily opposed, aspects of being educationally good.

    The one is engagement/excitement/comprehensibility: If somebody is disinterested in, or hugely frustrated by, a subject on first contact, they will have minimal motivation to continue. Unless you simply plan to beat it into them, introductory material needs to grab the audience(this doesn't mean that everybody must be your audience, of course). In many cases, this means a (temporary) sacrifice of rigor or correctness; think of intro physics, where you start with simplified Newtonian scenarios, or math, where you generally start by talking about addition/subtraction/multiplication/division, not sets and number theory.

    The second value is that of being correct and rigorous, or at least not impeding later development in completeness and rigor. You obviously cannot learn everything all at once; but there are some simplifications that make it easy to fill in the gaps later and others that actively retard that effort. This can happen either because the simplifications are hugely different than the reality, and harden people in the wrong ways, or because, in an attempt to be "engaging" the intro stuff promises that the subject will be "fun", "relevant", and "exciting" to everyone, every step of the way. Fact is, that isn't true. Most subjects have, at some point or another, patches of sucky grunt work. Promising people that they are precious flowers who will never have to soil their hands with such is a good way to make them drop out when they hit those patches.

  16. The best first language doesn't exist by BadAnalogyGuy · · Score: 1

    You have several tradeoffs and considerations when it comes to learning programming.

    Do you want to get on your feet right away? Maybe BASIC, VB, or Pascal is the best choice.
    Do you want to really learn about the computer? Probably ASM, but C may be a useful alternative.
    Do you want to learn about different ways to think about programming? By all means, stick with LISP and its children.

    There is no best language to learn programming. It all depends on what you want to really learn.

    I find the insistence on sticking with Scheme to be a bit naive. These days we are either dealing with systems with tons of memory which makes using languages like Java much more productive than Scheme. And on the other end of the spectrum, we are dealing with small devices with limited stack space which simply couldn't handle the amount of recursion that Scheme requires. It's an interesting teaching language like Pascal used to be. But technology has left it behind as a viable implementation language for any real world software.

    1. Re:The best first language doesn't exist by darkwing_bmf · · Score: 1

      Do you want to get on your feet right away? Maybe BASIC, VB, or Pascal is the best choice.
      Do you want to really learn about the computer? Probably ASM, but C may be a useful alternative.
      Do you want to learn about different ways to think about programming? By all means, stick with LISP and its children.

      I would argue that old school BASIC (not VB) applies to the 2nd better than the first (and better than C). It's not assembly language, but the flow control is similar enough to assembly that when I took my first assembly class, I was thinking to myself... hey, this isn't so bad, it's a lot like BASIC.

  17. "Not engineering"? by John+Hasler · · Score: 1

    > After all, as Jeff Atwood puts it, 'what we do is craftmanship, not engineering...'

    It would seem that Mr. Atwood has never done any engineering.

    --
    Warning: this article may contain humor, sarcasm, parody, and perhaps even irony. Read at your own risk.
    1. Re:"Not engineering"? by Anonymous Coward · · Score: 0

      Computer Science majors never learn what an engineering discipline is, so they tend to assume the application of a science to product development isn't engineering. It is.

    2. Re:"Not engineering"? by moon3 · · Score: 1

      Chinese iFone is engineering, Apple iPhone is craftsmanship.

    3. Re:"Not engineering"? by FishWithAHammer · · Score: 1

      I don't think many programmers have. I certainly have not. I have never and will never refer to myself as a software engineer. I'm a developer, or a programmer.

      I don't think that software development can be done with the necessary rigor to be called engineering.

      --
      "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
    4. Re:"Not engineering"? by wfstanle · · Score: 1

      That programming is thought by some of us as an art is probably part of the problem. There are too many programmers out there that do not use a systematic approach in writing programs. They just wade into a problem and muck around until they get some solution. Often the result is buggy code.

  18. Alice by Hiro2k · · Score: 1

    http://www.alice.org/

    I've seen a few places that teach students alice in order for them to become familiar with looping and conditional constructs before they move to something else. I think with all the visual stuff going on it would appeal more to younger programmers.

    1. Re:Alice by BadAnalogyGuy · · Score: 0

      I think the problem with this is that it doesn't dispel the "magicness" of programming. It creates a reliance on visual tools that perform the magic behind the scenes.

      Compare Visual Studio 6 to Visual Studio 2005. The newer version hides so many features from the user and performs so many little things that it creates a total dependence on the IDE to do anything. From the creation of a project to the compilation settings, the IDE controls it all in VS2005. In the older version, everything was more or less a wrapper around command line tools. Once you could see through the tools, everything about VS6 was very clear and straightforward.

      A programmer learning on VS6 would understand what they were doing much better than one who learned on VS2005. Though the latter may be more productive due to the crutches of the IDE, the lack of deep understanding means that he is also less flexible when the environment changes.

      So a programming language like Alice seems to be the antithesis of what a learning environment should be. It may be amazing and fun to use, but the student is not brought close enough to see the innards working, and thus I don't think they can actually learn very much from it. IMO.

    2. Re:Alice by 644bd346996 · · Score: 2, Interesting

      My understanding is that Alice 3.0 is supposed to fix this, by allowing you to completely eschew the drag-and-drop programming if you want and drop down to the underlying Java. However, I haven't actually tested this, because I've yet to install the beta. Regardless, there seems to be plenty of evidence that Alice 2 can be an effective introduction to programming, particularly for younger and less nerdy students. (My own experience using Alice 2 to introduce high school students to programming supports this.) Even if Alice doesn't teach you what a compiler and linker are, it does teach you about looping, event driven programs, object oriented programming, and many other important programming concepts. I've seen more than a few students go from zero programming experience to a full understanding of the difficulty of implementing collision detection and a physics engine, in the span of a week. In my opinion, getting somebody hooked so quickly that they're ready and motivated to start learning about complex data structures after a week is pretty cool.

  19. Assembly by MpVpRb · · Score: 5, Interesting

    First, learn assembly, it teaches you how the machine works. (You should probably also learn electronics and digital logic)

    Then learn C, it is the most widely used in both commercial and open source.

    Then learn C++, it is a better C.

    Then learn Java, it rules the web.

    Then learn Python, it has some very clever ideas.

    Finally...never stop learning

    1. Re:Assembly by Lallander · · Score: 0, Offtopic

      I have no points but could someone please mod this guy up? ^^^^

    2. Re:Assembly by Anonymous Coward · · Score: 0, Insightful

      Starting with assembly language? You're a fucking moron.

    3. Re:Assembly by Anonymous Coward · · Score: 0

      Really? And why is that? I'm guessing you've never done Assembly.

    4. Re:Assembly by SirLurksAlot · · Score: 1

      That is essentially the order that I picked up my repertoire, but I'd also add in COBOL (to learn to respect your elders), some kind of .NET language (because in a business environment you're bound to run into it), and PHP/Perl. I have to disagree with your assessment of Java being the ruler of the web; in the enterprise web, maybe. Smaller than enterprise (which the vast majority of sites are) I'd have to say PHP and PERL, with Ruby gunning hard for the position now.

      --
      God, schmod. I want my monkey man!
    5. Re:Assembly by JaredOfEuropa · · Score: 3, Insightful

      First, learn assembly, it teaches you how the machine works. (You should probably also learn electronics and digital logic)

      I think you want to pick a first language with which the kids can get some fun results fairly quickly, and keep their interest. Assembly is not ideal for this. With that said, by all means teach them how a computer works, right from the start.

      My dad taught us programming, back in the days when building a computer meant heating up the old soldering iron. He started with explaining what a computer does, the components (registers, memory, i/o) and the instructions you could use to tell the computer what to do. So he taught us about assembly without actually teaching the language, but even so it proved valuable to know more or less what goes on inside a computer at the lowest level. He then got us started off on Basic (which was pretty much the only option), taught loops, conditional statements, functions / subroutines etc.

      Any modern langauge can teach these basics, and I think they are still a good fundament. From there you can move on to object orientation and using mroe complex libraries and APIs to access the higher functions of the machine. I actually like the idea of starting with C (or just program C-style in C++), then adding object orientation on top of that by moving on to C++. Java might be good but I have no experience there.

      Another option is PHP. It is a lot less finicky; of course the OO aspects are rather poor but one should ask if they are teaching their kids programming fun, or preparing them for a career. PHP (or a similar language) is nice because it is a language well suited for building simple, active web sites. With any luck, your kids will quickly find a few ideas for websites that he can then implement himself... and nothing is better for keeping someone interested in learning to program is having their own project to complete. Once their first efforts go on-line, teach them about structure, web design, and security. Yes, by al means do code reviews, but keep it fun... show them how they can do things better.

      Whatever language you pick, I'd start kids off by keeping them away from IDEs and letting them code in Notepad (do not make them use vi; be mindful of child abuse laws)and a command line compiler (where applicable), just to teach them what goes on under the hood. Once they get to a level where they will want to use more complex libraries, GUIs etc, get them an IDE.

      As an afterthought, do introduce them to the whole open source thing. Nothing stimulates more than a thriving scene of fellow developers.

      --
      If construction was anything like programming, an incorrectly fitted lock would bring down the entire building...
    6. Re:Assembly by SirLurksAlot · · Score: 3, Insightful

      Java might be good but I have no experience there.

      Java's strong/weak point is its memory management. You'll never have to deal with/learn garbage collection or pointers.

      Whatever language you pick, I'd start kids off by keeping them away from IDEs and letting them code in Notepad (do not make them use vi; be mindful of child abuse laws)and a command line compiler (where applicable), just to teach them what goes on under the hood. Once they get to a level where they will want to use more complex libraries, GUIs etc, get them an IDE.

      I disagree with this. There is nothing more frustrating than trying to learn to program and getting compile/runtime errors from a command line.
      Without an IDE: "What the hell? What did I do wrong on line 53?"
      With an IDE: "What the hell? Oh! The syntax highlighting tells me I didn't define the variable, I'll remember that for next time."
      Using notepad is a horrible way to write code! I'd rather start them off with the IDE to get them familiar with the language first. Once they're familiar they can move on to command line compiling/building, at that point they'll have a good enough understanding of the language to focus on the command line tools (be it gcc and make or javac and ant or whatever).

      --
      God, schmod. I want my monkey man!
    7. Re:Assembly by colinrichardday · · Score: 1

      Whatever language you pick, I'd start kids off by keeping them away from IDEs and letting them code in Notepad (do not make them use vi; be mindful of child abuse laws)

      What about emacs?

    8. Re:Assembly by hattig · · Score: 3, Insightful

      Assembly as the first language? 99.99% of first learners who aren't doing a mandatory course in school would walk away.

      The first language has to be PICK UP AND GO. It is allowed to be a horrible abstraction of what the computer can do. It should be limited, to not confuse with abilities. It should allow creativity to be expressed. It should be easy to see results, no complex build system, nothing inbetween the programmer, the code, and running the code.

      Then when the first language is too slow, or doesn't allow something to be done, the learner will pick their own path forward, be that assembler, C, Java, C#, Python or whatever. Every language you've listed, excepting possibly Python, is a follow-on language for those that have got the programming bug.

    9. Re:Assembly by tepples · · Score: 1

      Without an IDE: "What the hell? What did I do wrong on line 53?"
      With an IDE: "What the hell? Oh! The syntax highlighting tells me I didn't define the variable, I'll remember that for next time."

      There is a middle ground: enhanced text editors such as gedit (on Ubuntu or other GNOME distros) or Notepad++ (on Windows). These have syntax highlighting, and they can also be configured to run make test on an F5 press.

    10. Re:Assembly by fwice · · Score: 1

      If I had mod points, I would mark you up, but I don't, so I'll expand on this.

      Starting from the bottom up, you gain a better understanding of how the machine functions. You can always go up a layer of abstraction once you understand what is happening on the lower levels.

      I would have recommended C first, so that the beginner can understand memory management, registers, interrupts -- the 'lower levels' of the machine -- but starting with assembly gives an even better understanding. Once you understand how memory works, pointers, addresses -- you can move to a language that automates the process -- but without the knowledge, you _will_ get bitten at some point.

      Between C++ and Java is where I would have put python/perl/${SCRIPTLANGUAGEOFCHOICE} -- and an understanding of when to use a scripting language versus a programming language.

      But you hit the nail on the head with the last line -- don't stop learning. Dinosaurs and those unable to evolve go extinct :]

    11. Re:Assembly by MpVpRb · · Score: 1

      The specific languages, and precise order of learning is not that important.

      My point was simple. If you don't know assembly, you don't really know how the machine works.

      In my daily work, I rarely, if ever, use assembly. But I remember when I first learned it. Something clicked, the light went on, I truly had the feeling that "now I understand".

    12. Re:Assembly by ahabswhale · · Score: 2, Funny

      I agree with your last statement but the rest of your post I can do without.

      Assembler is great but it's a horrible choice for a first language. It was fine as a first language 30 years ago when people had simple expectations for software. I'm not saying to never learn it, but it's unnecessary as a first language.

      C is not the most widely used commercial language and it certainly does not lead the way in open source (the open source movement started with Java). Both those categories belong to Java. As to my first point, look here: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html. That said, there's nothing wrong with learning C but it's hardly the future so I don't really recommend it except for the purpose of getting a background in procedural programming, pointer manipulation and manual memory management.

      C++ it utter trash and a disaster of language that nobody should learn or use except to learn what not to do when designing a language.

      learning Java and Python are good choices (although Java is getting a little long in the tooth but exposure to the JVM is a good thing).

      --
      Are agnostics skeptical of unicorns too?
    13. Re:Assembly by Paul+Fernhout · · Score: 1

      Forth can be a nice compromise between assembly and C for those who want to learn how the machine works, and then move onto something like Java because it is cross-platform and the JVM can support a variety of languages. Still, I like your list. For me it was something like (starting about thirty years ago):
      * Electronics, Digital Circuits
      * Machine Code (just the numbers even if they had mnemonics)
      * Basic
      * Mixed Basic and Machine Code
      * Forth
      * Assembly (as in, having an assembler)
      * C
      * Lisp
      * Smalltalk
      * C++
      (With some smatterings of Pascal and JCL and text processing stuff in there, even Occam).
      After that it was lots of other stuff, Python, etc. I agree that learning how the machine works is the basis of confidence as a programmer, even if there is another set of issues about managing complexity that can show up pretty fast.

      Forth is also good for helping people learn one approach to managing complexity. "Joy" is a more modern version of Forth, although all Forths suffer from not doing enough to intrinsically document intent with good variable names, so it is more a stepping stone. If there was only one language someone would learn, a good Smalltalk (Squeak-as-we-wish-it-not-as-it-is) could be a nice choice too, combining aspects of to-the-metal programming and high level constructs and a good IDE.

      --
      A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
    14. Re:Assembly by MpVpRb · · Score: 3, Informative

      C is not the most widely used commercial language and it certainly does not lead the way in open source

      So...What is Windows written in?

      What is the Linux kernel written in?

      What are KDE and Gnome written in?

      Autocad...Photoshop...MS Office?

      AFIK, they are all C or C++

    15. Re:Assembly by martas · · Score: 1

      you got it all wrong.

      First, learn theoretical physics (incl. quantum physics, string theory, the whole nine yards).

      Then, learn chemistry.

      Then, learn electronics and digital logic.

      Then, do what $parent said.

    16. Re:Assembly by Anonymous Coward · · Score: 0

      I will second this approach, (assembler and OOP like Java). I have meet far too many "programmers" that have no idea of how a computer works. You want to teach them the basic concepts so they can understand what it is they are trying to do. What a byte is, why an int is 32 bits wide, what interrupts are and how they're used, what a stack is, etc.. On the other hand, you want to install good habits that come with OO techniques, hence the Java. Exposure to C(++) is a commercial must and should follow assembler.
      Throw in a couple of group projects too, with all the requirements gathering, specs, test cases, etc.

    17. Re:Assembly by Anonymous Coward · · Score: 0

      With the exception of python, that is exactly how the biomedical engineering curriculum at the University of Texas at Austin is designed, and I believe that it only works if you can get people to actually understand assembly. Otherwise people lose interest very quickly.

    18. Re:Assembly by Anonymous Coward · · Score: 0

      This is the only language position I can endorse.

    19. Re:Assembly by Oligonicella · · Score: 1

      I have. Moron is too much, but assembly is certainly not to begin with. It has very few uses in the wild and takes a certain rigor to program in well. As to the GP why, it teaches how a specific machine works. High level languages are (theoretically) machine independent.

    20. Re:Assembly by Anonymous Coward · · Score: 0

      I always found it interesting how some people like to learn from the ground up and others like to go top down. I personally prefer top-down. So python -> java -> c/c++ -> assembly. though i actually started with c.

    21. Re:Assembly by Dragonslicer · · Score: 1

      What about emacs?

      Okay, so there's your operating system, but what are you going to use for writing the code?

    22. Re:Assembly by Draek · · Score: 4, Funny

      First, learn assembly, it teaches you how the machine works. (You should probably also learn electronics and digital logic)

      Better yet, first make them learn Lambda calculus, then make them understand the Church-Turing thesis. Only when they fully grasp the nuances of an Universal Turing Machine should they even *touch* an actual computer and program in Assembly.

      Or perhaps teaching "from the bottom-up" isn't such a good idea.

      --
      No problem is insoluble in all conceivable circumstances.
    23. Re:Assembly by Anonymous Coward · · Score: 0

      Don't totally agree... You should definitely learn C and Assembly. From here you should learn what best fits you and where you see your future. If that's in embedded development then dive further into C. If you want to do GUI's and web stuff learn Java. Python is neat for web development along with PHP and Ajax. C++ just sucks because it tries to encompass both C and Java all in 1 but fails to ever really catch on... if you want full blown embedded use C and if you want OOP use Java. Guess its up to you.

    24. Re:Assembly by ahabswhale · · Score: 1

      Yep, but as my link pointed out, C is not the most popular language. You need to realize that of all the coding done in the world, the VAST majority of it is for business apps -- not operating system/driver code.

      --
      Are agnostics skeptical of unicorns too?
    25. Re:Assembly by Travelsonic · · Score: 1

      C++ utter trash? Is that serious?

      --
      If you believe in privacy, and believe you have "nothing to hide" at the same time, you're a goddammed idiot
    26. Re:Assembly by PingXao · · Score: 1

      Java rules the web? Seriously? I've had "Enable Java" unchecked in Firefox for a couple of years now. I seriously doubt there's a whole lot I've missed. To be fair, I have enabled it on occasion for a specific page or two I was visiting, but that hardly qualifies as "rules" in my book.

    27. Re:Assembly by MpVpRb · · Score: 1

      Java rules the web?

      Yeah...I probably should have said something like "Java is popular among web programmers". When I write fast, I get a little sloppy.

      I don't have much time for Slashdot today...got to get back to work...programming in C and C++

    28. Re:Assembly by BollocksToThis · · Score: 1

      Assembly teaches basic important concepts that apply to all (current) computers. The instructions may be specific to an architecture, but not the ideas.

      --
      This sig is part of your complete breakfast.
    29. Re:Assembly by JaredOfEuropa · · Score: 1

      I disagree with this. There is nothing more frustrating than trying to learn to program and getting compile/runtime errors from a command line.

      It also teaches valuable troubleshooting skills. Having to hunt through code for an elusive error is something they will have to do sooner or later, IDE or no. Best if they don't have the IDE babysit them right from the start.

      My main beef with IDEs though is that they hide a lot of the internals, some of them do anyway. I remember going through a tutorial in MS Visual Studio, completing a simple Windows program, and thinking at the end of it "it works, but what the hell did I just do?" If you give them an IDE, help them understand what goes on under the hood as well.

      --
      If construction was anything like programming, an incorrectly fitted lock would bring down the entire building...
    30. Re:Assembly by Anonymous Coward · · Score: 0

      you neglected to mention the fun when the ide breaks.

    31. Re:Assembly by Anonymous Coward · · Score: 0

      You mean you can disable web sites that use Java servlets and JSP? Idiot.

    32. Re:Assembly by Anonymous Coward · · Score: 0

      I'd agree.

      I took this path Pascal (in college), Assembly (6502, 8080, Z80 f), C, C++, MFC, VB, Java, Flash, Flex

      I can really appreciate the features newer languages offer.

      It takes years to become proficient in a language.

      I'm a big fan of strong typed languages. As your project grows, refactoring is much easier when the language is strongly typed.

      If I had to choose just one, I'd start with Java. Read the source code from the apache commons projects.

    33. Re:Assembly by porkThreeWays · · Score: 1

      I hate managing memory. It's purely academic or for performance reasons, but for getting an idea or algorithm working, it just gets in the way. The first thing I wrote in C++ when I had enough experience understanding memory was a garbage collector.

      --
      If an officer ever threatens to taze you, say you have a pacemaker.
    34. Re:Assembly by porkThreeWays · · Score: 1

      C++ is utter trash? If it's that bad they why is almost every game released today written in it? You have it backwards, most software isn't written in Java. Java software tends to be mostly written in the enterprise where you can tell the client "you need at least X version of Java." For consumer software, almost everything is written in C++. Not as much is written in C because lack of good error handling (no try-catch-throw) and features for managing growth (namespaces, objects, private/protected/public, etc, etc). Certain low level things could be written in C++, but the extra runtime memory management requirements makes it more practical to just write in C. Python is mostly used as a support language. While most games are written in C++, the levels and maps tend to be designed in XML and Python. Not a whole lot of commercial software is written in Python as the primary language. Much of it comes down to distribution for the general public. It's really hard to distribute software for Java and keep it simple and small if you require a recent JVM. You could do like Oracle and basically include an entire JVM in your software install (really big), or force people to upgrade versions (which doesn't make for a good user experience). In C and C++ it's pretty easy to distribute a program once written. There's just a compiled binary and perhaps some shared libraries.

      --
      If an officer ever threatens to taze you, say you have a pacemaker.
    35. Re:Assembly by Anonymous Coward · · Score: 0

      I second that, but play with Python or something similar first for a little while. I learned a little BASIC on a Sinclair ZX81, discovered it was too slow to do anything interesting, then learned a little Z80 assembler (machine code actually, poked it in). Then traded it for a Radio Shack Coco (better graphics) and spent high school writing a game in 6809 assembler. C was easy after that... most normal languages were pretty easy, because I knew what pointers were. Oddball languages like LISP and Prolog were harder, being more abstract - it's worth learning a few of those as well, a good university program will include a language survey course, and it's also easy to learn Python, Perl, and Lisp from books and tutorials (all are available for free legal download, you can even hack on the language source code, which is C).

      C/C++ are necessary, not knowing them will limit your career - as someone else pointed out, almost all major apps are written in C or C++, including Linux and other OSs and all your favorite tools and languages. You will be a crippled programmer without knowing C well and C++ at least moderately well.

      Avoid IDEs and CASE tools, they make you dependent, and you end up confused in your next job where that tool isn't around. If you know how to write code using vi/notepad and make, you can use an IDE or a tool, it's harder the other way around. It's not hard to find line number 392 when the compiler gives you an error message; if you can't figure that out and get used to doing it, please do something else with your life; there are too many other, harder things in SW development which you will also fail at if you can't master line numbers. That said, a simple, interactive environment like Python (or Coco BASIC or a good IDE) is a good way to initially learn to program, for the first few months of learning about loops and if statements.

      BTW, if you do want to do embedded, robotics, commercial app development, or anything else that's not business IT, major in computer engineering, not computer science, unless you're at a school that hasn't dumbed down CS to the point of teaching it all in Java or scripting languages. Teaching CS in Java is like eliminating Calc from the EE curriculum. CS *needs* some weedout courses. Make them do some data structures in Z80 assembler, and multiply 16 bit numbers without MUL using shifts and adds, too. I once worked with a lady with an MS in CS who one day asked me to explain to her what a pointer was. I've had people working for me who could not write a simple one page program, or took weeks to do it. One had an MSCS from Yale. Dumb people should be filtered out early, just like in EE or physics. Failure to do that is giving CS a bad name.

      Digital logic is also useful... and computer architecture even moreso. Learn what a cache is, what DMA and interrupts are, how DRAM works, what a page is, how threads and processes work on a single core, and how all of these things affect a user program's behavior and performance. Learn how an OS works. If you know how to write and debug decent performing code, and move to the Valley or someplace similar, you will usually have a decent job. Even if you end up in PC app dev and never use low level knowledge directly (as opposed to embedded where you'll use it every day), you will benefit from knowing how things work, it helps with problem solving and performance tuning.

      '89-present ('81 if you count the Coco years)... stay off my lawn.

    36. Re:Assembly by julesh · · Score: 2, Insightful

      So...What is Windows written in?

      What is the Linux kernel written in?

      What are KDE and Gnome written in?

      Autocad...Photoshop...MS Office?

      AFIK, they are all C or C++

      Off-the-shelf packages like these are atypical, and represent I believe less than 1% of code that is written commercially. They are dwarfed by the number of payroll systems, account management systems, workflow tracker systems, management information systems, intranets, extranets, web services, etc. Most of these are written (depending on how old they are) in C#, Java, Delphi, VB, Smalltalk, or even COBOL. Very few are in C or C++.

      Also, a lot of this software would probably be written differently if it were started today. Microsoft's research OS, Singularity, is written in C#. I firmly believe that if they were to reimplement Office from scratch they would do so in C#. If I were starting a photoshop-like project today I would strongly consider a functional language.

    37. Re:Assembly by Anonymous Coward · · Score: 0

      I'll bet that MS Office is C# these days.

    38. Re:Assembly by Anonymous Coward · · Score: 0

      Most of them C, C++ is a fad of one time for complex desktop applications that has stayed because nobody dares translating a C++ program into anything else. Eventually people realized you can write anything in C and use Java and C# for glue Enterprise code. There is no niche for C++.

    39. Re:Assembly by Anonymous Coward · · Score: 0

      I agree with none of that, except the final line.

      Starting with Python is fine -- I think Ruby is a better first language, but either are fine.

      I'd forget Java, unless you want to work in that field, and there is a lot of work in that field. I use JRuby and Java a lot, so it's not a religious choice on my part.

      C++ is an abomination and a world of pain and suffering. The UN should do something about it. Learning asembler as a starting point in this day and age is just silly (unless required for the domain at hand).

      The key is for a first language to be pure OO -- which excludes Java, imo -- and has a mature test framework that makes TDD a no-brainer.

    40. Re:Assembly by josephcmiller2 · · Score: 1

      Screw you, notepad kicks ass! How else would I have been able to "program" my first web page complete with frames, marquees, and blinking text?!

      On second thought, if you're using notepad, you're stuck on a Win32/64 platform. Pretty limited for learning programming IMHO.

    41. Re:Assembly by Anonymous Coward · · Score: 0

      Then learn Java, it rules the web.

      Are you serious? I don't think the percentage of web programs in Java is anywhere near that of Javascript, or Perl/PHP/Python.

    42. Re:Assembly by Anonymous Coward · · Score: 0

      Based on extensive observation, I'm pretty sure AutoCAD is written in its own Lisp dialect. I didn't quite understand why the VB integration appeared to be broken until I understood Lisp. Now it makes sense.

    43. Re:Assembly by pauljlucas · · Score: 1

      Java's strong/weak point is its memory management. You'll never have to deal with/learn garbage collection or pointers.

      And that means that Java can't be used to discriminate between great programmers and mediocre programmers.

      --
      If you reply, do so only to what I explicitly wrote. If I didn't write it, don't assume or infer it.
    44. Re:Assembly by Anonymous Coward · · Score: 0

      Who modded this funny? Draek used sarcasm, but was dead accurate that all the "assembly" pushers on /. are just plain nuts.

    45. Re:Assembly by Anonymous Coward · · Score: 0

      First, C is not C++. Many programs you have mentioned are made with C++. Second, even if the was made with C, it is still true. For new development I think that C++ and Java are the most used. Java is probably the number 1 currently. I did not say that Java is the best language; I only speak in term of statistics. If it is not new development only that are concerned, I believe that Ada, Fortran and Cobol may be more used than C in existing software in term of coding line.

    46. Re:Assembly by badkarmadayaccount · · Score: 1

      You don't define variables, you declare them.

      --
      I know tobacco is bad for you, so I smoke weed with crack.
    47. Re:Assembly by selven · · Score: 1

      99% of code is simple applications that all do the same thing (usually printing "hello world"). If you want to do a real comparison between popularity you should think in terms of the number of users - popular software like Windows, Linux and Photoshop should be worth more than some internal banking app that affects maybe 200 people.

    48. Re:Assembly by hawk · · Score: 1

      Apparently, the CIA has actually forced captured Taliban to use emacs to write code. By the end of the second day, they ask for their waterboards back . . . :)

      hawk

  20. Hacketyhack by Anonymous Coward · · Score: 0

    http://hacketyhack.net/

    Designed to introduce kids to programming using the ruby language, currently being transformed but should be back soon.

  21. Ocaml, definitely! by Anonymous Coward · · Score: 0

    Ocaml has an imperative part which is as simple as pascal, but without types, which are inferred. The people I know that started with ocaml in experimental university courses have a mental attitude to clean programming that I've not seen elsewhere.

  22. noop nope by mindbrane · · Score: 1

    Admittedly I'm a noop but I've put in 20yrs on PCs and studied most of the structure of PC operating systems and most of the key languages. While I still think BlueJ is an outstanding introduction to the concepts of programming I believe learning the CLI is the best introduction to progamming because it forces the student to interact with the OS while introducing the basic statements of all programming languages. Programming languages tend to either be to low level and demanding an abstruse use of logic or high level while trying to explain how to implement abstruse rules of logic in a way said to be more tractable to 'common sense'. But the CLI uses nearly all the basic concepts and interacts directly with the OS and acts on files. It instructs in the fundamentals of programming languages while adding the benefit of displaying how an OS is structured and functions. I'm probably way off on this but it worked for me, remember I'm a noop, unworthy of being flamed and deserving of at best contemptuous neglect. :)

    --
    ideopath @ play
    1. Re:noop nope by SirLurksAlot · · Score: 1

      Admittedly I'm a noop

      Maybe you mean noob? Unless you mean no operation, in which case how's that working out for you? I'd expect it is rather boring ;-)

      While I still think BlueJ is an outstanding introduction to the concepts of programming

      Maybe you mean Java? BlueJ is an IDE (Integrated Development Environment) often used as a teaching tool for Java.

      --
      God, schmod. I want my monkey man!
    2. Re:noop nope by mindbrane · · Score: 1

      no operation, noop was a term used by early assembly language programmers for people, perhaps very much like yourself, who talked a great deal about programming without ever having written any worthwhile code. BlueJ is an IDE, but one that is specifically developed for teaching Java. It's so good MS tried to steal the idea but got caught and after a lot of hand waving backed off saying it was just a bad mistake, kinda like your momma talks about you.

      --
      ideopath @ play
    3. Re:noop nope by SirLurksAlot · · Score: 1

      Did your hand slip when you hit reply? Go back and re-read the parent and then read my comment.

      --
      God, schmod. I want my monkey man!
  23. From an HCI perspective by williamhb · · Score: 3, Informative

    In my opinion, two issues compound each other. The first is that because functional programming is seen as very pure and simple, there is a myth that Scheme programs do not need much documentation. The second is that Scheme functions do not declare return or argument types. This means that in order to read someone else's code, if structures of any complexity are used, you can have to manually walk the full call depth of each function, possibly many calls deep, just to know what kind of structure it returns in the end. That makes it painful to work with someone else's code, compounding the other well-known problem with computer science education: in the course, you're usually writing your own code from scrach; in the real world you usually have to deal with code your colleagues (or even third party projects) have written.

    1. Re:From an HCI perspective by TheMiller · · Score: 1

      "... because functional programming is seen as very pure and simple, there is a myth that Scheme programs do not need much documentation." This sits alongside the myth that Scheme is a functional language, and the one that equates a lack of manifest variable typing with functional programming. More importantly, the notion that manifest types provide all the documentation that you need to understand returned values or argument requirements is also a myth. For non-trivial code, there's no substitute for informative comments, regardless of language.

  24. take a look at alice.org by kulakovich · · Score: 4, Interesting

    http://www.alice.org/index.php?page=what_is_alice/what_is_alice

    "Alice is an innovative 3D programming environment that makes it easy to create an animation for telling a story, playing an interactive game, or a video to share on the web. Alice is a freely available teaching tool designed to be a student's first exposure to object-oriented programming. It allows students to learn fundamental programming concepts in the context of creating animated movies and simple video games. In Alice, 3-D objects (e.g., people, animals, and vehicles) populate a virtual world and students create a program to animate the objects.

    In Alice's interactive interface, students drag and drop graphic tiles to create a program, where the instructions correspond to standard statements in a production oriented programming language, such as Java, C++, and C#. Alice allows students to immediately see how their animation programs run, enabling them to easily understand the relationship between the programming statements and the behavior of objects in their animation. By manipulating the objects in their virtual world, students gain experience with all the programming constructs typically taught in an introductory programming course."

    kulakovich

    1. Re:take a look at alice.org by Anonymous Coward · · Score: 0

      Agreed. Alice is an EXCELLENT way to introduce young teens to programming while still letting them have fun. Troy High in Fullerton, CA (one of the premier computer science teaching high schools) uses Alice in the first part of their freshman programming class.

    2. Re:take a look at alice.org by Anonymous Coward · · Score: 0

      3D environment would fit well with parallel programming for multiple simultaneous actions. How would Parallel Alice sound? Alice would have to synchronize her actions occasionally with the mirror version of herself to solve a problem...

    3. Re:take a look at alice.org by Anonymous Coward · · Score: 0

      That's good I admit but what students are really lacking is good, well commented source code of an early protoype of something (full working source not just snippets) followed by explanations of how and why significant changes were made as the source gets more complex, and full working source files for the more complex programs. Kind of an edu-source if you will.
      Also, students often don't get exposed to the right technology at all early enough. Denying students education in IDE's, widget making programs, executable installer programs that install your files onto a computer.like Nullsoft's is retarded.
      Also, assignments are too regurgitated at times. Every student gets the same crappy bubble sort assignment. It would be more interesting and involve less cheating/copying to have more varied assignments. Have about 10 or even more different variants of the same assignments. Many of us didn't enjoy reinventing the hamster wheel every week ....

      For example, I'm the kind of person that sees something like Alice and doesn't want to play with it, I'd want to know how it was made. Well commented source code together with a paper on it is still very intimidating. More comprehensive source explanation would be easier, more efficient, and less intimidating.

      I envision a system that is linked up to a documentation database, so that when I hover a mouse over some code, I immediately have a pop-up dialog of what that function does, how it does it, and access to greatly more information. This might not seem necessary for simple code but for complex code I think it is.
      Imagine a simple glew/glut/opengl program. Even simple programs of this nature are in effect far from simple if it's the matter of understanding how they really work. I would literally have to go read the opengl red book, understand glut and glew, and maybe even read up in detail on how GPU's work in order to really understand how it works. Carrying out all those steps is definitely NOT the future of CS education IMO.
      As Albert Einstein once said, "learning by example is not the best way to learn, it's the only way" So, for complex examples, we need complex explanations, not go read the book you haven't got time to read all of, and buy it with the money you don't have any of. Praise bit torrent
       

    4. Re:take a look at alice.org by Requiem18th · · Score: 1

      Parent wins, end of discussion.

      --
      But... the future refused to change.
    5. Re:take a look at alice.org by salimma · · Score: 1
      I'll have to respectfully disagree there. Having TA-ed a programming class that used Alice and Python, my experience is that students find 3D a distraction: they spend too much time tweaking their objects' positioning and not enough on actually writing code.

      Plus, Alice's lack of physics modeling makes it rather unintuitive to use at times. I'd rather recommend MIT Scratch -- it's 2D, object-oriented, with a visual drag-and-drop approach that makes it really hard to make syntax errors.

      --
      Michel
      Fedora Project Contribut
    6. Re:take a look at alice.org by prehistoricman5 · · Score: 0

      As someone who went to a high school that used Alice in its introductory programming course, I would strongly suggest that any 15 year old looking to learn to program should stay away. I fortunately did not have to suffer through a course using it, but I heard from friends a year behind me that it is awful. They saw it as having little or no practical use. I also had a similar experience when my dad bought me a copy of microworlds logo when I was in 7th grade. I quickly found myself bored learning the concepts that were being taught in the guide that my dad found for me, so I started to mess around, but since I knew barely anything, I wasn't able to do much. My experiences with programming in java have been far different. I have been able to actually program stuff that I find meanongful and it doesn't feel like a dead end. I however would not recommend java to any 15 year old looking to learn programming, as it is an OO hellhole.

      --
      Fuck Beta
    7. Re:take a look at alice.org by indi0144 · · Score: 1

      You sir is a WINRAR! I was debating myself between Assembly and Phyton but I think Alice is really the best for starting up, I'm 26 and have tried learning C++ before but I lost interest by the lack of graphic feedback, that and a asshole teacher :(

    8. Re:take a look at alice.org by Anonymous Coward · · Score: 0

      Yes but show me some code for "hello world" in Alice. Oh... you can't because everything's fundamentally tied to the IDE.

      How do you test students?

  25. 10 PRINT "HELLO WORLD" by Nimey · · Score: 0, Redundant

    20 GOTO 10

    --
    Hail Eris, full of mischief...

    E pluribus sanguinem
    1. Re:10 PRINT "HELLO WORLD" by Anonymous Coward · · Score: 0

      That was my first program too! I wrote it in 4th grade. The only difference is that the Simpsons had just started their run, so mine said "EAT MY SHORTS."

    2. Re:10 PRINT "HELLO WORLD" by Anonymous Coward · · Score: 0

      OMG!!! That was my favorite program to type when I would go to computer stores

    3. Re:10 PRINT "HELLO WORLD" by SpinyNorman · · Score: 1

      100% agree - nothing better than just jumping in and doing it, getting some immediate feedback, to foster some excitement and interest.

      Next you change it to a for loop rather than an infinite loop, and whaddya know, you're programming...

    4. Re:10 PRINT "HELLO WORLD" by funkatron · · Score: 1

      One of my early programs (admittedly in Java) was outputting "Hello world" on port 80 with the correct headers. What's the point in saying hello world to yourself?

      --
      "Welcome to our world. We are the wasted youth. And we are the future too." Yes, I know these are stupid lyrics.
    5. Re:10 PRINT "HELLO WORLD" by SpinyNorman · · Score: 1

      It's worth pointing out too what "BASIC" stands for (which corresponds to what it was designed for) - Beginner's All-purpose Symbolic Instruction Code

      How many other languages are actually designed for beginners and teaching as opposed to being meant as tools of the trade for professionals?

  26. Advice from "Epigrams in Programming" by line-bundle · · Score: 1

    Alan J. Perlis said: "A language that doesn't affect the way you think about programming is not worth knowing". (personally I would remove the 'about programming' bit).

    I think the same applies to a first programming language. It has to expand the learner's view of the universe. Getting a language which panders to the learner's universe does not do them any good.

    1. Re:Advice from "Epigrams in Programming" by SpinyNorman · · Score: 3, Insightful

      ANY first programming language introduces new concepts. When you're starting out even something like the concept of a variable takes a little getting used to. Maybe you can relate it to memory store/recall on a pocket calculator, but with a name. Later you can introduce arrays of variables, non-numeric variables, etc.

      You seem to have forgotten what it was like in the beginning to know *nothing*.

    2. Re:Advice from "Epigrams in Programming" by CarpetShark · · Score: 1

      I think the same applies to a first programming language. It has to expand the learner's view of the universe.

      You're a scientologist, aren't you? ;)

    3. Re:Advice from "Epigrams in Programming" by Jamie+Lokier · · Score: 1

      I have a colleague who has been programming assembly language on a variety of microcontrollers for about 15 years. He's good at it too. Recently he learned C.

      He just could not get his head around objects and properties as found in Javascript and Lua. Last time I saw him, he'd just got the hang of associative arrays due to using Awk, and I explained that objects in those languages are basically the same, but don't have names...

      The prospect of little fragments of code with memory of their context - lambda functions - rendered some Lua scripts completely incomprehensible to him and "made his brain hurt".

      I'm sure he'll get those things when he has to. He's a very fast learner when he has to use something new.

      Yet these concepts are basic, casual concepts for web designers writing little bits of Javascript. Something which isn't even regarded as programming by some people.

      It humbles me to be reminded how much seems trivial and "always been obvious" when you've got the idea, but is baffling and new at first.

    4. Re:Advice from "Epigrams in Programming" by Anonymous Coward · · Score: 0

      Since the collegue is an embedded developer he probably know something about state machines. He could start figuring out objects as state machines and classes as the descriptions of such quite easily. Lua seems to be a different beast when compared to many other currently popular languages and the prototype style of classes in Javascript might confuse somebody from the statically typed world, however.

  27. Fast and free by proslack · · Score: 4, Interesting

    My first year as a CS major I took "symbolic logic" to supplement to required Pascal, Fortran, and Assembly Language courses. After all that, I always thought of the symbolic logic class as the "Latin of programming". Personally, I think any language which is free and gives quick results would be suitable for beginners...Python, for example.

    --


    Floating in the black seas of infinity without a paddle.
    1. Re:Fast and free by Anonymous Coward · · Score: 0

      As a CS major, I ended up studying for a BA in Philosophy in addition to the BS and would highly recommend any rigorous logic course as a compliment to Computer Science. If one cannot first think clearly, how can one expect to properly define the thinking for a computer with any language?

  28. PHP by Phrogman · · Score: 3, Interesting

    Its not consistent, its not even well designed I expect, but its a remarkably easy way to learn to manipulate a computer. Learn a bit of HTML first, some CSS, then work on OO PHP and you can accomplish a lot. People will dismiss PHP but there are a lot of very large websites built using it - ones that lots of kids will be familiar with.
    Follow it up with a second language once you have gotten the basics down pat - Python is likely a very good choice.

    --
    "The first time I got drunk, I got married. The second time I bought a chimpanzee, after that I stayed sober" Arian Seid
    1. Re:PHP by Eudial · · Score: 1

      Web programming is a bit of a dead end in my book.

      It largely hides how fast your program is (which is why so many web applications are inefficient messes) and it's very distant from application programming (which makes inevitable the leap to application programming very large.)

      --
      GAAH! MY PRINTER IS ON FIRE!!! PUT IT OUT! PUT IT OUT!
    2. Re:PHP by jjohnson · · Score: 4, Insightful

      I was just going to write this comment myself. The biggest advantage of PHP is that you go from zero to tangible results very quickly. No programming language is going to be interesting to teenagers if they can't instantly do something useful with it, and to a teenager, cool web stuff is the useful thing that they're most likely to be trying to do.

      --
      Anyone who loves or hates any language, platform, or manufacturer, doesn't know what they're talking about.
    3. Re:PHP by kamatsu · · Score: 3, Insightful

      The problem is the vast majority of PHP code in the world is bad. It can very easily teach bad habits.

    4. Re:PHP by Anonymous Coward · · Score: 1, Insightful

      agreed, learning PHP is also a good way to ensure future job security. there are always lots of PHP gigs out there.

    5. Re:PHP by Anonymous Coward · · Score: 0

      Judging by most of the PHP code I've been exposed to, most PHP users go from zero to "tangible results" to "doing freelance work". With about a three hour total timespan from beginning to end.

    6. Re:PHP by Anonymous Coward · · Score: 0

      While I imagine any suggestion could be debunked in some manner, I disagree that PHP should be a beginning programmer's first language.

      1. PHP is too loose. It will allow the programmer to get tangible results quickly, but it will instill bad practices. There are rules and best practices, that PHP allows you to completely ignore.

      2. PHP5's OO functionality is half baked. it doesn't have many of the gems that c++ or java have (not that I would ever suggest java). I believe that programmers these days should be taught OO programming first off. People that have done procedural programming have a rougher time wrapping their minds around OO programming later.

      Why start new programmers with handicaps? You might have to read their code some day =)

    7. Re:PHP by popra · · Score: 1

      before you can avoid bad habits, you have to know what they are AND why are they bad habits.
      Frankly, I've seen just as much - if not more - bad code in Java or any other language as I've seen in PHP. In my experience, PHP with its bad name keeps you on your toes when it comes to bad coding practices, it can also give you hands on experience with why one approach is better than the other, something that Java for example (or any language where best practices are already identified for you) can't do.

    8. Re:PHP by kamatsu · · Score: 1

      True, I've seen bad code in Java too, but Java's is usually symptoms of poor design and not so much complete garbage.

    9. Re:PHP by josephcmiller2 · · Score: 1

      I agree that PHP is a great examples language, but there is a problem with using it with websites to learn programming. Then you have to get into which web language to use. HTML 4 Transitional? HTML 4 Strict? XHTML? And no one writes strict HTML anyways. Which also means no one knows how to teach strict HTML. Which means that a lot of HTML development ends up with missing ending tags, sloppy formatting, and poor form. Sure, you could do it right, but this begins quickly getting in the way of teaching the most basic introductory programming.

  29. I was fortunate to write my first program in 1970 by bitemykarma · · Score: 2, Interesting

    I say fortunate because there was nothing in the way; no distractions like GUIs to dilute the experience. Just BASIC on the command line.

    It doesn't really matter whether the youngster uses BASIC, Pascal, or XYZ. It should just be a simple language so the concept of logic and process flow is what is learned, rather than getting bogged down in arcane concepts of the language itself (or some pig of a GUI, like "Visual" this, or "Visual" that).

    PS. The environment was an interactive "command line" and BASIC interpreter that actually was running as a batch job on an IBM 360 mainframe.

  30. Start simple? by SpinyNorman · · Score: 2, Insightful

    The best first language is anything simple that lets you jump right in and understand the basics like variables, loops, arrays, etc, without getting bogged down in an over complex or restrictive language. It doesn't need to be the worlds best language - it's to get you started. You could do far worse than start with a BASIC interpreter (instant feedback, no compiler/linker to deal with) at a very young age.

    Those of use who started out at the beginning of the personal comnputer (not PC) phenomemon in the late 70's started out simple. After putting away your soldering iron, you got out pen and paper and started hand assembling machine code. And we liked it!

    At the same time c.1978 a highschool math teacher and a bunch of us took adult education classes at the local university (Durham, UK), where they taught us PL/1, and some of us found a way to hang out at the university after that and started playing with BASIC, then taught ourself C. The big excitement was going from the batch-mode PL/1 class with jobs submitted on punched card decks, with printed green bar fanfold output (maybe just a syntax error) delivered some time later, to being ONLINE sitting in front of a terminal. Whoopee!

    1. Re:Start simple? by Anonymous Coward · · Score: 0

      that was then, the rest of education was good too. Nowadays, its all dumbed down to meet governmental targets that those of us who learnt basic and later learnt other languages were spoilt by a hard educational system and society that expected us to work hard and learn. Today, the 'me' generation expects instant gratification, so that old approach simply won't work. If they can't get anything done instantly, they'll lose interest. Once they've learnt the easy way, there's no incentive to learn more.

      Once, we realised BASIC was just that, good enough for a toy language to play with at an early age before we took up powerful languages. Its no longer the case today.

    2. Re:Start simple? by Anonymous Coward · · Score: 0

      My class started with Basic and even those, who didn't even have their own pcs at home, got into it quite quickly and after a few weeks enjoyed it. Of course there's a large gap to higher programming languages like C or Java which isn't as big as if you'd start with Pascal. But it's really the most simple way to get into programming. For me it was learning the basics like variables or loops with fun.

  31. Lisp/Scheme != latin of programming by Anonymous Coward · · Score: 0

    Considering taxonomy and etymology of most western languages, that is one of the worst analogies I've ever seen. The analogy would imply that, from Lisp, you gain something else, when in fact Lisp itself is built in C and C was built with assembly (at least originally). Lisp couldn't even be the English of the programming world since its neither widely used nor accepted for *most* real world application... I think the best analogy is that Lisp is the Romanian of the programming world... based off of something important but not widely spoken or understood.

    1. Re:Lisp/Scheme != latin of programming by kamatsu · · Score: 1

      Er, Lisp was not originally built with C.

    2. Re:Lisp/Scheme != latin of programming by DrVxD · · Score: 3, Informative

      in fact Lisp itself is built in C

      Errr...no. Lisp originally dates back to the late 1950s; C didn't emerge until the early 1970s. The first working Lisp implementation was writtien in IBM 704 machine language; A Lisp compiler (itself implemented in Lisp) was implemented in 1962 - fully 10 years before the birth of C.

      --
      Not everything that can be measured matters; Not everything that matters can be measured.
  32. Obvious answer by ceoyoyo · · Score: 5, Funny

    The best first language for a young programmer is english with possibly a little bit of boolean logic, because then he could search Slashdot and find one of the Ask Slashdot stories about what the best first language for young programmers is that appear every couple of months or so.

    1. Re:Obvious answer by Anonymous Coward · · Score: 0

      Actually I think there's a point there: Pseudo-Code should be used as a teaching tool in programming courses. Obviously a "real" compiled language needs to be taught since compiled code and a running binary are much more gratifying.

      On the other hand pseudo code can be very effective to introduce the principles of programming and how a problem can be translated/broken down in smaller pieces of code or datastructures etc.

    2. Re:Obvious answer by cenc · · Score: 1

      Yea, they call that formal logic. If you got that, the programing language does not really matter. You can figure it out.

    3. Re:Obvious answer by Dun+Malg · · Score: 1

      Pseudo-Code should be used as a teaching tool in programming courses

      I was forced to take a required "programming logic" class my freshman year. It was entirely pseudo code, it was nothing but hand-tracing, and it was biggest fucking waste of time in the world. The instructor was an old fucking jackass who insisted that "in the real world" we would be required to debug our code on paper before we would ever be allowed to submit it for compilation. This was in 1991. We learned nothing in this class but how to write bad programs in pseudo code. Perhaps my issue was that I could already program in Pascal, Basic, C, and 6502 assembly (and had programming credit on a commercial C64 game title) and there was no option to "test out" of the mandatory introductory courses, but I don't think the beginners got much out of it either--- particularly when they were already all taking Pascal concurrently.

      Pseudo code is a waste of time. Programming logic should be taught with actual computers, using an actual programming language.

      --
      If a job's not worth doing, it's not worth doing right.
    4. Re:Obvious answer by Anonymous Coward · · Score: 0

      Why is this funny? It is true.

      If you're asking the best computer language to learn first, there are 2 thought groups.
      a) assembly so you understand how a computer actually works and appreciate higher level languages
      b) Python. Ruby, PHP so you can create something that is useful and works really quickly. This prevents 1st project boredom. You know, the first project needs to be quick and easy.

      Ask someone in China that has never seen ASCII to program "hello world." Can't happen.

    5. Re:Obvious answer by Anonymous Coward · · Score: 0

      And why does that happen? Because lecturers are too passionate about their current projects and usually don't give a shit about helping Ss' to learn. Another useful thing would be give more jobs to ed graduates who can't get jobs as high school teachers. Obviously Math/Science teachers would be more useful here. If they can't get jobs as highschool math and science teachers, train them up and crash course them in programming. They would do a better job, be less passionate about the research potential and MORE passionate about teaching students.
      There's A LOT teaching Ss'. Trust me on that. It's not enough to be an expert in your field, you need to be able to get the competitve spirit out of your Ss' and make them work harder and push for success.

       

    6. Re:Obvious answer by martas · · Score: 1

      heck, read a bunch of Kant while you're at it.

    7. Re:Obvious answer by ceoyoyo · · Score: 1

      So you had a course from a guy who exaggerated to scare you and you personally thought you were all that so didn't get much out of it?

      Formal logic is very useful, for everything from proper programming to digital design to calculus. It's a required course in all the legitimate computer science programs I've come in contact with.

      Writing pseudocode, which is not exactly formal logic, but is related, is a skill every decent programmer should have. Writing the pseudocode for a difficult algorithm and possibly optimizing it using formal logic techniques helps write less buggy code. It's also critical for being able to properly document your code.

      Using a debugger to get your basic algorithm logic right is a crutch, and a dangerous one.

    8. Re:Obvious answer by ceoyoyo · · Score: 1

      Which is the answer now, and was the answer last month, and the year before. Really, the only change in the answer was about fifteen years ago when "python" replaced "pascal." Fifteen years before that it was "basic." Fifteen years before that (b) wasn't really an option.

    9. Re:Obvious answer by WeirdJohn · · Score: 1

      In other words, you recommend Smalltalk. But seriously, for the very young, Squeak with EToys is a great first language. But when you need to get close to the metal, other languages are better learning tools. And for 15 year olds, I don't know that the simplicity of Smalltalk would be doing them favours.

  33. Lua by Teckla · · Score: 2

    There are lots of good choices for a first programming language these days, but I thought I'd chime in and suggest Lua for consideration.

    Lua is free.

    The Lua interactive interpreter makes exploring and learning the language a pleasure (much like the Python interactive interpreter).

    There are excellent and up-to-date free tutorials for Lua available online.

    Lua integrates easily with C, giving you trivial access to any low level OS features you need.

    The language is a pleasure to use. It just feels right.

    Give it a shot. You won't be disappointed. :-)

    1. Re:Lua by misof · · Score: 1

      I gave Lua a shot, several years ago. Was disappointed, quite a lot. Did not feel right to me at all. In fact, I soon found myself fighting it on many occasions. At that point in time, read() was *silently* failing for binary data. Took me quite some time to figure out that this is causing the unexpected behavior I observed. During the process, I read some reference and found nothing. Only some googling after I knew what was going on got me to a page that, among other things, addressed this issue with a laconic "binary read() is expected to work in Lua 5". That was enough to push me over the edge, I left Lua and never looked back, and I'm perfectly happy with that decision. Which only goes to show that there is no silver bullet, no "universally great first programming language", I guess.

    2. Re:Lua by Jamie+Lokier · · Score: 1

      Lua integrates easily with C, giving you trivial access to any low level OS features you need.

      Last time I looked, you could only access OS features by writing C yourself and tying it into Lua.

      Lua's native support for OS features was very weak, being a minimal language and all.
      Even file I/O was quite limited.

      Lua integrates with C in the sense that it's quite easy to write C code which can be called from Lua, and vice versa.

      But that means you need to learn C too...

      (Unless it has grown a new "can call ordinary C functions without you writing any glue" capability since I looked).

    3. Re:Lua by harishjp · · Score: 1

      Its been about a week since I started using lua. I found it to be filled with surprises. The concept of starting indexing with 1 is pathetic. The fact that getn on a table does a linear scan and need not be correct. I would not suggest lua to anyone. Once you learn lua you have to unlearn lot of things before you can move to a real programming language.

      Starting with scripting language is good. Python is a good choice, cross platform and can be learnt in small increments. Only issue with python is lack of strict variable mode resulting in bugs which are hard to debug.

    4. Re:Lua by JosedeNoche · · Score: 1

      didn' t know there was a languaje made from brazilian programmers, indeed it looks atractive, considering that looks like a fusion between C and Pascal...let give it a shot!! thanks for the info =)

    5. Re:Lua by MynockGuano · · Score: 1

      Agreed! Also, the source code for the language (written in C) is very digestible, well-commented, and easy-to-read. A great second step.

       

      The language is a pleasure to use. It just feels right.

      That quote sums it up perfectly. There's just something about the language that "just works" for me, at least.

  34. Logo all the way! by Anonymous Coward · · Score: 0

    FD 50
    RIGHT 90
    FD 50
    RIGHT 90
    FD 50
    RIGHT 90
    FD 50

    There are a number of good and free logo interpreters around. I like FMSLogo (http://fmslogo.sourceforge.net/)

  35. Quit knocking the hacker ethic... by tjstork · · Score: 5, Insightful

    People that knock the hacker ethic are a bunch of MBA drones that could never really build a damned thing themselves.

    You learn to program by diving in and doing it. The more you practice and study, the better you get at it. GM was very good at shackling some very brilliant engineers and turning them into process drones. Look at where it got them. Great things are built by individuals and the more steps you have in the way of people being individuals, the worse you will get. Products have to be owned by the engineers that make them and they are personal works of art.

    At the end of the day, the managers, bean counters, and all of these other people with their measurements, metrics and fancy charts are so much fluff, a tax on the capable in society... by really a bunch of leaches that could barely feed themselves as they lack the mental self sufficiency to do anything other than to try and ride the labor of others. We condemn socialism in society there's no real difference between the PM in a three piece suit and the lowest of the homeless people. Neither add any real value to society, its just that, the PM knows how to use PowerPoint and the homeless guy does not.

    --
    This is my sig.
    1. Re:Quit knocking the hacker ethic... by Anonymous Coward · · Score: 0

      I'm not an MBA I'm a Software Engineer.
      The problem with the hacker ethic is that it often produces unmaintainable code. I find that by spending some time thinking about the software before you build it will save you double the time later. One thing that I see alot around school is people writing very purpose built software pieces. This often hurts them later on when they find they need things like linked lists, b-trees, or even terminals and have to write them anew.

    2. Re:Quit knocking the hacker ethic... by Anonymous Coward · · Score: 0

      Criticizing the hacker ethic is like saying it's wrong for a runner to start by moving their legs or an artist to start by picking up a pencil. The first step to becoming good at anything is discovery, not rules. Completing the journey to greatness involves learning (or creating) the rules, but that is a later step.

    3. Re:Quit knocking the hacker ethic... by Progman3K · · Score: 0, Offtopic

      I find your views intriguing and wish to subscribe to your newsletter

      --
      I don't know the meaning of the word 'don't' - J
    4. Re:Quit knocking the hacker ethic... by Gravis187 · · Score: 3, Interesting

      This comment is amusing to say the least. I have both a CS degree and an MBA, so I see both sides.

      First of all, I agree with the comment about diving in and doing. You can memorize the syntax of a language all day long, and until you apply the language to a problem, its useless.

      That (and some of the stuff in your link) is about all we agree on. I read you comment and I know EXACTLY your type. You are bitter because you have barely moved through the chain. You wonder why you work so hard and make "little money", or at least what you consider little money, while men in 3 pc suits, according to your skewed perception, seem to do nothing and make loads and take nice long vacations. When in fact, in alot of CS cases, they have to clean up the confusing messes that many programmers create and make the pallatable for the 99% rest of the population who have to deal with user interfaces designed with some fucked up logic.

      The fact is, it has nothing to do with socialism or some society pecking order, or some conspiracy, or being able to do your boss's job. Its your shit attitude and likely awkward personality. You don't think anything is wrong with you, but your boss and his boss and others see you that way, just like I see it in my folks. I assure you that while we manage them, they will never move up from their position until they change, and its likely never, because the problem never lies with them, even as people come in below them and move up past them year after year. Its stupid company policy or my boss is a chimp, or blah blah blah, save it, we don't care. Go get another job if you don't like it.

      The other fact is that no matter how clear we make ourselves when we want something built, unless we tell some of our programmers every single fuckin error that is out there, some just dont do it themselves. It is frustrating, and they take the human element out of every program. When programs are written so that even MBAs/PhDs with CS degrees are confused by the logic and user functions of a simple program, that says alot. Instead of putting in error messages with error numbers and creating awkward user interfaces, consider the dumbest person using the software, put yourself in their shoes, and design the thing. Until then, programmers like that will never get respect, deserved or not.

      Ok.

    5. Re:Quit knocking the hacker ethic... by Blakey+Rat · · Score: 2, Interesting

      People that knock the hacker ethic are a bunch of MBA drones that could never really build a damned thing themselves.

      MBA "drones" build things all the time. You just don't understand what, because they use human beings as their construction material.

      You learn to program by diving in and doing it. The more you practice and study, the better you get at it.

      You learn some things, but not others. You'll never learn how to write maintainable code this way.

      GM was very good at shackling some very brilliant engineers and turning them into process drones.

      GM suffers from disfunctional management, poor marketing (that did nothing to turn-around public opinion on American car quality), and labor relations. Engineering wasn't the problem. (Now design-- that was a problem. Any company that could think something like the Aztek was worth buiding has big, big design problems.)

      Great things are built by individuals and the more steps you have in the way of people being individuals, the worse you will get.

      Bullshit. All great films, for example, are collaborations. All great buildings are collaborations. All great legislation are collaborations.

      The software industry has had a couple instances where a single person has built a great product... the only one I can think of off the top of my head is Napster. But that is the exception, and not the rule.

      That said you're kind of on the right track here. The role of a *good* MBA-type is to keep the everyday distractions away from the developers/engineers/whoever so they can get on with their work. That's one of the reasons Microsoft has been so successful. (Another is something else you imply: Microsoft developers *own* the features they are assigned.)

      At the end of the day, the managers, bean counters, and all of these other people with their measurements, metrics and fancy charts are so much fluff, a tax on the capable in society... by really a bunch of leaches that could barely feed themselves as they lack the mental self sufficiency to do anything other than to try and ride the labor of others.

      Wow. Tell us how you really feel.

      I'd assume the more geeky a person, the *more* bean counting and measuring they'd want, since it removes a lot of the guesswork currently done in business. (Especially in certain industries, like marketing.) Without the measurement part, how do you know your code answers the need? How do you know it's easy to use? (Of course, considering your general attitude, I'm sure you don't give a shit how easy-to-use it is.) How do you know bugs are getting addressed in a timely manner?

      Without a project manager, how do you get a project of any decent size done? Do you think Microsoft could have built, say, MS SQL without a single project manager? How would that have even worked?

      Also: Where do you work? Do you get promoted, with this attitude of yours? Or have you been stuck in a basement for a dozen years, writing barely-maintainable hard-to-use code at the same payscale you were at when you were hired?

    6. Re:Quit knocking the hacker ethic... by tjstork · · Score: 1

      MBA "drones" build things all the time. You just don't understand what, because they use human beings as their construction material.

      But you see, they don't... that's the thing. The whole purpose of the MBA is to be a leadership certificate, that says, they should be able to build things out of people and if they could really do that, that would be great. Building successful human organizations is a good skill, for sure.

      My point is, if you look at the country, you can see that for the most part the MBA class has largely failed. Most of the new success America has had is because of geeky types partnering with people that know how to sell. Apple - Woz + Jobs, Microsoft - Gates + Allen, and in fact, historically, most great American institutions have been made by that once in a billion thing, of a geek that can sell. Henry Ford, George Westinghouse, Thomas Edison, geeks, but they could sell. Bill Gates even, geek, but he can sell.

      The MBA types, really don't have much success to show for it. There's Scott McNealy as an MBA, but he's so good of a salesguy (I've seen him in person), that honestly, he could have a degree in termite counting and he'd still be successful. But everywhere else, MBAs dominate the culture of established companies and from them you hear the gradual wheezing of organizations slowly dying and with them a country slowly sinking.

      If MBAs were so good, then the organizations they build would be winning, but they are not. At some point you have to ask, is the educational system that produces these people preparing them properly and I think the is so staggeringly no that I don't see how could rationally argue otherwise.

      Where's the profits?

      Also: Where do you work? Do you get promoted, with this attitude of yours? Or have you been stuck in a basement for a dozen years, writing barely-maintainable hard-to-use code at the same payscale you were at when you were hired?

      I'm actually a successful consultant. I partner with people that know how to sell and gladly work for them. I get paid, they get product, and, all the way around, its a good deal. I will work 24x7 doing anything I can do that the sales guy puts on the table and happily so and I have no problem with them taking a share of my rate... they can sell, and that's a deal worth making any day of the week.

      In the meantime I have my own web site and product suite that I building and if I can make a living off of that, then, great. If I come up with a product that sells, that's great. If not, well, I just want good enough, and that's just the way it is. There's nothing to be bitter about, and everything to be grateful for, because I had the opportunity to try, and most people around the planet do not ever get even that.

      My point of anger towards MBAs is that, they hold themselves up to be a leadership class, and, I'm not seeing the success that drives the arrogance. The way I see things, if you are in a race, and you are in the lead, economically, you should be putting distance between yourselves and your competition. As it is, America finds itself getting closed in on by people and usually when yo u see MBAs moving in, they are sorta closing up shop, sending things overseas, selling things off that they can't understand, and not ever really being entreprenuerial or creating new products or solutions.

      So I'll say it again, I'm not against people skills or salesmen, but just that, MBA doesn't prove either. Quite frankly, if someone was that good of a salesman, they would be successful whether they had the MBA or not. Good car dealers make more money than even VPs at a lot of companies.

      You can either make, or you can't. Or you can sell, or you can't, and an MBA doesn't really give you either and I think the country is delusional in believing in a class that can't really do anything.

      --
      This is my sig.
    7. Re:Quit knocking the hacker ethic... by Anonymous Coward · · Score: 0

      I agree that "office drones" aren't very useful, but stating that the only thing you need to make money is a good product is silly.

      Ok, you've made X program that solves the world's miracles.

      How does Bob the consumer know it exists? If its a new market (which most innovative software is), how does Bob the consumer know what it does for him? Now that Bob the consumer is interested, where does Bob buy your box? How do you print the box that Bob buys? Who writes the little manual? Who distributes your product to Big Box Store? Who writes all the papers so the IRS is happy? Who sits at the phone and waits for Bob to call and tell you his shit is broke? Who hires all of these people? Who trains all of these people? How do you keep all of these people happy? How you make sure Bob or any of your people don't sue you? How do you make sure Macrosoft's new product that copies yours doesn't take over?

      You know the joke:

      Do XXX
      ???
      Profit!

      You see all of those question marks? Those stand for all the shit you have no clue about.

    8. Re:Quit knocking the hacker ethic... by jeffliott · · Score: 1

      Two things:

        * Bad experiences with management, eh? We've all been there. Good management is hard to find, but when you do, latch on and enjoy the ride to success. I appreciate good MBA "drones" because they do a crap ton of the work I don't want to do myself, and regularly put on a face to customer's that I myself just simply could not do sanely as a job.

        * The hacker ethic is good for some parts of some jobs, but it is naive to think it is always superior to an effective process.

    9. Re:Quit knocking the hacker ethic... by Blakey+Rat · · Score: 1

      This response is a lot less insane than your previous one. For example, when reading this one, my mental image of you didn't involve spastic hand-waving and foam coming out of your mouth.

      But I still think you're being stupid, or at least missing something. An MBA is just a degree. Some people with MBAs are good at what they do, and some are terrible at it-- just like any other degree!

      I've met people who have computer science degrees who can't code a FOR loop. For some reason those people always like to come interview at my company, and it makes this college drop-out feel really smug to deny them. But anyway.

      If you're angry at useless middle-managers, and I don't think anybody will disagree that these people exist in most companies, then say so. Don't blame an entire degree program for the phenomenon; useless middle-managers were around long before MBA degrees existed.

      I also think you need to go visit more tech companies, preferably ones on the west coast. Very few tech companies on the west coast have useless layers of management, that's why they pretty much kick-ass at it. (East-coast companies, on the other hand...)

    10. Re:Quit knocking the hacker ethic... by tjstork · · Score: 1

      An MBA is just a degree. Some people with MBAs are good at what they do, and some are terrible at it-- just like any other degre....I've met people who have computer science degrees who can't code a FOR loop

      Doesn't that tell you something about our educational system? Why is that? I've met guys that have written programming -books- that actually could not put together a project. My boy had a tech book and a tech web site that was all about snippets of code and we thought he was really good and grabbed the guy, but it turned out that all he was really good for was in fact, snippets.

      I also think you need to go visit more tech companies, preferably ones on the west coast. Very few tech companies on the west coast have useless layers of management, that's why they pretty much kick-ass at it. (East-coast companies, on the other hand...)

      I could see that. The East Coast is almost byzantine in management and you would find that the financial services company tend to be the worst at it. That's really where my beef is at. On the other hand a good utility out east, like Delmarva Power, Exelon Corp, etc, are probably some of the best IT environments to work for in a classic corporate settings.

      --
      This is my sig.
    11. Re:Quit knocking the hacker ethic... by jawahar · · Score: 1

      Engineers think in terms of RIGHT/WRONG and MBAs think in terms of PRIORITIES.

    12. Re:Quit knocking the hacker ethic... by Anonymous Coward · · Score: 0

      You learn to program by diving in and doing it. The more you practice and study, the better you get at it.

      You learn some things, but not others. You'll never learn how to write maintainable code this way.

      You sound like a phenomenally boring person.

      The best thing a programming introduction can do is to create enthusiasm for programming. And learning better programming is really all about doing it, and reading some books on the side. An unapplied concept is forgotten in a heartbeat.

    13. Re:Quit knocking the hacker ethic... by Anonymous Coward · · Score: 0

      People that knock the hacker ethic are a bunch of MBA drones that could never really build a damned thing themselves.

      You learn to program by diving in and doing it. The more you practice and study, the better you get at it. GM was very good at shackling some very brilliant engineers and turning them into process drones. Look at where it got them. Great things are built by individuals and the more steps you have in the way of people being individuals, the worse you will get. Products have to be owned by the engineers that make them and they are personal works of art.

      At the end of the day, the managers, bean counters, and all of these other people with their measurements, metrics and fancy charts are so much fluff, a tax on the capable in society... by really a bunch of leaches that could barely feed themselves as they lack the mental self sufficiency to do anything other than to try and ride the labor of others. We condemn socialism in society there's no real difference between the PM in a three piece suit and the lowest of the homeless people. Neither add any real value to society, its just that, the PM knows how to use PowerPoint and the homeless guy does not.

      People that knock the hacker ethic are a bunch of MBA drones that could never really build a damned thing themselves.

      You learn to program by diving in and doing it. The more you practice and study, the better you get at it. GM was very good at shackling some very brilliant engineers and turning them into process drones. Look at where it got them. Great things are built by individuals and the more steps you have in the way of people being individuals, the worse you will get. Products have to be owned by the engineers that make them and they are personal works of art.

      At the end of the day, the managers, bean counters, and all of these other people with their measurements, metrics and fancy charts are so much fluff, a tax on the capable in society... by really a bunch of leaches that could barely feed themselves as they lack the mental self sufficiency to do anything other than to try and ride the labor of others. We condemn socialism in society there's no real difference between the PM in a three piece suit and the lowest of the homeless people. Neither add any real value to society, its just that, the PM knows how to use PowerPoint and the homeless guy does not.

      YEAH, I totally agree!!!

    14. Re:Quit knocking the hacker ethic... by Anonymous Coward · · Score: 0

      I have both a CS degree and an MBA, so I see both sides.

      One could argue that by having both degrees you demonstrate that you see neither side. Hacker and MBA are two opposed roles, with two opposed motivations. The intersection of hackers, who are driven by curiosity and a desire to create, with MBAs, driven by greed, sloth and incompetence, is the null set. Perhaps you got your CS degree before the bubble burst, when it seemed that any huckster could become an internet millionaire with little inconvenience.

  36. Teach him C by jrothwell97 · · Score: 2, Interesting

    Buy him a copy of C for Dummies and have done with it. C is kind of like the Latin of programming, except it's easier to learn than Latin.

    I would have suggested BASIC around a decade ago, but I can't think of a modern BASIC implementation that's neither horrendously complex for a new programmer or insanely outdated.

    --
    Those using pirated Tinysoft signatures(TM) are a real threat to society and should all be thrown in jail.
    1. Re:Teach him C by NervousNerd · · Score: 1

      I would have suggested BASIC around a decade ago, but I can't think of a modern BASIC implementation that's neither horrendously complex for a new programmer or insanely outdated.

      JustBasic is a nice (somewhat) modernized version of BASIC.

    2. Re:Teach him C by phantomfive · · Score: 1

      Honestly, I would suggest the book, The Absolute Beginner's Guide to C. I've seen several non-programmers have great results with it, including one who had absolutely horrible English.

      --
      Qxe4
    3. Re:Teach him C by Anonymous Coward · · Score: 0

      "I can't think of a modern BASIC implementation that's neither horrendously complex for a new programmer or insanely outdated."

      I can, it's called Visual Basic.

    4. Re:Teach him C by Anonymous Coward · · Score: 0

      Wahahaha "C for Dummies" is hardly something you should suggest as C-primer.

    5. Re:Teach him C by Nethead · · Score: 1

      I'd opt for QuickBASIC. No GUI but no line numbers either.

      --
      -- I have a private email server in my basement.
    6. Re:Teach him C by Anonymous Coward · · Score: 0

      Latin isn't hard to learn at all. There's barely any irregular words.

    7. Re:Teach him C by Anonymous Coward · · Score: 0

      "I can't think of a modern BASIC implementation that's neither horrendously complex for a new programmer or insanely outdated."

      Think again.

    8. Re:Teach him C by orzetto · · Score: 1

      EGO LOQVOR LINGVAM LATINAM, TV INSENSIBILIS STVLTVS!

      (I'm not yelling, Slashfilter, Latin is in all caps. I'm not yelling, Slashfilter, Latin is in all caps.)

      --
      Victims of 9/11: <3000. Traffic in the US: >30,000/y
    9. Re:Teach him C by quantic_oscillation7 · · Score: 0

      It is practically impossible to teach good programming style to students that [sic] have had prior exposure to BASIC; as potential programmers they are mentally mutilated beyond hope of regeneration. -- Dijkstra

    10. Re:Teach him C by Anonymous Coward · · Score: 0

      Actually, C is kind of like the French or German of programming. It's still one of the most popular (âzspokenâ) programming languages out there.

  37. Now for a different approach... by Samuel+Dravis · · Score: 1

    Instead of lots of /opinions/ on the matter, how about someone do a study to find out which language actually does turn out the highest quality programmer. That's the only way this question will ever get settled.

    1. Re:Now for a different approach... by maxume · · Score: 1

      Quality quickly becomes subjective. Something like bugs/operation is a useful metric, but then you have to decide if the programmers productivity matters, if the severity of the bugs matter, if the clarity of the code matters, and it just keeps going.

      --
      Nerd rage is the funniest rage.
  38. anything ... by petes_PoV · · Score: 1
    ... that doesn't need an IDE, require objects or lots of definitions and has a printable form will do fine.

    The reason I exclude the above three attributes is that they lengthen the learning curve to getting a "hello world" program written and working. If a newbie's first exposure to programming is spending hours in a classroom without producing any output, the teacher will start to hear CLICKing noises after the first five minutes as the children switch off (metaphorically speaking). After that, they're lost.

    --
    politicians are like babies' nappies: they should both be changed regularly and for the same reasons
  39. scratch by JavaTHut · · Score: 1

    http://scratch.mit.edu designed explicitly for this

    1. Re:scratch by kjenks · · Score: 4, Interesting
      I'm a father of three and a college professor teaching computer programming, and I've found that Scratch is a very good "language" for teaching programming. It shows programming concepts such as looping, variables and interfaces in an immediately accessible and kid-friendly manner. It includes multimedia and event-driven programming capabilities. It uses the best features of immediate feedback of success and visible results to encourage exploration and fun.

      Programming in Scratch helps kids

      • start simple and do complicated things later
      • create an animation for telling a story, playing an interactive game, or a video to share on the web
      • jump right in and understand the basics like variables, loops, arrays, etc, without getting bogged down in an over complex or restrictive language
      • learn to program by diving in and doing it
      • impress their friends

      During the directed learning that takes place in a Scratch-oriented curriculum, the teaching team can introduce another programming language to show how syntax-oriented programming languages can perform the same tasks as the graphics-oriented systems. Any programming language can serve as that second language.

      I find it a bit ironic that the best language for teaching programming languages isn't a language at all.

    2. Re:scratch by Teancum · · Score: 1

      One of the things that amazes me with the Scrach development community is the drive to push the environment for programming concepts that the environment wasn't originally intended to handle. Among the items (surprisingly added is after the community got them working in previous incarnations of the environment) included multi-dimensional arrays, trignometric function, variable sorting, and calculating the square root of a number. Scratch is arguably Turing complete, although it does lack (for a good reason) access to I/O functions that would make it a more functional language... mainly being able to perform hard drive read/write access.

      Still, I would argue that for those folks who are only interested in seeing how computers and getting a small taste of programming, this is a good way to get started without having to learn one of the "traditional" programming languages.

  40. It's the book, not the language! by TrollHammer · · Score: 0

    There is no good answer, I am afraid. It depends a lot on the combination of language plus books plus your "teacher" (if there is anyone teaching you). The language is only one part of the learning process, and not the most importante one, IMHO.

    I think that the reason for Scheme plus SICP to be quite popular in the States' universities is that SICP is such a good book. For instance, in Spain, the most popular "learning languages" are C/C++/Java and Pascal. (the first language I was taught was Modula2); however, the books that are used in the Spanish universities are horrific. Does that mean than Scheme is a better language for learning how to program? No, it only means that the sources for in Spanish for learning how to program with C or Pascal are much worse.

    At the end of the day, the combination of teacher plus book is much more important than the language itself.

  41. Objective-C of course by dingen · · Score: 1

    So he can program stuff for his iPhone and impress his friends. Impressing your friends is (in my opinion) the best motivator for learning something difficult.

    --
    Pretty good is actually pretty bad.
    1. Re:Objective-C of course by colinrichardday · · Score: 1

      How do you install your apps on an iPhone? Wouldn't you have to go through Apple's store?

    2. Re:Objective-C of course by dingen · · Score: 1

      You can install apps you develop yourself on your own iPhone without any interference from Apple. You only need the App Store if you want to distribute your application.

      --
      Pretty good is actually pretty bad.
    3. Re:Objective-C of course by colinrichardday · · Score: 1

      If I can install something on my own iPhone, can't I install it on someone else's as well? Not that I own an iPhone.

  42. JavaScript/HTML by KrackerJax · · Score: 3, Interesting

    One not-so-obvious candidate: JavaScript and HTML.

    Pretty much every browser in existence supports JavaScript, so with nothing more than a simple text editor and your browser of choice you can be off and running. As far as beginning programming is concerned, JavaScript easily encompasses any programmatic constructs you'd need.

    The best part is that the students can easily display the results of their test programs in HTML, either dynamically generated or just by manipulating some divs, textboxes, tables etc that they've written on their page. Additionally, an instructor could write a 'playground' bit of HTML and JavaScript, so all output variables are bound up and easy to access. At that point the student is free to focus on what really matters, his/her first logic routines. When the student has created his first masterpiece, sharing the accomplishment with parents/peers is as simple as sharing a link to their HTML file.

    I think this has the potential to engage students much faster than observing console output or fighting with a front end like windows forms in VB or Swing in Java.

    --
    Sauer
    1. Re:JavaScript/HTML by chdig · · Score: 2, Interesting

      For some reason, the parent has been modded "flamebait", so I've got an urge to defend and second the motion for Javascript as a great language to learn on.

      First, JS is what powers the web, and is both a simple language to understand the basics of, and a complicated one to continue learning from. Along with HTML it can be easy to prototype ideas and have instant results, which can be very helpful for inspiring young programmers.
      Secondly, it's object-oriented in a very different and arguably more powerful manner than many traditional c-type languages. I'm constantly amazed at how little traditional programmers "get" the power and concepts of Javascript's object-oriented programming, and is a good reason it should stand on its own as a good language to learn on. Flash's ActionScript is very similar, so the transition in that direction would be easy, while the move to more traditional languages could also be made once basic concepts are understood.

      ...
      I learned programming from Basic on an old C-64 -- by all means a terrible language compared to the standards of C, with many limitations and which can create some bad dependencies -- but it certainly inspired me enough to continue and learn other languages (turing/pascal/C and on) as my programming whims required more functional toolsets.

      In a way, I see Javascript as the accessible language of today as Basic was back then, only far more powerful. With that as a starting point, any bright, driven programmer should be able to progress down the line to more raw languages as their interest takes them.

  43. There can be only one by rolando2424 · · Score: 2, Funny

    COBOL

    --
    Okay seriously I've just run out of pointless things to say.
    1. Re:There can be only one by Anonymous Coward · · Score: 0

      COBOL and System/370 JCL. And use two hands to carry that box of punch cards to the computing center!

    2. Re:There can be only one by rolando2424 · · Score: 1

      You want to sugar-coat it by using punch cards?

      I say give them a list of opcodes and a piece of paper to write in.

      --
      Okay seriously I've just run out of pointless things to say.
  44. Learn two concurrently by The+Solitaire · · Score: 1

    Having been in the situation of starting to program when I was about 15, I can say that there is almost certainly no 'perfect' language to start aspiring programmers off on. Indeed, I'm still kicking some of the bad habits I learnt from my first language (PHP), and I now do this professionally.

    I'd say the best option is probably to try and learn/teach two languages side-by-side - preferably two that have completely different approaches to programming. The first should be something that allows one to easily learn the fundamental Computer-Science stuff - functions, lists, trees and recursion - and languages like Lisp, Scheme or Haskell - by their nature - lend themselves well, although C can also serve at a pinch.
    The second should be some sort of practical/pragmatic programming language, that one can learn how actual everyday programming works in. I'd honestly stay away from Java or C for this - C is scary for actually *doing* stuff when you first start to program, and Java is overly complex. Run with something like Ruby or Python, which give you a good grounding in Object Orientation, and allow a newbie to actually accomplish something. You could also use PHP if the kid's into the Web, as a lot are these days (though make sure you still teach them the OO way of doing things, as opposed to purely procedural.

    Once you've got those down, you can happily jump into languages like C/C++ and Java, and start making more than just the toys that all newbies make.

  45. BASIC, Python, C by Zobeid · · Score: 1

    I had to laugh at the suggestion of Scheme. . . It's absurd for a whole long list of reasons. But then, I've never been a fan of the ivory tower "comp sci" approach to programming. Furthermore, scheme is NOT the "Latin" of computer languages. That distinction should go to C. (Then Objective C, C++, C#, Java, Vala and the rest of their ilk are the Romance Languages.)

    A beginner's language shouldn't be too funky. Scheme is a list-processing language (a variant of LISP, in fact) which makes it fundamentally different from almost every other programming language that you're ever going to use for any practical purpose. As another example, I'd rule out Forth for similar reasons. A beginner should learn a procedural language, which means something from the (very large) family of BASIC/Pascal/C and their many descendents, et cetera.

    A beginners language ought to have an editor and IDE that's easy to learn -- preferably buit-in, or installed with the language. Trying to learn with a generic text editor and a command line sucks. An easy API to do some interesting things with (more interesting than outputting ASCII text) is also a big plus. It shouldn't be GUI-oriented, though. That's just a big can of worms that a beginner doesn't need to open up yet.

    A beginner's language shouldn't be OOP -- or at least, shouldn't push OOP in the programmer's face, the way Java does. If the OOP features are sort of hidden and won't bother anybody who doesn't want to mess with them, that's OK. But I can't state this strongly enough -- you shouldn't have to grasp the whole OOP concept (which doesn't come easily to many people) in order to start learning to program. It can and should come later. (Structured programming, on the other hand, should be there from day one.)

    Despite all the hating on BASIC, it used to be pretty good at what it was designed for -- introducing beginners to programming. I'm excluding the early "sphaghetti code" versions of BASIC here, and I'm also sort of reluctantly excuding the newer GUI-OOP oriented versions of BASIC. BASIC has mutated a bit too much from its original mission.

    However, I have very fond memories of GFA Basic on the old Atari ST -- it offered structured flow control (no line numbers) almost like Pascal, as well as a very friendly editor/IDE and inbuilt API -- but no OOP features. It met every one of the criteria that I outlined above, and it was great for learning. It was also a great stepping-stone to C, which was the next logical step in those days. It's just too bad, I don't see anything much like GFA Basic out there today.

    I might suggest (as the author of TFA did) Python as the closest counterpart today. It's designed to be easy to learn (like BASIC was), it has OOP features but you can ignore them, and it appears that some pretty good IDEs and APIs (non-GUI!) are available for beginners to play around with. It's a bit of nuisance that you have to locate and install Python, then locate and install your IDE, then locate and install your chosen API. . . And the APIs like SDL and Pygame are more complicated to learn, I think, than doing graphics in GFA Basic ever was. . . But from what I can see, it's just about the closest modern equivalent.

    1. Re:BASIC, Python, C by binary+paladin · · Score: 1

      Why, may I ask, is OOP bad to learn from the start? What makes procedural better for the budding programmer?

    2. Re:BASIC, Python, C by spiralx · · Score: 1

      GFA Basic was what got me properly into programming, thank you ST Format magazine!

      But now I'd also go with Python, it's the only language that I've used that just lets you get straight into the fun bits of coding and doesn't get in your way. Especially with IPython :)

  46. Basic is easy, but C is awesome... by Anonymous Coward · · Score: 0

    I started with QuickBasic in middleschool, and in highschool I did VB, Pascal, Python, Java, and even some Touring. But it wasn't till I did C in College that a lot of the major concepts sunk in. I really believe C is a great place to start after that experience.

  47. Depends by Anonymous Coward · · Score: 0

    If your goal is to get them going, then a very high level language is a good choice, but if you want them to understand how computers work and how high level languages do the magic then assembly is the best starting point. After all, it's what computers execute, even when the programmer writes LISP, Javascript or C code. It is a steep learning curve and a virtual processor is an advisable learning environment to keep the frustration level acceptable, but once you know what the processor does, high level language concepts are much easier to understand.

  48. You might as well just... by Anonymous Coward · · Score: 0

    Download Game Maker 7. :D

  49. Comparisons of languages for CS-1 courses by david.emery · · Score: 1

    John McCormick (http://www.cs.uni.edu/~mccormic/) has published several papers comparing Ada to other languages and documenting his successes using Ada in undergraduate programming classes. So there are some published studies, and McCormick's results are pretty impressive for first-year programming classes.

    Some of the advantages include: * unforgiving syntax - preventing confusions like "=" and "=="; * compile-time type checking; * easy to bring in support components ("packages" in Ada) to provide complex operations (such as I/O formatting) that otherwise would get in the way of the problem at hand; * a concurrency model that is easy to reason about (OK, maybe not for a beginner programmer, but still a huge advantage as we look at a multi-core future...); * a pretty large collection of reusable components; * an integrated exception handling model, so behavior when a runtime problem is detected is a lot easier to understand (particularly with stack traces).

    Java has some of these same benefits, particularly the ability to bring in existing packages, but Java is handicapped by its C syntax which makes it easy for beginners to make mistakes, and the type model (particularly weakly-typed scalars) doesn't provide as much compile-time diagnosis.

    A big part of Ada's success is the amount of things that the compiler can check for you. It's a lot easier to find and work off compiler errors (even more so when the compiler provides good error messages) than it is to try to debug a program at runtime.

    dave

    p.s. I really believe learning to read code, and having a language that is easy to read, is really important. I learned more about programming by reading, taking apart and modifying the old "Star Trek" BASIC program (in the mid 70s) than I did in my introductory programming classes.

  50. Python by DoctorPepper · · Score: 1

    One of my friends asked me to help his younger brother become acquainted with programming, so I downloaded several "free" language installers (all for Windows), their documentation (as available) and tutorials, burned them all onto a CD and gave it to him. I advised him to install all of them (Python, Perl, Ruby, Java), and play around for a while to see which one(s) interested him the most.

    After a few weeks of playing around, reading the tutorials and such, he decided that Python was the language he felt the most comfortable with, and I then bought him the "Learning Python" O'Reilly book, to help him get more of the nuances of the language. I was also available to help him with any questions he might have had, during this learning phase.

    Fast forward a couple of years. Said younger brother has now graduated from high school, is going to college part-time, working on a Computer Science degree, and has a full-time job with a software company in the area. He works mainly in Python and Objective-C (for iPhone and iPod Touch development), but is also learning Java, so he can work with the Android SDK.

    Is Python the best language to learn programming with? I can't answer that, but I can say it worked wonders in this instance.

    --

    No matter where you go... there you are.
    1. Re:Python by Abcd1234 · · Score: 1

      Python is better than Perl because for beginners would takes weeks just to learn all the different possibilities of IF branches in Perl.

      Because, when teaching a language you have to teach the *entire* language? Well, sucks to be a C++ programmer.

      Seriously, that's the dumbest anti-Perl argument I've heard yet...

      It is not as hard-core as lisp or smalltalk

      Hard core? What? Smalltalk is *dead easy* to learn, and syntactically extremely simple and consistent. It's certainly no more difficult than any other OOP language, and as a plus, you don't have to worry about compilers, IDEs, and all that other garbage. Heck, Squeak + E-Toys is *explicitly designed as a learning environment*.

    2. Re:Python by binary+paladin · · Score: 1

      I prefer Ruby to Python in a big way, but the O'Reilly "Learning Python" is above and below my preference for teaching anyone (young or older) who is interested in getting in to programming. Whitespace issues can be a little frustrating, but aside from that Python is a good starting language that can go in virtually any direction. Web dev? Check. Simple games? Check. GUI? Check. A whole host of available libraries? Check. And that book is great. The tone is very friendly and I just found that, in general, the author introduced concepts in a good order and very well and clearly.

      Nowadays I like to point people interested in programming at Python and fiddling with the web since it offers pretty quick results in a tangible way, practical skills that are in demand and going along with the web is generally database access and string processing which are very useful in most places.

      I dunno that Ruby is a great place to start and "the Pickaxe book" is not exactly a great place to start. O'Reilly put out "The Ruby Programming Language" but that's not exactly an intro. (Good book though.)

  51. Python?? No...! by Joce640k · · Score: 1

    I'm pretty sure a 15-year-old isn't going to want to do "scripting", he's much more likely to want to do 3D graphics.

    I'd suggest one of the 'game programming' Basics that are out there or even start by doing game mods.

    --
    No sig today...
    1. Re:Python?? No...! by INeededALogin · · Score: 2, Interesting

      I'm pretty sure a 15-year-old isn't going to want to do "scripting"

      Not all 15 year olds are gamers. My first script was for an eggdrop. I also knew several young kids on IRC who scripted for mIRC. Scripting is great because it yields quick results, allows you often to see others code, and gives functional results.

      With the ADD world we live in, the investment needed to see results in a 3D graphics world is going to be a hard sell.

    2. Re:Python?? No...! by Ragzouken · · Score: 1

      Python can do 3d graphics with Pyglet, a library that abstracts OpenGL.

    3. Re:Python?? No...! by Dun+Malg · · Score: 1

      That mindset is what brought us Logo, one of the most awful things ever to grace the curriculum of mandatory "computer literacy" classes. There's nothing wrong with the language per se, but it's almost never taught as a simple version of Lisp, but rather as a "tell dah turtle to drawr U a purty pitcher" scriptable graphics pen. Likewise, all graphics oriented, Basic syntax inspired languages do is give you quick access to a very limited and circumscribed programming space. It's like suggesting paint-by-numbers to someone who wants to be an artist. In order to do anything complex with 3D graphics, you really need a strong grounding in just plain nuts-and-bolts programming first. It's true that many 15 year olds aren't going to be very interested in learning about string handling or stacks or the like, but if they're not, then they're not actually interested in programming, are they.

      --
      If a job's not worth doing, it's not worth doing right.
    4. Re:Python?? No...! by binary+paladin · · Score: 1

      Logo was great. I dunno that I'd recommend it for a 15-year-old but Logo was my first language at 6. I didn't even really realize I was programming. It sparked my interest in solving problems that mattered to me then. How do I draw a sword? How do I draw a multicolored star or flower? What about random colors?

      I didn't learn a lot of conditionals, (by the time input beyond the code itself was an issue I'd discovered other languages) but I did learn looping and also learned how to break a problem down into smaller pieces with the the tools available which is really what programming is all about.

      And what I dunno that I would say that 15-year-olds are going to be interested in string handling. It takes about 2 days of learning to program when you realize you aren't going to be writing video games in two days and so you think, "okay, what CAN I do that's useful now." A lot of kids are interested in things beyond games. I was about 15 when I first got on the web and any ambition I had for game programming died very quickly. Networking and the web became my interests from then on.

    5. Re:Python?? No...! by dgatwood · · Score: 1

      You can write games with scripts.... It's just a whole lot harder.

      --

      Check out my sci-fi/humor trilogy at PatriotsBooks.

    6. Re:Python?? No...! by Vintermann · · Score: 1

      Why not script 3D graphics? That's how I relearned programming (after toying with BASIC many years ago), with QuakeC. QuakeC is a mess, though, I don't recommend it.

      --
      xkcd is not in the sudoers file. This incident will be reported.
    7. Re:Python?? No...! by Joce640k · · Score: 1

      Well, yes, but a beginner isn't going to want to start loading textures manually and creating rendering contexts. He wants to type

      ship = LoadModel("spaceship");
      DrawModel(ship);

      --
      No sig today...
    8. Re:Python?? No...! by Joce640k · · Score: 1

      Making game mods isn't very hard and a lot of them use scripting languages internally - best of both worlds.

      But yeah, you could do worse than find out what he likes doing (but in this ADD world, non-gaming 15 year olds are rarer than hen's teeth).

      --
      No sig today...
    9. Re:Python?? No...! by BillX · · Score: 1

      With the ADD world we live in, the investment needed to see results in a 3D graphics world is going to be a hard sell.

      Couldn't agree more. Much as the Real Programmer in all of us wants everyone to start with a course in computer architecture followed by data structures, something more immediate and gratifying has a much better chance of holding a first-time programmer's interest. Hello World in 3D with laser effects. Buffer overruns and lambda functions can come later.

      I'm surprised that nobody has mentioned Processing yet. It's specifically written as a "beginner's language" as well as a rapid-prototyping language (immediate gratification) for everyone else. Under the hood it's Java, with most of the annoying crap (public static void...) hidden away from non-advanced users, and library functions to handle most of the common gratifications (drawing attractive 2d/3d graphics, openGL, reading/writing to Web pages / sockets, grabbing data from Webcams, serial port, etc.)

      What I like is that it comes with an exhaustive set of examples, those who learn best from example will pick things up quickly. Plus, once the kids have a program they are proud of, they can export it as a Java applet and blog it, it'll run for their friends right in their browser windows.

      --
      Caveat Emptor is not a business model.
  52. Give them something fun to do by lawpoop · · Score: 1

    Don't sorry about "ruining" them with a "bad" programming language. If they stick with it at all, they are going to develop all kinds of crazy ideas and bad habits, which they will discard, one by one, if they go on to become good programmers.

    Face it, even if you give them the best language and environment possible, most kids are going to get bored with programming, just like piano lessons, karate class, painting, etc. Programming seems cool, and they know it powers video games, but they really *don't* care about variables and functions and scope and types and classes -- and they won't unless they actually decide they want to become programmers.

    Give them something fun and rewarding, where they get to play Stairway early on. RealBasic seems to be a good compromise of power, ease of use, user-friendliness, etc. If they want to stick with it, then they will be motivated themselves to learn LISP, python, c, to understand the concepts *behind* what makes the video games work.

    --
    Computers are useless. They can only give you answers.
    -- Pablo Picasso
  53. Scheme to first year CS students by Omnifarious · · Score: 3, Insightful

    I don't associate Scheme with 'the hacker ethic'. I don't strongly associate any language with hacker sensibilities. I do associate Scheme with the intellectual rigor required for a programmer who really has a clue about programming.

    I think Scheme is an excellent language to teach college students who think that they know how to program because they managed to smoosh together a bunch of working PHP code and make a website. I think it is a poor language to teach high school students who are learning their first language.

    The association of technical knowledge with competence irritates me. A competent painter needs to know about brushes and mixing paint, the difference between oil and acrylic, and a whole host of other technical details. But that's not how you get a good painting.

    One of my reasons for feeling that Scheme is a good language for people who think they know how to program is that such people frequently know all about paint but do not have the depth of understanding to be a good painter. Scheme is a language that forces you to think about programming differently than you did before. And if you understand it you are on the path to being a good programmer rather than just a code monkey.

    But I would not recommend it as a first language. I would recommend Python for that. Clean, concise, expressive and powerful. It's my favorite language for a reason. :-)

    1. Re:Scheme to first year CS students by Draek · · Score: 1

      Your comments about Scheme are exactly how I felt about Common Lisp after learning it. It made me look at programming itself differently, and I honestly believe my code in other languages has improved compared to before learning it.

      Though I'd replace Python with Ruby, personally ;)

      --
      No problem is insoluble in all conceivable circumstances.
    2. Re:Scheme to first year CS students by Anonymous Coward · · Score: 0

      I like that painter analogy!

      Python is a great choice today. I'd also second that any C derivative is a good choice, from a practical perspective.

      Not to change the subject, but I'd rather have a great teacher than the "perfect" starting language.

  54. C# by rfernand79 · · Score: 1

    C# is a modern, multi-paradigm, feature-rich and evolving language. It can be most intriguing for a young programmer because you can play at various levels of abstraction (from unsafe all the way up to LINQ) and express computation in various ways (you may do a Lambda expression for one thing and a method for another). And you can use it as a scripting language, as well. Young programmers running Windows can always get Visual Studio for free via DreamSpark. Young programmers running anything else can get MonoDevelop. There really is no excuse to skip this incredibly productive language. The plus side? migrating from C# to other paradigms should be simple. And the C# user community is just as friendly as any other free language's (minus the "RTFM, N00b!" replies.)

    1. Re:C# by Blakey+Rat · · Score: 1

      Young programmers running Windows can always get Visual Studio for free via DreamSpark.

      Dreamspark? I've never heard of that... what's wrong with just downloading the C# Express version? It's free, has been for years, and I'm constantly amazed how many Slashdotters don't know about it. http://www.microsoft.com/express/vcsharp/

  55. All of them by nexttech · · Score: 1

    Start with a simple language to learn the basics (Loops, variables ect.) Then let them explore. If they are truly interested in programming a new programmer will move to what interests them. I started with Basic went through the academics of Pascal. But I truly learned the most when I taught myself Forth and Smalltalk. Anyone interested in programming will find their own way.

  56. According to research, its Algol 60 by St.Creed · · Score: 3, Informative

    In Germany, researchers into didactics (teaching) of computer science (Informatik) have done some work on this topic. I recently found it when I was looking into materials for the computer science course in the Netherlands (seeing if I could do better).

    Based on 15 criteria, they ranked 27 languages, ranging from Scheme to Haskell, ADA to Ocaml. The worst language for teaching was, by far, APL (scored a 5, which is the worst), followed closely by Perl. The best language for teaching was Algol 60 (1,50). Second best Python (1,66), 3rd place Ruby (1,88) and scraping in at a 4th spot was Pascal (2,14).

    So to summarize: better dust off your Algol 60 books and compilers :P

    Failing that, Python and Ruby are nice as well for just teaching programming (although if you want to show the distinction between imperative and functional programming I'm not altogether sure that Ruby would be enough).

    ------
    This was found in a (Dutch language) PDF: http://www.utwente.nl/elan/huidige_studenten/overig/OvO/OvO-inf/Eindverslag%20INF.pdf (see page 8 for the German criteria, and page 9 for the results). See the original research (*) here: http://subs.emis.de/LNI/Proceedings/Proceedings22/GI-Proceedings.22-12.pdf (German language document)

    (*): [LH02] I. Linkweiler, L. Humbert. Ergebnisse der Untersuchung zur Eignung einer Programmiersprache fÂur die schnelle Softwareentwicklung â" kann der Informatikunterricht davon
    profitieren?, Didaktik der Informatik, UniversitÃt Dortmund, 2002.

    --
    Therefore, by the (faulty) logic you're using, you're just a cow with a keyboard - osu-neko (2604)
    1. Re:According to research, its Algol 60 by Anonymous Coward · · Score: 0

      I'd be more impressed if you could actually spell Ada correctly.

    2. Re:According to research, its Algol 60 by St.Creed · · Score: 2, Insightful

      Ada.

      There :)

      --
      Therefore, by the (faulty) logic you're using, you're just a cow with a keyboard - osu-neko (2604)
  57. Many different routes, all at the same time... by arcade · · Score: 1

    I'm not sure this is a good idea.. but it might be.

    How about trying to expose the main ways of programming, at once?

    Assembler = The barebones.
    C = Everybody still uses it.
    Python = Easy to use, etc.
    LISP = Apparantly very important, but I wasn't exposed to it early enough - and still don't get it.

    Whether or not to show Perl depends on whether you love it or hate it. :P

    --
    "Rune Kristian Viken" - http://www.nwo.no - arca
  58. Most of these suggestions are nuts. by Anonymous Coward · · Score: 0

    I don't understand how you people come up with your answers. I have programmed in JS, PHP, Lua, Perl, bash, Ruby, C, Obj-C, Java, Haskell, Fortran, 68K Assembler and some Basic. I started in Haskell. Which I quite like as far as an educational language is concerned.

    Firstly, I don't understand the "teach a language people use" bullshit. Programming is not bound to any language. Any half decent programmer can pick up a language in a few days and be productive. Your objective as far a teaching goes, should be to teach concepts, not to teach a language.

    Secondly, the people pushing certain scripting languages. Think about what you are about to do. In some scripting languages you can go + and get a number out. And some of them use white space for delimiting blocks. Ugh. The flexibility of scripting languages can be a real pain in the ass.

    Thirdly, the people who want to try and teach all the concepts, OO, pointers, memory blah blah blah all at the same time. Yeah, that will not be a boring pain in the ass. No sir.

    My money is actually on Java if I had to pick. (Maybe even C#)
    - Simple syntax. And the syntax is similar to C.
    - Has massive amount of libraries so I can write cool stuff with little effort.
    - Don't have to worry bout too much too soon.
    - You can run it on pretty much anything.

    1. Re:Most of these suggestions are nuts. by Lawrence_Bird · · Score: 1

      FORTRAN baby. It has all the modern bells and whistles. if you want/need to use them. Tons of libraries which are rock solid. And its easy for somebody with no exposure to coding to understand very quickly. I would second with Pascal.

      Its all about teaching concepts in programming and algorithms. You don't want to have the language get in the way and be the focus (or anchor) of the experience. Nobody is ruined for life, contrary to slashdot opinion for learning BASIC/FORTRAN/PASCAL/COBOL. If anything, it should make grasping the 'newer' languages easier and provide a basis for understanding why certain techniques or features may be useful or desirable.
         

  59. The best first language.. by Anonymous Coward · · Score: 0

    Nothing says hip more than LOLCODE.

    http://99-bottles-of-beer.net/language-lolcode-1544.html

  60. Java ?? by sundru · · Score: 1

    This is probably a surpise to many but java has good structure and has the layout for developing solid OO programming skills. Its not as confusing as C++ and not as retarded as VB C# also does but visual studio does most of the work 4 ya. -s

    1. Re:Java ?? by durdur · · Score: 1

      IMHO Java is a much better choice than C++ for a beginning level programming student. Java's garbage collection eliminates the confusion introduced by C++ arrays, references and pointers. Built-in array bounds checking is very helpful and helps trap common errors. Java generics are easier to understand than C++ templates. There's a reason it is a common teaching language at the college level. But it's also not just for students: Java is still a powerful language that is used in large-scale production systems.

    2. Re:Java ?? by ultrabot · · Score: 1

      Of course, C++ is emphatically not for beginners. It's a "professional" language to the core, and I don't think it ever had intention to be anything else.

      Java's garbage collection eliminates the confusion introduced by C++ arrays, references and pointers.

      This, I'm not sure about. For "learning" type tasks, I don't see a big problem of leaking some memory.

      --
      Save your wrists today - switch to Dvorak
  61. Java, Using My 'Free Java Lectures' Site by curmudgeon99 · · Score: 1

    If the intention is not to put the student through a 'rite of passage'--meaning the agonies of being a C/C++ developer, then I would recommend Java. It's a real language that has a future and huge growth potential. Though I know that's a huge topic now, I have at least done my part by making available, for free, without any ads, ad links or any other such commercial nonsense.

    It's just Two Semesters of College-Level Java for Free

  62. language probably matters to some extent by hedrick · · Score: 2, Informative

    I've actually had this experience. I've mentored someone from about 12 - 15. He's going to be one of the best programmers of his generation if he sticks to it.

    First, I agree that at this age finding things he wants to do is more important than the specific technology. But I would argue that the technology does matter to some extent. There's a lot of time between 12 and college. Someone who spends a lot of it programming is going to get at least as much experience before college as in college. I'd like to see it go in the right direction. When I taught computer science 111, I sometimes had to tell kids who were self-taught in Basic to forget everything they knew. I'd hate to see that happen to someone who had invested lots of time.

    I think it's the job of the mentor to encourage -- with a light enough touch not to discourage -- use of good programming techniques. That means talking about program structure and design, proper data structures, and any other concepts needed for what they're doing. (In my case the kid likes doing multi-threaded network services, so I had to teach him synchronization much earlier than you'd typically do that.)

    I haven't programmed in Scheme, so my judgement on it is probably not reliable. I did do a lot of work in Common Lisp. While in many ways I liked Common Lisp more than more recent languages, I think a language like Java or C++ is more likely to push you to think about structure. C++ seems a bit low level. I'd be willing to accept either a high level language like Perl or Python, or something lower level like Java or Visual Basic (using the newer features of the language so that it's essentially the same as Java -- although C# might be a better choice).

    For someone who is just going to be playing around there's a lot to be said for Perl/Python. But if they're going to be doing anything big enough where structure matters, I'd probably start with Java or maybe C#. Of course you can certainly start with Python and them move to Java.

    In my case, the student I worked with started with Visual Basic, moved into a more structured form of Visual Basic, and then to Java. By now he's also done PHP and C++. It's also all been his choice. And in fact the real answer may be that when working with teenagers unless you want to spoil the fun there's a limit to how much you can or should actually determine what they do. So you may end up supporting them in whatever language they pick. But if someone is likely to be a professional, I'd probably try to get them into a structured language like Java fairly soon for at least some of their work.

  63. Python by Domini · · Score: 1

    Just do Python. They can learn most other languages from there.

    Python is better than Perl because for beginners would takes weeks just to learn all the different possibilities of IF branches in Perl. Perl's motto is 'There's More Than One Way To Do It', and while that is cool for the hacker ethic it does damage to people learning programming.

    Fact: You don't want to spend most of the time teaching kids a language instead of programming concepts.

    Python because it also has OO programming. Not tacked on such as C++, ObjectPascal or Perl. And learners can easily transition from functional to OO.

    Python is simple and clean and not bogged down by semantics.

    It is not as hard-core as lisp or smalltalk, being much easier to progress.

    We do not care about speed, not that that is an issue anyways.

    I like all languages, and learners can be made aware of alternatives. To each his own style. Wether it be Perl monks, assembly 4k demo writers, C++ Linux engineers, PHP Web back-end programmers or C# .NET ASP AA++--%% certified engineers.

    My personal history:

    Vic 20 / C64 BASIC, Microsoft BASIC / 68k assembly on Amiga, Logo, Pascal, LPC (Lars PensjÃ's C for MUDs)

    Then there was a shaky transition to OO ... this could have gone smoother and I wish it had.

    Object Pascal, C++, Perl, Python, ABAP, C#

    Perhaps it was the BASIC that messed me up, but I doubt it.

  64. For a 15yo?!?!?! by Kr3m3Puff · · Score: 1, Interesting

    Is it me, or is it a silly debate... My first language was some FORTAN and COBOL when I was 10 which quickly progressed to BASIC when I was 11. By the time I was 12 I had LOGO under my belt and the teacher had me teaching the Computer Science labs at School.

    By the time your 15, you are past your prime and you might as well pack it in.

    --
    D.O.U.O.S.V.A.V.V.M.
  65. "What we do is craftsmanship " by nurb432 · · Score: 2, Interesting

    And that there my friends is the crux of the problem. This is why we are now swimming in code bloat from every angle. Sorry to disagree with your view of the world, but *proper* programming IS engineering.

    Now, to get back on topic, how about something like Squeak? Using squeak land, you can 'trick' the kids into learning a real language. Of course i learned by sitting in front of a 8080 i built from scratch from reading intel data books that i wanted to actually do something other then sit there, but i realize that isnt for everyone.

    Python is also be a good starting point. Approachable, and 'legit'.

    --
    ---- Booth was a patriot ----
  66. The best first language is English by Anonymous Coward · · Score: 0

    If you can't read and write English, it is increasingly difficult to work in this global economy--regardless of the computer language you program in.

  67. I taught my son English by Anonymous Coward · · Score: 0

    It sort of came naturally.

  68. Re:I was fortunate to write my first program in 19 by janwedekind · · Score: 1

    I started with Omikron Basic on Atari ST. The amazing thing with the Atari is, that graphics memory and main memory are one thing. Also there was no distinction between graphics-mode and text-mode. The only thing really limiting was the lack of dynamic memory allocation.
    Today I can see that newcomers feel clued out because by default they are presented with a window manager and lots of user-friendly software which gets in the way if you are trying to get to the bottom of things.

  69. We snaked this out at NCSSM by ncmathsadist · · Score: 1

    I teach a course at the North Carolina School of Science and Mathematics that introduces non-programmers to programming. The sole prerequisite is decent algebra and problem-solving skills. All of our students have at least point-and-click proficiency with a GUI.

    We use Python. Here are some reasons.

    1. Python's syntax is simple. We don't want syntax to get in the way of semantics.
    2. Python has almost no "plumbing;" just consider the simplicity of the "hello world" program.
    3. Python forces its users to format programs decently. This habit becomes ingrained and our students format code nicely in other languages as well.
    4. Python is FREE and available on all platforms. You can run it on the worst piece of junk a school district can scrape up.
    5. The documentation for Python is excellent and provides a valuable learning resource. Python has an avalanche of high-quality learning resources on the web.
    6. Python is a powerful professional tool.
    7. Python, unlike JavaScript, is strongly typed. Its error messages are useful.
    8. Python supports functional, procedural and OO programming.

    We are entering our seventh year of using Python at NCSSM. It has been a highly successful effort.

  70. Take it from another 15yo by XPeter · · Score: 1

    It's good to start out simple, with something like VB.Net and then progress onto more complicated things (HTML, Java, C/C++, Ruby).

    With VB you get the fundamentals of programming (Data types, If-then-else statements ect.) and a good idea what programmings consists of. It's very easy to self-teach and doesn't take long to get the hang of things.

    Also, if you have the resources try to grab onto some old hardware and tinker with it a bit. After a while of fiddling and reading you'll be able to build a computer, and then go onto other stuff such as overclocking.

    -P

    --
    "The difference between genius and stupidity is that genius has it's limits" - Albert Einstein
    1. Re:Take it from another 15yo by cenc · · Score: 1

      Dude, you obviously still have a ways to go.

  71. Oh Please God, Not VB Or Scheme by Anonymous Coward · · Score: 0

    No, Visual Basic will ruin them and they'll end up programming in that backwards language their whole lives. And no one seriously writes useful products in Scheme, give me a break. Name one product written in Scheme that actually turns a buck or that anyone uses on a daily basis. Ironically, I can name several VB apps that are in popular demand and regular use, one example is AutoPatcher which has a ridiculously large user base and is not one of the best written pieces of software (for example he doesn't use a thread for the network layer so if you change focus by opening another application or clicking another window while he is grabbing updates, his applications loses the network connection).

  72. There is no such language!!!! by Aethedor · · Score: 1

    The best way to learn to program, is by start learning to define a problem and its solution. A programming language is nothing more than a tool. A tool to tell the computer about the problem and the solution. Learn about, for example, Fitch propositional logic, about how to define a big problem into smaller problems, about iterative and recursive design, etc. The biggest problem with many 'programmers' these days is that they only know how to hack a piece of code in their favorite language, but they don't know how to program. If you want to learn someone how to write computer programs, start by stepping away from the computer and learn how to design a program, not how to actually write one.

    --
    It doesn't have to be like this. All we need to do is make sure we keep talking.
  73. Basic shell by digitalhermit · · Score: 1

    I know.. there are lots of downsides to using bash or korn as a first languag, but there are quite a few upsides. For one, it's easy to get started showing what a script/batch file does. You can start with the absolute basics such as putting a few print statements in a file. Then show how scrip programming is not just about putting commands in a file.. Show conditionals, strings, file manipulation, etc.. Then start with functions, parameters. After that, show some of the external tools and then automate something such as sending an email or organizing an mp3 directory.

  74. Whatever stops them from giving up by ZackSchil · · Score: 1

    If I had to name one thing that turned off the most beginning programmers, it's the difficulty of setting up a project that will allow them meaningful graphical output. In C++, just getting the compiler all set to link the right libraries requires a great deal of knowledge. Issues like frame rate regulation, loading images, and initializing windows are insurmountable hurdles to the beginner and it's incredibly frustrating.

    Everyone wants to make a game-like project at first. Python has libraries like Pygame (SDL+utility binding) and PyOpenGL (OpenGL binding) that make it VERY attractive to the beginning programmer. Very, very few languages allow windows, image loading, sound loading, and drawing to happen with as little nonsense as Python and Pygame.

  75. No UI programming by Mutio · · Score: 1

    My personal preference would be visual basic. I know its not as good as some others, but it is very simple to make something tangible. Trying to teach a young person to program the UI is only going to detract from the art of programming. For this reason i would advise a language with a drag and drop ui. Also my Uni teaches Visual Basic to the IT majors as their first language (so it really cant be very hard).

  76. Re:Python - flamebait by petes_PoV · · Score: 2, Insightful

    Python is better than Perl because for beginners would takes weeks just to learn all the different possibilities

    You don't need to learn them all - you just need to learn ONE to start with, then others can be added as the newbie's level of competence grows. The biggest barrier to programming is a steep learning curve - too much time spent before something tangible can be produced. Any language that lets someone just type stuff, then press "run" is a good start - maybe even Python.

    --
    politicians are like babies' nappies: they should both be changed regularly and for the same reasons
  77. Brief history of my programming... by Antony+T+Curtis · · Score: 2, Interesting

    I learnt BASIC first, on the Sinclair ZX-81 and then the Sinclar Spectrum.
    Soon after that, I learned to program using Turbo Pascal, and I translated a lot of my BASIC programs to Pascal on my Dad's PC.
    At school, I learned to program on a BBC Micro using BASIC and 6502 assembler and a little while after that I learned to how to program using 808[86] assembler.
    C++ was the next main language I learned to use but between Turbo C++ and Turbo Pascal, I preferred Turbo Pascal, especially how well it managed dependencies and the sheer speed of compilation. I was a very loyal Borland customer, purchasing nearly every version of Turbo/Borland Pascal for DOS (excluding 5.5)...
    And then I went pure 32bit programming in 1994 and left the Borland world behind... Used Watcom C++ and Virtual Pascal. Found the GNU compiler. For the last 10+ years, I have almost exclusively been programming using GNU compiler in C and C++.

    To answer the poster's question: I would recommend Pascal as a good learning language for learning structured programming.
    But to graduate to C and C++ after the basics are well understood and good practices have been learned.

    --
    No sig. Move along - nothing to see here.
    1. Re:Brief history of my programming... by QuestionsNotAnswers · · Score: 1

      Why would you want to limit a new learner to the languages of your own time? Your learning trajectory (similar to my own) is dependent upon what was the best available to you at the time. The best languages available now, with active communities and good ecologies, are generally not languages we had available as beginners.

      A new programmer should be encouraged to follow their own interests and select languages suitable for those interests e.g. PHP, Ruby or django are all fine choices for beginning web server programming. Caveat: I would be more careful about the initial language if you think the new programmer will stick with the first language they learn -- I have seen that trait in 2 out of the 3 best programmers I personally know (sticking with one language ecology and learning it backwards is at odds with the stereotypical "eclectic" guru programmer - perhaps I just haven't met the right sort of guru programmer.)

      If helping someone learn a language, perhaps go with a language you do not know in a domain you are unfamiliar with e.g. helping with C on an Arduino if you are a PHP web programmer. Exploration and discovery are critical. A beginner can be motivated by learning to do something better than their teacher (constantly being told what you could improve can de-motivate).

      --
      Happy moony
  78. Best 1st language... for CS or engineering? by Bright+Apollo · · Score: 1

    The assumption underlying the question is that these 1st-year students are going to become programmers/ developers/ software engineers. In other words, practitioners as opposed to researchers. This is the elephant in the room for computer science today.

    Professors tend to teach the pure CS model of programming, i.e. data structures, lexical parsing, algorithms, everything you saw in your 1994 syllabus. They do this because, guess what, they are researchers and pure computer scientists. Rarely do you get a 15 year veteran of software engineering teaching an algorithms class; for one thing, these people are too busy solving real-world problems like schedule slippage and feature creep to manage a graduate-level course load. So why, then, is CS continuing to teach CS when what students want is software engineering? I don't know. I think it's all they can teach.

    So, I think Scheme/ Haskell is very good at bringing 1st year SCIENTISTS into programming, if only to get them looking at the basic problems of CS and not necessarily engineering software for a big corporation.

    For software engineers, or people who want to ply their trade for a big corp or small firm or for their own benefit, I would say the platform matters more, not the language. Big corps wants J2EE expertise, big-time messaging and integration opportunities there... so learn Java, SQL, and how app servers work. You might try the dot-NET platform if you want to make a living to Microsoft-centered projects; there's tons of work for Sharepoint devs so C# and getting practical experience with the vast dot-NET library will help you immeasurably.

    Along the way, though, you'll need to learn how to develop solid, robust code. CS programs don't each this very well, if at all. Self-study is the only practical route, aside from the ultimate teacher of experience. Experience, however, suffers from a chicken-egg scenario: if my feedback loop of experience reinforces bad practice, how will I detect it? This, I think, is the major shortfall of CS/ Engineering programs.

    Couple this with the undeniable trend of moving all entry-level programming jobs away form US graduates, and you have almost no way of becoming a 15-yr vet of software engineering, capable of solving a variety of issues on a variety of platforms. You'll never get that chance unless you are willing to live like your outsourced counterparts, wherever they may be. Public companies care about anonymous shareholders more than the citizenry of their incorporated location.

    Ah well. I finally managed to put these thoughts together somewhat coherently, so I'm done.

    --#

  79. The point of IntroTo Programming courses is by Simonetta · · Score: 4, Insightful

    The point of IntroTo Programming courses is to instill a comprehension and sense of awe at the ability to control the actions, operations, and functions of physical machinery by using symbols, that are non-physical. It is by using your brain to amplify your body (robotics) or by using your brain to build and control a machine that can vastly amplify your brain (a pocket calculator).

        Intro To Programming needs to skip language and process at the beginning and first teach how electricity can be used to create and manipulate symbols. This is multi-stage process that teaches how to use electricity to represent binary numbers, then using binary numbers to represent decimal numbers, using decimal to represent CPU instructions, using instructions to make programs, and using programs to control machines that amplify the users physical and mental abilities. And finally, how to use the imagination to create new structures of symbols to create programs.

        Install the sense of god-like awe at the ability to manipulate physical reality by rearranging symbols, and the mundane details of language structure are of minor importance to both the student and the teacher.
     

    1. Re:The point of IntroTo Programming courses is by tuxgeek · · Score: 1

      I still and will always consider C to be an excellent first programming language. It's clean, simple, top down procedural flow. Very easy to understand and code.

      From there new coders can move on to object oriented codes to advance their skills once the basics are understood.

      --
      "Suppose you were an idiot...and suppose you were a member of Congress...but I repeat myself." Mark Twain
    2. Re:The point of IntroTo Programming courses is by Anonymous Coward · · Score: 0

      For math and science oriented people, I think he is quite serious. The funny mod was probably made by someone who doesn't understand.

    3. Re:The point of IntroTo Programming courses is by Joce640k · · Score: 1

      ...from there, new coders can move on to write buffer overflows and manual memory management code with C++ compilers.

      Seriously, start with C++. You can do classes and objects later on but for Glub's sake start with std::vector and std::string FROM DAY ONE.

      --
      No sig today...
    4. Re:The point of IntroTo Programming courses is by Teancum · · Score: 1

      For myself and based on years of experience, C is a hideous language for an introductory environment for programmers. Mainly, this is due to the fact that C (and the derivatives like C++ or even C# and perhaps even Java) allows so much flexibility for software design that young programmers learn awful habits that they can't break later on in their development careers.

      In addition, it is a bit of a big thing to chew off that is just starting out and trying to get their feet wet, not to mention some scary (for beginners) reference material that is written for masters of the art of programming and not mere novices.

      Mind you, I'm not an anti-C developer, and it does a very good job for what it was designed to do: write compilers and operating systems. On this point it does a fantastic job, but not for introducing programming concepts to start out with.

    5. Re:The point of IntroTo Programming courses is by Anonymous Coward · · Score: 0

      I hope you were intending to be funny.

      Intro To Programming needs to skip language and process at the beginning and first teach how electricity can be used to create and manipulate symbols. This is multi-stage process that teaches how to use electricity to represent binary numbers, then using binary numbers to represent decimal numbers, using decimal to represent CPU instructions, using instructions to make programs, and using programs to control machines that amplify the users physical and mental abilities. And finally, how to use the imagination to create new structures of symbols to create programs.

      Do you think kids should be taught to cook by first learning organic chemistry too?

      I actually see two problems with your suggested approach. First, the quickest way to make a student lose interest is to not start by showing them what the end goal is. A bottom-up approach is not a good way to teach higher level subjects. I've found that the right starting place for many things is in the middle. High-level academic subjects are one thing I've had an easier time with by starting in the middle. Software design seems to turn out better when started in the middle too.

      The second problem is that I think you're starting from the wrong bottom. You want to teach them a particular implementation of a computer, but a computer is far more general than what you're discussing. In just about any computer science program you're going to spend time working with languages that don't even have the concept of binary numbers, let alone electricity. Boolean logic works just as well on paper as it does in a circuit. Electronics gives us the real world implementation of computers, but the real bottom for computers is math, not electronics.

  80. A language with a popular forum. by Rockoon · · Score: 2, Insightful

    Seriously.

    The best way to learn to program is through social interaction about the subject within a culture dedicated to a wide array of programming topics.

    Languages like scheme, lisp, haskel, perl, ruby, python... these are often domain-focused, where it would be hard for the budding programmer to get into some areas of programming that might keep them interrested. For example, graphics or sound.

    Languages like C# and VB.NET have a more generalized culture, where you could get into just about anything and actualy find other people doing the same stuff via online forums (in the old days it was through BBS's and FidoNet.)

    So I recommend a general language, without much meaningfull limitations, that has one or more high traffic public forums online dedicated to it.

    --
    "His name was James Damore."
    1. Re:A language with a popular forum. by salimma · · Score: 1

      The Haskell School of Expression by Paul Hudak actually is surprisingly multimedia-oriented. The only problem is its price.

      --
      Michel
      Fedora Project Contribut
  81. Game Maker by Anonymous Coward · · Score: 2, Informative

    If your young, you probably just want to make games. I'd recommend game maker...it starts out as drag and drop so that you can learn the basics, but easily extends into its coding language, which is similar to Java, but much easier to use!

  82. Haskell by Anonymous Coward · · Score: 0

    Haskell

  83. Pascal by Anonymous Coward · · Score: 0

    I learned on turbo pascal, and in general, I think it served me pretty well as a first language. These days there's "Free Pascal" http://www.freepascal.org/ which is a cross-platform compiler available on many platforms. The language is pretty rigorous, but has all the facilities you'd want to teach someone for them to function in a modern language. YMMV.

  84. C++, Java, Maxima, Lisp, Ruby, Forth, Io, ... by janwedekind · · Score: 1

    Somebody who only wants to learn one language will most likely not become a great programmer. The problem is that the reason to understand a particular language is only visible to you after you have understood it
    * C/C++: understand pointer-arithmetic and the datatypes of the underlying machine
    * Java: enjoy the garbage collector while exploring the limits of strict and static typing
    * Maxima: feel the power of functional programming and symbolic evaluation
    * Lisp: transform code using meta-programming
    * Ruby: see how a trade-off between Lisp and Java could look like
    * Forth: see how different programming languages can be
    * Io: realize that there always will be new languages until we figure out what makes reading and writing programs easy

  85. LOGO: Turtle Graphics for kids by Anonymous Coward · · Score: 0

    For me LOGO is obviously best programming language to begin with:
    http://en.wikipedia.org/wiki/Logo_%28programming_language%29

    I've started using it when I was 12 years old kid. The LOGO interpreter was being run from cartridge on this kind of computer:

    http://en.wikipedia.org/wiki/SVI-738

    LOGO is a simplified version of Lisp, known mainly for its turtle graphics:

    http://en.wikipedia.org/wiki/Turtle_graphics

    Thanks to this "turtle graphics" LOGO is very practical and easy even for children.

    Kids love to draw fancy images by instructing some friendly turtle...

    It is available as KTurtle in many Linux distributions (part of KDE's Kdeedu package) and for Windows as well:

    http://edu.kde.org/kturtle/

    "KTurtle aims to make programming as easy and touchable as possible, and therefore can be used to teach kids the basics of math, geometry and... programming.

    The programming language used in KTurtle is loosly based on Logo. KTurtle allows, just like some implementations of Logo, to translate the

    programming language (the commands, the documentation and the error messages) to native language of the programmer."

    The KTurtle Handbook:

    http://docs.kde.org/development/en/kdeedu/kturtle/

  86. Question: what do you want to achieve ? by obarthelemy · · Score: 1

    I've heard it said that the best language depends on the job to do.

    Obviously, the same applies for the best first language: what is most important for their first program/project
    - quick "whoa" results to generate excitement ?
    - doing something useful ?
    - fostering some understanding of a CPU, OS, Network... inner workings ?
    - ... ?

    Again, I'd say the language is just a tool to an end. Get a good project idea, then select the right tool to do it quickly and in a fun way. Maybe it's just scripting/macroing a very specific app. Maybe it's a website. Maybe it's a "real" program...

    --
    The Cloud - because you don't care if your apps and data are up in the air.
  87. BASH by Anonymous Coward · · Score: 0

    The best first language is bash. If you want to do any programming, linux is the way to go because you wont be spending an arm and a leg on compilers. Before you do anything you should become familiar with the terminal, and writing bash scripts is one of the fastest ways to do that. Even if you are already proficient with linux, then bash scripting will be pretty easy because you already know the syntax. This knowledge can then be applied to writing build scripts when you move on to another language.

    Python an Perl are good as well, but require learning the syntax. I think perl is more forgiving but that also increases the likelihood of developing bad habits.

    If you want to program in a compiled language, go with C. I think it is much easier to start with C then transition to C++ rather than jump right into C++. Since there are so many similarities you can then learn C++ and be familiar with two languages in about the same amount of time it would take to jump right into C++ and stumble your way through it.

  88. K&R C by Anonymous Coward · · Score: 0

    Buy him a copy of C for Dummies and have done with it. C is kind of like the Latin of programming, except it's easier to learn than Latin.

    I would have suggested BASIC around a decade ago, but I can't think of a modern BASIC implementation that's neither horrendously complex for a new programmer or insanely outdated.

    Actually I think K&R C still an awesome introduction book for a language.

    As a language though, I'd start with Python to see if they'll enjoy it, and then go to C second to make sure the important concept of pointers.

    While you may not use them much with all the dynamic languages out there nowadays, it's an important concept to understand IMHO.

  89. language of programing by cenc · · Score: 1

    I have to agree with both.The thing with PHP, although arguably at best a limited programing language (if at all), is the accessibility. You do something, there is instance feedback. I just would not let someone get too hung on just PHP. It will however get at the basic concepts behind programing rapidly.

    I remember the most complex thing in learning my first programing language was learning the language of programing. Exactly of what is loop, var, and so on. You are reading these books, documentation, and most would fail to define the terms (or define the terms using the terms) they where using so that someone new to programing could understand the lingo or shoptalk. It was not particularly hard once you figured it out (c, c++, Java), but it was like being frigen anthropologist in the jungle encountering a new tribe. You have to translate the crap in to something common to English culture. Thus, why instance feedback is important to knowing are you doing it something right.

    I would have to say PHP documentation is excellent. Lots of easy access definitions, with examples, small snippets of working code, and discussion of pros and cons and recommendations. In fact if other programming languages followed that lead, they would be many more programmers in the World and perhaps a few less bad programmers.

    My vote for a second language would be C++. All the more advanced concepts, including going down to the metal (although perhaps not the best way to get there) can be captured in C++. Basically, you can go up and down the food chain fairly rapidly with C++, and the key concepts translate well to just about every other language.

  90. Get practical by hessian · · Score: 1

    I think students should learn languages simultaneously, with a focus on getting them writing code they can use as quickly as possible.

    I'd pick C/C++, Perl and assembly, with Lithp coming later.

    That way, they can start writing the kind of stuff they're going to need and use right away:

    * Web apps
    * Device drivers
    * Cracking software (oops...)

  91. Kodu by Anonymous Coward · · Score: 0

    You could start them really young (younger than 15) if you present it to them as a game.
    Have you heard about Kodu for the XBOX 360? It's a tool to create your own games (a.k.a. programming language) and you get to share your creations with your friends.
    Research project behind Kodu at http://research.microsoft.com/en-us/projects/kodu/
    Details on the game itself at http://marketplace.xbox.com/en-US/games/media/66acd000-77fe-1000-9115-d8025855024c/

  92. Depends on the access to information by careysb · · Score: 1

    Some classmates and I taught ourselves Fortran when I was 15. It was part of a computer math class but the teacher didn't really know anything about Fortran so we were given copies of the Fortran manuals and access to equipment and we spent lots of time experimenting and teaching each other. This was back in '68, on an IBM/360(I think) using teletypes connected by audio coupled modems.

    I would say that the particular language you choose is probably not the most important issue. Access to a development environment that you can spend as much time as you want on. Gobs of online or book references and tutorials. And, a friend or two to exchange ideas with. I would also say that all of this pretty much has to be free because 15 year olds have little access to $$$.

  93. This Question Comes Up Once A Month by Anonymous Coward · · Score: 0

    This question comes up in one form or another about once a month. It's getting tedious.

  94. Something other than BASIC. Maybe LOGO? by Midnight+Thunder · · Score: 1

    I would have suggested BASIC around a decade ago, but I can't think of a modern BASIC implementation that's neither horrendously complex for a new programmer or insanely outdated.

    The other issue is that it is less and less relevant. In the past I would have recommended Basic or Pascal, because they taught what people need to know and then could be used for practical development. In choosing a development language I think it is something that needs to teach and be practical at the same time, this is why I would recommend something like Java and then C++. I could have mentioned other languages but these are both cross-platform.

    In fact for the person who has never programmed then LOGO is, IMHO, the best language to start with. There are still implementations and the fact that someone gets visual results from the get go gives them an idea of the logic and rewards them with instant results. Implementations:

    http://en.wikipedia.org/wiki/Logo_(programming_language)

    --
    Jumpstart the tartan drive.
    1. Re:Something other than BASIC. Maybe LOGO? by Midnight+Thunder · · Score: 1

      It turns out there is even an LOGO interpreter in Javascript:

      http://www.calormen.com/Logo/

      --
      Jumpstart the tartan drive.
  95. VB by sonciwind · · Score: 1

    Is the best first language.

  96. What are you trying to achieve by LinuxRulz · · Score: 1

    If I go back to when I started programming, my first goal was to create a game. It didn't matter at the time whether I was using some proprietary stuff like VisualBasic or older language like c or pascal. I had a goal in mind, which was to be able to control a simple sprite through a grid and I wanted to do it the simplest way that was possible. I still think the topic of first language is about motivation. You want to do something like you see. You don't necessarily want to learn a bunch of abstract design concepts like OO, design patterns. I needed something trivial and visual, yet extensible enough to allow me to add features I thought cool. VB was an awesome opportunity at the time as I could use drag and drop to manipulate objects and even though I was only manipulating widgets in a simple way, it allowed me to do all I required, even the more complex project ideas that followed.

    If I look at today's alternatives, I see squeak that does right that, backed by the great smalltalk language. It is simple and visual, yet offers great flexibility. If I had Squeak as a choice when I started, that's probably what I would have chosen.

    But it's all about motivation. Someone needs something of interest to work on and use the right tool for it. Programming is an art. You paint for yourself. And you learn to like painting. Then you try other styles: abstract, sceneries, portraits. And once you master enough your technique you can think about painting for others.

  97. Perl... by dogganos · · Score: 1

    ...

  98. Probably Python or Java. by Animats · · Score: 1

    Scheme is a good first language for MIT students. All incoming MIT freshmen already have mathematical thinking down cold, or they were filtered out by Admissions early on. So Scheme makes sense to that crowd.

    For high school students, I'd start with Python. Python has most of the good ideas in modern programming, it has reasonable aesthetics, and you can do a wide range of things, although somewhat slowly. Perl is too ugly and is bad for young minds. C/C++ forces you to deal too much with memory allocation. Java is OK. The more exotic languages are for later.

    There are a few schools that teach Forth, because you get to see the whole range from high level programming down to the hardware level. But it's too limiting, and dated.

  99. Best second language by Rashdot · · Score: 2, Insightful

    Best second language is assembler. To learn to understand what that first language is actually doing.

    what we do is craftmanship, not engineering

    Sometimes I consider the best programs as works of art too.

    --
    This is not the sig you're looking for.
  100. Why not scheme? by Lore17 · · Score: 1

    Scheme is my favorite programming language, and it wasn't even the first one I learned. Plus it supports multiple programming paradigms so you won't immediately be locked into one in the beginning as with Java or a c derivtive.

  101. Scheme "write-only" ? by dirtyhippie · · Score: 2, Insightful

    Scheme isn't remotely write-only - instead it changes how one thinks about programming for the better. If you really want to see write-only, let me introduce you to my good friend perl without strictures.

    1. Re:Scheme "write-only" ? by julesh · · Score: 1

      Scheme isn't remotely write-only

      Exactly what I was going to say. I don't have a lot of experience with Scheme per-se, but I doubt it's significantly different in this regard to most other LISPs; I recently converted an algorithm to Java that was originally described by its author by providing the source code in CMU Common LISP, and while there's certainly a barrier to reading it if you are unfamiliar with the syntax by the time I reached the end I would say I was reading it as fluently as any other language I've worked with. If it only takes reading ~2000 lines of code to achieve that, it's hardly a problem.

      Writing it may be harder, but reading is no real problem.

  102. Assembler: start there and stay there by Simonetta · · Score: 3, Interesting

    Start them with Objects... I had a hard time getting into OO programming because I started with a very low level language.

        I started on Fortran. It was horrible. Then I got a home computer with BASIC and advanced to assembly language.

        25 years later, I still am at the assembly language stage for programming. But I use different processors and tools. The language is not as important as the tools that support that language. Visual BASIC is great because it gives a simple easy-to-use way to create programs in a Windows environment. Its structural limitations are irrelevant. It is the cost and sophistication of the development tools that is more important.

        Now that you can buy a microcontroller for $1.50 that has more power than the original IBM PC, development tools like IDEs are the most important consideration. Computer science was important when computers cost a million dollars: it is meaningless today when they cost a few dollars.

        I detest C because I can't debug it on the IDE that controls my $1.50 microcontroller. I can read it and write it fine. I can work with it fine. But I hate it because it's too abstract. I have no idea of what exactly the CPU is doing.

        OOP is just science fiction; it's advantages are imaginary. If your application is so advanced and complex that you need OOP to create a program to do it, then it's time to completely rethink the idea of what a computer does.

        Computer science is the process of reconfiguring complex concepts to fit into the limitations of the machine. Computer science becomes irreverent when you realize that the more complex the problem, the easier it is to solve by redesigning the computer to fit the problem. Not reducing the problem into small enough processes that will fit into the machine.

        It is cheaper and faster to design a custom arrangement of 1000 $1.50 microprocessors to match the needs of complex problem than it is to write and debug the software that will 'solve' the problem on a $5000 standard Von Neumann computer. Microcontroller programmers are cheap and easy to recruit: OOP software development teams are expensive.

        This is the new reality of the 21st-century. OOP is the last gasp of the 'big iron' boys.

     

    1. Re:Assembler: start there and stay there by Massacrifice · · Score: 1

      If you program alone, then you are free to use the tools you want, and assembly is as good as anything else. The advantage high-level abstraction gives you is the scalabilty required to tackle large projects where multiple programmers need to coordinate their efforts.

      --
      -- Home is where you eat your heart out.
    2. Re:Assembler: start there and stay there by NewbieProgrammerMan · · Score: 1

      It is cheaper and faster to design a custom arrangement of 1000 $1.50 microprocessors to match the needs of complex problem than it is to write and debug the software that will 'solve' the problem on a $5000 standard Von Neumann computer. Microcontroller programmers are cheap and easy to recruit: OOP software development teams are expensive.

      Am I living in a different universe or something? I should build a custom machine with 1000 processors every time I have a new complex problem, instead of just writing a program in a high-level language that will run on my single $5000 general-purpose machine? Do these microcontroller programmers work for free or something?

      I mean, yeah, it sounds like it might be cool to implement a 3D finite volume PDE solver that uses adaptive mesh refinement in...assembly language...from scratch...running on 1000 processors...that I'll have to wire together myself. To be honest, it really does sound like it would be cool to do *once*, for a toy-sized problem, just for the experience, but I must have missed something if doing things this way is always the best solution. That seems awfully reminiscient of saying "programming language X is *always* the best solution for *every* problem."

      --
      [b.belong('us') for b in bases if b.owner() == 'you']
    3. Re:Assembler: start there and stay there by kbrasee · · Score: 1

      Wow. Do you really know what people use computers for nowadays? They use them for all sorts of things. Like the internet! I'd love to see you write the code for Slashdot in assembler, then run that on your "custom arrangment of microprocessors".

      Man, I just reread this post, and it blows my mind again. I guess when I'm writing web services that deal with insurance policies and quotes, I shouldn't think about them as Policy and Quote objects. I should instead think of them as:

      mov InitAmt, ax
      mov bx, 12
      mov ax, NewAmt
      mul bx
      mov TotAmt, ax
      mov bx, NewAmt
      add TotAmt, bx

      For reals though.

    4. Re:Assembler: start there and stay there by kbrasee · · Score: 1

      At this point, assembler is the best solution for very few things. Programmers generally output a pretty constant amount of code, regardless of the language they're using. So using something like Java or C# or C++ or Ruby or Python, where 1 line of code equals dozens of assembler instructions, is insanely more productive.

      Only in a software-hardware interface, or when speed absolutely has to be maximized, is assembler the best choice.

    5. Re:Assembler: start there and stay there by NewbieProgrammerMan · · Score: 1

      So using something like Java or C# or C++ or Ruby or Python, where 1 line of code equals dozens of assembler instructions, is insanely more productive.

      That's generally been my experience, and several similar arguments came to mind, but I just didn't think it would be worth the effort to write them all down this time. :P

      --
      [b.belong('us') for b in bases if b.owner() == 'you']
  103. BASIC by 4D6963 · · Score: 1

    Raise your e-hand if you're a programmer and your first language was BASIC. How did that turn out? Great for me.

    --
    You just got troll'd!
  104. English (n/t) by thePowerOfGrayskull · · Score: 1

    n/t

  105. In other news ... by dmarcov · · Score: 1

    Slashdot users think Linux is awesome.

  106. Re:I was fortunate to write my first program in 19 by hattig · · Score: 1

    Indeed. I would probably want to make them learn in an emulator - maybe Blitz Basic 2 or AMOS in UAE (or on a MiniMig), or BASIC on a BBC or CPC emulator (WinAPE also has a nice assembler, for those people that think that's a great idea for some reason).

    Sticking them in Visual Studio means a high learning curve - the software itself, and the language, and I also don't think any of the languages on that platform are suitable.

    Ooh, it's pub time. tata.

  107. C++ or Fortran by jlar · · Score: 4, Funny

    Personally I would recommend C++ or Fortran since that should quickly kill their interest in programming. And I really don't want more competition from bright young people.

    1. Re:C++ or Fortran by martas · · Score: 2, Funny

      just tell him to learn Lisp. one of two things will happen:

      1) his brain will melt. problem solved.

      2) he'll see the matrix and ascend to a higher plane of existence. With no more motivation left to get a job, he won't be any competition to you. problem solved.

  108. Pseudo Code by proc_tarry · · Score: 3, Interesting

    They are new programmers.

    If they want to understand the logic of computers, then they should write pseudo code first.

    Do this until they are not new programmers.

    1. Re:Pseudo Code by Inner_Child · · Score: 3, Informative

      So... you recommend Python?

      --
      Today is red jello day - all workers must eat all of their red jello. Failure to comply will result in five demerits.
    2. Re:Pseudo Code by Capsaicin · · Score: 1

      So... you recommend Python?

      As a first language, at this point in history, python has no serious competition.

      More than that, it's a pretty sweet language to get real work done in quickly and elegantly.

      --
      Better to be despised for too anxious apprehensions, than ruined by too confident a security. --Edmund Burke
    3. Re:Pseudo Code by jawahar · · Score: 1

      I'd suggest Perl for a young programmer.

  109. "Java, it rules the web"? by tepples · · Score: 1

    Then learn Java, it rules the web.

    Which side of the web does Java rule? Servlets on the server, or applets on the client?

    1. Re:"Java, it rules the web"? by Prof.Phreak · · Score: 1

      applets of course.

      Oh, and welcome to 1996!

      --

      "If anything can go wrong, it will." - Murphy

  110. Visual Basic obviously by Anonymous Coward · · Score: 0

    If you are a natural, gifted programmer you will learn never to use it for any real programming later on.
    If not, you will have learned all you need to be a successful PHB / financial pogrammer.

    Either way, your future is assured.

  111. Process is more important than the language by dmihalik · · Score: 1

    If you understand one, then you can understand nearly all. http://programphases.com/

  112. computer science by speedtux · · Score: 1

    Scheme is a good first year programming language for computer science students.

    It's not a good first year programming language for people whose main aspiration is to be a programmer. But why would those people waste their time studying computer science?

    1. Re:computer science by BoneFlower · · Score: 1

      Because the jobs call for a degree.

      I've seen entry level hell desk jobs call for a 4 year compsci degree. Not even a supervisor or lead position. Grunt tech on the phones.

      A good argument can be made that most of the tech jobs, perhaps even most programming jobs, shouldn't require a degree, or at least not a 4 year degree. But the fact of the matter is they do. You don't get the degree, you can't get the job no matter how qualified you actually are.

      Some places will budge a bit from the formal job requirements(but you have to be that much better in other ways), and there are some that are smart enough to not even officially require it when they don't actually need it, but many will just toss your resume in the reject bin without a thought.

  113. Some non-obvious choices by petrus4 · · Score: 1

    Bash scripting first; go study this, to learn bash. Then maybe some PHP, depending on what you're doing.

    Perl is abstract, hideously ugly, has utterly alien syntax unlike anything you will find anywhere else, and will make your ears bleed. Also don't go anywhere near assembler unless you are a mathematical savant. You also likely won't need to bother with C, either; 98% of what you might want to do in C will generally be done far more easily and painlessly in something else. Read this as well. Most of the hot shot Debian scrubs these days don't bother to, and they should.

    You will only need Cobol if you're wanting to do this for a living, and even then, it probably isn't a language which anyone should learn as a new skill these days; still, banks and other similarly eldritch, sadomasochistic institutions can sometimes still want it. With Java, who knows? Some people use that for various things, but ask before you assume people will want you to have it. If you can get away with avoiding it, do so.

    Also, do not try to learn to code purely for its' own sake; you won't learn anything that way. Find something you want to do; even if it's only something like setting up a cron job at first, and then do that. Learn vim or Emacs, read the RFCs for the net protocols, and listen to some psytrance while doing all of the above. Have a reason for doing it, and enjoy it while you do it, or you'll never get anywhere.

  114. The Touring Starting Problem - What First? by DannyO152 · · Score: 1

    In the 60s, I would accompany my Dad to the big IBM on campus and he would run (and debug) his FORTRAN programs and to keep us kids busy and out of his hair, he taught us a tiny bit of the language and let us go nuts on the card punchers. Even though it was FORTRAN and I knew no more than simple assignment syntax, it was enough to like computers.

    In 1971, a high school sophomore, I was fortunate enough to be included in an extra-curricular course in BASIC over teletype to a time-share. Old-school, number each line, single-letter with optional single digit variable names, Goto infested, Else-lacking BASIC. No matter. You think of something, you translate the ideas into code, you test, you refine, and you revel when it all works and input yields output.

    Let me be clear here, though the circumstances of my life meant FORTRAN (which was the language taught to the Math/Science/Engineering students of the 70s at the university I attended) and BASIC (which was taught to the Sociology students) were the first languages I learned, and while there are far better beginner languages available today, I had fun and they did teach me some essential truths about programming and the lessons learned underlie the code I write today, so, generics, yay, parallel semantics, yay, tail-recursion, may we have some please.

    The question "what language to learn" requires a follow-up question "Why do you want to learn that language?" If it's to get a job, I say, look in the want ads and go for the most requested language skill. But, to learn concepts, I think one should learn C, because speed and space matter, SmallTalk, for state and message passing, and Scheme, for functional paradigms and to imbibe the heady righteousness of no (or very limited) side-effects. These languages are trivially cross-platform and have excellent college-level texts affiliated with them. Take your pick as to which one first.

    You may have other languages which you think are better for OOP or FP. I have better languages, i.e., I get more done and/or I don't feel like I'm molasses jogging when employing them. But the languages I mentioned are, as Hollywood puts it, high-concept and the costs and benefits of the concepts are readily grasped. Languages arise as a critique of a language that preceded it. While everything and the kitchen sink languages provide flexibility and commercially mature libraries, their evolution looks to me as exercises in syntactic sugaring and the bolting-on of semantics, occasionally labored, that import a paradigm from another language. I mention this as apology for not replacing my three "essential" languages with either perl or python. Now mind you, the expansion of semantics is all fine and good when one is experienced in the language and its idioms, has a code base to maintain or extend, and needs to get the job done profitably. Well, I guess that's where I am and look at all that java I write, and, so, generics, yay, parallel semantics, love it, tail-recursion in the jvm, could we have that please..

    The cliche, though, is true. My java work got better because I've been doing things with C, Lisp, Scheme, and Haskell this decade. When it comes right down to it, the first language doesn't really matter, either the learner has fun with the problem solving and moves on or doesn't and won't. But let's get some fundamental concepts planted quickly.

    1. Re:The Touring Starting Problem - What First? by DannyO152 · · Score: 1
      Son of a.... Please read paragraph 2 as:

      Let me be clear here, though the circumstances of my life meant FORTRAN (which was the language taught to the Math/Science/Engineering students of the 70s at the university I attended) and BASIC (which was taught to the Sociology students) were the first languages I learned, and while there are far better beginner languages available today, I had fun and they did teach me some essential truths about programming and the lessons learned underlie the code I write today.

      My apologies, it did need one more preview pass.

  115. Best first language by dontmakemethink · · Score: 1

    Chinese.

    --

    War as we knew it was obsolete
    Nothing could beat complete denial
    - Emily Haines
  116. Obviously Emacs Lisp by plnix0 · · Score: 2, Funny

    After all, how can you start programming in another language before you've even got your editor configured?!

    1. Re:Obviously Emacs Lisp by Wolfbone · · Score: 1

      Actually you don't need to do any configuring of your editor before you can start learning to program: http://www.lisperati.com/casting-spels-emacs/html/casting-spels-emacs-1.html :)

  117. Online Coding Practice by icknay · · Score: 1

    Check out the free online coding practice code at http://javabat.com/ such as this cute problem: http://www.javabat.com/prob/p183562 (shameless self promotion)

  118. clearly python by Anonymous Coward · · Score: 0

    I think python has become the best choice for a first language.
    * It was designed to be easy to learn with first-time programmers in mind.
    * It's readable, it promotes good practices without constraining you to one style of programming.
    * It's general purpose and there has been convergence on it's use: intro programming classes at MIT and Stanford, configuration and system administration in linux distros.
    * It has many libraries which allow you to do high level fun stuff fast: sound, graphics, gaming engines, web development, genetic programming, plots an data analysis, natural language processing, robot control.

    As mentioned above, there are many choices, and motivation is more important than language choice, but the chosing the right language does help.

  119. Python is great for beginners, quick results by madmancanuck · · Score: 1

    I happen to believe that Python is an excellent language to start many beginners on. I happen to be on the Undergraduate Affairs committee for my University's Computer Science program, which is often tasked with picking the language for many first year classes. Ours used to be in Pascal, but it was decided that Pascal was too out of date, as the latest books on pascal that anyone in a first year class could buy, were published around 12 years ago. Python on the other hand is fairly new, still quite frequently used (including the Google Apps Engine), and had the extra benefit of showing early results so that beginners could actually feel like they are making progress. It also has the benefit of being able to work well in a procedural or object oriented language.

  120. Best first language by Orion+Blastar · · Score: 1

    BASIC is usually used because it was designed for beginners.

    Yeah we can skip the Visual BASIC because it has become too complex and is locked into Windows. A simpler BASIC is Free BASIC. It is also cross platform between Linux and Windows. Another BASIC is BASIC-256 designed for kids to use.

    A more easier and simpler language is Logo which uses a turtle with a pen to draw things and is designed for younger kids to use, but older ones can use it as well.

    It is better to start out children and teenagers on the easier and simpler languages so they don't get discouraged and give up. Do you really want to teach them C first and then try to explain the proper use of a semicolon and pointers? You teach them the languages you know later, after they mastered the simpler and easier languages. After mastering BASIC or Logo you can teach them C, C++, Python, Java, PHP, whatever later.

    --
    Remember, Slashdot does not have a -1 disagree moderation, and no, troll, flamebait, and overrated are not substitutes.
  121. Language is irrelevant... by jurgen · · Score: 1

    The author of TFA suggests Python... and I would concur if I thought language was really the important thing. But it isn't... what matters much more is HOW you teach programming. Python *is* interesting in that you could re-write SICP ("The Structure and Interpretation of Computer Programs", the Scheme-based MIT intro text) to use Python, or you could teach the "intro to data structures in Pascal" course I took my first year in college (1985) using Python. It's a nice, clean language that adapts well to almost any programming paradigm.

    But the real question is, are you going to use the SICP approach or the more typical procedural programming and data structures approach to teach (maybe with some superficial OOP thrown in)? You can do the former in LISP, ML, Python, and many other dynamic languages. You can do the later using basically any major programming language; nowadays Universities tend to use either Java or C++, although the aforementioned dynamic languages could be used as well.

    The former will presumably give you better programmers, but a much smaller percentage of entrants will survive the first year. So it's a quality vs. quantity thing, but the answer is by no means clear-cut... many of those who wouldn't make it through a first year of SICP could still become excellent programmers after a few years of a more procedural approach. And many of those who'd excel at an SICP course might get too bored with the tedium of most large scale programming to ever become software engineers, prefering instead to go into academic CS or other sciences.

    The bottom line is, it isn't language that matters but how concrete or abstract the concepts that you're learning first are. Do higher levels of abstraction make for better software engineering? Probably, but in a real software project it doesn't help you that the design is beautiful if you can't find enough people who understand it to implement it. Let's be honest... what percentage of working programmers even really groks recursion, never mind anonymous first-order functions or metaobject protocols?

    On the flip side there are those (like Paul Graham) that have argued that if you use higher level abstractions and a programming language that can express them, you only need 1/10th as many programmers. But I think only 1/100th of programmers today are capable of it, so that leaves us with a large deficit.

    Rambling on, :j

  122. Two Different Questions by muridae · · Score: 1

    It seems to me that there is an implied comparison between young hackers and CS undergrads. That the two require completely different languages makes this two different questions. The first question that I read is "should young hackers start with the same languages as CS undergrades?" To which I can only answer "maybe." If the hacker is smart enough, has the resources and the desire to learn at a pace like that, and wants to learn the inner details of varying search algos, sure, throw them in the deep end. Scheme, C, assembly, give 'em the tools and let them work. Being a CS graduate student, or worse, is not about programing but research into ways to program for 10 years into the future. So, if that's what they want, let them learn the details they will need later.

    If the young hacker-to-be doesn't want that, why throw them into the same muck? Give them a language that does what they want it to do: Processing, Squeek, Pascal, Prolog; Lua, Lisp, Scheme, whatever. If they don't care which search algorithm is best because they plan to use which ever one is built into the libraries they have, there is no overwhelming need to teach that detail. Let them program in ways that are fun to them, and see how different that can be compared to forcing all the young hackers to learn the same way.

  123. Your first language shouldn't be TOO good by alispguru · · Score: 1

    The problem with Swiss-army chainsaws like Perl/Python/Ruby is that beginners see that you can do almost everything in them, and conclude that you can do everything in them, and there's no reason to learn anything else.

    I would have people start out with something really domain-specific (Javascript, Emacs Lisp, Mathematica) so that you must branch out sooner. The quicker beginners discover that there's always something different available, that it might be better than what they already know, and that they should be open to learning it, the better for their long-term skills.

    --

    To a Lisp hacker, XML is S-expressions in drag.
  124. Perl! It's good enough for slash. by asackett · · Score: 1

    Perl is a fine first language, very accessible in the early going and very powerful as your skills increase. It's free, and has outstanding community support. The slashdot effect that crushes other sites and servers begins with this one, dynamically generated by a bunch of perl.

    --

    Warning: This signature may offend some viewers.

    1. Re:Perl! It's good enough for slash. by TheSync · · Score: 1

      "Perl is a fine first language, very accessible in the early going and very powerful as your skills increase."

      Are you on drugs? There are 10,000 ways to write a line of Perl, with a million special elements that exist only in Perl, and is often write-only. It is a great language for experienced programmers to quickly write powerful scripts.

      I concur with VB as a good first language. It is easy to write (so not to turn young programmers off with insanely difficult syntax), and gives a bit of exposure to both procedural and object-oriented programming.

      Python would be my second choice, although I think it could use a bit of "cleaning up" before being a great first language.

      Java would be great, if someone would dramatically simplify the class library. Beginners don't need 50 ways of accessing the same object. Frankly, experienced programmers probably don't either for 99% of what they do.

      In truth, C is an important language to learn because it exposes the lower-level issues of programming. Not as a first language, but a second. People write things that have to work in real-time in C.

      I had a semester of Scheme, which was worthless to me. It is like a magic trick, yes I'm very glad you can do normal things in a weirdly obscure way, but I'd prefer readable, understandable operations.

    2. Re:Perl! It's good enough for slash. by asackett · · Score: 1

      perl -e 'print "Hello, World!\n"' doesn't seem so difficult to me. Plug that into the command line of any system with a perl interpreter installed and it just works as advertised.

      Your arguments against Perl are specious at best, and probably indicate nothing so much as your unfamiliarity with the language.

      --

      Warning: This signature may offend some viewers.

    3. Re:Perl! It's good enough for slash. by BoneFlower · · Score: 1

      Perl's strength for a new programmer is in the wide variety of programming techniques it directly supports.

      It is not, however, all that accessible beyond the most basic stuff. It has historically been designed such that every time a conflict between ease for the experienced programmer, and ease for the learner, exists, the experienced programmer won out. Always.

      This is apparently changing somewhat for Perl 6, I haven't read much about it but apparently Wall and the other leading Perl people do want to make things easier for people learning it. But without a break from the past so substantial that the new language is "Perl In Name Only", there really isn't a huge amount of progress they can make on that front.

      Perl's flexibility, especially for tasks bigger than a shell script but smaller than an application, makes it very good to know. Especially if your programming is primarily to support sysadmin or other duties rather than being the job itself. But it really isn't suitable as a first language. I'd probably even recommend C over Perl, integrating with the OS and various APIs needed to do real work is often easier that way.

      Python or Ruby are probably the best bets. Easy, flexible, and powerful enough for real world tasks. On Windows, C# or VB.NET(do not go to 6 or earlier, it was really a mess then) aren't too bad if the learner focuses on structure rather than the language. Objective C via XCode can serve a similar role on OS X.

  125. Re:I was fortunate to write my first program in 19 by Anonymous Coward · · Score: 0

    I to learned about programming some time ago. After a while, during the Ada uprising, this
    came into fairly common use:
    Ada is for criminals.
    Pascal is for students
    PL1 is for adults
    C is for consenting adults.

    think about what this says about the approach of each language!

  126. PHP FTW! by msimm · · Score: 1

    At least for some, even if it's not a perfect language, it might be a nice way to get their feet wet by producing things they find interesting

    --
    Quack, quack.
  127. Turbo Pascal by shiftless · · Score: 1

    If I were teaching an introductory programming course, I'd start by getting them out of the GUI, away from the complexity and distraction of "modern" development environments and languages. I'd set them up in DOS with Turbo C or Turbo Pascal and have the write simple (progressively more complex) text games. This is how I started in programming when I was a kid, and looking back, it really is the best and easiest way to learn.

  128. Something Useful by izomiac · · Score: 1

    I remember the most annoying part about learning a language in a course was that I couldn't really make what I considered to be "real programs". For BASIC and Java you have to install interpreters (meh, I guess a VM isn't an interpreter per say). Therefore, you can't really make a program and give it to your mates without going into long details about how to get it to work. Even then, if it's Java then any GUI you make won't look native, so it doesn't look like a "real program". So my suggestion would be to start with something that can make a .exe file for Windows that anybody can run, and teach how to do that.

  129. What's wrong with learning Latin? by cupantae · · Score: 1

    I am frankly amazed that a large group of (supposedly) logical-minded individuals have not yet defended poor Latin. If something IS in fact the "Latin of programming languages", then for Dog's sake, learn that first.

    The Latin of programming languages is the one which forces you to understand why there are such formats and conventions in programming. It is the one which doesn't let you get away with sloppiness. It is the one that has few ways of expressing something, and each way is clearly distinct from the others.

    --
    --
  130. Python is good for kids by EccentricAnomaly · · Score: 1

    C can be good for introductory programming classes at the college level because it also teaches you about how computers work.... but for kids I think a higher level language like python is a good starting point.

    I personally don't like python for numerous personal reasons... but I'm teaching my son Python as his first computer language for the simple reason that there's a very good kid's programming book out there, and it uses python: "Hello World! Computer Programming for Kids and Other Beginners"

    link: http://www.manning.com/sande/

    The link above has some sample chapters to look at.

    I've also set him up with Ubuntu to learn with. Ubuntu has a lot of free educational software (with the edUbuntu bundle), runs very well on a cheap netbook, and the unix security model keeps him from installing tons of junk programs off the web that cripples his computer. Though it would be nice if ubuntu had some of the OS X parental controls... especially with email and chat.

    --
    There are 10 types of people in this world, those who can count in binary and those who can't.
    1. Re:Python is good for kids by Anonymous Coward · · Score: 0

      For University courses, I'd say that any non-programmer that goes into them is perfectly able to learn C without being any more close to the machine than if she had been learning QBASIC.

      The Introduction to Electronics equivalent with its section on assembler is what saves most. Still, shifts and bit operations are not first class operators in C courses and are barely teached. Additionally bit fields are a non-portable and broken standard and nobody teaches them.

      C can be closest to the machine but you have to jump many hops. malloc and company are close to the OS, and only because the standard library is meant for teleprinter systems with 2 kb of memory. If C had garbage collection and BASIC functions instead of a bunch of dangling pointers, the two would be hardly discernible.

      IMO, BASIC is and has always been the best language for beginners. Especially a structured dialect like QBASIC. Easy output to screen and graphics, combined with a limited number of instructions and straightforward control flow is what a real beginner really needs.

      Python has the easy output part(more or less), but lacks the simplicity. It is a good language for experienced yet alas lazy programmers, but teching it to beginners is going to break them more than any GOTO ever did.

      I am speaking for the average person. Some kids will grab C++ tutorial for n00bs, learn that diabolical language and be able in days to write their own 3D games. Others would be scar(r)ed to death.

    2. Re:Python is good for kids by Anonymous Coward · · Score: 0

      grammar is barley teached, it seems

      and spelling is bareley taught...

  131. Oh brother! by tjstork · · Score: 2, Interesting

    That (and some of the stuff in your link) is about all we agree on. I read you comment and I know EXACTLY your type.

    Stop.

    You really think you know my type? You, just like every of your type, have it in your head that everyone has a a great desire to be just like them, or to do what they do.

    Honestly, I really don't. I have no desire to be like you at all. Like, I don't need to have people beneath me to affirm myself. I don't need to have power to be satisfied with what I have done. I have myself, my two hands, and my mind, and I do not want what you have and I don't need you.

    Its your shit attitude and likely awkward personality.

    Stop.

    Careerwise, I have no desire to move up any "ladder" at all. With the internet, who really needs a ladder. If I can write a program that sells or a web site that gets hits,

    while men in 3 pc suits, according to your skewed perception, seem to do nothing and make loads and take nice long vacation

    First off, I have no problem with the guy in the three piece suit that can actually sell a product or a project. Those people are worth their weight in gold, and they deserve every cent. I mean, take a look at Alan Mullaly. This guy was the CEO of Boeing and his job was to walk into a room, press the flesh, wine and dine do whatever it took to convince some other guys to write him a check for billions of dollars for his jet aircraft, over someone elses. Now he is going around to dealers all over the country trying to convince people to buy his cars over everyone else's. Who care if the guy gets paid 50M a year or even a 100M a year when he is one of the handful of people on the planet that can turnaround and sell hundreds of billions of dollars worth of stuff. That's chump change to pay the guy, and there's not that many like him that he is replacable.

    But most MBAs can't sell. So.. the whole supposed gift of customer communication that they have is really so much of a distortion. Either you can bring home the contracts, or, you aren't any better at communicating than the developers who work for you, no matter what you wear.

    My advice to you would be to always tell the truth, because I don't think people like you do.
    By telling the truth, I mean that, in your communications, you convey an accurate impression of a situation to the stakeholders. Spin is lying. Leaving out something, is lying. Communicating one motivation that makes logical sense while pursuing another is lying.

    Like, I just had one guy go and explain to the client in an awfully written email just how much work they did in this little area, very self promotional, but left out the very material fact that all of that work was rather a small and unimportant part of a much larger problem that they had not solved... which I did.

    consider the dumbest person using the software, put yourself in their shoes, and design the thing

    Stop.

    The fact of the matter is, most managers do not care about user interfaces or the users at all. Most people like you see projects and consumers as stepping stones, a mountain of people to be walked up as you go up the ladder. Are there programmers that do not care about user interface? Sure, probably are. But, there's as many managers that drive shortcuts, sweep problems under the table, misrepresent the success of a particular user interface design, hide obvious usability problems, and so on, and then turn around and blame the customer.

    But again my long term success is based on myself. If I can write something on the internet that people are interested in purchasing, or reading sufficiently, then that's great and I can achieve an independent life. But if not then, I can still contentedly work on as a senior developer knowing that, I gave life my best shot trying to achieve what I wanted to achieve, and maybe I just wasn't good enough. It's the opportunity that I've been given by God and Country that I'm grateful for, and I don't need or expect anything more.

    --
    This is my sig.
  132. BASIC by Anonymous Coward · · Score: 0

    I wish there were some language like BASIC still around these days. When I started programming a little over 20 years ago (I'm 29) I was able to plug my older brother's Vic-20 right into the TV and start writing code from there. Power on, "3000 bytes free, Ready.", in less than 1 second. You start hammering away with simple BASIC statements and if you want to organize it into a bigger program, prepend line numbers. Everyone can get that.

    BASIC's grammar was forgiving and simple. You can turn on a Vic-20 or a Tandy (big at the time) and more or less be greeted with a prompt immediately.

    The API (if you can call it that) was simple. You can more or less immediately enter PRINT, DRAW, or PLOT commands and get cool stuff on your screen, and with enough practice you get to know what you're doing. No "import", no complicated Swing/TK APIs with a ton of commands to set up your graphics contexts, etc. No compile steps with confusing messages about how the computer didn't like the organization of your statements / you forgot to link something in. In a few thousand bytes of machine code, the BASIC interpreter worked with you beautifully.

    Instant gratification is a great motivator, as pointed out in the article. That's how a youngin' gets started. Eventually if he/she's interested they'll mature (programming-wise) and branch off into C or Java or Python (or in my case, assembler, since my parents didn't want to buy me an expensive C compiler and all I had was DEBUG.EXE and it's "a" command that lets you enter assembler instructions now get off my dang lawn!).

  133. Anonymous Coward by Anonymous Coward · · Score: 0

    J. www.jsoftware.com . Free, easy to use, powerful. Array based, functional programming, object oriented (optional, mix and match with procedural), built in complex and rational numbers, lots, lots more.

    Program to compute mean:
    +/ % #

    + = add
    / = adverb "insert" (inputs a verb) outputs a verb
    % = divide
    # = count
    three verbs in a row = fork, creates verb (+/ y) % (# y) where y is the input.

    Woooooo, hoooooo!

  134. Scheme by D+H+NG · · Score: 1

    I first learned BASIC on my own through reading "Programming for Kids" books. But those books really didn't teach me anything about programming, just how to copy code from the book to make computer games and other cool things. The first programming language I formally learned was Scheme in my college introduction to programming class. Our textbook was How to Design Programs and we ran our programs with DrScheme. As Scheme is an interpreted language, we didn't have to worry about compiling our code or creating classes. Since Scheme is a functional language, we had to think about how to define functions and how to call them. Essential programming concepts such as recursion and looping come to life in Scheme, and we had our first taste of various data structures (linked lists) and object-oriented programming. The next quarter, we moved onto Java. I think those of us who took Scheme first before moving to Java did much better than those who began with C++ or with Java.

  135. Other platforms? by Anonymous Coward · · Score: 0

    I started programming in Basic on various calculators. First the Ti-74, which is older than I am, and when I was 13-14, I upgraded to Ti-83+.

    It is a great platform creating simple programs in some sort of basic syntax, but using a computer, one may also create programs in assembler.

    I would say that Java is a great language to start with, since one can quite eaisily create fun games and useful programs in that language, which I believe is important to keep the audience.

  136. Languages do mess people up.. by tempest69 · · Score: 1
    When a person moves from one language to another, they map the now language to the old with "exceptions" so from pascal to c you realize the exception of asign is now = instead of := and compare is == instead of =...

    Now since my first few programming languages were = comparitors I slip up on if (x=y) from time to time.

    going from c to perl.. I sometimes skip one line mandatory bracing, because it's optional in c. then I scream a homer doh on compile time.

    from python to java you dont think about the .isequal() for a string

    With java, you hunt an import if you want to deal with a large integer. with python you ignore it, it loves them from the start.

    Anyway, start a person on a very clean language python, ruby, or perhaps smallbasic. Personally I'd go ruby, as it is close to the C and java syntactic form. Making the transition quite a bit smoother. ruby has a nice set of object functions that work very well. Ruby gives you a bunch of power, and can keep a person excited..

    smallbasic may keep a less interested person interested, as it is a very graphical system.

    Python is the change of pace used to dicipline insolent students who lack the good graces to properly indent.

    Storm

  137. Teaching something marketable.... by EccentricAnomaly · · Score: 1

    If you want to teach someone something marketable for first language and there are plenty of .Net jobs out there, C# is much better choice.

    Heh. If you want to teach them something that will make them rich, set them up with Objective-C and an iPhone :-)

    --
    There are 10 types of people in this world, those who can count in binary and those who can't.
    1. Re:Teaching something marketable.... by Sir_Lewk · · Score: 1

      Heh. If you want to teach them something that will make them starving artist types, set them up with Objective-C and an iPhone :-)

      Fixed that for ya.

      Really, it is quite unlikely that iPhone programs will make you rich.

      --
      "linux is just DOS with a UNIX like syntax" -- Galactic Dominator (944134)
  138. SmallBasic by freakyfreak2 · · Score: 1

    Last year MS released a new language and IDE called Microsoft SmallBasic. It was intended to help teach beginning programmers the basics while giving them a more modern interface and framework. Kids can easily write graphical programs and games.
    Assembly, scheme, C, C++ are all great languages in their own right but for a beginning program they will not be enjoyable at all. The whole reason many of us became programmers was because it was fun and rewarding. This is one reason why many people started out with BASIC, it makes it easy to get that reward, that payoff. So many people started with Apple Basic or QBasic. SmallBasic fills that role. In a few lines someone can make a desktop background slideshow of images from flickr or write a program to make a ball run from a mouse. I've already taught a few kids smallbasic and they found it fun and it gave them the desire to learn more and expand their knowledge. If I had started out having to learn assembly I would have ran away fast from the programming world.

  139. Learn state charts by Anonymous Coward · · Score: 0

    I wish I'd learned UML first. Whether I use automated logic or hand-coded implementations, it has always paid off to have a good abstract representation.

  140. Some form of basic and then C by Anonymous Coward · · Score: 0

    You need something that won't bite your bum, but you DO need your next up language to be fairly straighforward.

    BASIC to learn how to make loops and so on (and so that you can't trash everything without finding your debugging skills inadequate).

    C to teach you how to use your programming CAREFULLY.

    Once you have C down pat, you can work on powerful languages from the language standpoint. Python, PERL, Java, whatever. No matter the paradigm, you can almost always get the code done in a C style.

  141. The absolute best language ever, for anybody by alc6379 · · Score: 1

    Profanity.

    It doesn't matter what language you actually program in, but your productivity and efficiency is greatly impacted by how well versed in profanity you are, especially after getting your compiler errors, and not understanding them.

    --
    I don't moderate anymore. Karma penalty for 90% fair mods? Can I mod that unfair?
  142. How about BASH? by Anonymous Coward · · Score: 0

    The GREAT thing about shell scripting is that you can run each step and see what it does and then put them together.

    E.g. if you want to get the names of all the files in a directory that have .txt on the end and contain a "#" at the beginning of any lines in it, you can first try finding a test that will make one file go "OK" then write that in a for loop.

    But you can run the test you want again and again until you get the right set of checks done.

    And THEN worry about how to make a program out of it...

  143. Wish I learned Python in yr1 CS, not Sceme by larry_larry · · Score: 1

    I recall having to learn Scheme and Fortran in first year CS after already knowing Basic & Pascal. Scheme was good for some theory on functional programming and recursion but not very practical for side projects (like web-apps and such). Today I think Python or Java would be a good first language and I think new programmers should be brought up to speed on OOA/OOD/OOP ASAP. PHP might be another good option, which would tie in with HTML. I think young people should be taught a pragmatic language that allows them to get whatever pet project they can dream up off the ground. More and more these pet project would likely be a web-based app.

  144. Try many languages by Millenniumman · · Score: 1

    I think it's misguided to start out focusing on any one language. Using different languages helps you understand what's going on in the larger picture. I think once you can grasp the fundamentals of programming, and you can generally understand a variety of languages, then you might want to try getting more heavily acquainted with whatever language you like. C and Python are both very accessible, and they can help you learn things about each other. C gets you bare metal memory/pointer stuff and static typing, and Python allows you to branch out and do more complicated things more easily. Neither are necessarily my favorite language, but they are very common and reasonable.

    Java might also be a good idea, to focus on OO concepts. It's not as easily accessible, though.

    Another issue is the amount of flexibility in a lot of languages. C++ especially incorporates so many concepts in complicated in differing ways.

    I do think the syntax differences help in grasping what the syntax actually means.

    --
    Stupidity is like nuclear power, it can be used for good or evil. And you don't want to get any on you.
  145. I'll probably get flamed by hairyfeet · · Score: 2, Interesting

    For saying this, but the answer is right there is you RTFS....Good old VB6. The VB6 IDE was nothing if not simple, you drag and drop whatever elements you wanted, go "clicky clicky" to bring bring up code view and really butt simple for making little apps. Once the kids have gotten to make their own programs for awhile THEN you can move them up to more complex languages. But nothing excites a kid more than "I made this!" and VB6 is nothing if not simple to make little apps.

    And their are plenty of places like vb6.us and a1vbcode and find tons of heavily commented code snippets to show them how to make anything from a little GUI for keeping up with videos to slot machines. And with VB6 it is beyond simple to play with code like that and see what makes it tick.

    So while a lot of the "real programmers" will be screaming bloody murder because I dared to bring up old VB6, the simple fact is it is really good at the niches it was designed for. It is really good at cranking off an app quickly and it is really easy to get started with. Both are requisites IMHO for teaching kids programming. After all, if they can't see that they can make the PC "do stuff" pretty quickly they are gonna get bored and not want to continue long before they get to the good stuff. And with VB6 you can have it popping off little message boxes and other little tricks within the first hour of picking it up.

    --
    ACs don't waste your time replying, your posts are never seen by me.
  146. State of software today by lbonser · · Score: 1

    Jeff Atwood makes a valid point: writing software is craftsmanship and not engineering. And that's why there's so much crappy, buggy, bloated, nearly unusable software. It SHOULD be engineering. And the most stable software ever written is engineered. And it's never crashed once. It's the flight control software for the Space Shuttle.

  147. Not keeping the youth in mind. by RavenousBlack · · Score: 1

    I've seen countless discussions on what programming language to start off in, especially when you're younger. People will throw around all sorts of suggestions based on what they wished they started learning about at first; learn Java because it teaches you OOP and you can use it on any system, learn C++ because it's used everywhere, learn Assembly because you'll understand memory and everything completely, learn Pascal because it's easy to understand. But none of this is considering the youth's actual interest in programming; why they want to start programming. Whenever I first started programming around 14 or 15 I wanted to see results. At first I was in a stupor to learn that my program wouldn't be in a GUI automatically and that I'd have to stick my programs in a command line program. Really, this kind of angered me and turned me off of programming at first. I'd say, the best language for a young programmer would be something that can truly get them results, so I'd suggest Python or Perl because of their enormous selection of libraries and modules that give you a simple interface to do so much. If you can get a youth interested by giving them a lot of power that's easy to understand, then they'll learn a lot about programming concepts in ways that interest them and they'll be captivated enough to go further and learn the other languages and concepts. Youth won't be interested in learning how to be software developers, you need to show them a reason to.

  148. English by Anonymous Coward · · Score: 0

    Obviously

  149. Teach a natural language instead! by meketrefi · · Score: 1

    Nonsense. Just teach the kids some German, telling them to put ( ) in front of all verbs, to use adverbs as parameters inside those brackets, to make assignments by writing this_noun=this_adjective and, finally, tell them that you actually get the bugs out of idiomatic expressions badly-positioned in silly arrays.

  150. For what it's worth by Alarash · · Score: 1

    For what it's worth, I just gave a nice beginner programmer's book to my younger brother. He never programmed in his life, as his job is all about monitoring and fixing critical server operations for a major French mobile company. So the extend of his development skills are Shell scripts. The book I gave him is one of Oreilly's "Head On" series, and the language is C#. I think it's good to start with an object-oriented language, and C# being simpler than C++ it makes sense. So far he's loving it and he made quite impressive progress. Since he's basically self-learning maybe he's missing a point or two, but overall I think he'll be able to write small apps or website quite quickly. I self-learned programming about 10 years ago, and never made that my main job either. But I picked up PHP after a quick introduction to C/C++, and that gave me a ton of bad habit I wouldn't have picked up with C# or if I stuck to C++.

  151. Basic by shentino · · Score: 1

    I think Basic is a nice language because it's probably the closest to english out there, and thus the one likely to be picked up the fastest.

    It has a comforting lack of rampant symbol usage (the semicolons, commas, and braces that can look like greek).

  152. Definitely Javascript by fatalGlory · · Score: 1

    Use HTML for a GUI, easy to use and produces VERY pretty results for first timers. Suddenly you've got a very easy environment installed on almost every computer for learning an interpreted (fast to compile and debug) language with C-like syntax. Note: I'm of the totally unbiased opinion that C/C++ programming is *real* programming. Anything lower than that (e.g. ASM) is probably wasting time reinventing the wheel, and anything higher than that (e.g. Java, Python, PHP) is like having the actual work done for you (though this is often a very relaxing bonus, lol).

    And though this will be incredibly unpopular, I can only promise it isn't flamebait when I say: I despise PERL's syntax and all the the people who love PERL are well-meaning, sincere and BADLY mistaken, lol.

    --
    Censorship is the opposite of education. If neo-darwinism were defensible, people would not need to try and censor ID.
  153. APL is easy! by AliasMarlowe · · Score: 1

    Well, APL was my first programming language. Along with Fortran-66, that is. APL was much easier, however, because it was done at a teletype terminal and used stored workspaces, and its primitives corresponded to useful processing operations. One line of APL could do the work of a lot of lines of Fortran - often hundreds. Fortran involved boxes of punched cards which were run as overnight batches, unless a card jammed or got torn in the reader. The probability of a card reader screw-up approached unity if the number of cards exceeded a whole box (2000); this determined the practical maximum size for a program.

    --
    Those who can make you believe absurdities can make you commit atrocities. - Voltaire
  154. Java and the right books by thetoadwarrior · · Score: 1

    Java is a good language to teach someone how to program and it is harder to write really unsafe code, like PHP (which is easy to learn but also easy to fall into bad habits) and if you get them the right books to accompany it, then they'll write superior code and learn algorithms.
    Effective Java and beginning Algorithms are two useful books but they'll need to know some Java before delving into those books.

    For learning Java, Core Java 1 & 2 are excellent. If you don't want to spend money to start with then you can start with The Java tutorial as that book is also available for free in html form on the sun site.

  155. Python by zukinux · · Score: 1

    Definitely Python, as it can both teach regular programming pretty easy and also can teach OOP concepts easily as-well
    So, learning python can be a start to learn C++/C#/JAVA and help understand it much more. Also, It's quite easy language, you can do pretty much whatever you want, it will help you understand sockets, file parsing, oop, variables a bit less though (it will make a new programmer a bit confuse) but overall it's a great language and I couldn't be thinking how my life would be without python :)

  156. Lego, Logo, Turtle Graphics by Anonymous Coward · · Score: 0

    Depending on how young, the Lego Robotics is a great way to combine fun building with fun programming. There may be a modern variant for Apple Logo and turtle graphics to teach control structures and the basic algebra, analysis and logic required to write programs. Here are some Turtle Graphics links I found:

    • http://sonic.net/~nbs/webturtle/
    • http://www.bfoit.org/Intro_to_Programming/TG.html

    More about Lego Mindstorms: http://en.wikipedia.org/wiki/Lego_Mindstorms

    Competition for Middle Schools: http://www.usfirst.org/community/fll/

  157. Please learn ruby and python by QX-Mat · · Score: 1

    Please learn both Ruby and Python, and while you're at it, some Javascript/JQuery/Mootools cool stuff too. And do it all using full systems hungarian notation. In vi. On Solaris. Upside down!

    AND

    If you feel like having some fun, adopt and a silly "langauge" like brainfuck or MS ASML (a quirky state machine language you can do OOP in).

    Because of the current economic climate, please do not learn C, C++, Perl or Java. Please do not approach any VHDL gigs either (nb: you'll design some plain awful crap until you've done your advanced systems/digital modules). Please do not learn any programming abstraction methods or useful models - specially via the easy-peasy Java intro to it all at http://www.bluej.org./ Dont learn Qt or STL, and especially avoid OpenMP and Boost. Dont code a transaction engine, but DO make use of obscure SQL calls and extremely long queries with lots of stored proceedures on unnormalized sets. If you know when to use singletons, RAII/smart pointers or observer patterns, or know when to hit someone for telling you how to program, then stop: STOP I said! Forget everything you know and start again. Perhaps you could learn how to code a standards compliant doc type definition spec for the process of eating cheese. If you've learned anything useful, stop and spend time coding an XML parser or i18n input library, or if that's too hard, go and add lots and lots of structured exception handling to your favourite open source library.

    In advance, I'd like to thank you for not competing with me and everyone else who's graduated or recently been made redunant.

    Cheers,
    Matt

  158. How about an English-like language? by RunRevKev · · Score: 1

    You could try learning with revTalk. Its a very high level, English-like language thats easy to learn, read and write. Instead of focusing on esoteric syntax, you can focus on what you're trying to do. Its perfect for beginners because they get to see results very quickly. Yet its powerful enough that you can learn proper principals of software engineering when you're ready. There is a free version available for all platforms http://revmedia.runrev.com/

  159. The language doesn't matter, it's the fundamentals by sitarlo · · Score: 1

    When I learned programming, back in the dark ages (70s-80s), compilers were expensive and hard to come by, and something like a UNIX system was almost impossible to get time on. PCs were in their infancy and home computers made by Apple, Atari, Commodore, and TRS relied heavily on BASIC and Assembly languages for software development. I learned BASIC first, then some assembly, then Pascal and FORTRAN in school, but I didn't really start learning the important fundamentals of software engineering until I was exposed to C on UNIX. I struggled with C++, coming from a structured way of thinking, but learning Java cured me of that disease and gave me an understanding of advanced OO concepts, patterns, etc. It is these fundamentals that transcend languages and knowing them allows an engineer to be useful with *any* language given a short learning curve. Today UNIX is freely available in various flavors and so are compilers for just about any language. I would strongly suggest learning programming by writing the same program in several different languages. This will allow you to focus on programming fundamentals while learning to make language concerns secondary. C and Java are probably the most comprehensive languages as well as being the most valuable to know. No language is all that easy to learn, but you will be surprised at how fast you get good with practice.

  160. Anonymous Coward by Anonymous Coward · · Score: 0

    Sequence, selection and loop are the basics of the procedure part of any programming language. So, begin with BASIC language, then move to C for functions, pointers and memory allocation etc., then move to C++. Unfortunately, most of the books do not teach you to crawl, walk and run in the teaching, rather most code shows how the author developed his code. Too much noise (adding all sorts of information) that distract the student as to what should be done at each step.Algorithm design, verification of the algorithm, flow charting, bench testing and tracing before coding is ignored and people start pounding on the machine and try to write code and debug and make a mess both in their life and the company they work for. Learning to program is a well structured effort and one should learn all these aspects. So, the first programming course should start with problem solving and using a simple language like BASIC.

  161. Flash with AS3 moving to all OOP by mikerz · · Score: 1

    In my opinion, the most important part of starting a computer language is cementing an interest and desire in using it. For the beginner, it is ideal because it is an extremely visual way to work (out of the Flash IDE at least -- you could get a free version using the Flex framework if you wanted but it would be running out of Eclipse). AS3 is easy to use since it can be used as a basic scripting language. It can be used totally as an OOP language as well. The transition of working on the "timeline" and moving to Document Classes offers a lot of practical education. It's in high demand professionally, and once you get really good with it on a OOP basis -- you are well on your way to understanding many other languages.

  162. Confusion by Anonymous Coward · · Score: 0

    After reading the TFA I cannot help myself wondering what the purpose is. Is he trying to teach the 15 year-old to program or is he trying to get the 15 year-old make the computer to "do stuff".

    He might be better off starting off with a raytracer like Pov-ray, fractal software, L-systems or playing with a game like Mindrover or such to get a feel for how to express oneself in a structured way. If you want to encourage exploratory interest, get him hooked on something he is interested in and then introduce the concept of programming as a means to let him achieve something he is after. At that point the choice of language is either obvious or doesn't matter that much.

    Also, I believe that you can introduce more than one language, preferably rather different ones, quite quickly. This to prevent one to get stuck in one mindset. A young mind is malleable and I think can handle this without too much problem.

  163. Basic by MeanGene · · Score: 1

    1st language = Basic
    2nd language = Fortran
    3rd language = Lisp = nirvana!

  164. AutoIt by Anonymous Coward · · Score: 0

    AutoIT(http://www.autoitscript.com/) was a good language to start in. It has a great help document that gives examples of every function. Their forum is also full of helpful people.

  165. How I did it... by Anonymous Coward · · Score: 0

    My intro course was basically a UML course that utilized java for implementation. Afterwards, I took a scheme course, The interaction of those two was about perfect for me, things clicked on both the "abstraction and design" side and on the "fighting it out with the machine" side.

  166. I'd start with Tcl/Tk by Anonymous Coward · · Score: 0

    Tcl/Tk has a lot of advantages as a first language:

    1. Small language with a simple syntax.
    2. Interpreted language, so no compiling necessary.
    3. Can be used interactively.
    4. No silly whitespace/indentation issues like Python. :)
    5. No memory management issues.
    6. Built-in GUI library that's easy to use. Creating a window with a button that performs some action when pressed is a one-liner.
    7. Not object-oriented. I think starting off with OOP is a bad idea, they can learn objects later.

    1. Re:I'd start with Tcl/Tk by Anonymous Coward · · Score: 0

      agreed siree!

  167. Which is why "nothing works and nobody cares" by Master+of+Transhuman · · Score: 1

    "what we do is craftmanship, not engineering"

    No, it isn't.

    --
    Richard Steven Hack - This sig is TOO GODDAMN SHORT TO DO ANYTHING USEFUL WITH! MORONS!
  168. 1st programming language should NOT be a programmi by Anonymous Coward · · Score: 1, Insightful

    1st programming language should NOT be a progamming language!!

    Teach FORMAL LOGIC first!!!

  169. Assembler Canard by QuestionsNotAnswers · · Score: 1

    Plenty of programming requires virtually no understanding of the metal. When you program SQL statements, you change your memory allocation patterns, use pointer foo, and use gdb to help?

    Assembler skills do not help with Javascript DOM programming. I use tools to help detect memory leaks (in the browser) and performance issues (unpredictable shit - not simple O(n2) problems), and the techniques for avoiding or fixing problems bear no relation to machine code. I do have some basis for my opinions: I started with basic and assembler, and my first job was doing embedded development where knowledge of the internals did matter.

    You are presuming that teaching shitty programmers Assembly will teach them to be good programmers. More likely you are a good Assembler programmer, so reflectively assume that "good" programmers must know assembler.

    --
    Happy moony
  170. English - Structured by Anonymous Coward · · Score: 0

    A famous Engineer here in Uruguay wrote "there is only one programming language, and it is English". (We speak spanish natively).
    The best advice I can give to CS students is to learn English very well. Then they can understand better most programming languages and of course can tap the resources that are on the internet, mostly in English.
    Anyway, as someone wrote, learning to be precise in what you want to program is what I think is most important, that is why I try to teach students to write first the algorithm in their native language, in a structured kind of way.

  171. True BASIC by gregrah · · Score: 1

    I have very fond memories of learning to program in True BASIC in high school. It's a logical step up from the TI-83 BASIC that I assume any mathematically inclined high-school student is familiar with these days, and it provides a straightforward IDE to get students up and running in minutes. Most importantly, perhaps, it provides an intuitive library for plotting various lines and shapes and capturing user input, which means you can create games relatively easily (essential for sparking the imagination of a 15 year-old).

    Sure, True BASIC was pretty outdated even 10 years ago when I was learning. But to the student who is just beginning, the programs that they write will feel a lot more powerful than the console-only apps they would start with in C++ or Java.

  172. Why not SQL? by metachimp · · Score: 1

    I'm sure people will scoff, but think about it. With SQL you will get logic, types, and structures. It's in basically plain English, so no bizarre lexical structures to get in the way. No compiler necessary, and the tools a student would need are cheap and plentiful. All the school has to do is provide access to a database server.

    After all, data is what's at the heart of so many applications.

    The point of learning C++ or Java is to get at data in the first place, so that would seem like a logical place to start. Unlike scheme, it also has practical use in the real world.

    --
    The system has failed you, don't fail yourself. --Billy Bragg
  173. kids need a reason to program - gamemaker by stefancaunter · · Score: 1

    Nothing about why a kid would want to write programs.
    My oldest son started playing on my MAME rig at the age of four, GBC/GBA emus at six. He loved the 8 bit Nintendo games.
    By age eight I showed him GameMaker. Community, sprite sheets, people writing fan versions. He loved it.
    I mean, I'd show him perl and shell and he'd be like, why? But being able to write your own games, that's a motivator for him.
    He still does GM stuff, but spends most of his time in Flash, again because it does what he likes.

  174. Start with Basic and let them go from there. by Anonymous Coward · · Score: 0

    The most important thing you can do is make them realise that programming is useful and fun - once they realise this they'll be self motivated to learn and you can introduce them to trickier and more powerful languages so they can really get going. Basic is good for this: it let's them get going with relative ease and produce useful stuff, but they'll soon enough begin chafing against its limitations, providing the requisit motivation to branch out into "serious" languages.

  175. Assembler-Transistors. by Ostracus · · Score: 1

    Heh, try being an EE. You'll know how a CPU works inside and out. Will it make you a better programmer? Maybe one that does embedded systems.

    --
    Shai Schticks:"You don't make peace with friends, you make peace with enemies"
  176. The reason there's so much discussion is often... by sarkeizen · · Score: 1

    That the question is poorly defined... I mean "What's the best first programming language" doesn't provide much useful information (even in the article) about what "best" means. What are the "learning outcomes"? - even if you define those kind of informally. The fact that the writer of the article gave an answer without defining the question is the reason he failed to answer the question correctly. QED.

  177. Er, why are we reading about this? by seebs · · Score: 1

    After the idiocy of his "hacker ethic considered harmful" was pointed out, why are we still seeing this guy's junk?

    --
    My blog: http://www.seebs.net/log/ --- My iPhone/iPad app: http://www.seebs.net/seebsfrac/
  178. Lisp anecdote by cstacy · · Score: 1

    On a several hundred mile road trip with my niece, a high school junior who hadn't ever been exposed to computer programming before, we decided to kill some time by learning on the laptop as the cows and outlet malls rolled by. I fired up Emacs for use as the IDE to Common Lisp. She was editing fine within minutes, and before we got home she was writing her own functions. Did some arithmetic and logic stuff, hashtable usage, strings, symbols, and the result was the beginnings of something like the ANIMAL game.

    She found the entire experience to be "Oh Cool!" just plenty.

    She can't wait to tell her boyfriend that she did some Lisp programming - he's into computers!

    I submit that the "best language" depends on the student and on the experience that the teacher can give them, and that you don't even need any graphical interfaces to excite sharp young minds.

  179. wordpress (PHP, MySQL, Javascript, HTML, shell) by pi865 · · Score: 1

    I would venture to say that many entrepreneurial kids these days (myself included) want to learn what they broadly think of as "programming" so that they can build great websites that they can ideally sell later on for lots of money, and get on with their "portfolio career". The barrier to entry for implementing a web-based business model used to be the $30,000 sunk cost of hiring a programmer to build a dynamic website with web 2.0 functionality. Now, CMSes like Wordpress, Drupal, Joomla et al. offer the opportunity to start that business for next to nothing, if you have some web dev skills. If one jumps into wordpress as a, let's call it an environment, one learns things, languages, principles, in a haphazard way but learns them nonetheless (again, if one is going beyond basic blog functionality and a downloaded template). One can come to understand HTML, PHP, MySQL, CSS, Javascript (jQuery library of course) and hence the DOM, can learn their way around a command line, and eventually ... down the line, begin to learn OOP, which actually THEN serves as the spark igniting interest in learning other, more fundamental programming languages. Does this make any sense to you guys?

  180. PHP and then C++ by Anonymous Coward · · Score: 0

    I started with PHP and then continued with C/C++. PHP is probably the easiest language to learn and you get used to C syntax.

    C++ is everywhere and that won't change overnight.

  181. Just in case... by Anonymous Coward · · Score: 0

    English.

    After that, HTML, then SQL, then PHP or VB.Net. Then wait one year while the replacement for Facebook is written.

  182. l33t by SpaghettiPattern · · Score: 1

    l33t. That is, it seems to be the rookie's favorite. Probably they feel it does favors to their coolness. Yeah, sure.

    --

    I hadn't the slightest objection to his spending his time planning massacres for the bourgeoisie... (P.G. Wodehouse)
  183. The name says it all by Muchsake · · Score: 1

    Beginers All purpose Symbolic Instruction Code. Blank screen to "HELLO WORLD" in seconds This gives the instant results that youngsters want.

  184. Re:I was fortunate to write my first program in 19 by howlingmadhowie · · Score: 1

    those were indeed the good old days :)

    i personally have happy memories of typing in games printed in magazines into a ti99-4a. i never did it enough to learn enough to program the games myself, but it taught me that computers could be programmed. nowadays unless it has a 3d interface where things fade in and out nobody seems to be interested. it is very sad, the way computing has developed.

  185. Are you training techncians or educating graduates by thoglette · · Score: 1

    If you are training modern day boiler makers, then java or some other "industry ready" language is good.

    If you are educating engineers or scientists, then algorithms and concepts are what you need. And a whole gamut of languages are useful (from Lisp to Perl, via C & Java)

    --
    -- Butlerian Jihad NOW!
  186. Torn cards by Merdalors · · Score: 1
    Sorry, that hasn't been my experience. In the 70's I had a job writing Assembler for a Univac 9200 (32K memory, yes that's 'K'). The Master File Update program was 4,000 cards of source code. I would compile it a few times a day, and I rarely got a jam.

    We ran the update once a day on the 40,000-card master file, using the 1,000 card/minute reader. There were a couple of jams each day. Once a wad of cards got caught in the pinch rollers: smoke started billowing out of the car reader. Good times.

    --
    Slashdot entertains. Windows pays the mortgage.
    1. Re:Torn cards by Merdalors · · Score: 1

      That's "card reader", not "car".

      --
      Slashdot entertains. Windows pays the mortgage.
    2. Re:Torn cards by AliasMarlowe · · Score: 1

      Univac 9200 (32K memory, yes that's 'K')

      Luxury.
      I was admin for a PDP-8/e in the 70's, with a whopping 4K of core, in which we could compile programs written in DEC FOCAL. Booting the beast was an unsavoury exercise which decorum prevents me from describing...

      --
      Those who can make you believe absurdities can make you commit atrocities. - Voltaire
  187. long ago by Anonymous Coward · · Score: 0

    The best beginners language? __PSEUDOCODE__! Back when I initially went to school, we started with a class on programming logic, using basic in DOS. It wasn't perfect, but if you want to debate about the 'latin of programming' then you have to go beyond the language to the fundamentals of programming itself: Logic and algorithms. You can write most logic and algorithms in pseudocode that pretty closely mimics 95% of the languages out there, since let's face it, except for a few higher level languages, your loops and logic are pretty much written the same, with a bit of formatting nuances. the rest are language/platform extensions (print, cout, echo, write, etc). For learning actual languages and structure in programming, it was hard to beat COBOL for just hardcore top down structured processing in an easy to read/write manner, and then C for interactivity and grinding logic. I still think that those two languages are important. In modern times, I can see PHP becoming useful as a quick and easy primer for getting into learning to program. You can make it as simple, or as OO-Style convoluted as you want, and achieve the same results. JavaScript is inherently too abstract once you get past making onClick events. getting a good base in the flavors of assembler helps round out the knowledge and helping to understand how things work under the hood and also SECURE programming in ways. How the heck do you know what 'smashing the stack' is until you see the nuts and bolts of how a stack works and why it works? The trick is baby steps, but not such small steps that you're trying to learn to walk with your laces tied firmly together.

  188. I Don't Know Where The Hardware Ends... by grikdog · · Score: 1

    We had a guy down in the bowels of the beast who wore a T with the legend "I don't know where the hardware ends and the software starts," so I guess it's all about what your Young Programmer is up to, right? Personally, I was an autodidact on the Apple ][+'s 6502 assembler (Lisa 2.5, IIRC), AppleSoft and the Apple Pascal language card, who soon switched to CP/M and MSC 4.0. just because you had more control over what were doing. After that, Turbo C got me my first paying job, and it took me years to understand I was being hired in order to outsource some CS major's job to my private third world. Hallucinations of grandeur aside, it was fun while it lasted. Some 20 years later, there seems to be a lot more phylogeny to recapitulate in order to bring the pups up to speed. I no longer program at all, frankly, except in the inflated redefinition of the term in which "programming" is pulling acceptable subset behaviors out of the Open Office menu structure.

    That said, genius being universal and all, the next CS paradigms will probably come out of some idiosyncratic kid in North Korea, sweep the internet bistros of Cantonese China before anyone knows it, and next decade we'll all be learning SkyNet.

    --
    ``Tension, apprehension & dissension have begun!'' - Duffy Wyg&, in Alfred Bester's _The Demolished Man_
  189. Re:Quit knocking the hacker ethic... Agreed 110% by Anonymous Coward · · Score: 0

    "People that knock the hacker ethic are a bunch of MBA drones that could never really build a damned thing themselves.

    You learn to program by diving in and doing it. The more you practice and study, the better you get at it. GM was very good at shackling some very brilliant engineers and turning them into process drones. Look at where it got them. Great things are built by individuals and the more steps you have in the way of people being individuals, the worse you will get. Products have to be owned by the engineers that make them and they are personal works of art.

    At the end of the day, the managers, bean counters, and all of these other people with their measurements, metrics and fancy charts are so much fluff, a tax on the capable in society... by really a bunch of leaches that could barely feed themselves as they lack the mental self sufficiency to do anything other than to try and ride the labor of others. We condemn socialism in society there's no real difference between the PM in a three piece suit and the lowest of the homeless people. Neither add any real value to society, its just that, the PM knows how to use PowerPoint and the homeless guy does not." - by tjstork (137384) on Saturday July 25, @10:58AM (#28818667) Homepage

    AMEN, & agreed, 110%, on ALL points you have noted...

    APK

    P.S.=> This is probably the shortest post I've ever done here, & simply because I have nothing more to say than the above really - as the parent poster, said it as well as it can possibly be said (especially in regards to the "leeches" in society called mgt. (@ least the type that cannot do the job of their subordinates they supervise, because no leader should be of that "ilk", period, & a good leader doesn't ask his troops to do ANYTHING HE CANNOT OR HAS NOT DONE, himself, hands-on & for years to decades professionally - the kinds that have NOT done the job themselves are nothing more than the parent poster described them as, leeches that ride on the work of others & there are PLENTY of them in MIS/IS/IT unfortunately, & they tend to make poor decisions because they have not done the job themselves & rely SOLELY on the advisement of others, others who CAN & DO make mistakes themselves (& w/ mgt. w/ no hands on gained insight? You face this bad possibility, because they aren't well versed enough in this art & science to make decisions themselves or to analyze the advice of others they use for said advisements also), + these "fake-it-till-you-make-it" mgt. types truly are next to useless because they have not, & a good boss can "jump into the trenches" @ project deadline time & help IF HE HAS DONE THE JOB, HIMSELF/HANDS ON, before - effectively in essence, by becoming another "working set of hands" IF & WHEN needed))... apk

  190. How can you say that when Delphi is still around? by Anonymous Coward · · Score: 0

    "But frankly, ObjectPascal, as a language, and Delphi, (as in:) the libraries, are extremely outdated today" - by Hurricane78 (562437) on Saturday July 25, @01:29PM (#28819901)

    How can you say that, when the language & IDE is still being produced & sold by BORLAND?

    APK

    P.S.=> And, I know 1 thing, for sure, based on results from a COMPETING language's trade rag, VBPJ -> In Visual Basic Programmer's Journal, Sept./Oct. issue 1997, when I was a VB5-6 &/or MSVC++ coder primarily, in the issue entitled "INSIDE THE VB5 COMPILER ENGINE"?

    Delphi, oddly considering this was a competing language trade rag, absolutely WHOOPED both VB5 &/or MSVC++ 5 in 7/10 tests performed (to test programmatic speed & efficiency)!

    Especially in MATH and STRINGS work, blowing away VB5 in speed here, by MANY ORDERS OF MAGNITUDE no less, & beating even MSVC++, by double (which, mind you, EVERY PROGRAM DOES both strings & math work) literally 'taking me away' from, or rather, replacing my former favs in MSVC++ & VB, as my "weapon of choice" for building programs... apk

  191. For the first one, simplicity and visual feedback. by DarkGamer · · Score: 1

    When I was a kid I started with Logo. It was pretty good because you got direct visual graphical feedback from your code. Today, I would go with Flash's ActionScript3 for that same reason. You can import graphical resources with a UI and manipulate location, rotation etc., easily with code.

    Alas, it is proprietary though.

  192. Agreed, 110%, on concepts before language specific by Anonymous Coward · · Score: 1, Interesting

    "How about teaching people to write algorithms ? You know, the kind we used to learn on the 60s-80s, which could be used to program in ANY language (from Assembly to Pascal/Cobol/Fortran), and not today's verbalized Pascal that people call algorithm ?" - by morcego (260031) on Saturday July 25, @01:59PM (#28820139) Homepage

    Agreed, 110%, & I am SURPRISED that your post have not been "modded up" to +5 actually (&, IF I could dispense mod points (can't, as I post as "A/C" here), I would mod you up) for its excellent points!

    (Data Structures is the BEST coursework for what you describe imo... & I have gone thru each language tool you noted in academia, & later on the job also - languages don't REALLY matter, they're just syntax - CONCEPTS, however, DO (& the most)... so, I cannot say enough in agreement with you here on that note in particular)

    ----

    "That was the first "language" I learned and, having learned 20+ languages after that (including some obscure ones lines Forth and Lua), even today I thank my teacher for giving me such a good understanding of programing without relying on any specific language's concepts." - by morcego (260031) on Saturday July 25, @01:59PM (#28820139) Homepage

    You "hit the nail right on the head" perfectly here too... &, we sound like we followed the same pattern, because like yourself? I am around the mark you state in terms of languages used over time both academically & professionally - you had good teachers too, because they did make you see the correct way to go about any of this - CONCEPTUALLY!

    APK

    P.S.=> Good post, mod parent up +5 people... he has it completely right! apk

  193. Personal Recommendation by JosedeNoche · · Score: 1

    Here a personal tip for a begginer's programming languaje:

    0. Love for Programming
    1. C/C++
    2. Python
    3. Java
    4. Pascal

  194. JavaScript (with WebDAV) by LimeBits · · Score: 1

    Forget server-side languages -- Ruby, Perl, Java, PHP, CGI, etc.

    All you need for a great programming intro is JavaScript. Results are immediately and graphically visible in the browser. Language is not too complex. And it's flawed enough to spark interesting discussions in a subsequent, advanced class.

    Recommended adjunct tools:

    * WebDAV for data storage (see LimeBits , and its Axis library)

    * Firebug for tracing and debugging

    * jQuery for DOM manipulation

    Thanks,
    --Jonathan, limebits.com

    1. Re:JavaScript (with WebDAV) by beegeegee · · Score: 1

      As big a fan as I am of javascript, I would not recommend it to newcomers. It lacks graphics, audio and file i/o apis in the browser environment. In the shell environment (WSH), it lacks the the nice debugger you have mentioned. Much better to go with something like VB where you can play with all the aspects of a computer (do peek and poke still exist?)

      I've never used WebDAV but recommending libraries to a first time programmer doesn't seem thoughtful. Recommending jQuery seems downright misleading (you recommend a language and a library that disguises the language!?). C'mon man, first time programmer, not first job with a software company!

      Bob

  195. Some suggestions by GreenCow · · Score: 1

    I would suggest that people try some different tools that demonstrate concepts in an interesting way early on. The first thing that popped to mind was Logo. This can be a fun introduction to machine interpretation. There was a Logo I played with once that had mazes along with the blank sheet for making geometric patterns. Fantastic Contraption is another interesting toy.

    An important language that hasn't been discussed much from what I have seen is Algebra. Early students of computer science should put as much emphasis on math studies and seeing the symbolic relations between solving for x and the manipulation of variables. Understand binary and change of bases. Substitution and word problems will strengthen problem solving and symbolic logic. Computer science programs require math well past calculus, so math should not be taking a back seat to writing code early on.

    As far as specific languages, most high schools probably teach in pascal and basic, which are good languages to start with, but hopefully the kid will be reading through this forum, seeing what everyone writes about the different languages and something will seem particularly interesting, then the self guided exploration of languages will give insights into syntax. I got caught up in Lisp in this way, although being in a class and going through whatever structured program they have is going to educate programming in a most rapid and robust way.

  196. linux, bash, python, c(++) by felixhummel · · Score: 1

    - linux because you learn stuff about the thing (aka. operating system) you write code for
    - bash because you get things done
    - python because it's beautiful, fast and easy to learn (while remaining a complete OOP language)
    - c to get to the essence of 37 years of programming

    Of course, if they should become expendable, let them learn Java.
    And if you want to lock them into some vendor's cage, give them Visual Studio and C#.

  197. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  198. MIX or Scheme by themeparkphoto · · Score: 1

    There are really two choices: MIX or Scheme

  199. Anonymous Coward by Anonymous Coward · · Score: 0

    What about NI LabVIEW?

  200. Anonymous Coward by Anonymous Coward · · Score: 0

    Just teach them any high level language (procedural, then OO). If they utterly fail to grasp the concepts, they shouldn't be learning programming in the first place. That in itself is a lesson.

  201. Where I started by microcentillion · · Score: 1

    I am 21, and I had an interest in programming from the age of 12. I tried starting with C, VB, and JS. C felt un-intuitive, VB was pretty easy (and I made a fully functional program from it) but it took a large amount of code and an understanding of the IDE to get anything done, and I couldn't get things to work the way I wanted in JS.

    So I resorted to an extremely simple, quick, and immediately gratifying alternative - Programming my TI-83+ Graphing Calculator.

    The manual is very informative, and the language is incredibly simple. Variables could not be any simpler (they are hard-coded, with the only options being letters A-Z), the commands are chosen from lists of menus (effectively removing misspellings from the list of screw-ups), and the syntax is incredibly simple. You can start with a program that runs Pythagorean Theorem (remember, the kid is 15 and the son/daughter of someone on Slashdot), work up to string manipulation, and eventually make games with moving 'sprites'. The other MAJOR benefit being that if the kid creates something useful, he can give it to his friends (TI Graphing Calculators can transfer programs using a very simple data cable).

    So the kid learns the basics of coding, gets the immediate gratification from creating a program, has an all-encompassing manual detailing every command for when they want to try something new, and gets the excitement of having other people use something they created. Not to mention having something productive to do when they are bored in History class.

    If I had to teach a 15 year old to code, I would definitely start with a TI-83+.

    --
    But clearly you have something better to say...
  202. if I had to start from the beginning... by agentultra · · Score: 1

    Common Lisp.

    I'm still really new to the language having more than 12 years or so experience programming with the Algol-decendent languages like C, etc. I went the Assembler -> C -> dynamic languages (Perl, Python, etc) route. However once I started delving into it I started realizing that if I had to chance to start over, I'd much prefer to learn CL first. It's much easier to understand my programs and syntax is nearly a non-issue. I find it is a very pleasing language to work with.

    The homoiconic structure of the language removes most of the cognitive dissonance between representation and execution. More often when I was starting out I wouldn't catch many errors until I ran the program. Finding optimizations became an exercise in juggling the syntactic representations of language primitives which were different from language to language. As I improved over the years I started creating a divide in my mind between program representation and AST... which is sometimes fun (I had a lot of fun just poking around with Perl early on) but at the same time was a pretty difficult hurdle to overcome.

    The prefix notation and minimalist syntax of CL is also pure bliss. My editor takes care of syntax for me. No need to memorize precedence tables or the syntactic differences between statements, definitions, calls, etc. The uniformity of the language means there are far fewer rules, irregularities, and exceptions to keep track of. More mind space for programming and problem solving.

    Some people think simplicity is procedural instructions and infix syntax. "Open the file," they say, "read the next line and apply the word count function to it." We're so used to infix notation from elementary mathematics that it's second nature. These sorts of languages usually start with the premise that a program is represented as a series of statements that are executed by the interpreter/compiler/etc. Yet the novice doesn't have to proceed far in their tutelage before exceptions to this rule are introduced (such as a definition, usually a block of statements that are executed in series when the name of the definition is called in another statement... whoa). Further complexities are added by layering the exceptions.

    Whereas Lisp's uniformity allows the novice to start with one simple atomic unit of knowledge, the humble list, and evolve complexity as they learn more. Rules learned as one proceeds in learning Lisp are almost never (if ever at all AFAIK) excepted by the addition of new knowledge. One of the first bits of knowledge you learn early on is, "everything in Lisp is a list," tends to remain true throughout. There are only a handful of special forms to be aware of and that's all. I think for a novice this is a much more natural way to learn... start small and grow from there.

    Of course choice of language is quite personal. I certainly had a lot of fun (and still do from time to time) working with Perl (sometimes just for the sake of fun). I thought assembler was pretty cool when I started out using the graphics routines in the Lisa assembler on a dusty old Apple II (right when some of my friends were lucky enough to be getting the new 80286s). But in retrospect is was pure curiosity which drove me: something that cannot be taught.

  203. Procedural? by ^_^x · · Score: 1

    I'm not a coder, but I am trained as one, so I have experience but I'm really not up on trends.
    I learned QBASIC when I was around grade 4, and it was only 8 years later in high school that I even started object oriented with C++.

    It was great for learning, but I have to wonder - are there any good procedural languages for beginners? Or is it even possible to lay all the basics of OO on a beginner? People sometimes ask me what a good starting point could be for learning to program, but I really learned in a different era before such abstract concepts as OO entails were in any way neccesary.

    Personally I tend to recommend modern VB for an easy OO introduction in no small part due to the handiness of the IDE and how forgiving it is of little mistakes. The various ways of passing or referring to variables in C++ is something I would never even consider laying on a newbie, especially when some methods may work in some cases, but not others.

  204. Again with the language argument? by Keynan · · Score: 1

    Don't get me wrong. In my younger days I cared a lot about the language. Now, however, I think of myself as the old cynic.
    Seriously, F*** the language. What you need to do is teach students paradigms:

    1. Start with Assembly so they know whats really happening on the metal,
    2. Blow through C, for procedural and pointers.
    3. Look at Java/C# for interface abstraction techniques and Encapsulation.
    4. Show any other JVM/.Net language to talk about the wonders of cross language accessible libraries (as well as the pitfalls).
    5. Show a reflective and a convention driven language like ruby for its meta programming abilities.
    6. Show a functional Language like Erlang to demonstrate ways to write thread safe code
    7. And Clojure for its recursion capabilities and an intro to lisp style macros.

    Teaching one programming language to new students is in my opinion quite damaging; it can lead to the idea that there is but one way of doing things. Its an old mindset from the days when there weren't as wide a range of options and persists mostly do to teachers being to lazy to properly learn multiple languages themselves.

    You don't need to get the students to program proficiently in all these languages. You just need to understand 2 or 3 (Assembly, Python/Ruby, and Clojure/Erlang) from which they can try each of these methods. Whats important is that they understand that there are a lot of ways to program and a lot of information to look at.

    1. Re:Again with the language argument? by Keynan · · Score: 1

      p.s. I list Assembly first because it is often more fun to learn if It gets easier as you go. hence start low level and work your way up.

    2. Re:Again with the language argument? by beegeegee · · Score: 1

      ... hence start low level and work your way up.

      I found starting with the logic first, then logic + machine, then machine kept my interest piqued. So the order was:
      1. BASIC - built into the ROMs the original IBM PC
      2. C
      3. Assembly


      I especially liked learning the Assembly after C because I could dissassemble the C and see "Ah, so that's what it's really doing."

      But you know, that's just the way *I* taught myself. I don't use any of these languages any more and to tell you the truth, if the desire to make a computer do something cool is there, it doesn't matter at all what you use.

      Bob

  205. when will a decent graphics library finally be by Anonymous Coward · · Score: 0

    when will a decent graphics library finally be part of the standard. standardised graphics routines have never succeeded the vga bios.

    for a combination of historical, political, and technical reasons there is no standard way to accelerate graphics. sure there are apis such as directx and opengl.

    what i wonder is, was microsoft forced into their decision to develop their own api and to not use opengl ?? or was it their own strategically rooted decision. was opengl encumbered in some way such as being subservent to glacial bureaucratic processes, and possibly also bound to intellectual property which could be used to manipulate or control any adopters.

    one factor was that opengl only deals with graphics where as winG and later directx was a more complete solution for games programmers. providing apis for sound, input, networking as well as for graphics.

    microsoft succeeded in getting directx adopted and entrenched because they appealed to the developers.. (developers, developers... :)

    one way to compete would be to develop an entire opensource solution. all the way from the ide to the api, tools, to the multiplatform distributions.

  206. MBA "fake-it-till-you-make-it" outsourcing scumbag by Anonymous Coward · · Score: 0

    "That (and some of the stuff in your link) is about all we agree on. I read you comment and I know EXACTLY your type. You are bitter because you have barely moved through the chain." - by Gravis187 (1605621) on Saturday July 25, @03:00PM (#28820577)

    I know exactly YOUR "type" too - you probably cannot code a lick to save your life, hence, why you acquired your MBA. Your statements about "confusing logic" below evidence this clearly enough for anyone, because that is what "step tracing" & compiler IDE debuggers (or, external kernel level ones even such as SoftIce or WinDebug) are for... I mean, ever heard of a "watch window", even? Read on others, I am going to 'pick this apart', from this BLATANT fake:

    ----

    "You wonder why you work so hard and make "little money", or at least what you consider little money, while men in 3 pc suits, according to your skewed perception, seem to do nothing and make loads and take nice long vacations." - by Gravis187 (1605621) on Saturday July 25, @03:00PM (#28820577)

    Well, looking @ the USA as a whole lately, under "your type's fine leadership"? Beg to differ - the results are NOT fine, and yes, you as our "fearless leaders" are to be held responsible. With greater power comes that greater responsibility, so eat it. Mgt. doesn't do 1/10th of what actual workers do, so please - do NOT try to "fool anyone" with that crap (I've been on BOTH sides of this fence, for years in BOTH mgt. & as a software engineer/network administrator, professionally... & that IS the truth).

    ----

    "When in fact, in alot of CS cases, they have to clean up the confusing messes that many programmers create and make the pallatable for the 99% rest of the population who have to deal with user interfaces designed with some fucked up logic." - by Gravis187 (1605621) on Saturday July 25, @03:00PM (#28820577)

    LMAO - don't you mean "logic a dolt like me is unable to comprehend", rather? There are compiler IDE debuggers you know, & watch windows, as well as external debuggers if necessary & needed, to help w/ that much (& yes, they DO work, but expecting a "fake-it-till-you-make-it" type like YOU to understand how to use them? Apparently, THAT is "too much" for your dull brain to 'drink in & digest', period).

    ----

    "The fact is, it has nothing to do with socialism or some society pecking order, or some conspiracy, or being able to do your boss's job." - by Gravis187 (1605621) on Saturday July 25, @03:00PM (#28820577)

    A boss should ONLY BE A BOSS, if they have done the job as long as, or as well as, their subordinates - THIS is the very thing that coders do not like and I have seen TOO MUCH OF IT, over time, in this field, professionally (16++ yrs worth in fact). I've seen the results of their bad decisions, due to lack of actual "hands-on" experience in "the trenches", themselves.

    Leadership should be EARNED, & not by a degree or certificate only.

    (By the by? Your MBA?? A joke - I have a FULL BLOWN B.S. in Business Administration with a concentration in MIS, which is also topped off by a comp. sci. degree (associates) as well - I know EXACTLY what you know, & far more, via academia, in exactly what YOU profess to be expert in... especially having helped my brother acquire his MBA, & seeing what it was he studied in order to gain one. E.G.-> Knowing how to calculate the par value of a stock "doth not an MIS/IS/IT mgr. make", in short).

    ----

    "Its your shit attitude and likely awkward personality. You don't think anything is wrong with you, but your boss and his boss and others see you that way, just like I see it in my folks." - by Gravis187 (1605621) on Saturday July 25, @03:00PM (#28820577)

    Our "shit attitude"? When 'secret handshake' masons types or others like them take over the reigns, outsource our jobs, & then act as if they KNO