Slashdot Mirror


Why Teach Programming With BASIC?

chromatic writes "To answer the perennial question 'How can we teach kids how to program?', we created a web-based programming environment. As we began to write lessons and examples, we surprised ourselves. Modern languages may be powerful and useful for writing real programs, but BASIC and Logo are great languages for demonstrating the joy of programming."

572 of 709 comments (clear)

  1. Can't get there from here by icebike · · Score: 3, Funny

    There is still the theory that once you teach someone basic it becomes impossible to teach them programming. /running and ducking...

    --
    Sig Battery depleted. Reverting to safe mode.
    1. Re:Can't get there from here by YrWrstNtmr · · Score: 1

      Theories are frequently wrong.

    2. Re:Can't get there from here by Anonymous Coward · · Score: 1

      Not this one.

    3. Re:Can't get there from here by chispito · · Score: 1

      There is still the theory that once you teach someone basic it becomes impossible to teach them programming. /running and ducking...

      What, then, do you propose to teach kids?

      --
      The Daddy casts sleep on the Baby. The Baby resists!
    4. Re:Can't get there from here by Anonymous Coward · · Score: 2, Insightful

      This theory is easy to prove false with a counter-example. Me.

    5. Re:Can't get there from here by SilverAlicorn · · Score: 1

      There is another theory that the first theory was concocted by a wily editor of the Hitch Hiker's Guide to C Programming to raise the level of general insecurity in the industry, and thus boost the sales of the book.

    6. Re:Can't get there from here by Anonymous Coward · · Score: 2, Funny

      section .text
              global _start

      _start:

              mov edx,len
              mov ecx,msg
              mov ebx,1
              mov eax,4
              int 0x80

              mov eax,1
              int 0x80

      section .data

      msg db 'Teach them in assembly, you insensitive clod!',0xa
      len equ $ - msg

    7. Re:Can't get there from here by hcs_$reboot · · Score: 5, Insightful

      I started with the BASIC language as a child. And it was not easy.
      If Basic didn't have lines numbered, a goto, a limited set of instructions (no while for instance), and no mysterious crash (no pointer for instance), maybe I'd have given up. After a while, when Basic concepts were understood, I wanted to get over the language limitations: speed and abilities. The next step was the assembly language, at the time.
      Then learning C: coming from Assembly helped a lot to understand pointers and what happens under the hood.

      Basic was simple enough to give me interest in programming, and its limitations made me want to learn more elaborated languages afterwards.

      --
      Slashdot, fix the reply notifications... You won't get away with it...
    8. Re:Can't get there from here by DeadlyFoez · · Score: 2

      I partially agree. The part the I agree about is I used QBasic back in '95 and I have never learned another language since. I love basic programming and I have never stepped away from it because I have never had a need to. Trying to learn any C derivative while being an at home father is impossible. The part I disagree about, although I have no grounds to speak since I only know basic programming and I should just STFU, is that basic is a very good stepping stone. If I had more time or any money to goto school then I would already have a decent foot in the door with other languages because I understand how a program works and how logic is with computers. If I were to try and learn C (or any derivative from scratch) then I would be overwhelmed very easily. There is too much to learn with C (or it's derivatives) all at once. At least with basic I can learn and understand how subroutines work. I can understand program structure without having to worry about including libraries or .h files for what I desire to do. Basic is a very good stepping stone, but if you dont have motivation then someone may never get beyond it.

    9. Re:Can't get there from here by gstrickler · · Score: 3, Interesting

      My first language was BASIC, my second assembler. Since then, I've learned at least 6 more languages, but I still prefer a modern compiled BASIC for most projects. On the rare occasion that BASIC can't deliver sufficient performance, I'll link in some assembly or C routines. I've been quite successful doing that professionally for almost 26 years. That doesn't mean I always write in BASIC, I use the language that best fits the needs, the majority of the time, that has been BASIC.

      Mind you, I hate old interpretive BASIC languages that require line numbers, don't have DO/LOOP, WHILE/WEND, Sub/Proc/Function calls, variable scope controls, and other necessities. I'm talking about modern compiled BASIC languages with most of the modern structures we all know and love. It's not a perfect language, but it allows me do code, debug, and modify far faster than any other language, and for most purposes, performance is close to any modern language.

      --
      make imaginary.friends COUNT=100 VISIBLE=false
    10. Re:Can't get there from here by Proudrooster · · Score: 2

      That's called reductio ad absurdum or proof-by contradiction which is my favorite type of proof, since it's the only one I can actually do and understand :). Don't forget your QED the end of your proof :)

    11. Re:Can't get there from here by hedwards · · Score: 1

      Just about anything else. No sanely designed programming language will ever require you to label each line of code and throw and require the lines to be renumbered whenever you want to put new code in the middle.

      Basic is fine if you're just wanting to quickly introduce it, but anything beyond that is just going to convince them to go to arts college.

    12. Re:Can't get there from here by fean · · Score: 1

      There is still the theory that once you teach someone basic it becomes impossible to teach them programming. /running and ducking...

      Know the difference between Theory and Hypothesis...

      http://lmgtfy.com/?q=theory&l=1

    13. Re:Can't get there from here by syousef · · Score: 2

      That's called reductio ad absurdum or proof-by contradiction which is my favorite type of proof, since it's the only one I can actually do and understand :). Don't forget your QED the end of your proof :)

      Well you have to be very careful about exactly what you've proved. The statement that "No programmer who has learnt BASIC can be taught a modern object oriented language" could certainly be proven by a single counter example. However the statement that "Programmers who've learnt BASIC tend to be harder to retrain in a modern object oriented language" requires statistical study.

      --
      These posts express my own personal views, not those of my employer
    14. Re:Can't get there from here by Lloyd_Bryant · · Score: 2

      Just about anything else. No sanely designed programming language will ever require you to label each line of code and throw and require the lines to be renumbered whenever you want to put new code in the middle.

      I take it you haven't used any BASIC variant in the last 20 years or so. Line numbers, as in GWBASIC, aren't required for any modern BASIC.

      --
      Don't tell me to get a life. I had one once. It sucked.
    15. Re:Can't get there from here by syousef · · Score: 1, Funny

      Basic is fine if you're just wanting to quickly introduce it, but anything beyond that is just going to convince them to go to arts college.

      10 REM ARTS COLLEGE
      20 PRINT "HELLO WORLD"
      30 GOTO 10

      --
      These posts express my own personal views, not those of my employer
    16. Re:Can't get there from here by tibit · · Score: 1

      Try Python. It's the only language I can think of that's similarly easy -- namely you can accomplish anything you want with zero fluff. If you want to, you can write in pure procedural style without creating a single class of your own. It'd be easy to transplant your QBasic knowledge into Python, and then learn more tricks (object orientation, functional programming features, iterators and generators, etc).

      --
      A successful API design takes a mixture of software design and pedagogy.
    17. Re:Can't get there from here by pizzach · · Score: 1

      QBasic is the only programming language I failed. It was also my first. I couldn't figure out the damn QBasic for dummies Book. It made absolutely no sense to me what was going on. But it may have also been my age.

      --
      Once you start despising the jerks, you become one.
    18. Re:Can't get there from here by syousef · · Score: 1

      I partially agree.

      The part the I agree about is I used QBasic back in '95 and I have never learned another language since. I love basic programming and I have never stepped away from it because I have never had a need to. Trying to learn any C derivative while being an at home father is impossible.

      The part I disagree about, although I have no grounds to speak since I only know basic programming and I should just STFU, is that basic is a very good stepping stone. If I had more time or any money to goto school then I would already have a decent foot in the door with other languages because I understand how a program works and how logic is with computers. If I were to try and learn C (or any derivative from scratch) then I would be overwhelmed very easily.

      There is too much to learn with C (or it's derivatives) all at once. At least with basic I can learn and understand how subroutines work. I can understand program structure without having to worry about including libraries or .h files for what I desire to do.

      Basic is a very good stepping stone, but if you dont have motivation then someone may never get beyond it.

      First, you can learn any language you like as an at home father, albeit slowly. Wait till the kids are asleep. Dedicate 20 to 30 mins to it at at time regularly (at least 3 times a week). It wouldn't be easy, but it's far from impossible.

      Second, in terms of the language, there is nothing that complex in C or any of it's derivatives. Certainly a bit of pointer arithmetic, and function call styles, which you must understand properly. But in terms of control flow and branching there's really not that much difference between BASIC and C. (There may be more ways to do it in C, but to write your own code you can certainly start with a subset and learn the rest as you encounter them, and they're very intuitive anyway). Beyond that the C library needs to be understood, but if you're doing anything serious in BASIC there are libraries to understand there too. At least C libraries are standard.

      --
      These posts express my own personal views, not those of my employer
    19. Re:Can't get there from here by Proudrooster · · Score: 1

      Or you could use the dreaded, "Research suggests that programmers who've learnt BASIC tend to be harder to retrain than ..... " :)

    20. Re:Can't get there from here by honkycat · · Score: 1

      The one serious limitation of Python, particularly for beginners, is that it makes extremely liberal use of external (though standard) libraries. While the availability and easy of extending it like this makes it powerful, it doesn't make it a great beginner's language. You've either got to introduce the concepts of namespaces and hierarchies before you can do some of the good stuff or you need to drill in a lot more rote syntax.

      I love Python, and it's much simpler than many of its alternatives, but I think BASIC is still a pretty solid language for a n00b. Many of the weaknesses people point out (line numbers, simple flow control) are actually strengths when you are training someone who really doesn't have the slightest background in how computers work. I thought the article's rationales were pretty sound.

      If, as is the case for the OP, BASIC fulfills all your needs, there's no shame in using it. It may not be ideal for all purposes, but if you know it and it can do what you need, then sometimes it's better to use the tool you know than to learn a new one. All it has to be is good enough for the task at hand.

    21. Re:Can't get there from here by HeLLFiRe1151 · · Score: 1

      Pascal was the only programming language I failed, because twas the only one I took.

      --
      I've got 101 mod points and you can't have them!
    22. Re:Can't get there from here by shutdown+-p+now · · Score: 1

      You've either got to introduce the concepts of namespaces and hierarchies before you can do some of the good stuff or you need to drill in a lot more rote syntax.

      I don't see how it's "a lot" more. One nasty thing about traditional BASIC is that it had very inconsistent syntax when it came to built-in operators - stuff like LINE(x1,y1)-(x2,y2),B to draw a rectangle. In comparison, when teaching Python, it's not at all hard to explain the need to prefix all function calls with "turtle.".

    23. Re:Can't get there from here by pikine · · Score: 1

      Since you know BASIC, you may actually find it easier to learn assembly language next. Both of them are very similar actually. Then from the point of view of assembly language, try to familiar yourself with the C calling convention, which will help you understand what a C compiler does under the hood when it compiles a C program.

      Another approach that is completely orthogonal to that is to start learning about how to define mathematical objects on paper. After you learn a few basic building blocks such as tuple and pattern matching, you can start defining data structure and write algorithms in math. Then you'd be delighted to find out that an algorithm written in mathematical notation can be easily transcribed to a functional language.

      --
      I once had a signature.
    24. Re:Can't get there from here by smash · · Score: 1, Informative

      I managed it. I agree that there's a hell of a lot of brain damage in basic though. Luckily i moved on before i got too far beyond the simple stuff in basic.

      --
      I run: Windows, OS X, Linux, FreeBSD. Just because you have a hammer, doesn't mean everything is a nail.
    25. Re:Can't get there from here by pizzach · · Score: 1

      I do all sorts of more modern languages from C++,C,Java, Javascript, Python etc. But still looking at that old QBasic for Dummies book I have no idea what is going on. Basic I can understand. I just look at it as either the book or the language was poop.

      --
      Once you start despising the jerks, you become one.
    26. Re:Can't get there from here by nomadic · · Score: 2

      They're frequently right. BASIC was fun to learn as a kid but probably derailed me from ever learning proper programming.

    27. Re:Can't get there from here by Requiem18th · · Score: 1

      The way I've experienced this is that the most difficult thing to learn when programing is the startup overhead.

      Learning to develop on C on Windows properly requires learning Visual Studio and project management with that. It is also useful if you can have code *written by yourself* running as soon as possible.

      Understanding compiler messages from gcc is cruelly hard for a programming virgin without hand holding, and IDEs are complex, Trying to write graphical apps right away is counterproductive and C itself is incredibly opaque, the language is just a bit pusher, you can't even do basic IO without calling external libraries, which is excellent for a systems programming language but taxing on a newbie, who is already trying to remember about string buffers, pointer arithmetic and C data types.

      No, my recommendation for a teaching programming language would be javascript. It is high level enough that real programmers use it, yet simple and dynamic for beginners to learn. It is broken and fragmented, but so are many languages so it won't hurt them to learn that different users will see different results.

      It doesn't need anything but a browser and a simple text editor, yet I recommend KomodoEdit, it's free, has simple class browser features for javascript and also helps with the html and css that you will also have to teach. And talking about HTML and CSS will prepare them for SQL and XPATH wich are excellent examples of DSLs. if there was a Javascript based web server with integrated sqlite that was dead simple to install it would be the perfect teaching tool ever.

      One of the greatest things about Javascript in my opinion is that it has integrated form controls in the DOM. It's the best setup I can think of.

      --
      But... the future refused to change.
    28. Re:Can't get there from here by camperdave · · Score: 1

      Alternatively, any variant that does NOT use line numbers isn't really BASIC.

      --
      When our name is on the back of your car, we're behind you all the way!
    29. Re:Can't get there from here by Haeleth · · Score: 1

      No sanely designed programming language will ever require you to label each line of code and throw and require the lines to be renumbered whenever you want to put new code in the middle.

      Line numbering is actually not a bad way of introducing programming. It models a program as an explicit list of instructions, which is a decent metaphor for very simple programs.

      Contrast something like Python, where the student is forced to worry about things like indentation before he even knows what a loop is, or Java, where the student is forced to copy huge chunks of class definition boilerplate before she has even grasped the concept of a variable.

      I will agree that BASIC of the classic line-numbered sort is not suitable for learning to write real-world programs. But as a way to learn the basic concepts, it is arguably superior to "better" languages, precisely because it does not force you to learn about the structure of real programs just to make your computer do something interesting.

      (Someone is about to point out that "hello world" in Python is a one-liner. Don't bother. "Hello world" is not a useful learning experience in the way that "20 GOTO 10" is.)

    30. Re:Can't get there from here by plasticsquirrel · · Score: 1

      Indeed, Edsger Dijkstra said this back in 1975: "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration." He also said, "I think of the company advertising 'Thought Processors' or the college pretending that learning BASIC suffices or at least helps, whereas the teaching of BASIC should be rated as a criminal offence: it mutilates the mind beyond recovery."

      I'm surprised that anyone still wants to teach BASIC when far superior "easy" languages such as Python and Ruby exist, or Squeak, which is a great approach. This is not even mentioning Scheme, which is probably the best way to start, and has been around for a long time now. There is all sorts of nice introductory material from the PLT Scheme people, with custom dialects of Scheme that have extensions specifically for easy graphics and other fun stuff that students would like.

      --
      Systemd: the PulseAudio of init systems
    31. Re:Can't get there from here by msauve · · Score: 1

      BASIC didn't support any graphics (unless you count ASCII "character graphics"), so there were no "LINE..." commands. What you're complaining about were non-standard extensions to the language, not much different that what MS did more recently with Java (where do you think they learned the commercial lock-in value of proprietary language extensions?).

      --
      "National Security is the chief cause of national insecurity." - Celine's First Law
    32. Re:Can't get there from here by narcc · · Score: 2

      No sanely designed programming language will ever require you to label each line of code and throw and require the lines to be renumbered whenever you want to put new code in the middle.

      BASIC existed long before the full-screen editor -- hell, it existed before the full-screen! Line numbers made a lot of sense back in 1964 (and for some time thereafter). If you can't figure out why this is so, just ask.

      You should also note that most people designed their programs on paper *before* they entered it into the computer. They also had the good sense to leave gaps in the numbering (10 20 30 instead of 1 2 3) for possible later additions and used the hundreds or thousands place for marking off program sections.

      Only a totally incompetent idiot would constantly be using renum.

      Besides, line numbers haven't even been necessary since the advent of structured BASIC in the early 80's. In case you didn't notice, structured BASIC has dominated the language for the past 25 years. -- While it's true that you'll find any number of BASIC interpreters which support line numbers, you'll have a hard time finding one that requires their use.

      But don't let your total ignorance of the subject keep you from forming strong opinions.

    33. Re:Can't get there from here by bhcompy · · Score: 1

      Better yet, find the text for a high school AP Computer Science class from the late 90s/early 00s. C++ tailored for teenagers. Uses a bit of custom libraries to make it easier, but delves in to most basic concepts you'll need at later levels(class creation, recursion, pointers, etc). Best part was that we used Borland Turbo 4.5 rather than Visual Studio. Didn't make for great Windows applications out of the gate, but it was a very simple and straightforward compiler that compiled applications that ran in the Windows environment(albeit they looked like a terminal emulator)

    34. Re:Can't get there from here by Bengie · · Score: 1

      I started learning Basic when I was ~11. Got lost and gave up. Picked up C++ shortly after, was easy.

      I still find multi-threading and C/C++ easier than Basic.

      If you can write pseudo-code and understand how to work a calculator, programming is easy. Computer's just manipulate math, one problem at a time. Crazy easy.

      Basic is anything but natural(for me). I've yet to see someone write pseudo-code similar to Basic, even from people who don't program. Most people use the syntax they learn from math class, and that's mostly "C" style.

      My lonely opinion

    35. Re:Can't get there from here by shutdown+-p+now · · Score: 1

      It's true that the very first version of the language, Dartmouth BASIC, didn't have any operators for graphics in it. But at that point in time, there was no language standard yet, so what "non-standard extensions" are is unclear. All implementations of BASIC were "non-standard" then.

      By the time the language was standardized by ECMA in 1986 and then by ANSI in 1987, it already had graphics, and that was captured in the standard. Granted, the syntax in that document was different from the typical syntax used by DOS BASIC implementations (which is the one I shown earlier), but it was equally incoherent.

    36. Re:Can't get there from here by SanityInAnarchy · · Score: 1

      It's spelled "QED, bitches!"

      --
      Don't thank God, thank a doctor!
    37. Re:Can't get there from here by SanityInAnarchy · · Score: 1

      Or Ruby, where you don't have to worry about indentation, and where Hello World is a one-liner.

      And GOTO is bad enough that I do NOT want that to be people's introduction to programming. Try this instead:

      loop { puts 'Hello' }

      Same thing, less goto.

      --
      Don't thank God, thank a doctor!
    38. Re:Can't get there from here by aliquis · · Score: 2

      Basic on steroids (?): :D
      http://en.wikipedia.org/wiki/AMOS_(programming_language)
      http://en.wikipedia.org/wiki/Blitz_BASIC

      Written in Blitz Basic:
      http://www.youtube.com/watch?v=-lSihEAxvTs

      Seems like the first Worms (Total wormage) was written in AMOS.

      Best Amiga racing game:
      http://www.youtube.com/watch?v=wZiRQ0bzGds

    39. Re:Can't get there from here by Osgeld · · Score: 1

      lua

    40. Re:Can't get there from here by Confusador · · Score: 1

      goto school

      I see what you did, there.

    41. Re:Can't get there from here by EvanED · · Score: 1

      Better yet, find the text for a high school AP Computer Science class from the late 90s/early 00s. C++ tailored for teenagers. Uses a bit of custom libraries to make it easier, but delves in to most basic concepts you'll need at later levels(class creation, recursion, pointers, etc).

      The custom libraries it uses (apvector, apmatrix, apstring, ...) and the fact that it was developed before C++ was standardized and thus gets some things "wrong" makes me strongly disagree with this suggestion. Hell, I suspect you are likely to not even be able to write the "hello world" program in a typical C++ APCS book because it'll tell you to include . I know that would be true of the book we used in the class I took.

      I'm sure you could find a book that would be way easier to learn from than going through an APCS book and trying to figure out how to use it with any compiler made in the last decade.

    42. Re:Can't get there from here by EvanED · · Score: 1

      I suspect you are likely to not even be able to write the "hello world" program in a typical C++ APCS book because it'll tell you to include .

      Let's try that again: "it'll tell you to include <iostream.h>".

    43. Re:Can't get there from here by c0lo · · Score: 4, Funny

      I still find multi-threading and C/C++ easier than Basic.
      ...
      Computer's just manipulate math, one problem at a time. Crazy easy.

      I wonder what did you understand from multi-threading?

      --
      Questions raise, answers kill. Raise questions to stay alive.
    44. Re:Can't get there from here by plopez · · Score: 1

      Teach a man to program, and he will problem solve for life. Teach a man BASIC, and he will have a horrific career in IT management mandating that all projects must be in BASIC.

      --
      putting the 'B' in LGBTQ+
    45. Re:Can't get there from here by willoughby · · Score: 1

      ...If I had more time or any money to goto school...

      Yep, he programs in BASIC allright...

    46. Re:Can't get there from here by noidentity · · Score: 1

      Maybe it's just me, but I don't associate the original BASIC with the joy of programming. Line numbers were a major headache. (Amiga) BASIC with C-style block structuring was getting there, but it was still slow as hell. It wasn't until C that I could say I experienced joy of programming. With that, code ran about as fast as it could, and I could structure things very freely. This was in the late 1980s/early 1990s.

    47. Re:Can't get there from here by Phoobarnvaz · · Score: 1

      I started with the BASIC language as a child. And it was not easy.

      Have to agree with you. It was BASIC on an HP 3000 mainframe which got me started with computers for a math class to graduate from college back in 1983. While I was one of those who didn't go past BASIC to do any type of programming...this class was just like finding the perfect person to spend your life with and never looking back. Except for a 3-4 month timeframe 20 years ago when I was homeless...have had some type of computer...all the way from a Timex Sinclair 1000 I bought used for $5 to my current quad-core AMD system with 8 GB of memory.

      Funny thing about that Timex...had to goto Wal-Mart to get an Atari 2600 power adapter to be able to use it. Think I sold the whole bundle for $20 with a couple of books I bought to program some games by hand.

      --
      Don't worry about the world coming to an end today. It's already tomorrow in Australia. - Charles M. Schulz
    48. Re:Can't get there from here by Pogue+Mahone · · Score: 1

      Nah - that's easy to debunk. Just ask for the citations. ;-)

      --
      Every bloody emperor has his hand up history's skirt [Peter Hammill/VdGG]
    49. Re:Can't get there from here by Pogue+Mahone · · Score: 1

      That's called reductio ad absurdum

      No it isn't. Reductio ad absurdum is where you assume the opposite (of what you want to prove) to be true and then after a series of logically correct inferences arrive at a "true" statement that is inconsistent with your assumption or the axioms.

      Disproving a conjecture by finding a counter-example isn't a proof of anything except the falsehood of the conjecture. I suppose you could set up the falsehood of the conjecture as a theorem, but it doesn't really tell you anything.

      Maybe you should try reductio ad nauseam. That's where you make a series of logically correct inferences until you arrive at the conclusion that everyone in your audience has dozed off. Then you suddenly announce "QED!" in a loud voice and move on to the next topic.

      --
      Every bloody emperor has his hand up history's skirt [Peter Hammill/VdGG]
    50. Re:Can't get there from here by honkycat · · Score: 1

      It's a diversion from the goal. Memorizing "type turtle dot before every command" is both not quite right (is it turtle.print or just print? why?) and doesn't add anything to the educational experience. It adds one more "just do this and we'll explain later" layer.

      Also, don't discount the cost of distracting syntax. Sure, to you and me it's just "turtle." at the start of each line and is easy to ignore. But someone who doesn't yet recognize the patterns it's another word to read and think about. If you ignore the rectangle option, even with irregular syntax, it's really clear what LINE(x,y)-(x,y) does---there's nothing there that doesn't contribute to the meaning (to the human, not to the interpreter) of the statement.

      Sure, things like this are not complete deal-breakers, but they do add difficulty for a newcomer without adding any benefit to the experience. BASIC may not be absolutely perfect as a first language, but it's pretty good in terms of presenting a simple model as an introduction to the concept and basics of programming.

      Don't get me wrong, I am a huge Python fan and regular user, and do think it's a language that is worthy of introduction early in one's education. I just think it's less than ideal for teaching the very basics of programming.

    51. Re:Can't get there from here by narcc · · Score: 1

      THAT was what Dijkstra was complaining about.

      Try actually reading the Dijkstra letter in question.

      Now do you see how totally wrong you are?

    52. Re:Can't get there from here by SharpFang · · Score: 1

      And even then the common practice was to label lines in increments of 10, so if you wanted to put something between your 10 print "hello" and 20 goto 10, you could just write 15 print "world" and renum only if you needed to insert more than 10 lines (and couldn't use gosub for some weird-ass reason).

      --
      45 5F E1 04 22 CA 29 C4 93 3F 95 05 2B 79 2A B2
    53. Re:Can't get there from here by Hognoxious · · Score: 1

      What you're complaining about were non-standard extensions to the language

      I'm pretty sure that when I was tinkering with BASIC (early 80s) there was no such thing as a standard.

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    54. Re:Can't get there from here by Joce640k · · Score: 1

      What language is "C/C++", exactly?

      --
      No sig today...
    55. Re:Can't get there from here by tibit · · Score: 1

      I don't see why introducing namespaces is bad. Turtle stuff is in the turtle namespace, thus the prefix. Easy to explain.

      --
      A successful API design takes a mixture of software design and pedagogy.
    56. Re:Can't get there from here by Hognoxious · · Score: 1

      Back in 1975 were people also saying that Dijkstra was a pompous ass? I'm sure thinking it right now.

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    57. Re:Can't get there from here by julesh · · Score: 2

      I take it you haven't used any BASIC variant in the last 20 years or so. Line numbers, as in GWBASIC, aren't required for any modern BASIC.

      The BASIC variant that TFA is about requires line numbers for all lines. The develoeprs suggest this is better, because it makes control flow explicit.

    58. Re:Can't get there from here by santax · · Score: 1

      Well my msx with msbasic certainly had line, circle, point commands.

    59. Re:Can't get there from here by msauve · · Score: 1

      First, Kemeny created BASIC, so you claim that Dartmouth BASIC wasn't "standard" is ludicrous. I suppose Kernigan's C or Wirth's Pascal weren't standard until ANSI got a hold of them, either.

      So you're complaining that some language extensions for graphics, which appeared prior to "official" support for that capability were non-standard. Nice tautology, there.

      --
      "National Security is the chief cause of national insecurity." - Celine's First Law
    60. Re:Can't get there from here by digitig · · Score: 1

      My first language was FOCAL, and BASIC came as a huge relief. Since then I've worked in Ada, C, C#, C++, Forth, FORTRAN, Modula2, Pascal, Python and VBA (not in that order). All except FORTRAN and VBA came as a huge relief from BASIC, but I can't help wondering whether that early BASIC experience is why I never got on with LISP, Haskell, Scheme, OCAML, Prolog etc, all of which I've dabbled in.

      --
      Quidnam Latine loqui modo coepi?
    61. Re:Can't get there from here by digitig · · Score: 1

      "Theory" is a clothing store? That's what your link takes me to...

      --
      Quidnam Latine loqui modo coepi?
    62. Re:Can't get there from here by serviscope_minor · · Score: 1

      I'm not too keen on labelling every line, but if only there was some kind of automatic machine which could maniuplate numbers really quickly and flawlessly track and update cross-references...

      Some basic variants acquired automatic renumbering 30 years ago, complete with updating goto/gosubs if you still insisted on using them, when the language provided proper functions. See e.g. BBC basic, and the REN. command.

      --
      SJW n. One who posts facts.
    63. Re:Can't get there from here by c0lo · · Score: 1

      Presumably Bengie is sufficiently older than 11 now that they learned "C/C++" at a time where processors you'd typically find in a computer were not multi core. Given that assumption, they're right, and I have to wonder what you understand about multi-threading.

      Given that assumption and also assuming Bengie (or they, whoever they are) stopped learning in the meant time .
      BTW: have you noticed? They also invented GPU in the mean-time... lo-and-behold... GPU-es are already notorious for handling multiple math manipulations per every clock-cycle (letting aside the threading issue).

      (as for my understanding of multi-threading... don't be fulled by my 7 digits ID; it's only when getting older that I got frustrated enough to post on /.)

      --
      Questions raise, answers kill. Raise questions to stay alive.
    64. Re:Can't get there from here by BeanThere · · Score: 2

      Or maybe, just maybe, you just weren't all that inherently interested in programming? I somehow find it very hard to believe that anyone truly interested in programming would 'give up' simply because they 'learned BASIC'.

      I started on BASIC(first ZX Spectrum, later QBASIC) - for years - later learned Pascal, then C and C++, and now have programmed full-time C++ for 10 years. And from day one, every step of the way, I've been hooked - loved it, loved learning new things, loved being able to create things.

      I could equally claim that I never got good at woodwork because we only had crappy tools at home (which was true). But the reality is I was just never that interested in it.

    65. Re:Can't get there from here by Fizzl · · Score: 1

      Well, it's still like this. One problem at a time.

      1. In co-operative multitasking, the computer oompaloompas work on the calculator one at a time and let their boss know when the calculator is free to use. The working oompaloompa can also decide to take a break, leave their work on the desk and let someone else do their work while they do not need the calculator.

      2. In pre-emptive multitasking the boss tells an oompaloompa to start working. The oompaloompa is forced to work until their work is done or the boss decides to hit it with a stick and put some other oompaloompa to work. Poor oompaloompa does not know how much time he has and when he gets hit, he has to drop his work immediately.

      3. In symmetric multiprocessing the oompaloompas have multipla calculators but only one table and a filing cabinet. The oompaloompas have to coordinate together how to organize their work, so they don't scribble on each others notes, while they take turns on the calculator. The boss is usually in charge of the desk space and the filing cabinet.

      4. In distributed vector... I think I write something about hungry philosopher oompaloompas now! They are not good with forks. Or something... Anyway, what was I speaking of? Oh yeah, I'm thirsty. Mmmm... Sluuuuuurmmm...

    66. Re:Can't get there from here by Gunstick · · Score: 1

      I started with basic, namely GfA-Basic. Which has, surprise, no line numbers!
      http://en.wikipedia.org/wiki/GFA_BASIC
      And it was useable, powerful and fast.
      The editor even did the auto-indentation.

      --
      Atari rules... ermm... ruled.
    67. Re:Can't get there from here by c0lo · · Score: 1

      Anyway, what was I speaking of? Oh yeah, I'm thirsty. Mmmm... Sluuuuuurmmm...

      Hope that's a good brandy (substitute with your alcoholic beverage you like) that you drank... Are oomplaloopas tasks or threads?

      If tasks, there can be multiple oompaloompas in progress at any given time (even if only some of them active). Also, the coordination for the table is not necessary, the boss takes care to allocate *dedicated* virtual table-space, moving physical table pages back and forth to accommodate (unlike in the real-world, the boss does something!). The access to the cabinet (HDD) is subject to queueing (and no, the boss have nothing to say about concurrent accesses to the same post-it note, the oompas need to take care by themselves, potentially involving IoC... errr... that's inter-oompaloompa-communication, not the inversion-of-control).

      If oompas are threads, then yes, they'll need to coordinate between them... but only if they really need exclusive access to the same virtual table space or post-it notes. And the godly creator of the oompaloompas (i.e. the programmer) should be very careful to minimize the need of oomtexes...

      Errr...? Where's that cold "James Squire" ale? What? Already finished? Time for another. Pffsssst.. gulp... ahhhh...

      --
      Questions raise, answers kill. Raise questions to stay alive.
    68. Re:Can't get there from here by honkycat · · Score: 1

      It's just that it's on a sidetrack for someone who's just learning what it means for a series of commands to be executed in sequence.

      I'm not saying it's far, far beyond their grasp, but understanding what a namespace means beyond just "type this nonce" requires understanding of a few things you don't need just to see how a simple program is constructed. Plus, it can lead to bad habits along the lines of "from turtle import *".

    69. Re:Can't get there from here by Bengie · · Score: 1

      sorry "Hardware Threads manipulate math, one problem at a time"

    70. Re:Can't get there from here by Bengie · · Score: 1

      omg, I love Fizzl :-)

      P.S. My best friend use to be scared of oompaloompas as a kid

      +2 for incorporating my analogy with oompaloompas.

    71. Re:Can't get there from here by Bengie · · Score: 1

      The language that has you delete your malloc and wonder what happens... or is it free your new?

    72. Re:Can't get there from here by tibit · · Score: 1

      There is only so much you can do without thinking things through. The bad habit you allude to is easy to unlearn by necessity. Once your project is complex enough, clashing imports will be haunting you enough to force a change. IOW: all in due time.

      --
      A successful API design takes a mixture of software design and pedagogy.
    73. Re:Can't get there from here by msauve · · Score: 1

      You don't know what a "non-standard extension to a language" is, do you?

      --
      "National Security is the chief cause of national insecurity." - Celine's First Law
    74. Re:Can't get there from here by miknix · · Score: 1

      Where did you program BASIC? I'm 24 now and I started at 12 yo in a Philips VG 8010 (MSX Basic) that my uncle offered me.
      I still have the programs I wrote at the time in tapes. There was one thing though that was too tough for me at the time, I never managed to make games with sprites.

      After BASIC, I bought a real PC and learned Visual Basic to turn around CLI limitations. C programing only came when I wiped the windows partition with Linux for the first time.

      Sometimes I wonder if it would change anything if I started by using a PC with Linux instead..

    75. Re:Can't get there from here by autocracy · · Score: 1

      Multi-threading is still the same rule, and can be seen as a sequential series of singular threads that have stop / pause points. That's what happens on a single processor anyway.

      --
      SIG: HUP
    76. Re:Can't get there from here by Fizzl · · Score: 1

      I didn't want to complicate my broken analogy by bringing fairies into this man!

    77. Re:Can't get there from here by DeadlyFoez · · Score: 1

      Not that easy when you have 2 autistic children to care for 24/7. ;)

    78. Re:Can't get there from here by Profane+MuthaFucka · · Score: 1

      Nine out of ten dentists recommend that you brush your teeth after you eat a pussy.

      --
      Fascism trolls keeping me up every night. When I starts a preachin', he HITS ME WITH HIS REICH!
    79. Re:Can't get there from here by mikael · · Score: 1

      BASIC did support subroutines through GOSUB and RETURN. Though some versions didn't have an ELSE statement, so you had to use a GOTO to skip over exclusively mutual code segments. Some variants dispensed with line numbers and just had 'proc's' - procedures defined with 'defproc' and 'endproc' along with 'callproc'. Acorn Basic and Sinclair QL SuperBasic come to mind.

      Most times, you could avoid the use of IF-THEN statements and associated GOTO's:

      1010 IF (DX0 ) THEN X=X+1
      1030 ...
      and just have:

      1010 X = X+(DX>0)-(DX0)

      It works for GPU shader languages 30 years later ...

      --
      Vintage computer adverts: http://www.vintageadbrowser.com/computers-and-software-ads
    80. Re:Can't get there from here by MBGMorden · · Score: 1

      I did about the same, minus the give up step.

      At about 9 years old I started with BASIC. First on a Commodore 64 (and a Tandy TRS-80 that my aunt had - I'd go to her house just to play on a different computer than the C64 I had at home), then later on QBASIC when my family got a DOS-based PC.

      Eventually I started using various compiled BASICS's that I found on BBS's. I remember one
      was called ASIC and another was called BasicBASIC.

      One of the compiled versions in particular (I can't remember which one) actually was pretty neat in that it didn't require line numbers, and allowed you to use tags instead for blocks of code.

      IE, I could do.

      beginning:

      PRINT "Enter input?"
      [gather input]
      GOTO handle_input

      handle_input:
      [process some stuff]
      GOTO beginning

      Ended up working a lil like a function call.

      Overall, it helped a lot. Yes, I learned to do fairly bad practices, but those were quickly dropped, and the basic understanding of thinking about things in a very sequential and logical manner helped TREMENDOUSLY when I started my CompSci degree (where we learned on Java). A had several friends who were very much into computers but had started on PC's in the Windows era when programming at home wasn't quite as ingrained into computer usage, and they had a MUCH harder time picking things up.

      Sure these days the mere thought of writing anything useful in BASIC turns my stomach, but as a good, solid entry into programming? It worked great for me.

      --
      "People who think they know everything are very annoying to those of us who do."-Mark Twain
    81. Re:Can't get there from here by nomadic · · Score: 1

      I didn't "give up," just in subsequent attempts to learn programming (including college level classes), I found it extremely difficult to think in terms of subprocedures, classes, etc., and I think a lot of that was because of the linear nature of the BASIC programming I learned on the PC Junior.

    82. Re:Can't get there from here by TheRaven64 · · Score: 1

      try to familiar yourself with the C calling convention

      There is no such thing as 'the C calling convention'. C does not define a calling convention. The language more or less requires that parameters be pushed onto the stack right to left, in order for it to be possible to implement variadic functions, but that's about it. Each OS defines its own calling conventions for each architecture. Even FreeBSD and Linux have different calling conventions on x86 (the Linux ones are spectacularly braindead and will pass a word-sized union by putting it on the stack and then putting its address in a register).

      --
      I am TheRaven on Soylent News
    83. Re:Can't get there from here by TheRaven64 · · Score: 1

      Nice try, but that's not the relevant letter at all. That's the letter that defined structured programming (as part of the Algol process). Dijkstra's comment about BASIC was from one of his public lectures.

      --
      I am TheRaven on Soylent News
    84. Re:Can't get there from here by chthon · · Score: 1

      You should first learn Lisp using 'How to Design Programs', 'Structure and Interpretation of Computer Programs'. Then you will see that object-oriented programming is just a special case of imperative programming. Proper structure can be achieved by architectural decomposition, for which you only need a packaging or namespace system. Functions are more important and powerful than datastructures. You can implement data structures using functions, but not the other way around.

    85. Re:Can't get there from here by clone52431 · · Score: 1

      I was the opposite. Learned BASIC quite well, picked up C, got disgusted with the shenanigans one had to put up with to handle strings, and gave up. Plus it had no built-in support for colours, sounds, graphics, and cursor control, which I had by that time already been using quite frequently in my BASIC programs. C was like going back to a teletype terminal. Stuff goes in, stuff comes out.

      --
      Distributed Denial of APK: It takes 15 seconds to reply to him anonymously, but wastes tons of his time if we all do it.
    86. Re:Can't get there from here by DavidTC · · Score: 1

      I always thought a good language to start with would be PHP.

      It has all the language conventions that BASIC skips, like var++, it has looping constructs that actually are used in the real world, not GOTO, it has variables marked (With a $) like in most modern languages, it doesn't require compiling, it doesn't require pointer knowledge.

      And you can start off simple and go all the way to OOP.

      Note I mean 'command line PHP', not web stuff.

      Ruby would also be a reasonable alternative, as the other response said. (Although I think the do....while thing would be horribly confusing later.)

      Older BASIC just teaches bad practices, and newer BASIC is all sorts of weird retrofitting of stuff onto a language that's not designed for. And don't even get me started on VB. No introductory programming course should be cluttered up with having to write programs that have a GUI.

      --
      If corporations are people, aren't stockholders guilty of slavery?
    87. Re:Can't get there from here by shutdown+-p+now · · Score: 1

      Also, don't discount the cost of distracting syntax. Sure, to you and me it's just "turtle." at the start of each line and is easy to ignore. But someone who doesn't yet recognize the patterns it's another word to read and think about.

      Are you saying that someone who speaks English would be unable to comprehend "turtle.move(10)" or "turtle.pen_up()", seriously? Especially after you explain them why it's called turtle graphics in the first place?

      The only question that may arise there is the meaning of the dot. And yeah this is a diversion that has to be memorized, but a very minor one. Compared to some of the idiosyncrasies of BASIC syntax, such as "IF..END IF" but "WHILE..WEND"; or, say, how boolean operators are actually all bitwise (and there is no boolean data type at all!) and non-short-circuiting, it's positively benign.

      You can, of course, make an educational dialect of BASIC that intentionally avoids all the traps. But guess what - you can do the same with Python, and make sure that all the modules you want to be "just there" are auto-imported on startup.

    88. Re:Can't get there from here by narcc · · Score: 1

      Do you mean this speech? or this letter? (Dijkstra's unsubstantiated list of aphorisms.)

      Oh, yeah. Neither of them mention GOTO -- that's just in the one letter I linked to above.

      Funny that it doesn't mention BASIC at all...

      It looks to me like the GP is still wrong.

    89. Re:Can't get there from here by Machtyn · · Score: 1

      While it is still probably ASCII graphics, I sure liked Gorilla.bas

    90. Re:Can't get there from here by drcheap · · Score: 1

      They're frequently right. BASIC was fun to learn as a kid but probably derailed me from ever learning proper programming.

      Still using GOTO statements everywhere, I presume.

    91. Re:Can't get there from here by drcheap · · Score: 1

      What language is "C/C++", exactly?

      Well, if C were an int, it's a Floating point exception.
      If C were a float, then it's 1.000000 except for C=0, in which case it's nan.

      At least according to code written in C.

    92. Re:Can't get there from here by drcheap · · Score: 1

      "Hello world" is not a useful learning experience in the way that "20 GOTO 10" is.)


      10 GOTO 10

      Now that's a learning experience.

    93. Re:Can't get there from here by c0lo · · Score: 1

      Multi-threading is still the same rule, and can be seen as a sequential series of singular threads that have stop / pause points.

      Hmmmm... I sense a mathematician structured mind here

      The validity of a conceptual description of the reality is limited and will limit what you can derived from the model.

      That's what happens on a single processor anyway.

      For example, do you care to explain within your limited model how a GPU works? Does your model helps here? If not, wouldn't one rather drop a simplistic model (easy to understand for an 11 years old) and advance your learning?

      For the matter at hand: isn't this supposed to happen for the students on a programming or CS track? I.e. if C/C++ is allegedly better than Basic and should be preffered, why stop here and not add a "better understanding of multi-threading and parallel processing" down the track? Should one stagnate at the same level of understanding one had while at age of 11 years old?

      --
      Questions raise, answers kill. Raise questions to stay alive.
    94. Re:Can't get there from here by pikine · · Score: 1

      Anyone who bothers a cursory glance at Wikipedia would have found out about what you said, but that's really not the point of what I wanted to say.

      After "the C calling convention" add "of the compiler and operating system of your choice" if that pleases you.

      --
      I once had a signature.
    95. Re:Can't get there from here by RockDoctor · · Score: 1

      They're frequently right. BASIC was fun to learn as a kid but probably derailed me from ever learning proper programming.

      Still using GOTO statements everywhere, I presume.

      Considerably dangerously, I hope.

      --
      Birds are not dinosaur descendants;birds are dinosaurs, for all useful meanings of "birds", "are" and "dinosaurs"
    96. Re:Can't get there from here by TheRaven64 · · Score: 1

      Even on a single OS, there are multiple calling conventions. For example, when returning a structure, it is common for the caller to allocate space and then pass a hidden first argument as a pointer to that. When calling a leaf function, lots of systems will use a different calling convention, and some will use a different one for tail calls. Some operating system functions (e.g. on classic MacOS and Win32) use a different calling convention where parameters are passed left to right.

      If you look in a modern C compiler, you'll see a huge amount of logic for determining exactly which calling convention to use for any given function. Things get even more fun when you include unions.

      --
      I am TheRaven on Soylent News
    97. Re:Can't get there from here by aliquis · · Score: 1

      May I add these two to since they support other platforms and the later one seem very current (and the former one cool for east-to-make demos? =P)

      http://en.wikipedia.org/wiki/Dark_Basic
      http://en.wikipedia.org/wiki/PureBasic

    98. Re:Can't get there from here by pikine · · Score: 1

      Let me tell you a piece of history that you won't find on Wikipedia.

      The reason why Mac OS (classic) use left to right parameter passing is because that's the Pascal calling convention, which was the dominant structural language at the time Apple first came out. In fact, Inside Macintosh uses Pascal to illustrate how to write code on Mac, so I wouldn't be surprised that most of the early Mac applications were written in Pascal.

      I don't actually know why Win16 uses Pascal calling convention, but Win32 uses stdcall convention which passes arguments right to left, contrary to what you claimed.

      --
      I once had a signature.
  2. Python vs. BASIC by Anonymous Coward · · Score: 4, Informative

    I learned to program pretty much with Applesoft BASIC and a Franklin Ace 1000 manual

    Now I'm teaching my mom (!) to program in Python using the Hello World book.

    Honestly, I wish Python were around when I was learning. Trying to squeeze a new instruction between line 11 and line 12 kinda sucked sometimes. (Then again, I wish a lot of things were around...)

    1. Re:Python vs. BASIC by Yaos · · Score: 2

      Python is a easy as BASIC, and you can teach good programming practices in it. Once they get to understand programming, they can move on to the harder things without leaving the language.

    2. Re:Python vs. BASIC by Anonymous Coward · · Score: 1

      I found a nice cite for that: "Python's a drop-in replacement for BASIC in the sense that Optimus Prime is a drop-in replacement for a truck." - Cory Dodt

    3. Re:Python vs. BASIC by BagOBones · · Score: 2

      Why do I suddenly imagine Optimus Prime holding his cargo trailer over his head and running..

      --
      EA David Gardner -"... but the consumers have proven that actually what they want is fun."
    4. Re:Python vs. BASIC by Hatta · · Score: 1

      Writing a program to renumber your programs is an excellent early programming exercise.

      --
      Give me Classic Slashdot or give me death!
    5. Re:Python vs. BASIC by thethibs · · Score: 1

      Python doesn't have turtle graphics; the language these folk created is Basic with turtle graphics.

      ClubCompy isn't Programming 101, it's fun with computers.

      My kids learned Logo and got pretty good with it but neither of them codes for a living.

      --
      I'm a Programmer. That's one level above Software Engineer and one level below Engineer.
    6. Re:Python vs. BASIC by fyngyrz · · Score: 3, Interesting

      A program shouldn't treat block structure or typos as run-time errors.

      Wrong. A language that actually uses whitespace should. Which is what Python does. The fact that you can't wrap your head around it isn't in any way a condemnation of Python. It just says you're inflexible, and frankly, in forty years of programming experience, I've never found lack of flexibility to be a useful trait.

      Whitespace utilization in Python uses the programmer's intuition to instantly perceive block structure. This beats the heck out of scanning lines for randomly embedded (speaking spatially, now) braces. Mind you, it is possible to write C (and I do), for instance, nominally a free form language WRT whitespace, with meaningful whitespace. Really helps, especially later on, when you haven't seen the code for years.

      The fact that Python *requires* whitespace is simply a means to bring your intuition to the table by force, and frankly, I think it's a good idea. That some folks can't, or won't, get it... that's unfortunate. For them. :)

      --
      I've fallen off your lawn, and I can't get up.
    7. Re:Python vs. BASIC by SharpFang · · Score: 1

      You seem to have missed the essential phrase run-time.

      I have no beef against Python using whitespaces. But I'd rather be warned I made a typo in an obscure procedure called once a year when I first start the program, not when it encounters that procedure after a year.

      --
      45 5F E1 04 22 CA 29 C4 93 3F 95 05 2B 79 2A B2
    8. Re:Python vs. BASIC by narcc · · Score: 1

      A language that actually uses whitespace should.

      Languages shouldn't use whitespace. I thought we had established this in the 70's

      Whitespace utilization in Python uses the programmer's intuition to instantly perceive block structure.

      This is the most inane defense of Python's use of whitespace I've seen to date. If I want a block, I'll delineate it myself. I don't want the interpreter 'intuiting' my intentions.

      Oh, wait. It doesn't use my "intuition to instantly perceive block structure". I delineate blocks myself via indentation.

      Tisk, tisk. You had me all wrapped up in your magical thinking.

      This beats the heck out of scanning lines for randomly embedded (speaking spatially, now) braces.

      Badly formatted code is badly formatted code. Run it through a pretty-printer -- we've had those for 30 years. Problem solved.

      Mind you, it is possible to write C (and I do), for instance, nominally a free form language WRT whitespace, with meaningful whitespace. Really helps, especially later on, when you haven't seen the code for years.

      Yeah, this is what virtually everyone does already. Except in that case the whitespace isn't meaningful to the compiler -- just to the programmer. This is the way it should be.

      The fact that Python *requires* whitespace is simply a means to bring your intuition to the table by force, and frankly, I think it's a good idea.

      It in no way brings "your intuition to the table" by force or any other means. It just makes you indent your code according to Guido's preferences.

      That some folks can't, or won't, get it... that's unfortunate. For them. :)

      There's nothing to get -- Whitespace is how you delineate blocks in Python. There is nothing mystical here. It does not magically "bring your intuition to the table".

      It DOES, however, allow Python un-aware editors to introduce errors into your program. (Think: converting tabs to spaces and the like.) It also doesn't allow you to use whitespace to format for readability. (Yes, there are cases where not indenting according to structure will actually improve legibility. You can probably quite easily think of a few examples yourself.)

      I get why people like Python. What I don't understand is why they feel the need to defend this particular aspect of the language.

      Even if you think meaningful whitespace is great, it should be easy to understand why other people dislike it. You should also at least be willing to acknowledge that it can, and often does, cause problems (moving code between editors or sharing code on webpages or via email, just for starters).

      Really, the only benefit I can see is that you'll never be forced to look at badly-indented Python code. Considering the problems it causes, I hardly think it's worth the trade.

    9. Re:Python vs. BASIC by fyngyrz · · Score: 1


      Languages shouldn't use whitespace.

      This is an absolute you have no justification to be declaring.


        I thought we had established this in the 70's

      Ah. Well then, we've learned where you made your mistake. Carry on.

      --
      I've fallen off your lawn, and I can't get up.
    10. Re:Python vs. BASIC by fyngyrz · · Score: 1


      But I'd rather be warned I made a typo in an obscure procedure called once a year when I first start the program, not when it encounters that procedure after a year.

      You do understand the difference between interpreted and compiled code, do you not? Yes?

      And you also understand that even an aggressively picky compiler won't save you when your typo is not syntactically invalid?

      It is not the language's responsibility to ensure that you are a good programmer, or that your code is "right."

      This is something every assembly language programmer learns right out of the gate; something that is almost as harshly taught by C; and something that even the most syntactically precise and picky language will eventually teach you when you depend upon it to ensure the rightness of your programming.

      Python does what it does very well, within the limits of the type of tool it is. Which is not to say that you can't botch up your programs if you don't give them your best effort. To be blunt, carping about a language's error checking simply shines a light on your own lack of skills. Strive to write good code, and test your code. If you write something such that it is only run into once a year -- and you put that same code into production without testing it -- someone has you doing work you're not qualified to do. Even if that someone is only you.

      --
      I've fallen off your lawn, and I can't get up.
    11. Re:Python vs. BASIC by narcc · · Score: 1

      This is an absolute you have no justification to be declaring.

      Yep. I did not justify my assertion. You are correct.

      I assume that you completely agree with the rest of my post, as you didn't raise any objections to it.

    12. Re:Python vs. BASIC by digitig · · Score: 2

      Languages shouldn't use whitespace. I thought we had established this in the 70's

      You want to get your religion from ancient books, go ahead. Those of us who are more scientifically minded will look to the evidence.

      --
      Quidnam Latine loqui modo coepi?
    13. Re:Python vs. BASIC by digitig · · Score: 1

      Python doesn't have turtle graphics

      Really?

      --
      Quidnam Latine loqui modo coepi?
    14. Re:Python vs. BASIC by pjt33 · · Score: 1

      Of course it's impossible for static checking to catch all bugs - this is a well-known result. And of course programmers should write tests. But a compile-time error (or static-check error, if you prefer) costs less programmer time to debug than a run-time error - IIRC estimates I've seen vary from a factor of 3 to 10. A mistyped function name is something which can easily be picked up by static checking and result in an error or, if eval is invoked somewhere, at least a warning.

    15. Re:Python vs. BASIC by SharpFang · · Score: 1

      You are horribly wrong. You're so wrong it is mind-boggling.

      Interpreted code can still be parsed a'priori for syntactic validity. This won't be 100% sure (for stuff like 'eval string') but WAY better than nothing.

      An aggressively picky compiler will catch 90% errors leaving the programmer with 10% as much work debugging, and the resulting production code with 90% less remaining (unnoticed) bugs overall.

      The absolute responsibility of a compiler/interpreter/VM is to minimize chances of human error. Ignoring machine-detectable errors "because the programmer shouldn't have made them in the first place" is a faulty, evil design. Errors happen, will happen, and the language, IDE, compiler, automated tests, QA procedures and about every tool at programmer's disposal is intended to make detecting them easier. The wishful thinking "be a good programmer and just don't make errors, and it's not the system's job to ensure you were correct" is at fault of some of major disasters. Including at least one NASA probe crash.

      Of course you can't depend on the compiler to solve all your problems and find all your bugs. But every procedure can fail. Every test can miss out things. A test can be faulty too. You ought to receive any and every suggestion of error from every source possible. You will not catch all bugs, never. But by consciously suppressing warnings from some source, you just increase the number of bugs shipped.

      Also, in this thing you might have heard of, known as The Real World, there's this odd concept called "deadlines". Meaning getting every possible subroutine and condition tested before shipping is often not plausible.

      --
      45 5F E1 04 22 CA 29 C4 93 3F 95 05 2B 79 2A B2
    16. Re:Python vs. BASIC by narcc · · Score: 1

      You want to get your religion from ancient books, go ahead. Those of us who are more scientifically minded will look to the evidence.

      Okay, make your case. If you have evidence, as you claim, present it. I'm willing to evaluate it objectively.

    17. Re:Python vs. BASIC by jordan_robot · · Score: 1

      ... in forty years of programming experience, I've never found lack of flexibility to be a useful trait.

      Except where python's whitespace rules are concerned. You really didn't see the irony when you typed this out?

    18. Re:Python vs. BASIC by digitig · · Score: 2

      The fact that Python users don't have the problems with whitespace that FORTRAN users did. What was established in the 70s is that FORTRAN used whitespace badly, not that whitespace shouldn't be used.

      --
      Quidnam Latine loqui modo coepi?
    19. Re:Python vs. BASIC by thethibs · · Score: 1

      I stand corrected.

      --
      I'm a Programmer. That's one level above Software Engineer and one level below Engineer.
    20. Re:Python vs. BASIC by dbrueck · · Score: 2

      One of the things I love about Python is that whitespace is significant, and for the very reason that the other poster mentioned - even in languages where you do have block delimiters, it's pretty much universally accepted that "good" style dictates that you use indentation as well - indentation expresses block structure in C, Java, etc., etc. It just makes code more readable. In any open source project or any professional setting it's the same - if you write code that isn't well-formatted (with your blocks properly indented), the code is considered bad, ugly, unprofessional.

      Given that this is the case - that indenting your code is expected and good form, what purpose do the curly braces in C actually serve? They may add to readability perhaps (though in terms of readability they are much less important than the indentation itself), but in reality they exist for the parser, for the tool, and not so much for the humans reading and writing the source code. To me, this is the first indication that something is less than ideal - you're required to do something all over the place in your source code but it's not primarily for your benefit, but for the benefit of the tool you're using. Maybe this doesn't bother you, but I hope you at least appreciate in principle why it would bother some people.

      The second and related problem here is that there exists the potential for errors: when a human scanning the code visually, the whitespace is a stronger indicator of the structure of the program than the curly braces are, but for the parser, it's irrelevant, only the braces matter. That's why you can get errors like:

      if (i < 5);
              i++;

      or

      if (i < 5)
              i++;
              j++;

      These are silly examples, and yet they are ones I've encountered in real code (both mine and other's). I don't know how common they are, but they sure have driven me crazy, and they demonstrate the point I'm trying to make. What I find even more telling is how some companies with coding standards deal with it: they mandate that /all/ blocks have the curlies. It's not bad per se, but again it's just mandating that things be done a certain way, not for the benefit of the folks doing the coding, but for the benefit of the tool.

      Anyway, that's why I like Python: there is never ever a disconnect between my intent and the actual block structure of the program - the human and the tool are /always/ on the same page.

      Two anecdotes you are free to ignore:

      - All the people I've ever encountered who have persisted in objecting to Python's use of whitespace have been people who haven't actually used Python very much. Similarly, all the people I've ever encountered who have used Python for any program of substantial size, including those who initially objected to it, pretty quickly stop considering it an issue, and nearly all of them eventually come to admit that they really like it. I'm not saying this is a universal experience - but it's been interesting to observe.

      - The theoretical problems that can arise (mixing editors, copying and pasting code) don't seem to happen very much in practice. I've used Python for well over a decade and off the top of my head can't think of *any* cases where it's happened to me. I'm assuming it has happened at some point, just because it's unlikely for it to never have occurred, and yet I honestly can't think of any time it actually /has/ occurred. Maybe I'm just extraordinarily lucky, or maybe it's just not something that occurs that often in practice.

      I do appreciate that some people object to the significant whitespace approach - some people have real concerns, others it just rubs them the wrong way. To them I'd say (1) don't knock it until you've really tried it and (2) at least recognize that the curly braces are you serving the tool, and not the tool serving you, since you undoubtedly also use indentation to express block structure of your program.

    21. Re:Python vs. BASIC by TheRaven64 · · Score: 1

      So, it's like BASIC, but may occasionally fold up and crush anyone driving it to death? Actually, that does sound like the Python code I've debugged (I've never been unfortunate enough to have to write Python, but I've often had to fix Python code, usually after it was given to me as 'working').

      --
      I am TheRaven on Soylent News
    22. Re:Python vs. BASIC by narcc · · Score: 1

      This is your evidence?

      The fact that Python users don't have the problems with whitespace that FORTRAN users did.

      No, they have a host of new and different problems caused by the use of meaningful whitespace.

      Problems moving between editors, problems sharing code via webpages and email, even problems moving chunks of code around in the source file (even the best python-aware editor will often need to make guesses about indentation.)

      Simply using the wrong editor can introduce error into the source file -- that can be especially frustrating when those errors can be completely invisible.

    23. Re:Python vs. BASIC by Draek · · Score: 1

      I thought we had established that editors shouldn't fuck up with tabs and spaces in the '70s. Guess we didn't.

      I do acknowledge that its whitespace-aware design may cause problem with some editors. What I don't acknowledge, however, is the idea that the blame for that problem lies on Python.

      --
      No problem is insoluble in all conceivable circumstances.
    24. Re:Python vs. BASIC by narcc · · Score: 1

      I thought we had established that editors shouldn't fuck up with tabs and spaces in the '70s. Guess we didn't.

      You have quite the imagination.

      I do acknowledge that its whitespace-aware design may cause problem with some editors. What I don't acknowledge, however, is the idea that the blame for that problem lies on Python.

      What? If it's Pythons "whitespace-aware design" that "may cause problem" I'd say that the blame lies squarely with Python.

    25. Re:Python vs. BASIC by digitig · · Score: 1

      No, they have a host of new and different problems caused by the use of meaningful whitespace.

      Well, that contradicts your original claim then, doesn't it? And the funny thing is, Python users don't actually have the problems you think they should have.

      --
      Quidnam Latine loqui modo coepi?
    26. Re:Python vs. BASIC by rev0lt · · Score: 1

      The seventies are long gone, and so are (most) languages with strict indentation rules. As a former cobol programmer, I can't stand it. As a basic/pascal/delphi/assembly/c#/php developer, I can't understand why a modern language would dabble with such archaic concept. That is the main reason I wouldn't touch python code with a ten foot pole.

    27. Re:Python vs. BASIC by amicusNYCL · · Score: 1

      I have no beef against Python using whitespaces. But I'd rather be warned I made a typo in an obscure procedure called once a year when I first start the program, not when it encounters that procedure after a year.

      You know, some basic unit testing would catch problems like that. You may want to look into testing a little more before deploying your once-a-year code.

      --
      "Our two-party system is like a bowl of shit looking at itself in a mirror." - Lewis Black
    28. Re:Python vs. BASIC by narcc · · Score: 1

      Well, that contradicts your original claim then, doesn't it?

      No, it doesn't.

      Meaningful whitespace is bad because it introduces errors (which are now invisible). We did learn this in the 70's. The fact that specific problems are different is irrelevant.

      And the funny thing is, Python users don't actually have the problems you think they should have.

      Ah, but they do! The honest ones just admit it. If you dig through various discussions on the subject, you'll find that even the most ardent Python advocates admit the problems that meaningful whitespace causes -- they just think that the one benefit it brings is worth the trade:

      See, the only argument that is (and can be) made for the use of meaningful whitespace is that it forces developers to properly intent their code -- something every experienced programmer is likely doing anyway. (some benefit!)

      It's silly, if you chance to encounter improperly intended code (a rare occurrence indeed), a quick run through a pretty-printer will take care of the problem in under a second. It'll also apply whatever formatting conventions you, not Guido, think are easiest to read.

      Now, with that one "benefit" comes a host of problems, like the ones I mention above and others which you can read about yourself. Is the trade-off really worth it?

      I say no.

      Oh, I'm still waiting for your alleged "evidence".

    29. Re:Python vs. BASIC by digitig · · Score: 1

      Meaningful whitespace is bad because it introduces errors

      How does meaningful whitespace introduce errors? Typing the wrong thing introduces errors, not the whitespace.

      (which are now invisible)

      Python will tell you where they are. Actually, so will all of the editors I use.

      We did learn this in the 70's.

      I was using Hollerith cards into the 1980s, and whitespace is anything but invisible on Hollerith cards. I think you might be idealising the 70s a bit.

      Ah, but they do! The honest ones just admit it. If you dig through various discussions on the subject, you'll find that even the most ardent Python advocates admit the problems that meaningful whitespace causes

      But it really doesn't. Non-significant whitespace has all the same problems in different forms.

      It's silly, if you chance to encounter improperly intended code (a rare occurrence indeed)

      Significantly less rare than improperly indented Python!

      It'll also apply whatever formatting conventions you, not Guido, think are easiest to read.

      The thing is, once you get rid of block start and end notation, all arguments about matching braces v. one-true-brace go away. Python is very flexible in its indenting, and the only requirement is that blocks be indented. You can indent Python the way you think is best, not the way Guido wants.

      Oh, I'm still waiting for your alleged "evidence".

      The fact that people don't have the problems that you insist we learned were inevitable in the 70s. You put forward a falsifiable hypothesis, and a counterexample falsifies it.

      --
      Quidnam Latine loqui modo coepi?
    30. Re:Python vs. BASIC by narcc · · Score: 1

      The fact that people don't have the problems that you insist we learned were inevitable in the 70s. You put forward a falsifiable hypothesis, and a counterexample falsifies it.

      You must be new to this reasoning and evidence thing. See, in this case, a counter example in no way falsifies my hypothesis.

      Also, if you were using hollerith cards in the 80s I feel sorry for you.

      The developed world had VTDs and, yes, whitespace cause no end of headaches.

      How does meaningful whitespace introduce errors?

      Have you read any of my posts? This has already been explained.

      But it really doesn't. Non-significant whitespace has all the same problems in different forms.

      What? Okay, you're just being contrary for no reason now. Explain to me insignificant whitespace causes ANY of the problems I've listed.

      Really, when you write things like this it makes me wonder if you're a complete idiot or a really good troll.

    31. Re:Python vs. BASIC by seekertom · · Score: 1

      "Trying to squeeze a new instruction between line 11 and line 12 kinda sucked sometimes." I never wrote a basic program line-numbered by 1's, and you see the reason why. I used 10's and 100's, depending on the complexity. I found basic to be structured, like math. Learn a few simple rules and you can begin. Add more rules and go further. You didn't need to learn more rules than necessary for the job at hand. Basic's simplicity allowed me to focus on problem solving in a step by step approach, and in doing so, learned much about general problem solving.

    32. Re:Python vs. BASIC by Tastecicles · · Score: 1

      There's always "RENUM"...

      --
      Operation Guillotine is in effect.
    33. Re:Python vs. BASIC by SharpFang · · Score: 1

      I think you ought to discuss it with my boss. The deadlines rarely allow time for writing test units. Unfortunately much more customers value rapid delivery and active support afterwards than spending more time waiting for a more polished product, and as the case is, the company that has its product released first wins - and bugs can be fixed later.

      Sure I'm not happy about it but that's the reality out there.

      --
      45 5F E1 04 22 CA 29 C4 93 3F 95 05 2B 79 2A B2
    34. Re:Python vs. BASIC by Draek · · Score: 1

      You have quite the imagination.

      Thanks, though the statement you quoted is hardly an example of it.

      What? If it's Pythons "whitespace-aware design" that "may cause problem" I'd say that the blame lies squarely with Python.

      No, the problem lies squarely within poorly-designed editors, that much ought to be obvious. Are you, by any chance, the developer behind one such project? if so, I'd say fixing your own software would be far more productive than trying to hinder the adoption of a language as good and popular as Python.

      --
      No problem is insoluble in all conceivable circumstances.
    35. Re:Python vs. BASIC by narcc · · Score: 1

      No, the problem lies squarely within poorly-designed editors, that much ought to be obvious.

      Sorry, if I need a special editor to write code in a language, that's the fault of the language.

      I hear this all the time from people defending meaningful whitespace in Python like it's some kind of revolutionary idea. In reality, it causes many more problems than the one it unnecessarily solves. This has been very well established, though you seem to be having trouble seeing this through your zealotry.

      Pretending that the problems don't exist or that the problems are caused by something external is irrational.

      You're free that like meaningful whitespace -- you're entitled to your subjective opinion.

      You should, however, acknowledge the drawbacks. As I said before, willfully ignoring their existence is completely irrational.

      Are you, by any chance, the developer behind one such project? if so, I'd say fixing your own software would be far more productive than trying to hinder the adoption of a language as good and popular as Python.

      I see that you think that because I disagree with you I must have some ulterior motive? I'm sorry to inform you that I do not.

      My opinion is based on reason and evidence. The fact that you refuse to acknowledge that the problems I've listed exist despite the overwhelming evidence suggests that you've based your opinions on nothing but your subjective impression of the language.

      To move this discussion back on topic, we're talking about teaching programming to children. The whitespace issue will likely lead to mistakes difficult to find as students enter examples and problems from print sources (textbooks, handouts, etc.) where correct indentation may be non-obvious especially if they're struggling with the concept of blocks. They are also likely to inadvertently mix tabs and spaces -- for programmers, the distinction is obvious, not so for beginners. Consequently, it becomes an easy rule for students to accidentally ignore, leading to unnecessary problems.

      Aside from that, having end of blocks clearly marked can make instruction easier as children can think of an end of block mark as a kind of instruction. (e.g. "When the interpreter sees 'next i' it jumps back to the top of the loop")

      But you don't care about that. It seems your devotion to python has blinded you to it's drawbacks. I suppose you think it's perfect for all applications, including as a pedagogical aid, with no deficiencies at all.

    36. Re:Python vs. BASIC by Draek · · Score: 1

      Sorry, if I need a special editor to write code in a language, that's the fault of the language.

      Sorry, if I can't code in my favorite language on a given editor, that's the fault of the editor.

      I hear this all the time from people defending meaningful whitespace in Python like it's some kind of revolutionary idea.

      It isn't, it's merely a stylistic choice of the language, like using curly brackets or 'begin ... end' keywords.

      In reality, it causes many more problems than the one it unnecessarily solves. This has been very well established, though you seem to be having trouble seeing this through your zealotry.

      Wrong, any perceived "problem" with the language occurs only when using poorly-designed editors, most of the world has no such problems which is why it's still such a popular language.

      Pretending that the problems don't exist or that the problems are caused by something external is irrational.

      That's what I've been telling you about your choice of editor.

      My opinion is based on reason and evidence. The fact that you refuse to acknowledge that the problems I've listed exist despite the overwhelming evidence suggests that you've based your opinions on nothing but your subjective impression of the language.

      It'd seem to me it's you who holds an irrational zeal against Python, apparently for bringing to light the shortcomings of your own tools.

      To move this discussion back on topic, we're talking about teaching programming to children. The whitespace issue will likely lead to mistakes difficult to find as students enter examples and problems from print sources (textbooks, handouts, etc.) where correct indentation may be non-obvious especially if they're struggling with the concept of blocks. They are also likely to inadvertently mix tabs and spaces -- for programmers, the distinction is obvious, not so for beginners. Consequently, it becomes an easy rule for students to accidentally ignore, leading to unnecessary problems.

      Learning how to properly indentate your code is as vital as learning how to properly comment it, as such it's a lesson best taught early.

      Aside from that, having end of blocks clearly marked can make instruction easier as children can think of an end of block mark as a kind of instruction. (e.g. "When the interpreter sees 'next i' it jumps back to the top of the loop")

      Python does have the end of blocks clearly marked, by one level less of indentation. That, in turn, helps easily differentiate where each instruction belongs. Though that's an advantage not inherent to Python but rather to proper indentation which, as I said before, should be mandatory regardless of language.

      But you don't care about that. It seems your devotion to python has blinded you to it's drawbacks. I suppose you think it's perfect for all applications, including as a pedagogical aid, with no deficiencies at all.

      No, it's just that fortunately, I'm not blinded by hatred against it and believe it to be harmful in any and all circumstances, and certainly not for a reason as petty as whitespace awareness.

      As far as learning goes, the language I'd recommend varies depending on the context, with Software Engineers starting with Pascal then moving on to Ada, Computer Scientists learning Python followed by Haskell, and school-age children with either Python or Lua and then, if they're willing, C. Python is certainly not the "be all, end all" of programming languages, but neither is it the anti-christ as you treat it.

      --
      No problem is insoluble in all conceivable circumstances.
    37. Re:Python vs. BASIC by narcc · · Score: 1

      any perceived "problem" with the language occurs only when using poorly-designed editors,

      If by "poorly designed editors" you mean any good code editor designed before Python...

      Sorry, I think you've lost sight of reality.

      Besides, any Well Designed code editor will have features for converting tabs to spaces (and vice versa) and features to auto indent and otherwise format code to your preferences.

      As these are common and well-liked features of code editors, I find it odd that you'd call a program which included them as 'poorly designed'.

      Ignoring that for just a moment, there is one unique problem that python has regardless of how good the editor is -- that's moving large blocks of code within or between source files. The editor will (in some cases) be forced to 'guess' at the intended indentation after the copy or move. In a language with traditionally delimited blocks, this isn't an issue as the average editor can automatically correct the indentation. No so with Python.

      As a Python user, you should already be aware that the lexical analyzer adds indent and dedent tokens to mark blocks. When an editor is forced to guess, and guesses incorrectly, the tokens it generates for that purpose will also be wrong and it will improperly indent the code.

      Why bring this up? It's a very weak argument against the use of meaningful whitespace, but it IS a clear problem with any language which uses meaningful whitespace the way python does which will exist regardless of the quality of the editor used.

      It'd seem to me it's you who holds an irrational zeal against Python, apparently for bringing to light the shortcomings of your own tools.

      Now I see why you're so irrational -- you struggle so with reading comprehension.

      I've not said one word about hating python -- I've only talked about the problems with pythons meaningful whitespace.

      But because I dared to criticize one aspect your sacred cow, you imagined that I was some sort of anti-python infidel.

      As far as learning goes, the language I'd recommend varies depending on the context, with Software Engineers starting with Pascal then moving on to Ada, Computer Scientists learning Python followed by Haskell, and school-age children with either Python or Lua and then, if they're willing, C. Python is certainly not the "be all, end all" of programming languages, but neither is it the anti-christ as you treat it.

      Again, I've only criticized one aspect of Python. The opinion you think I have was created whole from your imagination.

      Still, your list does tell me one thing: Your advise is completely worthless.

      Look at what you've produced: You took three completely random groups and wrote down which languages you (inexplicably) decided they should learn.

      Here's a clue -- learning about programing has NOTHING to do with the language. Absolutely nothing. The principles taught don't change with the language.

      The instructors choice of language, however, can make learning about programming easier or more difficult. That's all the impact it can have, and why this Slashdot article exists in the first place.

      This is why your "software engineers should learn two nearly-dead procedural languages" and "computer scientists should learn my favorite language and a functional language" so laughable.

      First, there is no reason why the students intended future profession should have any bearing on the curriculum -- the principles are the same, no matter what the student chooses to do in the future. As stated earlier, the principles you teach are the same no matter WHAT the language!

      As for "school-age children" you should know (if you're handing out advice) that that covers a broad range of ages. (Consequently, a good chunk of the cognitive development spectrum.)

      You should also know, that there has been a good deal of actual research done on the subject of teaching children about programming. Research of which you're clearly unaware.

  3. Re:BASIC by plover · · Score: 5, Funny

    10 print "hello"
    20 goto 10

    This is why we can't have nice things.

    --
    John
  4. BASIC Programmers Never Die... by Blackwulf · · Score: 4, Funny

    ...They GOSUB and don't RETURN.

    1. Re:BASIC Programmers Never Die... by RoverDaddy · · Score: 3, Funny

      Hooray! My sig is finally on-topic.

      --
      RETURN without GOSUB in line 1050
    2. Re:BASIC Programmers Never Die... by drmitch · · Score: 1

      And then they get an error

    3. Re:BASIC Programmers Never Die... by SharpFang · · Score: 1

      10 gosub 10

      the first time I found out 64KB is NOT enough for everyone.

      --
      45 5F E1 04 22 CA 29 C4 93 3F 95 05 2B 79 2A B2
    4. Re:BASIC Programmers Never Die... by Yuioup · · Score: 1

      You mean they GOTO

    5. Re:BASIC Programmers Never Die... by Blackwulf · · Score: 1

      You mean they GOTO

      Nope, you can't RETURN from a GOTO. The RETURN command only works with a GOSUB, where it stores the line you came from - so you can execute the same block of code at different areas.

  5. Um...those are teaching languages? by Anonymous Coward · · Score: 1

    Logo is an educational language. With the addition of Turtle Graphics, it's a great way to show a student how to deconstruct a task into components and instruct the machine to perform that task. Wanna draw a hexagon? Pen down, move a bit, turn 60 degrees, rinse and repeat.

    BASIC means Beginner's All-purpose Symbolic Instruction Code. It, too, was an educational language. Of course, since so many learned it early on, it turned out to be useful to evolve it into things like VB Script, VBA, and now VB.NET, so you can do everything from web page scripting to writing spreadsheet macros to building sophisticated desktop applications with some form of BASIC.

    So why is it any surprise that languages created for teaching purposes are good for teaching programming?

    1. Re:Um...those are teaching languages? by shutdown+-p+now · · Score: 1

      The point of Logo (and turtle graphics in general) is to teach basic algorithms and composability. You're given the most basic primitives only - lines - but then taught how you can combine those into other things. As you go, you learn loops to draw polygons, and functions to reuse that drawing code. Then recursion to draw spirals, stars and snowflakes. And so on.

    2. Re:Um...those are teaching languages? by TheRaven64 · · Score: 1

      It was also used at my school to teach basic geometry. We had to write programs to make different polygons by advancing a fixed amount and turning the correct distance. We later had to write a program that would work out the angle of each corner of a regular polygon from the number of sides, so you give it the number of sides that you want and it drew the polygon. It wasn't used so much for teaching programming as for teaching you that computers were good at solving specific cases of problems once you had a general solution - a lesson that lots of people seem not to learn.

      --
      I am TheRaven on Soylent News
  6. yeah but by hguorbray · · Score: 4, Insightful

    despite their limitations and age, procedural languages are a better way to teach kids (or anyone)how to think logically about the steps required to make a computer do something they want it to do.

    It worked for me in 1971 on a teletype at Cory School in SJ connected to a Stanford mainframe -which I had to feed my 'saved' paper tapes to

    and it will work just as well today on whatever BASIC emulators (or even VB.NET god forbid) that are available today on PCs, pads or whatever.

    Although Java is probably better for middle/high school, I do believe that Basic or Logo are better for those younger who have not yet learned how to deconstruct a desired outcome into a bunch of logical steps.

    -I'm just sayin'

    1. Re:yeah but by forkfail · · Score: 1

      Good initial assignment:

      Have them write an algorithm for a peanut butter sandwich.

      Then ask where the knife came from, how they got the peanut butter out without opening the lid, etc.

      --
      Check your premises.
    2. Re:yeah but by bigtone78 · · Score: 1

      What your suggesting is like trying to teach someone how a car works by first showing them a horse drawn carriage and telling them you'll work up to the real thing. I say throw them in head first and from there it's sink or swim. There's already a dearth of moronic programmers no need to create a whole new generation of them.

    3. Re:yeah but by camperdave · · Score: 3, Funny

      You aren't allowed to use peanut butter as an example in schools anymore. Too many kids are allergic.

      --
      When our name is on the back of your car, we're behind you all the way!
    4. Re:yeah but by narcc · · Score: 1

      I don't know that I'd ever use a language like Java to teach programming (as a first language) to a student regardless of age. It just has too much indecipherable cruft for the beginner. Take this, for example:

      public class hello
      {
        public static void main(String args[])
        {
          system.out.println("Hello, World!");
        }
      }

      Now, if you're trying to each basic concepts like input/output, direct sequencing, bounded and conditional iteration, and conditional branching you're going to want to ignore everything except what is in the inner block. It's totally unnecessary and is confusing for the student (who can only view those lines as magical incantations that let the program work -- and that the instructor will dutifully tell them to 'just ignore'.)

      Hell, I've met lot's of Java programmers who don't know why main is declared static -- to them, it's still magical -- they learned the chant which would appease the complier, but never bothered to find out why it worked.

      Languages like BASIC are excellent for learning as, if for no other reason, they don't have that sort of cruft. Just about every basic around is structured -- no line numbers required, subroutines, functions, everything you need. It makes introducing new concepts to students really easy.

      That said, I'm a big supporter of using Logo to introduce programming to children under 10. Turtles are fun, and the immediate feedback you get after tying a command turns the whole process into a kind of game.

    5. Re:yeah but by The_mad_linguist · · Score: 1

      Then ask where the knife came from, how they got the peanut butter out without opening the lid, etc.

      Ask a librarian!

    6. Re:yeah but by Musc · · Score: 1

      Dearth, i don't think that word means what you think it does.

      --
      Hamsters are at least as feathery as penguins. HamLix
    7. Re:yeah but by FrootLoops · · Score: 1

      Maybe you're right (except that dearth means an insufficient number, and you used it in the opposite sense). Maybe not, though: at some point things are just too complex to take in all at once. To take an extreme example, I could give a 5-year-old a very rigorous explanation of what a vector space is in a few minutes, but they'd have no hope of comprehending it. Extending your analogy, you might not be able to teach someone how a spaceship works without working up to it.

    8. Re:yeah but by Nyder · · Score: 1

      despite their limitations and age, procedural languages are a better way to teach kids (or anyone)how to think logically about the steps required to make a computer do something they want it to do.

      It worked for me in 1971 on a teletype at Cory School in SJ connected to a Stanford mainframe -which I had to feed my 'saved' paper tapes to

      and it will work just as well today on whatever BASIC emulators (or even VB.NET god forbid) that are available today on PCs, pads or whatever.

      Although Java is probably better for middle/high school, I do believe that Basic or Logo are better for those younger who have not yet learned how to deconstruct a desired outcome into a bunch of logical steps.

      -I'm just sayin'

      It's funny, but I remember my math class teaching us flowcharting, and while most the peeps didn't do any computer programming (this was the early 80's), I realized it was a way to setup a program before getting dirty with the nitty gritty. Which I'm sure is what it was for, but most the class would always complain when we did them ( and story problems) but I rathered enjoyed them.

      I'm not a math dude though, when I discovered I had the teachers edition in math (geometry) that was the end of me learning math. Soon I was so far behind the others, I had to cheat off the rocker in parachute pants next to me. Funny thing is, for him being so smart ('cept maybe for his taste in clothes), I used to see him panhandling for crack during the early 2000's.

      Personally, I say teach the kids basic. It's not the best language, but it's a good starter language.

      --
      Be seeing you...
    9. Re:yeah but by TheRaven64 · · Score: 1

      If you want to teach children, give them Smalltalk. Everything is an object and everything is directly manipulatable. You can create an inspector for any object (windows, pixels, controllers, whatever), browse the properties of that instance or the code of the class. You can create new classes by inspecting an existing class and sending it a subclass: message. You can try methods by creating an instance in the transcript and sending it messages, and you can have those objects stick around and create new ones. You can inspect the code editor itself and see how it works, and you can inspect every single object in the system in the same way. The only problem is that you then see that 'modern' IDEs are laughably primitive in comparison with where Smalltalk was in 1980.

      --
      I am TheRaven on Soylent News
  7. Scheme not Basic by amightywind · · Score: 1

    I learned Basic on a Commodore VIC-20 in 1978. I think it is a terrible choice for learning to program. I suggest newbies learn Scheme, a very simple language that will lead you as far down the rabbit hole as you are willing to go. If you are more interested in electronics you should learn C, particularly on the nice small embedded development boards that are available.

    --
    an ill wind that blows no good
    1. Re:Scheme not Basic by xigxag · · Score: 1

      You left out the important part.

      WHY do you think Basic is a terrible choice for learning to program, and WHY is Scheme better?

      --
      There are two kinds of people: 1) those who start arrays with one and 1) those who start them with zero.
  8. work with what you've got by sankyuu · · Score: 1

    I personally started with Logo and assembly language, but only because it was what was available in school (Logo) and on my DOS 2.0 floppy (DEBUG).
    Looking back, BASIC may have been the most available language available on ROM at that time, so that's what folks used (despite that it supposedly 'mutilates the mind beyond recovery' according to Dijkstra http://en.wikiquote.org/wiki/Edsger_Dijkstra ).
    I think now, javascript would have that advantage since it comes with the browser (and firefox is particular has got good debugging support for javascript).

    1. Re:work with what you've got by anton_kg · · Score: 1

      I'm with you. I've started with BASIC 20 years ago and it was cool to type 10 print "A" and see "A" on the screen. Today, the char "A" on the black screen is definitely *not* impressive. People do amazing things using Javascript, like a 1kbyte size AI chess master. Go and teach HTML5, Javascript; something what is more visual like jQuery. Whatever, but no BASIC.

    2. Re:work with what you've got by narcc · · Score: 1

      I've yet to see any valid criticism of BASIC. It's been a modern procedural language for more than 25 years, yet claims of it 'mutilating the mind' or forever ruining programmers who learned it as a first language abound.

      What's wrong with BASIC? More importantly, what's wrong with using BASIC as a teaching language? It's got everything you need and none of the "just ingore it for now" cruft you'll find in modern languages.

      Is it too much exposure to bad VB code? I've seen very good VB code -- and some of the worst VB code ever written. It never once occurred to me to blame the language for the bad code, nor praise it for the good.

      On your other suggestion, teaching JavaScript as a first language (by virtue of it's availability). I would strongly recommend against it.

      See, I have actually used JavaScript to introduce computer programming. The results were ... discouraging.

      See, if the students aren't already familiar with HTML and CSS you get to spend two weeks of precious class time giving them a crash-course (which will require periodic review) Then you introduce events and functions -- another day lost to NOT learning about programming. (Yes, functions are important, but not comprehensible at the level the students would be at.)

      It's very frustrating for the students, who feel like they're cramming for a final exam. By the time you actually get to teach some basic concepts, they're mentally exhausted.

      Add to this the quicks in the various implementations of HTML, CSS, and JS in the hands of complete beginners and you've set yourself up for the worst intro class in history.

    3. Re:work with what you've got by billyswong · · Score: 1

      How about really spend some time on teaching HTML and CSS, put them as the main characters of the class and start on Javascript later, maybe next semester?

    4. Re:work with what you've got by narcc · · Score: 1

      How about really spend some time on teaching HTML and CSS, put them as the main characters of the class and start on Javascript later, maybe next semester?

      Because it's far easier to just use a different language for the course. No new courses need to be created and no additional prerequisites are added to the current course.

    5. Re:work with what you've got by mikael · · Score: 1

      Dijkstra was complaining about the first versions of BASIC which had line numbers and didn't have any flow control like IF-THEN-ELSE or WHILE-ENDWHILE . Combine that with code-monkey practises of banging in code in without any design or layout, and you would end up with spaghetti-code-monsters of applications where GOTO's would be used to jump out to what would be a subroutine (no local variables), a conditional GOTO to return to whichever routine actually made that call.

      --
      Vintage computer adverts: http://www.vintageadbrowser.com/computers-and-software-ads
    6. Re:work with what you've got by narcc · · Score: 1

      Dijkstra was complaining about the first versions of BASIC which had line numbers and didn't have any flow control like IF-THEN-ELSE or WHILE-ENDWHILE

      Why would Dijkstra complain about a version of basic that never existed? The first version at Dartmouth had IF-THEN-ELSE, just not block IFs. (It would appear that you're somewhat misinformed. I recommend you read the Dijkstra letter and speech I link to elsewhere in the discussion.)

      As for railing against GOTO -- It was Wirth, not Dijkstra, that titled that infamous letter "GOTO considered harmful". (Which greatly upset Dijkstra) Dijkstra only suggested that GOTO should be avoided in structured languages.

      You'll note that Wirth went as far as to eliminate break statements from Modula-2 and Pascal for the same reasons Dijkstra used against goto in the aforementioned paper. It had nothing to do with "spaghetti" code.

      Oh, and the best you can come up with is an argument from authority? How about a real reason?

      Keep in mind that only bad programmers wrote "spaghetti" code. That's certainly not the fault of GOTO. You don't hear people complain about "spaghetti" assembly code, do you?

      (Bad programmers today write even more indecipherable OO "spaghetti" code without giving GOTO a second thought.)

  9. Web-based programming environment... by windcask · · Score: 5, Funny

    "Here, son, let's look at this Wordpress site that hasn't been updated in 18 months. Now, this is called 'SQL Injection' and 'Cross-site Scripting.'"

    Nothing better than learning by example...

  10. Not too big of a surprise by TythosEternal · · Score: 1

    While high-level abstractions like .NET and Java are splendid modern tools, nothing teaches you the fundamentals of how a computer thinks and works like a line-by-line BASIC program. Two reasons off-hand: a) The leap to assembly language is natural and easily understood. b) The leap in the reverse direction, to functional languages, is mostly a simple matter of wrapping blocks in headers and return statements. If you start in a language with these two attributes, you're already 1 - 2 years into a collegiate computer science degree.

    1. Re:Not too big of a surprise by hardburn · · Score: 2

      b) The leap in the reverse direction, to functional languages, is mostly a simple matter of wrapping blocks in headers and return statements.

      Nay, no, notta. Functional languages make you think completely differently about how the computer operates. Simply wrapping things up like that is how you get spaghetti code. The budding programmer will tend to keep writing this way for a long time. Some never grow out of it.

      If you start in a language with these two attributes, you're already 1 - 2 years into a collegiate computer science degree.

      That's the biggest indictment of CS curriculums I've ever read.

      --
      Not a typewriter
    2. Re:Not too big of a surprise by shutdown+-p+now · · Score: 1

      I suspect that by "functional" GP really meant "procedural". You don't normally get statements of any kind in truly functional languages, much less "return statements".

    3. Re:Not too big of a surprise by hardburn · · Score: 1

      Either way, really. Procedural languages turn into a spaghetti mess. Functional languages won't work at all.

      --
      Not a typewriter
    4. Re:Not too big of a surprise by Anonymous Coward · · Score: 1

      b) The leap in the reverse direction, to functional languages, is mostly a simple matter of wrapping blocks in headers and return statements

      I think by "functional language" you might be referring to languages that support code modularization by creating and calling functions or procedures (e.g. C, Pascal). Those are not functional languages, and functional programming is something completely different from the imperative or procedural programming that BASIC teaches.

    5. Re:Not too big of a surprise by El_Oscuro · · Score: 1

      I went through this same leap. Unfortunately, I also brought the bad GOTO habit from BASIC. After awhile of mysterious stack overflows in my games, I figured out that using JMP from a subroutine instead of returning from it was a very bad idea. Later I got a C-64 but didn't have the money for the Macro Assembler cartridge. So in BASIC (no longer using GOTO), I wrote an assembler which supported the full 6502 instruction set and address labels. The C-64 didn't have any kind of text editor so I wrote an EDLIN style one, also in BASIC. Using my homegrown assembler, I was able to write a simple Q*Bert style game. Best $30 I never spent!

      --
      "Be grateful for what you have. You may never know when you may lose it."
    6. Re:Not too big of a surprise by Rockoon · · Score: 2

      Procedural languages turn into a spaghetti mess.

      Then what of OOP? When you get right down to it, OOP is just procedural with a heavy amount of implicit data indirection.

      The original BASIC's were spaghetti 1.0 while anything fully OOP is spaghetti 2.0

      ..and don't even get started on the more complex OOP stuff like polymorphism, because thats spaghetti 3.0.

      --
      "His name was James Damore."
    7. Re:Not too big of a surprise by c0lo · · Score: 1

      Procedural languages turn into a spaghetti mess.

      Then what of OOP? When you get right down to it, OOP is just procedural with a heavy amount of implicit data indirection. The original BASIC's were spaghetti 1.0 while anything fully OOP is spaghetti 2.0 ..and don't even get started on the more complex OOP stuff like polymorphism, because thats spaghetti 3.0.

      Template and meta-programming? spaghetti Aleph-1.

      --
      Questions raise, answers kill. Raise questions to stay alive.
    8. Re:Not too big of a surprise by narcc · · Score: 1

      went through this same leap. Unfortunately, I also brought the bad GOTO habit from BASIC. After awhile of mysterious stack overflows in my games, I figured out that using JMP from a subroutine instead of returning from it was a very bad idea.

      Wait, are you telling me that using GOTO in BASIC is what prevented you from understanding the stack when you switched over to 6502 assembly?

      Sorry, I don't buy it.

      Nor can I imagine why (or believe that) you'd put yourself through unnecessary pain by writing a macro assembler in unstructured BASIC without using of GOTO. (It's a pretty important, and useful, aspect of flow control in BASIC on that C64.)

      Best $30 I never spent!

      What did you spend $30 on? It couldn't have been the Macro Assembler cartridge (you didn't have the money) Was it the C64? Did you pick it up at a garage sale in 1996? If that's the case, how much did they want for the Macro Assembler cartridge? Why would they sell the two separately?

      No, this doesn't add up at all.

    9. Re:Not too big of a surprise by clone52431 · · Score: 1

      I don’t get the problem with GOTO either. Was he using GOTO-GOTO instead of GOSUB-RETURN? then he used CALL-JMP instead of CALL-RET or JMP-JMP?

      However, he said he never spent the $30.

      --
      Distributed Denial of APK: It takes 15 seconds to reply to him anonymously, but wastes tons of his time if we all do it.
    10. Re:Not too big of a surprise by narcc · · Score: 1

      However, he said he never spent the $30.

      Ah, you are correct.

    11. Re:Not too big of a surprise by El_Oscuro · · Score: 1

      I guess I left out some details. The original CALL/JMP mistake was made on an 8080 Heathkit H-89 thirty years ago when I was a kid. I wanted to play games and the only way to play them without putting in quarters (which I didn't have) was to program them yourself. The BASIC that came with the H-89 was totally shitty in every way. So I was programming in assembly without knowing jack about programming principles, and only a few months after having touched a computer. A few years later, I worked my ass off to get a (then new) C-64 so I could actually program some games with nice graphics. However, I still didn't have the $30 that a new Macro Assembler cartridge cost, so I made one myself. As far as not using GOTOs, I might have had a few in my BASIC program but only to emulate IF/THEN/ELSE type logic. Everything else was handled by nice clean subroutines like we have in .net today. Since that lesson 30 years ago, I really haven't used GOTO in much of anything.

      --
      "Be grateful for what you have. You may never know when you may lose it."
    12. Re:Not too big of a surprise by narcc · · Score: 1

      I guess I left out some details

      Yes, thank you. This definitely clarifies things.

      I might have had a few in my BASIC program but only to emulate IF/THEN/ELSE type logic.

      GOTO was also quite handy for doing conditional iteration.

      Everything else was handled by nice clean subroutines like we have in .net today. Since that lesson 30 years ago, I really haven't used GOTO in much of anything.

      See everyone, you can write structured code in BASIC -- even in those old unstructured 8k ROM versions of BASIC. It's the programmer, not the language, that produces good or bad code.

      The main point, of course, is that GOTO isn't inherently evil. I know how the meme got started, I just don't know why it persists.

      The two folks who inadvertently started the great GOTO war were Dijkstra and Wirth -- who weren't even railing against GOTO in general and certainly not for the popular (but unfounded) "spaghetti code" reason. (You can read the original letters yourself to get their true intent. Links to them are posted several places in these comments.)

      It's interesting to note that Wirth kept Break out of Pascal and Modula-2 for the exact same reasons he was opposed to the use of GOTO in structured languages -- yet this bit never spread, and people use Break (and Return, to the same effect) without a second thought.

      After all, what is Break if not an unconditional branch?

      That's right folks, Break is GOTO

      Just let that sink in.

  11. Basic is the best by Anonymous Coward · · Score: 1

    BASIC helps to teach logical though process, critical in both programming, and in business analytics. I learned BASIC on an Apple IIE back in the 80s and a C64. That knowledge went dormant, until about 10 years ago when I began using Access, Crystal, SQL (and derivatives) and now SPSS.

  12. Slashvertizement by SoftwareArtist · · Score: 2, Insightful

    Wow, this "story" is a really blatant advertisement for a commercial website.

    No, BASIC is not a good language for much of any purpose, including education. Especially not the archaic type of BASIC they're using. Computer science really has progressed in the last four decades. Personally, I'd recommend Python as a starting language - it's easy to learn enough to do simple things, it's a well designed language that teaches good habits, and it's a "real" language that you won't outgrow as soon as you start writing anything beyond toy programs. But if you want a language designed specifically as a learning tool, there are lots of those that are a lot more modern and let you do a lot more than this company's offering: Processing, Alice, etc.

    --
    "I'm too busy to research this and form an educated opinion, but I do have time to tell everyone my uninformed opinion."
    1. Re:Slashvertizement by outsider007 · · Score: 4, Funny

      I came for infotainment but was disappointed to find an edutizement

      --
      If you mod me down the terrorists will have won
    2. Re:Slashvertizement by guruevi · · Score: 1

      well designed language that teaches good habits

      Except for teaching you line/statement endings and how to share your source code through channels that don't keep track of tabs and spaces.

      --
      Custom electronics and digital signage for your business: www.evcircuits.com
    3. Re:Slashvertizement by RzUpAnmsCwrds · · Score: 1

      It's not even the first one from this site:

      A Real World HTML 5 Benchmark

      That story references the exact same website.

    4. Re:Slashvertizement by swilver · · Score: 1

      Python did not do itself any favors by using idents for blocks. It makes it hard to teach on a blackboard, or any other medium that has finite space.

    5. Re:Slashvertizement by anegg · · Score: 1

      I have recently chosen to use BASIC to introduce my kids to computer programming. I think it is a relatively decent choice for many reasons. It only requires a simple interpreter that runs in a terminal window. It can be used to teach programming that relates the program to what is actually being done on the processor (a series of numbered step-by-step instructions). It uses very simple data typing (numeric variables and string variables). It has very simple control-flow structures (that ultimately are what all high-level languages are broken down into).

      Is it the be-all end-all of programming? No. But it gets the ball rolling as a good, uncomplicated, first approximation of what programming is that relates directly to the fundamental actions of instructions on the CPU. There is lots of time, later, to add all of the complexities of more detailed data representations and control-flow structures, including OOP.

      Those who think that the presence of the GOTO statement somehow damages people's brains don't seem to have much respect for the cognitive abilities of other individuals. Anyone who has used GOTO to program, who then doesn't immediately see the benefit of GOSUB/RETURN or a function call/RETURN, and understand that the GOTO should not be used to return the control flow outside of the code unit (as delineated by other control-flow structures), needs to be gently remonstrated by their instructor for unclear thinking. Its a teaching moment, not a cerebral hemorrhage.

    6. Re:Slashvertizement by BigSes · · Score: 1

      Is there a book that you would recommend to learn Python? I learned to program BASIC about 15 years ago back in high school, and always wanted to give something more modern a try. Python sounds like the way to go, especially if it is as similar in nature as it sounds to BASIC. I don't mean a classroom "teaching" type book, unless you think that is best, I mean more of a self-teaching manual?

  13. Teach Python instead by talcon · · Score: 2

    I think Python is a better contemporary choice now (and I learned on structured BASIC - QuickBASIC)

    1. Re:Teach Python instead by Haeleth · · Score: 1

      BASIC has one important advantage over Python.

      BASIC is not a religion.

      Sure, Python is a nicer language for writing modern programs in. But the cult-like fervor that many Python advocates tend to adopt, particularly whenever the subject of learning programming comes up, is frankly rather disturbing -- and certainly not something I would want any child of mine to be exposed to in an educational environment.

    2. Re:Teach Python instead by digitig · · Score: 1

      BASIC is not a religion.

      Oh, I think you'll find that it is. All programming languages are. But BASIC is one of those ancient religions that nobody takes seriously any more.

      --
      Quidnam Latine loqui modo coepi?
  14. Programming should begin with OO - yes really! by robbak · · Score: 2

    There is noting inherently complex with OO, unless you already have a head full of linear or procedural programming that you need to get rid of.

    A nice, stripped-down OO language - I'd sugest parts of java if it was a free language - would be a good start. Even a graphical interface, although they are undeniable useless for real programming, would be useful for starting off.

    --
    Prediction for end of Universe #42: Fencepost error in Quantum_bogosort.cpp
    1. Re:Programming should begin with OO - yes really! by aztracker1 · · Score: 1

      I would think that JavaScript would be appropriate, it's easy enough in terms of syntax, there's a lot of flexibility, and it's an event driven, functional language with prototype based inheritance. I know it gets a bad rap, but honestly it's a very good language, and very widely available.

      --
      Michael J. Ryan - tracker1.info
    2. Re:Programming should begin with OO - yes really! by shutdown+-p+now · · Score: 1

      There is noting inherently complex with OO

      There isn't, but it's one level of abstraction higher than you need to get started. One has to learn conditionals and loops and the concept of code reuse via functions before you can meaningfully explain what classes and methods and polymorphism are for - and before you get to that point, that pesky "class" keyword only gets in the way and requires handwaving along the lines of "we shall study that later".

      I mean, you can certainly explain what objects and classes are to people without any programming background. The problem is explaining why they're useful. To someone who already knows basic structured programming, you can take any task that nicely fits OO modelling - e.g. any simulation, or a simple roguelike game - and suggest that they first try to implement (or describe how they're going to implement) it using the techniques they know. And then show how much more neatly it can be done with OO.

    3. Re:Programming should begin with OO - yes really! by narcc · · Score: 4, Interesting

      Programming should NEVER begin with OO. If for no other reason than the cruft you need to add in OO languages before you can even begin to introducing basic concepts.

      Objects are great when used appropriately. However, knowing how and when to use objects takes experience. Beginners by definition don't have experience.

      "Pure" OO languages are even worse. When everything is an object, you don't have a choice about when to use them and, consequently, are much more likely to use them inappropriately. (Bad OO code makes you wish you were maintaining bad VB code!)

      Sure, a good programmer can write great OO code, but such programmers are extremely rare -- You're not likely to find an introductory class full of competent and experienced OO programmers.

      Having taught programming to many different age groups (from children to adults) I know from experience that OO is not the way to go. You can't just start off with structure -- it's totally inappropriate. They simply can't learn to structure their code until they're capable of writing some!

      Teaching someone programming is a bit like teaching someone to think. A good teaching language should let you introduce all the basic concepts like direct sequencing, bounded and conditional iteration, conditional branching, variables and types, i/o, etc. without a bunch of indecipherable code cluttering up the program and confusing the student ("magic" just-ignore-this code does not aid in the learning process).

      For that, the submitter is spot-on. Languages like BASIC and Logo are excellent introductory languages. All meat and no fat. I prefer Logo for children under 10, BASIC for everyone else. I've tried Java, JavaScript, C, Pascal, and even COBOL. Nothing stays out of your way like BASIC or gives you the instant satisfaction (crucial to younger children) like Logo.

    4. Re:Programming should begin with OO - yes really! by robbak · · Score: 1

      I agree with the point about "magic-just-ignore-this code". But that comes from teaching non-OO programming in an OO language.

      My point is the OO is as much - maybe more - of a basic concept as iteration and branching. A programmers first 'hello world' should be taught as giving a string object to the system object.

      Teaching OO as a basic concept leads more quickly into displays and graphics, even simple games rendered in 3d.

      Of course, choosing your language is critical. Many OO languages have a history of being procedural with OO extensions. You end up programming that way, especially if your history is the same: Learning procedural programming, and adding OO to it.

      --
      Prediction for end of Universe #42: Fencepost error in Quantum_bogosort.cpp
    5. Re:Programming should begin with OO - yes really! by julesh · · Score: 1

      A nice, stripped-down OO language - I'd sugest parts of java if it was a free language - would be a good start.

      Err... most of Java *is* a free language. There's only a few bits and pieces (e.g. the API for mobile phone applications) that aren't free. OpenJDK includes all of the core language, AIUI.

    6. Re:Programming should begin with OO - yes really! by LordNacho · · Score: 1

      While I agree OO is useful, it seems you need to have an awful lot explained to you (classes, inheritance, polymorphism, etc...) before you can actually start doing anything. And if you don't have stuff explained, you'll wonder what the heck you're looking at when you run into a new keyword. However, it can be hard to grasp what the concepts mean without something concrete to look at. It's a bit of a Catch-22.

    7. Re:Programming should begin with OO - yes really! by narcc · · Score: 1

      I agree with the point about "magic-just-ignore-this code". But that comes from teaching non-OO programming in an OO language.

      I suppose with the right language and lots of instruction before you start writing code, you could avoid some magic code. I just don't see why you'd *want* to start with it. It seems foolish to me to teach OO design before the student has a solid grasp of the fundamentals of programming.

      Try drawing up a few lesson plans and I think you see what I mean.

      My point is the OO is as much - maybe more - of a basic concept as iteration and branching.

      I don't we'll find much common ground here. I can't even conceive of how OO could in any way be as or more fundamental than iteration and branching. (I honestly don't understand how you could reach this conclusion. I'd be interested if you had a way to explain this to me.)

      I view OO in terms of design. (You can write OO code in non-OO languages, from a design point of view.) In that sense, it can be quite useful when applied to specific types of problems -- but in no way is it essential. (certainly not as essential as iteration or branching) I'd go as far as to say that the OO way can even be a very poor way to design an application.

      I'm reminded of a question posted on a discussion board about writing a chess program. The submitter was working on a way to represent the board. He was toying with a 'piece centric' approach. (See this page for a better understanding of the problem. Board representation involves more than just a data structure.)

      One of the replies was from a "pure OO" advocate, who suggested that a piece class be created from which specific piece classes (pawn, biship, etc.) could be derived.

      Now, in a chess program, potentially millions of boards will be created, evaluated, and discarded as the computer attempts to determine its next move. Using the OO approach, in this case, is quite obviously the wrong thing to do.

      Now, you might rightly say that this is OO misapplied (and it is), but how is a programming novice able to identify this?

      A programmers first 'hello world' should be taught as giving a string object to the system object.

      Again, I would disagree. It just seems too far away from what's actually happening in the computer -- and completely useless outside of the OO approach. (Which, as illustrated above, is not always the most sensible way.)

      One surprising advantage of unstructured BASIC as a teaching tool is that the approach you take to structuring your programs is reasonably close to the way you'd structure a program in assembly. So close, in fact, that even in this discussion you'll find that many micro users made the leap from BASIC to assembly without difficulty.

      There is no direct connection from the OO way to the machines way -- not that I expect many people to work in assembly in this modern age -- but I can see how it could hamper a transition to an imperative language. (Granted, this would be a disadvantage for declarative and functional programming as well.)

      giving a string object to the system object.

      I was never comfortable with strings being objects, though being an aggregate structure I could at least understand it -- the idea that scalars should be objects is just insane!

      When I see things like this, it makes me think that the "pure OO" movement has taken the 'everything should be an object' mantra just a bit too far.

      Please understand that I'm not anti-OO in any way. OO design is excellent for simulation or any similar design case where you have otherwise discrete components which can be seen as communicating with one another. It's just not all that useful (and potentially detrimental, as in the chess example) in other design cases.

      That said, OO design, being non-essential, should wait until after the student has a solid grasp of programming fundamentals -- an advantage which imperative programming languages hold as teaching aids over OO languages for reasons stated earlier.

    8. Re:Programming should begin with OO - yes really! by beelsebob · · Score: 1

      Sir, you have it backwards. OOP is linear procedural programming, it's just got additional constructs on top of it that add inconsistency and corner cases.

    9. Re:Programming should begin with OO - yes really! by DragonWriter · · Score: 1

      Programming should NEVER begin with OO. If for no other reason than the cruft you need to add in OO languages before you can even begin to introducing basic concepts.

      That's not really true of OO languages generally, its mostly true of the those languages whose heritage or inspiration in a static procedural language like C or Pascal that then had an OO layer bolted on to it; the Pascal-derived branch of that tree is pretty much dead now, I think, but the C-derived branch, including C++, Java, and C# is still going strong.

      OO languages like Smalltalk (for class-based OO) or Self (for prototype-based OO) and those inspired by them (like Ruby and JavaScript) that haven't, somewhere along the line, tried to wed OO structure with an existing static procedural language, don't really feature much boilerplate cruft that needs to be included in simple programs before beginning to introduce basic concepts.

    10. Re:Programming should begin with OO - yes really! by TheRaven64 · · Score: 1

      A pure OO language, like Self or Smalltalk, is very simple. You have objects, you send them messages. The only flow control that you need is the combination of closures and messages. Neither language has an equivalent of an if statement in the language. If you want a conditional, you send an #ifTrue: message to an object with a block (closure) as the argument. The receiver is typically either the True or False singleton, which implements its #ifTrue: method by either sending a #value message to the argument or ignoring it. You can build additional loop constructs on top of it.

      The notion of an object is trivial to understand. An object is a simple (special purpose) computer. It receives messages, does some computation, and sends messages to other objects. If you understand what a computer is, you understand object orientation. It's just about decomposing your problem into smaller components, each of which is implemented as a (model of a) special-purpose computer.

      Trying to teach OO as a special case of procedural programming is a recipe for disaster.

      --
      I am TheRaven on Soylent News
    11. Re:Programming should begin with OO - yes really! by narcc · · Score: 2

      OO languages like Smalltalk (for class-based OO) or Self (for prototype-based OO) and those inspired by them (like Ruby and JavaScript) that haven't, somewhere along the line, tried to wed OO structure with an existing static procedural language, don't really feature much boilerplate cruft that needs to be included in simple programs before beginning to introduce basic concepts.

      So... how much cruft do think is acceptable? I think any amount is too much, for the reasons stated above.

    12. Re:Programming should begin with OO - yes really! by omnichad · · Score: 1

      I disagree - but that's because my first computer was slow. CPU's don't run OO code directly. It's compiled into linear or semi-linear code - and CPU's still run mostly linear code. I say start with the GOTO's, move on to GOSUB/functions, and then move on to "Computers are fast enough that we can usually forget about all that junk, and put things into containers that make more sense to humans."
       
      Not knowing how computers work leads to poor algorithms. And linear processing is something that one can understand easier than having to keep track of the layers in OO.

    13. Re:Programming should begin with OO - yes really! by narcc · · Score: 1

      If you want a conditional, you send an #ifTrue: message to an object with a block (closure) as the argument. The receiver is typically either the True or False singleton, which implements its #ifTrue: method by either sending a #value message to the argument or ignoring it. You can build additional loop constructs on top of it.

      Great... so... how does this make programming easier? More importantly, how does this make Learning to program easier?

      The notion of an object is trivial to understand.

      Yeah, but that alone does not a programmer make.

      An object is a simple (special purpose) computer. It receives messages, does some computation, and sends messages to other objects. If you understand what a computer is, you understand object orientation.

      See, they don't understand "what a computer is" in the sense you mean here. That's a bit of a problem from an instructional standpoint.

      It's just about decomposing your problem into smaller components,

      This is good, but it's not an advantage that OO holds over procedural languages in either teaching or practice. (Quite the opposite, really.)

      each of which is implemented as a (model of a) special-purpose computer.

      Which is great -- for already competent programmers.

      Trying to teach OO as a special case of procedural programming is a recipe for disaster.

      That certainly would be. Who is advocating this?

      I'd much rather OO be taught as a design technique -- not the "one true way" the purists advocate.

      While I agree that OO has it's place, it's no panacea -- and is most definitely an unnecessary barrier to learning the fundamentals of programming.

    14. Re:Programming should begin with OO - yes really! by DragonWriter · · Score: 1

      So... how much cruft do think is acceptable?

      Define "cruft" concretely enough that it is possible to measure it quantitatively, and then we can discuss that question.

      I think any amount is too much, for the reasons stated above.

      I don't think most dynamic OO languages impose any "cruft" that must be included before you can begin addressing basic concepts. I think that (and this is true of most procedural and functional languages in general, as well as OO languages) that there are certain concepts (e.g., arbitrary flow control) that are harder to express in those languages, which makes them less suitable for an introduction to programming whose purpose is to teach a low-level understanding of how computers work (compared to BASIC, whose structure, despite the more accessible syntax, is more similar to assembly language.)

      OTOH, I think that the ease of expressing structure in functional, OO, and procedural languages makes any of those models better than old-school BASIC for teaching introductory programming in a context where the intent is to focus on designing solutions to problems. (I think each model has different strengths here, but I think a decent curriculum in this regard could be based around a language supporting any of those models, or modern multi-paradigm dynamic languages like Ruby or Python. The best specific implementation I've seen of an introduction of this type is the book How to Design Programs, which uses a series of successively more involved versions of a Scheme-derived pedagogical language.)

    15. Re:Programming should begin with OO - yes really! by rovolo · · Score: 1

      I've found that beginners have a ton of trouble with "public static void main()". The only self evident keyword is 'main', and it takes them weeks of classes to understand how objects work, and thus the flow of the program. OO is complex for beginners because it requires days to get a handle on, and if you don't think that's true then you haven't actually tried to teach OO to absolute beginners.

    16. Re:Programming should begin with OO - yes really! by narcc · · Score: 1

      Define "cruft" concretely enough that it is possible to measure it quantitatively, and then we can discuss that question.

      Why? You quite obviously know what I mean by 'cruft' (necessary code incomprehensible to the student within the context of the material presented) and you know that I think that 0 is the only appropriate amount. It's really up to you to pick a measure if you think that some cruft is acceptable -- go with lines or characters for all it matters.

      OTOH, I think that the ease of expressing structure in functional, OO, and procedural languages makes any of those models better than old-school BASIC for teaching introductory programming in a context where the intent is to focus on designing solutions to problems

      Remember that the discussion is about teaching programming concepts to children. Though even if we weren't, I find it unnecessary (and consequently less-effective) to introduce structure early in the learning process.

      The best specific implementation I've seen of an introduction of this type is the book How to Design Programs, which uses a series of successively more involved versions of a Scheme-derived pedagogical language.)

      I'm familiar with the book and while I think it's one of the best for introducing functional programming to already competent programmers, I wouldn't use it to teach programming to beginners. Given the content, I certainly wouldn't use it to teach children under the age of 15. (This is my intuition from years of experience teaching programming at various age levels. I'm not sure that I can properly explain why I believe this to be the case.)

    17. Re:Programming should begin with OO - yes really! by DragonWriter · · Score: 1

      Why? You quite obviously know what I mean by 'cruft' (necessary code incomprehensible to the student within the context of the material presented)

      In that case, I would say both "zero" and say that procedural, functional, and OO languages -- which permit single-line calls to externally-implemented code that can be explained as telling something else what to do are actually are better at minimizing cruft than old-style BASIC is with mystical routines accessed with GOSUBS and arcane DATA statements.

      That being said, you probably want to avoid languages where library access is "in your face" for common I/O tasks (if you have to do an explicit import of an I/O library to read from and write to the console, its probably not the best choice; OTOH it may for some languages be possible to conceal this by not using the normal program running facilities and using a "bootstrapping" mechanism which adds these things in invisibly behind the scenes; if you are teaching concepts and not the particular language and library structure, this may make sense if the other features of the language make it good for the task.)

      Remember that the discussion is about teaching programming concepts to children.

      I am aware of that. And I remain convinced that the relative merits of structured languages vs. something like old-style BASIC in a language to ise for that vary based on what the purpose of teaching "programming concepts" is: whether its more about teaching programming-as-a-vehicle-to-understanding-computers or programming-as-a-vehicle-to-understand-problem-solving.

      That doesn't really change with the age of the audience, though there may be some reason to choose particular languages within broad families based on the age of the audience.

      I'm familiar with the book and while I think it's one of the best for introducing functional programming to already competent programmers, I wouldn't use it to teach programming to beginners.

      I disagree, I think HtDP great for teaching programming to beginners (I think that's what it is best for, and indeed that's what it is designed for) -- again, if the focus is on problem solving rather than understanding how computers work at a low level, either of which is a valid focus for a first course involving programming. I wouldn't consider it a great book for teaching functional programming, as such, to competent programmers, though I think could be a good book to teach competent coders to be better at structured analysis and design of solutions.

      Given the content, I certainly wouldn't use it to teach children under the age of 15.

      I'd agree with that as far as the book as a text is concerned, I was citing it as an illustration of a basic approach. I'd use the basic approach (though not necessarily either the book or Scheme specifically as the language) at any age where I wanted to teach programming-as-problem-solving.

      Programming-as-a-window-into-the-workings-of-a-computer I think old-style BASIC is still the most accessible language for novice programmers to use. I'm not sure the best approach for that, its not really something I've spent as much time thinking about.

      And the -- different but somewhat related -- programming-to-get-over-the-idea-that-its-a-magic-box-that-someone-else-has-to-make-work-for-you can you any language that is readily accessible. Old-style BASIC's line-oriented structure might make it particularly strong here for younger learners, but I'm not sure that it is better than, e.g., Logo for this.

       

    18. Re:Programming should begin with OO - yes really! by narcc · · Score: 1

      In that case, I would say both "zero" and say that procedural, functional, and OO languages -- which permit single-line calls to externally-implemented code that can be explained as telling something else what to do are actually are better at minimizing cruft than old-style BASIC is with mystical routines accessed with GOSUBS and arcane DATA statements.

      This doesn't make sense to me. With old unstructured BASIC there is never a case when the student would need to encounter a DATA or GOSUB without first being introduced to it. (I don't know of any mystical routines accessed via GOSUB -- any routine you'd call is one that you've written. Could you explain this further?)

      That's really what makes BASIC shine in the classroom: there is never any cruft.

      Lisp and Scheme (and others, like forth) share this advantage, but have other barriers, like prefix notation, that make them less than ideal.

      With most (all?) OO languages, some cruft is inevitable -- even most procedural languages offer their share (C and Pascal come immediately to mind here.)

      The point, of course, is why choose some when you can choose none?

      if you are teaching concepts and not the particular language and library structure

      Any competent teacher will be teaching concepts -- no matter what language they use for the course.

      I'm convinced that the reason many beginning students fail in the classroom is the instructor is trying to teach [language] and not programming.

      I remain convinced that the relative merits of structured languages vs. something like old-style BASIC in a language to ise for that vary based on what the purpose of teaching "programming concepts" is:

      Well, most structured BASIC interpreters have all the classroom advantages of unstructured BASIC plus the ability to introduce subroutines and functions (that they're distinguished is also nice) after they're already familiar with blocks.

      Add to that, in many structured BASICs, line numbers are optional but still supported (they can be nice from a pedagogical perspective)

      whether its more about teaching programming-as-a-vehicle-to-understanding-computers or programming-as-a-vehicle-to-understand-problem-solving.

      I understand why you'd make the distinction, but you can't really teach one without teaching the other to some degree. While teaching programming, the emphasis is always on problem solving, the "understanding computers" aspect is not only unavoidable but naturally blends itself into the instruction with phrases like 'the computer will ...' and 'that tells the computer to ...'.

      I'd agree with that as far as the book as a text is concerned, I was citing it as an illustration of a basic approach. I'd use the basic approach (though not necessarily either the book or Scheme specifically as the language) at any age where I wanted to teach programming-as-problem-solving.

      I'd disagree, on the basis of my experience. The approach the book introduces concepts in an order I see as inappropriate for beginners -- All-in-all the book is a bit ham-fisted in it's approach. Topics don't build on (or flow into) one another and Related concepts aren't generally presented together.

      This isn't really a problem if you want to learn Scheme and a bit about functional programming -- it actually works rather well -- but in the classroom, such a presentation quickly turns into a confusing mess.

      Programming-as-a-window-into-the-workings-of-a-computer I think old-style BASIC is still the most accessible language for novice programmers to use. I'm not sure the best approach for that, its not really something I've spent as much time thinking about.

      "The best" is nebulous. It's certainly the best I've found for children 10+ and adults. (Though I use a structured BASIC)

      Old-style BASIC's line-oriented structure might make it particularly strong here for younger learners, but I'm not sure that it is better than, e.g., Logo for this.

      I agree. Logo really is a great choice for children 10 and under.

    19. Re:Programming should begin with OO - yes really! by GlassHeart · · Score: 1

      OTOH, I think that the ease of expressing structure in functional, OO, and procedural languages makes any of those models better than old-school BASIC for teaching introductory programming in a context where the intent is to focus on designing solutions to problems.

      I disagree. I think the beginner does not want to design anything, much less a complex software system. I think the beginner wants to learn how to make the computer follow some instructions, like add some numbers, or move a square from one part of the screen to another.

      The rest of CS is very important, but they are only important for big programs. Just as bubble sort is perfectly adequate for an array of 10 items, splitting a program into functions only really helps when you're in the hundreds of lines of code, and OO really only begins to make sense in the thousands of lines of code. IOW, I think there's something in letting beginners make the same mistakes that our pioneers did, just before teaching them methods to avoid those mistakes.

    20. Re:Programming should begin with OO - yes really! by DragonWriter · · Score: 1

      I disagree. I think the beginner does not want to design anything, much less a complex software system. I think the beginner wants to learn how to make the computer follow some instructions, like add some numbers, or move a square from one part of the screen to another.

      I think you are misunderstanding what I wrote. I am not arguing that "the beginner" wants a design focus. In fact, people who are new to programming may want different things, and may not know what they want.

      In the part of GP that you quote in your post, I refer to suitability of certain programming languages to a first course where the intent (of the course) is to focus on designing solutions to problems (inherently, this is not "complex software systems", although the skills learned in such a course are transferrable to more complex systems.)

      In other parts of GP, I refer to the suitability of different programming langauges for first courses with a different focus.

      To the extent that your post rests on the idea that "the beginner", universally, has a single preference and thus that there is only one true and correct focus for a first course, I disagree strongly, and to the extent that your post appears to be directed as a response to a perception that part of my post was arguing on the same premise but with ascribing a different singular preference to "the beginner" I feel obliged to point out that that is a misreading of what I wrote.

    21. Re:Programming should begin with OO - yes really! by DragonWriter · · Score: 1

      This doesn't make sense to me. With old unstructured BASIC there is never a case when the student would need to encounter a DATA or GOSUB without first being introduced to it. (I don't know of any mystical routines accessed via GOSUB -- any routine you'd call is one that you've written. Could you explain this further?)

      IME, its very common and useful for introductory courses, regardless of language, to want, fairly early on, to introduce simple concepts through compelling demonstration uses which rely on things whose implementation relies on techniques that have not been taught (and in some cases which are beyond the scope of the course.) In structured languages where this can be presented as a simple call out, this isn't distracting. Where you have to include the code directly, it is distracting.

      Lisp and Scheme (and others, like forth) share this advantage, but have other barriers, like prefix notation, that make them less than ideal.

      Prefix notation for procedure and function application is fairly directly analogous to verb-first word order in natural language, which is what, for instance, English uses for the imperative and for many questions. Since procedure and function application maps fairly directly to either imperative commands or questions, prefix notation should be fairly easy to teach to English speakers.

      It probably makes things harder if you start trying to teach prefix notation focussing on mathematical operations using mathematic symbols rather than words for operators, since that does conflict with how people are used to seeing those things used.

      The leap from the sentence "add 5 and 5" to "add 5 5" (in REBOL) or "(add 5 5)" (in a language using lispish notation) is fairly obvious.

      The leap from "5 + 5" to "(+ 5 5)" is greater.

      (Incidentally, that's one of the things I do think is a problem with HtDP.)

      I'd disagree, on the basis of my experience. The approach the book introduces concepts in an order I see as inappropriate for beginners -- All-in-all the book is a bit ham-fisted in it's approach. Topics don't build on (or flow into) one another and Related concepts aren't generally presented together.

      Its kind of hard to respond to subjective impressions with no specific cited basis, so I'll just say that I think that my subjective impression is that the topics in the book do build on each other quite well (the approach builds both breadth and depth as the course progresses, which I personally find is better than breadth-first -- e.g., covering all simple operations before starting either function definitions or control structures -- which is really the only alternative.)

      This isn't really a problem if you want to learn Scheme and a bit about functional programming -- it actually works rather well -- but in the classroom, such a presentation quickly turns into a confusing mess.

      Again, I don't think that's really the strength of HtBP. What its really good for is learning general approaches to problem analysis and solution design with programming as a vehicle; it teaches less about computers as technology and more about analysis than most introductory approaches. Given its stated intent, that's unsurprising.

    22. Re:Programming should begin with OO - yes really! by narcc · · Score: 1

      Prefix notation for procedure and function application is fairly directly analogous to verb-first word order in natural language, which is what, for instance, English uses for the imperative and for many questions. Since procedure and function application maps fairly directly to either imperative commands or questions, prefix notation should be fairly easy to teach to English speakers.

      Yes, it can be taught fairly easily and quickly. However, it is a distraction and complete waste of class time. You will be teaching prefix notation and not computer programming -- likely wasting a whole day. It also adds another stumbling block -- while I doubt they'd struggle converting 2 + 2 to + 2 2, converting 2 + 2 - 3 or anything more complicated will be a struggle without an acquired fluency. (Which they won't have after that wasted day of instruction.)

      As we're talking about teaching children, you may need more than one day -- days that are wasted doing math and not programming. It's an excellent way to kill their interest!

      IME, its very common and useful for introductory courses, regardless of language, to want, fairly early on, to introduce simple concepts through compelling demonstration uses which rely on things whose implementation relies on techniques that have not been taught (and in some cases which are beyond the scope of the course.) In structured languages where this can be presented as a simple call out, this isn't distracting. Where you have to include the code directly, it is distracting.

      In that case, it's at the discretion of the instructor -- not forced upon him. Though in the classes I've taught, I've never found the need to use, in an example, anything that the student has not been exposed to. (with cruft-free languages anyhow) Of course, I take great care when preparing the course to ensure this. (This has the additional benefit of forcing me to present the material in such a way that concepts build directly atop one another. I've found this to be very effective.)

      the approach builds both breadth and depth as the course progresses, which I personally find is better than breadth-first -- e.g., covering all simple operations before starting either function definitions or control structures -- which is really the only alternative.

      It's not an either-or scenario. When you're starting from nothing, "breadth" is unavoidable -- but you needn't spend the whole course that way. If you are, you've likely stopped teaching concepts and started teaching [insert language].

      While I generally don't cover functions until later, some control structures (like conditional branching) do get attention early.

      I wait on functions because they're simply not important that early, and can be distracting.

      Of course, we're still only talking about the first 3 weeks of a course (4, if you've got a slow class ;) ) Most of the "depth" enters in afterward as they explore common algorithms and data structures.

      I'm curious, do you have much experience teaching?

  15. Is it 1994 again? by mmaniaci · · Score: 1

    BASIC? Really? In 2010 someone is making products with BASIC?!?!?! This has to be for legacy supp... wait you say it isn't? WHAT THE FUCK!!!

    Please do your students a favor and use Python.

    1. Re:Is it 1994 again? by syousef · · Score: 1

      BASIC? Really? In 2010 someone is making products with BASIC?!?!?! This has to be for legacy supp... wait you say it isn't? WHAT THE FUCK!!!

      Please do your students a favor and use Python.

      Yeah 1994 comes around every 500 lines or so. It's a bug in the code. That's what you get for using a language that depends on line numbers.

      --
      These posts express my own personal views, not those of my employer
    2. Re:Is it 1994 again? by ziggyzaggy · · Score: 1

      I'd rather my students not think of white space as significant. that's so gay

    3. Re:Is it 1994 again? by narcc · · Score: 1

      What's wrong with BASIC?

      You recommend Python as a teaching language instead, which I find confusing. Nothing suggests "my students will be confused" more than meaningful white space.

      Remember that students aren't programmers -- blocks mean nothing to them. Try teaching iteration in a language where blocks end because the indentation level changes. (In BASIC, you have wend and next statements -- it gives the student an anchor for understanding the "jump back" part and clearly delineates the end of the block.) That bit of Python starts to look a bit magical from the students perspective -- and we DON'T want students to start accepting "magic" with the promise that they'll more fully understand later.

      I do like the immediate mode interpreter, but the language itself just isn't well suited as a learning language.

      For that purpose, BASIC and Logo have it beat.

    4. Re:Is it 1994 again? by SharpFang · · Score: 1

      Interestingly, if you're looking for a job at a big business corporation (not IT-focused, just utilizing IT for its miscellaneous other goals) you'll find knowing BASIC (VB.net) does you much more good than knowing Python.

      --
      45 5F E1 04 22 CA 29 C4 93 3F 95 05 2B 79 2A B2
    5. Re:Is it 1994 again? by LordNacho · · Score: 1

      Does VBA count as a form of Basic? From experience, a frightening amount of the world's financial institutions use it to trade huge sums of money. Go around a trading desk at your average firm, and you find everyone has a load of spaghetti code that they copied/modified themselves.

  16. Microcomputers grew up with us. by ZorinLynx · · Score: 5, Insightful

    Those of us who were kids in the 80s and grew up playing on microcomputers with BASIC have a very distinct property:

    We grew up together with computers.

    When we were kids, computers were simple, single-tasking, small memories, and it was easy for a youngster to understand the entire system. As we got older, systems got more complicated, and so did our ability to understand them.

    Today's kids start with computers that are already large systems with complex operating systems, millions of times more memory than we have *disk* when we started, that are difficult to understand at a low level. I think this puts them at a loss. Every child should be able to play with and learn on an Apple II, C64, or similar small system. Of course realistically that won't happen. So emulated "systems" with simple programming languages may indeed be a good idea for today's kids.

    1. Re:Microcomputers grew up with us. by Nimey · · Score: 1

      Or, you know, there's actual emulators such as AppleWin for the ][ series and VICE for the C=64 and its brethren. Also RetroForth.

      --
      Hail Eris, full of mischief...

      E pluribus sanguinem
    2. Re:Microcomputers grew up with us. by underqualified · · Score: 1

      also, we were the ones who were different: we were those kids who were fascinated by this new thing. that fascination eventually turned into passion. for kids these days, a computer is as commonplace as a door. the fascination is still there, but no longer as strong. there's no strong desire to find out how it works.

      back when i was still a CS student, i could easily divide the class into two: those who had this passion for programming(self-taught during HS for the most part) and those who were there because they were told that programmers get paid well. guess who shifted after two sems?

    3. Re:Microcomputers grew up with us. by JoeMerchant · · Score: 2

      I "grew up" through the TRS-80 / Apple II era, and I think that the "magic" of BASIC is still accessible on today's machines - sure you can't (easily) program super slick applications in it, but then you never could, even in the old days.

      For me, BASIC was great because it was interpreted, very fast to try something and see what happens. It also had enough "power" in its relatively simple syntax (60 to 70 commands) to do a lot of things without resorting to insanely huge bloated libraries (stdlib/Boost/Qt - I'm thinking about you now...).

      I don't agree with Dijkstra's comment that programmers are "ruined" by BASIC, I think programmers are ruined by too much / too little pressure to deliver working systems in too short / too long a time frame. Teach someone basic and put them in the typical high pressure to deliver quickly scenario and yes, they will fix things quickly with GOTOs - more a result of the schedule than the language. Even worse than fixing things quickly under pressure using a GOTO or two is spending 8 years teaching someone theory, then giving them so much luxury of time to architect and plan and scaffold and framework that they construct elaborate extensible polymorphic frameworks that are universally reusable for practically nothing. I've seen a lot of very ambitious code over the years that can be effectively replaced by something 1/50th the size.

      Procedures are procedures, regardless of the language.

    4. Re:Microcomputers grew up with us. by digitalhermit · · Score: 1

      Today's kids start with computers that are already large systems with complex operating systems, millions of times more memory than we have *disk* when we started, that are difficult to understand at a low level.

      That's a good point, and largely agree that todays systems are more complicated... But there's more to it, I think. Back then, when we played with our Commodore 64s and Atari 800XLs (and Ti 99/4A and CoCos and whatnot), it was easy to fix a problem.. You just rebooted. If you screwed up something by POKEing some reserved area, you just rebooted (well, unless you had a PET and could destroy the machine with an errant POKE).

      It's coming around to that point again. With older systems, and cheaper systems, it's easy to experiment again. I love Linux for this reason.. It does let me poke around in the internals of the OS and break things and fix things... Whether it's mucking around with init scripts or actually rebuilding the kernel, it does bring back that "see what this does" attitude.

    5. Re:Microcomputers grew up with us. by MobileTatsu-NJG · · Score: 2

      Today's kids start with computers that are already large systems with complex operating systems, millions of times more memory than we have *disk* when we started, that are difficult to understand at a low level. I think this puts them at a loss...

      I don't agree. Today's kids are making flash games, putting up websites, making short movies, and a whole slew of stuff they wouldn't have been able to do (or share) when the C64 was king. Now the entry level for doing what it is you specifically want to do with computers which means it's a LOT more accessible to today's youth. That spark of interest is worth a lot more than an understanding of what a pointer is.

      --

      "I like to lick butts!" by MobileTatsu-NJG (#32700246) (Score:5, Informative)

    6. Re:Microcomputers grew up with us. by ziggyzaggy · · Score: 1

      funny, I programmed in Pascal on my microcomputer in the early 80s. BASIC was the shit sandwich choice.

    7. Re:Microcomputers grew up with us. by Billly+Gates · · Score: 1

      Which is why Javascript and html are perfect.

      Microcomputers are old and bulky compared to the sweet Ipad and cell phones that are cool. HTML 5 and AJAX will gradually replace legacy programming languages expect on the bulky old pcs used at offices that use Java and .NET. They are the new mainframe and mainframe terminals of old. Your point helped me come to that conclusion.

      Seriously Basic is so 1985. It is not cool and elite to own a pc anymore and just because you thought it was cool does not mean a child thinks the same today.

      No one writes pc apps anymore.

      People want cool multimedia, sounds, and utilities that utilize the internet on portable devices. Google's api's is what I think about. Getting a child excited about old 8 bit color Apple IIs is like getting us excited about typewritters or steam powered trains. They are old and frighteningly laughable and obsolete.

    8. Re:Microcomputers grew up with us. by ZorinLynx · · Score: 1

      I did too, but I bet your first lines of code were in BASIC. Or LOGO perhaps, depending on how early you started.

      I quickly progressed, first to 6502 assembly, then to compiled languages. But my first introduction to a program was

      10 PRINT "JOHN IS AWESOME"
      20 GOTO 10

      I bet a lot of ours was.

    9. Re:Microcomputers grew up with us. by aliquis · · Score: 1

      I think not. Why should they begin with something which isn't current any longer?

      You can still give simple replies or draw/put up whatever simple graphics, even if you do it through some API which uses windows and what not. For basic system understanding does it really help much if you know how to put out graphics in assembler on an Amiga when you will most likely do it through DirectX or something such nowadays?

      Maybe I'm wrong. Also 4 GB / one million = 4 kB. Did the C64 put everything in RAM and then executed it? Leaving some RAM for data / overwriting things which would later be unnecessary? I had a SVI-728 but i didn't knew much about it and I don't know how much data a few laps of a cassette tape can hold =P. Compared to the 880kB DD disks of the Amiga one million feels like an exaggeration :)

      99% of the RAM is wasted on unimportant stuff anyway ;)

    10. Re:Microcomputers grew up with us. by ziggyzaggy · · Score: 1

      My first lines of code were in ForTran (yup, another shit sandwich) in the 70s, but of course that not on any machine I owned. Yes, played with BASIC a little but didn't care for it, though I did type in some BASIC electronics hobbyist programs from magazines (open source before Bruce and Eric, heh)

    11. Re:Microcomputers grew up with us. by sourcerror · · Score: 2

      They can still program (RISC) microcontrollers in C/assembly. It's much nicer than x86. You can get one for $25 (AVR Butterfly).

    12. Re:Microcomputers grew up with us. by c0lo · · Score: 2

      Or, you know, there's actual emulators such as AppleWin for the ][ series and VICE for the C=64 and its brethren. Also RetroForth.

      Not as an IPhone app, though. And that's the tool I heard the new generation is using.

      --
      Questions raise, answers kill. Raise questions to stay alive.
    13. Re:Microcomputers grew up with us. by mister_dave · · Score: 2

      I rather like The Elements of Computing Systms as an educational tool, you build a computer in an emulator.

    14. Re:Microcomputers grew up with us. by Nyder · · Score: 1

      Those of us who were kids in the 80s and grew up playing on microcomputers with BASIC have a very distinct property:

      We grew up together with computers.

      When we were kids, computers were simple, single-tasking, small memories, and it was easy for a youngster to understand the entire system. As we got older, systems got more complicated, and so did our ability to understand them.

      Today's kids start with computers that are already large systems with complex operating systems, millions of times more memory than we have *disk* when we started, that are difficult to understand at a low level. I think this puts them at a loss. Every child should be able to play with and learn on an Apple II, C64, or similar small system. Of course realistically that won't happen. So emulated "systems" with simple programming languages may indeed be a good idea for today's kids.

      word.

      While I know some assembly, I've wanted to learn it better. So I have been on my Apple IIe. Some peeps I know think i'm crazy, and I should learn in on an x86 system. But I don't know. I'm not learning it to program modern stuff, and you don't hit the metal on PC's today like you did in the 80's. Not to mention Apple II's have a built in monitor (assembly monitor, not crt type monitor), and as the above pointed out, it has little ram and single tasking. Plus I did most my programming in basic on C64's & TRS-80's, so I find it a treat to program stuff on the Apple II.

      --
      Be seeing you...
    15. Re:Microcomputers grew up with us. by MobileTatsu-NJG · · Score: 1

      Making movies, flash games, and websites really doesn't have much to do with programming.

      You should look at what goes into making websites and flash games.

      In any event, most kids aren't doing that. Instead, they are posting Facebook updates and playing X-Box.

      Who cares what the majority is doing? It doesn't matter. What does matter is a lot more are doing it now than they were before. Blimey, I see why you posted anonymously.

      --

      "I like to lick butts!" by MobileTatsu-NJG (#32700246) (Score:5, Informative)

    16. Re:Microcomputers grew up with us. by omnichad · · Score: 1

      Forget emulated - for about the price of a non-grahping calculator, we can manufacture simple tablet machines like that. Put in two or three AA batteries and it will run for 10 hours at 10MHz. Where are they, and can I have one?

  17. Teaching Kids Programming Considered Harmful by the+eric+conspiracy · · Score: 1

    Teach them math and language skills. These are the fundamentals of programming and it is a waste of time to teach programming until these foundations are in place.

    1. Re:Teaching Kids Programming Considered Harmful by Proudrooster · · Score: 1

      This works well for geeks who are interested in programming, but for the general population, it is best to get them immersed and interested first before teaching syntax, grammar, and object oriented programming principles.

    2. Re:Teaching Kids Programming Considered Harmful by Proudrooster · · Score: 1

      I never said it was easier. The logical path does not always work best with humans. Generally speaking, humans are emotional beings and need to connect with something before they invest or connect with it.

      Even the Head First books get you up and running in Chapter 1/Day 1. If Chapter 1 were a quick review of Algebra, followed by Chapter 2 a quick review of Discrete Mathematics, followed by Chapter 3 a quick review of Logic, followed by Chapter 4 Proper Object Oriented Design, followed by Chapter 5 Design Patterns most kids would drop the course somewhere between Chapter 1 and Chapter 2.

      If programming were a high school graduation requirement or tested on the ACT it could be structured differently like Physics or Chemistry. Unfortunately the USA does not seem to care about computer programming and the course is generally treated as an elective and if you are lucky, really lucky, the computer teacher will inspire you and teach you programming. Hopefully, they will start with Alice move to Java and then onto LeJos on a Lego NXT brick. Then in semester #2 move on to html, php, databases, and operating system basics.

    3. Re:Teaching Kids Programming Considered Harmful by syousef · · Score: 1

      This works well for geeks who are interested in programming, but for the general population, it is best to get them immersed and interested first before teaching syntax, grammar, and object oriented programming principles.

      If you aren't interested in programming, and you don't have a burning need to program, you're not going to learn it. EVER. Getting someone interested only works if they're open to being interested.

      --
      These posts express my own personal views, not those of my employer
    4. Re:Teaching Kids Programming Considered Harmful by crazycheetah · · Score: 1

      I can agree with you, but I learned those fundamentals of programming (more so the math) through programming. Then it all came up in school, and I was left looking around at my classmates wondering how the hell they were struggling so much with it--it was second nature to me by that time.

      I'm not particularly normal, but I think it varies by person. A lot of people will do better by learning those fundamentals first, but some people can learn those fundamentals better by just being thrown into it. The day that those are both catered to outside of the likes of me just getting curious and teaching ourselves is a day that I dream of...

    5. Re:Teaching Kids Programming Considered Harmful by Abstrackt · · Score: 1

      Yikes, that just sounds depressing.... What's wrong with letting kids figure it out on their own? You know what got me into programming? Logo. You feed commands to a turtle and stuff happens. After a while, I developed an interest in queuing those commands up which eventually led to learning to write code. If a kid is motivated enough they'll pick up what they need to.

      --
      They say a little knowledge is a dangerous thing, but it's not one half so bad as a lot of ignorance. - Terry Pratchett
    6. Re:Teaching Kids Programming Considered Harmful by MobileTatsu-NJG · · Score: 1

      Teach them math and language skills. These are the fundamentals of programming and it is a waste of time to teach programming until these foundations are in place.

      This is not a one-size-fits-all solution. Some, like me, may find that programming can cause an interest in developing math or language skills. What's the big question whining youngsters have about math in high school? "How am I going to use this in the real world?"

      --

      "I like to lick butts!" by MobileTatsu-NJG (#32700246) (Score:5, Informative)

    7. Re:Teaching Kids Programming Considered Harmful by Bengie · · Score: 1

      You don't "wow" kids to get good programmers. Good programmers instinctively flock to computers.

      Anyone who likes to solve problems, can break a problem down step-by-step, and has a basic(no pun) grasp of Algebra will make a decent programmer.

      When I went to college, there were two types of programmers: 1) Those that spent 4 days on a project to get an A, because they thought programming was cool or was easy money; 2) and those that spent 2 hours on a project to get an A-, because they love to solve problems.

    8. Re:Teaching Kids Programming Considered Harmful by SharpFang · · Score: 1

      Actually, programming for fun can vastly improve your ability to learn maths, and the unforgiving syntax teaches diligence in correct spelling.

      Many years before I learned the circle equation and trigonometry at school, I was already drawing sines, circles and Lissajous shapes on Atari.

      --
      45 5F E1 04 22 CA 29 C4 93 3F 95 05 2B 79 2A B2
  18. sys 64738, peek, & poke won't work but GOTO wo by Proudrooster · · Score: 1

    Pretty cool little Commodore 64 emulator but the peek, poke, and sys commands have yet to be implemented. Luckily the GOTO command was implemented. The Java and OOP Nazis have been trying to kill GOTO for years and I am glad to see that it is still alive and well for future generations of programmers to enjoy.

    If you are new to basic try this little program...

    10 ? 'HELLO WORLD'
    20 GOTO 10

  19. Re:BASIC by buddyglass · · Score: 1

    1 NEW

  20. Re:Why I Use Basic by Haffner · · Score: 2

    Dear FBI, please stop by sometime later this week. As you can see, I am at home at 7:12pm CST. Thanks!

    FTFY

    --
    "Going to war without the French is like going deer hunting without your accordion." ~General Norman Schwarzkopf
  21. Re:sys 64738, peek, & poke won't work but GOTO by robbak · · Score: 1

    loop while( true )
              screen.print( "Hello World" );

    --
    Prediction for end of Universe #42: Fencepost error in Quantum_bogosort.cpp
  22. Why Not Python? by chromatic · · Score: 1

    Personally, I'd recommend Python as a starting language...

    I might, if there were a simple, cross-platform, one-click-install download bundle for all of the major operating systems which included pygame and a decent IDE, and even then I'd target motivated 13 year olds as the youngest users.

    If I were trying to teach motivated ten year olds in person, I might choose Python/pygame as well.

    That's not our goal, though. We're trying to help motivated eight year olds discover the joy of programming as a means of using computers as creative tools, not to produce millions of practical programmers.

    1. Re:Why Not Python? by shutdown+-p+now · · Score: 1

      I might, if there were a simple, cross-platform, one-click-install download bundle for all of the major operating systems which included pygame and a decent IDE, and even then I'd target motivated 13 year olds as the youngest users.

      Well, why not create just that?

    2. Re:Why Not Python? by chromatic · · Score: 1

      That's a lot more development work for little (or no) benefit. We don't want to bundle Python. We want to teach kids to create things with computers.

    3. Re:Why Not Python? by SoftwareArtist · · Score: 1

      The younger the target audience, the more important it is to have a simple, well designed language. If you're claiming that line numbers make a language easier for kids to learn, you clearly have something you're trying to sell me. Which, curiously enough, you do.

      --
      "I'm too busy to research this and form an educated opinion, but I do have time to tell everyone my uninformed opinion."
    4. Re:Why Not Python? by chromatic · · Score: 1

      Try it yourself. Find a smart eight year old, then ask her to make a list of instructions for a task with obvious multi-step loops.

    5. Re:Why Not Python? by digitig · · Score: 1

      Then show them how to implement what they've written as a DSL in Boo...

      I'll get my coat.

      --
      Quidnam Latine loqui modo coepi?
    6. Re:Why Not Python? by JustSomeProgrammer · · Score: 1

      I taught myself BASIC at 6 years old. I was looking for simple step 1 step 2 step 3 concepts. BASIC actually helped me learn at a really young age with the line numbers because it gave me a very concrete "Do this, then this, then this" type logic structure. I didn't use all the features of BASIC for those first few programs like no subroutines or anything like that. It was just a straight up step 1 2 3 goto step 2 type program. It really got me interested and as I learned more I wanted to do more. Eventually the line numbers became a hindrance, but in the beginning at a very young age to start programming it was exactly what I needed to get my foot in the door with 0 help or instruction beyond a guide for syntax.

      I agree that line numbers aren't needed for anyone learning with instruction or looking to do something useful, but for a hit the floor running figure this out... I don't know that they are a bad thing.

  23. "How can we teach kids how to program?" by underqualified · · Score: 5, Interesting

    the correct question would be...

    how do we get our kids interested in learning how to program?

    and the answer to that would be...

    tell them they're not allowed to do it.

  24. Re:Why I Use Basic by Snarf+You · · Score: 1

    Sounds to me like he should only be allowed to teach eunuchs.

  25. Re:sys 64738, peek, & poke won't work but GOTO by Proudrooster · · Score: 1

    Error: While is a word reserved for future use.

    Looks like that is on the to be implemented list as well, but GOTO works :)

  26. I completely agree with Edsger W.Dijkstra by McNihil · · Score: 1

    "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
    - Edsger W.Dijkstra

    There might be hope for subjects that started using "gosub" without ever using "goto" but I have never seen anyone having done that.

    But then again IMHO today's html/javascript is one form of modern spaghetti code too so maybe BASIC should be taught because of that.

    1. Re:I completely agree with Edsger W.Dijkstra by volkerdi · · Score: 4, Insightful

      Famous quote, but nonsense. In many ways, trying to build large BASIC programs and ending up with unmaintainable spaghetti code is one of the most valuable lessons a programmer can learn.

    2. Re:I completely agree with Edsger W.Dijkstra by catbutt · · Score: 1

      If your teaching style is to frustrate your students, rather than get them doing something fun and satisfying as quickly as possible.

    3. Re:I completely agree with Edsger W.Dijkstra by kenh · · Score: 2

      Your right, programmers should always work in confined, carefully-constructed environment where there is no possibility of a program getting too large or too confusing - that will certainly prepare them for their first programming job - maintaining legacy spaghetti code, likely written in a "dead" language running on "archaic" hardware...

      --
      Ken
    4. Re:I completely agree with Edsger W.Dijkstra by mypalmike · · Score: 1

      Many of the best programmers I have worked with over the years started with old-school BASIC at a young age. The simplicity of having every variable being global and having control flow explicit with line numbers makes it easy to become quickly confident and competent at some of the basic tools every good programmer needs. After that, it's a bit of a leap to get to procedural programming, but I've known many who have done it without much fuss. On the other hand, I've seen many college students utterly fail to make the much larger leap from knowing nothing about programming to being taught a language like C, where you can't write reasonable code without understanding the call stack, memory allocation, etc.

      --
      There are 0x40000000 types of people: those who understand 32-bit IEEE 754 floating point, and those who don't.
    5. Re:I completely agree with Edsger W.Dijkstra by c0lo · · Score: 1

      If your teaching style is to frustrate your students, rather than get them doing something fun and satisfying as quickly as possible.

      Since when programming and software engineering is supposed to be fun and satisfying as quick as possible? If that's the goal of your students, why don't they teach marketing, sales and advertisement (like... have fun deceiving your potential customers. If it doesn't work with some of them, move quickly along, you are bound to find others. Better still... pays more than anything related with engineering or science).

      --
      Questions raise, answers kill. Raise questions to stay alive.
    6. Re:I completely agree with Edsger W.Dijkstra by mevets · · Score: 1

      Agreed! BASIC becomes so cumbersome, when you step up to the next level, the reasons for better organization don't need to be explained.

      FORTRAN (my first), for example, sucked for all that incomprehensible gibberish you had to add, just to do nothing; never mind the JCL wrapper.

      PL/I (my second) was worse - although you could understand the silliness 'sin(x) = y;' its endless desire to please grew quickly tiresome.

      After being whipped by a Swiss dominatrix pretending to be a Pascal compiler; C was like a godsend.

      C remains a godsend, despite its bastard offspring (c++, java, or the insane gcc-extentions).

      Simple, clean and expressive goes a long way.
      But without suffering through BASIC, FORTRAN, PL/I and Pascal; I never would have appreciated it.

    7. Re:I completely agree with Edsger W.Dijkstra by narcc · · Score: 1

      Dijkstra was dead wrong on that (as is evident by the millions of programmers who learned BASIC on their micros in the 80's) -- He was just hating on BASIC without reason. (Really, he never gave a reason for his anti-basic screed in that speech.)

      Now, you seem to be under the impression that he was railing against GOTO (he wasn't) -- you're thinking of Niklaus Wirth (who made up the "GOTO considered harmful" title to a Dijkstra letter --which Dijkstra took exception to! Read the original letter it's more about misuse of goto in structured languages than anything else.)

      I challenge anyone spreading the "BASIC is the suck" or "BASIC will destroy your brain" meme to offer a legitimate reason for their beliefs. (None of this "it teaches you bad habits" rhetorical nonsense. If that's your reason, you've got to list those "bad habits" and explain how BASIC forces or encourages you to adopt them.)

      So far, no one has tried. It seems that no one has ever bothered to justify their irrational belief.

    8. Re:I completely agree with Edsger W.Dijkstra by Viol8 · · Score: 1

      Agreed. The Anti BASIC argument is nothing more than unsubstantiated group-think that allows arrogrant language snobs to have a good laugh together.

    9. Re:I completely agree with Edsger W.Dijkstra by avandesande · · Score: 1

      The lesson that knowledge of a language can be discarded and replaced by better things is a good one too.

      --
      love is just extroverted narcissism
  27. "computer programming" is not "logic" by rbrander · · Score: 5, Insightful

    You can teach people logic statements and procedures and about objects, even - with ENGLISH.

    In my grade 8 class, there were no computers except the ones at the University I was by then programming with punch cards using stolen student accounts. But the math teacher asked us to write out our procedure for tying our shoes - in precise, motion-by-motion detail so another student could do it exactly the same way as we did, without help. Most people required over a page, and it was a revelation how excruciating it was. Later, in CompSci 501, I learned about logic statements and predicates and the wonderful Lewis Carrol problems ( 1: All my turtles that are not green are old....) All English.

    "Computer Programming" on the other hand, is about making computers do things for you. By hook or by crook, by object or procedure, just get 'er done. I completely agree with the language snobs and detest BASIC. And I do most of my programming in it because you can make Excel about 10X more useful with just a little VBA here and there.

    Learning Python or Java is just great if you plan to be a professional programmer one day, those languages can solve very large problems without the codebase becoming unmanageable. If your problem is getting a bunch of kids excited about what computers can do, you have no choice but to use whichever language will produce results with the greatest WOW factor with the shortest learning time.

    That cuts out ALL verbose languages, languages that demand typing. The "Hello world" program should be one statement long.

    Notice that doesn't chop out Perl or Python. But also notice that at kid-levels, those languages can only take screen input and produce text output. That was cool for me in the 1970's but I think today you'll get better results with something that can go graphical right away. (This also just cut out your original BASIC).

    So, if your school has MS-Office on every machine, well, as a FLOSS fan I hate you, but you're crazy if you don't leverage the presence of VBA. You can show them what cool stuff a computer can do with Excel alone, show them some formulas in action and all that. (This, by the way, keeps them from thinking of "computer programming" as necessarily procedural right there - clearly, you are instructing the computer, but you are NOT using a procedure, just setting up conditions for behaviour of the cell objects!)

    Then show them procedural programming by modifying the spreadsheet with VBA. This can lead quickly to manipulating the Excel data structure, which is a huge collection of objects with properties and methods. Many can manipulate charts in pretty ways, or turn Excel into "graph paper" with coloured cells in funny shapes, like ASCII art. You can take it all the way to them inventing their own objects in VBA.

    AND: It will be useful in a job, even if they only learn to write 10-liners. Bonus.

    1. Re:"computer programming" is not "logic" by tepples · · Score: 1

      You can teach people logic statements and procedures and about objects, even - with ENGLISH.

      I didn't know Pick OS was still around.

      I think today you'll get better results with something that can go graphical right away. (This also just cut out your original BASIC).

      Then the answer might be to make some sort of dumbed-down sprite graphics library on top of Pygame.

    2. Re:"computer programming" is not "logic" by chichilalescu · · Score: 1

      Python (and I assume Perl) can go graphical right away if you set them up to use gnuplot properly.
      I have to make a lot of figures for my work, and I wrote myself a subroutine that calls gnuplot to create an eps directly from Python; for a generic problem, it's trivial to set it up that you compile a full LaTeX document, describing some problem and a resulting graph. And you can just show kids the details if they want them, but they wouldn't need all of them.

      As far as algorithms go... I would just have a class on Rubik's cube (the 2^3 version). That's enough for the base concepts, and kids should be able to understand it before they're 10.

      --
      new sig
    3. Re:"computer programming" is not "logic" by datSilencer · · Score: 1

      No offense man, but really, I would be more inclined to get kids started with something like Python (as suggested somewhere above). The reason being that, in some jobs I've been, I've seen unlucky co workers inheriting VBA code base abominations which were born inside Excel. Code base abominations of course, can manifest in every language, but I've seen them more frequently in the VBA + Excel combination. My point is that they should also learn that with great power comes... you know :P... great responsibility. Cheers.

  28. Re:BASIC by Anonymous Coward · · Score: 1

    No,
    10 print "fuck you ";
    20 goto 10

    At Radioshack, Sears, Wards, and anywhere hobby computers were sold.

  29. Yes, Python :) by kripkenstein · · Score: 2

    Personally, I'd recommend Python as a starting language...

    I might, if there were a simple, cross-platform, one-click-install download bundle for all of the major operating systems which included pygame and a decent IDE, and even then I'd target motivated 13 year olds as the youngest users.

    You can run Python directly in the browser - no need for installs at all. In fact one of the motivations for getting CPython working in JavaScript was for things like this. (Note: It doesn't work perfectly yet, but all the hard work is already done.)

    For a basic IDE, that demo includes Skywriter. Integrating some additional features like load/save etc. would make it very usable I think.

    Regarding pygame: It would be possible to get something like that working in the browser, targeting an HTML canvas element. See this demo for C++ code written against SDL, compiled into JavaScript and an SDL implementation that targets a canvas.

    1. Re:Yes, Python :) by chromatic · · Score: 1

      I agree that it's possible, but we decided that rather than producing a stripped-down version of Python or Scheme or Smalltalk which runs client-side in the browser and includes graphics primitives, we'd enhance a simpler language designed for teaching. Remember, we're not trying to produce professional programmers. We're trying to produce people who see computers as tools which they can use to create, not just consume.

    2. Re:Yes, Python :) by SoftwareArtist · · Score: 1

      Processing is also available in a version that runs directly in the browser: http://processingjs.org/

      --
      "I'm too busy to research this and form an educated opinion, but I do have time to tell everyone my uninformed opinion."
    3. Re:Yes, Python :) by TheRaven64 · · Score: 1

      The VPRI guys already have a version of Smalltalk that runs in a browser. Some guys at Sun already ported the Squeak Morphic UI (originally from Self) to JavaScript.

      --
      I am TheRaven on Soylent News
    4. Re:Yes, Python :) by chromatic · · Score: 1

      Thanks, I'll take a look at the VPRI project. That's very tempting.

  30. How to teach programming by QuoteMstr · · Score: 4, Interesting

    When teaching students how to program (which is entirely different from teaching them computer science), you should begin with the most fundamental concepts: talk about raw memory and opcodes. Discuss briefly how these instructions are actually interpreted and implemented (how a half-adder works is fascinating, even if most people never have to build one in real life).

    Once your students understand how to make computers do basic things with raw instructions, teach them jumps, conditionals, loops, and even subroutines. After that, introduce higher-level languages and compilers, and demonstrate that the compiler merely automates what your students have already been doing. From there, teach progressively higher-level constructs, including second-order function references, data structures, and so on. Object-orientation falls out naturally once you get to structures and function pointers.

    If you follow this approach, your students will have an understanding of the entire abstraction hierarchy, which is not only of immensely practical value, but also underscores the principle that nothing in this field is "magical". You can always pierce an abstraction, and even more importantly, erect new abstractions where appropriate. The most common flaw I find in programmers is the inability or unwillingness to build new abstractions. The only way we make progress in this field is by the old reductionist approach of breaking a hard problem into smaller parts and attacking each individually. When you teach your students how to do that by demonstrating the power of abstraction, you make them better programmers.

    Programmers shown UML, Java class graphs, and so on right away become too familiar with that level of abstraction. They think of lower levels as some kind of magic and don't realize they can and should build their own levels on top of what they're given. The result is often incoherent, rambling, brittle, and ugly code. Don't let that happen.

    1. Re:How to teach programming by EvanED · · Score: 2

      I have given this a lot of thought over the years (I'm not in a position to actually test the hypotheses, so I don't have empirical evidence to support my position) and I understand where you are coming from. (There was a /. post a long time ago about this book and I think it's a really interesting approach.)

      That said, I think in general it would fail miserably. There are a bunch of drawbacks. First, if you write in assembly you are basically completely tied to a particular platform. If you use a higher-level language -- even just bumping it up to C -- then the students have the freedom to use "whatever" they want. Your lab computers have Linux and they have Windows? No good if you teach assembly. Your lab has Windows and they have OS X? No good. Your lab has recent Apples and they have an old G5? No good. Want to allow them to work on their choice of platform? Have fun grading. Logistically, this is very difficult. (C isn't perfect in this regard -- but it is pretty darn close compared to assembly if you stay away from C99-specific features.)

      The second problem is more pedagogical. If the students aren't actually interested in learning, they aren't going to learn. And I think it'd be much easier to get most of them interested if they can actually program something that is useful and/or cool. You can spout off all you want about how "why we're doing all this will make sense in a year or two" and it won't help. Programs that are one of those two things are usually at least mildly complex, and thus the low-levelness of asm would be a true hindrance in achieving that goal.

      Personally, I think you'd have far more success (in terms of both students continuing through the curriculum and in terms of understanding of the material) if you approached the material you suggest in the opposite order: start out with a language that is actually reasonable to use for creating neat stuff, show them how to create neat stuff, then gradually unroll the layers.

    2. Re:How to teach programming by FrootLoops · · Score: 2

      In one of my CS classes, the instructors made their own cut-down version of assembly and gave us an interpreter written in Java, for cross-platform compatibility I assume.

      I think the parent and grandparent posts are targeting different audiences. The parent is trying to interest people in CS, while the grandparent is dealing with people who are already interested. People who are already interested, realistically, will mostly have computer experience--sometimes very significant experience. Because of that the ground up approach might get a bit pedantic for that audience.

      My CS program followed the sequence (in order) of "let's learn Python!", "let's dabble in Java, Scheme, and basic algorithms!", "now let's get serious and do some C++ with lots of data structures", "go learn about the low-level hardware you've been using", "zoom wayyy out and learn about basic hardcore theoretical cs", "*elective time!*". I'd say it was actually pretty effective. It stimulated interest early for a long trek through more tedious low level material later. Then again, it also showed me how much I don't want programming to be my life's work, and how happy I am to also have a math degree.

    3. Re:How to teach programming by DerekLyons · · Score: 2

      If you follow this approach, your students will have an understanding of the entire abstraction hierarchy, which is not only of immensely practical value, but also underscores the principle that nothing in this field is "magical".

      Those students who don't run screaming into the night or aren't bored into a zombie state, sure. But that won't be many.
       

      The only way we make progress in this field is by the old reductionist approach of breaking a hard problem into smaller parts and attacking each individually. When you teach your students how to do that by demonstrating the power of abstraction, you make them better programmers.

      You won't teach them how to do that with the method you propose - which does the exact opposite, it takes smaller parts and incomprehensibly links them into bigger parts then discards the bigger parts for a new set of smaller parts and repeats the process.

    4. Re:How to teach programming by LordNacho · · Score: 1

      While computers have a traceable abstraction hierarchy from transistors and up, is that really the best way to teach stuff? The point of each abstraction is (partly) to hide the underlying layer. Aren't we better off starting at the top, and diving down as we become more curious? While you're right that building your own abstraction is necessary for programming, wouldn't you say the students ought to have a look at how others have built the underlying layers in the first place?

    5. Re:How to teach programming by jeffliott · · Score: 1

      Lets face it - not every future programmer is cut out for that level of understanding. Those who need it, will learn it. Those who don't can safely ignore it. Teaching as you say would waste a great deal of time for the bulk of future programmers who will probably end up working in higher level languages for their entire careers.

    6. Re:How to teach programming by Veretax · · Score: 1

      This is pretty similar to what I went through.

      Early on I learned TI Basic, then C64 Basic, then IBM Basic, they were all similar but were different contexts and quirks at times. Then when I got into Engineering, we learned C (In Borland Environment), and MATLAB. MATLAB was cool for being able to do a certain set of problems, but beyond our signals and processing class I have never used it since. Then we started taking CS classes where they taught you Ada, then later Data Structures with Ada, then another class on C on a *ix system learning about multi processing etc. I didn't really get into true C++ until I got my first professional job, and Java I picked up a book to learn a bit about it, but hardly use it. Now I dabble in C#, VB, VBA, PHP, etc. So I disagree that Basic kills you, but I do think given environments today, a safer environment to learn, might be best especially for young coders.

  31. Get them going first by Goboxer · · Score: 1

    Perhaps the reason we start at a higher level than BASIC is because we want the kids to get in there and start going first. A hello world program is pretty exciting. But if it takes you a shit ton of time to make it happen you aren't going to capture the attentions. A simple program should be simple. I know I found the underlying structure and commands a hell of a lot more interesting once I saw what their higher level counter-parts could do.

  32. Depends on which version of BASIC by pedantic+bore · · Score: 1

    The answer to "Why teach programming with BASIC?" depends on which language called BASIC you mean, and the answers vary from "You don't know better" to "You want to teach them how to write quick one-off VBA macros, not to program" to "You passionately hate your students."

    Assuming that you want to teach them to program, use a language that incorporates some modern language features and gives them room to grow, but has enough in terms of training wheels that they aren't distracted or frustrated by unnecessary trivia. Python, Ruby, maybe C#.

    --
    Am I part of the core demographic for Swedish Fish?
  33. Re:BASIC by forkfail · · Score: 1

    *peeks at the comment*

    *finds nothing to poke*

    /dated

    --
    Check your premises.
  34. Learning BASIC led me to a CS degree by t'mbert · · Score: 2

    I learned to program in BASIC, on an Apple ][+, back in the early 80's when I was 10 or 11. I loved it, but I started wondering how programs like word processors could access a large document in RAM, and work with files bigger than available memory, and other mysteries...which led me to learn C (with a classic Borland C compiler) at 15, and eventually to a CS degree.

    In my case, BASIC (and I did LOGO too) didn't ruin me, it made me more curious and moved me into the more complex languages. When I got to college, data structures class was a piece of cake, as I'd already done linked lists and other structures while learning C, and I could easily deal with pointers and pointer arithmetic, multiple indirection, function pointers, and more. I feel a debt of gratitude to the humble BASIC language.

    Just a couple weeks ago, I started teaching my son Apple BASIC from a web-based Apple BASIC emulator, hoping that he'll be as excited about programming as I was.

  35. Beginners All-purpose Symbolic Instruction Code by meerling · · Score: 1

    Gee, you might think that name stood for something... I heard about it many many years ago. Some programmer wrote it to be easy for newbs to learn to program with... Now what was it...

    Oh yes, I remember now! Basic!

    Sarcasm aside, Basic is an acronym for Beginners All-purpose Symbolic Instruction Code, and yes, it was written to be used in teaching newcomers how to program, so it's absolutely no surprise that some people have found it useful for that purpose. (It's about as surprising as finding out that snakes slither...)

  36. Scratch by gmuslera · · Score: 3, Informative

    When i first saw Scratch, included with the XO, got stunned on how powerful it was, and how visual and intuitivel could be for the children. Not sure if there is a web based implementation, but is open, available for all platforms, and maybe more important, already included in a computer meant for children (not sure how much it count in the rest of the world, but in my country almost all school chidren have it).

    1. Re:Scratch by cacba · · Score: 2

      The android app inventor is web based version of scratch for android.

      Not written from chrome.

    2. Re:Scratch by DrugCheese · · Score: 2

      Yeah me and my son spent countless hours playing around and laughing over the crazy things we were able to do with scratch. Fun to learn programming and foster creativity.

      --
      *DrugCheese rants*
    3. Re:Scratch by Anonymous Coward · · Score: 2, Interesting

      Second this. Scratch IS for the current generation what basic was to us. It is simple enough for a four-year-old to understand (and actually make functional games with), and yet deep enough to do real time ray tracing (for sufficient relaxed definitions of real time). Anyone who has not tried scratch needs to do so. RIGHT NOW. No there is not a web based application, but it does run on LINUX, and features the ability to convert your creation to java and upload them to the scratch website.

  37. Re:BASIC by bmo · · Score: 2, Insightful

    10 INPUT "Who is poster?";A$
    20 IF A$="plover" PRINT $A;" is a jerk" else 30
    30 PRINT A$;" is not a jerk"

    There are literally millions of programmers that cut their teeth on little 16K machines with basic in ROM. It stopped nobody from going on to OO languages. Dykstra was wrong.

    --
    BMO

  38. Re:Use C# by shutdown+-p+now · · Score: 4, Insightful

    C# forces one to think in OOP terms - you can't write a hello world app without "class" in it. Now learning OOP is definitely the important part, but it's not the one that should come first - before that, one has to understand the basic blocks of algorithms. Conditionals, loops, recursion - that kind of thing. A language that lets you deal with those without bringing any unnecessary stuff into picture is the language you want to use for teaching programming. BASIC is one such language. C# is not.

  39. Re:BASIC by iluvcapra · · Score: 2

    Dykstra was wrong.

    I suspect a lot of people, maybe not Dykstra, would point to the failure of Lisps to take hold in the marketplace as evidence that Basic has corrupted minds.

    --
    Don't blame me, I voted for Baltar.
  40. Why not? by drolli · · Score: 1

    Kids are Kids. They should play. The more they play the better. They can learn basic first, then the others.

    While i personally always would use an opamp at work to build a precision measurement amplifier, if i had a kid i would start to teach them electronics by building a simple amplifier using one transistor or two.

  41. pascal by smash · · Score: 3, Informative

    I've got a big soft spot for pascal. I started wtih basic, and then LOGO (home computer had basic, then logo in school as a kid), but Pascal was the first useful language that actually taught me about data types, functions, and later, object oriented programming (TPv6).

    Its easy to read, not prone to bugs like using = when you mean == (in C), and fast enough to get useful stuff done.

    Problem with programming these days is that to get anything useful done you're buried under a hundred layers of toolkits and abstraction from what is actually going on.

    Give kids an old PC with a copy of DOS, turbo pascal and some basic instructions on VGA mode 0x13 and you can write fun stuff pretty quickly.

    --
    I run: Windows, OS X, Linux, FreeBSD. Just because you have a hammer, doesn't mean everything is a nail.
    1. Re:pascal by A+Friendly+Troll · · Score: 1

      Give kids an old PC with a copy of DOS, turbo pascal and some basic instructions on VGA mode 0x13 and you can write fun stuff pretty quickly.

      One of the great things about Pascal 15-20 years ago was that it ran like lightning. Those were still the days of old 286-386 machines with slow hard drives, and when you compared Turbo/Borland Pascal/C++, the difference in getting your program to run was just HUGE.

      In TP/BP, you'd press Ctrl+F9, and your program would be running in a second.

      In TC/BC, you'd press Ctrl+F9, and wait for half a minute until the compiler and the linker did their job.

      Now, when you're a kid, and when you make tons of programming errors, the speed difference is very, very important. In the classroom as well.

      I actually learned C first and then switched to Pascal because I had a shit PC. Never really regretted it. Later on, in Windows, we got Delphi, which was a truly incredible development environment. Ah, the memories...

      These days I'm doing VB.NET development (though I'm proficient in C#), as I've grown accustomed to language verbosity and words instead of symbols. It just reads better in my mind.

  42. VB.NET by tepples · · Score: 2

    However the statement that "Programmers who've learnt BASIC tend to be harder to retrain in a modern object oriented language" requires statistical study.

    Is C# "a modern object oriented language"? If so, then there's a dialect of BASIC that requires little or no retraining because it's functionally equivalent to C#, just with different syntax. It's called Visual Basic, and it's part of Microsoft Visual Studio Express.

    1. Re:VB.NET by FrootLoops · · Score: 2

      VB.NET is a dialect of BASIC in much the same way English is a dialect of Old English--that is, the names are similar.

    2. Re:VB.NET by syousef · · Score: 1

      VB.NOT is not traditional basic. VB6 was much closer, but even that was a huge departure.

      --
      These posts express my own personal views, not those of my employer
    3. Re:VB.NET by Joce640k · · Score: 1

      Go read the daily WTF for a while...

      Some people think that programming OUGHT to have high barriers to entry.

      --
      No sig today...
    4. Re:VB.NET by DJRumpy · · Score: 1

      The basic foundation of the language is the same, although of course VB is decades newer and therefore uses more complex methods and properties. I just don't understand this concept that someone who was taught basic (ala 1980's basic) can't learn OOP. It assumes that the programming language is somehow burned into your thought processes to such an extent that you can no longer think 'outside the box', which is patently ridiculous.

      Every language I work with has core concepts based in old Basic to some extent. That doesn't mean I can't take the leap from line numbers to object models.

    5. Re:VB.NET by FrootLoops · · Score: 1

      I'd say the "basic foundation" of VB.NET is OOP and interaction with a GUI. I guess both '80's BASIC and VB.NET are imperative languages instead of a functional language like Lisp or weirder languages like Prolog, but still, I don't see how they're similar in any other meaningful way....

      But I agree, BASIC hate is kinda like MS hate in that it's socially convenient for nerds to do so, above and beyond whatever reasoning there might be to back up that hate.

  43. Re:BASIC by smash · · Score: 1
    in hex editor
    1. cd 20h
    2. write to x.com
    3. insert into autoexec.bat
    --
    I run: Windows, OS X, Linux, FreeBSD. Just because you have a hammer, doesn't mean everything is a nail.
  44. Re:BASIC by smash · · Score: 1

    uh... cd 20h = 0xcd 0x20, i mean.

    --
    I run: Windows, OS X, Linux, FreeBSD. Just because you have a hammer, doesn't mean everything is a nail.
  45. Re:BASIC by simcop2387 · · Score: 1

    0x19 was more fun.

  46. Classic 8-bit micros' ROMs are copyrighted by tepples · · Score: 1

    Or, you know, there's actual emulators such as AppleWin for the ][ series

    How did the author of AppleWin get the right to redistribute the Apple IIe's copyrighted ROM?

    1. Re:Classic 8-bit micros' ROMs are copyrighted by 0123456 · · Score: 1

      I believe the Sinclair ROMs have officially been released for emulator use. No idea about Apple but I'd be surprised if they had done the same.

    2. Re:Classic 8-bit micros' ROMs are copyrighted by Nimey · · Score: 1

      Beats me. Maybe Apple released them gratis like they did some of their older software, like System 6 for the //gs and Mac System 7.

      --
      Hail Eris, full of mischief...

      E pluribus sanguinem
    3. Re:Classic 8-bit micros' ROMs are copyrighted by Rockoon · · Score: 2

      How did the author of AppleWin get the right to redistribute the Apple IIe's copyrighted ROM?

      I don't think that Microsoft protects this copyright.

      (What... you didn't know?)

      --
      "His name was James Damore."
    4. Re:Classic 8-bit micros' ROMs are copyrighted by tepples · · Score: 1

      How did the author of AppleWin get the right to redistribute the Apple IIe's copyrighted ROM?

      I don't think that Microsoft protects this copyright.

      Only 83 percent of the Apple II Plus ROM ("Applesoft BASIC", $D000-$F7FF) is Microsoft's work. The rest ("Monitor", $F800-$FFFF) is Apple's. There are a few more pieces of Apple's work (such as "Mini-Assembler") in the enhanced Apple IIe ROM.

    5. Re:Classic 8-bit micros' ROMs are copyrighted by Nyder · · Score: 1

      Or, you know, there's actual emulators such as AppleWin for the ][ series

      How did the author of AppleWin get the right to redistribute the Apple IIe's copyrighted ROM?

      Who cares?

      Modern Apple can screw itself over how they treated the Apple II's.

      And those that mod me as a troll don't know the history of Apple.

      --
      Be seeing you...
    6. Re:Classic 8-bit micros' ROMs are copyrighted by tepples · · Score: 1

      How did the author of AppleWin get the right to redistribute the Apple IIe's copyrighted ROM?

      Who cares?

      A school system that wants to distribute copies of AppleWin to its students and doesn't want to get sued cares.

    7. Re:Classic 8-bit micros' ROMs are copyrighted by Nimey · · Score: 1

      It's distributed under the GPL and there are no ROM files, as such, included with it.

      Back in the day, Apple was really open about their design; they'd even post ROM listings. With all that information, perhaps the project reverse-engineered the ROMs, or Apple was cool with them including 30-year-old software that they had no hope of making a single dollar on ever again.

      I very much doubt your putative school district would have anything to worry about. Further, I doubt they'd go to the trouble of using an emulator; more likely they'd teach the kids Visual Basic or AppleScript or Python.

      Let's not kid ourselves: old line-number BASIC without any sort of proper text editor is a nasty and frustrating way to learn programming. I was there.

      --
      Hail Eris, full of mischief...

      E pluribus sanguinem
  47. Re:Use C# by togofspookware · · Score: 3, Informative

    I thought he was making fun of reporters when they try to talk about computers.

    --
    Duct tape, XML, democracy: Not doing the job? Use more.
  48. simple rules of first programming languages by RichMan · · Score: 1

    1) no type declarations
          - it gets in the way of learning how to do stuff
    2) interactive command line
          - you need to be able to see the variables and change them
          - edit run debug is part of the learning process we don't want them separated yet
    3) persistent environment
          - being able to interact with the variable and program set is part of the learning process

    Suitable base types: basic, logo, lisp, matlab/octave

    I would really suggest Matlab/Octave for high school math.

    For those that hate basic because of the lack of structure, use COMAL. Similar substitutions may be made for the other languages.

    (smash (1351))
    >> Problem with programming these days is that to get anything useful done you're buried under a hundred layers of toolkits and abstraction from what is actually going on.

  49. Anyone looked at BASIC since line numbers went? by Invisible+Now · · Score: 3, Insightful

    Line numbers and gosub/goto s haven't been used since the mid80s.

    Ever program with a VBA object model, using Intellisense prompting? Name a better, more complete, and useful IDE environment...

    Count curly brackets all you want. Regard semicolons as essential. But you can't craft code that reads like simple English in any other language. Well named objects only make BASIC better.

    BASIC is like the O'Reilly cover that was chosen for it: A big friendly St. Bernard or a language.

    If you haven't built dozens of useful, maintainable, systems quickly, with small teams, maybe you should keep an open mind...?

    --

    "Knowing everything doesn't help..."

    1. Re:Anyone looked at BASIC since line numbers went? by thethibs · · Score: 1

      It's not a St.Bernard, It's a Newfie.

      --
      I'm a Programmer. That's one level above Software Engineer and one level below Engineer.
    2. Re:Anyone looked at BASIC since line numbers went? by backwardMechanic · · Score: 1

      I have to script in VBA for a large commercial package I use. It's like a bad trip back to the 80s. I knew things were going to be fun when I discovered that the square root function is called sqr().

      My favourite part is the 'object oriented' bit. It's like a bad parody of OO misunderstood. There is no object orientation - as far as I can tell, a VBA object would barely pass for a C struct.

      Add to that a rather 'special' vendor interpretation of OO (no doubt guided by the VBA way), and I find myself building CAD models where the transform (rotation, translation, etc) is the object, to which I pass the ...um... shape (even in plain English I struggle not to call it an object!) by its name as a string. The code is virtually unreadable, even by me, and I wrote it.

      The faster VBA dies, the better. I'm not sure it really counts as BASIC. Go and try Python - it's actually fun to write.

    3. Re:Anyone looked at BASIC since line numbers went? by pjt33 · · Score: 1

      Ever program with a VBA object model, using Intellisense prompting? Name a better, more complete, and useful IDE environment...

      Is the search facility as useless as in VS2008? If so, Eclipse.

    4. Re:Anyone looked at BASIC since line numbers went? by lbates_35476 · · Score: 1

      >>But you can't craft code that reads like simple English in any other language.

      O but I disagree. Python "real" code is as close to "pseudo code" as you can get. It is amazing how little you actually have to do to pseudo code to translate it into Python working code. Python also works as a procedural and an OO language. I came from a background of Basic, Fortran, Pascal, Cobol, etc. (35+ years at this point) and moving into Python was VERY easy. I just kept writing procedural code and it worked fine. When I discovered OO in Python, I was really impressed.

      I taught in the Computer Honors program at my local University for several years and would have loved to have taught my students Python instead of BASIC and Fortran (but that was a long time ago). It has the power of being interpreted (which is really important for learning), but the power of an industrial strength OO language to build non-trivial real world applications.

      Other reasons to teach Python is that it is EVERYWHERE and free. You can get a consistent Python runtime on virtually all platforms, but not a consistent BASIC or for that matter a consistent version of virtually any other language except maybe C (which would be a TERRIBLE teaching language). Using Python I can write to a web framework (Django, Zope) in the morning, write a Windows Service or COM object in the afternoon, and write a Linux/Macintosh GUI app or daemon in the evening. I dare you to do that in any other language. You can't begin to do that with BASIC, Java, or C#.

  50. Re:sys 64738, peek, & poke won't work but GOTO by shutdown+-p+now · · Score: 1

    The Java and OOP Nazis have been trying to kill GOTO for years

    It depends on what kind of Nazis. C# still has it, for one, even though it came long after Java (and is otherwise similar).

  51. Re:BASIC by Anonymous Coward · · Score: 1

    Excellent.

    Why is it so surprising that a language that was designed to teach programming principles (BASIC) acheived it's goal?

  52. Re:BASIC by Abstrackt · · Score: 3, Funny

    This reminds me of the joke about the programmer who died in the shower: "the shampoo bottle said lather, rinse, repeat".

    --
    They say a little knowledge is a dangerous thing, but it's not one half so bad as a lot of ignorance. - Terry Pratchett
  53. Voc-Ed or Navel Gazing? by gafisher · · Score: 1
    The perennial question ought to be "Why should we teach kids to program?" Was it the essence of the industrial revolution to teach every child to operate a spinning jenny or a steam engine? Society's goal ought not to be to make each student a master of the newest tool, but to teach them how to live in a society which that new tool has changed. Some will naturally gravitate toward the technological side, and may become invaluable for the abilities they develop, but the world does not need a population of composers, designers, writers, builders, leaders and more who are first of all amateur programmers.

    Certainly those of us who write code needed this vocational education, but it is shortsighted or arrogant to think everyone else does.

    1. Re:Voc-Ed or Navel Gazing? by John+Hasler · · Score: 1

      Society's goal ought not to be to make each student a master of the newest tool, but to teach them how to live in a society which that new tool has changed.

      But they already know how to send text messages with their thumbs.

      --
      Warning: this article may contain humor, sarcasm, parody, and perhaps even irony. Read at your own risk.
  54. Octave - the math tool by RichMan · · Score: 1

    Granted most will not think of it as a programming environment. But it has all that is needed.

    http://www.gnu.org/software/octave/

    If then, else for ....

    It has all the fundamentals.
    It allows you to plot all those high school math functions.
    It has a persistent environment/cut-and-paste commands for debugging and looking at your state space.

    And it is free to all, so great for the education system.

    1. Re:Octave - the math tool by RichMan · · Score: 1

      Here is your introductory sort lesson, complete with graphs

      octave-3.2.3:18> x=rand(100,1)*100;
      octave-3.2.3:19> size(x)
      ans =

            100 1

      octave-3.2.3:20> plot(x); % see we have 100 values, all from 0 to 100 in a random order
      octave-3.2.3:21> for j=1:99; for i=j+1:100; if x(i) plot(x); % see we now have 100 values in a nondecreasing order
      octave-3.2.3:23>

  55. Re:BASIC by bmo · · Score: 5, Insightful

    No, it probably means that most people think procedurally instead of functionally. And while that's just a guess, I'd be willing to bet a case of beer on it.

    It also probably means that most everyday problems are procedural/imperative. I'd be willing to bet a case of beer on that, too.

    The beatings in academia that people get over the head with functional programming turns off a lot of people. Emphasis on functional programming in academia seems like mental masturbation instead of getting shit done. Kinda like what goes on between pure and applied science and math factions.

    "Lisp is superior to everything" - oh hell no. That's like saying a hammer is superior to a screwdriver.

    There is space in the toolbox for all kinds of tools. Not everything is a nail. If a problem can be solved easier in a procedural/imperative language, then use that. Similarly, if a problem can be solved easier in a functional language, by all means, use Lisp.

    But don't tie your brain in knots trying to fit the problem (or the way you think) into the language.

    That's just stupid and masochistic.

    --
    BMO

  56. Re:BASIC by camperdave · · Score: 1

    Lisp failed for the same reason that HP stack based calculators failed: Most people don't think that way.

    --
    When our name is on the back of your car, we're behind you all the way!
  57. BASIC rocks by Pugwash69 · · Score: 2

    I worked for 11 years writing payroll applications in a version of basic. It powered a significant number of payroll systems in the UK and probably accounts for most people's wage slips even today. Now I write web sites in ASP, running VBScript. BASIC lives and will always have a place.

    --
    Pro Coffee Drinker
  58. I like turtles! by Requiem18th · · Score: 1

    But snakes are better. Kidding aside. Python is based on ABC which was an educational language just the same.

    --
    But... the future refused to change.
  59. Ack AWK! by Billy+the+Mountain · · Score: 1

    I bet awk would be a good first language. You can do interesting things almost immediately with it and when you delve deeper you start getting the rudiments of C syntax which leads to a good many of other languages. Plus it gets you thinking about regular expressions. Then you can go on to C++, Java or ruby for OOP.

    --
    That was the turning point of my life--I went from negative zero to positive zero.
  60. Perl by motorhead · · Score: 1

    Just saying...

    --
    Employee Of the Month - Cyberdyne Systems Corporation - September 1997
  61. MOD Parent Up by walterbyrd · · Score: 1

    Seems that every time BASIC gets mentioned on slashdot, everybody jumps to the conclusion that nothing has changed since GW-BASIC.

    I was programming, professionally, with BASIC, in the early eighties. Never used a GOTO, or a line number, once.

    Might also be worth mentioning that BASIC commands are also used in spreadsheets, and other applications.

    1. Re:MOD Parent Up by plopez · · Score: 1

      I feel the same way about Fortran. The latest versions support OOP very well, are much safer and more consistent than C++, much safer than C, as fast as C (faster than any interpreted language, no matter how good the VM is), and supports parallel processing from the ground up. If you need a GUI, use Java or C# to write a web app and link in the library. It is the 60 year old "language of the future".

      --
      putting the 'B' in LGBTQ+
    2. Re:MOD PARENT UP by EvanED · · Score: 2

      Saying that the smartest programmers you know "are the ones who know their low-level stuff" is not a very supportive reason for that sequence of teaching. All it says is that, when all is said and done, they had learned those things at some point. Did they start there? Did they end there? Who knows? Did they know those things because they actually had the interest to learn them for the same reasons that they are the best programmers you know? Is there, in fact, not really a causal relation at all?

  62. Re:Use C# by Anonymous Coward · · Score: 1

    C# forces one to think in OOP terms - you can't write a hello world app without "class" in it.

    It amazes me how people think you're doing OOP just because you're forced to do procedural programming in a class the few times you have to do it.

  63. As an old timer... by MrWin2kMan · · Score: 1

    who learned AppleBASIC, and COBOL, and FORTRAN, I feel the best 'beginner' language is still TurboPASCAL. It's basic enough for teaching concepts, and powerful enough to do advanced techniques before graduating to C++ or Java. If you want a language that's actually used professionally, there's always VisualBASIC, which again can teach you the basic concepts which you can then build upon.

    --
    Nothing to see here but us trolls...move along...
    1. Re:As an old timer... by smash · · Score: 1

      Seconded. It was my third language (Basic and LOGO being prior), but the first one actually useful for much.

      You can get away with a hello world being about 5 lines of code, comes with a nice IDE that doesn't get in the way (v6 or 7 even have syntax highlighting which helps) and you can actually write some pretty cool stuff with it. I even wrote a couple of small PC games with it with full 256 colour graphics and sound - you could use inline assembly to help speed things up too.

      --
      I run: Windows, OS X, Linux, FreeBSD. Just because you have a hammer, doesn't mean everything is a nail.
  64. Re:BASIC by bmo · · Score: 2

    As the owner of an HP calc, I have to say that what you say is not really the problem. The problem is and was inertia in the way math is taught. This inertia has led to "one way or the highway" with recommendation by HS math teachers everywhere for the TI-30 and its descendants.

    Couple that with the *much* lower price point of the TI-30 compared to the HP "equivalent" (the 10 and the 15), the choice for a HS student to pick the TI-30 style calc is a no-brainer. The love affair with TI then extends into higher education.

    Thus, millions of people never *ever* consider RPN. It has led to a stranglehold on the academic market by TI over the decades.

    It took me to be out of school to even think of going to HP.

    Personally, I won't go back to algebraic calcs. I even use a HP48 simulator on my desktop instead of the regular calculators that come with Gnome, KDE, or Windows.

    HP has come up with algebraic calcs over the years. They are always inferior.

    YMMV.

    --
    BMO

  65. Re:Use C# by shutdown+-p+now · · Score: 1

    You're not "doing OOP" when you're writing a hello world app in C#, of course. But you still get all the extra syntactic and semantic baggage that comes with C# being an OOP-centric language. And when you're teaching someone to code, you have to either explain it, or ignore it - the latter not being a particularly good education technique. It's like teaching basic arithmetic on equations, telling your students to "ignore that X thing for the moment".

  66. Re:sys 64738, peek, & poke won't work but GOTO by MobileTatsu-NJG · · Score: 1

    loop while( true )

              screen.print( "Hello World" );

    GRrr!! I typed Screen.print and it just gave me a stupid error! I hate this language!!!1!

    --

    "I like to lick butts!" by MobileTatsu-NJG (#32700246) (Score:5, Informative)

  67. Re:Use C# by FrootLoops · · Score: 1

    My first* programming language was Visual Basic 6. For those who don't know, it used "OOP-lite"--you never had to define your own classes, but you had to use some objects (controls/widgets, for instance). I remember following a short tutorial and teaching myself from there. It wasn't awful for me to learn UI design, basic code blocks, and basic object oriented programming simultaneously by random internet examples and the documentation. (This was back in middle school, and nobody I knew knew how to code so I couldn't ask about it.)

    So, I think some level of OOP in a learning language is fine. C# is probably too much. Python in an interpreter might be about right. One thing VB6 encouraged me to do was start my own projects and learn through them. If I was using a simpler but less powerful language I wouldn't have cared enough to get very far.

    *I had experimented with MS-DOS batch programming a little bit, including some rudimentary If's and GoTo's. No loops or functions, almost no variables. I'm not sure how much I learned before starting VB6 anymore.

  68. I would tend toward C by Tjp($)pjT · · Score: 1

    Why C? Because it allows the easy introduction of the mechanisms for expressions, evaluation of expressions, and looping constructs. Then when appropriate theory is taught, objects can be introduced using two of the most common metaphors by branching to Objective-C and C++.

    Remember that C is dead simple as a language. Most of the perceived complexity is in the use of the optional libraries. When in a post introduction phase you need say, regular expression evaluation, or something like sparse arrays to match the theory you teach alongside the practical course (catch a theme here?) you have several well designed libraries to invoke. Want an advanced course in generative algorithms? Well, C++ templates can be a very powerful tool. The "C" family of languages covers basic applications level programming to constructs that allow code very close to the hardware.

    Post learning C you have the tools to learn other languages without much headache. I love APL, but as a first language its a nightmare (unless you are an engineering, physics or math major and won't program regularly in the real world, then it's a perfect language! Unless you're in the US Financial industry where IBM sold APL and it still is going strong.)... And Dartmouth Basic is the basic to avoid, similarly RPG, and FORTRAN are right out along with COBOL. Each has a place (somewhere far away I hope) in the real world, and except for RPG I've made money on contracts for all of them. But as a beginning language they establish bad patterns of behavior and expectations. Where "C" falls down is that it takes a competent instructor. But I can write a bad program in any language.

    Modern "Basic" languages are not "BASIC" as it was from Dartmouth and don't have a lot of the failings or foibles. Real Software has RealBasic which is an awesome cross platform tool, so write once execute a real self contained program on Linux, Mac OS X or Windows xxx. It has Classes and inheritance and mechanisms for interfaces. It has properties for the classes. It is not remotely related to Dartmouth Basic except in the use of Basic as part of the name. I'd recommend it if they'd actually fix bugs posted _for years_ by multiple people to the support forums. It is a nice product for user interfaces, and I still use it when cross platform UI is an issue. But write the backends in C++ sometimes as custom plug-ins. But it is not my first choice for teaching the intro comp sci folks. It is overly complex for a newbie. It requires an instructor that could separate issues from teaching.

    Again C to start, object models in Objective-C and/or C++ then complex subjects from there as needed.

    --
    - Tjp

    I am in wallow with my inner money grubbing capitalistic pig. ... Oink!

  69. Teach BASIC on 8-bit machines by hessian · · Score: 1

    Get the kids Apple ][s so they can learn good programming:

    * Use RAM and disk sparingly
    * Integrate BASIC with assembly
    * Write simple drivers and disk routines
    * Learn telecommunications from the bit level
    * Learn how spaghetti code sucks the life out of you

    Logo, BASIC and assembly provide all the fun a kid needs. Well, maybe not all... but a good start to learning CS from the ground up.

  70. My first language was BASIC, second Logo by jrincayc · · Score: 1

    I originally learned to programming on a Commodore 64 using BASIC. My second language was Logo on the C64. I have since programmed in over a dozen languages, and I don't think starting with BASIC harmed me. It's just a matter of learning that there are alternatives in the newer languages.

    I do think that Logo is a better starting language than BASIC, since it has things like user defined functions and better list handling.

  71. Re:BASIC by Jeremy+Erwin · · Score: 1

    Who is poster? plover
    plover is a jerk
    plover is not a jerk

  72. Re:BASIC by jollyreaper · · Score: 1

    10 print "hello"
    20 goto 10

    This is why we can't have nice things.

    Oh, that's small potatoes. What we'd do is take all the computers in the lab and write music for them. These were IBM model 25's, monitor and disk drives in the same box. So we'd turn the screen contrast and brightness down to nothing to make them look like they're off while the countdown timer is running in the background. Fifteen minutes into the next class, the computers in the back row start playing the William Tell Overture in unison. We lost our nice things right after that.

    --
    Kwisatz Haderach
    Sell the spice to CHOAM
    This Mahdi took Shaddam's Throne
  73. Re:Use C# by shutdown+-p+now · · Score: 1

    My first* programming language was Visual Basic 6. For those who don't know, it used "OOP-lite"--you never had to define your own classes

    Actually, VB6 did have classes (class modules is what it called them). It didn't have inheritance, but it did have interfaces, and you could use delegation (manually coded) to simulate it. Most importantly, it had true OO polymorphism. So it was technically an OOP language.

    On an unrelated note, one nasty thing about learning on VB (or Delphi, or a similar RAD environment) is that it lets one write really nasty code - the "magic button" syndrome is often acquired at that stage - while the output looks conspicuously like a "real program". It's quite easy to fall into the trap of thinking that you already know quite enough for real-world programming. For those who can avoid it, yeah, it's a good introduction to component-oriented / "lego bricks" development.

  74. Re:BASIC by bmo · · Score: 1

    well, it's been a few years.

    Insert an "end" or "stop" in there after the if statement. :-P

    --
    BMO

  75. So by ledow · · Score: 5, Insightful

    So the *BEGINNER'S* All-purpose Symbolic Instruction Code, and a language created exclusively for educational use are great languages for demonstrating and teaching kids how to program? What a shocker. You "surprised" yourselves how/why? By having ridiculous notions that "any idiot" knows how to teach kids better than the experts who set out in the 60's and 70's to EXPRESSLY do just that ?

    You've been suckered by language-purists, people who spend so long arguing about WHICH programming language to write something in that I could have written something in ten languages before they come to any conclusions whatsoever. BASIC is *wonderful* for teaching programming. I know, I've done it, from class-mates back in the 80's to modern-day kids nearly 30 years later. And yet my ENTIRE intake year for university sat through a whole year of Java lectures from a qualified professional and still didn't understand what half the statements they were using actually DID, while I didn't attend a single lecture and passed the course just by emailing in the assignments from home 30 mins before they were due. That's not to make me a genius, I was just taught properly, encouraged to learn, and started with simple tools - I wasn't forced to learn, by rote, a complex tool that requires deep understanding to know what it's actually doing. I started on something I *could* understand and progressed in steps. BASIC didn't corrupt me, it was a stepping stone that I outgrew.

    When you teach a child to write, you don't teach a 2-year-old quill-calligraphy, or demand their first piece in iambic pentameter. You give them a crayon. If it hits the paper 3 times out of 10 you congratulate them. Then you progress to more advanced things as the need requires. But guess what? If you think that's the last time you'll ever write anything with a crayon, you're wrong. If you're still submitting your CV (resume) in orange crayon aged 30, you have a problem (the same as someone routinely programming important code in BASIC at the same level of experience). But neither should you go and hunt down a quill and parchment to scribble the note that says you're out of toilet roll.

    Some people can't understand that BASIC is *excellent* for teaching. It was *designed* that way, and beats 99% of mainstream languages for that. But if your company is still running exclusively off it in 2010, it's a bit like sending out invoices in crayon. However, even in a modern office, sometimes you just need a tool for a small, simple job and sometimes BASIC works fine there (in the same way that scribbling "pay the caterers" in crayon on a post-it is perfectly acceptable as an aide-memoire). There are schools that, without a bit of BASIC, or shell-script, or DOS batch file, etc. wouldn't be filing their accounts, or importing the new student-intake data each year, I know that. When the job is once-a-year, with changing requirements, with specific needs, with various "mental hacks" that have to be applied anyway (i.e. "we need to drop column X this year if column Y is less than 20 because that old law no longer applies"), and needs to be done quickly it can happen in any language you like.

    I have taught BASIC only a year or so ago, to a top-class prep-school student, in a single one-to-one session, in a single afternoon. That was from *zero* programming knowledge (but a keen mind), exclusively on paper and the next day they were writing (working) games and hadn't required a single extra tool, library, download, reference or command-lookup - we ran them through QBASIC to see them in action but they worked perfectly. I have also spent several HOURS trying to clean up a single function written by a top-class MSc CS-student that had only ever been exposed to Java in order to find out WHICH of the several dozen syntax errors, scoping errors, operator-precedence errors, etc. was actually the main cause of their function returning junk. I could have taught them a whole programming language AND done the same job quicker than I could teach them to d

    1. Re:So by javabandit · · Score: 2

      I wish I had mod points. GREAT post. The analogy of teaching a child to write is spot on. Excellent post.

    2. Re:So by MROD · · Score: 1

      Here, here!

      --

      Agrajag: "Oh no, not again!"
    3. Re:So by narcc · · Score: 1

      Brilliant post -- well done.

    4. Re:So by fotoguzzi · · Score: 1

      I have taught BASIC only a year or so ago, to a top-class prep-school student, in a single one-to-one session, in a single afternoon. That was from *zero* programming knowledge (but a keen mind), exclusively on paper and the next day they [They were? Don't you mean, he was?] writing (working) games and hadn't required a single extra tool, library, download, reference or command-lookup...

      --
      Their they're doing there hair.
    5. Re:So by Bozdune · · Score: 1

      Great post, except you are feeding the Basic-haters too vociferously. So let me undo a bit of the negativity.

      VB6/VB.Net and VBA are not just "educational" languages, they are languages that serve an important purpose, and they are NOT replaced by other technologies. Show me how to build a great-looking GUI in 2 minutes, and one that I can change around in another 2 minutes if I don't like it. Why should I spend hours screwing around with C# or Python or Swing and end up with stuff that's hard to maintain?

      That's what VB (and its competitors like PowerBuilder) brought to the table. They made it possible for a non-programmer to create a nice-looking GUI, in no time at all. And that makes "real programmers" look bad. Well, tough. Use the technology, don't bad-mouth it. Move the "real" code to C# or C and leave the GUI in VB. You'll save tons of development time, and time-to-market is what counts, not "purity of soul".

    6. Re:So by ledow · · Score: 1

      Though I sort-of agree, VB forms designer isn't really "programming". It *is* fabulous and quick and easy, but it's basically a pretty UI on a set of classes / function prototypes (depending on how far back you go - VB was pretty great just for UI work even for databases as far back as VB 3.0). That's not "the language", that's just a pretty damn well designed UI as a frontend. I have seen similar setups with some decent Java tools, for instance, that basically do the same thing in the same way. VB predates them by up to a decade in some cases but it's not really the "language", it's just a forms designer linked with a prototype of each function that each object generates when clicked etc.

      Don't get me wrong, nothing does more for nice, quick visual programming than those VB interfaces but it's not really the language, they just happen to autogenerate a bit of code that uses sufficiently similar object references and is clever enough to link that with a forms designer in both directions. That interface could (patents aside) work wonders if it was tightly integrated into *any* language, as many expensive emulations of the same thing for Eclipse will show you. Though I agree it's fabulous, genuinely useful and very desirable if you ever do any UI work, there's nothing in the compiler specific to that - it's just calling functions from the Windows system files to do the magic from a predefined windowing API but doing it during *debug*/*design* stages too. There's nothing stopping you having something just that good on a PASCAL compiler in DOS, for example.

      Though personally, I've found everything since VB v5 a bit of an abomination but as a younger lad I splashed out a whole year's present money on a copy of VB 3.0. It was worth every penny just for the functionality you describe. There's *nothing* stopping someone doing that using X-Windows, or SDL, or framebuffers, or anything else with any other windowing toolkit you care to mention (e.g. an SDL-based development environment that comes with QT libraries that let you design forms while programming them too and then generating code that displays the forms whenever a certain initialisation function is called. It's a development *tool* part of VB, not the actual language.

    7. Re:So by Bozdune · · Score: 1

      I think it IS "programming." Is it "programming" when somebody painfully builds the same thing by hand in MFC? OK, so I'd argue it's "programming" here, also.

      As you point out, it shouldn't be that hard to produce this kind of IDE/framework for a different/better language. But nobody's really done it (OK, there are some Web tools that are getting there, but we're talking desktop). There was an abortive open-source effort around Python whose name I can't recall, but that fizzled. I suspect it's actually a lot tougher than one might think to make the whole thing work together reasonably well.

      With regard to VB5 being the last reasonable version of VB, I've converted a VB6 code base to VB.Net and although the conversion process was extremely painful (no excuse, Microsoft, for screwing VB users this badly), the code is up and working OK, and VB.Net provides a similar level of flexibility and speed as the "old" VB did, with the advantage that you can inherit from classes trivially (and therefore change the behavior and appearance of things) without the enormous pain that was required to do that sort of thing in "old" VB.

      Of course, there are new and exciting pain points, largely relating to the task of integrating managed with unmanaged code. There are also (many) bugs and idiosyncratic behaviors in Visual Studio, but once you learn how to avoid them (by trial-and-error), the behavior is tolerable.

    8. Re:So by Marxist+Hacker+42 · · Score: 1

      I agree- so I'm going to give you a counter-example: VBA.

      No forms designer at all, or worse yet, one crammed into an OLE box on an application not designed to be that flexible. But when it comes to quickly massaging data in the background of an office document, I am unaware (I'm not saying it's not there, but it's not as obvious to me) of a similar, powerful scripting language in Open Office (somebody, please respond and enlighten me, it has to be there, and I'd love another reason to dump Microsoft's monopoly).

      Once again though, it regulates VB to being a one-trick pony, and worse yet, one that has been abused by script kiddies to the point that Office 2007 and above actually requires the user to verify *every load* that they want to turn on VBA macro scripting, even in Access which is the competing data UI front end to VB.

      --
      SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
    9. Re:So by Nethead · · Score: 1

      As someone that learned programming in high school on Xerox BASIC via a DecWriter and a 300 baud acoustical modem I have to agree with you. When the Apples and Commodores came out I was ready and making money putting them to work for people. I even ran several radio stations on QBasic DOS machines that controlled the on-air programming. I put a payphone in production that used BASIC at its core.

      I now use perl and C for most quick tasks, but still love the quick simplicity of BASIC.

      --
      -- I have a private email server in my basement.
    10. Re:So by CyberTech · · Score: 1

      I do believe this may be the best post I've ever read here.

      --
      -- CyberTech
    11. Re:So by Titoxd · · Score: 1

      Awesome post. Let me add one thing, though: If you like BASIC, you will love FORTRAN. It is procedural, so it is similar in concepts to BASIC; and it is extensible, so you can start with a Hello World program in Fortran with a PRINT *, "Hello World", similar to BASIC's PRINT "Hello World".

      You can then gradually introduce concepts, such as loops and conditionals in the same way with BASIC; then, you can take on more complex ideas, such as variable typing and allocation (IMPLICIT NONE ftw!), pointers, modules/classes, and you can go all the way to object oriented fluff with the latest standards.

      Moreover, FORTRAN is still being used in industry, and not just as a legacy language. There is extensive development of parallel code in Fortran, and the language still reigns king in High-Performance Computing. Thus, the language can grow and be anything from a crayon to a calligraphy quill as desired.

    12. Re:So by cavebison · · Score: 1

      > BASIC is useful for quick, simple tasks and can be simpler than more complex tools.
      > BASIC isn't ideal for complex tasks.

      First line true, second line is false. For *past* versions of BASIC, you'd be right. Why does every mention of basic bring up memories over a decade old? Thanks to a small revolution, MS's VB.NET can (semantic differences aside) do anything C# can and is completely OO. Whether you choose VB, C# or Java, you can all code using similar, industry-standard paradigms now. Where exactly is VB.NET inferior to C#?

      Microsoft did good, both with C# and VB. I distinctly remember people bitching blue in the face when C# came out, vowing never to use it. You could say C grew up a bit. BASIC grew up a hell of a lot. Now it's good for your kids *and* for you.

      People who pick on basic now are living in the past. Be honest and just say you prefer your chosen language simply because it's *familiar*, not because it's better.

    13. Re:So by ledow · · Score: 1

      My degree is in mathematics. I certainly have heard of and used FORTRAN, especially having an older brother who did a maths degree too a few years before me. The problem with FORTRAN (leaving aside my personal prejudices against such things as the horrible pre-F90 DOS compiler / IDE we used to use which had any number of annoying quirks regarding code layout and naming) is mainly that it is not a good language to *teach*. Apart from having lots of inherent mathematical statements (built in complex variables!), it also suffers from heavy use of non-alphabetical characters to achieve its syntax (colons, brackets, etc.). You'll notice that BASIC, on the whole doesn't. It's certainly not a bad second step, though, and as you say quite a good transition to further things but in itself it's composed of so many standards and little foibles that it's not a good one to start with.

      It's array manipulation is truly fabulous, though. You can tell it's written for mathematicians.

    14. Re:So by ledow · · Score: 1

      That depends only on your definition of "complex tasks" and "ideal". You wouldn't want to be writing an OS in BASIC (of any variant) - it would not be ideal. You wouldn't want to be writing a life-support-system in it, it would not be ideal. You would not want to be writing Google's codebase in it, it would not be ideal. There's lot of things that *any* variant of BASIC would not be ideal for. Doesn't mean you *can't* use them or that it's instantly a bad project *because* you used them (hell, you could write a space shuttle that ran on BASIC and, with the right people and checks, it would be as safe as any other - it's just that the people who *do* write those systems would not consider it as "ideal").

      VB.NET is fine for the average desktop-wide program, in fact it's damn near ideal. Technically, if you added up all my programming time, I've probably done as much, if not more, BASIC than C in my lifetime. Certainly not very much Java (personal experiments plus the compulsory uni courses in it). The fact is that most of the stuff I churn out daily is *not* in BASIC of any kind. Hell, I've probably written more lines of shell script (bash) and DOS batch file than almost anything else, but there's no way I'd recommend that as the "ideal" language.

      The simple fact, for me, is that VB.NET and C# are too new for me. They can't do anything that I can't do in an "old" language. They require heavy runtimes that are so large that most of my programming projects would instantly go up in size by an order of magnitude, would instantly be locked to an operating system (I've never used Mono and don't really intend to), and performance compared to the code I would write without them suffers. VB.NET and C# are *not* ideal for writing cross-platform, embedded, time-dependent or other classes of programs. However, some of the "old" languages *can* fit that criteria absolutely perfectly (C excels in all departments there, for example).

      I use and manage any amount of programs that were written in VB.NET and C# - it's my job. But when it comes to *writing* them, I've been put off before I've even started most of the time (I've forced myself through several entire projects with them and just can't find anything that leaps out as a killer feature that I *must* tolerate them for). If MS produced a "VB7" that didn't use all that .NET crap, compiled to native code and even allowed you to plug in foreign compilers (so I could get a cross-platform version) I'd probably be using it now.

      The fact is that lots of those people who vowed to never touch anything .NET based actually did just that. Desktop application developers love it, because it still has VB's rapid development, but everyone else tends to steer clear. To be honest, in my job, putting ".NET" on the end of your application name (which is surprisingly common nowadays with large school management programs, e.g. SIMS.NET etc.) is a good way to suddenly lose upgrades and custom. There are reasons for that that extend beyond programming language snobbery.

    15. Re:So by Joey+Vegetables · · Score: 1

      BASIC today is much more than VBA or VBScript. Even these have their uses. I've done VB 4/5/6 and VB.NET for a living, and yes, the language has its frustrations, but it is possible to write clean, maintainable code in any of these if you know what you're doing and are willing to be confined to the Windows platform (or Mono).

      Having said this, I would usually choose Python over BASIC anytime I could. I realize a lot of people are turned off by the whitespace-as-syntax, but just some of the things you get in return more than compensate for that in my opinion; things like "batteries included," the multi-paradigm nature, human-readable pseudocode, and the fact that while it is an incredibly powerful language, you don't have to learn the whole thing to get useful work done, or even to read and maintain another moderately experienced programmer's code. For real-world applications you do also need other skills (HTML, SQL, COM, data and object modeling, etc.) but for teaching I think Python is sufficiently self-contained and self-documenting that most of the elementary-age kids I know could learn a large and useful subset of their own with minimal guidance.

  76. Right tool for the job by Weaselmancer · · Score: 4, Insightful

    No, it's a worthwhile comment. He could have phrased it more diplomatically but it is a useful thing to know.

    C, C++, C#, Java, Ruby, Python, assembly... - these languages and all others are tools. They go in the toolbox and are brought out as needed. Each does something better than the others.

    Were I to write a VM I would use C as well. A good way to think of C is "user friendly assembly". This is an excellent language to use for an interpreter. For a VM you want SPEED. So you need something with as little baggage as possible. It must be fast, and C has that going for it. After primary compilation it creates asm files. So why not go straight to assembly? A VM is complex. For something huge and complex ASM is a little too fine grained. You want C. So C was used. Best tool for the job.

    Writing a gigantic user space application? C may not be your best bet. A lot of those types of programs spend a lot of time just sitting there waiting for input. You may not need anything that optimized. A big fat high level object oriented language can be a better pick. That's where Java/C# shine. You can do a lot with the fat libraries that go along for the ride. The UI creation is simple. Lots of bang for the buck.

    Match tool to task and you'll make better software.

    --
    Weaselmancer
    rediculous.
    1. Re:Right tool for the job by Hognoxious · · Score: 1

      No, it's a worthwhile comment.

      It's technically true, but that doesn't mean it's worthwhile or relevant to the discussion at hand.

      Programming using tools written in language X is not the same as programming in language X. Ultimately, it's ones and zeroes that run. And if Java, C0807 or whatever is the best way of converting an idea in your head into the correct sequence of ones and zeroes, the converter in the middle (and the language it was written in) is largely irrelevant.

      Still, gave you a chance for a bit of dick waving, didn't it?

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    2. Re:Right tool for the job by vlm · · Score: 1

      A good way to think of C is "user friendly assembly".

      Its also a "universal assembly". Very handy that I can run the same software on a PIC, AVR, MSP, or pretty much any other microcontroller, and only have to worry about the relatively tiny I/O and timing functions.

      Forth is almost as good, but not nearly as widespread.

      --
      "Science flies us to the moon. Religion flies us into buildings." - Victor Stenger
    3. Re:Right tool for the job by T.E.D. · · Score: 1

      Actually, that's a bit of a myth with C. The truth is that its pseudo-low level nature, and particualy all the aliasing it supports (and encourages!) makes the optimizer's job way harder. With the same amount of effort, an Ada or Fortran compiler can do a much better job optimizing code.

      Of course "the same amount of effort" is where the rub is. What really matters for speed is how much effort the compiler writers put into optimizations, not what language the compiler is for.

      The main advantage C always had was that the language is so simple that it was fairly easy to write a compiler. That made it the first (and often only) compiler written for a new platform. C was generally "the right tool for the job" only because it is the only tool available for the job.

    4. Re:Right tool for the job by T.E.D. · · Score: 1

      ...and in those cases you should probably be using Ada instead of C. The only time to use C is when there is no other compiler available.

    5. Re:Right tool for the job by Viol8 · · Score: 1

      "JAVA can be optimized to have speed within an order of magnitude of c for many applications "

      Total bullshit. It might be slightly faster on the odd occasion when the JIT compiler spots a runtime optimisation that a standard optimising C compiler wouldn't spot at compile time but generally thats not the case. As for 10 times faster? Puhleease.

    6. Re:Right tool for the job by Viol8 · · Score: 1

      The aliasing is no different to what you'd do in an equivalent assembler program. Thats why C allows it.

    7. Re:Right tool for the job by Wolfger · · Score: 1

      Match tool to task and your employer will get upset with you for coding in an unacceptable language.

    8. Re:Right tool for the job by T.E.D. · · Score: 1

      That's not the point. The aliasing prevents the compiler from being able to safely hoist your variables up into registers without doing an expensive analysis of the entire program (all source files in extreme cases) to make sure its safe. Even then it might not be able to figure it out.

      A theoreticaly really smart assembly programmer would know his inteded data flows, and if it is safe or not. A compiler has to figure it out mechanically (and often can't).

      The problem is that C is a portable assembly language for 1970. Modern assembly has to worry about things like pipelines, predictive branching, multi-level caches of various sizes, etc. Only the most godlike of humans could hope to keep track of that in their heads. Languages that try to tell the compiler precisely what circa-1970 assembly instructions to generate have become an active menace. Its like an 8 year-old sitting the the back seat trying to tell you how to drive (because he as a tricycle and knows all about it).

    9. Re:Right tool for the job by cforciea · · Score: 1

      Really, there aren't very many good reasons anymore to use C or Assembly over C++. Aside from a few situations that you can avoid if you code smart, C++ gets as good or better performance than C using fewer lines of code, and very rarely are you actually going to beat the C++ compiler at generating efficient assembly. There are maybe a few niche cases where you'd still gain something, but the smart move would probably be to use C++ for writing your VM.

    10. Re:Right tool for the job by CptPicard · · Score: 1

      "Under 10x the speed of C" sounds like a reasonable bound to me...

      --
      I want to play Free Market with a drowning Libertarian.
    11. Re:Right tool for the job by Viol8 · · Score: 1

      Sorry , I think you're overegging it a bit. Casting makes up a very small part of any program and I'm not convinced it makes a huge amount of difference to optimisation analysis these days anyway.

    12. Re:Right tool for the job by Khashishi · · Score: 1

      You'd better work on your reading comprehension. Within an order of magnitude could mean anywhere from 10 times slower to 10 times faster.

    13. Re:Right tool for the job by T.E.D. · · Score: 1

      I never said anything about casting. Aliasing is when one variable is actually an "alias" for another. So what is at issue here is C's over-relaince on pointers for everyday tasks like array element manipulation and parameter passing.

      I know its an article of dogma among many that C is somehow inherently fast. That makes any inconvenient facts pointing otherwise kind of hard to swallow. Sorry. The dogma is wrong.

  77. Clubcompy is sort of cute... by kuzb · · Score: 1

    ...but I question the merits of a language that doesn't implement FOR or WHILE. Loops are a pretty important part of a language, and having to implement them using GOTO is stupid.

    --
    BeauHD. Worst editor since kdawson.
    1. Re:Clubcompy is sort of cute... by kthreadd · · Score: 2

      Modern versions of Basic have those. You know, Basic has also evolved just like many other programming languages.

    2. Re:Clubcompy is sort of cute... by omnichad · · Score: 1

      Even GW-BASIC had while loops. That's not exactly a recent development in the language. Dartmouth BASIC had FOR/NEXT. Just how far back are you going?

  78. Just like parenting.. by mustPushCart · · Score: 1

    everyone wants to raise their kids the way they were raised. The way they were raised was the best way simply because its the only way they know and as far as they are concerned, they were raised just fine.

    Although in this case it should be easier to rate which one is better, i'd go for whatever language is easy for the childs age, they will eventually learn to detach the logic from the code after a few languages unless you are worried that learning another language will cause them to lose interest so hook them up on any language/system with a lot of visuals.

  79. Re:Abstraction == Good by ZorinLynx · · Score: 1

    I think there's a lot of benefit gained from learning how the underlying guts of things work.

    For one, understanding the underlying guts can help a lot in understanding why something is failing in a mysterious way.

    For two, it would be a serious problem if the art of implementing the lower-level guts of a system stopped improving. The attitude of "It's already done, why mess with it?" means that we'll end up systems which don't reach their full potential because nobody is trying to improve the bare-metal.

  80. Instant gratification by Just+Brew+It! · · Score: 1

    I think it really helps to use an interpreted language with an "immediate" mode (just type a statement and it is executed on the spot) if you're trying to get non-programmers interested in programming. The first two languages I learned (back in 1976 or thereabouts) were BASIC and FORTRAN. Of the two, BASIC was easier to pick up and (quite frankly) more fun, precisely because it was more interactive.

    These days most of my "real work" is done in C/C++ and Python. I would argue that today, Python is a reasonable first language. It is simple enough that someone can easily learn the fundamentals and make it "do something"; yet it is also powerful and expressive enough to build complex real-world production systems with.

  81. Re:BASIC by Billly+Gates · · Score: 1

    My favorite was

    10 dim x = 1,000
    20 if x= x mod 2
    30 sound 30,20.15
    40 color 45,20
    50 print "I am super GAY!"
    60 else
    70 sound 40,20,35
    80 color 55,15
    90 print "No really I am GAY!"
    100 goto 10 ... and make sure you save it under work3.bas or something so it gets mistakenly run. The joys of being immature at highschool. The good old days.

  82. The end of accessible programming? by QJimbo · · Score: 1

    First programming language I ever learned was BBC Basic on an Acorn Archimedes computer. A fantastic language which was easy to pick up and start working with.

    I feel very, very fortunate that I caught the tail end of the time where easy programming environments were bundled with computers, since learning those concepts at an early age is what has allowed me to learn the other languages I do now.

    Surely it must be harder for this generation to really start programming, at least on the desktop, without such accessible environments?

  83. Logo is more powerful than BASIC by OrangeTide · · Score: 1

    I don't think people realize there is more to Logo than turtle graphics. It is essentially a dialect of LISP and has very powerful list processing and array features. And using property lists you can build data structures from it.
    People have built binary trees and small personal database apps from Logo. While the data structure support isn't as powerful and flexible as what you find in C, Java or JavaScript, it is sufficient for a teaching language.

    I think a Logo and/or BASIC for iOS and Android might be just the ticket to getting kids involved in programming. Fiddling around with turtle graphics on a mobile device in quiet boredom seems like something today's kids might actually do. (how long can you play Angry Birds before you need a break)

    --
    “Common sense is not so common.” — Voltaire
  84. Interactivity is key by White+Flame · · Score: 1

    With classic screen-editor BASIC, you can just type in PRINT "1+1=";1+1 and immediately see the results. Once you've entered in a program, you can interactively do things like A=3:GOSUB1000 and try out a sub-portion of their code.

    This sort of interactivity is completely lost in programming languages that have an edit/compile/run cycle, to the detriment of stark newbies getting to play around with the language and just "try stuff".

    Lisp is my main development language. It and some of the other dynamic languages of today do keep that interactive prompt for the user, letting newbies play and letting seasoned developers test/debug very quickly. When it comes to being beginner-friendly, I think this interactivity with the language environment is the most important aspect, and it doesn't have to be tied to just "simple" beginner languages.

    1. Re:Interactivity is key by Just+Brew+It! · · Score: 1

      I agree completely (and made a similar point a few posts up). I think interactivity was one of the reasons I immediately liked Python when I first tried it a few years back - it reminded me of those exciting days long ago when I was first learning how to program in BASIC!

    2. Re:Interactivity is key by plopez · · Score: 1

      Meh.... you can do the same thing with Python, Ruby, R, Perl, or a host of other interpreted scripting languages. Nothing special about it.

      --
      putting the 'B' in LGBTQ+
    3. Re:Interactivity is key by Just+Brew+It! · · Score: 1

      Teaching a newbie how to program using Perl? Surely you jest...

    4. Re:Interactivity is key by clone52431 · · Score: 1

      With classic screen-editor BASIC, you can just type in PRINT "1+1=";1+1 and immediately see the results. Once you've entered in a program, you can interactively do things like A=3:GOSUB1000 and try out a sub-portion of their code.

      Agreed. Back when I was learning BASIC, I probably did a test-run for every two lines of code (maybe every single line). It probably sucked for my productivity, but I wasn’t programming for productivity’s sake back then.

      --
      Distributed Denial of APK: It takes 15 seconds to reply to him anonymously, but wastes tons of his time if we all do it.
    5. Re:Interactivity is key by plopez · · Score: 1

      The parent post's thesis is that the interactivity of BASIC was required and made it superior. My point was that there are many other interactive programming languages you could use. Besides, Perl programs don't have to look like "line noise". If they do, you're doing it wrong.

      --
      putting the 'B' in LGBTQ+
  85. Re:Use C# by SanityInAnarchy · · Score: 1

    I think Ruby fits that bill better than BASIC. Starts out without needing the baggage, but when you're ready for structured programming and objects, it's all right there.

    And you avoid learning GOTO. I don't care how easy it makes initial learning, it's building bad habits that you're going to spend years killing.

    --
    Don't thank God, thank a doctor!
  86. Re:Use C# by shutdown+-p+now · · Score: 2

    Agreed, but I think Python is even better for that purpose - less things to deal with. And it has a decent turtle graphics library, which is a very good learning aid.

  87. Nothing wrong with either one by Nitewing98 · · Score: 1

    I started with BASIC, like a lot of hackers from my generation. Learned LOGO as well, then on to 6502 ASM, Pascal, 8086 ASM, all on my Apple //e! BASIC gives immediate feedback, and so it good for the beginner. I think starting someone on OOP or other advanced concepts from the beginning is a mistake, since students need a rudimentary understanding of basic programming concepts first, which BASIC and LOGO do very well. I guess I'm saying you can't understand the real power of modern OOP languages without doing it "the hard way" first.

    --

    Nitewing '98

    Everything works...in theory.

  88. No! by rastoboy29 · · Score: 1

    I was one of those poor ruined youths deluded by BASIC.

    Better to go with Python or Perl, imo.  Not PHP...no need for that.

  89. Web site not trustable by SpaceLifeForm · · Score: 1

    Massive javascript attack. Also https by default.

    --
    You are being MICROattacked, from various angles, in a SOFT manner.
  90. Re:Use C# by nzac · · Score: 1

    Ruby is a terrible language to teach programming, there is so much stuff that needs to be used responsibly. While the language is nice to read, monkey patching and other stuff should not be an option for someone learning programming basics.

    For teaching general programming in my opinion is the best language by far. The 'Zen' structure provides consistency when learning the language. The only thing i don’t like about python is the using indenting instead of end or ;.

  91. Re:Use C# by Anonymous Coward · · Score: 1

    The problem with C++ is that it has to run in a slow interpreter, which adds overhead and makes things slow.

    Ur doin it rong.

  92. Re:BASIC by plover · · Score: 2

    I think you proved my point eloquently.

    --
    John
  93. Because... by sitarlo · · Score: 1

    In my 20+ year career as a software engineer I made the most money writing Visual Basic code. Of course it was more professionally rewarding to do C, C++, ObjC, Java, etc... But, I definately got paid the most for VB applications in the financial sector. Funny, because I probably spent a lot more time mastering the other languages and their development tools than I did learning BASIC and VB.

  94. 8-bits are the best by RonMcMahon · · Score: 1

    I hunted down a pile of Commodore and Atari 8-bit systems in order to teach LOGO and BASIC programming to my two sons. The languages are immediate and responsive with a direct response to user input in a way far long lost in 'modern' development environments like Visual Studio 2010. The clear syntax of these two languages gives a child an easy path to comprehension that one command like: LEFT 34 makes something happen on the screen that you can immediately view.

    The old "Hello World" sample application can be completed in 2 or less lines long in these languages. C++, C#, F#, VB.NET, etc... all fail to deliver such an accessible learning path, and that is why they fail to surpass 25+ year-old systems.

    I believe that this approach has been a success. This year my eldest asked for the Flash development environment for Christmas...

  95. Re:BASIC by mfnickster · · Score: 1

    You had me at 10. :)

    (Not mine, I'd give credit for this one, but can't remember who came up with it...)

    --
    "Slow down, Cowboy! It has been 3 years, 7 months and 26 days since you last successfully posted a comment."
  96. Re:Use C# by kthreadd · · Score: 5, Insightful

    And you avoid learning GOTO. I don't care how easy it makes initial learning, it's building bad habits that you're going to spend years killing.

    Now what's wrong with goto? It's a perfectly valid statement when used appropriately, just like any other statement. What's wrong is this old dogma that tell young people to not think for themselves and instead just repeat what everyone else says.

  97. Re:Use C# by plopez · · Score: 1

    Agreed. Based on bitter experience much of the "OOP" I have seen over the years has just been "COBOL in drag". I even tried to tried to teach a class on it where I was working and with in 15 min. my manager, who considered himself to be an OO programmer shut me down. He didn't get it when I started talking about leveraging patterns, aggregation, base class calls, MVC, among other things.

    This pretty much undermined my position as a team lead and senior staff at the place. I left about 6 months later.

    --
    putting the 'B' in LGBTQ+
  98. Re:BASIC by dbc · · Score: 1

    Clearly, he provided his own buggy handler for the 'out of shampoo' exception. If he had simply failed back to the OS, he'd be alive today. 'MOOOOOMMMMM!!!!....'

  99. RPN by fyngyrz · · Score: 1

    I found a free HP48GX thang for the iPad recently -- made my day. Now I have two hardware versions, a 48 and a 48GX, a 48 emulation on my Mac desktop, and a 48GX in my iPad. I feel... "covered." :)

    I keep HP 12Cs around in about the same places, too. That thing does an awesome job with loans and the like.

    --
    I've fallen off your lawn, and I can't get up.
  100. Nope. Basic has outlived it's usefulness. by dbc · · Score: 1

    I have been teaching my daughter to program over the past couple of years. Logo and turtle graphics were certainly good to start with. But there is *nothing* in BASIC that is easier/better/clearer/friendlier than Python with Idle. Ditch BASIC. Start your kids on Python. Go get the "Hello, World!" book by Sande and Sande.

    Yes, I did my first programs in BASIC -- on an ASR33 with an acoustic coupler modem. This was *hot* stuff at the time. (The MITS 8800 and the ability to solder together your own computer was still three years down the road.) Stored my programs on punched paper tape. I loved it at the time, but sheesh already, let's move on.

  101. Re:Use C# by shutdown+-p+now · · Score: 2

    Python treats whitespace as syntax.

    Yes, and that's one of its stronger side. Using whitespace to delimit blocks of code is very natural to someone with no programming background.

    That was demonstrated to be absolutely stupid 30 years ago.

    It was?

    At least the FORTRAN fucks had an excuse with punchcards

    The way FORTRAN used significant whitespace has nothing in common with the way Python uses it, except for the fact that it's significant.

    No offense, but take a breath

    Judging by the overall tone of your post, you should really take your own advice.

  102. Don't equate BASIC and Logo by laird · · Score: 3

    I'd agree that interpreted languages (with BASIC and Logo being examples) are great for programming. The edit/compile/run cycle causes too much friction, discouraging kids from experimenting.

    But having taught hundreds of kids programming, there's a huge difference between BASIC and Logo. Logo is a simple but powerful language that teaches kids how to express what they want to a computer. BASIC is a complicated but limited language that mainly confuses kids and teaches them loads of incorrect beliefs that make it hard for them to eventually learn to express themselves clearly. Certainly starting with BASIC can be recovered from (Dykstra was being overly dramatic) but I would advocate doing that to anyone on purpose.

    Of the introductory languages that I've taught, I think that Logo was the best introduction, because it's the simplest, most natural syntax, with the ability to easily generate graphics that engage students. And while most people don't notice, Logo is a fully expressive programming language.

    For comparable, but more modern languages that are good for introducing kids to programming, there is Scratch (http://scratch.mit.edu/), which is friendly and interpreted and visual. Also free and open source.

    Reading the ClubCompy web site, they built something that is intended to be simple for kids to experiment, with no install, and thus is a "computer" interpreted in JavaScript. This seems like a nice idea. No real connection to BASIC or Logo, other than they want to achieve the simplicity and openness to experimentation that those languages represent. After giving it a look over, I like the fact that their language based on LOGO, but am not thrilled that they added LINE NUMBERS. I can't believe that it's a good idea to make kids learn about line numbers, with all of the associated complexity, rather than to use a simple text editor. The only reason that line numbers ever made sense is that back in the era when BASIC was invented, you couldn't assume a text editor, or even the ability to move a cursor on the screen (remember working on printing terminals?). But I think that limitation no longer applies. So while I like their goal quite a bit, I have a feeling that they would have been better off sticking with an existing simple language, such as python, lua, or even Logo.

    1. Re:Don't equate BASIC and Logo by chromatic · · Score: 1

      I can't believe that it's a good idea to make kids learn about line numbers, with all of the associated complexity, rather than to use a simple text editor.

      I've gone back and forth on that myself, but ultimately we're sticking with line numbers in the dialect we have there now for simplicity sake. You hit on this when you mention a simple text editor: either we implement that text editor to keep our zero-installation cross-browser footprint, or we allow people to use their own text editors and take the hit of setup and configuration.

      Further, then we have to find another mechanism to distinguish between immediate commands and commands to store to create a program or else explain the REPL concept early. We'll also have to explain using named labels or even user-defined functions.

      Remember, we're talking about teaching motivated eight year olds.

    2. Re:Don't equate BASIC and Logo by yomammamia · · Score: 1

      The days of the Z80 based Home PCs were the best for BASIC. Persuading or motivating a child to learn a written language by copying from the board can be difficult. However, teaching a child programming the same way was once easy. Typing in a basic program from a book was just another way to load a game.

      I started out like this from the age of around 7. You would be amazed how much you pick up just from copying like that and the line numbers do help with understanding. In fact I would argue that for someone very young and with no initial understanding of programming that GOTO and line numbers are far better as they are more explicit than functions. I totally agree, its horrible to have to write a program like that. But when I was 7 and read GOTO 50 the intention was immediately clear and the program's flow could easily be deduced. It's also worth noting that GOTO and line numbers more closely resemble what goes on under the hood. If I had to do the same for a more modern procedural language I wouldn't have found it so obvious. It would not be so clear that systemproc() and definedproc() are separate or change the flow of a program.

      I never had any intention of learning basic and never did in any big way. However, when I got something a little more substantial than a Z80 machine, thanks to the passive learning I received from loading programs from book into a Spectrum or an Amstrad CPC I was able to master any programming language I needed to use extremely quickly.

      This isn't really presenting the teaching merits of BASIC according to the teaching method you have in mind but I think it's a nice way to teach. Sadly this is no longer such a viable teaching scenario. Why would someone type in a tiny program that does very little when it takes less than a minute for their Nintendo DS to boot up a massive ROM cartridge?

    3. Re:Don't equate BASIC and Logo by walterbyrd · · Score: 1

      I can't believe that it's a good idea to make kids learn about line numbers, with all of the associated complexity, rather than to use a simple text editor.

      FYI: BASIC does not need line numbers, and hasn't for the last 30 years, or more. Unfortunately you are trashing a language that you actually know very little about.

    4. Re:Don't equate BASIC and Logo by dkf · · Score: 1

      Further, then we have to find another mechanism to distinguish between immediate commands and commands to store to create a program or else explain the REPL concept early.

      I don't know that you have to explain it. What is important is giving them something which will do what they tell it to immediately, i.e., a REPL or equivalent. A few obvious pitfalls that they'll have to navigate their way around aren't a bad thing either, so long as there's no lasting damage from getting it wrong. It's also good to minimize the gap between what they type immediately and what they do in a saved program.

      --
      "Little does he know, but there is no 'I' in 'Idiot'!"
  103. Give kids something they WANT to learn by Opportunist · · Score: 1

    What do kids want? That's the first question, because you cannot teach children something they do not want to learn. For reference, see schools. If you want your child to WANT to learn, give him something he likes.

    Now what do kids like? In general, at least in my experience, this can be summed up in a few key parameters:

    1. They like things that affect their world. They like to see that what they do has some impact on the world around them. Ever been in a train where some child keeps pressing that "stop at next station" button at every single damn station because he loves to see how the train reacts to it? How it makes the train stop (even though it's more an indirect result of them pressing it)? Kids like to see that their world acknowledges their existance.

    2. Kids like to show off. When they do something, they want to show that they've done it. That's one of the reasons kids like to draw, they can take that sheet of paper and show it around to everyone who wants (or doesn't want) to take a look. Later they might build something out of Lego or other things we give them to "build stuff" and we'll get to see what they built. So think twice before you buy your kid that Lego box, you'll have to admire the result!

    3. Kids like the idea that they've done something by themselves. If you ever gave your kids some model kits, you know what I mean. They want that sense of accomplishment, that they have completed something and that they have done some "good work".

    What I would hence suggest is not to "bore" your kids with programming languages that do not produce anything that affects their environment, anything they can carry around and show to unsuspecting relatives or anything you couldn't have done better. Especially when you're a programmer, your child will have a hard time stepping out of your shadow.

    My suggestion, as radical as it may sound, to introduce kids to programming and computers in general, is microcontrollers. They are the perfect combination of everything above and has a few additional goodies: They give them something that will affect their world, provided they learn enough about them to, say, create some blinking leds or control servos with them, it gives them something they can carry around and it offers them manageable projects that scale well when their skill increases.

    And besides programming, you teach your kids something about electronics, and once they learned the basics they can even start to create their own projects that actually have a goal they set themselves (important for kids, they are very hard to motivate for some abstract "learning goal"), and even small projects give them a great sense of accomplishment.

    You can even program most of those Cs in C these days, though I would actually suggest (radical that I am) that they start with assembler. Odd as it may sound, I think kids would have an easier start with it, since they're not set in procedural and OOP thinking as we are, and in general C assembler is easy enough and straightforward enough without the baggage that weighs down i386 assemblers (there's rather little to take into consideration with Cs, they have very small capabilities). That way kids also learn automatically the foundation of programming, why there is a stack and what it does.

    Yes, that will take them much longer to become OOP programmers. But kids have something we grown ups usually do not have in such extreme quantities: Time. When you start your child at age 10 with Cs, they have a decade before they have to be "productive". That's plenty of time for them to switch over to OOP and "higher level" languages later, and they will have a fairly easy transition, considering that Cs and assembler will have taught them a very important skill: Being observant to detail.

    --
    We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
  104. MOD PARENT UP by Pherlin · · Score: 1

    The smartest programmers I've met are the ones who know their low-level stuff. Until you understand the nuts and bolts you're just a part-swapping-monkey.

  105. Re:Use C# by SanityInAnarchy · · Score: 1

    Yes, and that's one of its stronger side. Using whitespace to delimit blocks of code is very natural to someone with no programming background.

    ...yes and no. Yes, it does help that it visually looks close to what it should...

    But a tab is different than a space, and that's going to confuse some newbies.

    --
    Don't thank God, thank a doctor!
  106. Re:Use C# by SanityInAnarchy · · Score: 1

    Ruby is a terrible language to teach programming, there is so much stuff that needs to be used responsibly.

    In what way is it different than any other language?

    Basic has GOTO. Java has ==. C and C++ have pointers, pointer arithmetic, memory allocation, etc, on top of goto and similar == problems.

    monkey patching and other stuff should not be an option for someone learning programming basics.

    Practically, it isn't. Someone learning programming basics likely wouldn't run into monkey patching.

    --
    Don't thank God, thank a doctor!
  107. Re:Use C# by SanityInAnarchy · · Score: 2

    I actually did think for myself when I rejected GOTO. I actually went back and read the "GOTO considered harmful" essay.

    Can you provide an example of when goto is appropriate -- in particular, when it's appropriate to use a goto rather than actually structured programming, or even a safer option like break, return, or throw?

    --
    Don't thank God, thank a doctor!
  108. Re:BASIC by Pogue+Mahone · · Score: 1

    I think the fact that high school maths teachers are recommending calculators at all points to what's wrong with maths teaching, but maybe that's just me.

    --
    Every bloody emperor has his hand up history's skirt [Peter Hammill/VdGG]
  109. Re:Use C# by shutdown+-p+now · · Score: 1

    But a tab is different than a space, and that's going to confuse some newbies.

    Personally I think they made a mistake in that regard, and should have outright prohibited a mix of tabs and spaces for indentation within a single file. In practice, though, it's not a big deal - everyone sane just uses spaces anyway, and most (all?) Python IDEs are configured that way out of the box. There's simply no way you can easily insert a tab in the middle of the code there.

  110. Re:Use C# by narcc · · Score: 1

    I actually did think for myself when I rejected GOTO.

    Did you reject GOTO as a way to forever avoid writing anything in assembly?

    I actually went back and read the "GOTO considered harmful" essay.

    Yeah, Dijkstra was *pissed* that Wirth changed the title. -- You know, because it misrepresents the content of the letter. (letter with original title)

    Can you provide an example of when goto is appropriate -- in particular, when it's appropriate to use a goto rather than actually structured programming, or even a safer option like break, return, or throw?

    Why, Yes, I can. How about an example from the Linux kernel which is very well defended by Linus Torvalds? Good enough for you?

  111. You may be right... by Invisible+Now · · Score: 1

    I don't have my dog eared copy with me...

    (but Newfies are big, smart, friendly, and loyal dogs!)

    --

    "Knowing everything doesn't help..."

  112. Re:Use C# by Hognoxious · · Score: 1

    One, to avoid repeating cleanup/logging code when an error occurs within a deeply nested conditional. There are many who disagree with the use (or overuse) of exceptions, especially when used to control normal flow rather than catching true errors.

    Two, when you're writing in assembler.

    P.S. reading an essay, especially a polemic one, hardly counts as thinking for yourself.

    --
    Confucius say, "Find worm in apple - bad. Find half a worm - worse."
  113. Re:Use C# by FrootLoops · · Score: 1

    I was careful to say "you never had to define your own classes", instead of "VB6 doesn't allow you to define your own classes". I've used class modules (though they suck, compared to other language's classes). By "OOP-lite" I meant the programmer could avoid dealing with most of the complexity of OOP very easily, not that it was entirely absent from the language.

    Nasty code was certainly a problem of mine. Some of what I wrote was just awful. I think a whole bunch of that was because I taught myself and had nobody to review my work, which isn't the case in the classroom-style setting of the original question.

  114. Re:BASIC by Urkki · · Score: 1

    10 comefrom 30
    20 print "hello"
    30 rem this line is for compatiblity with different comefrom implementations

  115. Re:BASIC by Merls+the+Sneaky · · Score: 1

    If all you have is a hammer everything looks like a nail.

  116. Re:BASIC by Hognoxious · · Score: 1

    Clearly, he provided his own buggy handler for the 'out of shampoo' exception.

    Maybe it was just a really really big bottle?

    --
    Confucius say, "Find worm in apple - bad. Find half a worm - worse."
  117. Re:BASIC by Anonymous Coward · · Score: 1

    No, it probably means that most people think procedurally instead of functionally.

    Most people learn to program procedurally instead of functionally or logically. Actually, now it's shifted to OOP and hybrid languages with functional features. Funny how once upon a time OOP was in the same boat as functional, logic, stack or array-based languages. Goes to show that people can change how they think about programming. Actually, it's funny how people used to write in machine code, without any higher level abstractions.

    It also probably means that most everyday problems are procedural/imperative.

    Or it means that there is more than one way to solve most everyday problems.

    Kinda like what goes on between pure and applied science and math factions.

    Wait, so applied science doesn't utilize math or theoretical science?

    "Lisp is superior to everything" - oh hell no. That's like saying a hammer is superior to a screwdriver.

    Right, but it's interesting how many languages have been influenced by Lisp. Including the imperative and OO languages of today. Most languages are now hybrids with features initially found in Lisp. For example, It was funny when Sun bragged about Java being a garbage collected language. The first Lisp implementation had that in 1960. For that matter Smalltalk had everything Java had and more in the 70s.

  118. Enterprise Java Beans by cowboy76Spain · · Score: 1

    I mean, after having them spend a couple of months:

    • Explaining the theory
    • Configuring IDEs (and plugins)
    • Installing and configuring the server/container
    • Trying to compile / package
    • Find the JNDI name of it

    only the most brave, geeky, girlfriend-less boys will be ready to join us....

    --
    Why can't /. have a rich-text editor? Editing your own HTML is so XXth century.
  119. I disagree about the notion that once you learn by Archeleus · · Score: 1

    BASIC, you are fucked. It's not like that since I was interested in BASIC as a kid and did pretty well at it too. Then I moved on to C/C++/Java/Python/Perl and all that and I can code well. I think that it has even helped me to understand some languages like assembly more.

    --
    http://archeleus.com/blog
  120. Re:Use C# by mwvdlee · · Score: 1

    If within 15 minutes of teaching OOP you're already discussing patterns, aggregation, base class calls and MVC, you're probably moving too fast. Okay, perhaps not base class calls, which are pretty fundamental.

    All those concepts follow only after you discover that OOP isn't a magical bullet either, and can get you in just as big a mess as procedural code. COBOL has structured methods and patterns, so does OOP, but that doesn't mean you should start out teaching those before teaching what those methods and patterns actually apply to.

    I'm assuming this was "OOP for beginners".

    --
    Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
  121. Re:Use C# by mwvdlee · · Score: 1

    Yes, and that's one of its stronger side. Using whitespace to delimit blocks of code is very natural to someone with no programming background.

    ...yes and no. Yes, it does help that it visually looks close to what it should...

    But a tab is different than a space, and that's going to confuse some newbies.

    Which, IMHO, makes it bad.

    Whitespace should be used to make sourcecode easier to read. Forcing a specific way of using whitespace makes it harder as I'm unable to line up things to show relationships or patterns in code.

    Should a programming language give you the flexibility to creaty both true beauty and utter shitpiles or should it force mediocrity all the time?

    --
    Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
  122. Re:Use C# by nzac · · Score: 1

    Monkey patching is probably a bad example when i think about it.

    The main reason i was thinking of is that there are multiple ways to do the same thing. Some generalized example would be:
    Different syntax for writing blocs one or multiple lines
    For/while loops can use *.each, num.times ... can be use to generate the same resault (where to use each one is not immediately obvious if your witting your first program)
    Procs and lambdas

    These make the code readable as English with poor syntax but hide basic coding structure.

    Mainly python is a similar language but just so much better for teaching programming, i can see no reason to pick ruby. I prefer ruby as a language because of the choices but they are not beneficial to new programmers

  123. Re:BASIC by TapeCutter · · Score: 1

    Output:
    Who is poster?plover
    plover is a jerk
    plover is not a jerk

    --
    And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
  124. Re:BASIC by Linker3000 · · Score: 1

    Surely the important question is whether to edit your BASIC code with vi or emacs?

    --
    AT&ROFLMAO
  125. Learning the joy of programming in less than 1hr by inf0stud · · Score: 1

    I've taught five groups of 8 to 15 "work experience" kids from local high schools, year 10 to year 12 (15 to 18yo), using http://squeakland.org/ Etoys. Most of them hate computing classes they do in school: learn how to use Office. I tell them the visual language isn't designed for them but kids 6yo and up. Then I teach them the simple car (turtle-like), the car with a connected steering wheel (functional programming), and then the car staying on track by sensing fences in about 40 minutes. Zero programming experience (in most cases) to environment sensing (I call it AI) programming in less than an hour.
    One bright kid figured out how to spawn cars and managed to create a race.

  126. Basic evolved too. by Anne+Honime · · Score: 1

    Pick a good look at something modern like Gambas. All Basic goodies, in a GUI-friendly package.

  127. Learn Basic...and ur Fucked? by tonywestonuk · · Score: 1

    Totally disagree. Iearnt basic back in the 80s - Im a Java programmer now, I dont think its hindered me at all.. Infact, i built a framework based around what I learnt back then, which I use in all my projects, and I challange any java programmer to write things as quick as I can nock up using it:

    import static basic.Basic.*;
    public class HelloWorld {

            static{
                    Object[] pgm = new Object[1000000];

                    pgm[10]= print("Hello World");
                    pgm[20]= Goto(10);

                    run(pgm);

            }
    }

  128. Re:Use C# by smash · · Score: 2

    The thing is, BASIC encourages use of GOTO, rather than being an unusual thing to use when unusual circumstances call for it. If they call for it.

    Using goto everywhere creates code that rapidly becomes an unreadable, unmaintainable mess for anyone else trying to follow it.

    --
    I run: Windows, OS X, Linux, FreeBSD. Just because you have a hammer, doesn't mean everything is a nail.
  129. Re:Use C# by Yetihehe · · Score: 1

    State machines in embedded processors? I've actually had to use GOTO recently just for this one thing so that program would fit in memory, using functions would be too wasteful.

    --
    Extreme Programming - Redundant Array of Inexpensive Developers
  130. Re:Use C# by serviscope_minor · · Score: 2

    And you avoid learning GOTO.

    What the hell is it with the BASIC detractors just making stuff up? BASICS with full structure have been available since 1982. That's 29 years ago. Seriously, loose the mullet and the walkman and join the present day.

    --
    SJW n. One who posts facts.
  131. Re:Use C# by badpazzword · · Score: 1

    Whitespace is only meaningful when it separates statements (newline) and it structures code (spaces/tab for indentation). Although the Python coding style suggests against lining it, you can line things up to your heart's content.

    This is legal Python:

    def my_func_params_let_me_show_you_them(
                foo = 1,
                bar = False,
                egg = None,
                spam = [][:],
            ):
        pass

    --
    When ideas fail, words become very handy.
  132. Re:Use C# by badpazzword · · Score: 1

    Yes, I know mutable objects are a no-no as a default parameter; copying doesn't help. I said it was legal python, not good python.

    --
    When ideas fail, words become very handy.
  133. Re:Use C# by SanityInAnarchy · · Score: 1

    Did you reject GOTO as a way to forever avoid writing anything in assembly?

    Perhaps. I certainly reject it when I'm not forced to write assembly.

    it misrepresents the content of the letter.

    I'm not sure how the original title makes it any better.

    Good enough for you?

    Probably not, but let's see:

    they are often more readable than large amounts of indentation.

    Solution: Use two spaces to indent.

    But I think the most telling bit is this:

    That said, I have used exactly two "goto" statements in all the lines of C,
    C++, Fortran 95, and (yes) COBOL I've written since leaving BASIC and
    Fortran IV behind. In one case, a single "goto" doubled the speed of a
    time-critical application; in the other case, "goto" shortens a segment of
    code by half and makes the algorithm much clearer. I would not use a goto
    willy-nilly for the fun of it -- unless I was entering an obfuscated code
    contest ;)

    So, I take it back -- there are cases where a goto might be nice. However, they do seem to be about that rare, so I wouldn't want them in an intro to programming any more than I'd want pointers.

    --
    Don't thank God, thank a doctor!
  134. Re:Use C# by SanityInAnarchy · · Score: 1

    One, to avoid repeating cleanup/logging code [c2.com] when an error occurs within a deeply nested conditional. There are many who disagree with the use (or overuse) of exceptions, especially when used to control normal flow rather than catching true errors.

    Why is a goto better than an exception in this case? Seems to me that things like break, return, and exceptions are effectively goto, but somewhat more structured and safe.

    Two, when you're writing in assembler.

    Fair enough.

    --
    Don't thank God, thank a doctor!
  135. Re:Use C# by digitig · · Score: 2

    Yeah, ideologically Python is all wrong and should be terrible. Trouble is, when you actually come to use it, it's great. So religiously you're right, scientifically the post you replied to is right. Evidence beats dogma.

    --
    Quidnam Latine loqui modo coepi?
  136. Re:Use C# by digitig · · Score: 1

    Personally I think they made a mistake in that regard, and should have outright prohibited a mix of tabs and spaces for indentation within a single file. In practice, though, it's not a big deal - everyone sane just uses spaces anyway, and most (all?) Python IDEs are configured that way out of the box. There's simply no way you can easily insert a tab in the middle of the code there.

    And Python (optionally) warns you if you mix them anyway. Just teach that as a mandatory option.

    --
    Quidnam Latine loqui modo coepi?
  137. Re:BASIC by digitig · · Score: 1

    So those who are insecure about their masculinity can use Scheme.

    --
    Quidnam Latine loqui modo coepi?
  138. Re:Use C# by cstacy · · Score: 1

    And you avoid learning GOTO.

    What the hell is it with the BASIC detractors just making stuff up? BASICS with full structure have been available since 1982. That's 29 years ago.

    I think it's a little longer than that: the BASIC on the HP3000 had structured programming (and other modern features), in the 1970s.

  139. Re:BASIC by digitig · · Score: 2

    Editors are for wimps. Real programmers use Hollerith cards.

    --
    Quidnam Latine loqui modo coepi?
  140. Haskell by Vahokif · · Score: 1

    At my uni, they assume we know no programming to start with and go from high-level to low-level languages. We start with Haskell, then Java, then C++ (and other languages). Couldn't this work for kids? There's nothing intrinsically hard about Haskell, assuming you have no imperative biases, and you learn all the good habits before you get to use a messy language where you can make stupid mistakes.

  141. Re:Use C# by serviscope_minor · · Score: 1

    I think it's a little longer than that: the BASIC on the HP3000 had structured programming (and other modern features), in the 1970s.

    OK, I guess he needs to loose the flares and ghetto-blaser, then.

    I'm not an expert on BASIC history. I was thinking of BBC basic, which I used a lot. It debuted in '82. It doesn't surprise me much that it wasn't the first BASIC with structure.

    --
    SJW n. One who posts facts.
  142. Reminds me of my color computer 2 days... by CFBMoo1 · · Score: 1

    > 10 INPUT "Pick a noun: ",A$
    > 20 INPUT "Pick a verb: ",B$
    > 30 CLS
    > 40 PRINT "In Soviet Russia, "; A$ ;" "; B$ ;"'s you!"
    > LIST
    10 INPUT "Pick a noun: ",A$
    20 INPUT "Pick a verb: ",B$
    30 CLS
    40 PRINT "In Soviet Russia, "; A$ ;" "; B$ ;"'s you!"
    > RUN
    Pick a noun: basic
    Pick a verb: program
    *Post clears screen*
    In Soviet Russia, basic program's you!
    > 5 REM Not exactly my old light cycle program after watching Tron back then but still fun!
    > LIST
    5 REM Not exactly my old light cycle program after watching Tron back then but still fun!
    10 INPUT "Pick a noun: ",A$
    20 INPUT "Pick a verb: ",B$
    30 CLS
    40 PRINT "In Soviet Russia, "; A$ ;" "; B$ ;"'s you!"
    > _ *blinking*

    --
    ~~ Behold the flying cow with a rail gun! ~~
  143. Re:Use C# by BeanThere · · Score: 3, Informative

    And you avoid learning GOTO. I don't care how easy it makes initial learning, it's building bad habits that you're going to spend years killing.

    This is a common criticism - that you will spend 'years' killing the 'bad habits' you learned from using GOTO. I don't buy it. When I learned programming (on BASIC, back then, as a kid, that was 'the' language to learn on), and I progressed from GOTO's to subroutines, it didn't take me "years" to undo the "bad habit". On the contrary, the moment that I understood I had a better tool for so many jobs, I immediately started using that instead. Why would a programmer keep using a tool if it's much worse for the job? It just doesn't really happen. As soon as your programs get longer than a few hundred lines, or you want to start re-using code, you need something better than GOTO anyway ... it's really only useful on a very small scale, it is naturally self-limiting in use.

    Also, I think GOTO's have one advantage for a learning language aimed at small children: It's easier for a child to learn and understand, as a building block / stepping stone toward more complex things. For some reason, I even remember this learning process (using basic, that was popular then) when I was a small child, on our 48K ZX Spectrum ... GOTO's were easy and obvious, but I recall seeing these weird GOSUB things that seemed more abstract somehow. But, once they were explained to me, it wasn't that bad.

    Finally, any good programmer needs to do significant amounts of assembler at some point in his life, and you're gonna be doing lots of JMP's there anyway, and yet nobody considers that 'learning bad habits', because most people agree that learning assembler makes you a better high-level coder too, and there are reasons for that.

    The criticisms against GOTO are largely exaggerated.

    I have spent probably years cleaning up and maintaining other peoples really bad code. And yet, of all the horrors in the code I had to maintain, I don't recall once ever encountering a "GOTO problem" in the real world, where any programmer had made a big mess because they had learned GOTO's. Never. I've never seen it, and I wonder if anyone here has actually seen this mythical disaster that learning GOTO's supposedly leads to. There are many other bad habits that cause FAR more damage in real-world programming, and yet nobody even cares to teach those in formal Comp Sci or Engineering programs.

  144. Re:Use C# by BeanThere · · Score: 1

    The thing is, BASIC encourages use of GOTO, rather than being an unusual thing to use when unusual circumstances call for it.

    But that doesn't matter, because programming itself naturally self-limits the use of GOTO. Why? Because they are only 'easy and useful' when your code is on the scale of hundreds of lines. As soon as you start writing "real" programs, with proper code re-use, GOTO's naturally fall flat all on their own and you NEED to use subroutines.

    Nobody in the real world naturally encounters large numbers of programs that are only a few hundred lines long. This is something that by definition happens only in schools teaching programming n00bs.

    If you are going to spend the rest of your life developing and maintaining several-hundred line programs written by children, then sure. But in the real world, this mythical threat simply does not exist.

  145. BASIC is not the problem by Noah69 · · Score: 1

    Like for so many others, BASIC was what got me into programming when I was young. It was easy to open up a game I just played, change a line and - whoah - it actually showed the change right the next time I started the program, even if it was just replacing a word or a variable to give me two extra lives.
    The sheer ease of creating something myself without spending hours reading a wiki or creating a dozen "Hello World" applications was what fascinated me.

    Does BASIC teach you things that are no longer used in modern programming? Absolutely. But any reasonably smart person should have no problem adapting and understanding that when moving on to another language, it does not corrupt your ability to work in other environments.

  146. Organiser II by cheros · · Score: 1

    I started with the Psion Organiser II, more or less the world's first PDA. Amazingly, some of the stuff I wrote is still out there :-).

    Personally, I think a device like that would be the best for teaching kids how to code, for a number of reasons:

    1 - it is portable. You can play with it wherever you are, and playing is what is needed.
    2 - it is always on. Resume wherever you left off (this is better nowadays - the Org II was singletasking, so you had to save code before you could do something else)
    3 - it is a simple programming environment. OPL (Organiser Programming Language) evolved to add graphics, but at its most basic (pardon the pun) it was a sort of BASIC with touches of Pascal (procedures, subroutines, typed variable declaration) which made a distinction between source code and "translated" code to run.
    4 - you could access the built-in flat file databases. It had a simple database mechanism that you could also reach with your programs, so you could mess around with the built-in database function. As a matter of fact, I miss this simple database mechanism in "modern" operating systems and PDAs, TapForms on iPhone is about the closest I got to it..
    5 - it had growth stages. Once you got familiar with the device, you could progress to machine code, bit by bit. You could call certain functions, mess around with buffers - lots of stuff to play with once you knew the first principles. And crash recovery was a matter of removing the battery (which also taught you the importance of saving your work on the memory packs).
    6 - it had expansion devices. I learned about barcodes because you could plug in a reader to the Organiser. There was a printer, a mag swipe reader - all this stuff taught me about the technologies we still use.

    I agree that "modern" computers are too complex for beginners. I built an Apple II, sorry, ][ :-). I got my first PC because I was given one that was broken (so I learned about MFM drives), but I really got into programming (for a while) with the Organiser because I could change the way it worked to suit me, and it was always around. No need to boot, no great battery dependence (one 9V battery lasted for weeks), and it forced me to memorise structures because a 2 line 16 character display is a rather small window (the later 4 line 20 character display was luxury :-).

    If there was a way to bring OPL to a platform like Android or the iPhone I think it would do a great deal to get kids going.

    By the way, keeping structures in my head turned out to be a good exercise: it made the film "Inception" easy to follow :-).

    --
    Insert .sig here. Send no money now. Owner may sue, contents will settle. Batteries not included.
  147. List handling by pjt33 · · Score: 1

    The list handling is great if someone teaches you what it's for. I taught myself BASIC and Logo from the Amstrad CPC6128 manual, and later used that manual as a language reference to implement a Logo interpreter in Blitz BASIC on the Amiga - but I didn't bother with the list handling functions, because I couldn't see the point of them. It was only when I was taught SML at university that I realised how powerful they were.

  148. Re:Use C# by ta+bu+shi+da+yu · · Score: 1

    Someone mod the parent up.

    --
    XML is like violence. If it doesn't solve the problem, use more.
  149. Re:Use C# by arth1 · · Score: 1

    Lining up the LHS is one thing.  How about lining up the RHS?  Or components of a statement?  Like the below pseudocode?

    int  x      = 0;
    int  furple = 1;
    long foo    = onevariablename
                + anothervariablename
                + athirdvariablename
                ;

    How would you do something like that in python?

  150. Re:BASIC by ta+bu+shi+da+yu · · Score: 2

    OO has, time and time again, led to more bloat and more confusion due to so much abstraction rather than direct commands. Want to reuse code, here's a thought, use copy/paste. Having to find objects and then discover their methods is a waste of time, a rich api with built-in ready to run statements and functions that only require simple plug-in values is the way to go.

    Oh that's right. Copying and pasting is FAR more efficient. Cause when you find a bug in the original code, there's nothing easier than locating all the spots where you copied and pasted that code to make similar modifications.

    --
    XML is like violence. If it doesn't solve the problem, use more.
  151. Re:I suggest teaching C by ledow · · Score: 1

    Just going by your simplest programs, and I know you mentioned this:

    Your main function is declared incorrectly (two points - no return value and no parameters).
    You didn't include stdio.h

    Almost all C compilers will thereby reject even that three-line C source program with at least one and maybe 3 errors (maybe 1 or 2 warnings instead). All those warnings/errors will say different things and point out different lines with different parts of them being the problems (smart ones might know the include is missing, other might just call it an undeclared function, insufficient prototype etc.). You've just scared off any teacher and any kid wanting to learn it. However, the BASIC is syntax-perfect and will execute on any conforming BASIC interpreter. You don't even need the line number. THAT'S why BASIC wins when teaching kids (especially a roomful of kids).

    It depends who you're aiming at but this is EXACTLY why C isn't a good language to start with. In BASIC you don't *need* unexplained mysterious boilerplate. You can explain every damn character and every keyword of the language in an afternoon to a bunch of 11-year-olds (or younger). Even they will typo when copying that C down (colons instead of semi-colons, etc.) - hell, they'll typo the BASIC to death too, but to a less degree - and if you are expecting them to copy/paste, that's a bit pointless (it's like saying "You can write French!" by copying/pasting French words into a document).

    BASIC can be learned by a 7-year-old. BASIC can be *self-taught* by a 7-year-old under their own attention span, from a book, with no adult help, and no previous experience. I know. I did it. C cannot (I work in schools, trust me). You have to have a bright kid, who knows what they want to do, and is dedicated enough to do it and see it through no matter what, and quite an extensive C reference / referee.

    C is also an absolute PIG to get a working IDE / compile environment that the kids can take home to carry on with and it's all just "black-boxing" things that you think are too complex in order to make things simple (think about it - start with simple and get complex, or start with complex and have to force it into a simplification? How do you prefer your computer AI, for example? Starts easy and progressively gets cleverer, or is insanely perfect but deliberately makes huge mistakes - like standing still 99.9% of the time at the beginning of the game?). You don't need to black-box the complex stuff, it's only there for those people who NEED to use it anyway (even the semi-colons in C are pretty unnecessary, really). If you're not going to write programs long enough to include files yet, you don't *need* the inclusion commands, for example, and using them means explaining them or teaching "magic". Every kid in that class will be include'ing stdio.h in every program for the rest of their lives and have no idea why because you *won't* have time to explain every one of the little foibles of tiny programs like that. With that C program, suddenly you're saying "Don't worry about this bit" rather than "This is a complete, valid, perfect, program that will work anywhere."

    BASIC was designed to be taught to children. Most people who started programming in my generation did so on BASIC as children. A lot of them taught themselves. There's nothing *wrong* with BASIC for kids. Sure, when they're older, teach what you like - you *can* teach a young adult any language you like and they'll pick it up if they have the vaguest interest. But for *kids*, BASIC wins hands-down every time, still after 40 years. Just don't learn ONLY BASIC. That's the mistake people should berate you for, it's like using a crayon-only for the rest of your life instead of learning to write with a biro - sometimes a crayon will do to jot down a note even today but you shouldn't be writing your CV (resume) with it.

    Personally, I did BASIC -> Z80 assembler -> (moved into secondary school) FORTRAN -> PASCAL -> x86 assembler -> lots of others

  152. why teach kids programming...? by braindrainbahrain · · Score: 1

    ...at all, in any language? Is this the modern equivalent of a previous century's idea of a good education, something like all kids should learn Latin and Greek?

  153. Re:How *not* to teach programming by backwardMechanic · · Score: 1

    I find an automobile analogy is called for: If someone wants to learn to drive, do you start by explaining the operation of internal combustion engine? Compression ratios maybe? Many of the problems programmers of a 'certain age' have come from trying to outguess the compiler/interpreter. A programming language should be designed to express the problem you want to solve, not how the particular processor will actually do it. Logo, for example, is a very long way from assembly code, but a useful teaching language.

  154. Re:Use C# by Glonoinha · · Score: 2

    When the language is designed to have code run primarily in a linear fashion and doesn't (generally) nest the code into more than one layer deep, then a conditional GOTO is just the ticket for flow control. It's not 'harmful' any more than a hammer is 'harmful' - give either to a ten year old boy and he's going to make a mess, but used in proper context neither is particularly bad.

    The funny thing is - all the GOTO bashing by the same people that salivate at the opportunity to throw random exceptions in their code, have them bubble up the call stack and get caught three calls up the stack. Guess what folks : that's the most gnarly and evil reincarnation of the GOTO most of us seasoned professionals have ever seen.

    As for why BASIC is such a good beginners language - it has nothing to do with any of the above. It's about instant gratification - when newbies don't know the first thing about what makes a computer tick, being able to copy-type a few lines of text from a book and run it, then start tweaking it and seeing what the changes do - THAT is what hooks the new developer and gets his mind working. All this talk about OOP and high level languages - just scares them off. Get the fundamentals (the way, way low level fundamentals like what a variable is, that it holds a value, that the values can be changed and displayed on the screen, that you can do math on the variables) out of the way first - like showing a kid how to hold a hammer, that you only use it to hit nails on the head to drive them into wood, how the nails hold pieces of wood together - and BASIC is perfect for demonstrating those concepts without all the infrastructure surrounding bigger languages.

    (And I can't believe I just defended the use of GOTO. Damn.)

    --
    Glonoinha the MebiByte Slayer
  155. Re:BASIC by ta+bu+shi+da+yu · · Score: 1

    LOL! love it

    --
    XML is like violence. If it doesn't solve the problem, use more.
  156. Re:Use C# by arth1 · · Score: 1

    Can you provide an example of when goto is appropriate -- in particular, when it's appropriate to use a goto rather than actually structured programming, or even a safer option like break, return, or throw?

    There are many examples, but my favourite is when program execution is nested so deep that you save a LOT of time by cutting the gordian knot with a well-placed goto intstead of having to roll back hundreds of levels.

    Another good reason is to avoid unnecessary indentations. If I had a dime for every time I saw code like

    if (testopt("-h")) {
        showusage();
    }
    else {
        rest
        of
        program
        here
    }
    return;

    I'd be bloody rich.

    Then there's compound tests where combinations of !, && and || give you a headache. Splitting them up and using a goto can make it much clearer.

    It's also worth noting that "break" is a scope-limited goto, yet few have issues with it. Possibly because it wasn't invented when the essay against GOTO was written. But nothing prevents you from replacing the break with a goto and a descriptive label, which can often make it much CLEARER what was intended. If the break is kosher, then how can a goto that replaces it not be?

  157. Re:Use C# by yomammamia · · Score: 1

    GOTO is basically jmp. Don't learn GOTO, you can never learn assembly.

  158. Re:Use C# by Bengie · · Score: 1

    He was a "team lead" doing a talk about OOP to other professional programmers at this work. I think 15min is plenty time for his audience.

    I made the assumption that he was doing a presentation to other programmers at work because I doubt he was doing an OOP presentation to Sales/IT/Admins.

  159. Think about why you would want to use any language by Targon · · Score: 1

    The only real advantage to BASIC is that it allows for some very quick and dirty code to do some VERY VERY basic things. From that perspective, BASIC is better for showing simple concepts such as a "for" loop, or the use of variables. From there, Pascal is a good language to teach programming structure, since it is a bit more obvious about where the beginning and end of each block of code is for loops(begin/ends that are more obvious than {}). C of course has a similar structure to Pascal, but is a bit less verbose, meaning it can be harder to read, and you can miss a } and have problems with tracking down why something is not working properly.

    The big issue is in the introduction to programming, and what is the best way to introduce CONCEPTS. Learning how to program when you are 12 or older would be a lot different than learning when you are younger. So, BASIC to teach some simple stuff early on, but then QUICKLY move to either Pascal or C to teach structured programming.

  160. my favorite program by billmarrs · · Score: 1

    10 PRINT "BILL RULES "
    20 GOTO 10

    I typed some slight variant of this program into many a TRS-80 on display at Radio Shack as a youngling.

  161. Re:Sorry but it's not proper BASIC by dingen · · Score: 1

    ' is not an apostrophe. ` is.

    --
    Pretty good is actually pretty bad.
  162. Basic == Bad Habits That Last A Lifetime by assertation · · Score: 1

    Almost every time I have found endless columns of code, even written in OO languages, it has always been the case that the programmer responsible learned programming with Basic.

    In today's programming world it just teaches people bad habits that they carry across a career.

    If you want a kid to learn programming on their own, outside of a class, send them to python.org where they even have materials for teaching programming. I don't know if the results will be better beyond starting them off with a modern language still in use, but the results can't be any worse as far as the bad habits of people weaned on Basic tend to go.

    1. Re:Basic == Bad Habits That Last A Lifetime by walterbyrd · · Score: 1

      Specifically, what bad habits? I know BASIC, and Python, and I can tell you that Python has as many oddities as any other commonly used language.

      Learn Python and you learn that whitespace is always significant, right?

      In Python, variables can be changed in the background, without you explicitly changing them.

      Python does not have records, or arrays, and "variables" in python are used in such an odd manner, that they hardly deserve to be called variables.

      Should you really learn that "everything is an object?" Might not be a good mindset to have if you want to learn C later on.

    2. Re:Basic == Bad Habits That Last A Lifetime by assertation · · Score: 1

      Walter;

      Being snarky is the general currency on slashdot, so I want you to know I mean no disrespect.

      Isn't writing solid walls of code that go on for pages in a single function bad enough?
      There aren't too many languages left with a goto statement or something similar, but the programmers I've met who weened on Basic also tend to overuse that feature.

      I understand and agree with your point about the use of white space in Python, but I also think it is a good thing. If a young programmer goes on to never use Python again at least they will have a respect for how their code is formatted which will make their code easier to maintain and if it is one thing I have learned is to never think of screwing the maintenance programmer over because there is a good chance it may just be you :).

  163. Re:Use C# by gl4ss · · Score: 1

    understanding goto is essential, so sure it should be taught. it's a pretty understandable concept too. and you should know probably at some point down the career that someone else might modify your delivered product to do goto style jumps.

    and nothing wrong with basic, I started with qbasic and some decade old basic books I loaned from the library(this was probably around ~92-93). also what's fantastic about qbasic is the built in help of all commands(some of them could have had better use cases documented there though).

    once we managed to copy a c compiler, it changed everything of course. you see, if you do a line drawing algo on a 386 with qbasic and then with c the difference is so obvious that you don't want to go back to basic.

    now what happened later to me was that in the university the coding classes focused way too much on late c++ features and the universitys own hastily invented best coding practices, which in all practicality weren't that practical(whilst the advantage I had when moving to paid coding, was that I actually had to use older frankenstein compilers). which is actually a lot of what in my opinion is wrong with how programming is taught, too often inqualified teachers just teach a certain way of doing things, usually because that's in their teaching material and they don't have that "can do" hacker attitude towards it, also, in the case of the university here, too much was put into what the world would be in couple of years, so they taught bleeding edge c++ features that nobody was actually using or which nobody actually has good opinions if they're useful or not - but teaching of the history would have painted them(faculty) as losers, but it's the stories like how basic was first done that inspired me into getting more into programming and computers in general, that CAN DO attitude and then just doing it and providing a real, useful tool.

    what basic is fantastic though for is coding on paper with a pen! and then later typing it in or parts of it. it's also quite easy to follow from source. which I guess was nice back when you might not have had your own computer.

    --
    world was created 5 seconds before this post as it is.
  164. Re:Use C# by T.E.D. · · Score: 1

    Goto provides for the natural expression of a state-machine. The most common example of that is in lexical analysis. Look at the output from LEX sometime; it is chock full of gotos. Most lexical analyzers are done the same way. So every time you invoke your compiler, you probably are exercising goto-laden code.

    Some of the more dogmatic try to get around it by using a case statement in a loop (with an enumeration or something controlling the current state). But really the internal structure of the code flow there has nothing whatsoever to do with that loop, and artificially imposing that on it just obscures the state machine underneath.

  165. Re:BASIC by Viol8 · · Score: 1

    "While "right tool for the job" is a nice sentiment, it is actually one of the easiest things to say for those that know close to nothing and actually have very little knowledge of the available tools"

    Either you're a piss poor troll or you're full of a boatload of arrogant crap.

    "quite a bit of real world programming done in Lisp"

    Compared to languages like C++, C#, Java, Cobol etc the amount of real world coding done in lisp doesn't even register. I'd suggest you take a tour into the real world occasionally. In the meantime I think the lift back up to your ivory tower is waiting...

  166. Tabs vs. spaces by gumpish · · Score: 1

    In practice, though, it's not a big deal - everyone sane just uses spaces anyway

    Really? Why? After all, tab is THE indentation character.

    Is this about people who are too lazy to change their tab stops complaining?

    Well fuck them.

    1. Re:Tabs vs. spaces by shutdown+-p+now · · Score: 1

      Really? Why? After all, tab is THE indentation character

      No, it's not, actually. The original purpose of tab stop is to neatly align columns of numbers of varying length.

      Is this about people who are too lazy to change their tab stops complaining?

      The reason why using tabs for indentation is bad is because it doesn't really buy you anything, since a particular tab size is forced regardless if you write any comments on the same line of code, and try to align those. Or align variable declarations. Or many other things. The only difference with spaces at that point is that it's possible to open a file with tabs with a wrong setting and get messed up layout, but a file with spaces will always open the same.

  167. Re:BASIC by mswhippingboy · · Score: 1

    Ummm... make up your mind.
    This code would print (if "plover" was input)

    plover is a jerk
    plover is not a jerk


    I agree with your statement however. To submit that if someone learns BASIC their doomed and can never learn anything else is just, well "stupid".

    I started out with BASIC and the maligned GOTO style of programming helped ease my transition to assembler. From there I moved on to structured programming in Fortran and COBOL and eventually C, then OOP when C++ and Smalltalk were available.
    No knowledge was wasted and I think it's just as hard for someone starting out with Java/Python/Ruby/(your fav HLL) to fully understand what goes on at the level of the bare metal.

    --
    Sometimes the light at the end of the tunnel is the headlight of an oncoming train.
  168. Re:Nice slashvertisement, what about Microsoft Kud by Marxist+Hacker+42 · · Score: 1

    Kodu isn't Code.

    It's visual programming. It teaches something utterly different. The real brilliance of ClubCompy is the magazine- I fondly remember coding games from magazines, it's how I learned programming.

    And they missed the Kickstarter deadline. Which is sad, because they offered something unique.

    --
    SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
  169. Re:Use C# by V+for+Vendetta · · Score: 1

    I think Ruby fits that bill better than BASIC. Starts out without needing the baggage, but when you're ready for structured programming and objects, it's all right there.

    Well, just because the BASIC dialects you know don't do that, doesn't mean they don't exist. Have a look at PowerBASIC, for example. It lets you either do it the good old "structured" way or the OOP way.

    It also has tons of other, nifty features, like inline assembler, pointers and all the stuff you'd expect from a full blown compiler.

    And you avoid learning GOTO. I don't care how easy it makes initial learning, it's building bad habits that you're going to spend years killing.

    Again, PowerBASIC gives you the choice. Either you go with the traditional BASIC error handling (On Error Goto) or you can use exception handling (Try/Catch/Finally).

    In my opinion a key point which makes BASIC great as a beginner's language is readability. It's more or less plain english and stays away from all that curley bracket/semicolon stuff. An If/End If-block in BASIC is way easier to spot and understand for a beginner than hunting down a closing "}" (or missing ";").

    And no, I'm not affiliated with PB in any way, I'm just a happy and satisfied user who often smiles when typical BASIC cliches come up.

  170. Re:Use C# by rayd75 · · Score: 1

    I think it's a little longer than that: the BASIC on the HP3000 had structured programming (and other modern features), in the 1970s.

    If a tree falls in the woods.... Seriously, are there any real first-person witnesses to a HP3000 with BASIC actually installed? Granted, I came into the MPE game pretty late, but as I recall, getting BASIC running involved a trip to a far away land, climbing to the peak of a mountain to get tape reels blessed by monks, and forging disc platters in the fires of a volcano. I might be forgetting a step, but I remember it wasn't on the machines by default and getting it running wasn't something you'd care to do.

  171. Re:Use C# by grumbel · · Score: 1

    Can you provide an example of when goto is appropriate

    Just go and look at C code, such as the Linux Kernel, it is full of gotos. The way it is used there is simply as form to avoid code duplication for cleanup after errors, kind of like a 'finally' or 'throw/catch' in Java. Something like this:

    {
        fd = open(file);

        if (stuff_goes_wrong)
              goto close_file;

        if (other_stuff_goes_wrong)
              goto close_file;

        mem = malloc();

        if (other_stuff_goes_wrong)
              goto free_mem;

    free_memory:
        free(mem);
    close_file:
        close(fd);
    }

    In C++ you could RAII to accomplish the same thing, but in C you don't really have many other options that lead to such nice code.

  172. Re:Abstraction == Good by anegg · · Score: 1

    My kid is interested in learning how to build and program robots. He *needs* to understand how to perform low-level tasks on a computer-driven machine. I don't think he will be "scared away" by the complexity. I see him being fascinated that he knows what is going on at the lowest level. Oh - he also has an electronics set so that he knows what AND, OR, NAND, and NOR circuits look like. I also plan on showing him exactly *how* a machine-language instruction set is implemented in silicon. He can always think at an abstract higher level even though he knows the lowest levels. However, I suspect that solving a problem at a high-level caused by a low-level aberration without understanding the fundamental low-level representation of the higher-level processes would be quite difficult.

  173. Re:Use C# by V+for+Vendetta · · Score: 1

    The thing is, BASIC encourages use of GOTO ...

    [Citation needed].

    Seriously, I started programming in BASIC in the mid 1980s and besides the AppleBasic of the Apple ][, I've never encountered a BASIC dialect that encouraged the use of GOTO or lacked the ability to create/use subroutines.

  174. Language doesn't matter API and IDE do by grumbel · · Score: 1

    I'd argue that when you want to teach kids programming, the language is actually rather unimportant. It is the API and the IDE that matter. Have something that allows the kids to use graphics easy without a ton of initialization, have an IDE that automatically jumps them to errors in there code and all the little things like that. QBASIC was pretty good in that regard, it even auto-corrected the upper/lower-case when you mixed it in your variable names.

    These days I would probably go with Python/Pygame or Processing as they make it easy to get interesting stuff happening. Python has also the advantage that you can do real stuff with it, when you are bored of toying around.

  175. Re:BASIC by rayd75 · · Score: 1

    This isn't dissimilar to what I did to the Apple II machines in my 7th grade math and computer classes. (The math room doubled as the "computer room") I loaded all the machines up with a short program that would perform a countdown to get it a few minutes into the next period and then randomly produce a high-pitched beep every 60 to 600 seconds. If I recall correctly, the speaker was internal to the Apple II so the monitors stayed off. There were about sixteen machines in the room so you can imagine the results.

  176. Re:Long Live Peek! by TaoPhoenix · · Score: 1

    Actually, do you know how to do something like a Peek on a webpage?
    "If character #427 on _____.com page is a 1 , then CanaryTest = True"
    It would be a form of notification of sites being redacted to snip out the Bad Things.

    --
    My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
  177. Re:BASIC by bmo · · Score: 1

    This is late but...

    I really haven't touched BASIC in over 20 years. The last time I did, it was a one-off "security" login for my mom's PC at work using a language called "ASIC - It's almost BASIC" because I wanted to try it out (it's still available on simtel.net if you want to dig it up)

    Yes, BASIC can make you do stupid shit. But that's part of the fun of it. But Dykstra was wrong saying it poisons young minds so severely that they are forever ruined. I went on from learning BASIC on a TI to other languages later on. Millions of other kids did too. There really wasn't anything else for kids in the 1980s besides BASIC and Pascal (or typing in games from magazines in Hex, saved to tape, uphill in the snow, both ways). Dykstra's snide remark paints an entire generation of coders with the same broad brush. It's stupid.

    --
    BMO

  178. Re:Graphics by TaoPhoenix · · Score: 1

    Aha!
    Commodore 128. End Of Line

    You could both draw lines and use built-in Sprites. (What other machine had native Sprites? I still don't know.)
    I burnt out because at 12 I was writing racecar games, shoot-em's, and HuntWumpus-LORD crossovers.
    I can still write little exercises to diagram problems I am pondering.

    Then the minute I looked at C & Java the lights went off and I lost interest in being a pro dev. Today my interests are all about exploring existing apps.

    --
    My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
  179. Re:BASIC by DannyO152 · · Score: 1

    Well, most every day problems being procedural/imperative is akin to saying most every day physics is Newtonian. Very true, but the vexing computing problems of the day relate to scale, concurrency, and parallelism.

    Now people are very much single-threaded, so perhaps the program-as-cooking-instructions analogy and procedural languages provide the best entrance point for many. My first language was BASIC from the days of numbered lines and GOTO. It wasn't the language, but what I could do that hooked me.

  180. Re:Use C# by mcgrew · · Score: 1

    GOTO is BASIC's version of assembler's JMP command. Tell me how you would write an operating system without JMP?

  181. Re:BASIC by mikael · · Score: 1

    Chris Crawford's (of Atari) articles on writing modular BASIC programs in Personal Computer World were the first introduction to design that I read about ... Keep line numbers 10 .. 999 for the high level order of function calls. Keep different blocks of line numbers for the different types of functions with lines 1000 to 2000 to set up page 6/player-missile graphics, 2000-3000 for the titles, 3000-4000 for main-loops and menus, 4000+ for data, and lines 10000+ for auto-renumbering...

    10000 ST=PEEK(136)+256*PEEK(137):INPUT S,E,F,I
    10010 L=PEEK(ST)+256*PEEK(ST+1):IF L>=S AND L=E THEN A=INT(F/256):B=F-A*256:POKE ST,B:POKE ST+1,A:F=F+I
    10020 IF L=E THEN ST=ST+PEEK(ST+2):GOTO 10010

    --
    Vintage computer adverts: http://www.vintageadbrowser.com/computers-and-software-ads
  182. Worked for me by mattcoz · · Score: 1

    Got started with QBASIC when I was a youngin, wrote a rudimentary wireframe 3D renderer that worked at about 1 frame per second, and I've been hooked ever since. I always had problems with these early classes that I would go far beyond the assignment and get marked down for not following the instructions. Like in this Visual Basic class, we had to do this simple matching game, and I made Wheel of Fortune with Simpsons graphics and sound effects. DOH!

  183. Re:Use C# by lysdexia · · Score: 1

    Lining up the LHS is one thing. How about lining up the RHS? Or components of a statement? Like the below pseudocode? How would you do something like that in python?

    http://pastebin.com/GjvLbhxZ Almost exactly like you did it with your pseudocode. :-)

  184. Re:Use C# by Xyrus · · Score: 1

    In almost every instance, if you're using a goto then you're doing it wrong. In all my years of programming in higher level languages, I've used goto at most a handful of times, and only because efficiency outweighed elegance.

    What's wrong is this old dogma that tell young people to not think for themselves and instead just repeat what everyone else says.

    It's not dogma. It's experience. There is nothing wrong with imparting wisdom to students in an effort to prevent them from making the same mistakes and errors that others before them made. Unless you're doing low level programming that requires the utmost in efficiency, then goto should not be used.

    --
    ~X~
  185. Tail call elimination by Estanislao+Mart�nez · · Score: 1

    Goto provides for the natural expression of a state-machine. The most common example of that is in lexical analysis. [...] Some of the more dogmatic try to get around it by using a case statement in a loop (with an enumeration or something controlling the current state). But really the internal structure of the code flow there has nothing whatsoever to do with that loop, and artificially imposing that on it just obscures the state machine underneath.

    And now you've just made a case for tail-call elimination, which turns each state into a function, and each state transition into a (syntactic) function call.

    1. Re:Tail call elimination by T.E.D. · · Score: 1

      That really only works if the "goto" always happens at the end of the state (rather than conditionally somewhere in the middle). The state machines I've written tended to have quite a few states with that property.

      A very interesting idea though. It hadn't occurred to me to try to implement a state machine using a mutually-recursive web of routines.

    2. Re:Tail call elimination by SanityInAnarchy · · Score: 1

      I'd have to imagine that if your state transition is effectively the end of that function, tail-call optimizations could still be done. For instance:

      some
      code
      if (time for a new state) {
        switch_to_another_state();
        return;
      }
      more
      code

      Effectively a goto, but semantically a function call. Why wouldn't that be caught as a tail call?

      --
      Don't thank God, thank a doctor!
    3. Re:Tail call elimination by Estanislao+Mart�nez · · Score: 1

      That really only works if the "goto" always happens at the end of the state (rather than conditionally somewhere in the middle). The state machines I've written tended to have quite a few states with that property.

      I don't understand whether you mean the trivial statement that tail call elimination can only be done for tail calls, the confusing, seemingly contradictory idea that a finite state machine would need to keep a state "alive" beyond the point of the transition (you were talking about finite state machines, right?), or some third thing that I'm totally missing.

      Also, I can't quite tell exactly what you mean by "end of the state" vs. "conditionally somewhere in the middle." You might not be making the mistake I'm about to point out, but just to make sure: you can tail call conditionally from the middle of a routine. Tail call just means that all that the caller does with the return value of the call is immediately return it to its own caller; that can happen in the middle of a routine (e.g., in if cond then return f(x) else whatever, the call to f is a tail call).

      A very interesting idea though. It hadn't occurred to me to try to implement a state machine using a mutually-recursive web of routines.

      It's standard practice in Scheme and other languages that insist on tail call optimization. As long as the people reading the code understand what a finite state machine is, the code tends to be extremely readable.

    4. Re:Tail call elimination by T.E.D. · · Score: 1

      Ahh. I see what you are saying. Yes, any goto pretty much by definition isn't coming back. To change to a web of routine calls, you'd still have to rearrange the way the state is coded (since again semanticly routines *do* come back), but I guess at worst that just means you put a "return" after every routine call.

    5. Re:Tail call elimination by T.E.D. · · Score: 1
      ...still, where all your actual control flows are going doesn't seem to me to be nearly as clear when coded this way as if you just went ahead and used gotos.

      It would be interesting to do as an experiement (I might even try it sometime), but for actual code that has to be debugged and some poor schlub has to maintain, I'd rather see gotos used.

  186. Re:Use C# by lysdexia · · Score: 1

    I was recently forcibly dismounted from my high horse by Douglas Crockford's comment vis. JavaScript: "It's the only language in the world that people think they can use without learning it first." (from memory, I'm lazy).

    Ouchie.

    I love python myself, and have always thought "those choads puling about whitespace need to *learn* the language first!". . .then went right on to badmouth JS, Perl and Ruby as utter garbage. Of course they are utter garbage in their own ways, as is python. Of course, all of them are possessed of absolutely fantastic features, otherwise they would not inspire love.

    In short: you are all a bunch of douchebags and idiots. I know this, because of my long and storied existence as a douchebagging idiot. Come let us reason together. And drink tea. Pop-Tart?

  187. Not for me, anyway... by NitroWolf · · Score: 1

    I didn't find any joy in programming until I got to use real languages. Granted this was decades ago, but when I started with BASIC, Logo and Pascal, I found very little interest and certainly very little joy in it. It was clear they were toy languages and served no real purpose... and I was in the third grade or so. It wasn't until I was introduced to ACOS, then C that I found programming to be fun... because you could actually do something useful with it.

    One could argue that you can do something useful with BASIC, but it was a chore if you wanted to do anything beyond crappy little programs that printed something on the screen. Paradoxially, perhaps, but batch files are also something that was fun to program.

    If someone had wanted to introduce me to programming and get me interested in it BASIC would have been a total put off... it just happens that I was self-motivated and saw the possibilities in it, so found something on my own that would allow me to realize those possibilities. If it was externally directed, you can forget about it.

    I would start a kid on PHP or something that's both simple AND useful.

    1. Re:Not for me, anyway... by InFire · · Score: 1

      In case anyone is interested, there is a little known language that is simpler than BASIC and yet allows one to write complex applications or just simple scripts. It can be interpreted or compiled to Java byte code and perhaps to native machine code although I have not yet found any compelling reason to do so. It can be used to write procedural code or OO code. (Sorry - no "GOTO" statements.) "Hello World" is about as simple as you can get:

      say "Hello World"

      But you can write a functional web browser in a single line not much more complex than that.

      There is even a simple IDE available that allows you to write some code in a window and click a start button to interpret the program and see the output in a window.

      I personally use this language to write Android applications for the Dalvik VM.

      I say "little known" because no one has mentioned it here. The language is called NetRexx and IBM is currently in the process of releasing it as open source code so the language community can maintain and enhance it as needed. I don't think there is a simpler way to learn programming with a language that can produce practical applications at this time. Info: http://kermitkiser.com/NetRexx

  188. Re:BASIC by JohnnyLocust · · Score: 1

    10 INPUT "Who is poster?";A$ 20 IF A$="plover" PRINT $A;" is a jerk" else 30 30 PRINT A$;" is not a jerk"

    There are literally millions of programmers that cut their teeth on little 16K machines with basic in ROM. It stopped nobody from going on to OO languages. Dykstra was wrong.

    -- BMO

    I've met countless people over the years who say they started programming in basic on 16k machines, and NEVER made it to OO languages. For some, they lost interest, but others simply weren't able to make the jump from spaghetti code to structured programming, much less OO.

  189. Re:BASIC by razzam21 · · Score: 1

    10 print "hello" 20 goto 10

    This is why we can't have nice things.

    So to prove a language is bad you do something dumb. How about: while(1) { echo 'hello'; } Languages aren't dumb they are a set of rules. Both examples are dumb and should be avoid just because you can doesn't make it right or the language bad. Just the programmer.

  190. TSA Error! by TaoPhoenix · · Score: 1

    You aren't allowed to use the knife anymore either. Too many kids are Terrorists!

    --
    My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
  191. Re:Dearth by TaoPhoenix · · Score: 1

    Don't help him, he wants to bet allowed to sink.

    --
    My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
  192. Re:Cruft by TaoPhoenix · · Score: 1

    I dunno. Newcomers can be good at being told to ignore stuff in class.

    I had grand fun with basic and then the first time I looked at Java the indecipherable cruft whacked me in the head and killed any interest I previously had.

    --
    My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
  193. Re:ClubCompy by TaoPhoenix · · Score: 1

    Yeah, for $1000 you can either get a new gaming rig or a credits mention.

    --
    My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
  194. Basic Brain Damage as Pedagogy by Baldrson · · Score: 1

    Teaching the Basic programming language as an introduction to programming is a step in the right direction but you really have to understand the point of the education system:

    Produce a stream of young adults who are effectively brain damaged and in hock up to their eyeballs.

    Now, I will freely admit that Basic accomplishes the brain damage goal of pedagogy, but let us not forget our obligation to saddle the zombies with debt that cannot be discharged by bankruptcy. Unless you charge thousands of dollars to turn young people into brain damaged zombies, how can you honestly call it "education"?

  195. Re:Linux & Breaking by TaoPhoenix · · Score: 1

    Why poke around to break Ubuntu when an approved upgrade will do it for you?

    --
    My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
  196. Re:Use C# by The+End+Of+Days · · Score: 2

    Javascript

    It has a simple syntax, supports a number of paradigms, and practically everyone has an interpreter for it already installed. It also has a simple, robust UI framework in that interpreter.

  197. When teaching kids... by belleb · · Score: 1

    The most important thing is a GOOD teacher. I don't mean a diploma and memebership in a union. From gradeschool on up to MS, I've had about six good teachers. I've had many instructors that were decent and tech savy. A good teacher will overcome any shortcomings of the books and tools.

  198. GAMBAS : free (GPL) Visual Basic-like for Linux by odyssey72 · · Score: 1

    It is very similar to Visual Basic with a nice IDE, but it is free (as in beer and as in freedom, under the GPL license), and works with Linux (it is included in major distributions). http://gambas.sourceforge.net/en/main.html You can easily make GUI applications (GTK, Qt) with the visual form designer (so it is motivating) while learning basic programming constructs (if then, while and for loops, ...) Later, you can use to teach more elaborate stuff like connections to databases (MySQL, PostgreSQL).

  199. Re:BASIC by Machtyn · · Score: 1

    My high school received a number of HP 48G calculators. They gave three to students to try out and report on its findings. I was lucky to be one of them. I thoroughly enjoyed the RPN style. Since everyone learns A+B=C style, figuring out AB+=C; or more advanced: AB+D*=C versus ABD*+=C, makes you really think about order of operation and what it means. It also forces you to think about how a computer logic with push and pop.

    Yes, the HP-48G and HP-48GX were too darn expensive. It wasn't long after that, that HP took a nose dive in my respectability column (consumer computers loaded with crapware and overly expensive printers and ink). I still love the HP-48 series, though.

  200. Re:BASIC by clone52431 · · Score: 1

    I don’t think you actually tried that.

    --
    Distributed Denial of APK: It takes 15 seconds to reply to him anonymously, but wastes tons of his time if we all do it.
  201. Re:Use C# by mcgrew · · Score: 1

    loose the mullet and the walkman

    You mean, of course, to take the rubber band off your mullet, but what would unscrewing a walkman case accomplish?

    Amazing how a single extranaous letter can completely change the meaning of a sentence.

  202. Lisp failed? by DragonWriter · · Score: 1

    Lisp failed [...]

    I'm not convinced that that is the case. Various Lisps (Common Lisp, Scheme, specialized dialects used in particular applications, and other varieties) continue in a number of important uses in production environments, continue to be actively developed, and Lisp features continue to be one of major influences on the evolution of many popular languages as areas that have long been noted as Lisp strengths become recognized as important in modern application development.

    How, precisely, is that Lisp is supposed to have "failed"?

    1. Re:Lisp failed? by camperdave · · Score: 1

      I'm not convinced that that is the case. Various Lisps (Common Lisp, Scheme, specialized dialects used in particular applications, and other varieties) continue in a number of important uses in production environments, continue to be actively developed, and Lisp features continue to be one of major influences on the evolution of many popular languages as areas that have long been noted as Lisp strengths become recognized as important in modern application development.

      How, precisely, is that Lisp is supposed to have "failed"?

      You could say that of any of the dead languages, like Fortran and Cobol, for example. They may have their uses in certain highly specialized arenas, but you ain't gonna code up a pvr gui or a spreadsheet or a motor control app in them.

      --
      When our name is on the back of your car, we're behind you all the way!
  203. Re:BASIC by Lennie · · Score: 1

    You are partly right, partly wrong.

    Javascript is one of the most used languages in the world, and Javascript is a functional programming language.

    It just hides it, most people don't see it at first.

    --
    New things are always on the horizon
  204. Re:Sorry but it's not proper BASIC by clone52431 · · Score: 1

    Actually, no. That is a backward apostrophe used as an opening single-quote mark in typefaces where the ' looks slanted.

    E.g. http://ompldr.org/vNnJ2bQ/untitled.png (Apostrophe is the 8th char in; the ` is directly before the lowercase alphabet.)

    --
    Distributed Denial of APK: It takes 15 seconds to reply to him anonymously, but wastes tons of his time if we all do it.
  205. Re:BASIC by cfulton · · Score: 2

    You either have never used OO correctly or don't know what you are talking about. Copy and Paste to reuse code is the worst possible idea. You simply spread maintenance work and bugs through out your code base. Good OO lowers line count, maintenance time/cost and bugs. Bad OO like bad anything can be bloated and the ruination of a project. Modern IDEs and documentation tools allow you to find object and discover methods quickly and as you code. (Think CTRL-SPACE). Large systems with many developers cannot be built in the simple way you suggest. Some larger form of design and control is needed. It does not "need" to be OO but, OO can provide the necessary structure.

    --
    No sigs in BETA. Beta SUCKS.
  206. Basic vs. Scheme by DragonWriter · · Score: 1

    I learned Basic on a Commodore VIC-20 in 1978. I think it is a terrible choice for learning to program. I suggest newbies learn Scheme, a very simple language that will lead you as far down the rabbit hole as you are willing to go.

    I learned BASIC, approximately in parallel, on the VIC-20, the TI-99/4A, and a Timex-Sinclair 1000 in elementary school in the early 1980s.

    I think its a fine language for learning to program as part of learning how computers work; its high-level enough to be accessible, especially to young students, but structured similarly to assembly languages and provides a good vehicle for teaching about how computers work at a basic level.

    I think Scheme is a much better language for teaching how to design programs to solve problems, but the features that make it good for this purpose are precisely the features that obscure the low level process.

  207. Netlogo by oraclejon · · Score: 1

    Since no one else seems to have mentioned it, I'd like to add a vote for the Netlogo agent-based simulation system as an excellent tool for teaching kids programming. It's not open source, but is free and available for most platforms, has excellent graphics, an easy UI builder, and can be extended with Java code if more advanced functionality is required. I use it off and on to prototype simulations for work, and have found it excellent for many purposes. Last summer, my son expressed an interest in learning programming, so I pointed him to the Netlogo site. Soon he was happily working through the hundreds of examples included with the package, and has since developed some pretty fancy simulations for his school science classes. Netlogo encourages such experimentation, and unlike more powerful languages, allows kids to quickly build useful programs that include fancy stuff like graphical displays, charts and graphs, and complex GUIs without having to do a lot of low-level programming. Take a look....this is NOT the simple logo we all remember from decades ago.

  208. Re:BASIC by Jeremy+Erwin · · Score: 1

    True; I was assuming that

    20 IF A$="plover" PRINT $A;" is a jerk" else 30

    was reasonably correct. The Applesoft emulator suggests that

    20 IF A$="PLOVER" PRINT A$;" is a jerk" else 30

    is closer to being correct, but Applesoft lacks an ELSE statement. At which point I realized that hacking the code to excise the ELSE statement would also correct the error I identified originally:

    once line 20 is parsed, control falls through to line 30, unless there is an intervening end statement like so.
     
    10 INPUT "Who is poster?";A$
    20 IF A$="plover" PRINT A$;" is a jerk" else 30
    25 END
    30 PRINT A$;" is not a jerk"
    35 END

    No guarantees on whether this will parse on any given machine.

    It's the equivalent of writing a C switch statement without break; statements.

  209. Re:BASIC by scubamage · · Score: 1

    Lol, I remember doing that in middle school programming class with qbasic, and running it on every one of the library computers. Then standing off in a corner chuckling as the librarians scrambled to fix the problem. It only got funnier when I learned how to disable the scroll lock key (the only break sequence the librarians knew was ctrl+scroll lock). It was hilarious to a teenage kid, even after I got sent to the principal.

  210. Re:BASIC by scubamage · · Score: 1

    (There (is (nothing (wrong (with (lisp (damnit(!))))))))

  211. PHP has my vote by PhilFrisbie · · Score: 1

    I second that: PHP (from the command line) would be a great language to learn. Uses simple text files, no compiling, reasonable error messages, and it is enough like C/C++/JavaScript/Java that a person could transfer most of their experience into any of those languages.

  212. Why? by SphericalCrusher · · Score: 1

    The same reason we teach kids math. Teaches them to think for themselves and to understand exactly what their graphics based editors are doing for them. Or at least get their mind to a point where they can think openly and creatively.

    --
    "Instant gratification takes too long." - Carrie Fisher
  213. Re:Use C# by thoromyr · · Score: 1

    and how is GOTO different than exception handling? You can put lipstick on a pig, but it is still a pig.

    I haven't programmed in BASIC in many a year and it was my first programming language so I didn't know much about it. From what I can recall the main issue with GOTO was that it was a crutch for not having user defined functions.

    I recently employed "goto" in a Perl application. You put a label and can then jump to the label. Its just a more generalized version of using break, continue, etc. In this particular case it was clearer to use the label and jump to it (as part of error handling) than trying to kludge some nasty code up for the sole purpose of avoiding a goto.

    Its also the first time I've used such an explicit jump in many years because, generally, there *are* cleaner syntaxes. But those other syntaxes aren't always the best syntactic sugar.

    And break, return, throw -- these are all goto statements. Gussied up and renamed, but goto nonetheless

  214. Karel The Robot by exoduss · · Score: 1

    http://karel.sourceforge.net/ Technically my first exposure to programming was a loop in BASIC that printed hello world, however, I was fond of Karel as my second encounter with programming. It has a very small instruction set (prevents kids from being overwhelmed and forces them build more tools with procedures) and can keep their interest because it is a game/puzzle.

  215. Re:Use C# by omnichad · · Score: 1

    And seeing the mess teaches the need for more structure. As long as the teaching doesn't stop there, I find this perfectly acceptable. You don't want to start learning programming with every possible pitfall in mind - you want results, NOW!

  216. Re:Use C# - GOTO is essential by kjhambrick · · Score: 1

    > I actually did think for myself when I rejected GOTO. I actually went back and read the "GOTO considered harmful" essay.
    >
    > Can you provide an example of when goto is appropriate -- in particular, when it's appropriate to use a goto rather than actually structured
    > programming, or even a safer option like break, return, or throw?

    When you're telling the CPU what you want it to do ?

    Show me an object orientated CPU

    Show me a CPU without a jump instruction

    -- kjh

  217. Re:Use C# by SanityInAnarchy · · Score: 1

    Another good reason is to avoid unnecessary indentations. If I had a dime for every time I saw code like

    I know return is effectively a goto, but I do prefer it, along with break, continue, and exceptions, as a more structured approach. So I'd do:

    if (testopt("-h")) {
      showusage();
      return;
    }
    rest
    of
    program
    here

    Pretty much the same as:

    It's also worth noting that "break" is a scope-limited goto, yet few have issues with it.

    Well, precisely because it's limited in scope and much better defined. I also have far less of a problem with, for instance, the way Java handles references than with the way C++ has stack objects, references, and pointers, complete with pointer arithmetic. It may be the same thing in some abstract sense, but there's far less opportunity to screw it up.

    --
    Don't thank God, thank a doctor!
  218. Re:Use C# by SanityInAnarchy · · Score: 1

    and how is GOTO different than exception handling?

    Exception handling is structured, and it does things GOTO can't, that I know of. For instance:

    if (world is ending)
      throw IDontKnowWhatToDoException

    This puts the actual error-handling code somewhere up the stack where it's actually relevant.

    Its just a more generalized version of using break, continue, etc.

    Well, in the same sense, it's also a more generalized version of a loop, but you still use structured loops, don't you?

    Break, continue, return, etc, are all limited in scope. They do one thing, and do it well. Aside from being clumsier for the things I'd use a break for, goto can take me anywhere else in the program.

    --
    Don't thank God, thank a doctor!
  219. Re:Use C# - GOTO is essential by SanityInAnarchy · · Score: 1

    When you're telling the CPU what you want it to do ?

    In what sense?

    I'm telling the CPU what to do when I type here, but I'm certainly not giving it a jump instruction, or any other instruction, manually. I'd have to be insane to do so just to type up a Slashdot post.

    Now, if I needed assembly for some reason, yes, a jump instruction becomes relevant. I can't remember ever needing assembly for anything.

    --
    Don't thank God, thank a doctor!
  220. Re:Use C# by SanityInAnarchy · · Score: 1

    Have a look at PowerBASIC [powerbasic.com], for example.

    DOS/Windows and proprietary? No thanks.

    In my opinion a key point which makes BASIC great as a beginner's language is readability. It's more or less plain english and stays away from all that curley bracket/semicolon stuff.

    So does Ruby. More so, I'd argue.

    --
    Don't thank God, thank a doctor!
  221. Re:Use C# by SanityInAnarchy · · Score: 1

    Why would a programmer keep using a tool if it's much worse for the job? It just doesn't really happen.

    You're lucky, then, or exceptional. Or at least, speaking only for myself, I do have to spend years building habits like version control (killing the bad habit of commenting tons of stuff out and in to make it work), automated testing and especially any sort of test-first development, and so on.

    Also, I think GOTO's have one advantage for a learning language aimed at small children: It's easier for a child to learn and understand, as a building block / stepping stone toward more complex things. For some reason, I even remember this learning process (using basic, that was popular then) when I was a small child, on our 48K ZX Spectrum ... GOTO's were easy and obvious, but I recall seeing these weird GOSUB things that seemed more abstract somehow.

    I remember that, too. But I also remember that when I first saw functions, they made sense. Maybe the GOSUB syntax was just unhelpful?

    Finally, any good programmer needs to do significant amounts of assembler at some point in his life, and you're gonna be doing lots of JMP's there anyway, and yet nobody considers that 'learning bad habits',

    I would say that's mostly because assembly generally isn't taught as a first programming language. By the time you learn assembly, you already understand structured programming and why it's a good thing, certainly by contrast to assembly.

    There are many other bad habits that cause FAR more damage in real-world programming, and yet nobody even cares to teach those in formal Comp Sci or Engineering programs.

    I'd certainly like to hear about those. I'm in an odd situation where instructors in my formal Comp Sci program actually listen to me. (Of course, it's academia, so even if they took me as seriously as I'd like them to, it'd still take years to change...)

    --
    Don't thank God, thank a doctor!
  222. Re:Use C# by SanityInAnarchy · · Score: 1

    That's pretty stupid. If you can learn GOTO, you can learn jump. But until you need it for assembly, why would you want to?

    --
    Don't thank God, thank a doctor!
  223. Re:Use C# by SanityInAnarchy · · Score: 1

    The main reason i was thinking of is that there are multiple ways to do the same thing.

    And why is this bad?

    For/while loops can use *.each, num.times ... can be use to generate the same resault (where to use each one is not immediately obvious if your witting your first program)

    Same problem exists between for and while. Every language is going to have some sort of choices built in.

    I don't know if I have an intelligent response, other than to suggest you go to tryruby.org and type 'help'. It actually makes the idea of a "block" feel natural, and they're covered before any actual loops happen.

    --
    Don't thank God, thank a doctor!
  224. Re:Use C# by nzac · · Score: 1

    Tryruby.org is for people with knowledge of another language not for teaching basic programming principles.

    Though i have no first hand experience at teaching ruby, people who were to learn ruby would either learn to stick to small subset of the language due to experience of felling like a complete idiot for not getting some of the difficult concepts require to understand the fun stuff in ruby. Or in case of self learning and searching for example code to solve problems will also encounter these concepts. I learnt C in a course where people had the option of not taking further programming courses and took it because they chose to bullshit there way though it rather than struggle to get there head around things, trying to get ruby would be much harder.

    I guess it would not be bad if you just wanted to teach the basics of ruby, but they would then have to completely relearn everything to move to other mainstream languages and not also understand the stuff that makes ruby a good language.

    Python as other people have said is the best possible replacement to basic. While you could use ruby there are a number of pitfalls and problems that i don’t think python or other more consistent languages would have. Read the 'zen of python' i keeps confusing parts of the language to a minimum.

  225. Re:Use C# by SanityInAnarchy · · Score: 1

    Tryruby.org is for people with knowledge of another language not for teaching basic programming principles.

    If you say so. I've seen people who don't know anything about programming follow that tutorial well enough.

    they would then have to completely relearn everything to move to other mainstream languages and not also understand the stuff that makes ruby a good language.

    Maybe. But some of that stuff is pretty accessible. Try going back to setters and getters in Java after using attr_accessor.

    --
    Don't thank God, thank a doctor!
  226. Re:BASIC by plover · · Score: 1

    It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration.
      Edsger W.Dijkstra, 1975

    Like you, I first learned BASIC at a tender age; actually a decade before you did. Back then, it was all self-teaching, of course. That's the ease of BASIC, and was also the start of the problem. We had no schoolteachers who knew programming, so they let us work alone on terminals in the back of the math or science rooms. We taught ourselves programming in sequential steps, because that's what we saw, and it's what the language gave us to work with. We never learned to think about or recognize "discrete units of work," unless it was something so big and often repeated that it would save line numbers if it was turned into a GOSUB call. Every variable is a global. No code is named, except by line numbers. The closest thing to a reference was an array index. We didn't have code reviews to learn from each other. And nobody graded our code; if there was any academic look it was only to "ooh and aah" at the results our teachers could never hope to duplicate.

    And external learning opportunities were awful. The programs printed in Creative Computing were horrible examples. Even programs that could have been OK to learn from were then scrunched down to save on line numbers and column inches or to fit inside a 16K machine; any elegance they may have had was lost to compression.

    Sure, you can accomplish a lot of stuff in BASIC, but everyone reaches a wall where the programs were no longer maintainable. We didn't even recognize why; just that there were many line numbers to juggle, and variables named A, A1, B$, and C7 to keep track of, and never enough extra space between line numbers where we needed them most -- which caused odd little subroutines to sprout from the most awkward of places.

    BASIC can be done well with effort and training, but it can be done poorly much easier. When people learn on their own, they don't get feedback or corrections for their bad habits. And BASIC lets you get a lot further on your own than the syntactically thick languages of the C family, or the new concepts required to learn about object oriented programming. You spend more time ingraining bad habits before someone comes along and says "here's a better way to do it."

    And then you hit the hard part! You then need to fight the internal pride that says "screw you, I already know how to program well enough, look what I can do in BASIC!" and actually accept learning the better way. Far too many people are so arrogant that they never get over this hurdle, and those are likely the students Dijkstra was condemning with his words "practically impossible".

    Part of the problem was the era in which Dijkstra wrote his sentiments. Not enough people outside of academia (especially in industry) were writing quality code; even inside academia there was still a lot of research to be done, concepts waiting to be discovered, and curricula to be written to explain them to students. Another part of the problem was the BASIC language of the time did not encourage or even support concepts we now hold to be common best design principles: modularity, high cohesion, low coupling, etc.

    Dijkstra was a visionary who not only understood these concepts back then but framed a lot of what was to come that would improve programming. He recognized this badness the same way we do now, only 35 years earlier. He saw first hand the damage that was caused by self-taught programmers, and saw BASIC as the crutch that enabled them to get too far down that path.

    And did you read the points leading his list of uncomfortable truths? Let me repeat the key one here:

    The tools we use have a profound (and devious!) influence on our thinking habits, and, therefore, on our thinking abilities.

    --
    John
  227. Re:Use C# by nzac · · Score: 1

    Im saying that for teaching 'programming 101' to a large group ruby would be a poor choice, to teach the whole class (including the students with little natural talent) basic programming, when you consider the other possible languages.

    Just guessing (!!!) that you talking about an enterprise situation (with ruby and java) where you have code already written with smart people who know what the code is suppose to do using the tutorial to learn the syntax of implementation. If you are teaching people to just learn ruby to modify or write scripts for a specific purpose then teaching ruby directly is a good idea.

  228. Re:Use C# by tombeard · · Score: 1

    He is probably concerned about teaching such a limited form of GOTO. While the simplest version should be demonstrated the student should be encouraged to investigate the far more powerful and interesting Computed and Assigned GOTOs.

    --
    The reason we subjugate ourselves to law is to better procure justice. If law does not accomplish this purpose then it m
  229. I'll look into Python.. by Invisible+Now · · Score: 1

    Your assertion that Python travels well is a strong point.

    Visual Basic and VBA have very accessible OO environments, but mostly over MS Windows. Which is a serious limitation.

    Reviewing this thread, I think that the capability of writing lucid code was the key feature I was trying to advance. If you can name wisely and have the basic syntax of the language, even if purposely verbose, read like pseudo code then I think we're on the same page.

    --

    "Knowing everything doesn't help..."

  230. Re:Use C# by Richard+Russell · · Score: 1

    The thing is, BASIC encourages use of GOTO, rather than being an unusual thing to use when unusual circumstances call for it.

    I wouldn't agree that all BASICs encourage GOTO. The dialect of BASIC which I know best - BBC BASIC - was one of the first structured BASICs (possibly the very first) to make the use of GOTO completely unnecessary, and its use was positively discouraged from the start. In nearly 30 years of programming in BBC BASIC I can honestly say I have never used a GOTO except in programs written to test that the GOTO statement works!

  231. BBC BASIC by Richard+Russell · · Score: 1

    BASIC isn't standardised in the same way as many programming languages, so you can't lump all BASICs together and criticise them generically. For example if you are in the 'GOTO considered harmful' camp (which I am) you may disapprove of those BASICs in which GOTO is unavoidable, or at least encouraged. However other BASICs positively discourage the use of GOTO, notably BBC BASIC. In nearly 30 years of programming in BBC BASIC I've never used a GOTO (except in programs designed to test that GOTO works!).

    BBC BASIC was designed quite specifically to teach programming, as a key part of the BBC's Computer Literacy Project of the early 1980s. Advice was sought from academics of the day on the features the chosen language needed to have, and being sufficiently well-structured that GOTO can be entirely avoided was a central requirement.

    As recently as 2006 BBC BASIC was chosen by Portsmouth University as the language to teach in the Introductory Programming Unit of their Engineering Foundation course.

  232. Re:BASIC by bmo · · Score: 1

    Consider that the only seriously considered structured programming language available for home users in the 80s for microcomputers was Borland's Turbo Pascal. If you had an Atari ST in the late 80s, you could have Modula-2 (heh, heh) and good luck finding people to help you with either of them. I didn't know *anyone* who used Turbo Pascal, even when i got into BBSes and such.

    I'll agree with your key point though. Outside of 50 minute classes at school we were all self-taught and finding resources and tools was a real pain. Without guidance, everyone develops bad habits. But even your last message proves that these bad habits can be unlearned because we *have* advanced over the past 35 years. Better tools, better resources, and with the availability of the Interbutt, the ability to shout "help me!" worldwide and get a decent answer has definitely helped the art of programming.

    And yes, what you stated is one of the reasons why pride is a sin.

    --
    BMO

  233. Just of couple of comments... by stonewolf · · Score: 1

    Just tried your system out. Found a few bugs.

    I coded an infinite loop. Then I typed "run" and then I realized that there doesn't seem to be anyway to halt a program once it is running. There must be a big red octagonal button on the screen with the letters "STOP" in it that actually stops the program.

    I tried to code an IF statement. I had to look up the syntax because "if i 0 then goto 2" got a syntax error. I can almost forgive using the C like "if()" for the if statement but using FORTRAN like "LT" for "" is pretty nasty if you ask me.... But, you didn't :-)

    You have a "declare record" statement when just "record" would do. Using "declare" make sense if you are planning to add more things to declare, otherwise it is just a waste. And, seriously, no "for .. next" statement, no "if ... then ... else..." statement, no while statement, no multi-line statements at all. I see that you have reserved some keywords for those so it looks like you are planning to add them in the future. Please, these are critical parts of any language. I know for a fact, having done it, that it is f(&#$@#*$&^King easy to implement those compared to some of the things you have already added.

    I tested what would happen if I typed "run" for a program that has a syntax error. It went away forever. No error messages, no output at all. It just stopped reacting to the keyboard. This is a serious bug.

    The documentation is really really really poor. Very few examples. No real introduction. You use things like "boolean-expr" but do not define that anywhere it the document.

    "turn" is great, but you need left and right also. Kids understand left and right. Positive and negative angles are a bit harder for them.

    Palettes? Really? It is very hard to find a computing device that can run a modern browser that is not using RGB pixels. Why put this ancient cruft in the way of kids? Color values are RGB in the range 0 to 1. There are no palettes anymore.

    Sprite maps? Nostalgia is an addictive drug, but like all drugs it is damaging when used to excess. Why not just have a place on the screen to browse and drop graphics that can then be used in your program?

    I've written an ANSI standard BASIC compiler, I've written a Logo interpreter (or 2 or 3 :-), and I've taught courses in which the final project was a Lisp interpreter. In fact, I've written many compilers, interpreters, and even a linker once. I've also used both basic and logo to teach kids aged 5 to 12 to program. And, I have to say that while you have a good idea your implementation is far from ready for use by kids if I can break it in 5 minutes doing exactly the kind of things kids do.

    It looks to me like you have focused on the "cool" parts, the graphics and the math library, but have skipped, or at least skimped on the critical part. The critical part is creating a system that works, followed by the documentation needed to use it.

    BTW, WTF is "proof" for? It is left over from back in the day (your nostalgia is showing...) when you actually had to type in code that was published in magazines. OMFG!!!!! We live in a world where magazines have websites (in reality a few websites still have magazines) and flash drives are nearly cheap enough to show up in cracker jack boxes (yeah... I'm old, I learned Basic and Logo on an Univac 1108a :-). We do not do that anymore!

    You have a good idea. But, shake off the nostalgia and make something that acknowledges the 21st century.

    Yes, I know I have been harsh on you. If I didn't really like the idea of what you are doing I wouldn't bother to find the flaws, let alone spend the time to point them out.

    Stonewolf

    P.S.

    I've recently managed to eliminated the use of paper in all the classes I teach. Doing that has really pissed off the English teachers who still insist on paper and give tests using blue books.
     

  234. Re:Use C# by SanityInAnarchy · · Score: 1

    Just guessing (!!!) that you talking about an enterprise situation

    Nope. I'm talking about taking my mother, sitting her down in front of Try Ruby, and watching her figure it out pretty much on her own. I'm not saying she was a good programmer by the end of it, but it wasn't hard to follow.

    No, she wasn't a programmer.

    --
    Don't thank God, thank a doctor!
  235. Re:Use C# by plopez · · Score: 1

    This was for supposed seasoned programmers, who I discovered were writing "COBOL in drag". I didn't get past how classes, inheritance, abstract classes, and base class calls were invoked. I was trying to get them to understand the language features and then how to leverage them. You can't do patterns as presented in GOF and others without understanding these topics. I was still on the basics. The "manager" had certs in the technology in question. I was trying to first familiarize with the basics and then expose them to the more advanced topics.

    --
    putting the 'B' in LGBTQ+
  236. Re:BASIC by Tablizer · · Score: 1

    10 print "hello world"
    20 goto 10
    This is why we can't have nice things.

    And here's the equivalent in an OOP language:

    protected class helloWorld() {
        helloManager hello = new helloManager();
        hello.setMessage("hello world").toString;
        repeatManager repeater = new
    system.controlStructures.looper.infinite.repeatManager();
        repeater.exitHandler = new system.controlStructures.looper.exiter(system.io.ui.keyboardObserver(new system.io.ui.controlKeys.ctrl_break())); // allow ctrl-break to exit
        repeater.repeat(hello);
    }

    Kinda miss the good ol' days now, don't we?

  237. Even more retro-BASIC programming for kids by wad4ever · · Score: 1

    How funny! I just did the same thing!

    --
    --- wad
  238. Re:Use C# by Dwonis · · Score: 1

    x      = 0
    furple = 1
    foo    = (onevariablename
           + anothervariablename
           + athirdvariablename)

  239. Re:Use C# by Dwonis · · Score: 1

    <quote>Personally I think they made a mistake in that regard, and should have outright prohibited a mix of tabs and spaces for indentation within a single file</quote>

    <p>I think that's the case if you use "python -tt".</p>

  240. Re:Use C# by shutdown+-p+now · · Score: 1

    They actually fixed it in Python 3K, sort of - there isn't an outright restriction on mixing tabs & spaces, but it's invalid to have a mix that would give different results depending on tab size.

  241. Re:Use C# by SanityInAnarchy · · Score: 1

    All the more reason to avoid it.

    But that's basically the same argument as assembler -- this practice might make sense in a language that lacks certain features which effectively replace it. In assembler, there aren't actual loops and such, but there are jumps. In C, there isn't actual exception handling, but there are gotos.

    At this point, though, I have an honest question: Would a preprocessor hack be worse than a goto?

    --
    Don't thank God, thank a doctor!