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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
... and yet it doesn't do anything useful until you turn it into a real language; at which point what did they learn? NOTHING.
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.
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.
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.
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.
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.
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.
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.
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_building_blocks_that_blink_beep_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.
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 ";
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.
if asc(a$)=27 then end
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.
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".
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.
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.
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.
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
and Gorillas.bas for qBasic:
Forward declaration, complex data types... it's not just the loss of static line numbers making it harder to follow.
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.
... 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.
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.
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.
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.
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.
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.
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:
20 print "stopping program"
40 print "program resumed"
50 print "a=";a
typed "run" it would:
If then you typed "resume"
but let's say you did:
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.
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.
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.
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..."
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? :lol: ) 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.
That's why the examples and focus is easily making your own games -- I'm out to trick them into learning.
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.
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.
Abstract problem solving is the deal!!! UML rules!!! Pseudocode FTW!!!
I'd just like to point out that DS is making a programming language for education.
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?
Many thanks for the detailed explanation regarding "Responsive Web
Design Techniques" which I am now trying to adapt to suit my content.
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 [url=http://m.publishing.rogers.com/macleans/share/2012-10/11a_soc_mathhelp.html]who [url=]even do simple arithmetic](http://mathoverflow.net/questions/15028/do-you-find-your-students-are-less-competent-in-basic-algebra-and-arithmetic-and). (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)
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.
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!)
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'.
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.
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)
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
if player.momentumY < 0 then
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.addMomentumY -- add momentum on the appropriate axis, scaled per frame.
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:
ifKeyDown "q" jump menu
ifKeyUp "a" jump testKeyD
ifKeyUp "d" jump testKeyW
You can see how ugly that would get -- even worse on something like the momentum if/else
if player.momentumY < 0 jump setRow1
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.
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?!?)
Oh, also.... maybe a 'keymap' construct to say what should happen when keys are down?
"q" jump menu
"a" player.addMomentumX -1
"d" player.addMomentumX 1
"w' player.addMomentumY -1
"s" player.addMomentumY 1
with perhaps a multiline?
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...
next page →