Who wants to be a programmer? Microsoft is hoping everyday folks will take the challenge by using its non-professional programming tools, and other vendors are following suit. Microsoft is poised to tap the nascent market for development tools to enable non-professionals to create applications, having established a team specifically built for this push and planning several initiatives, including a new Web site strictly for beginners.
I applaud any effort to make programming more accessible and open to non-traditional programmers.
I personally would like to see a modern spin on hypercard where people can assembly applications without knowing how to program specifically.
Free compilers/IDEs for existing languages with documentation/help available for the complete n00b is always a welcome site also.
There is a whole group of people out there just waiting to ‘discover’ programming and I can’t wait to see the new stuff coming for this segment.
The truth is that someone who might know how to make a “hello $name, you are $age years old, in two years you will be ($age+2) years old” style program might still not be able to realize this program from within a modern IDE. A “resize this box, it’s where the text will come out in your program” environment can only be a good idea.
However, this is MS we’re talking about
“Wortham said there is no single answer to empowering non-professionals to create applications, but it helps if a company standardizes on a platform.”
ah, good. They’ll be making sure that the customer isn’t baffled by choice again.
I’m sure someone will label me elitist or politically incorrect, but here goes.
After reading the article, I still don’t know what they mean with “non-traditional programmers”, but let’s assume they mean people who have not studied computer science nor information technology. That is, people
– who have no clue what a computer really is (what happens inside it when you use it, and this does not mean only how signals fly in busses or what inter-process communication is),
– who may lack the necessary mathematical background (especially basic understanding of Boolean logic and functions),
– who are not used to strict syntax and semantics or even appreciate why they are mandatory,
– who have had no formal or informal education in designing a program (especially basic things such as procedural abstraction).
In other words, people who should not be programming.
This is like marketing highly specialized fluid simulator software to ordinary people.
Let’s assume fluid mechanics is something people find cool. A lot of people would then be impressed with what the fluid simulator can do, but unless you study physics in a university for a couple of years, you won’t understand what it is even about or what the parameters, settings, etc. do. Additionally, even if they were to dabble with it and produce results, how can they ever be sure that what they just did is what they meant to do?
n other words, people who should not be programming.
This is like marketing highly specialized fluid simulator software to ordinary people.
I don’t agree, if the development systems take care of the details and make the complex details ‘easy’ then what is the problem?
Just because someone is not an expert in a given field does that mean that products catering to their needs should not be made?
Should people not be allowed to drive cars because they are not automotive engineers?
Should the lego mindstorms kit only be available for robotic and/or mechanical engineers?
I’m not talking about experts. I’m talking about the basic understanding that you simply need to have. You can either learn it explicitly, which will take some months or years to sink in, or you will learn it implicitly by tinkering for half a decade. (The former is the better, because then you would at least know what you are doing and why it works, and you could justify it to other people…)
A better analogy to cars is that we don’t let people drive the car without a driver’s license, now do we?
I’m not talking about experts. I’m talking about the basic understanding that you simply need to have. You can either learn it explicitly, which will take some months or years to sink in, or you will learn it implicitly by tinkering for half a decade. (The former is the better, because then you would at least know what you are doing and why it works, and you could justify it to other people…)
Basic understanding is nice but if a new tool comes out that makes it possible to do something without knowing the *basics* or in some fashion redefines the basics to get results then I can see no reason why it should not be available to the general public.
Sometimes these simple ‘no knowledge’ programming tools (hypercard, flash at a basic level) inspire people to learn the real deal.
A better analogy to cars is that we don’t let people drive the car without a driver’s license, now do we?
You aren’t likely to kill someone when you play around on your computer trying to program on the weekends are you?
Driving a car without a license literally puts others lives at risk.
I don’t think the two compare myself.
Right. We seem to be off looking for the Philosopher’s Stone again, and also a bit off-topic.
Since 1960s, there have been innumerable attempts to make programming easier by introducing new programming languages, tools, “programming systems”, “natural language programming languages”, programming by drawing boxes and arrows, programs that would write programs (applications of artificial intelligence), “expert systems” that would assist in programming, … All have failed, because programming is hard, although that still seems to be a controversial fact. It is hard because of the nature of it, not because we would have inadequate languages or systems.
(Not to say there would be no improvement in current programming languages, far from it. However, improving the language only removes the lesser evils from programming, such as removing the need for manual memory management by introducing garbage collection.)
Besides that, it’s not like all the programming languages and tools were hidden to the general public! You can start with the GNU Compiler Collection, a Perl or Python interpreter, or the Java Developer Kit, and a visit to your local library.
You aren’t likely to kill someone when you play around on your computer trying to program on the weekends are you?
Actually, I agree with you on this one. Car analogies are rarely to the point. You are unlikely able to kill anyone by programming, but you can lose important data or make other people lose important data. It isn’t without risks.
> I don’t agree, if the development systems take care of
> the details and make the complex details ‘easy’ then
> what is the problem?
There is no problem… except that you’d have a hard time making things easy for Joe User for which one needs a University degree to understand.
This sentence shows it even more obviously:
> Should people not be allowed to drive cars
> because they are not automotive engineers?
Should ordinary people drive a car? Yes.
Should ordinary people use computer programs? Yes.
Should ordinary people build cars? no.
Should ordinary people build computer programs? _____
There is no problem… except that you’d have a hard time making things easy for Joe User for which one needs a University degree to understand.
It is hard to make programming tools easy for people, heck its hard to make good development enviroments and compilers for people who do the stuff for a living.
Thats not an excuse to stop trying in my book.
Should ordinary people drive a car? Yes.
Should ordinary people use computer programs? Yes.
Should ordinary people build cars? no.
Should ordinary people build computer programs? _____
If the tools are available to make it possible for an ordinary person then why not ?
If a development tool were created that made it possible for an average joe to construct a complex application I’d call it a breakthrough.
Ordinary people do build cars, heck ordinary people build airplanes. You can get the stuff in kits and assembly it without much knowledge of either subject.
Ordinary people do build cars, heck ordinary people build airplanes.
Comparing an assembly kit with all the ready parts and instructions intact to a programming method would mean that you were given a set of static, unmodifiable statements in a given language, say, C, in a text file, and another text file describing how the statements should be ordered to achieve a working program that would do the one thing that the instruction document was written for. Modifying the statements or shuffling their order would, of course, require specific knowledge, as would welding and cutting the parts in the kit and connecting them together in an unorthodox way.
Not that comparing the two makes much sense. Software is very different from devices built of physical parts that work under the laws of mechanics…
I think that you’re reading far too much into this. I personally tend to view as those who back in the day would buy an 8bit computer and tinker around with the universally default BASIC(whatever flavor it may have been). Now, not all of these people ever created anything useful and/or interesting however some of them did create some great applications, and went on to create even better applications, tools, utilities, etc.
I noticed that they mentioned VisualBASIC Studio Express early on in the article, which leads me to believe that they’d be pushing that. Of course one of the problems with that will be is that VisualBASIC is not really much like te BASIC of old(nor as simple). i.e. I don’t know exactly how many wannabes are going to want to devote that much time even to the simplest offering. A problem with the complexity/time item is that IIRC the Express versions lack all of the nice online help and devnet stuff for the particular language along with some of the other useful tools in the non-“free” packages…
The real danger to MS is that they focus too much on this “market” and start spending real money on it. (Right now the tools are “free”, but I am not certain of the license as I own an unattached recent copy of Visual C++ and/or can conveniently use GCC, GNU Pascal, FreePascal, etc. as well without the limitations whatever they may be of the free version. (I’m betting that there is a clause disallowing commercial sale of products built by said “free” tools, along with their feature limitations.)
I’m really ambivalent about all of this. The complexity of APIs required to get anything done with modern tools has already, I think, gotten anyone who was interested in programming to have bought a non-“free” copy of the tools and either a) produced something saleable and offered it for sale, b) gave up and their package rots in loneliness, or c) produced something non-saleable released at “free”ware then abandoned… It’s still nice to see the tools available IF they are “free”, but it’s something that they should’ve done a long time ago as Linux distros have almost always come with gcc and co., same for *BSD, BeOS, Macs have had alternations of reasonably price dev tools, free, Codewarrior(reasonably priced esp compared to comparable MS package cost, not to mention the native classic version was even capable of generating windows cinaries as well as Mac binaries if one so chose to do windows programming on a mac), and now again with OSX “free” dev tools in the form of XCode & gcc, etc.
I’ve been using Visual C# Express for a while, so I’m able to correct two of your misconceptions.
First, there is no “clause disallowing commercial sale of products built by” the Express versions of VS. You’re perfectly free to make commercial software with VS Express.
Second, you do get “the nice online help and devnet stuff for the particular language”.
The last paragraph is typical MS-bashing.
First, you keep putting “free” in quotes, as if the tools aren’t really “free”. They are free.
Second, is the oh-so-tired “well, they might be ‘free’, but it should’ve been that way looooong ago!!” Who cares? It’s free now.
And regarding the price of the non-free versions, CodeWarrior was comparably priced (that is, until Apple killed CodeWarrior off by denying them the knowledge needed to make Universal Binaries, thus cornering the Mac dev market for themselves). And have you compared Borland’s prices with MS’s for the non-free versions? Borland is 2 to 3 times more expensive.
And in the 80’s, the sellers of Unix dev tools priced their tools an order of magnitude higher than MS did. Sun sold their C-compiler for $1000; just the compiler, not an IDE. So stop trying to pretend that MS gouges for their dev tools.
Apple’s MPW was also expensive. Only with OSX did they start giving their tools away for free. Of course, they now have a monopoly on Mac dev tools since their tools are *required* to produce Universal Binaries.
I don’t agree beginner’s environments are not for people who should not be programming.
A beginner’s “programming” (rather, scripting language) environment would allow you to do things without needing to know what interprocess communication is, boolean logic, or education in designing a program.
As a side note, there is a widespread environment that allows you to do things without needing any of the things that you outlined. This environment is even used by you. It’s called the world wide web. You don’t need to know too much about how computers work or underlying mathematical principles to make a web page. You don’t even need to know what “TCP/IP” is to create a web page.
A good beginner’s programming environment would allow the user to gradually build his or her skills so that he or she will come to understand how the computer works, boolean logic, etc.
By the way, I don’t think people having “formal or informal education” is a necessary predicate for learning to program. I’ve taken computer science classes at the university and they haven’t taught me much that I couldn’t do on my own. A good beginner’s environment would serve as the informal education that would build the user’s knowledge on how to do things.
Here’s an example: You could write a very good calendar program without much knowledge of how computers work. But say I want to add the functionality of exporting a month’s calendar to an HTML file. I would read the environment’s manual and learn how to do simple file I/O. From not knowing what I/O is, I learned to do it through experimenting with the environment and reading a manual.
Having a beginner’s environment would allow people with limited knowledge to experiment and build their abilities, independently. Nobody is born with knowing assembly, so having an environment for casual users is a great idea.
Here’s a historical example: HyperCard served as such a beginner’s environment for the Macintosh. Through HyperCard, casual users became technologically savvy programmers. This is probably why the Mac has always traditionally had a strong community of shareware developers.
> A good beginner’s programming environment would allow
> the user to gradually build his or her skills so that
> he or she will come to understand how the computer
> works, boolean logic, etc.
You are talking about beginners WILLING TO LEARN. The target group of this project is most probably different, it’s about people who don’t want to learn but rather get things done without learning.
I would hardly call formatting a document, be it either in a WYSIWYG editor or HTML, programming…
However, let’s assume a complete newbie wants to program. Since we don’t have any programming languages, scripting languages included, that would allow you to program in English or any other natural language, the programming language he uses will have to have things such as variables, statements, expressions, loops, and conditional statements (or branches).
Are you seriously telling me that you can use an if statement even if you do not know what a truth value is, or what it means to combine two Boolean values with and or or? Or that you can use variables even if you do not understand what they are? Or that you can write a syntactically correct program even if you do not understand what syntax means or why it is important? Or that you can use a loop even if you do not understand why looping is needed, what its effect on variables can be, why, and how do you make sure that the loop terminates (or why even that is important to know)?
It’s this basic knowledge I’m after. I’m not saying people can’t learn; I’m saying that this is the wrong approach. It’s calling for trouble and frustrated users. Yes, you can learn to program with nothing but experimentation, like you can learn any other skill.
Nor am I against abstraction, programming languages that do without hardware specific details (such as manual memory management), or tools that automate repetitive tasks.
“I would hardly call formatting a document, be it either in a WYSIWYG editor or HTML, programming”
I didn’t say it was programming. I said it is a type of environment. Namely a web browser interprets HTML.
“Or that you can write a syntactically correct program even if you do not understand what syntax means or why it is important?”
That’s equivalent to saying a five year old can’t commuicate in English because the kid doesn’t know what “syntax,” “grammar,” or “vocabulary” means.
“Are you seriously telling me that you can use an if statement even if you do not know what a truth value is, or what it means to combine two Boolean values with and or or?”
Here’s an example HyperTalk script, the scripting language of HyperCard:
if the second word in field “Name” is not “Jones” then
display dialog “You’re not Jones!”
A ten year old could write that script. And yes, it is possible to write an LALR grammar for HyperTalk. If statements and simple boolean logic is not that different from natural languages. It doesn’t require any special knowledge.
Why are you dragging in a type of an environment that has nothing to do with programming? HTML is not a programming language, be it interpreted by a browser or not, and I fail to see how it is relevant in this discussion. Maybe you mean Javascript or ECMAscript?
Or maybe you are confusing interpreting a document with interpreting a program.
Comparing children to computers is as dubious as is comparing computers to cars. Computers are machines, not men. They can do only as much as we make them to do, which certainly can’t be said of children. (As for cars, they are an entirely different type of machine and for different purposes. Bananas and lemons.)
As for HyperTalk, it would certainly amaze me if you couldn’t write a LALR parser for it. However, we are not talking about parsers here, either.
I’ll try to clarify, although maybe I am barking at the wrong tree here.
The point is not that it would be impossible for beginners to learn to program, as clearly everyone is a beginner at some point.
The point is not that it would be impossible for beginners to learn to program well, although I doubt you can do so without grasping the fundamental concepts (either by realizing you did so or without realizing it).
The point is not that HyperTalk et al. would be difficult syntactically or semantically. The example you gave does resemble natural language, and is thus easy to grasp intuitively, but at some point the beginner will have to realize that he can’t just write “say “You’re not Jones!” in case the surname is not “Jones””, and that “the second word in field “Name”” is an expression, as is “Jones”.
The point is that you are much better off if you take the time to learn and understand the basics behind the mathematical model called the computer before writing any code.
Plenty of non computer science graduates can make a decent living programming computers. I consider myself an expert C++ programmer and I have a physics degree. Just because you can’t understand fluid mechanics doesn’t mean I can’t understand a programming language.
Look back through the 1990’s, 1980’s, and into the 1970’s, and you’ll notice that this has happened periodically. There was even a point where you could pick up magazines with programms in them right at your supermarket magazine stand alongside the magazines for auto mechanics and home redecorators.
Creative Computing is the one that comes to mind immediately. I even had an IT boss who referred to it as “that lower-class magazine….”
What gets me is that with the Free Software movement and the Linux system, this possibility has been sitting right in front of everyone for over 10 years.
Maybe it has to have a brand name associated with it, that everyone will recognize, and some marketing people saying “You can do it! You can do it!”…
I think this winds up being a sieve. In go all the people who have been led to believe they can program. Out come a few pro’s, and a few people who figure out how to use the newly-gained knowledge to break into games, disable DRM from music download sites, and decrypt the latest encryption on movie DVD’s….
Maybe there has been a general lack of interest in software development of late, and the private corp’s are trying to revive it?
Apple’s Hypercard was an excellent tool to enable non-programmers to create simple interactive multimedia applications. A lot of people traded Hypercard “stacks” on BBS’s and Compuserve. Many applications have sprung from the same idea. IMHO, the most notable one which evolved in the same era is Director/Shockwave.
The goal is probably not to make Joe User write programs, but to make him *think* he can write programs. That goal would probably suffice to enter the market. As long as Joe stays with three-liners, no problem.
But he won’t. And there is one thing about programming that Joe won’t understand (many programmers dont understand it). If you know a programming language well enough to write programs, you still know ****. Joe’s “programs” would be so bug-ridden that they put Windows ME at shame.
This is NOT a problem of the programming language. Today’s PLs are far from satisfying, and let’s asume that a Joe User compatible PL is very well thought out, and so forgiving that you can’t possibly generate syntax or typing errors. But the inability to argue logically, or to predict the execution of a program in one’s mind, are *not* problems of the PL. They exist in every PL out there.
The only way to make a Joe User compatible language is to cripple it so seriously that programs written in it cannot exceed a certain complexity. Creating such an intentionally crippled language is not even a bad apporach, but I doubt that any language that is intentionally simple *stays* simple over its lifetime. History proves this. Just stop and think for a moment how Basic started (a language that was so stupid that common programming tasks were a pain, but you could actually understand a program easily), and what it is now (a language that even supports parallel programming with threads).
But the inability to argue logically, or to predict the execution of a program in one’s mind, are *not* problems of the PL. They exist in every PL out there.
I couldn’t have said it better.
So are you talking about an erector set programming languages where the end user doesn’t really program, but rather just moves pre-built blocks of code around?
Make it like visio where an icon represents a class and the user connects the blocks together by drawing a line. The user would only be able to connect one block to another if the other block had the connectors.
Actually that’s not a bad idea.
> So are you talking about an erector set programming
> languages where the end user doesn’t really program,
> but rather just moves pre-built blocks of code around?
Not really… you are too focused on syntactical issues. Moving blocks around might actually be a nice idea, but it doesn’t solve the fundamental issues because it doesn’t cripple the language. On the other hand, making a language “turing-inferior” would be a start. Removing abstraction mechanisms like functions would be another possibility.
Essentially, it’s everything that makes a language powerful that also makes it harder to understand.
So are you talking about an erector set programming languages where the end user doesn’t really program, but rather just moves pre-built blocks of code around?
Yes basically. You’d start with a blank project and have a toolbox of objects (Files, Printers etc.) and you could select those objects and then apply actions to them (Open, read, write, print etc)
Make it like visio where an icon represents a class and the user connects the blocks together by drawing a line. The user would only be able to connect one block to another if the other block had the connectors.
Actually that’s not a bad idea.
Not at all.
I guess the article really did not go into detail of how any of these new tools would work, it really only stated that new stuff was coming.
I thought that’s what .NET was for.
That was mean.
But more importantly, it was funny.
That sounds exactly like the programming kit that comes with the Lego Mindstorm NXT set.
Maybe for people like me. Who do undertand PC’s but haven’t had the money to go to college and do it the “professional way.” I love to play around with VB, just scratched the surface of C# ( I really like C# ). I would love to be able to learn more but have to do it at my own pace, on my own time. A site dedicated to this, with someone like me in mind. Sounds great to me. I will never write anything “commercial” or even shareware. But, thats ok with me. If I could just to the point where I am confortable writing some small things for myself. That would be very nice.
But, your attitude doesn’t surprise me, not in the least. Some people just don’t want to others to play in their sandbox.
Spreadsheets is a great example of a PL designed for non-programmers that actually works for non-programmers. (SQL and Cobol beeing examples of those who doesn’t work)
The mistake not to make is to assume that algorithmic thinking is something non-programmers do. So just don’t design an algorithmic programming environement.
Designing a general purpose programming environment this way is probably not doable. But domain specific programming environemnt shouldn’t be to hard.
Edited 2006-10-21 01:33
IMHO “normal” people shouldn’t even be allowed to make webpages. My god, look how ugly some of them are, it’s just ridiculous.
I can’t imagine why programs should be any better and if they can write code themselves it *will* be bug-ridden. I’m just glad i won’t be doing support on that stuff
Don’t know where I was going with this other than I just think that this is a bad idea. Really bad. (and no, I’m not afraid I’ll be out of a job because of this).
On the bright side, it might make them appreciate the complexity of the work we do.
IMHO “normal” people shouldn’t even be allowed to make webpages. My god, look how ugly some of them are, it’s just ridiculous.
IMHO “normal” people shouldn’t even be allowed to make babies. My god, look how ugly some of them are, it’s just ridiculous.
See how ridiculous what you said was. I live in a country where our freedoms and rights are being eroded everyday. (I think you all know which one that is.) Everyone should be allowed to program and have access to programming tools. Many of us programmers got our start with “beginner” programming tools. How many people learned to program using QBasic or TurboPascal? I think a lot of us.
I miss the days when Microsoft included basic programming tools with their OSes. I think that’s what really attracted me to Linux and other open source *nixes. The batteries ARE included! Oh, by the way, if you’re looking for an open source beginner friendly system that is far superior to VB, give Lazarus and FreePascal a try. I think you’ll be very impressed. It is a Delphi-inspired environment.
http://www.lazarus.freepascal.org/
This is one of those “it’s a nice idea, but” propositions.
Firstly, tools to let users (non-pro or pro) put ad-hoc solutions together are great.
I think we’d all like a nice script language that let us automate workflow between apps in windows and give the result a nice skin without having to crack open C# or other.
HOWEVER … we’ve been through this before with VB … I’m sure that was supposed to be for “the rest of us”.
With VB, anyone that could use it suddenly classified themselves as a “programmers” built something quick and dirty with Access as a database and called it a product.
Before you knew it, people were buying these to run their businesses on and professional programmers were having to explain exactly why this didn’t quite work with 3000 users, even though it only cost $19.95.
Back in 1998, at one customer site, I remember having to try and integrate/replace 120 Excel/VB/Access departmental “prgrams” with a new SAP system … that hurt !!!
(NB: that doesn’t mean I’m saying SAP is the answer … god no !).
Now if we could reclassify the output of these tools, and not call them “applications” or “programs” then we might be on safer ground.
How about using the catch-all “mashup” tag ???
I wanted to make a drag-and-drop programming environtment based on the AmigaVision environtment (competitor to HyperCard/HyperStudio on the Mac). It had flowchart pieces that would let people build audiovisual “scripts” from a very few pieces of programming tools.
It wasn’t that great but with a plugin system I think such a thing could catch on again. There’s one for the Amiga-like OSs called Hollywood Designer that makes the likes of PowerPoint look like crap. It works based on Hollywood, which has a scripting language similar to media-based versions of Basic such as AmosPro back in the classic Amiga days.
.. Actually yeah babies are IMO ugly but grow out of the worm stage slowly to end up looking more human
Not sure it works the same with these kind of DYI drag n drop programs .
Graphical applications that hold the user’s hands etc .
What is GUI objects driven program creation called again ?
Its higher level as far as I get it – someone has already written the basic code & now you just have to put the puzzle together in a reasonably functional way .
The users of these applications will be limited by the given options of the application & therefore less flexibility as it is cut off at a higher level than if people knew HTML & other related languages which make it all possible in the first place & which are hidden by the simplified environment provided by such applications .
People have ideas & wishes & so there is a market to make it possible for people to “visualise” them .
.
People want to share their lives & upload stuff : myspace etc .
Its limited in what it provides but satisfies the basic user demands .
Edited 2006-10-22 16:47