educators should help design languages for coding

off topic aside: dear wordpress, please move it back to the left. thats terrible over there! how many websites do you know of that put stuff like that on the right? ive right-justified this paragraph to exaggerate how absurd the move is. oh… and now everything on the reader is off-center, why?

 

amidst the idea that coding is just about teaching logic (and the suggestion that we put more time into the abstract than the functional,) lets talk about the benefits of actual coding.

for many educators, they already struggle with the problem of connecting “how are we going to use this?” with coding. incredibly, they already know one of the answers: coding is great for teaching people to problem-solve using logic.

its also good for getting people to finally “make friends” with their computer. instead of trying to point at stuff to make it do things all day, coding brings the computer in as a real ally and workhorse. instead of telling an application to talk to the computer, youre talking to it yourself!  coding is the shortest and straightest route to digital literacy.

but even though it helps solve (or even prevent) computerphobia, the fact that some educators are mildly computerphobic– and notice it in their students– leads them to say things like “wait! this is good for teaching logic– cant we just teach logic instead?”

now youve not only thrown out the bathwater and baby, but the bathtub as well! and youve thrown out the tool that was so great for teaching logic– even with practical everyday applications.

dont forget, coding actually produces something. it may not be the next version of windows or even the next popular video game, but it has results that people can look at and even reuse– how many school assignments are like that, really? theres only so much room on the front of the icebox.

laura has the right idea: make tools easier to teach with, rather than shy away from using any actual computer tools. https://codeboom.wordpress.com/2017/01/07/gui-zero-making-python-guis-really-simple/

thats also the idea behind the fig language– but this isnt about just fig. fig was intended as an example; i also use it, but fig was meant to be one tool that makes it easier to learn coding. there are several!

nonetheless, fig is a showcase of ideas that can make coding more forgiving, and easier to learn. it even throws one of those ideas away– in basic, if you ask for the value of “x” and x wasnt set, it gives you 0.

python and javascript will give you an error instead; very few languages have ever given you 0, and even modern(ized) users of basic will discourage it or use a compiler option to make that give an error.

i could have made fig return a 0 for unset variables, but some error messages are actually helpful. heres what fig does instead of giving you 0:

each_line_starts_with_a_variable  “hello world”  ucase  print

 

a few special commands (block commands mostly) start without a variable, but other than that its a standard in fig. and naming the variable at the beginning of the line sets it to 0, but you have to actually name it before you can use it. then you can do all you want with it on that line, and the value persists– until you start a line with it again. if you want variables to persist, switch to another one after using them:

x 37

y 28

now x print

now y print

x # now x is 0 again

 

what it doesnt do is let you name a variable later on in the line, if you havent used it already. then you still get an error:

fig 4.1, jan 2017 mn

1 now p print

error: variable or function not created, but referenced… “p” needs to be set before first use
error in line 1:
now p print

 

why do you want an error? the same reason you want your spellchecker to underline thisword in red. its trying to help!

writing helpful error messages is an art (not one im claiming mastery of, either.) most error messages will presume you already know enough about what youre doing that youll at least understand the error message. it would not be impossible to make a system for coding where the error messages would offer to teach you how to do anything properly that you did wrong.

if theres room on the screen, you could offer a simple example of something that works instead. you could even offer an interactive tutorial. however, the more information you add to an error, the more someone might think “oh, no! look at all that– this is really bad!”

a kernel panic really is bad: https://en.wikipedia.org/wiki/Kernel_panic

for one thing, it means anything you havent saved… however after you turn it off and reboot, it will probably be alright otherwise. an average user might get a kernel panic once or twice a year (if that,) unless your electric lines are noisy.

when youre programming, most error messages mean “you typed something in wrong.” thats ok! find it and fix it. it will often tell you where, and figuring it out is part of coding. it also teaches you one of the most valuable applications of that logic they want you to learn: debugging.

of course, once youre not afraid of error messages, youve overcome one of the things that the average user lives in fear of– a message that says “hey, somethings wrong!” and they dont know what it is. and that is a great reason to learn coding!

but educators shouldnt throw away these tools– by all means, add more. but its rare to offer such a strong connection between learning concepts and applying them as there is with computing. dont squander it! use your voice– online or with computer-savvy associates– to talk about what would make the coding experience easier, without throwing the whole opportunity away.

 

 

Why Our Kids Must Learn to Code | Mark Heninger

i reblogged this over my post on writing a programming language: https://codeinfig.wordpress.com/2017/02/07/how-to-write-a-programming-language/

i think its really important for people to think about this– some of you already know how to code. its good to know why you should help other people get there, if you can. and do check out the original post, even if youve read most of it here. i want you to check out the blog its on, if youve got a minute to do so.

Free Campus

Why Our Kids Must Learn to Code | Mark Heninger

Find the beauty, prose and voice in Code. We all should know code as well as we know our own language. What do you think?

Video link: https://youtu.be/STRPsW6IY8k

Free Campus link: https://goo.gl/PwMrvE

View original post

this is what happens when you make coding elitist

people are declaring themselves “NON-PROGRAMMERS” while programming a computer:

I AM A NON-PROGRAMMER!
I am writing in bash and gtkdialog.

theres a word for writing (code) in bash and gtkdialog. but weve overloaded its meaning so many times over– resulting in the simple misunderstanding that so many things arent “really programming.”

its ok– you dont have to label yourself anything you dont want to. but if youre working with code, thats the thing– youre really quibbling if you want to talk about non-programmers that program.

elitism is only partly to blame. i take responsibility for my part, talking about “languages and introductions for non-coders.” but that means “for people that arent working with code yet; people that havent tried it before, or people that gave up quickly.”

if youre in training, youre coding. and most “programmers” are always in training anyway. people are still more concerned whether they qualify or not, the end result of which is people arguing with me when i say “everyone should learn to code” that “i dont ever want to learn to code! im happy writing and editing bash scripts.”

this has actually happened several times, despite the fact that some programming languages are easier to learn than bash. bash scripts do provide endless examples and let you learn-as-you-go, so if you dont run windows theyre still a good way to learn: bash is “learnable.”

but what theyre saying isnt that far from: “i dont ever want to learn to drive, i only deliver pizzas in my car.” in the future a new metaphor will be required, but for now its just as silly.

in case im not clear, using the command line (depending how you use it) may or may not be “coding” per se. theres some gray area. but at a certain point it definitely is coding, and the line between the two is a thin one. in other words, if youre comfortable with (or need, or are using for whatever reason) the command line, youre close to coding or “programming” already.

what is “scripting?” its a kind of programming. arguably lesser perhaps, but the line between “scripting” and “programming” is artificial, was always quibbling, and gets smaller every day as scripting languages get more powerful.

can you program without the command line? yes. can you use the command line without programming? yes. but theyre still related, and people are putting a very strange amount of effort into separating things that go together pretty naturally and easily. you can if you want to, but really, why?

ive only found one good reason for this much effort to distinguish the two, other than the need to quibble. by saying “im not a programmer” you shield yourself from the endless critiques of know-it-all coders constantly telling you to do it a better way (sometimes helpful, often used as a bludgeon or critique, and often arbitrary and useless– personally i find it annoying and practically useless when people tell me dont put “cat file” in front of a pipeline.)

but since this sort of nit-picking happens at least as often in bash as any other language– it doesnt really work. either way it brings me back to how elitism is robbing people of the chance to realize theyre programming. thats a very needless shame. i was lucky enough to teach myself how to code– i doubt i would have continued to enjoy it for 30 years if id had that nonsense to contend with every step of the way.

 

 

code.org and codesters

a friend of mine that did marketing and communications for a large organization showed me that heavy critique can be a launchpad for discussing who you are and what you have to offer.

so yesterday when i blogged about idit harels quartz article, i found it necessary to review code.org and see what it was like to use once and for all. note that i am not affiliated with them in any way, if anything i am (like harel) in “competition” with code.org, but not any kind of serious competition– more the theoretical variety.

in reality, i think the more tools that are available, the greater the odds that we will find newer more innovative solutions to the problem of computer illiteracy. so i like to at least be aware of as many of these solutions as possible.

in the past ive been wary of mark zuckerbergs endorsement of code.org, as i am no fan of his. i put that aside and looking into the site and its authors, i am pretty impressed. now that ive tried the site (yes, its drag-and-drop coding) i am more impressed. instead of just playing with logo, you have a hi-res cartoon character trace over a practice line. you have to solve for the shape using code– this is great.

for a look at what im working on, you can see that im doing iterations on instructional materials here: figch0and1.gif (281k, 502 x 7144) and im excited that harel is working on / with her / companys own solution at globaloria (and i still think its worth mentioning this in the article criticizing code.org.) but i havent tried it out yet.

like harel, i am personally a fan of helping people write code, vs. drag-and-drop. but i dont think this is right vs. “all wrong” like she describes, there are definitely pros and cons of both concepts.

in the days of basic, dijkstra claimed basic was all wrong, even damaging, while others simply made basic work better. but its difficult to impress me with elitism as ive heard it all before. (n.b.: someone compared my language to pascal the other day. i was very flattered– niklaus wirth is awesome.)

naturally im fascinated with concepts that bridge writing and drag-and-drop, such as greenfoots frames concept: http://www.greenfoot.org/frames/ but since im allergic to java, i can only hat-tip the innovation.

but the best part of reading harels article was this reply to her twitter account:

Provocative, interesting post from our friend @Idit. http://goo.gl/P6ew9E Codesters combines ease of blocks w/ access to actual code.

the video on their site: https://www.codesters.com/ is worth a look. buttons on the left, drag to the code window and it drops code in you can then customize. best idea ever? couldnt tell you. exciting though? absolutely, i like it!

(full disclosure: as a teaching tool / demo, i once made a buggy javascript-based calculator interface that did one keyword (with parameters) at a time, to show what was and wasnt a valid line. the one at codesters is a proper editor, and actually works!)

im not the sort of person that gets drawn in by every shiny new thing. for one, im typing this on an old netbook; almost no one i know uses those anymore. (it was already used when i got it.)

but just like we have more reliable software/design when it is informed by knowledge of the past, we can get good ideas by taking inspiration from the “future”– even when its a hypothetical future, even when a lot of it is hype, and even when most of it is a fad. clearly, part of it is really working and that counts.

i love, i will defend, time-tested concepts. but i dont think all good design ideas are behind us, either. stay open to the next good idea; maybe you can use it as a part of your good/reliable, more old-fashioned solutions.

happy coding!

 

 

youre just not cut out for computer science

sometimes you may wonder if youre really “cut out” for computer science, or programming, or computers. perhaps you think youre “only good enough” for some things but not others, and for the moment that might be true.

at least some things are really as hard as they look: i doubt i will ever understand encryption on a level that allows me to contribute to the field. but its interesting! so i try to understand at least the basic concepts.

the good news is, not having a phd-level understanding of encryption wouldnt stop me from entering the computer science field. and its worth mentioning that although i enjoy numbers when paired with computers– i really dont looooove math. encryption is heavily a math thing, so i dont think i have enough interest to fully grok encryption.

but i do have options, and mostly im interested in solving computer literacy– not just applications use, but really understanding the essence of computing as well as the reading and writing of code. thats what i care about, so thats what im cut out for. (maybe.)

what im trying to say, is that there isnt necessarily much point in dedicating yourself to something you dont love. if you love something– that matters. if you love something, and dedicate yourself to it, maybe thats what youre really cut out for.

and if you love computers, you should keep going with that. i think people get discouraged by the idea that some people make it look so effortless… its never effortless!

if someone looks at hundreds of lines of code i wrote, they dont know that its the longest code ive ever written. they cant imagine the times ive struggled to grasp concepts that were foreign to me. they dont know that it wasnt all easy, or the amount of criticism ive endured from people who needed to put my efforts down to feel better about their own.

ok, i admit this: i did start young. i did find “hello world” to be magical and easy to follow. my first year of coding was a piece of cake. but so what? my first year of coding was stuff like 10 color something, 20 print something, 30 goto 20! ive seen lots of people who never coded before do more in the first 2 weeks than i did in the first year!

i just kept doing it because i loved it. and if i didnt love it, if it wasnt interesting, i wouldve done something else with the years ive spent learning. but that doesnt mean it was easy.

im not a “natural” and im not cut out for computer science, because no one is. people who work really hard are more cut out for it than i am. people who are good at math are more cut out than i am. but lots of people that are good at math are also “terrible” coders. there are simply no guarantees.

its simply not about being cut out for anything, its about what you love. if you love computers, if youre interested in computers, follow that. if theyre difficult, that doesnt mean anything at all. if youre struggling, you must care enough to do what youve done so far. if something gets easier, you probably worked to get to the point where it was easier.

i grew up watching a lot of science shows on television, utterly fascinated with everything that happened in a lab: electronics, computers, chemistry, robotics, engineering, physics– anything that involved exploring the future.

the funny thing about computers: ive never heard any other branch of science talked about so often in terms of whether people are cut out for it or not. when i was a kid, they wanted everyone to be interested in science– anyone who could possibly be exposed to the wonders of nature and the universe.

why isnt it more like that for computers? people i talk to often act like a computer is just some machine that gets them somewhere, like a car goes to the grocery store. and yet you dont have to become a physicist or a phd to wonder why the sky is blue… so why dont people wonder more about computers?

personally, i think its because theres more money to be made from people wondering why the sky is blue (or other science questions) than there is from people not wondering. on the other hand, there is more money to be made from people thinking the computer is just some kind of electronic butler instead of one of the most amazing scientific tools that our species ever created.

this is a problem that needs to be solved. people should get a sense of wonder from computing, not a sense of dread or incompetence. the computer still has a cultural stigma, but the stigma has shifted from the person who loves it to the subject itself! yet what better push is there for science and future scientists than a sense of wonder? what better push is there for computer science than a sense of its pure potential?

but then again, youre just not cut out for computer science. no one else really is, either. if you have an interest in computers, or a love of some part of the computer field– follow it. you will most likely find something worth doing.

more to the point, who should be participating in computer science? absolutely everyone. although some have forgotten the importance, its still the future– and everyone benefits if everyone is encouraged to participate.

we have to stop making it about who is cut out, and follow the example of quality science programming: give everyone we possibly can that sense of wonder. dont just teach people computer science: share your love of computing (yes– you too!) thats what we really need to move forward from here.

 

 

getting more girls to code is only half the problem

stop:

when i wrote this, the post over here wasnt written yet. its better, read it instead. or you know, do what you want; but against my advice. cheers.

 

im interested in any effort to be more inclusive. the reason is that im one of the many people that really believe everyone should be code-literate; i think without it, we risk never solving the issue of computer literacy.

if only it was as simple as waiting for the “old guard” to die off… that wont ever work; we need the old guard (which i am nearer to becoming a member of) to remind us what it was like before so many general-purpose machines were rigged into half-locked-down appliances.

to say that we need more girls coding is an understatement. and, if you look at all the people who do code, then getting a larger percentage of girls to code is still a thing we havent solved yet.

but what if you look at all the people who dont code? there you have the ultimate diversity: if you look at all the people who have never coded, there are probably over a billion females, over a billion males, over a billion children and teens, and a billion people over the age of 40.

i havent forgotten minorities, people with disabilities, im sure i could write a list pages long of the groups of people who need better inclusion; because there is no group that has “enough coders” in it already. and no, i havent lost the point that among people who already code, females are under-represented. although most males dont code either– most people dont understand code (or think they cant) and thats the problem i want to solve.

so im very interested in programs to include more people from every background/makeup/what-have-you in coding, because one of the lauded tenets of feminism is “its about equality / its better for everyone.”

great! i am looking at all the “get girls to code” initiatives i can, for ideas on how to get more people interested / welcome / comfortable with coding. and i hope to see more initiatives in the future, that make use of these ideas to get everyone interested; to get everyone to see how vital this skill is not only to their profession, but to their participation in a well-informed 21st century democracy.

and democracy (i am told) needs more of everybody, too. at least when people say “get out and vote” there isnt a group they arent referring to. everybody vote! everybody code! everybody welcome. i definitely think we need still more of that. so please by all means, lead the way… and i will be right behind you. i am still on the lookout for more ways to make it happen. (carry on…)