Microsoft Small Basic
smallbasic.com
smallbasic.com
There are several others that are keeping it alive with a well maintained blog (https://social.msdn.microsoft.com/Forums/en-US/home?forum=sm...) and a friendly forum that welcomes programmers of all age and expertise.
There's even a strong community in a Facebook group (https://www.facebook.com/groups/smallbasic/)
PS: I need to find a better host for the website.
I eventually cleared out the BAS due to a mistake I made while working with the editor that I could not see.
Variants of BASIC are among the oldest, most minimal languages: https://en.wikipedia.org/wiki/Tiny_BASIC
I have terrible news for you: John Lennon will be dead next year, and Altair BASIC author Bill Gates III is on track to become the richest man in the world.
Someone should really make a comprehensive list of programming languages beyond reproach here on HN so users don't inadvertently anger the mob. Obviously Haskell would be at the top, but I never would have guessed BASIC would make the cut.
I don't think you'll get any arguments from any Haskeller about the record system being annoying, laziness being hard to learn about at first, or it being a more difficult (but not as difficult as people think) language to learn.
Perhaps I'm biased, but HN seems to cargo cult a lot less than other popular communities.
Once a beginner has written a few small programs with GOTO, they'll start to feel the tedium and appreciate the benefits of structural abstractions, despite the extra things they have to learn.
You can make the same argument for writing code with simple functions and records before object oriented code -- the power of the abstraction is easier to explain once they've run into the rougher points of not having objects.
Absolute beginners are confused by polymorphism and loop constructs because they don't understand the problems the abstractions solve.
You might be interested in my new work which has a very SmallBasic feel to it:
http://research.microsoft.com/en-us/um/people/smcdirm/apx/in...
Even cooler, these days, is Dragon Box. It teaches kids symbolic manipulation via a cute and fun game. Starts off with little creatures you move around, then simply changing the drawings from creatures to numbers and letters makes a seamless transition.
The first, important, way is that a tool that offers solid theoretical foundations does not (necessarily) require those foundations. You mention algebra, for example, and it's fair to assume that most school students (and probably their teachers!) don't really appreciate the theoretical grounding of algebra—but they can still hopefully use it with proficiency. In the same way, pure functions and referential transparency need only be difficult to apprehend if you insist on investigating their theoretical foundations; they can just be the way things work, and, if this is a first programming language, then there are no habits regarding mutable state to unlearn before being able to handle immutability.
The second is that, as nine_k (https://news.ycombinator.com/item?id=9982600) points out, learning these concepts before algebra could make understanding algebra itself easier. There are deeply mathematical ideas in the foundations of most programming, even if they are (and even when they should be) hidden, and learning these ideas can help one to come to grips with abstraction in a context that encourages play and experimentation, unlike (unfortunately) the usual mathematics classroom.
I've only found mathematics really interesting within the past few years, realizing how useful it is for creative things, like making music and art, or understanding programming at a higher level. If I had learned about functions in a more interactive way, maybe being able to create art on a computer screen, or write up physics systems in games, I think I would have been fascinated, and maybe the concepts would have stuck.
I honestly wasn't sure, so I tried not to assume. Subtleties of tone are easily lost on the Internet; thank you for taking the time to clarify.
> I've only found mathematics really interesting within the past few years, realizing how useful it is for creative things, like making music and art, or understanding programming at a higher level.
While I am deeply in sympathy with this point of view, and agree with it to some extent, I think that it comes dangerously close to the monad-tutorial fallacy (https://byorgey.wordpress.com/2009/01/12/abstraction-intuiti...). As a teacher, I have four reactions to "why couldn't I have been taught this way?":
1. First and foremost, this is true. Course structure is often not set up to reward creativity and exploration, and that is a real shame. However …
2. I have heard students complain about not being taught in a way that I know is common pedagogical practice. That does not prove (they could just have been taught by bad teachers), but leads me to suspect, that sometimes students don't recognise (or don't want to see: "just show me the formulas!") alternate approaches when they are presented with them.
3. In many cases, the 'aha!' moment now couldn't have been an 'aha!' moment then; it is only because of the long struggle, and the additional learning and maturity, necessarily beginning with the confusion and uncertainty of yesterday, that everything can suddenly click today.
4. Even if I knew today the exact thing that would cause that 'aha!' moment for you, it is almost guaranteed that it wouldn't cause the same reaction for (many) others. The mission of a teacher is to serve the class as a whole; it is simply impossible, in terms of time and (let's be frank!) the teacher's knowledge, to explore for each student the application that will serve him or her best. This is not to say that some more applications and creative exploration wouldn't be welcome—they absolutely would—but more that, often, the best that can be done is to provide you with the basic tools that will allow you to explore and find the 'aha!' moment on your own, probably outside of the classroom.
I keep hearing (mostly negative) things about the Common Core program in the US, I wonder what it's really like. Creative new ways of teaching always sound good on paper, but I hear so many parents complain about the way their kids are being taught. I wonder if most of those complaints are warranted, or if the new style of questions just take getting used to.
For little kids, MIT Scratch should be good.
Python + pygame, or Scheme/Racket with its simple game-development features, or even Javascript + any 2D or 3D visualization library should hook an older kid. All of these have simple and compact syntax (JS is worse in this regard, of course).
Anyways, it probably did not change much in the last few days:
https://web.archive.org/web/20150727212504/http://smallbasic...
Its good this is (still ?) available. But I would prefer my friends or kids to learn in a more platform independent way. Like Python.
There are more elegant languages (lisp, lua, scala, python) but they fall short at some of mentioned points.
I assure you, JavaScript programmers understand JavaScript. No need to project onto others.
2) Runs essentially everywhere
3) Practical (lots of jobs, syntax is close to that of other important languages)
4) Easy to share your creations with friends (see 1 above)
5) Has REPL, garbage collection, closures, objects, recursion, anonymous functions... soon to have TCO.
6) Can be a compilation target for other languages
7) Good libraries for media, 3D graphics
8) Hard for a beginner to trash the machine (at least with browser-based JS, Node of course is a different story)
Yeah, it's pretty ugly in spots (it's certainly not as aesthetically pleasing as Scheme), but there are some real advantages there.
Learn to program. Don't worry so much about the language.
It's unfortunate it's a mess of a language and evolving too rapidly.
GWBasic, QBasic, and later TI-Basic were some of my first major forays into software, and I worry a bit when there's not a super easy way to get a game out there - however simple, because those are great gateway drugs.
For BASIC, this meant easy access to graphics modes, and some basic "BEEP" and noise playing ability.
These were all installed by default -- something that's not true of most programming tools today (well not entirely, OS X does have them! But not game/graphics libs), and having the source code to things like gorillas and snake helped. Many people could discover them completely by accident and boom, you're a programmer!
And that's all you need.
JS has a bit more learning curve.
OT: I think the glossy production of games these days may also be a negative factor, for those that know they can take millions of dollars, people trying to reproduce this result at a young age (or even as older hobbyists) may get disllusioned, give up, and not build something.
Just as DevOps culture has encouraged sharing how tools works at meetups, I wish this happened more for indie/homebrewed game development.
How to program is entirely different. It involves breaking down problems, creating abstractions for those problems, and turning them into code. And JavaScript is the one language that gets out of your way and lets you create programs that give new learners immediate feedback in a web browser.
Python and Ruby are great and all, but this is 2015 and new students are not that interested in black and white terminal applications. JS and HTML make it easy to make things closer to what they experience.
People my age learned to program while playing text adventure games. People now want to make mobile games, XBox games, or, at least, web things. And JS makes that easy.
In full disclosure, I don't much like JS. But I know it quite well.
I think the intention here is to somehow reach a point where the understanding is complete. As if one can say "There, now I understand all of [insert programming language]." and tick off some item on their career progression or bucket list. It's simply not like that.
Well, they used to for a bit in the UK
https://en.wikipedia.org/wiki/Initial_Teaching_Alphabet
as a result of which I still (5 decades later) sometimes have to stop and think about the spelling of quite routine words. So I agree - toddlers get a subset with a restricted vocabulary and simple grammar but one that is actually a subset of English.
Now - if I wanted to learn enough Javascript/CSS/Canvas stuff to make a series of 'drag-gable diagrams' for use on an interactive whiteboard (e.g. area of trapezium or pythagoras' result) where shall I start? I have the head first book and I sort of like their approach.
EDIT: passage from book/site: "As far as programming skills, we assume you have had some exposure to computer programming using some language. If that language is Small Basic, great!! We offer two beginning Small Basic tutorials that could help you gain that exposure (see our website for details). But, if you’ve ever programmed in any language (Visual Basic, C, C++, C#, Java, J#, Ada, even FORTRAN), you should be able to follow what’s going on."
Link: http://social.technet.microsoft.com/wiki/contents/articles/1...
Edit: that came out wrong... I'm sure the site serves a legitimate purpose in education about programming, which is certainly useful. I guess I meant "the most useful thing for me".
Basic should be fun to learn, and being able to program the 3DS - with a nice library of game-ish sprites and sounds - gets you to fun a lot faster.
Wish I had this when I learned to program :-)
Edit: and this hilarious video with english subtitles! https://www.youtube.com/watch?v=IgnAmLwtP6Q
It runs completely in the browser. There are some interesting things in the interface, stuff I had even been considering adding to my project, like a full on-screen keyboard with special keys.
> How is it different from QBASIC?
> Unlike QBASIC, Small Basic is based on .Net and can consume (not produce) "Objects".
> It supports distinct Operations, Properties and Events.
> It doesn't have GOSUB :)
So this looks like an Object-Oriented QBasic. Awesome!
Then came DarkBasic when I was reading PC Gamer in the late 90s and I got so excited about it. Downloaded it over the 56k modem (couple hundred megabytes) and fiddled around with 3d stuff. I learned how to make 3d models with animation in TrueSpace. But never got to make a complete game, just lot of new projects that never went anywhere. The most I got was creating a FPS level using sphere as the 'skybox'. It was so exciting to create my own world using photo textures and add lighting which gave it pretty good look. Gives me a huge shot of nostalgia just thinking about it and other early demos in DarkBasic. The UI was literally had a dark feel to it and that made it even cooler.
I've always thought that BASIC had a lot of things right in terms of being newbie friendly, I mean it was easy enough for a 10 year old so. It's what sparked my early interest in programming.
Even in the early 2000s we were using Visual Basic in high school, we could create a lot of neat things with it. Gui apps that just sorta worked. Anybody could pick it up and yes, students of all shapes and sizes were able to follow along and create things on their own. Everyone was coding.
Compare that with today with the myriad of frameworks and hundreds of different opinions happy to rip each other apart for the sake of ideology. A much less inviting community core (ex. stackoverflow) to new comers asking "dumb" questions and being punished. We seem to be going through a very chaotic period in the development world where Javascript is suddenly king and simplicity and user friendliness is shunned.
I used to write games and utilities on my TI-83. It was generally frowned upon, because teachers were afraid they would be used for cheating. Even writing your own program that would compute the Quadratic Equation was banned because it was unfair to students who couldn't.
I'm not sure if all Canadian high schools were like ours but we had dedicated courses for learning everything from Qbasic to Maya. I was mad jealous of kids that were creating crazy 3d animations with 3ds max but the class was always filled very fast :(. Had I learned the stuff I might have become a computer graphics artist or something in that area. The course I took taught Visual Basic and then QBasic towards the end (I was like dayum I already know this at age 10, let me play web games while teacher is not looking). At lunch time computer graphics lab hosted Counter Strike (1.3 back then) where you paid a dollar to play for 45 minutes and sometimes after school it would go until for several hours. Like jam packed with 20 people screaming and shouting when somebody got knifed. You couldn't curse tho because the instructor was a hard ass and kicked people out for typing swear words in the chat. Damn, we even had Battlefield 1942 tournaments.
Ironically, being in a poorer school meant ton of corporate endorsements and goodies (free Vancouver Grizzlies tickets & free lunch). During the mid 90s when I was in elementary school, our school had everything from Apple II to Imac. Like almost every Mac from different timeline. One of my favorite was a black & white tiny monitor Apple that had Hypercard on it and I used to create something like dragonball Z stick figure animation (obviously inspired by stickdeath.com) on it. Fuck those were good times especially since I didn't have a computer back then and the school provided all these things.
In grade 6, our teacher was super supportive of us using technology (he was into tech, even bought a monochrome projector off ebay so he could teach material from the computer). Looking back I can see how fortunate it was to have experienced all these things. I was especially fond of playing games like Lode Runner and Lemonade Stand on the Apple II. Pretty much all of my recess and lunchtime was spent on figuring out 1) find games in dusty bins in school gym 2) figure out how to run it. Our school used to host Zip Zap Map Canada (tetris meets geography) tournaments. At home my dad taught me how to create my own website (so 1997 or 1998) using Netscape Composer (on win 95 or 98) and uploading it to a free host. Used to brag about it and impressed my teacher a lot. I picked up a book on HTML for dummies from the library and started reading about Javascript and Java but these books were in Korean and I had a tough time. Eventually geocities came along and it was day dreaming about making a popular website ( never happened :( ).
During this time, we got fresh new iMacs and it was off to the races to find games to run on it, Bugdom, Nanosaur, Sim City Classic & 2000, weird game where you walk around a dungeon and kill monsters and level up. We were also trying to run some weird emulation that supposedly allowed us to play windows games but at super low fps.
Everything was going good until one day thieves came in stole all 6~10 iMacs from our classroom. It was shitty but it was also a shitty neighborhood (think Compton without any rap song about it). My grade 6 teacher was really crushed. We got another batch of iMacs and this time we had cables to hold down the iMacs in case someone tried to jack it again and they came in with cable cutters and made off with it AGAIN. Finally they created a dedicated iMac lab on the second floor classroom where thieves couldn't break into.
Quite a long thread stemming from BASIC lol.
Half an hour ago it was still working fine.
Let's say I install Small Basic on Windows 8.1 or 10. So now I've put my kid in front of an operating system that has such a high-level UI that it doesn't even have a proper list of programs. The media consuming portion of the OS is so heavily emphasized over the creative portion of it. You can see this because the OS is designed to be used without a keyboard!!
PCs are entertainment devices. Designed for watching Netflix, visiting Facebook and listening to music. This is like putting a small piece of Broccoli in the middle of a bowl of ice cream.
No thanks!!
I'll find a minimal windows manager for linux. Something that can be invoked just to get the window for the game they're writing up and running.
So it's not a problem then :P
I get the lock it down to command line only so they can learn the way I did mentality. I'm going to do the same thing to my son, but I'd say that Windows 10 is an entertainment device is going a little far.
Windows has long been the enterprise software of choice for buisnises, MS Office? On top of that most of the software you list is all on the web (Netflix, Facebook), so the internet could be said to be all about entertainment. But again that's an oversimplification.
The main contention I can see with windows 8 are apps (which treat it like a phone) windows 10 kinda gets away from that by making all apps windowed (like windows). I find Windows 8 is easier to use with just a keyboard at times. The windows search functionality is great, and they've improved many of the commands.
If your kids can get at the internet they can get at entertainment. But if you cut off the internet then you cut off their ability to research the problem.
I'm not taking issue with anything you've said, but to wander off topic slightly... The Windows 8.1 app for Netflix is one of the best ways of watching Netflix. It supports the higher bitrate non-4k Hd streams, 5.1 audio, profiles etc.
It works great on the low-end Windows 8.1 tablets (like the Linx 7), whereas the Silverlight and HTML5 browser-based options can struggle to do HD smoothly.
Also there is now Microsoft Office Online. While not as good as the native versions, they are usable.
I'm assuming that this article is apropos of the article posted on HN earlier today about how Python is the new BASIC, as far as educational languages are concerned. I agree with the sentiment. These days, we can and should do a lot better than BASIC as a first language for kids.
When talking explicitly about children beginning programming, I think "you can only blame yourself" is overly harsh. I would certainly say this of a seasoned developer; but a child just starting will—and, I think, should!—do whatever the language allows him or her to do, and it is too much to expect such a child to see, before the bad habit is ingrained, the price that he or she is paying for the apparently wonderful freedom of navigation that GOTO affords. An introductory language should, I think, be very opinionated in matters of underlying structure; just having good options is not enough, if they are not forced (or at least strongly impressed) on the novice who doesn't yet know to use them.
GWBasic was my first programming language and I don't regret it at all. It enabled 9-years old me to start messing around with programming without too much hassle and honestly using (or abusing) goto then didn't interferred when I have to learn Scheme(my second language) at the university.
For a young kind (<10 years old), sequential unstructure programming is more natural and easier to pickup. I remember having struggled with For statements when I was using basic and I really appreciate them way later in life.
Also, why so much hate to goto? there are not many alternatives if you are programming in assembly anyway.
My first programming language was machine code of kp1816BE35 (I still remember the part name), a soviet clone of some 8-bit processor. It had to be flashed, not flashed, _burned_ into a UV-erasable ROM.
THAT thing had only GOTOs. Yet I don't see a problem with it.