Better Tools For Programming Literacy
waderoush writes "Adam Wiggins, co-founder of Heroku, agrees with anthropologist Bonnie Nardi that programming isn't just for geeks. The problem, he says, is that today's tools for teaching programming are woefully inadequate. In a commentary, Wiggins argues that there are two major gaps preventing programming tools from being accessible to beginners: 1) they're too fussy, requiring extensive setup, and 2) they're focused on the technology rather than everyday tasks. A good tool for learning programming, Wiggins argues, would emulate an Excel or Google Docs spreadsheet – beginners would be able to fire it up instantly, and would be able to get useful things done right away. (He's dismissive, though, of visual programming tools that 'attempt to hide logic behind a point-and-click interface.') 'Broad programming literacy is crucial in a world increasingly made of computers,' Wiggins says. 'Despite common stereotypes, programming is not out of reach for the average person,' as long as the tools are easy to set up and specialized on the programmer's task."
...is a WYSIWYG editor for writing programs in Basic?
People can't program the VCR clock. (For the young ones: Back in the old days we called the Tivo "VCR". Just like everything must have a camera today, back then everything had to had a clock, and it had to be set manually.) You can barely teach (most) people algorithms that aren't completely linear. If you think you can teach them to develop algorithms, you need to get back in the trenches and deal with normal people. Developing programs means to understand problems in depth and to correctly answer a lot of "what-if" questions about complex systems. Normal people actively try to avoid doing that kind of thinking.
It is a far more demanding task that "geek" would qualify you. It requires talent, education and experience. Those that gripe about the tools do not get it or have never gotten beyond toy examples. Sure, a better tool helps. But when you create software (as opposed to slapping together some disaster waiting happen), the direct level of skill needed to use the tools is actually a minor concern. In fact, the language used is a minor concern, the problem is what matters. Insofar I even agree with the article. But refusing tools that are a bit complicated is the hallmark of somebody that does not get it.
Case in point: Pen and paper are exceedingly difficult to use for writing. Yet we spend years on every person to qualify them to use it. Yet compare the complexity of pen&paper on one side, and a computer on the other side. Anybody expecting the computer to be easier to use just has no clue at all.
All that "simple" to use tools for software creation do is cause even more really bad programs to be written, as suddenly everybody and their grandmother thinks they can do it. Like giving calligraphy pens to amateurs. Sure, they can produce some smears, but they cannot produce anything worthwhile.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
If you lack the problem solving ability needed to set up your devkit, maybe programming isn't for you.
I just started experimenting Pure Data, and it is an example of an environment that does this quite well. Although it can be very complex when you dig down into it, it's very easy to get started with and create useful objects without the "fuss" that TFA talks about.
A house divided against itself cannot stand.
"Despite common stereotypes, programming is not out of reach for the average person"
I think this just shows how little Wiggins knows about the average person.
-Lod
He clearly doesn't knows even what he's proposing.
This gentleman is asking for more programmable tools. I imagine that he's thinking of programming all them in a single, domain specific language that covers all domains of tools a user may want to program. But this is an oxymoron. A language can be domain specific or general purpose, but not both.
#3: "Why am I doing this?"
Unless the "average person" has a hobby-like interest in computers, wanting to understand why they work or what one can or can't do with them, WTF do they care about programming them. They're merely interested in what the software and hardware does, not how it does it. What does it cost, does it scratch an itch, is it too annoying to use... These are the pertinent questions.
Not "wonder how the lookup works so fast..."
The best fusion of programmable GUI and CLI shell ever invented. (That is /programmable (GU|CL)I shell/.)
If only the rest of 3D modeling wasn't so hard to learn. If it would do video/audio/text/3D processing, via files/network/etc, that would be enough.
I mean whatever you do in the GUI, it results in script code in the CLI, and vice versa. You can even select that script code, drag it to the shelf (icon bar), and voila, your new wizard is ready. Adding dialogs and such is just as easy. And it’s all either Python code or a variant of TCL (bash-like in style). Extremely easy to learn and get into. Without limiting you in any aspect, since there is even a C/C++ API if you want to go big.
Someone *really* thought, when making Maya.
How about a graphical shell like that. No compromises. Full power, still easy to use. Efficient, emergent, elegant. My company motto.
beginners would be able to fire it up instantly, and would be able to get useful things done right away.
It seems to me that a great deal of people have this idea in their heads that any and everyone is able to do any and everything. This is bollocks.
Furthermore, blaming the inability to get interested in something or to cross a certain difficulty barrier on the tools is just laughable.
If one can't take the first step in programming and get acquainted to the tools, he won't be able to make the later steps either. It takes commitment and interest. Reducing the first barrier won't bring a lot better programmers, it will bring in a lot more bad programmers that get stuck half way through and don't really help anyone.
All education is woefully inadequate and only suited to those who'll help themselves. How badly are language and math skills taught? I'd bet the vast majority of adults are baffled by what the heck calculus actually is or what it is used for. Heck I bet most don't even see practical applications for trig.
Along the lines of Siri but self contained. It would understand stuff like controlling the TV and the home security system. My mother could really use something like that and it doesn't have to be dumb either. You should be able to give it complex instructions in English and yeah it would be helpful if it could read lips.
http://michaelsmith.id.au
Turn spreadsheets into mobile apps
Not exactly a practical environment for most programming needs. Beside which, you should never trust anyone who scales their website images. Ew!
systemd is Roko's Basilisk.
He's saying programming is not as simple as Excel because programming doesn't have an equivalent of the SUM() function that does almost all the work for you when you are new to it.
Yet, excel never tells you that you have to use the SUM function, or that A:A means the whole A column, or that $1$3 means it shouldn't change the row/column when spreading the formulas. But he wants the development environment to somhow not require knowledge of how a loop works, or what an array is?
The problem isn't that programming is harder than Excel, at least not if you use a full-featured IDE with a decent language, like Visual Studio with C# 4.0. You can learn to drag a few controls to a new window, double-click on a button, and write something like "MesageBox.Show(textBox1.Text);" in seconds. No knowledge of arrays or functions necessary.
Programming is NOT harder than excel, and there ARE tools that make it as easy as possible. Anything else requires "visual programming" which he states he doesn't want, either. But of course, excel doesn't "hide the logic" from you, right?
The fact is, you need some basic knowledge to do any job. Excel requires knowing the syntax and function names, so does general-purpose programming, just like you need to know the parts of a car, and their use, if you ever want to build one from scratch.
It's algorithmic thinking. Lots of people can't do it.
Today
Setting up Java..
1. Download the JDK, not JRE.
2. Run the JDK installer.
3. Setup the class path.
4. Install an IDE and make sure it see's the JDK.
5. Install ANT. (optional)
6. Learn how to setup ANT build.xml files. (optional)
and/or...
5 or 7. Figure out how to compile with the command line.
6 or 8. Start coding.
Back in the day...
1. Start up the computer.
2. Type Basica at the command prompt.
3. Start coding.
Which is less scarier for a new person to get started in?
~~ Behold the flying cow with a rail gun! ~~
Turbo C was perfect.
It ran off a single floppy disk.
It didn't need to be installed.
It had built-in help files.
Creating useful programs was possible.
Clearly, this worked well before Microsoft introduced MS-Windows and huge amounts of bloat to programming.
In former Soviet they tried to make everybodys programmers. That didn't turn out very productive.
reply to self: of course I've strictly followed Skitt's law in my post...
As long as we have no interfaces enabling an average human to set the time on the DVD recorder, let alone let it record material at a given time, talking about making programming easier is pretty pointless.
"Programming" is teaching a system something new, cast into the system's concepts. Most people have significant problems thinking in terms of any concept. Conceptualizing does not come to them easily, and that is not a fault of the computer but of the person.
Almost invariably when I discovered laypersons using a programmable system (like Emacs or Scheme or whatever) to good and progressed advantage, these laypersons were geeks in other areas: ancient or foreign (typically non-Indogermanic) linguistics, avantgarde composers, stuff like that.
Now that were observations in the area of rather complex programming systems. You can dumb down programming to make is accessible to non-Ubergeeks. But you won't get by without thinking, planning and conceptualizing in an abstract manner.
simple tool : A Young Lady's Illustrated Primer
as it is eaten so it shall pass
It is not really about implementing a solution. The first step is recognizing that you have a problem that can be made easier by using a computer program. Anyone with a basic knowledge of computers (how they work; what they are good at; what they are not so good at) could make that first step. The next step however is not trivial (for a non-trivial problem): formally defining your problem. Once you have a proper formal definition of a problem, "programming" the solution can be straight-forward, given the correct tools. Many people just don't have the patience to think slowly and carefully enough so that they are able to translate a fuzzy understanding of a problem (which anyone with common sense sort of has) into a formal definition. This doesn't really have anything to do with the tool, although a solid knowledge of a variety of tools can help with thinking within a certain framework. And yes, hiding complexity... good for trivial problems, but always a hindrance if the problem you are trying to solve does not translate perfectly into a ready-made recipe.
My personal definition of the terms are that programming/developing are akin to seeing a problem and writing an application to solve that problem. Coding is taking a problem description and solution specification developed by someone else, and translating that specification into a computer program.
The "coding" option only requires familiarity with the language and the coding tool being used, and seems to be closer to the process I think Adam and Bonnie are aiming for.
However, the "programming/developing" option requires much more mental effort on the part of the programmer, which is completely unrelated to the tool or language used. It involves an understanding of the problem space and the ability to identify areas where the assumptions you make about how things should work will not always hold true (the "what if..." scenarios that several other comments refer to.
As for the "fire it up instantly... get useful things done right away" approach, I am almost certain that a silent installer and a couple of select chapters of a "Dummies guide to " for just about any development tool will get you to the point where you can do something as "useful" as someone would be able to do when opening Excel for the first time - a basic arithmetic calculator.
For any of you professionals out there who has to deal with legacy code, you find that back in the 80's and 90's there were a lot of non-programmers who became programmers and most of them cut their teeth on Database Centered Languages. Like Fox Pro, Delphi, Access...
For many of these non-developers the software they wrote got rather advanced, and often the business reason to replace these legacy systems isn't as much from a limitation of their coding (while looking at the code could make you cringe) but more to the limitation of the language architectural. Often relying on their home build file based Database that often has a problem scaling past a few dozen users, and having a problem couple times a year of a table messing up its indexing or just got deleted because the data had to be accessible via a network file share.
By the late 90's early 2000's affordable and good Data,bases came out. MySql, PostGreSQL, Microsoft SQL... However most languages never really give us an easy interface to these systems.
For example in Fox Pro you do something like this (It may be slightly off, I haven't done Fox Pro in a few years, but you should get the point)
var x as string
select lastname from person where id = "123" into x
No crazy connection strings, no casting you query as a string and then executing it. The Database Calls were integrated into the language.
Most new languages don't do this now. Thus we are going to a point where it is more difficult to learn how to program because people don't program to learn to program, they program to get something done. For most applications it is to have a spot to input data, store that data, and run calculations on that stored data and give an output. These early languages were great for non-programmers because they covered these criteria rather easily. Form Builders, Language integration into the Database, and decent reporting tools.
No as these people continue on, they will often get their feet wet with having to do more, oh, now we need to export the data into a different format, and automatically FTP it to an off site location, Other people need restricted access.... There come a point where these tools become more of a hindrance and you need some heaver duty programming done. However to start out you should have a language that allows for sloppy coding
When you teach someone to paint, Kids often start out with finger painting, often messy, and you get blobs of brown spots, as a picture, But later on you can teach them how to use the brush and clean it brush, then you can get to different styles....
But you don't give a 3 year old a nice canvas and oil paints and expect them to start making something good from day one.
If something is so important that you feel the need to post it on the internet... It probably isn't that important.
is hard. Is there a thing that will, like, make it easy? I don't really want to spend a lot of time on this, but how do I make a game that looks like Crysis for the iPhone? I want to make it work with Google maps as well. I'm pretty good with Blender already - should I bother learning Java?
We've had this for decades: programming by filling out database tables with the Magic 4GL (www.magicsoftware.com).
I have to agree. I've always said that 50% of modern programming is having the right tools, and the right tools configured correctly.
Introduce someone to C. Now explain that even though C is standardised, there's no "standard" way to compile a C program, to port a Makefile, to have a program compile the same everywhere without manual work ensuring so, or even to start debugging. And then show then a Visual C++ project file and tell them they have to manage it and make sure it works even if their primary platform isn't Visual C++.
It can get horrendous. Sure, most Linux installs come with gcc set up and you can compile a basic C file and get a basic executable (called a.out with NO OUTPUT to tell you that, for stupid historical reasons, which still blows my mind), but anything beyond that and you're learning the tools more than the language.
I personally have a deep-set hatred of Makefiles. I honestly can't stand them as a programmer and avoid them like the plague. I get the C preprocessor inside-out and can fancy macro tricks that amaze even me, but I can't be bothered with Makefiles and their separate, unrelated, horrendous syntax. But as a user, they are great when I just want to make a simple change and then recompile without fussing about where my compiler path is, etc. All their alternatives? I have the same problem, but at least plain Makefiles work the same everywhere if they are well-written.
Even IDE's only mask those same details and thus cause more problems. Standard debugging of a problem for a beginner is to google the error messages from the compiler / linker because it really is that atrocious to try to understand what they actually mean.
I have a large C project on the go at the moment. It's several dozen code and header files and the same again in associated resources, etc. It took me an hour to work out how to stop it uploading the resource files to the SVN repository and even now I can break it when I add a new resource file without meaning to. It's a nightmare that only compiles because the IDE generates a hidden makefile, runs it through MinGW's make tools and then runs MinGW's gcc to get it to compile / link. I gave up about the five-object-file mark of trying to compile it myself but in other projects with other people's code, I've literally deleted the Makefile and wrote a bash script to do the job instead, they were that horrendous to understand.
Debugging is also a major bugbear. I know how to load a file into gdb, set a breakpoint, execute it and inspect variable values. Manually. And that's it. I don't even know what half the commands on the menus are supposed to be used for or the correct syntax to make them work and it's not like I haven't tried. Debugging is best done through an IDE that does it for you (still using gdb) and even then the tool doesn't get everything right (I often get out-of-sync line numbers when single-stepping through a program in Eclipse).
I have taught beginners programming since I was a teenager, and it's only got harder. If I was to write a book on, say, C now, I would feel obliged to supply a disk and include a chapter on how to find the compiler setup program, how to install it, etc. so that I could be consistent throughout the book knowing they were using the same tools and the same versions so I could show them how to debug, etc. Just saying "compile this hello world" can be a book in itself, depending on their background, experience, and computer setup.
I frequent a C programming board and most of the problems I see are people using obsolete tools (e.g. Turbo C presumably because it's "free" and their instructors were trained on it), or no tools at all (i.e. no capability to debug, manually typing in compile-lines, etc.).
The next most common set of problems is not understanding how to use those tools or interpret their errors ("_main is undefined", etc.). The next set is not understanding how to write something that doesn't give a compile warning/error (usually because they've star
I taught myself programming. Nerds will be.
The rest just enjoy yourselves with twitter.
This has been tried so many times before. The simple fact is that most people can't program.
Simpler tools, or better tools, can ease the incidental burden of having to work with a program.
What they can't ease is the cognitive load of having to remember patterns, and abstract objects, and nested function calls. Most people can't deal with this.
Mr Wiggins has probably forgotten, as I have, the difficulties one faced and overcame when one first learned to program, and so he's forgiven for thinking that if we just made the environment simpler anyone could do it.
I'd argue that python at the shell is pretty simple, but most people can't or aren't motivated to do even that.
This thinking is like saying "a full piano is too difficult, so if we give people a little toy piano they'll be able to learn to play".
Well, BASIC still exists. There is nothing preventing anyone from using it.
Excuse me, but please get off my Pennisetum Clandestinum, eh!
... of which is what programing and language is all about?
http://abstractionphysics.net/pmwiki/index.php
This is gtoing to happen, it only a question of when and that includes the if an when you get to do so in your lifetime.
It tooj 300 years for the Hindu-Arabic Decimal system to overcome the Roman Numeral system of mathematics...why? Politics o0f thoise who didn't want to lose their position inj society. But Abstraction Physics isn't about some subset of abstract, such as mathematics, but all abstraction, the tools of abstraction.
2) they're focused on the technology rather than everyday tasks.
Well, duh. Everyday tasks have already been programmed. The only way to teach people to solve new problems is to present the technology with some (over-simplified for clarity) examples.
I still remember one of my first book about Lisp. One of the very first examples was how to analytically differentiate an expression. Now that is a good example. It shows that, even with very basic Lisp, you can do things that are unheard of in other programming languages. Only such examples teach you the mindset of a language.
Nae king! Nae laird! Nae yurrupiean pressedent! We willna be fooled again!
ARE available in Access, Delphi, VB (C++ too) & have been since the late 1990's!
* See - I'm actually "one of those 'old guys'" who started on tools like that, professionally, & have been @ it since 1995 as a pro...
However - because I had GOOD co-workers? I was taught correctly & FAR better than I was while earning CSC degrees (MIS/CIS minor on a B.S. Business Admin, & later AAS CSC (to learn more & 'step up' my skills), respectively) on the job... by FAR!
It's MOST important to do what I noted below when an app has "inbound/outbound" remote connectivity (not so much for departmental level apps used internally in companies in 'intranets' though, but... still important, just not as much, for security purposes).
Personally?
I always LOVED it when I saw folks *trying* (& yes, succeeding) in mastering their SQL (most universal business language tool that there is since it 'snaps-in' or rather, is part of, MANY languages for database access!) and actually getting the job done.
They're often, from what I have found, BETTER & MORE PRODUCTIVE WORKERS that produce results... vs. those that don't (bullshitter marketing types).
You've got to give them credit for it @ least. They get the job done, albeit, NOT as safely/securely or fast as possible in terms of overall performance.
It's how ANYTHING starts, & then it's practice!
IF I had to offer anything on this article's premise? It would be that: PRACTICE, & try new things, to learn. Any coder's done it anyhow & will tell you the same.
IF you're a coder? You KNOW this anyhow - so, don't mean to "preach to the choir" or sound condescending, but it is, how it is. I try *not* to assume the person I am speaking to is 'expert' & go into details is all.
APK
P.S.=> Directly executed ExecSQL type calls are frowned upon, & were even then (for security purposes mostly, as well as performance - since it's making the local PC do the work, vs. a usually far, Far FAR faster & more powerful db server)!
E.G. -> I've been using them since, oh, iirc 1997-1999 typically on information systems programming jobs (sometimes tinier departmental apps, but many times mostly LARGE "mission-critical"/"enterprise class" sized ones that span MILLIONS of lines of code, with more stored procs work DB side tossed in also). Before that, when I was 1st starting & learning on smaller departmental apps for reporting mostly, professionally? I was doing what you said for my 1st year. Nobody taught me different in academia is why... had to learn it "on the job" (best school in the WORLD).
Point-Blank: It's better BY FAR, to send a bind/bound variable with the query string to a stored procedure for security purposes as well as performance too - double bonus. IF you don't do it that way? It's part of what opens the door for SQLInjection attacks & such!
The most common & effective defense vs. that? Bind variables for query strings & send them off to a properly secured DB engine, in a properly secured DB server.
(Compiled queries too on better databases like Oracle, or SQLServer, for performance)
For security - that keeps it out of the "front-end" and secures you on the webbound front as well!
Which was & probably still IS a big problem that gets companies broken into by hacker/cracker types because the webguys aren't doing that like they ought to - When I've done ASP.NET (hate it, but it's money & when you're told to do it a certain way, you do), even it has options for what I just said!
(Which is what "boggles my mind" that people still build queries off URL strings & such in the page itself, rather than form variables concatenated + sent via a bind variable to a stored procedure on a PROPERLY secured server & database engine)...
... apk
Bah. I've met enough students that claimed they new binary yet stated it was impossible to represent fractions as a series of digits similar to "decimal representation." If they lack the insight on how to extend a logical method across the radix point, there's little hope for much ability to create new algorithms.
It's like giving an elephant a paintbrush. Perhaps it's art, but it's not fine.
It is supposed to be a simple but modern language designed for teaching . Here is a list of the main features:
Thank you for your attention.
I never understood the obsession with introducing people to programming using a programming language. You basically cannot do anything "out of the box" without first covering a wide amount of topics(including storage, ie variables, types etc). This is enough to turn a large # of people off, so why not start with tools that allow you to write "programs" without having to worry about types, variables etc. we already have such tools, they are called sed and awk(and others) most of what your average Joe is going to want to "program" is some simple text parsing/ manipulation programs anyway, so why does he need to know what an "array" is or what an interpreter/compiler is. You can do some pretty amazing things with a couple of bash commands, why not start with them? Your average Joe can accomplish a lot more in 5 minutes of learning sed than he could by studying PERL, or worse, Python(shudder)
Monstar L
Quite a few languages for education exist that do have easy setup and IDEs. http://en.wikipedia.org/wiki/List_of_educational_programming_languages
Computer literacy is decreasing though because as a society we aren't focusing on it. Computer literacy courses in school should teach basic programming. Having at least coded in Logo would make a huge difference in people's ability to understand computers.
WRONG. The monkey-keyboard problem is NP-hard (it is equivalent the halting problem)
No setup and handles everyday tasks? Sounds like Automator and AppleScript.
This post contains a fairly fundamental contradiction. We do teach reading and writing for the sake of reading and writing, initially -- children don't hold off learning to use a pen until they have a specific sentence in mind. It's taught from the basic principles (this is an "A") and taken for granted that in later life it'll be useful. Programming could probably be taught in the same way and at the same sort of stage of development in the mid future. It cannot be learned on the hoof the first time someone tries to make a computer do something that hasn't been done before, though, which seems to be what the article is suggesting.
What about our deadline?
They act like there is no intelligence involved in programming, which is obviously untrue.
And let's face it, most people in the world are just not that intelligent.
Posting anonymously, since I don't want to be accused of blowing smoke up my own arse.
Still a wonderful language.
- readable syntax .exe, unlike .net
- very approachable
- compiles to actual
- superb UI
there's a reason why MANY MANY places are still using it despite it being over a decade old and despite the fact that snobs throughout geekspace look down on it.
it's just a pity there hasn't been a vb7 with commonsense upgrades like more modern controls, png support, and the like. even if all legacy ocx support were dropped, i guarantee you it would continue to be IMMENSELY popular.
>' as long as the tools are easy to set up and specialized on the programmer's task
Launch the shell, Luke !
Learn HTML. Zero setup, zero installs (on any current OS) and less than 10 basic lines accomplishes the "beginners would be able to fire it up instantly, and would be able to get useful things done right away" aspect. Then move on to JavaScript which supports functions, objects and all sort of more intricate programming concepts and again requiring zero setup. At least after learning these 2, you should have an idea whether you like programming or not and want to try something more involved. On a side note, it's never taken me more than an hour to setup a language targeted development environment (aside from a new web server install), how much more simple is this supposed to be? If it were possible to make software by answering a bunch of simple questions, writing out basic fundamentals and having the development environment fill in the gaps, most of us would be out of a job. ( Honestly I don't see how this is better than visual programming. ) But since mind reading software doesn't exist just yet, we will be safe for a while longer. Wanting to simplify the install of IDE/languages is desirable, but if you can't spend the time to understand how to install the software how are you /ever/ hoping to use it effectively?
HyperCard, from Apple back in the day, was a pretty good environment for knocking out simple little programs that almost looked professional. And it was free. It really was what you're describing, though the language was pretty limited. VB stole a lot of ideas from Hypercard and made it a bit more complex and platform limited and you had to pay for it. JavaScript could step in if the DOM wasn't so confusing. It's probably not ever gonna happen. Programming environments that aren't hard to use always get pissed on by the /. crowd.
What most people lack is not memorization of terms or syntax but rather the ability to think logically.
Praying your program to work won't fix it.
Lucky rabbit's feet and star signs won't help you.
The computer won't give you a gold star for participating.
The computer won't agree with you to avoid hurting your feelings.
That's the real culture shock of computers.
as for #1 (fuzzy setup), if you fire up any text editor and a browser you have already a fully functional programming environment.
as for #2 (task focused), this is interesting and a good point, and there's already examples of scripting enabled applications. users could benefit greatly from a common basic scripting syntax available across apps. yes, that would be the vision bill gates had with VBA or macro recording, but done right. VBA would actually have been a very good idea if they hadn't wanted to mess with "professional" programming too, the result was too complicated for the average user, a plain atrocity to any serious developer and ended up being a monster that filled the world with amateur crap. however, sticking to very elementary "standard" control structures and simple interfaces to operate on app specific elements to allow the user to program simple tasks would be neat, and if done right it should be easy to enable most apps to benefit from.
as for #2 (not tech focused), that's a fantasy, probably because of having too much "technolgy" gurus around who simply can't stop writing nonsense and tossing the last buzzwords. ffs it's a market in itself. most developers don't really care that much about tech, they simply use it.
of course, literacy is always good. the catch is there is no other way to become literate than learning: teach programming fundamentals in school. bingo!
"Broad programming literacy is crucial" is just like the old demand that everyone needs to learn a foreign language. Once learned, it is then never needed or used and subsequently lost. I am a programmer and love the stuff. But if I had gone into wildlife management like I originally wanted to, I would have absolutely no need or care for programming. A word processor and possibly spread sheet would have sufficed.
I'm forced to agree with an underlying point: poor tools discourage students from striving further. Modern carpenters don't have to cut their own boards from trees in order to get planks, nor do they have to mine their own ore and make their own nails to learn carpentry. But in modern technology, too often we have to do just that sort of assembly of a complex toolchain to get our tols working. The result is a lengthy and often burdensome apprenticeship learning mechanical skills. Masterpieces are much easier to create when you don't hve to engage in so much drudgery and spend your most inspired, intellectually active youth learning rote mechanical skills that can be replaced by good tools.
In fact, this is why Perl has done so well. Its tools are not perfect, but it is legible and tolerant and powerful enough to let you get some work done quickly and move on to the next project. And often, someone else has already built a similar version of the tool over at CPAN that you can find and work from.
I think he just described pythonanywhere?
https://www.pythonanywhere.com/
It's essentially "google docs for python"
IF I can do it? ANYONE can, pretty much! I did, since I wanted to change my LIFE for the better financially & yes, "mentally" too, & did -> http://developers.slashdot.org/comments.pl?sid=3368605&cid=42530471 Been professionally coding since 1995 (& yet 1989-1995 I was a loss prevention manager for a large nationwide superstore chain before that & led my chain in 'busts' & saving internal accounting losses)
I changed to programming, because anyone could see it was going to change the world, especially with the advent of the personal computer. It was INTERESTING too.
So far, I've had a hell of a decent career & trackrecord, professionally (enough to buy homes & sportscars etc./et al), & even did well on the side thru freeware-shareware, enough to have had my code go into VERY esteemed wares sold thru Microsoft Partners to this very day.
(For performance increases on SQL Server, & it was reviewed GREAT in today's Windows IT Pro magazine (then Windows NT/2000 Magazine) & was a FINALIST @ MS Tech-Ed 2000-2002, 2 yrs. in a ROW, in its hardest category - SQLServer Performance Enhancement, & still sells well today!).
* All that "said & aside" - I am here replying to you, since I *dislike* when I see folks who code *try* to play 'superior' over those that don't, because there's only 1 thing that separate "us" from "them" - a set of skills!
(Not saying you're about that, but it came off that way to me/it's how I interpreted it is all... I can be as wrong as the next guy, as I can't hear your tone when you type & all that, lol!)
Anyhow/anyways - Those skills?
They ARE truly SKILLS ANYONE CAN LEARN when & IF they're willing to work at it (helps if it interests you).
(Well, nearly almost anyone who isn't severely mentally handicapped, that is)
You've also got to *try* to remember that perhaps those folks may NOT be experts in computing, but... are most likely quite expert in other areas (like the Doctor that delivers your first child or saves you from cancer, or the guy repairing your vehicle when you don't know HOW to etc., too).
APK
P.S.=> Around 1982 I coded BASIC (on DEC PDP-11 timesharing mainframes) - didn't REALLY "get into it" (I was just a kid, getting girls, working a minimum wage job, & doing well @ sports for scholarship with keeping up grades in std. subjects mattered more)!
Later though, I did (moreso @ least) - in college on my 1st degree of 2 around computing circa 1984-1988 (B.S. Business Administration with MIS concentration)
Yes, believe it or not? Yes - ot helped A LOT in coding for business systems later, because I knew the topics @ least @ a cursory level in finance, accounting, sales & marketing, economics etc!
HOWEVER:
The MIS minor/concentration part was way, Way, WAY too 'cursory'/10,000 ft. view & I knew it, especially once I started hanging around more with SERIOUS 'geeks' who I liked (because they were intelligent & didn't talk about STUPID stuff, I mean really stupid pointless stuff you don't learn & grow by...)
Thus... so I went back for an AAS in CSC in 1992-1994, & bettered myself enough on that front to start out in a Fortune 100-500 level company right outta the gate...
(When @ the end? Only myself & 1 russian fellow were recommended for the job, & we started out with 150 CSC students, only 10 of us left @ the end).
However - IF I can do it? Anyone can... that's my overall point & conclusion here based on experience!
(It's ALL how bad do you want it, and how hard are you willing to 'focus' on it (this changes you in ways though, lol, sometimes... I think NOT 'good ways', makes you a nerd, lol, but overall it's better than being a marketing droid type huckster imo))...
Anyhow/anyways - my rant for the a.m., time for coffee (the SUPREME "consciousness fuel" (spice from DUNE, lol))...
... apk
Recently trying to deal with an open source project. all the C code is a mess of structs within structs. Defining a struct for frisking A and B throwaway variables is insane. readability of code has turned into a nightmare with all this misuse of the languages. yet it's the current "trend".
how about tools on how to teach programmers that being "clever" or what your professors taught you is not always right?
Do not look at laser with remaining good eye.
https://en.wikipedia.org/wiki/Elisp
No setup, you can use it right away.
You've hit on why most programmers suck. They think programming is about syntax and logic. Kinda like a carpenter who thinks his job is about hammers and saws.
This is unedited code that I discovered yesterday while reviewing a client's app. This little gem was written in 2012.
function myfunction(order_date) //Find here Lunch days.......
{
var launch_day = new Date(order_date*1000);
var dd = launch_day.getDate();
var mm = launch_day.getMonth()+1; //January is 0!
var yyyy = launch_day.getFullYear(); // will display time in 10:30:23 format
var lunchdate = yyyy+'-'+mm+'-'+dd;
var weekday=new Array(7); //this is lunch days // Find here Current day..............
weekday[0]="Sunday";
weekday[1]="Monday";
weekday[2]="Tuesday";
weekday[3]="Wednesday";
weekday[4]="Thursday";
weekday[5]="Friday";
weekday[6]="Saturday";
var compare_lunchdate = weekday[launch_day.getDay()];
var current_day = new Date();
var current_weekday=new Array(7); //this is Current days //alert(compare_current_day=="Saturday")
current_weekday[0]="Sunday";
current_weekday[1]="Monday";
current_weekday[2]="Tuesday";
current_weekday[3]="Wednesday";
current_weekday[4]="Thursday";
current_weekday[5]="Friday";
current_weekday[6]="Saturday";
var compare_current_day = current_weekday[current_day.getDay()];
if(compare_current_day=="Saturday")
{
var today = new Date();
var adddays=Date.parse(today.setDate(today.getDate()+ 2));
var dd = adddays.getDate();
var mm = adddays.getMonth()+1; //January is 0!
var yyyy = adddays.getFullYear(); // will display time in 10:30:23 format
var checkdays = yyyy+'-'+mm+'-'+dd;
if((Date.parse(checkdays))
ayottesoftware.com
Have you read the manual for a VCR? Tata's exactly the point of the author; literacy. For reference, I finished up my masters in mathematics while deployed. Given government computers were the only things connected to the internet, I did all of the programming in VBA in excel because it was the tool available.
We've screwed up; How many lines is "hello world" in your favorite programming language? In BASIC it was one line. COBOL was short. Java? Shit. C++? Even worse, try writing "hello world" for an iphone or android phone.
'Broad chemistry literacy is crucial in a world increasingly made of chemicals,' Woggins says. 'Despite common stereotypes, chemistry is not out of reach for the average person,' as long as the tools are easy to set up and specialized on the chemist's task.
Not everyone is made to program, nor are they made to be chemists or plumbers or any other trade.
"How many lines is "hello world" in your favorite programming language? In BASIC it was one line. COBOL was short. Java? Shit. C++? Even worse, try writing "hello world" for an iphone or android phone." - by Anonymous Coward on Wednesday January 09, @08:42AM (#42531095)
Were you allowed to skip the identification & environment divisions, or what? They "bulked up" the SIZE of even simple COBOL stuff pretty massively!
(I hated it, PIC (X) statements & all... readable? Yes... short though?? I found it was NEVER 'short' due to the above!).
Yes, sure - C/C++ for example, Pascal &/or Object Pascal (Delphi), & even JAVA have their 'bulk' too, but NOT like COBOL!
BASIC though, you're correct about as far as I am concerned... a lot less typing, Begin/End (C/C++ bracework) ala Pascal, does bulk them up too, along with header &/or unit declarations up front/@ the top, & preprocessor directives + declarations, along with (when doing GUI work that is) controls & objects declarations too...
APK
P.S.=> Just curious, because I've never EVER heard anyone say "COBOL IS SHORT", lol - you're my 1st in a professional career in coding since 1995 in fact... I found COBOL's wordier than hell - again, very READABLE, but wordy & imo? Compared to tools today?? Unwieldy!
... apk
Putting programming within the reach of every-day people is to harm [further] things in two ways:
1. Adds to the complexity of knowledge of users and thus creates additional potential for things not working.
2. Reduces further the power and flexibility of most programming which results from the need to reduce the risks of #1.
The kind of high-level programming we are doing today is more "black box" dependant than ever before. When I learned to code, it was BASIC first but then quickly into assembly language for some popular motorola processors. In that realm, I learned to write pretty much everything about how to get input to how to send output. Admittedly there were stll black boxes, but the black boxes were essentially "interacting with the OS" which is one black box we need.
But when the very language we write in is a black box I begin to worry more and more about the mentality of programmers who don't understand the underlying details of what really goes on. I recall someone saying "why do checks this way? use REGEX!" I was like "uhm... what do you think regex routines are doing???" Once again, black box dependency obscures people's understanding of what computers are actually doing.
I'll get off my soap box now, but I will close with this: The problems with today's software is programmers who don't understand computers. This division of "hardware guys and software guys" is ridiculous... every bit as ridiculous as the idea of separating the head from the body (mental and physical) in the practice of medicine.
Despite common stereotypes, programming is not out of reach for the average person
Hahaha, no.
Shit like this is the reason I need to get my ass back to college already and change careers away from computers, as fucking far away from them as I can get.
Everybody I work with who has not tried thinks that programming is just so fucking simple.
Guess what?
It's not that fucking simple.
You have to be willing to ask "what if?" You have to be willing to admit you've made a mistake when you find a contradiction in your algorithm. You have to be able to admit you've made a mistake when your algorithm doesn't produce the correct answer. You have to be able to admit you weren't thorough enough when there's a corner case that you hadn't planned for.
You know what? You have to be able to admit you went wrong when the computer goes wrong if you want to program..
The average person is completely incapable of that. There is no fucking tool in the entire god-damned world that is going to make somebody comfortable with approaching a subject matter where they can be wrong.
Join the Slashcott! Stay away entirely Feb 10 thru Feb 17! Close all tabs to prevent autorefresh!
I recently decided to try my hand at some mobile app development after 15+ years of programming experience with mostly other non-related tools. The setup was just painful, it took me an entire weekend of tinkering around trying to figure out (ie google search) why various things weren't working/not compiling etc. Once I figured out the methods of getting things setup that works, its fine now and I have been working away with few issues and could start over again in no time. The problem though is that until I learned the the various tool's failure points it was a huge pain.
I've seen things like this happen in classes and new people at work. Once you know a tool you can get going without issue but until then its this painful thing you have to deal with that is problem that is largely not interesting or fun to deal with.
Look up "functional illiteracy". It affects about 15% of all adults even in the US. Now, programming is much harder. Having functional illiteracy here even after intensive training at 85%-99% of all adults would not surprise me in the least. And I would expect to see > 10% of this even among people claiming to be programmers.
Nice link: http://www.codinghorror.com/blog/2010/02/the-nonprogramming-programmer.html
Read it. It is straight out of reality.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
Jeff Atwood has some very nice observations about this from the real world. Also highly entertaining:
- http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html
- http://www.codinghorror.com/blog/2010/02/the-nonprogramming-programmer.html
One claim is that 199 out of 200 people applying for a coding job cannot code at all. The examples given are hilarious (or deeply depressing) and there is every reason to believe the observations described. Some of the links are also eminently worthwhile.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
I'm all for introductory environments not having to worry about things like that as you learn fundamental concepts, but there are plenty that require minimal set-up. As has been pointed out, you can use your browser to start programming. Programming's more about crapping code onto a page, though. If you're going to be "literate" in it, you damn well have to learn about the fiddly things at some point. Otherwise you're just going to be another cut-and-paste coder with unmaintainable code and files strewn everywhere, and we already have more than enough of those.
I'm trying to teach myself to set people on fire with my mind... Is it hot in here?
Book publishers didn't want the library. A very similar monopoly prevents the unwashed masses from reading source code today. You fail as a nerd if you think that was a coincidence. I feel insulted talking about literacy in a world where reading is forbidden. Say I was to post an encycrypted message here. Slasdot would chose to not publish it or remove it shortly after. Why would it be acceptable in any other context?
Dont take it as off topic, if people are to learn to write then the least we can do is make it legal for them to read things.
I know, that sounds like a contradiction in terms, but one of my college profs made a good case for the concept.
The value of learning programming for non-programmers is not "I have to get that *@$% computer to do what I want". It's "I have to learn how to break down a large problem into simpler smaller problems, until I know how to solve it." and "I have to recognize the adjustments and adaptations that humans naturally make when solving problems." And as a side effect, it also teaches the important lesson that some problems cannot be solved by convincing people around you to believe in nonsense.
I am officially gone from
http://lifehacker.com/5974087/i-raised-my-kids-on-the-command-lineand-they-love-it explains how to teach your kids about computers - no point-n-click. Take them through computer history by starting with DOS 3.x or Linux CLI.
Complex interfaces are overwhelming when we are learning.
Us "old guys" rememeber how great it was to learn the complexities of larger, more capable interfaces. We didn't get introduced them them on day 1. We started with a simple:
A:\
and we had to learn DIR, CD, B:. This happened slowly, over time. ... of sorts. The menu would call existing DOS programs. Of course, I had to learn to make the text file that the menu read to determine which programs to list. It was bonehead simple, but it taught me something. Basically, that was the XML file of the day.
I remember getting a mouse! What a cool thing. It had 2 buttons and was over $100! It came with a TSR program that provided a menu
Showing someone completely new to computers an XML file would probably scare them. Start small and build knowledge over time. Isn't that how learning happens?
1) Download J from jsoftware.com and install it.
2) Open the interactive command line and start programming.
3) Profit.
There is a broad spectrum of knowledge and experience to be comprehended in this discussion. The terms that are being bandied about suffer from name space pollution and the topic itself is not well defined.
What the heck does "Programming Literacy" even mean?
Equating Programming Literacy to Language Literacy is Logical Lunacy(TM). I may be fully literate in one language and helpless in another. There may be, at the root, an interesting discussion to be had, but I don't think this topic is it.
Food for thought. Until it is running on Silicone, the programming job is not complete. If you don't understand the machine, you don't understand programing. -Anon.
I can see where this guy is coming from. I'm an electronics engineer, I've had a few programming courses in school but I haven't done much programming since.
Over the past few years, I've made a couple of attempts to get started with some simple programming again. Tasks I came across that needed automating.
So I did some digging, and found a language that seemed suitable: Python. Found some good tutorials, and soon I was on my way creating basic programs.
Then I needed to run one of my programs on another machine, so I thought I'd create an executable. Turns out that's not possible with the standard IDE. There is a way, apparently (using a third-party package), but the documentation is so bad I haven't gotten it to work at all, even with a trivial sample program.
Then I thought I'd add a GUI to my program. Again, not possible with the standard IDE, and to my horror I found that the GUI needed to be in another language. Hello! I don't have all day to figure this out, I've no inclination to learn two languages when one should do.
Did I choose the wrong language? Maybe. But this is the sort of roadblock TFA talks about. I spent way too much time wrestling with the tooling; time I should have been able to spend on the actual program.
I've been bitching about this for ages. So I can say, you probably won't convince anyone, but it isn't because you're not right.
Microsoft QuickBASIC is a good example of how it should be done. You start the program and you're in a text editor. You can type code. You can place the cursor on any keyword and press F1 to reach the help page for it. It will do syntax checking on every line you type, as you type it, so you don't get too far into something before realizing the computer has no idea what you're trying to tell it. You can press F5 to run it. You can control-break at any time (except in DOSBOX where control-break doesn't work) and inspect variables. You can then continue the program where you stopped it. Pressing F2 brings up a list of all functions in the program, so you don't even have to use multiple files if you don't want to since each function ends up on its own page. Were it not for its lack of mouse/network/sound support, it'd probably be an ideal tool for beginners -- that is, if they didn't have to deal with trying to figure out how to set up and use DOSBOX first, and find the work-around for control-break not being implemented.
Another major problem I see is that most languages just aren't all that capable for anything a beginner might want to do. People who are interested in learning to program probably don't have any experience with command lines or working with a lot of text files, and so the fact that you can't do much else with most languages without including a lot of libraries makes learning to program seem entirely pointless. After they learn to code "hello, world" they're going to ask "how do I create a pop-up window that says something" and "how do I create buttons people can click on" and "how do I create graphics and sound" and "how do I access things on the internet" and none of those things have easy answers in most languages. So after people have gone through the nightmare of figuring out how to use a bunch of command-line tools with worthless error messages, their reward is that they can write programs in a language that doesn't appear to be capable of doing anything interesting at all.
Another issue is that programming languages themselves are too difficult for beginners. There are too many obscure symbols they've never had to type in their lives (except for smilies) which all now have very precise meaning. I'm reminded of my first programming experience, on a friend's TRS-80 Color Computer 2, where after we spent an hour typing in a game from the manual, I was like "hey, we could just change some of this stuff and make it do different things." The next day I was trying to write something from scratch, and repeatedly typed something like "10 PRINT (HELLO, WORLD)" only to be repeatedly told "SN ERROR" which left me confused for about 15 minutes as I tried to understand why it no longer liked the PRINT statements that I had typed into it countless times before. Having just learned programming the day before, the difference between "" and () hadn't yet registered in my mind. It wasn't that I didn't realize the computer would care about the difference, but that I just hadn't done this enough to realize I had used the wrong symbols. This is where languages like C and especially Perl suffer. There are so many symbols involved that are difficult to learn. Keywords are easy, as people have been using words all their lives, but all these symbols are just random junk that has to be there to most people. It's even worse when you consider that some of it is semicolons and curly brackets, which the compiler will pay attention to as it ignores your indentation and newlines, things which non-programmers are already quite skilled at paying attention to but which language designers feel the need to make every compiler ignore simply so that you can break that rare long line up into several lines, screw up your indentation whenever you like, and put multiple statements on a single line. You know, until you've done so enough that you realize it's generally always
The author is focusing on the obstacles that exist in certain tools, but those tools were designed for established programmers rather than students. The first comment on the linked article gave a list of appropriate learning platforms: Scratch, Alice, Greenfoot and AppInventor. I used MIT's Scratch to teach my then 8 year old niece the basics. By the end of the first afternoon she'd created a short animated and interactive movie that she was able to share with her family. In the process she learned about simple logic, loops and responding to events.
I do not block ads. I do block third party scripts.
No mention yet of programming games? Most of them are all self-contained, so you just have to run the program, type some things in, and hit run. C++ Robots on the other hand is simply a C API, so you get to use all the tools that real programmers use. (And all the joy that comes with that). These give a task to perform, maybe not a super-useful task, but it's at least a goal. Usually it's open-ended though, so there really isn't a sense of accomplishment. Most of them need better documentation. And most of them are old, so getting them running is a bit of a task.
A nice list.
AT-Robots What introduced me to programming.
(Good to know Logo/turtle was mentioned prior)
Wiggins argues that there are two major gaps preventing programming tools from being accessible to beginners:
For the below, I'll assume Fedora and that your user is added to the "wheel" group.
1) they're too fussy, requiring extensive setup
sudo yum install ant eclipse emacs geany java python ruby vim
2) they're focused on the technology rather than everyday tasks. A good tool for learning programming, Wiggins argues, would emulate an Excel or Google Docs spreadsheet – beginners would be able to fire it up instantly, and would be able to get useful things done right away.
I'll avoid emacs/vim since new...
geany Test.java &
Copy & paste example shit...
javac Test.java
java Test
Even easier...
irb
"this string needs to be capitalized".upcase
exit
This is "useful" because they probably never figured out how to make Microsoft Word change their text to upper case.
These beginners are lazy; they don't need easier tools. Help the people that do want to learn. If I want to learn how to carve statues, I buy a book, get tools, and try it.
End of story.
The G
To teach good programming, SIMPLIFY!
80% of the programmers I've associated with in the last 10 years rely on "cut and paste" operations. They look up how to do a task (on the internet) cut the code, modify the code for their environment, and think they're done. The most common languages where I see this is .Net and PHP, but there are lots of other examples.
Weinberg made a statement in one of his books that once a programming problem has been solved, it need never be solved again. (Just translated from one language implementation to another?) The idea of re-usable code and standard objects and patterns has led to code full of crap that nobody understands, yet they depend on it on a daily basis. (Some of the algorithms that Excel used for years were incorrect. For years competent programmers new that the floating point algorithms on 286, 386 and 486 math processors were not right, yet the everyday programmer would be ignorant of that fact.) The "reusable code", the "standard objects", the "libraries", the API's and almost everything else has made developers dependent on a multitude of code segments for which they have no understanding. Furthermore, the environment is so complex, that just finding the right code segment is enough to drive us crazy.
So, if you want to teach people to develop systems, teach them how to find and use the tools, but if you want to teach them to be competent programmers, go back to basics; work from the machine level up to higher-level tools.
A program is a set of instructions that work on data. Once you identify the data, it can be processed using only three methods; sequence, alternation and repetition. Teaching beginners how to transform data using these structures using logic gates and/or assembly language will build programming skills. Using decision tables, Warnier-Orr diagrams, or pseudocode to abstract the instructions from the language teaches them how to solve the problems, assembly language teaches them to implement the solution. After they can solve those problems, then they can build "objects" by writing code that contains it's own data.
After assembly I would have them advance to C or Pascal, and after they learn imperative programming languages they should go to something like LISP and Haskell.
Incidentally, sequence, alternation and repetition have thier own counterpart in Mathematical Logic, so, theoretically, it should be possible to prove the code correct (logically) and build correct code from provably correct components. And then, theoretically, it should be possible to generate provably correct programs from Hier level descriptions of the type of tasks that have to be performed on the data.
You get to decide at which point a "beginner" is no longer a beginner.
"The mind works quicker than you think!"
I introduced computer programming in my geometry class this semester with Khan Academy. It's a great interface, with clear tutorials, minimal setup (an account helps, but it ties into our school's Google Education domain automatically) and instant feedback for both results and errors. Khan's programming interface is in javascript using processing.
At the start of the unit I polled my students, and of the 63 I have in geometry, only 3 had prior exposure to programming. Those 3 had parents in tech and had done some science/engineering summer camp activities, and were looking into it on their own. I was a little surprised, because when I was a kid, my elementary school all got some programming exposure on Logo on C64s back in the 80s.
Scratch.mit.edu Scratch isn't bad for learning all of the "primitives" necessary for anyone to learn programming. Like 90% of anything involving learning, it's mostly up to individuals--their motivations and their goals. And if you would like your kids to learn programming remove any/all computer games from the house except for "Scratch" and see what happens. From my experience Scratch can teach: Encapsulation, variable scoping, event-handling, boolean logic, and almost any concept someone would like to pursue ( science, math, physics, chemistry, and the basics of computer science too) if they're really interested in doing so. Scratch can also use real-world inputs via a Pico board (which contains a variety of analog-to-digital inputs) and that presents an incredible opportunity for a student to connect programming to physical inputs. For most programmers our interaction with A2D is keyboards, joysticks and mice. Scratch opens that up constructively by supporting something like the PICO boards. Most of the time it's not the unsuitability of programs we want people to learn with--we have amazing operating systems and computer hardware to support anything. There are things out there like Scratch, (ALICE for example) which offer different things. I would say the real barrier to people learning programming (or anything) is people-based. Whether that is a lack of inspiring teachers, or students distracted by very polished software or overly complex "learning environments", or someone realizing that they will never, ever be able to remake their favorite video game so they don't bother learning how to program; ultimately it's up to people to learn how to learn and to motivate themselves. I say this as a parent who provided their kids with video games along with every possible opportunity to learn anything (programming/administration/development with any and all available programming languages and environments). If you want someone to learn programming you will need to sabotage every other digital joymaker and provide them with an opportunity to entertain themselves by making things digitally. It's no different than leaving a crying baby in the crib with a bunch of toys instead of rushing in to pick them up--they will either learn to entertain themselves or cry themselves to sleep until they learn.
Every new form of media has it's own Requirimento
Programming is definitely becoming easier and sexier in my opinion. There are a lot of new tools coming out:
http://scriptk.it/
http://moonbase.com/
With Ketai for Processing you can get apps running on our android tablet ridiculously easy.
Not to mention the tools Bret Victor has been building:
http://vimeo.com/36579366
There is only one thing without a learning curve: nipples. Most other things, including Excel, are learnt, even if we don't realize to what extent.
programming tools.
The are a way to present commonly done routine things, not logic to the core need of the application.
The Kruger Dunning explains most post on
http://web.engr.oregonstate.edu/~burnett/Forms3/forms3.html I went to OSU and Dr. Burnett was one of my professors. It was great and easy to understand. There ya go, problem solved. :)
Perhaps a close relative to Ender?
Fair enough - since it IS relative as you say as to 'long'/'short' etc.
I did all the PIC (X) stuff too, for formatting outputs & did use DISPLAY iirc.
* I just HAD to comment on the size of the 2 divisions I noted is all - they 'bulked it up' & sometimes, I feel needlessly (especially in a "Hello World" type case as you mentioned, the 'classic').
They took up a lot of space (good for documentations though).
Nice to meet an "old schooler"!
(One that's older-school than I am even, since you're talking punched cards... that's JUST in front of "me & mine" actually, the interactive display had already JUST come into play for me in 1982, when I learned BASIC on timesharing terminals (phone hookups & bootjacks like in the film "War Games") on DEC PDP-11's my school rented time from in highschool!
* Lastly - Per my subject-line above: You're "older school" than I am (& around here? We're "ancient", lol...).
One thing I admired MOST about folks that programmed on REALLY old stuff like Burroughs equipment? You had to SQUEEZE EVERY LAST DROP OUT & fit code into MINISCULE SPACES by today's (& for decades) standards... couldn't have been easy!
(I never went thru that - most I struggled with was performance, & I'd use inline asm for that - lol, by often cheating & using CPU watch Windows to get CLOSE to the code I needed... lol!)
APK
P.S.=> I took both the 77 std. & the 85 std. (iirc) later (first on VMS with 77, & then on AS/400's by IBM for 85)... I honestly didn't SEE much difference (in academia)...
... apk
...again. Or, heck, Mac OS X for that matter. Give people the command line - it's the most powerful programming environment out there. Teach people simple automation tasks that will save you lotsa time later - change file names of all your holiday photos, convert movies with ffmpeg, copy files over the network, whatever. Simple conditionals, loops, and variables come along for the ride. It's right there when you open your mac/linux box and it's super useful right out of the box. When people see the amazing power of shell script automation, the route to programming should be short enough...
I bet you ten million I could.
Confucius say, "Find worm in apple - bad. Find half a worm - worse."
Programming at a professional competancy might be out of reach. But programming badly isn't that hard. As in:
10 print "my sister is ugly" : goto 10
Back in the days of the TRS-80, Commodore Pet, Apple II and BBC personal computers (et.al.), millions of kids could turn on their personal computer and start typing in Basic right away, usually using stuff copied off of a magazine article... at first. But then they could modify their programs and crash them in a million different ways. That caused learning, and very likely ending up producing a generation of people with much higher basic computer literacy than in the general population than today (not including professional techies).
Don't confuse a professional level of understanding with computer literacy. No one confuses the kid who could (back in the day) (mis)use their chemistry sets to blow things up in their backyard and singe their eyebrows off, with National Medal of Technology prize winners. (Or could you?).
Here's something designed for kids. It supposed to be easy enough so parents can figure it out. Don't know how close it comes. http://code.google.com/p/propforth/ multicore micro controllers for robots (embedded systems) using FORTH on the parallax propeller
You'll stop saying that the instant you get a Retina-style high-res display. I expect those to be everywhere in a year.
Most people can program a dog to do their business outside. Some people can program dogs to do complex tasks like herd sheep. It doesn't take special tools. It only takes patience and a bit of knowledge.
The problem with programming computers is that they are far too general. There are TOO MANY things you can do with C++ and a linux box. Dogs, on the other hand, have a fairly simple user interface, respond to voice commands, and only do certain things (which they do amazingly well).
So, I submit that the problem isn't making tools to enable people to be smarter about programming computers. It is making computers dumb enough and specific enough so they are like dogs. A particular species of computer should do one or two things, have a simple interface, and do the things it does very well. It should be obvious what can and can't be done with it. It should be able to learn from you, mistakes and all, and average over all the attempts to teach it. Once we have systems like that, then almost anybody will be able to 'program' their computers.
Go to Heaven for the climate, Hell for the company -- Mark Twain