for those just joining– a little about my work so far

since around the first years of school, ive been a philosopher, student and programmer. granted my programs up until age 10 were not much, but i was teaching myself with one or two books. i even taught myself how to write programming languages, and i can teach you the same.

in terms of philosophy, i declared myself an atheist at the age of 4. i didnt know the word, i grew up in the bible belt, but i was never pushed to go to church (or reject it, or to be agnostic, or anything.) i loved science, and it simply didnt jibe with this hand-wavey spiritual business (which i would come to accept at least in part, later on.)

at about the age of 4 is when i started using computers as well. its a fact that i was a bright kid. but i could show anyone how its done, explain it in plain terms (to anyone interested) and by the time i was in my 20s i was showing my best friends 7-year-old how to type in basic programs. if you really want to understand, dont just read them– type them in!

unfortunately, basic and programming have gotten a lot more complex. and by “a lot more,” i mean its optional. but unless you know a lot about computer languages, you simply have the whole thing dumped on your lap with no idea how much of it is optional and how much of it you must learn in order to understand the gist of the thing.

enter basic, in 1964.

basic was created in hanover, new hampshire to take the esoteric discipline of computing and make it conceptually accessible to everyone on campus. it was so wildly successful, that by the 1970s it had spread to secondary schools who could access the dartmouth timesharing system (dtss) via teletype, and basic for the altair 8800 was the original product microsoft was created to sell. there are several videos of an altair running basic on youtube:

another computer language from the 1960s to take over the world of education was logo, which is actually a full-featured programming language but you will probably only see it used to move a cartoon turtle around the screen, drawing colorful lines in its path. in some logo-inspired dialects this part of the language could not be easier:

u 40 l 40 d 40 r 40

 

in english: “draw upwards 40 points, draw left 40 points, draw down 40 points, draw right 40 points.”

this creates a square on the screen.

the problem with logo and most of its descendants is that it starts easy and becomes very complicated or esoteric very quickly. or alternatively, it starts out easy and becomes very cumbersome– you may never get past moving a turtle (or cat) around the screen, which makes it difficult to introduce logo to adults.

but in the 80s the way computing was taught to children and adults was to get them into typing itself, then into typing basic programs or exploring with logo. as the 90s gave way to training with applications and using tools online, we stopped exposing students to the very essence of computing. instead of understanding code as the building block of all software, we operated on the idea that showing how to click on magic boxes was like teaching someone to fish. but clicking on magic boxes will teach you nothing about fish, or about fishing; a better metaphor for 90s computer education is “teaching someone how to buy and eat a fish.”

fortunately we are in a new era of single-board computers like the beaglebone, odroid-x, or raspberry pi, and once again students are learning some very familiar lessons. they are using powerful and flexible languages like python and javascript, but ive tried teaching both of these languages and to be honest, they are so complex that unless youre committed to learning them they will not hold your interest.

this is not to disparage python– i coded in basic for 25 years and spent about 5 of them looking for the “basic of the 21st century” and came back from that quest with python itself. (a note to python 2 fans: i am referring specifically to python 2.)

but to share the joy and simplicity of basic, i spent a year working on a new language, which is inspired by basic and logo with a few cues from python, as all of these languages have their own nods to ease and simplicity.

from python it takes lists, which are like basics arrays but they do not restrict each array to “just strings” or “just numerics.” in python and fig, you can mix the two types.

from logo it takes the simplicity of syntax, which rivals basic and python in what you do NOT have to learn. want to create a variable “x” that is equal to 5? here you go:

x 5

 

done!

but wait, you keep hitting equals (or you want to bring back the := for assignment?) voila:

x = 5
x=5
x := 5
x:=5

 

they all work.

for most of history, basic was not case-sensitive. python is. no problem:

X=5
p=x : PRINt

 

it works! and the colon : is optional. as in logo, you can use space, or you can use a semicolon, or a pipe:

X=5
p=x print
p=x ; print
p=x | print

 

the reason for this is that sometimes these syntax elements will provide valuable visual cues. but fig ignores most of them. it still pays attention to quotes:

now "hello, world!" print

 

that sets variable “now” to “hello, world!” and then prints the variable. qbasic has a ucase$ command, and so does fig:

now "hello, world!" ucase print

 

that prints HELLO, WORLD! instead.

fig goes left-to-right, because the last time i showed basic to a friend of mine, she told me “its too much like math.”

well of course it is. but i thought if it was more like english, that might help people learn how to code for the first time. want some more features? fig has about 100 commands. and one of those allows (tada!) inline python code:

function funkyfunky p
now #you have to create it in fig to call it in fig
fig

python
    def funkyfunky(p):
        if p == 3: print "yeah!"
fig

now funkyfunky 3

 

in that example, the python code isnt necessary, just a demonstration:

function funkyfunky p
    ifequal p 3
        now "yeah!" print
        fig
    fig

 

python indentation is great– but i know people that really have trouble with it. fig uses pascal/basic/bash-like commands instead of indentation or braces:

function funkyfunky p
ifequal p 3
now "yeah!" print
fig
fig

 

the “fig” command is like unindenting in python, and also returns from inline python to, well… fig. in many cases you can use basic-like “next” or “wend” for aliases. if you like bash, then “fig” is one letter different than the “fi” command.

this year i wrote a book that pretty much explains the entire fig language, which (like fig itself) is in the public domain.

if you want a nifty live gnu/linux distro that features the fig language, there is fig os, or you can look at this review on distrowatch of the first operating system distro to include the fig language– refracta:

http://distrowatch.com/weekly.php?issue=20161017#refracta

refracta is based on the “devuan” fork of the software they run on the international space station. because i havent found a screencap of fig running in refracta, here is one of it running in devuan:

prs

 

i designed fig as a teaching tool to make it so anyone can learn to code. if you didnt learn fig, i would recommend python, or javascript. each one has its advantages, but i designed fig to make it easier to learn a language more or less in its entirety. that was possible with basic in the 80s, and is now possible with fig today.

i use fig to teach programming, but i would like to do that more often. i would also like to teach people how to create their own programming language.

the hardest part of creating a programming language is writing a program that can parse code. figs left-to-right parser demonstrates how a useful language can be parsed fairly easily. if fig were more strict and required syntax between commands, it could be parsed even more easily.

i have tried to create a recursive parser (the kind that makes a language “too much like math” in my friends words) on a few occasions, and i know its something trivial that im not doing, because ive seen them work.

you dont ever have to write your own parser to create your own language. certainly it can be fun and rewarding, but whether you modify an existing parser or use a parser generator, not every language has its own parser– you can find tools for creating them in c, javascript, python and even php.

why more languages? so we can get closer to making languages that truly anyone can learn. basic, logo and fig are really good for that, in my opinion. python isnt bad for it. fig is the most ambitious language project ive ever worked on, but i wouldnt mind participating in the design of another one.

because its written in python, fig runs on most gnu/linux distros, windows, mac os/x, android, bsd, and some other operating systems that are capable of running python.

 

 

Advertisements

4 thoughts on “for those just joining– a little about my work so far

  1. Your comment on making programming more like English reminded me for a moment of Pogoscript ( https://learnxinyminutes.com/docs/pogo/ ). Pogoscript starts intuitive and eventually spins out of control in order to make the syntax more readable. The fact that math and computing have so much in common makes it easier to go from one to the other and back for those who enjoy it. Everyone else just wants to tell the computer something, not deal with the nitty-gritty of how it has to be accomplished. Most people deal with – what I’ll call – “macro scale pieces” – their car, their fridge, their clock. Each of these things are complicated in themselves, but it doesn’t take a genius to use them. It takes a certain mentality to appreciate the finer details of these things or to take the car/fridge/clock apart and see how it works. That’s why not everyone can program – they simply don’t have the interest. In a sense then, it’s nice to build not just frameworks for things but creation suites. That’s why suites like RPG Maker are so popular. It appeals to the person with the idea who doesn’t want to deal with the nitty-gritty details.

    The first step in getting people to learn is perking their interest. Without that, you’re talking to a wall.

    Part of what might help people is visual programming. Current visual programming suites are bulky and tedious, but they are easy to understand for non-programmers and not subject to syntax errors. At the moment, current suites may lack support for a number of things, such as the ability to compile to byte code or something faster, or can’t integrate with larger libraries. I’m still looking for a good one though.

    What I’ve really found though is that everyone has their own language, be it English, Swedish, etc. If you can find it, it’s easy to enjoy. If it doesn’t exist, you invent it. The same is more or less true with programming. While their aren’t as many programming languages that fit exactly what each and every person is looking for, there is still the chance they will find one that expresses most things the way they want, and that alone can generate the interest for one to learn. Fig is great for you – it has what you want in a language, expressed the way you feel comfortable. I look at it and realize it doesn’t fit me. I’m more comfortable with visible bodies, so while I like Python, my own programming language uses curly braces.

    I like your answer to “why more languages”. I think that’s a good response to the frequent criticisms of newer languages. Keep it up!

    Thinking about all this has made me start to wonder if it’s possible to categorize people’s minds by the way they prefer to program. Maybe some people like information streamlined? Maybe some people like information in clumps or linked together? Seems to be a much deeper thought than asking whether or not one’s desk is “organized” or not, but a “how”. Think about how many programmers there are and then think about how many different kinds of languages there are. Assuming many of these programmers have the same personality type (e.g. via tests like MBTI), why are there so many different languages? Seems to say something about each person’s mind, no? Further research on this subject would be very interesting, though at the moment, I have little idea as to where to find it. Your thoughts?

    Liked by 1 person

    1. i would say that fig definitely isnt ideal for “everything.” i didnt really make it for me, rather i made it to check off a certain group of checkboxes, and surprisingly i can stand to work with it for some everyday tasks.

      fig offers shortcuts that i enjoy using, but it also offers inline python— a feature you wouldnt want to be without once you really “get” coding.

      fig sneaks years of knowledge about coding into something that doesnt take years to learn. for example, “hello world” in most languages is just an output statement away. but to do it in fig requires either a variable or a command block:

      x “hello world” print

      and an output command: print.

      i dont think there is a written programming language that is closer in syntax to modern visual languages– from minecraft to turtleart to app designer, these visual languages mostly pick up where logo left off.

      fig does that without the colorful blocks. you could still create a colorful blocks ide, but then it would be closer to written language already– its got so few commands and parameters. (app inventor has tons.)

      in short, i think fig is better designed than it may appear the first time you evaluate it. but as i said, i dont want people to just take it and use it– id like to see someone elses idea of what a “like fig, only better” language would be.

      for many years, i wanted to create a language that was “like basic– only simpler” or “like logo, but with the flexibility and command set of basic.” fig could be those things– its as close as i could get to those objectives.

      but its an effort i would like to see become a lot more popular. you wont find tons of research on this, because no one is really doing it. but id like to inspire people not only to learn to code– but to show coders how easy it would be for them to create a language.

      they could start by modifying an existing one. fig is in the public domain– and its fewer than 2000 lines, and it has a pretty complete/flexible command set for its size. would it be easier or more fun to modify another language? or perhaps to create one that does fewer things? i would encourage people to find an approach that made it as easy as possible.

      in fact i would say that a simple 5-command language could be created in an hour or a few hours, if you made it really simple. it still counts. a more complicated language (still pretty simple) could be done in a week, and yet another could be done in a month.

      thats 3 toy languages in as many timeframes, and any coder (honestly) could do any or all of those. its simply a matter of outlining requirements that keep the task easy enough. but wouldnt have to do all of them– it would only take one.

      interest is something you want to inspire, absolutely. and its the main thing people need to do something. an hours worth of interest– if not wasted on arcane things like syntax? you can do a lot with that. not enough is done with an hour– it used to be. thats why basic worked so well, for 4 decades.

      Liked by 2 people

  2. This field was intentionally left blank says:

    Yeah!! I totally remember Turtle lol. I grew up in the ’80s, and we puttered around with the Apple 2Es, where we learned the basic commands. We never took Basic beyond, well, the basic level, because we were in Grade 6 at the time, but I think it would have been fun 😊 Unfortunately, by the time I got to high school, computers had transformed into Point N Click, and so had our classes. There might have been a programming class or two, but since they were electives, and I was going through more of an artistic phase (and was intimidated by anything scientific or mathematical) at the time, I never went further. I like your tour through history and especially your analogy to the “teach a man to fish” adage. Perfect fit, and well said! ❀️

    Liked by 1 person

    1. other than the fact that logo and basic are the two most successful educational languages in history (even the modern equivalent is so close to logo in its concept and genesis, it might as well be called logo too) the thing i liked the most about logo was how light on punctuation it was.

      fig doesnt require (but does allow) punctuation for any of the following:

      separating commands on a line / separating parameters, separating blocks / addressing arrays / math

      for python, the punctuation you have to learn for that is ;, (,), :, [], and +-*/%**, respectively. fig was designed with the code-phobic and definitely the math-phobic in mind, to be more like “language” without having to learn complex/arbitrary phrases (like you would in the very wonderful hypercard/applescript.)

      you still have to learn what # and ” ” are for, because i only added punctuation/syntax when the alternative was definitely worse. its a really simple language that has enough features to create still another multi-purpose programming language. πŸ™‚

      Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s