SitePoint Sponsor

User Tag List

Page 1 of 2 12 LastLast
Results 1 to 25 of 40
  1. #1
    Non-Member bronze trophy
    Join Date
    Nov 2009
    Location
    Keene, NH
    Posts
    3,760
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)

    Making a new programming language for education

    I considered posting this in the 'projects' section, but I don't think this is far enough along code-wise for that yet, and I need more input before I

    There is a question here, so bear with me as I explain the situation (and get what I have done so far down as text for my own reference)

    It's an idea that kind of hit me while puttering in my garage that's quickly turning into a museum... Was playing with Applesoft basic on a IIe platinum and Extended Color Basic on a Coco... and it hit me that I started using these types of languages when I was 9 or 10... sure, I was already doing 1802 machine language before that, but really this is where I started learning to do anything remotely close to a 'real' program...

    ... where are these today? Where is todays "sit a ten year old down with big colorful 40x25 (or less) text display, with a simple per-line editor, and a simple/easy language that any pre-teen that can read should be able to grasp? While I don't think line numbered BASIC was ever the proper answer and was more imposed by the hardware limitations, I do think with some modernizations an interpreted language designed for children as a starting point BEFORE having to dive into real editors, complex file management, idiotic nonsense like 'make'... setting up a server or parser... Just something they click "start it" and they can use it... (and no, visual studio is not the answer).

    I started looking for languages that fit the bill -- Even FreeBasic seems so obsessed with giving you modern compiler type controls and functionality it's lost sight of being ... a beginners language. For todays systems most of these languages barely provide the graphical and audio tools ROM BASIC back in the 8 bit days did! SURELY we can do better? I mean... what are we gonna do, sit a pre-teen down with Python? RUBY? I think not.

    Also, I've been looking at the Raspberry Pi -- some folks are talking about BBC basic or an emulation of same, but really the limitations of that language are a waste on that level of hardware... if you're going to enhance the language for modern stuff, at that point why not build a new language that doesn't have 1970's/1980's scale limits?

    The R-Pi has two video outs; HDMI and Composite. It's a $25-$35 device -- why not target the composite out as the primary 'middle ground' operating mode? A cheap ARM device with composite out could be a real learning tool for the underprivileged, the people who still dumpster dive for CRT's... Composite means 'real world' 320x240 is about the upper limit for useful video resolution, so the old DOS 40x25 text mode is probably the best target for it's native operating mode. They are touting it as for 'education', put a composite output on it, have a bargain basement price-point; but who is this really for?!? College level maybe, late high school at best; but they seem to be thinking strictly in terms of learning hardware for advanced users -- as evident by the hoops one has to jump through just to get Debian to boot on it, much less the convoluted setup they seem to expect people to use to program on it... did we mention the choices are Debian, Arch or Fedora with C as the main language? Same hardware could easily be re-tasked to a 'give the kid an old TV and let them "play"' with a simpler language.

    I've already chosen the language I'm writing my language with, and the initial targets. I'm going with Free Pascal since so far as programming languages go Pascal is my first love. It also opens the door to easily targeting multiple platforms since FPC can target ARM, PPC and x86, under Linux, Windows or OSX... even has some rudimentary support

    For libraries I'm sticking with SDL for mode setting, input handling and sound with OpenGL for video (just to make sprite rotating/transparency fast/easy).

    As such I'm thinking my initial target specifications will be:

    700mhz ARM11/1ghz x86
    OpenGL capable video
    Linux,Windows,OSX (OS must provide/support SDL)

    (P.S. If anyone can get OpenGL/SDL working in FPC under Lion, I'd love to hear how!)

    So far all I've got coded is the expression tokenizer, floating point expression evaluator and math functions, and just starting in on variables -- which is where the question (I'll get to it, I promise) comes into play. I'm still VERY open on the syntax and procedure names as I'm kind of making it up as I go along -- on purpose. I don't want to plan out an entire language specification and then realize I've shoe-horned bad functionality into it.

    At the same time I'm thinking about the things that I'd have killed to have back then, so I'm putting together a list of things that this new language should or shouldn't have.

    Shouldn't Have:

    line numbers -- no language other than basic does this, unless you're actually hand compiling ASM.

    scope -- confuses nubes, let's get logic flow in their head, THEN move them to a language with scope

    Return values -- since we don't have scope, let's not confuse them with the difference between a subroutine/procedure/function.

    Userland objects -- way too complex for new programmers to handle. Hell, I know some people who've programmed for years and can't grasp them. (and keep coming to me for help - they need to take a time-out and spend some quality time with Object Pascal, Modula or Smalltalk)

    Pointers -- again, complex concept, many mainstream languages seem to do just fine without them.

    Should have:

    40x25 4:3 text mode default -- for composite video users

    64x32 16:9/16:10 text mode option -- for HDMI users and other platforms. Keep the text big and friendly.

    Built in editor -- duh.

    Real time line-entry tokenizer -- when a line is finalized in the editor (you hit enter), compile it's token string, then paste the strings together when you 'run' it. This works great in many of the 'faster' basic interpreters.

    Immediate mode -- I often scoff at this -- Apparently there are new names for this same concept like "IDLE" or "REPL" -- but the idea is to be able to type in a command and have it run immediately.

    One assignment/procedure per line limit -- give the one line code obfuscators a kick in the junk. Oh noes, you might actually have clear concise legible code, not that.

    Simple full word syntax -- NO abbreviations or vague/cryptic names -- duh.

    Labels -- using them much like in assembler. People often seem 'scared' of assembly when a decent Assembler (aka anything non-AT&T syntax) is the simplest thing in the world. In this case a label is just a entry point you can 'goto' or 'gosub' -- though I'm planning on calling it 'jump' and 'call'... just like in ASM... because those are really good words for it. CALL means it will be coming back, JUMP means go there without plans of a return. This will keep the concepts of loops and subroutines simple.

    System Objects -- things like sprites, audio files, etc; give them methods and properties. This will let the programmer get used to the idea of calling methods or properties, without the headache of them learning how to make their own. Baby steps; basically the same thing mySQLi or PDO can provide in PHP for getting people into objects without actually getting 'into' objects.

    Sprite Engine -- on top of the normal old school plot, line, etc, I'm thinking give them a full openGL accellerated (where available) sprite engine. I'm talking a tile editor, tile management tools, the ability to load sprites or animations onto a variable of type 'sprite' with ease... collision detection, crude physics like gravity and momentum, etc... Get as much of the 'hard' stuff of graphics out of the way so all you'd have to do as a programmer is handle user input and AI logic.

    SoftSynth -- the old funky 8 bit synthesizers have always had a soft spot with developers, but I'm thinking more along the lines of a multi-option synth -- wavetable, multi-waveform additive, etc... Give it it's own simple piano roll type format and possibly it's own song editor... you want to let kids compose music today, whaddayagonna do? Hand them a copy of Sonar? Reaper? PLEASE. Again, I know adults who can't figure those out. (and keep coming to me for help)

    keydown status -- inkey$ sucked, readchar sucks, input really sucks when you're writing a game. That's what kids will WANT to do -- write games, lets give them the proper tools for handling input.


    ------------------------------------

    In any case, there are a few concepts I'm still on the fence on that I've gotten as suggestions; I'm interested in feedback on these in particular (though feel free to weigh in on the concepts so far).

    Typecasting -- Should I or should I take a page from PHP on this one? Personally I LIKE strict typecasting on everything -- I was thinking originally on using tokens to indicate type... A$ is a string, A# is a integer, A% is a float... Would this be too complex? Confusing since they could have the same names? Is explaining runtime assignment errors or "why is this returning zero" going to be harder than explaining needing different types.

    As it is I'm scratching the idea of even having a difference between integers and floats; all numeric variables are going to be 64 bit "Double"... I MAY consider just saying "oh well" and using the 80 bit "extended" type, but that's probably overkill.

    So... Should I scrap my plans to have strict typecasting?

    resolution neutral coordinate system -- the age of pixels is coming to a close; so while I'm thinking 320x200 as the main target, I'm also thinking a vector format for higher resolutions that doesn't care what the render target is. Still hammering this idea out, it's on the 'it would be nice, but not necessary' list.

    Of course, the one part I'm REALLY not looking forward to is adding better syntax error detection (right now the tokenizer just blindly compiles whatever you type in, and the expression parser just blindly tries to run it)... but it's still coming along nicely for a project I've been working on maybe 30 minutes a day the past week.

    Any ideas, opinions, etc on the project would be appreciated. Once I get it to where you can type in an actual program and have it run I'll probably put together a site for it and toss up a kickstarter page to get some revenue attached to it.

    Though I'm really not into this for profit (though justifying my time would be nice), I just want to give kids today a modernized version of the tools I learned on as a pre-teen. The ones that opened the door to me putting on the big boy pants and writing real software for business before I was even out of high school.

    ... and at the same time dodge 'adult intervention' in the learning process, which can often be a total killjoy. I'm aiming for something that a grade-schooler (I figure third or fourth grade-up) can sit down with a book akin to the old TRS-80 Color Computer Basic manual (one of the BEST for learning programming as a child) and without any assistance learn to write a simple game in under an hour.

    Side note about that image -- hey look folks, ACTUAL aside's!

    It's not a unrealistic goal - those of us who grew up in the Vic-20, C-64, Atari 400/800, Apple II and TRS-80 era know it isn't.

    So, opinions, ideas? Am I wishing for a time that's long past? Was I just a weird kid some 34 years ago? Let's hear it!

    P.S. Sorry for long post, but this is also a 'status update' of sorts.

  2. #2
    Non-Member
    Join Date
    Feb 2012
    Posts
    892
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)
    Instead of ANOTHER programming language, with ANOTHER syntax, ANOTHER way of producing sounds, ANOTHER way of producing graphics, and whole other "ANOTHER"s piling up around it, just to lose your self in implementation and technical details, as usual, and REALLY learn nothing about algorithms and programming techniques and programming paradigms, stuff that matters WAY more for a programmer...

    ..why not something REAL simple and useful, like a better UML, or a better platform for pseudocode. With a SIMPLE VISUAL interface, that requires more brain than fingers speed in the process, that does more of the tedious, almost unrelated work behind the curtains, and letting you to concentrate on smarter ways of how an algorithm may be improved, instead on how your code may be improved.

    <hr>

    UML is a better way to start than starting with any other programming language. Pseudocode is a better way to start then any other programming language. Why not putting some effort behind concepts like these? Why not take a little further the UML generated code, behind the curtains, requiring the n00b to first think like a programmer rather than first work like a programmer?

    That's the Achilles' heel, right there. Many have a sense of accomplishment just by being able to submit to an IDE, and while the effort of doing that is considerable, they often lack the knowledge to subdue basic programming skills to properly use that IDE. Which may lead you to the conclusion that Visual IDEs are evil. They're not.

  3. #3
    Non-Member bronze trophy
    Join Date
    Nov 2009
    Location
    Keene, NH
    Posts
    3,760
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)
    So... you would try to make a UML implementation for ten year olds... When experienced developers often can't make sense of it? Uhm... I think you completely missed the point -- in terms of both the hardware and user target.

    But then, I hated flowcharts, even as a ten year old -- why would I make that for kids? I thought they were BS for machine language and BASIC, why does slapping some fancy new name on them and trying to turn it into a programming language make it any less so?

    Pseudocode and overglorified flow charts are great for THEORY -- but in terms of actually letting them do something useful/interesting, you're joking right? I can't even wrap my head around why you'd even suggest such a concept...

    Though that could just be that "I can't learn visual programming" mental block of mine talking. A bunch of vague/meaningless arrows pointing all over the place is not my idea of clear code or simple in either implementation or learning.

    I mean, was that an intentional troll post or something?!? I mean... has anyone ever actually written a real program using UML?!? You're more likely to find real programs still in use written in Forth. Literally I thought that concept was dead and buried (for good reason) a decade ago apart from some hold-out career educators and lecturers who talk the talk, but can't walk the walk.

  4. #4
    Non-Member
    Join Date
    Feb 2012
    Posts
    892
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by deathshadow60 View Post
    I mean, was that an intentional troll post or something?!? I mean... has anyone ever actually written a real program using UML?!? You're more likely to find real programs still in use written in Forth. Literally I thought that concept was dead and buried (for good reason) a decade ago apart from some hold-out career educators and lecturers who talk the talk, but can't walk the walk.
    Again, you're crossing the line, gratuitously. What I'm a supposed to do now, go again, lose hours and days and make a compelling case for you to admit? No, I won't waste my time. Not anymore.

    Just this: Visual learning has results. It's, again, how it's done. It seems you wouldn't be any good at it. That doesn't gives you the right to generalize. But it seems it's your most liked argument: false generalisation.

    <hr>

    Just because you've never used UML to model an application, it doesn't mean it's not used by others. Also, if you'd know anything about UML modeling, you'd know it's not just flowcharts.

    Pseudocode is something I first think of. I don't start coding unless I have a pseudocode first, no matter what programming task I have in front of me.

    No one ever learns programming diving into the twisted guts of a programming environment, command line or visual IDE, or a particular programming language.

    The king of abstraction offered by UML and pseudocode is what makes you learn programming.

    My view. Of course, you are free to dismiss it.

  5. #5
    Non-Member bronze trophy
    Join Date
    Nov 2009
    Location
    Keene, NH
    Posts
    3,760
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by itmitică View Post
    Just because you've never used UML to model an application, it doesn't mean it's not used by others. Also, if you'd know anything about UML modeling, you'd know it's not just flowcharts.
    No, it's overglorified flowcharts. I rank it alongside the whole XML applications nonsense; a cute idea, but impractical. It's all theoretical nonsense with little if any practical application; kids ***** enough about "what is it good for" or "what would I ever use this for" in class without them doing it on something I'm trying to make for them to be able to pick up and just start using at home.

    ... as in by the time we get to page 50 of the manual, I want them to at least be able to make Pong.

    Quote Originally Posted by itmitică View Post
    Pseudocode is something I first think of. I don't start coding unless I have a pseudocode first, no matter what programming task I have in front of me.
    So basically you waste time writing it twice? Once in psuedo and once as the actual code? NEVER understood that approach as it strikes me as a waste of time.

    Quote Originally Posted by itmitică View Post
    No one ever learns programming diving into the twisted guts of a programming environment, command line or visual IDE, or a particular programming language.
    I think the majority of programmers over the age of 35 might disagree with you on that. Those of us who cut our teeth before the concept of an IDE even existed, and laughed at the foolish nonsense taught in schools at that time; there's a reason the REAL computer revolution was driven by hobbyists and not back-room *nix geeks and educators. Just ask Bill, Clive, Khan or the Woz... It's amazing to see how the idiotic educational theory that held progress back once again being lauded as the right way; have we learned NOTHING?!?

    Hell, that's part of what I'm writing this to circumvent; something kids will want to use at home (like the C=64, Spectrum, Atari 800 or Coco were in their day), instead of dry theoretical BS shoved down their throat by a teacher not qualified to teach IT in the first place.

    Quote Originally Posted by itmitică View Post
    The king of abstraction offered by UML and pseudocode is what makes you learn programming.
    ... and yet it doesn't do anything useful until you turn it into a real language; at which point what did they learn? NOTHING.

  6. #6
    om nom nom nom Stomme poes's Avatar
    Join Date
    Aug 2007
    Location
    Netherlands
    Posts
    10,269
    Mentioned
    50 Post(s)
    Tagged
    2 Thread(s)
    Quote Originally Posted by crusty
    sit a pre-teen down with Python?
    I think you could. You can manage to avoid advanced stuff with Python and still write things that Do Stuff (which is what you need to see as a kid, or really any beginning programmer). Ruby, I dunno. I haven't looked at it much.

    Quote Originally Posted by crusty
    [shouldn't have...]line numbers -- no language other than basic does this, unless you're actually hand compiling ASM.
    So when the kid writes a line and it does not work, how do they learn where they made the mistake? Without line numbers I'd never figure out where to look (if it's 5 lines, sure, but when it gets bigger??).

    What kind of feedback are you proposing for the student? Can they make syntax mistakes that break the program? If so, how do they find out where the problem is (where to start debugging)? Now I myself don't have a history of learning Pascal and those sorts so maybe this is already obvious to those people but I'm asking as someone only exposed to the likes of Perl, JS, Python.

    Quote Originally Posted by crusty
    Immediate mode -- I often scoff at this -- Apparently there are new names for this same concept like "IDLE"
    IDLE isn't a term for a mode, it's nothing more than specifically the name of the command-line Python interpreter. I suppose someone could have given a name to "perl -e" but they didn't. I think IDLE also has a name because it has this limited "text editor" built into it, rather than using the shell itself.

    I might be explaining it wrong though; I think you'd get a better idea of what it is if you loaded Python onto a machine somewhere and in the terminal typed "python" and see what that is and what you would call it. It's not for writing programs, but it is handy for testing out constructs and the like when you're learning, esp syntax and function arguments.

    Quote Originally Posted by crusty
    Also, I've been looking at the Raspberry Pi
    Since the point of the Pi is to have a small cheap computer (even a kid with nothing could buy one!) and since everyone's hoping its cost and simplicity will be precisely a machine for kids to "tinker" on and learn programming with, I would think you would indeed want to use this. If you want to get your language in a useful form to as many kids as possible.

    Quote Originally Posted by crusty
    Typecasting -- Should I or should I take a page from PHP on this one? Personally I LIKE strict typecasting on everything -- I was thinking originally on using tokens to indicate type... A$ is a string, A# is a integer, A% is a float... Would this be too complex? Confusing since they could have the same names? Is explaining runtime assignment errors or "why is this returning zero" going to be harder than explaining needing different types.
    It depends. Certainly when you look at Python training lessons there's always the section on "number gotchas" where people have to realise that division between integers often gives you 0 when you don't expect it, and that instead you need to use floats. I mean, in school, when you learn decimals and fractions, they don't get called "floats". It seems to be a computer-only term.

    So whether you have them or not I think must depend on if you think kids should learn these things as soon as possible so they can move on to other languages... or make everything a double float (and if you have ints make them all Long at least) by default so when kids do simple math they only see correct answers instead of the famous weirdness you get in Javascript (adding .3 + .5 should get you .8, etc). So this trips newbs up in Python but I guess it's supposed to, since you run into exactly the same thing with whatever your next language is.

    Frankly, JS numbers made no sense to me until I read the second chapter of the K&R book. Which I would have never been able to digest at age 10 or 14, but then I was never a math or logic person (memorisation, spatial/relationships between ideas and basic science were easy, math I always needed fingers or paper) and maybe you're going for the mathy kids.

    Quote Originally Posted by mitică
    No one ever learns programming diving into the twisted guts of a programming environment, command line or visual IDE, or a particular programming language.
    We started with I think LOGO in school... the one where you draw a turtle and Snoopy? It was plotting points on a graph by typing in commands. Some kids had trouble translating typed commands with what they saw; others used what they saw to understand how the commands worked. Some kids could think of logical sets of commands, but couldn't plot a graph to save their lives.
    Later there was a Visual Basic course in school for some reason. Lord knows why. Anyway I took it (version 4 I believe) and I got the feeling that I wasn't understanding WHAT it was doing... sure, you typed in some stuff and things appeared and they worked, but so much was pre-built that I felt like I was learning French from a phrasebook instead of learning how to actually speak French. It probably was a good introduction for many people but too many black boxes turned me off. Even though I'm not someone who would understand compilers and that sort of thing back then.

    The more beginners' programming languages there are, the better, because some people need visual feedback, while others don't. Some people already think in terms of logic while others don't. Some people need a visual IDE and pre-built blocks of things to piece together how they work while others don't. Some people learn algorithms while others do better with text-based command-and-reply (Build Your Adventure Game) etc.

    Also it seems all these langauges start you off with imperative writing. I suppose this style makes the most sense. But what if we want a generation of programmers to whom functional writing comes naturally?

    I think I agree with Crusty about leaving out stuff like scope for beginners, but whenever you leave something out you have to decide when you're going to bring it in.

  7. #7
    SitePoint Zealot RyanKing1809's Avatar
    Join Date
    Oct 2011
    Location
    Melbourne, Australia
    Posts
    170
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I don't know if I can help you much, most of what you said flew over my head. But if you want to create a programming language for children (which is a great idea), here's some food for thought.

    I learnt programming in my preteens by using a piece of software called the RPG Maker - where you made your own little RPG Game in a similar style to the gameboy games - actually some people used it to make very detailed and professional RPGs. The RPG maker had a point and click system where it was partly programmable. Basically it was a tiled graphics system where you drew houses and added character sprites and you walk around with you little 16x16px sprite in this environment. And you could fight monsters which was cool. The programmable part involved adding to events to certain tiles which were activated on touch or interaction (pressing the 'a button') it was a basic point and click interface.

    It had different variable types like boolean and integers and strings but they weren't called that, I remember they called a boolean value a 'switch', it was either on or off. It also had line numbers - I didn't use them but it wasn't confusing or detrimental in anyway. And it became more helpful down the track when I started creating more complicated things. I don't think there was anything like scope or functions either - everything operated based on event triggers.

    We also learnt LOGO at highschool in our early to mid teens. I found it incredibly easy and didn't really care for it but most students couldn't figure it out for the life of them. I think suggests that even a simple language can be difficult to understand - wasn't LOGO developed for children?

    The important thing to note about the difference between LOGO & the RPG Maker is that with the RPG Maker I wanted to create a video game - not learn how to program. And I probably would have never been interested in programming without it. With LOGO you're just drawing dumb pictures - who wants to do that?

    Maybe you could look into problem based learning - where learning a programming language is the result of trying to create something provided that something is interesting.


    What Stomme Poes said about visual pre-built blocks I think is a good idea. The children could drag and drop components and see how the interact - variables may be modified with slider bars rather than lines of code. Maybe these blocks could work in any order allowing for no errors to possibly occur. You should watch this TEDTalk on a similar idea applied to electronic components than snap together - a kit of parts one can use to build something: http://www.ted.com/talks/ayah_bdeir_...and_teach.html


    It might also be useful to watch the talk by Bret Victor a UI Designer: http://vimeo.com/36579366 -great talk. He believes that creators need an instant connection with what they make. In saying that programming is not instant if you change something you have to compile and execute before you see the results. If you create something that instantly shows the results of programming, than interaction is encouraged and people start to play with the code, discover unexpected things and learn in the process. Watch the talk there are some great examples of what I'm trying to talk about on there.

  8. #8
    Non-Member bronze trophy
    Join Date
    Nov 2009
    Location
    Keene, NH
    Posts
    3,760
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by Stomme poes View Post
    So when the kid writes a line and it does not work, how do they learn where they made the mistake? Without line numbers I'd never figure out where to look (if it's 5 lines, sure, but when it gets bigger??).
    NOT even the same ballpark as what I was talking about... Completely missing my meaning; so I assume you've never dealt with line numbered BASIC.

    10 print "hello ";
    20 a$=inkey$
    25 if asc(a$)=27 then end
    30 goto 10

    You typed in your own line numbers, and they were 'fixed' -- as in if you wanted to add more than 5 lines between line 25 and line 30, you'd have to MANUALLY renumber them (and manually edit any lines calling them with goto/gosub!). It was a disastrously bad way of programming but a staple of interpreted ROM Basic. I wasn't saying "don't have it report errors by what line of code it is", I was saying "don't make the coder have to manually maintain their own line numbers". You had no labels, names, or proper functions, so when you did a goto or gosub, you had to call it by the line number. See the difference? That's what I was saying it shouldn't have, and instead be label based.

    :mainLoop
    print "hello";
    a$=inkey$
    if asc(a$)=27 then end
    goto :mainLoop

    You can still have the editor auto-number them and have the interpreter report the error by the current line (though I'm planning on the per-line tokenizer not letting you enter a line with syntax errors). That's NOT what I meant when I said no line numbers... NO modern language has static line numbers that I'm aware of.

    Quote Originally Posted by Stomme poes View Post
    It depends. Certainly when you look at Python training lessons there's always the section on "number gotchas" where people have to realise that division between integers often gives you 0 when you don't expect it, and that instead you need to use floats. I mean, in school, when you learn decimals and fractions, they don't get called "floats". It seems to be a computer-only term.
    Terminology is going to be a major issue; while internally it's going to be either 64 bit double or 80 bit extended precision floating point -- on the user side it's going to just be called "numbers".

    Quote Originally Posted by Stomme poes View Post
    So whether you have them or not I think must depend on if you think kids should learn these things as soon as possible so they can move on to other languages... or make everything a double float (and if you have ints make them all Long at least) by default so when kids do simple math they only see correct answers
    I believe that's what I said I was doing up above -- double or extended precision so things like integer rounding and oddball non-intuitive results won't crop up.

    Quote Originally Posted by Stomme poes View Post
    Frankly, JS numbers made no sense to me until I read the second chapter of the K&R book.
    Oddly enough, I must be so jaded I never noticed anything odd about javascripts handling of numbers... But that's what I'm asking about; the things that could easily frustrate someone starting out into just giving up.

    Quote Originally Posted by Stomme poes View Post
    Which I would have never been able to digest at age 10 or 14, but then I was never a math or logic person (memorisation, spatial/relationships between ideas and basic science were easy, math I always needed fingers or paper) and maybe you're going for the mathy kids.
    No, that's exactly why I was asking about typecasting, and I'm pretty sure that there's only going to be one number type in this.

    Quote Originally Posted by Stomme poes View Post
    We started with I think LOGO in school... the one where you draw a turtle and Snoopy? It was plotting points on a graph by typing in commands. Some kids had trouble translating typed commands with what they saw; others used what they saw to understand how the commands worked. Some kids could think of logical sets of commands, but couldn't plot a graph to save their lives.
    I found logo quite cumbersome -- I understood it and could make it do things, but for me it just seemed way too complex for an alleged learning language. It was also very theoretical and not all that useful for doing much more than plotting vectors.

    Quote Originally Posted by Stomme poes View Post
    Later there was a Visual Basic course in school for some reason. Lord knows why. Anyway I took it (version 4 I believe) and I got the feeling that I wasn't understanding WHAT it was doing... sure, you typed in some stuff and things appeared and they worked, but so much was pre-built that I felt like I was learning French from a phrasebook instead of learning how to actually speak French. It probably was a good introduction for many people but too many black boxes turned me off. Even though I'm not someone who would understand compilers and that sort of thing back then.
    By the time of Visual Basic -- hell, by the time of quickbasic, the 'simplicity' of the language that let beginners learn on it was long, long gone. Some of the other old-timers blame this on the loss of line numbers, but I think it's more the inclusion of and often the need to use more complex language constructs.

    I mean just compare (for example) donkey.bas for GW-Basic
    http://www.codinghorror.com/blog/files/donkey.bas.txt

    and Gorillas.bas for qBasic:
    ftp://ftp.microsoft.com/services/tec...SK/GORILLA.BAS

    Forward declaration, complex data types... it's not just the loss of static line numbers making it harder to follow.

    Quote Originally Posted by Stomme poes View Post
    The more beginners' programming languages there are, the better, because some people need visual feedback, while others don't. Some people already think in terms of logic while others don't. Some people need a visual IDE and pre-built blocks of things to piece together how they work while others don't. Some people learn algorithms while others do better with text-based command-and-reply (Build Your Adventure Game) etc.
    Quote Originally Posted by Stomme poes View Post
    Also it seems all these langauges start you off with imperative writing. I suppose this style makes the most sense. But what if we want a generation of programmers to whom functional writing comes naturally?
    I often think that functional programming or object programming may in fact be a bad thing; but that's the machine language coder in me talking. The further you get from how the hardware actually works, the less efficient and to be frank, the worse the decision making process... I see a lot of code out there right now that I go "what in blazes was the writer even thinking"; almost entirely because they don't understand what's going on under the hood once they have their 20 layers of abstraction, or simply aren't thinking of the penalties of function/object overhead in non-compiled languages.

    Quote Originally Posted by Stomme poes View Post
    I think I agree with Crusty about leaving out stuff like scope for beginners, but whenever you leave something out you have to decide when you're going to bring it in.
    ... and that's the thing. I was thinking on maybe this being the 'elementary' edition, and then following up with something a bit more robust. Kind of like the old TRS-80 Model 1's initial 4k Level 1 basic, which was followed by the 12k Level 2... or Apple's Integer Basic vs. AppleSoft Basic vs. zBasic.

  9. #9
    Non-Member
    Join Date
    Feb 2012
    Posts
    892
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by deathshadow60 View Post
    ... as in by the time we get to page 50 of the manual, I want them to at least be able to make Pong.
    You want to start by giving them a false sense of accomplishment. So, they'll made Pong. What's the biggy. Monkey see monkey do.

    The first time they'll have to make a conscious decision (devise an algorithm), it's already too late. Because by the page 50 in your manual they will probably assume that forks are for combing one's hair. And they'll stick to that for the rest of their natural life. Well done.


    Quote Originally Posted by deathshadow60 View Post
    So basically you waste time writing it twice? Once in psuedo and once as the actual code? NEVER understood that approach as it strikes me as a waste of time.
    Really?!? This comes as a BIG surprise to me.

    But, to clarify, I actually do that to save time by not rewriting it at least ten more times in the actual code. Which would happen A LOT if I was to jump the gun and start typing, acting like a "I knows all" fool.


    Quote Originally Posted by deathshadow60 View Post
    I think the majority of programmers over the age of 35 might disagree with you on that. Those of us who cut our teeth before the concept of an IDE even existed, and laughed at the foolish nonsense taught in schools at that time; there's a reason the REAL computer revolution was driven by hobbyists and not back-room *nix geeks and educators. Just ask Bill, Clive, Khan or the Woz... It's amazing to see how the idiotic educational theory that held progress back once again being lauded as the right way; have we learned NOTHING?!?
    I'm over 35. I started out in uni on 286 machines. I don't know how you were taught, but we had: the theoretical course hours, the theoretical seminar hours, and the practical laboratory hours.

    We started by solving problems, not as keyboards monkeys. We started with advance math. And we started with Knuth. Logic thinking, sound math solutions, pseudocode algorithms. And Knuth beats any over glorified Bill by two universes.

    Quote Originally Posted by deathshadow60 View Post
    Hell, that's part of what I'm writing this to circumvent; something kids will want to use at home (like the C=64, Spectrum, Atari 800 or Coco were in their day), instead of dry theoretical BS shoved down their throat by a teacher not qualified to teach IT in the first place.


    ... and yet it doesn't do anything useful until you turn it into a real language; at which point what did they learn? NOTHING.
    Really? You're so full of it, and so very wrong. But I suppose you, in particular, have learned math going to the market and counting apples, right? I guess you never learned any about irrational numbers. What's the use for them anyway? Throw all the theoretical knowledge in the garbage, let's all be happy practical monkeys.

    If you were a teacher for at least one minute in your life, you'd knew that what kids want and what kids have to learn are two completely different things. A teacher's biggest task.

    You propose for n00bs to start with copying solutions that solve problems unknown to them.

    What circumvent is that? Brain circumvent. You teach them how to use the command line to get banana treats. That's circus, its not education. Speaking of which, you act like you never once in your life were a student, you've learned all by your self.

    Those that teach, actually have did it before, and are capable enough to pass on knowledge in a way that sticks. It seems to me you should try to be a REAL teacher first, see how it works. A good teacher, that is. It's not that simple. But, of course, it's easier to criticize stuff you have no clue about than to get things done.

    Every book you've read is written by a teacher. Yes, book authors are teachers. Your narrow view prevents you to admit this. So stop with the generalized slander. Also, you should be extremely specific if you want this talk about how lame all teachers are to go beyond tabloid colors, into a more mature landscape.


    <hr>

    What makes a programmer are its programming concepts. Universally accepted practice is those are THEORETICAL and ABSTRACT. UML and pseudocode are your friends. It helps making a case in solving problem go beyond a programming language.

    To make you understand better what I'm saying: say you want to learn how be a good pastry chef. Like programmers, they start with THEORETICAL and ABSTRACT learning in that specialized school. How to combine flavors, for example, which is much like devising algorithms. Because what makes for a good pastry chef is not a particular oven, nor a particular recipe, nor a particular type of candy. What makes a good pastry chef is his ability to choose from basic goods and turn them into famous cookies, no matter the cooking machine he has to use.

    What you're saying is anyone that knows how to follow strict commands and manages a good cake, without much understanding on how and why, can now be called a chef. Well, it's not. Next cake he'd have to think about doing him self, while having to face the music of its rather load failure, will make him quit so fast and curse you so bad, that you, his benevolent, wanna be teacher, would have to move to another state the next day.

  10. #10
    Non-Member bronze trophy
    Join Date
    Nov 2009
    Location
    Keene, NH
    Posts
    3,760
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by RyanKing1809 View Post
    It might also be useful to watch the talk by Bret Victor a UI Designer: http://vimeo.com/36579366 -great talk. He believes that creators need an instant connection with what they make. In saying that programming is not instant if you change something you have to compile and execute before you see the results. If you create something that instantly shows the results of programming, than interaction is encouraged and people start to play with the code, discover unexpected things and learn in the process. Watch the talk there are some great examples of what I'm trying to talk about on there.
    I've actually watched that talk in the past, and it brings up something I was noticing... in ROM Basic, when you entered a line it was tokenized and 'ready to go'. Syntax errors were caught for each line you entered/edited... and you could set break points or break the program at any time -- while leaving the variables live in memory; and be able to 'continue'. you could even 'break', edit a line of code, and then 'continue'... exactly the type of 'instant interaction'...

    Like in Applesoft if you did:

    10 a=10
    20 print "stopping program"
    30 stop
    40 print "program resumed"
    50 print "a=";a

    typed "run" it would:

    ]run
    stopping program
    ]

    If then you typed "resume"

    ]resume
    program resumed
    a=10
    ]

    but let's say you did:
    ]run
    stopping program
    ]a=20
    ]resume
    program resumed
    a=20
    ]

    Exactly the type of 'instant connection' that waiting to compile and then running a executable just doesn't deliver. You could set a break point, or manually break with ^C, change the values of variables, even gosub a subsection of code, then resume.

  11. #11
    Non-Member bronze trophy
    Join Date
    Nov 2009
    Location
    Keene, NH
    Posts
    3,760
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by itmitică View Post
    I'm over 35. I started out in uni on 286 machines.
    So in other words you started out well past the age I'm targeting, in the environment we poked fun of some six to eight years earlier, in the worst environment to actually learn to do anything. Explains a lot.

    Quote Originally Posted by itmitică View Post
    I don't know how you were taught
    Wasn't offered in my schools -- I pieced together my first computer out of instructions from Popular Electronics... from there I learned from the manuals that came with computers like the Sinclair, VIC=20, TRS-80 Model 1, 3 and Coco, as well as the instructions that came with compilers. By the time I was old enough to get into a school that actually taught this stuff in a meaningful manner, it seemed like colossal steps backwards.

    Unless you count my military training, where they gave you the book, said "go do it", and you did.

    Quote Originally Posted by itmitică View Post
    We started by solving problems, not as keyboards monkeys. We started with advance math. And we started with Knuth. Logic thinking, sound math solutions, pseudocode algorithms. And Knuth beats any over glorified Bill by two universes.
    In other words things that 4th graders are going to gloss over on, and that is likely responsible for two-thirds of your classmates not being qualified to do anything useful and most likely drop the coursework.

    It really does explain why you're advocating college level concepts and esoteric theory -- which is a healthy part of what's wrong with a lot of todays allegedly trained coders. Again though, there's a reason I don't consider a college diploma in IT to be worth a sheet of bog roll -- and to be one of the leading reasons for tanking economies worldwide. MAYBE things are different where you are -- but in my neck of the woods the people teaching at colleges aren't teaching useful skills to anyone so far as IT is concerned.

    You simply fail to grasp my entire purpose, as you come from an entirely different environment on how things are done and/or work. By your own admission you started programming about the same time the computer revolution was winding down. A revolution NOT driven by back room unix server geeks, career educators or lecturers like Ritchie, Kernighan, Knuth or Stallman, but by hobbyist and entrepreneurs like Bill Gates, Steve Wozniak, Jobbo the Clown, Phillipe Khan, Jack Tramiel, Clive Sinclair, etc, etc... or even students building for students with corporate backing like with the BBC Micro.

    You started out at university on a machine that likely didn't even have a ROM Basic built into it... so you have NO CLUE what I'm talking about; and it really explains a lot of the nonsense you seem to parrot. The old joke "You had to go to college to say something that..."

  12. #12
    <title class="lol"> bronze trophy TehYoyo's Avatar
    Join Date
    Feb 2012
    Location
    Northeast Chicago Suburbs
    Posts
    806
    Mentioned
    18 Post(s)
    Tagged
    1 Thread(s)
    I mean, I would definitely appreciate an easy language. The very first language that I started out with was C++ when I was maybe 10 or so. I got through about 100 pages of the book that I was using at which point I stopped. I think the reason was because the program I was using to write the code wouldn't compile it, even if I typed it exactly as the book said...oh well.

    I remember thinking that it wasn't super complicated, but now, having some more experience with code, it was harder than some.

    I think that any way we can encourage kids to get into programming, and just...get into learning (for, y'know, life?) is good. If a simple coding language helps us with that, then go for it!

    It's good that you're targetting smaller users as well - capabilities for everyone can never be said to be a bad thing (imo). To be honest, I don't know how many users (10 year old kids) will be using a 700 MHz processor, but hey - like I said, capabilities for everyone can never be said to be a bad thing (imo).

    Now, I hate to be a downer, but... how many kids these days will want to learn programming?

    1.) First of all, it's geeky. And as I know too well, peer pressure for young kids can be a powerful thing. Sure, there are tons of geeks (which is a great thing!), but the large majority of the younger generation (10 year olds) won't want to do this. That's fine. I'm sure you know that the "cool guy" won't want to pick this up - and that's to be expected.

    2.) Our kids don't read books anymore. They don't play board games anymore. They don't play outside, they don't ride their bikes, they don't play kickball, pickup games of soccer, tag, cherrybomb, or swing on the swings. What they do now is sit on the couch with their Mom's iTouch (or their own, appallingly enough) and stuff Skittles and candy and Coke in their mouth. (sorry to go on a rant, but this is how I see it) I was raised w/ only books, no TV, no computers, (which I'm very thankful for, as it seems to me now that my life and my education has been better b/c of it) and just myself. I went outside, was reading novels in Kindergarten, and had a pretty atypical lifestyle. I had to look for other ways to entertain myself, which didn't include watching TV, or playing on that oh-so-hot GameCube (which, although I probably have only played on it 10 or so times - all at friend's houses, is a pretty dang good system). Maybe that's why I got into coding. My point is, kids these days (and now I sound like an old man, even though I'm pretty young...wait...I'm young, right? ) probably won't get into coding when they could play video games.

    Maybe we could reach them by making an Apple app for iTouch or iPad, but I think that that defeats the purpose.



    But I really do love the concept of having an easy programming language. Definitely a good thing.

    ~TehYoyo

  13. #13
    Non-Member bronze trophy
    Join Date
    Nov 2009
    Location
    Keene, NH
    Posts
    3,760
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by TehYoyo View Post
    probably won't get into coding when they could play video games.
    That's why the examples and focus is easily making your own games -- I'm out to trick them into learning.

    Quote Originally Posted by TehYoyo View Post
    Maybe we could reach them by making an Apple app for iTouch or iPad, but I think that that defeats the purpose.
    Again, FPC+SDL+OpenGL (and/or OpenGL ES) means it would probably run fairly well on that platform... certainly should be possible to compile it to run there.

  14. #14
    Non-Member
    Join Date
    Feb 2012
    Posts
    892
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by deathshadow60 View Post
    I don't consider a college diploma in IT to be worth a sheet of bog roll -- and to be one of the leading reasons for tanking economies worldwide.
    [...]it really explains a lot of the nonsense you seem to parrot. The old joke "You had to go to college to say something that..."
    I'm stepping down from this thread, as per requested by Jason in a *rude* PM.

    But to me it seems that you, Jason, have something against education and everyone lucky enough to get a proper one, against educators and their efforts.

    <hr>

    Anyway...

    Abstract problem solving is the deal!!! UML rules!!! Pseudocode FTW!!!

    itmitică out.

  15. #15
    <title class="lol"> bronze trophy TehYoyo's Avatar
    Join Date
    Feb 2012
    Location
    Northeast Chicago Suburbs
    Posts
    806
    Mentioned
    18 Post(s)
    Tagged
    1 Thread(s)
    Quote Originally Posted by deathshadow60 View Post
    That's why the examples and focus is easily making your own games -- I'm out to trick them into learning.


    I'd just like to point out that DS is making a programming language for education.

    ~TehYoyo

  16. #16
    SitePoint Mentor bronze trophy
    John_Betong's Avatar
    Join Date
    Aug 2005
    Location
    City of Angels
    Posts
    1,805
    Mentioned
    73 Post(s)
    Tagged
    6 Thread(s)
    @deathshadow60,

    I read your initial posts and once again find your style of writing difficult
    to comprehend but anyway as far as...

    "Making a new programming language for education" sounds an interesting project
    that would be very time consuming. Already there are many hundreds of tried,
    tested and robust languages available on multiple platforms.

    With regard to programming language features I think it would be better to have
    as many as possible rather than learning a few then having to start learning
    another language that has the desired functionality.

    I liked your image of "TRS-80 Color Computer Basic manual" and it brought back fond
    memories of my first Tandy TRS80 4K. Tandy Basic was my second introduction to
    computer programming, first being a college mainframe with punch-cards.

    Rather than writing "Yet Another Programming Language" how about creating a
    user manual targeted at the Raspberry Pi Python Language novice market?

    Is it possible to utilise the processing power to have a hyperlinked user manual?

    Off Topic:
    Many thanks for the detailed explanation regarding "Responsive Web
    Design Techniques" which I am now trying to adapt to suit my content.

    http://www.sitepoint.com/forums/show...=1#post5098723

  17. #17
    Non-Member bronze trophy
    Join Date
    Nov 2009
    Location
    Keene, NH
    Posts
    3,760
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by itmitică View Post
    But to me it seems that you, Jason, have something against education
    Actually, it's good you brought that up -- because it's part of WHY this project even came into being. As I mentioned this is meant to bypass conventional education because I truly believe modern education is broken; disastrously so. Perhaps the title of this thread is wrong; should be "to educate" or "for learning", as "for education" implies teachers and schools, something I don't think is qualified to handle what I'm talking about!

    The educational system is horribly broken and appears to get worse year after year; it started with this "who cares if the answer is right, we want to see how you got it" nonsense, but as standardized testing is showing many high schools are passing classes of kids who don't even have what 30 years ago would have been considered a 4th grade reading level. Where right now you have teachers at the high-school level trying to teach calculus 1 and 2 to kids who can't who even do simple arithmetic. (My ex-fiance was a high school math teacher, I say WAS because she quit over disagreement with the administration on how to teach; specifically being told she couldn't keep two students back.).

    Even more ridiculous having calculus at the high school level; when I went to school Algebra 2 was the most advanced class the majority of students would have taken.

    It often feels that todays K-12 is just day care, it certainly isn't about teaching kids given the current results. It's why I'm hoping to bypass the educational establishment and go direct to the kids and/or parents with something that might at least teach them to do ... something... in a manner that may actually make them WANT to learn. Worked for me, Mr. "I can do advanced vector math and trig in my head, but failed two years of high school math". See my college scale reading level by the 5th grade, which is why I repeatedly failed high school english and actually had to take teachers before the school board to pass the classes I did, since they weren't even following their own rubric... or tried to have me arrested for correctly answering a extra credit question. (How was I to know the teacher had never read the preface and the school version didn't have the preface to Huck Finn)

    Quote Originally Posted by itmitică View Post
    everyone lucky enough to get a proper one
    Depends on your definition of "lucky" -- A decade or more of debt, being used and thrown out like a snot-rag after a year or two in entry level positions to spend the rest of ones life flipping burgers, washing laundry, cashiering, or for the lucky few blue-collar manufacturing jobs? Nothing like building one's ego up with pipe-dream BS and then shattering them when the reality of "well, this is the work that actually needs to be done" sets in. As the joke goes, we're training a nation of chiefs when what we need is more Indians. It's why we've seen since the early 90's a stigma attached to the very notion of a good honest day's work for a honest days pay; and then governments in the US and Europe wonder why all the labor is going to the far east. At least there you can find people willing to do the work for what it's worth, instead of idiocy like $15/hour to start for unskilled labor like the Detroit unions would have you believe it's worth.

    I look at some of my friends with college degrees; one of them is 32 and is sitting there at the same entry level job he got out of college making less than he would pulling in 40 hours a week at a convenience store -- as salary. (ooph). Another is unemployed with a degree in safety engineering living in his parent's basement, yet another just turning 40 has degrees in Marketing, development and media -- working that job at the convenience store. My 30 year old ex fiance (go ahead with the cradle robber jokes) with the teaching degree, currently going for a masters and a certification in the next state over.... is working an industrial job washing hotel and bar linens... NONE of them having made even a dent in their already decade old (or more) college loans... car loans, maxed out credit, mortgages, or dozens of other forms of debt that are flushing the entire economy down the toilet.

    Quote Originally Posted by itmitică View Post
    against educators and their efforts.
    When they are using techniques that have caused massive drops in standardized testing, reading levels and math skills of graduates -- to the point where high school graduates aren't getting the basic skills 6th graders were getting 30 years ago, it's not exactly hard to understand where a prejudice towards career educators could come into being.

    Mind you, grade school and high school teachers are a well meaning lot, but they've had their heads in recent years filled with nonsensical new teaching methods that don't work; I started to see it in high school 25 years ago when they opened a new school with new staff -- now it seems that the 'just process them through' mentality has taken off... Idiotic nonsense like "social promotion" -- when we said "no child left behind" that's NOT what we meant!

    This whole attitude of "don't upset the children" -- screw that, upset the children. You upset people when they make mistakes by having penalties -- like not advancing with your peers or bad grades -- maybe they might learn not to do that or at the very least learn to fight back. But of course, learning to stand up for oneself or to take responsibility is NOT a message schools seem to want to promote...

    ... just as it seems to be more about daycare than learning.

    Of course there's the financial aspect, where the teachers unions have got them starting at twice the income of the average parent they are supposed to be serving; every school within 100 miles of me is in budget crisis, slashing programs and laying off teachers since they can't actually pay teachers what the job is REALLY worth; which is to say around 24-28k.... which is STILL more than the average person here in NH makes. (average income 23k -- in the "seventh richest state of the union"). We can no longer afford 38-42k to start and 60-70K at 15+years. The "myth" of teachers being underpaid hasn't been true for two and a half decades.

    But for all that, it has little to do with my problem with educators; my wrath is specially reserved for the collegiate level, where I have NEVER encountered in the realm of IT a professor who was qualified to even open their mouth on the subject they are allegedly supposed to be teaching. (to the point I've gone in and had sit downs with friends professors over the idiotic nonsense they're trying to fill people's heads with) - I have never seen such an ignorant lot in any field as seems to be reserved for the outright BS artists who make their careers teaching IT courses at your typical college... and they look like rocket scientists compared to the outright idiots who can only be called "career lecturers"; a group who are one step removed from the hucksters on late night infomercials, or the snake oil salesmen of centuries past.

    Back... 18 years ago I was head tech for the main offices of a national insurer in the 128 belt of Boston, and was told to interview and hire on three more techs. (we serviced 10 buildings in a 200 mile radius and over 10,000 workstations all connected to around twenty Netware 3.12 servers) Not one of the applicants I got with a college degree could answer the simplest of questions or tasks; like installing a second hard drive, configuring a batch file or interrupts, or even installing an OS. When it came to networking their heads were so full of rubbish the two I did hire I ended up firing four weeks later -- since they screwed up two entire office-worths of machines and were unable to learn anything I was trying to teach them. (and I spent that last two weeks trying). Really sad since one of them was supposed to be a CNA. I ended up telling my boss "we're going to a high school job fair"; I hired four kids at $12 an hour, spent two weeks teaching them what they needed to know; kept them after work to turn them into CNA's, and ended up with some of the best employees I've ever had; to the point I fired the rest of my staff and did a lather, rinse, repeat. They were young, they were hungry, and I specifically chose kids who were bordering on dropping out NOT for being stupid, but for being bored, ostracized, or in general pissed on by their alleged mentors.

    <aside>CNA == Certified Novell Administrator. I was a CNE (engineer) and qualified to teach the CNA/CNE by that point; thanks to my boss at the same company</aside>

    (see, that's what an aside is for!)
    Off Topic:

    Self hating teacher? OMG I am a stereotype!


    Right now there are weekly, even daily articles about how broken education is in the regional and national papers; in terms of cost, in terms of effectiveness... Those of us who saw this first hand and have the time to give back need to start thinking on ways to circumvent or supplement it, so we don't end up with entire generations of Jessica Simpsons or Brian Dunklemans... or more specifically so our Mendels, Semmelweis', Zweigs and Boltzmanns are given a chance instead of being rewarded with anonymity, insanity, persecution or death.

    ... and that's my motivation. Conventional education is broken, so I want to go around it by making something that kids might be interested in (making games) to teach them a skill (programming) -- WITHOUT bogging it down in dry theory that has little if any practical application; I'll leave that BS to the 'experts'.

  18. #18
    om nom nom nom Stomme poes's Avatar
    Join Date
    Aug 2007
    Location
    Netherlands
    Posts
    10,269
    Mentioned
    50 Post(s)
    Tagged
    2 Thread(s)
    Quote Originally Posted by crusty
    You had no labels, names, or proper functions, so when you did a goto or gosub, you had to call it by the line number.
    Oh goto. Bleh.

    I'm one of those kids who never learned math. I never could. I probably never will. I still count on my fingers. I only passed classes because I had the go-through-on-paper drilled into me which was the only way I could do any math with more than 3 numbers. I can't "see" it so that crap about "well your answer should make sense" was utterly meaningless to me. If it wasn't concrete numbers of actual things, I was gone.

    It's probably very good that people like me don't actually write programs that do anything important like prevent the space shuttle from exploding. But I still like to program.

  19. #19
    Non-Member bronze trophy
    Join Date
    Nov 2009
    Location
    Keene, NH
    Posts
    3,760
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by John_Betong View Post
    Rather than writing "Yet Another Programming Language" how about creating a
    user manual targeted at the Raspberry Pi Python Language novice market?
    You'd think I'd like Python -- you would. Strict formatting rules in particular are right up my alley.

    But the lack of clear non-formatting closes, the uselessly and pointlessly cryptic nonsense (elif? REALLY?) and oddball data structure handling makes me shudder just thinking about that language... much less the TOTAL lack of tools in the language to do things kids might be interested in -- like moving a sprite around the screen.

    Also, remember I'm thinking about the pi's composite output for the underprivileged who don't have HDTV or HDMI capable displays. While I'm using SDL or OpenGL, I'd never point a kid at using it directly. I want to give them a real sprite engine that is as simple to use as plot, line and draw were back on ROM BASIC.... and I'm not taking an existing language and tacking some idiotic framework on top of it to pull that off; at that point it would be faster/simpler for me to just write a new interpreter...

    assuming I can track down the one remaining bug in my expression engine -- where it's evaluating 3+abs(-2) properly, but abs(-2)+3 is being treated as abs(-2+3) -- it's not seeing the closing ).

    What do I mean by a simple wrapper? Something like:
    (actual prototype code for the language)

    Code:
    	makeSprite player
    	player.loadTiles "playerSprites.png",8,2
    	player.setAngularGravity 180,10
    	player.setDrag 1
    :mainLoop
    	renderFrame
    	ifKeyDown "q" jump menu
    	ifKeyDown "a" player.addMomentumX -1
    	ifKeyDown "d" player.addMomentumX 1
    	ifKeyDown "w' player.addMomentumY -1
    	ifKeyDown "s" player.addMomentumY 1
    	if player.momentumX < 0 then
    		player.previousTile
    	else
    		player.nextTile
    	end
    	if player.momentumY < 0 then
    		player.setAnimationRow 2
    	else
    		player.setAnimationRow 1
    	end
    	jump mainLoop
    To break down some of the commands:

    MakeSprite -- turns a variable into a sprite object

    sprite.loadTiles -- the PNG file containing the sprite table, with the number of rows and columns contained therein. Columns == animation, row == direction or other details.

    sprite.setAngularGravity -- takes the angle of direction gravity will pull, and it's force on a scale of how much it should add to momentum over a second.

    sprite.setDrag -- how much drag the world makes on the sprite's momentum over a second.

    sprite.addMomentumX,
    sprite.addMomentumY -- add momentum on the appropriate axis, scaled per frame.

    sprite.nextTile,
    sprite.previousTile -- increase or decrease the animation one frame, aka one column on the tile set; wraps.

    sprite.setAnimationRow -- set which row of tiles is being used for the animations, allowing for multiple animations per sprite.

    renderFrame -- calculates the positions of all sprites and world objects, renders them to the backbuffer, and flips the buffer.

    ifKeyDown -- an actually useful method for keyboard reading in games that old-school programmers, and even modern ones still struggle to get and usually have to bypass the language's methods using either hand done code or libraries like SDL to handle.

    then/else/end -- I'm currently working with it as a optional construct to trigger if the result is multiline or single-line/single-operation. Again this language will not allow multiple procedural functions per line. Originally I was thinking on North Dartmouth / apple integer style if's, where there is no else or ability to do anything but goto/gosub (jump/call in mine)... aka:

    Code:
    	ifKeyDown "q" jump menu
    	ifKeyUp "a" jump testKeyD
    	player.addMomentumX -1
    	:testKeyD
    	ifKeyUp "d" jump testKeyW
    	player.addMomentumX 1
    	:testKeyW
    You can see how ugly that would get -- even worse on something like the momentum if/else

    Code:
    	if player.momentumY < 0 jump setRow1
    	player.setAnimationRow 2
    	jump afterRows
    	:setRow1
    	player.setAnimationRow 1
    	:afterRows
    No way in hell I would actually deploy that, even if it is closer to how assembly does it and was common practice in Applesoft Basic (which completely lacked the concept of "else"). I've rejected that type of construct for a more modern approach... though it does make the tokenizer a good deal more complex.

    I'm also debating if "THEN" should even be included. I have it there to tell multi-line results from single-line, but perhaps just not having a statement after the condition is sufficient for that?

    -----------------------------------------
    Some other ideas I could use input on:
    ------------------------------------------
    angular formulas, use O'Clock instead of degrees? -- or would they be so unfamiliar with the notion of analog clocks I might as well stick with degrees?

    angular momentum instead of axial -- or should I include both? For conventional 'tile' type games that's strictly axial; for spacewar or asteroids style it's angular.

    Did I mention I'm thinking on this also for teaching geometry and physics? One of the things I was thinking for the manual was showing an orbit.... Since apparently they don't even teach Newtonian physics in junior high anymore... or physics at all at the high school level where it's ALL biology and chemistry now. No wonder the Mythbusters are testing the mundane and moronic.

    Again, these are things kids with building blocks, funnel toys and erector sets learn, that are forgotten by high school and aren't even taught - when they are basic concepts anyone going into engineering might actually need. Again, give them a fun way to keep using those concepts.

    Sprite rotation -- since I'm using openGL, automatically rotating sprites should be fairly simple. I'm concerned about how that would look at the low res target, but perhaps I should really be thinking resolution independent?

    ... though at that point it's treading dangerously into the realm of LOGO.

    Jump, Call... Pop? -- should I include the option to POP a CALL's return addy? The reason to pop would be to CALL something like the menu to pause... to resume you'd simply 'return', or to abort and go back to the main-main-menu by popping the address (freeing the memory) and then jumping out. It's something AppleSoft and Commodore BASIC let you do with GOSUB... not sure if it's too complex a concept or not.

    camelCase or underscore_delimits on function names? -- I prefer camelCase, but which would be simpler for kids? Again setting aside a lot of my language preferences for what would be simpler to grasp, not sure which way to go with it.

    Sound -- I'm thinking wav/mp3 playback and a piano roll synth, but should I also include direct frequency control ala the old SID on the C=64 or even the PC Speaker? Back in the day I learned more music theory from the frequency to note tables than I ever did in the "one music class a week" in grade school... like the relationship of 110hz to 220hz to 440hz to 880hz. Maybe even add ADSR (attack, decay, sustain, release) to it -- something I was able to figure out as a pre-teen on the Casio VL-Tone.

    Maybe even let those be applied to/on top of wavetable like on the Amiga. All those teen and pre-teen MOD file nuts of the late 80's and early 90's figured it out without any 'classes' on the topic... just like the SID music guys on the C=64 before them -- the reason we even had a Demoscene.

    Making fun noises by playing with actual music theory beats the pants off just dry "these are the concepts" on a blackboard... even more so when these are things I KNOW kids could grasp, that many adults don't even seem to know.

    Which of course is just part of why I think mainstream education is broken. We aren't teaching them anything, so lets make something that might get them interested in teaching themselves.

    As those of us starting out on the 8 bit computers pretty much had to since there weren't even such things as computer classes available to us. See the typical high school of the early 80's where they'd have a room full of several thousand dollars worth of computers under lock and key for a decade because they had no staff qualified to even supervise their use.

    Quote Originally Posted by Stomme poes View Post
    I can't "see" it so that crap about "well your answer should make sense" was utterly meaningless to me. If it wasn't concrete numbers of actual things, I was gone.
    A VERY good point and part of why I'm focusing on a simple graphics engine so much; so you can apply numbers to things and then watch what happens when you do it. Particularly true of the physics/geometry aspect of it... you apply thrust up/down (momentumY) with no drag, you get newton's first law clearly visible. You apply drag, you get what happens in an atmosphere or from friction with the ground on wheels. Bigger numbers go faster, slower numbers go slower, etc, etc... Kind of what LOGO should have been and wasn't.

    The same for sound, the ability to plug in values and see what happens, associating the proper terms for things like "attack" or "decay" with what they do and the ability to control them.

    Like when I learned how a jet engine or rocket really worked in the service -- did we have some endless theoretical discussion on combustion, compression, thermodynamics, etc... or did Major Ellison just grab a balloon? Explained in fifteen minutes what your typical college engineering course would spend a month or two covering...

    ... or my ex's new coursework where they spend two pages explaining what 'curriculum' is? (in a 100 page junior reader soft-cover pamphlet they have the nerve to call a sourcebook for a masters degree?!?)

  20. #20
    Non-Member bronze trophy
    Join Date
    Nov 2009
    Location
    Keene, NH
    Posts
    3,760
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)
    Oh, also.... maybe a 'keymap' construct to say what should happen when keys are down?

    Code:
    keymap
    	"q" jump menu
    	"a" player.addMomentumX -1
    	"d" player.addMomentumX 1
    	"w' player.addMomentumY -1
    	"s" player.addMomentumY 1
    end
    with perhaps a multiline?

    Code:
    player.setAnimationRow 1
    keymap
    	"q"
    		jump menu
    	"a",arrowLeft,numberPad4,digitalLeft
    		player.addMomentumX -1
    	"d",arrorRight,numberPad6,digitalRight
    		player.addMomentumX 1
    	"w",arrowUp,numberPad8,digitalUp
    		player.addMomentumY -1
    		player.setAnimationRow 2
    	"s",arrowDown,numberPad2,digitalDown
    		player.addMomentumY 1
    		player.setAnimationRow 2
    end
    Starts to look a bit like python at that point... to use END or not to use END, that is the question. Thinking on having clear endIF, endKeymap,endCase,endFor, etc, etc.

    I'm also thinking on borrowing the "on" statement from Applesoft.

    on x jump return,playloop,options

    for example... if x=0 return, if x=1 jump playloop, if x=2 jump options, etc, etc...

    or extend it to be a bit like case:

    on x 'a','b','c' call return,playloop,options

    "call return" and "jump return" in complex statements is going to always be functionally the same as "return" -- that's going to be handled by the tokenizer and not the interpreter.

    Oh, and while I'm using camelBacks, I've decided the language is NOT going to be case sensitive.

    Again, just kind of jotting down ideas here...

  21. #21
    Non-Member bronze trophy
    Join Date
    Nov 2009
    Location
    Keene, NH
    Posts
    3,760
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)
    Update...

    Expression engine complete. Was a stupid mistake where I was treating the function as a expression start, while still tokenizing the opening (

    So the problem WAS in the tokenizer after all. Finally, I can move on to actual full line processing/execution and variable assignments.

    Though I also just belted out a couple test constants. PI and Deg2Rad.

    Deg2Rad=PI/180. You multiply degrees by that to turn it into radians... though since I'm NOT going to make SIN/COS/Arctan use radians, I guess that one's kinda pointless.

    Still, it's really cool to see it finally evaluate:

    Code:
    Enter expression or blank line to quit >64*sin(45*pi/180)+160
    result: 205.25483400
    From here should be smooth sailing, I actually consider that the hardest part of writing an interpreter. It even has error handling:
    Code:
    Enter expression or blank line to quit >160+64*sin(45*pi/180
    processing: 160+64*sin(45*pi/180
    Error in Expression: Closing Bracket Missing
      160+64*sin(45*pi/180
                         ^
    Which that's done at the tokenizer, so the actual interpreter part would never even get that code to try and run it. In the final version I plan for the EDITOR to not allow you to add such a line without fixing the error first.

  22. #22
    <title class="lol"> bronze trophy TehYoyo's Avatar
    Join Date
    Feb 2012
    Location
    Northeast Chicago Suburbs
    Posts
    806
    Mentioned
    18 Post(s)
    Tagged
    1 Thread(s)
    Quote Originally Posted by deathshadow60 View Post
    Which that's done at the tokenizer, so the actual interpreter part would never even get that code to try and run it. In the final version I plan for the EDITOR to not allow you to add such a line without fixing the error first.
    I think people would hate that...but I would like it! (If that's any consolation)

    The language seems pretty easy to learn. I like the keymap idea - keeping all key actions in one place would be really easy to keep organized. You could maybe define different keymaps for different sections of the code?

    I think using some sort of bracket, semi-colon, etc. would be useful instead of just using carriage/line-breaks. It would also be useful as a segway into other languages that the students of your code would recognize later on.

    ~TehYoyo

  23. #23
    Non-Member bronze trophy
    Join Date
    Nov 2009
    Location
    Keene, NH
    Posts
    3,760
    Mentioned
    23 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by TehYoyo View Post
    I think people would hate that...but I would like it! (If that's any consolation)
    The old line numbered basic wouldn't let you enter an invalid line, and would return:
    SN ERROR?
    or
    Syntax Error
    or even
    ??SNX

    Depending on the flavor, so it's not a new concept. With the old BASICS you had to re-enter the entire line; that sucked. In this case it will instead keep it in the edit box and put a arrow or highlight at the point where the error was encountered, instead of throwing it away.

    Was also thinking on hotkey functions and/or autocomplete. Personally, I hate autocomplete, but many older systems (like the sinclairs or TRS-80 MC10) had basic commands printed on the keyboard, and you hit FN+the key, or state based just the key to enter the entire command. This was the only way to enter code on a Sinclair because with only 1k of RAM, all lines were stored as just byte sized tokens!

    Quote Originally Posted by TehYoyo View Post
    The language seems pretty easy to learn. I like the keymap idea - keeping all key actions in one place would be really easy to keep organized. You could maybe define different keymaps for different sections of the code?
    Notice keymap is inside the loop - it doesn't set them up as events, it's just a replacement for a bunch of nested if statements.

    I've been 'refining' the syntax a bit as I start working on actual code lines and variables.... this would be a more robust example:

    Code:
      bufferVideo
      makeSprite player 32x32
      player.loadTiles "playerSprites.png"
      loadSound "thrust.wav",thrustSound
      
    :menu
      player.hide
      clear
      stopSounds
      at 0,16
      writeCentered "Simple Game Demo"
      write
      writeCentered "Press <SPACE> to Start"
      writeCentered "or <Q> to quit"
      inputMode buffered
      renderFrame
      
    :menuKeyLoop
      inputMap
        = ' '
          jump gamestart
        = 'q','Q'
          jump exitgame
      endInputMap
      jump :menuKeyLoop
      
    :gameStart
      clear
      player.moveTo 0,0
      player.setMomentum 0,0
      player.setAngularGravity 180,10
      player.setDrag 1
      player.show
      inputMode unbuffered
      
    :mainLoop
      renderFrame
      inputMap
        = "q"
          jump menu
        = "a",arrowLeft,numberPad4,digitalLeft
          player.addMomentumX -1
        = "d",arrorRight,numberPad6,digitalRight
          player.addMomentumX 1
        = "w",arrowUp,numberPad8,digitalUp
          player.addMomentumY -1
          player.setAnimationRow 2
          call thrust
        = "s",arrowDown,numberPad2,digitalDown
          player.addMomentumY 1
          player.setAnimationRow 2
          call thrust
      endInputMap
      jump mainLoop
      
    :thrust
      if thrustSound.stopped
        thrustSound.play
      else
        thrustSound.sustain
      endIf
      return
    
    :exitGame
      stopSounds
      clear
      writeCentered "Thanks for Playing"
    Quote Originally Posted by TehYoyo View Post
    I think using some sort of bracket, semi-colon, etc. would be useful instead of just using carriage/line-breaks. It would also be useful as a segway into other languages that the students of your code would recognize later on.
    I've been arguing with myself about that one too. ROM BASIC doesn't have them, Python (the language the pi folks are apparently pimping somewhat to my surprise) and RUBY lacks them too. (while I dislike both languages, those are NOT part of why)

    Working command per line there's really no reason to have ending semicolons -- also I'm thinking on using semi-colon as ROM BASIC did to separate strings, varaibles etc on print... where a comma or no semi-colon was a line-feed (in some versions)

    test1=55
    test2=60
    print "test 1:";test1,"test 2:";test2

    would output
    test 1:55
    test 2:60

    It's either that or adding something like "writeln" pascal style, or making them add a newline character...

    I was even thinking on having semicolons be used as a 'repeat last operation with different values' delimiter, for things like:

    color white
    plot 2,3; 2,4; 4,4;

    which would be the same as saying:
    color white
    plot 2,3
    plot 2,4
    plot 4,4

    Still trying to figure out if I want to go that route, or if that's too complex an idea. Would actually shrink the tokenized code and speed up execution of sections like that -- but I could also have the tokenizer automatically condense them behind the scenes before feeding the bytecode to the interpreter.

  24. #24
    SitePoint Guru MikeBigg's Avatar
    Join Date
    Jun 2004
    Location
    Reading, UK
    Posts
    970
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Anyone use CECIL when learning programming at school?

    Looking back it was rediculously simple, but the very basic concepts were there.

    I did a bit of CECIL, then a bit of BASIC before doing COBOL ( eek ) at A level - what a language to learn programming with! Sigh.

    Raspberry-Pi is going with Python - is that not simple enough and sophisticated enough?

    Regards,

    Mike

  25. #25
    SitePoint Guru MikeBigg's Avatar
    Join Date
    Jun 2004
    Location
    Reading, UK
    Posts
    970
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Actually, I've just had another look at Python - I don't like it for 2 reasons already:

    1) its type sensitive! No-one should differentiate variable names by type, so why have it type sensitive?!

    2) using an equals sign for assignment - it is just plain wrong. a = a + 1 is incorrect. Clearly a does not equal a + 1 - the statement actually means assign the value of a + 1 to a. Pascal has an assignment operator: a := a + 1.

    I withdraw my support for Python - use Pascal instead

    Regards,

    Mike


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •