Software Development

Why we should teach programming to all students

Justin James believes that teaching programming to students at an early age provides them with skills that will serve them well in the job market.

 

One of the often repeated ideas in IT is that domain experts, not programmers, will create software in the "near future." Those of us in the trenches always laugh at this one, because we know that it isn't so and won't be anytime soon. There are two major reasons why.

The first is that we are still barely at a Neanderthal-level of tools when it comes to our technology; we are still essentially painting on cave walls by burning sticks and scraping them on rock. The second issue -- and this is the killer -- is that so few people have the proper mindset or training to construct software. I think that we can and eventually will have the toolsets needed to make software creation much simpler. But until then (and my guess for this is measured in decades if not centuries), I believe that we need to treat programming as a skill at the same level as mathematics or basic science in our education system.

I am not suggesting putting third graders in front of Visual Studio or Eclipse or teaching them C# or Java; but I do believe that every student should be exposed to enough software development to be able to properly leverage the skills they will be using as adults. More and more jobs involve working with a computer in one way or another, and many applications have a scripting system, an API, or some other way for a programmer to access them. These hooks allow the user to use an application the way they need to, instead of being frustrated that it doesn't meet all of their needs out of the box. For example, I cannot tell you the number of times someone has complained that Microsoft Excel is "missing" a piece of functionality (like it is not bloated enough) when it would only take them a few minutes to write a macro for it if they tried.

Also, more and more jobs are actually specialized programmer positions. And even if the positions aren't true programming jobs rooted in a particular domain, an employee will perform much better if they have programming skills. Take a look at this list for a few examples:

  • Mathematician
  • Scientist (well, if not most, many of these positions)
  • Statistician
  • Financial analyst
  • Business analyst
  • Investor
  • Network engineer
  • Systems administrator
  • Engineer (most engineers)

All of these jobs require an employee to work with complex software applications all day long and often do tasks in those applications that are directly programming or close to it.

From talking to my peers, the typical Computer Science, MIS, or other IT student entering college is woefully unprepared. While our school systems claim to teach kids how to use computers and prepare them for a state-of-the-art career, what you see when you scratch the surface are students slapping together clip art PowerPoint presentations or how to find dancing baby videos on YouTube. The students are not being taught how to use or leverage a computer; they are assigned to do tasks on a computer that they would do if they weren't using a computer.

The first thing students need to learn is how to actually use a computer. This means learning more than how to send an email; it means how to really use a search engine with advanced features, how to use critical thinking skills to evaluate if a Web site is credible, and so on. The next thing students need to learn is how to properly use common productivity applications to truly be productive in them. From there, the students should be exposed to some sort of development.

When I was growing up, it was trendy to show kids Logo to move the turtle around the screen. I was especially lucky in sixth grade because our class had a LEGO set that we could control from a computer (and through Logo, I believe). This was a great experience to whet my interest. Unfortunately, it seems like these kinds of things have fallen out of favor; or that by the time these types of activities are introduced, most students are old enough to think that moving a fake turtle around the screen is cheesy. Teachers should introduce students to programming in the fourth, fifth, or sixth grades. Those students are old enough to "get it" as long as the teacher is sufficiently patient.

From there, teachers need to show students how to integrate programming into their other studies. For example, art teachers might show students how to put together a macro in their photo editing software or even how to write their own filters. Math teachers might demonstrate how to program the calculator to perform common functions, which would really teach the underlying mathematical concepts at the same time. And so on.

There are challenges with this proposed idea. For instance, not every class would be able to teach programming. And, for a variety of reasons, training teachers would be an uphill battle.

Until the vision of "programmers" building the blocks that users can custom assemble into applications on-demand comes true, it will be necessary to start teaching programming to students as early as third grade. There is no denying that programming practice and theory is a major key to being the best at many jobs. So, if we wish to keep making progress, we need to ensure that U.S. students learn programming concepts and understand how those concepts apply to real world scenarios.

Related TechRepublic posts

J.Ja

Disclosure of Justin's industry affiliations: Justin James has a contract with Spiceworks to write product buying guides. He is also under contract to OpenAmplify, which is owned by Hapax, to write a series of blogs, tutorials, and other articles.

---------------------------------------------------------------------------------------

Get weekly development tips in your inbox Keep your developer skills sharp by signing up for TechRepublic's free Web Developer newsletter, delivered each Tuesday. Automatically subscribe today!

About

Justin James is the Lead Architect for Conigent.

190 comments
oink54321
oink54321

I've created a free web page to teach programming where you don't have to install anything. Includes video tutorials and challenges. Check it out. happyfuncoding.com Cheers!

darpoke
darpoke

Justin - but slightly on topic as well. Like much of my posting, I realise. I was wondering, having re-read your article (which, for all my arguing to the contrary, I really enjoyed and agree with much of). Can you recommend a good way for the amateur enthusiast to develop skills such as those you mentioned? Namely using a computer properly (search engines and otherwise), and to analytically appraise a web site? Also something that discusses some abstract concepts independent of any specific language would be fantastic. Even a few good books would be very useful, my interests range from linguistics to typography, foreign languages to photography, and I've yet to find something that motivates me that I couldn't learn something meaningful about through some well chosen reading :-)

jlanus
jlanus

Instead, what about building applications that do not require the users to program them? I don't mean taking VBA from Excel. I mean designing the apps so that they fulfill regular users needs as cars fulfill regular users transportation needs no matter if the user (driver) knows mechanics or not. Yes, compared to the motorcar industry we haven't left the caves. Justin says "...it would only take them a few minutes to write a macro". Yes, a minute and several years to build the mind set. Let alone those who won't, the vast majority of normal people.

JosB
JosB

What we should teach students is to think creative about solving problems. Programming is just a tool to do this. The same goes for teaching them how to educate themself. Most tools have a help function that will provide most information needed. It's just that it's not always easy to specify what should be the result, so students need to learn how to search more efficient. I think these two things are far more important than learning students some monkey tricks.

Bronte G
Bronte G

At least if computer programming is taught to people, of any age, they will learn the need for accuracy in language. Language is changing, and so are computer languages, but some words have a task, and have ways of being built up and broken down. Words like "leverage", which is a verb made from a noun which was itself an extension of a noun. But people do not learn to analyse language, so they do not have a very good starting point for analysing the words used in programming. I did study some programming, dBase and VBA for Microsoft Office, at adult education classes. And when I went to school decades ago we learnt grammar and sentence construction, which it seem are not taught any more. So I hope my comments are relevant.

Danny Graham
Danny Graham

I agree with your point - any task that uses a computer and a workflow can benefit from some programming experience. And this isn't just those people working in the (incidentally very creative) science and engineering disciplines. Think of those people working in graphic design (and marketing), music or video production. Many tools in these areas have scriptable work flows that greatly aid the usr if they can just get their heads around them.

TonytheTiger
TonytheTiger

Who's going to fix your plumbing? cook your meals? plow the snow off the roads... the mathematician or the business analyst? :)

shearsl
shearsl

I couldn't agree more. That is why when I found out about Scratch (an MIT project) I got my kids started on it. I am a college math teacher and a parent of 3 young girls and I want to make sure they are prepared for the world, so each summer we work on some enrichment projects and Scratch programming is one of them. I don't expect most teachers to be skilled enough to help with these kinds of projects so I take it upon myself to work with my kids in this way. As a teacher myself, I write a lot of software to enhance my class.

jedmundson
jedmundson

When I was in High school (back when nerds wore slide rules on their belts). Most students stated *Why should I learn this stuff? I'll never use it out in the real world?* Years later I taught Introduction to Structured Logic in a trade school. I spent half my time teaching Boolien Logic and the Order of Operations in math before I could even introduce Boolien Logic. The students who would truly benefit from from learning programming will have already started learning it. Most students will learn nothing. The resource will be wasted.

ogregator
ogregator

I strongly disagree with this point. I believe strongly they should be taught rudimentary computer skills however there is no need to teach all kids programming. First of all, what would you use as a primary platform? Secondly, we're not all made the same. Not everyone is made out to be a quarterback (or a full forward) and definitely not everyone is made out to be programmers. So why waste already stretched resources to forces kids to learn skills that they're not going end up using? Let's face it, one of the purposes of school is to provide kids with the social environment to work out where they stand in the world, if programming figures into their world, then those are the kids that we should concentrate our resources on. There's a lot of old Chinese stories about students and teachers (mainly in martial arts). The students would be put through a lot of trials before they are taught, there is a reason for that.

cnorisez
cnorisez

Programming for kids? Try Scratch. scratch.mit.edu

Dukhalion
Dukhalion

It is better to have only interested and thus highly motivated people doing programming than allowing any sloppy student spreading garbage around the world because they are not interested in doing good programming.

kevaburg
kevaburg

Firstly, when I was at school, we had computerised robots and the schools pride and joy, a computerised lathe. Both were programmable in BASIC and fun to learn with. OK then, in 2001 I worked in a school that had more or less the same equipment still running on BASIC on (believe it or not) a BBC Model B! Hardly good grounding for learning Java or C#. Because I was the IT-Tech in the school, the kids would come to me and ask questions about IT careers and where I could (and where appropriate) I would answer honestly and openly. Most of the kids in the 10-15 year old range wanted to be games programmers. So I would advise them to concentrate on their maths and physics (or at least basic sciences) and would explain to them why. Very few ever actually came back once they realised the subjects they hated were going to have to play a large part of their "dream job". Schools need to first relate the importance of a subject in real-world terms. They need to know and understand why maths is so important. They need to understand why understanding ones own language plays such an important part in everyday life. Simply being able to talk is no longer enough. Programming languages could be a part of the curriculum relatively easily but teachers also need to exude the enthusiasm for the subject to get the students interested.

Mark Miller
Mark Miller

As a kid it helped develop my logical thinking skills, which was helpful in math, but it was a double-edged sword. One of the tools I used confused me about some concepts in mathematics. So it's wise to be careful about the ideas that are presented to students through a programming system. The main thing I see that would be valuable is getting people to understand what software is, that the people who write it are fallible, and as a couple people commented earlier it's a challenging thing to do. We're not at a state of affairs yet where we can just "whip up" a business system in a day. Most of all I'd like it if people didn't feel that they were at the affect of technology. They can shape it how they want. In the last decade technology has been moving away from this idea, assuming that people want to use it like an appliance, because we as a people don't know any better. The only thing is now technology is an appliance that can transmit our information to others without our knowledge, it controls how we use it (rather than us controlling that), and certain smart-asses sneak in thinking they're being oh so clever and @$%^ with it so it screws up our life. It's disempowering. Like I've said before it's like we're the illiterate masses of the Middle Ages who don't know how to read or write, and so we have to be read to by people we "trust", like we're children. In the broadest sense, programming to me is about a new literacy.

darpoke
darpoke

replying to my own post - but I wanted to thank you all equally :-) I appreciate the advice, and of course a pet project is the best way to go about it. I should perhaps have mentioned that I actually did take a bit of programming at uni - our major assignment was to write a piece of software that would take in a date and tell you what day of the week it was. Extra credit involved calculation of the Easter dates that year, and conversion from the Gregorian calendar to other types such as Chinese, Hebrew and so on. We were taught OOP using Delphi. Unfortunately, though I enjoyed it greatly this made up a fairly small part of my degree, as it was rather more specialised. I've been hoping to learn more about programming and computing these days, in my spare time, which is why I'm currently using Ubuntu Linux. I hope to try out a few other distros, once I have a bit more RAM to run a virtual machine. Easier than doing a full install and they don't all support Live discs (and those that do, run necessarily slow). I think the next step is probably some abstract reading about programming approaches as you suggest, coupled with a project to lend direction. Thanks again for all your input.

jlanus
jlanus

They are right, this is something difficult to find. When I taught introduction to programming to 1st year kids I created my own material, an abstract computer. In your case it might be easy because you are in contact with computers, all the time. I suggest you use Excel's integrated Visual Basic, complemented with some readings about object oriented programming OOP, because in VBA object orientation is optional. As an example assignment, try to write a program to query a router about the IP and MAC relationships and massage the data into properly formatted Excel columns. Later on you might want to build a database of users and MACs, join with the router's info and be able to tell where is each notebook, for example. As Justin says, one learns "on demand" so demand yourself. Enjoy!

Mark Miller
Mark Miller

In terms of abstract concepts in computing the best that I could recommend would be a book on Discrete Structures, which is a kind of math. Unfortunately I don't have a specific book on this in mind. What I got out of it is that programming logic can be looked at analytically. Back when I took it there was some analysis of algorithms in the subject matter. The big thing I learned from it was about set theory, which really helped me when I got into programming that used relational databases. Of all the math courses I took in college, this was the most relevant one I had in relation to my CS major. A while back one of the other readers of Justin's blog asked me about a language independent way of learning programming. I don't know if this is what you're after, but for what it's worth I'll mention it. I referred the question to other knowledgeable people, since I didn't know. Alan Kay recommended a book called "Algorithmics" by David Harel. Kay said that you can gain insights by reading code that does interesting and important things. He and Bob Frankston also recommended that people practice the writing and debugging of computing ideas. The more you do it the better you'll get.

Justin James
Justin James

You know, that's a great question, and as far as I know, I have *never* seen such a resource! Even most of those topics, you don't even see many Web pages on them. Sounds like a great opportunity to write a book or a Web site. :D For me, nearly every single one of those skills was developed because I had to know it for a project. For example, I because a search engine pro when I was working on an education-specific meta search engine. I learned about how to evaluate a resouce when I was in high school; my teachers really emphasized library usage and research skills (which also ended up applying to search engines later on, in terms of proper keyword selection). I learned a bit about everything along the way, and even now I am still learning (someone taught me an Outlook trick a few days ago which would have saved me dozens of hours over the last 10 years)! J.Ja

Mark Miller
Mark Miller

[i]I mean designing the apps so that they fulfill regular users needs as cars fulfill regular users transportation needs no matter if the user (driver) knows mechanics or not.[/i] This is what some said about the web browser 10 years ago. Now I guess we use it so much we don't think of it as an "application". An interesting metaphor: You know an application has been designed well when it "disappears". People just see it as a system to use, not an application. Having the ability to program inside it would still be nice though.

Tony Hopkinson
Tony Hopkinson

I mean how many different classes of 'regular' user do you think one application could satisfy? I'm going for one, and making the application specfic to them would mean it had less utility for others...

Tony Hopkinson
Tony Hopkinson

programmers who don't know boolean algebra, and I mean basic stuff. To teach something like that you need a hook, for us it's programming computers, for electricians logic cricuit design, for .... The fundamentals are more than just what we do.

dogknees
dogknees

This sounds like the old "I'm not good at maths" argument. This is garbage. People are no more "good" or "bad" at maths as any other subject. We expect all kids to learn to read. "I'm no good at reading" isn't seen as a valid objection. In the same way, "I'm no good at that stuff" isn't an excuse for not learning programming. Ultimately, children should be taught what will be useful to them in their lives, not what they are good at, and not what they want to learn. You say they won't use it. They certainly won't if they see it as some special subject best left to others. My opinion is that we should be teaching all kids to make full use of all the capabilities of modern software, and that includes writing macros and other code to automate things or make them work the way you want them to.

Tony Hopkinson
Tony Hopkinson

curriculum, you want programming. Turning out a chess piece on a lathe, getting the robot arm to pick up and put down, draw a square with a plotter. Obviously you need the three Rs but you can use the desire some have to program to give a reason to learn it, well parts of it anyway. It's self reinforcing, how much use did you get out of basic geometry at school? You want to do something like wire graphics, you'll learn it en passant. Get clever and they'll come out knowing how to apply basic geometry better than some budding Descartes... A basic machine and a plotter, and say work on plotting the stars and stripes, and any child who wants to will learn a lot of basic programming and math. Sheesh I made do with HELLO on a segmented LED display. I was fascinated. If they aren't let them learn something that does.

Derek Schauland
Derek Schauland

I think it was hit right on the nose, perhaps teachers arent looking toward programming as a viable skill (or it changes so fast that keeping up is difficult). Programming should be taught to students to provide more options and better training when they enter the workforce. When I was in college I had some C++, but mostly had Cobol (neither of which I remember much about anymore, sadly), I almost wish there had been more programming classes related/offered to broaden my knowledge further.

mlieberman
mlieberman

Sure is programming is a vital subject to know... for programmers (and assorted IT staff.) To paraphrase Cliff Stoll, why don't they teach plumbing in schools. I am an IT employee who utilizes programming and frankly there's no need for any of the sales people or lawyers, to know programming. The same way I don't know anything about fixing a car or roofing a house or building nuclear weapons.

Justin James
Justin James

Yeah, the issue of the "high priesthood" is really big. The current conventional thinking, is that the way to get people to not be intimidated by software is to dumb the software down to the point where it doesn't do very much. Too many Web apps are like this, they embody a fraction of the functionality of the desktop app they replace, and we call this "progress". In a twisted way, people are able to get more done with a limited tool because they never took the time to learn to use the better tool, or could not learn to use the better tool. So we're faced with two major questions: * How do we write applications which can be full featured and useable and useful to the average person? * How do we help users do what they need to do with software, even if the application developer did not anticipate their need? The first item is something which is going to be addressed by a combination of usability theory, cognitive science, practice, dumb luck, and probably a bit of AI as well (think "Clippy", but one that actually works). The second point is a mix of: * Teaching more people programming skills. * Better tools/languages, particularly those along the lines of Squeak/eToys. I know that we will be able to have truly "personal" computers, but I am not sure if we will be able to have them any time soon. :( J.Ja

jlanus
jlanus

Yes Mark, you are quite right. Apps must be like a building's elevator that you used but it didn't require much cognitive friction from you.

jlanus
jlanus

Yes Mark, you are quire right. Apps must be like a building's elevator that you used but it didn't require much cognitive friction from you.

jlanus
jlanus

Tony, there are ways to do so. I appear as a developer but I'm becoming an interaction designer and as such I learned such tricks. Of course not 100%. Bu yes the kind of application that "everybody loves". It's quite possible.

Justin James
Justin James

Unfortunately, attempts to identify and impelment every possible need result in very bloated applications. :( J.Ja

santeewelding
santeewelding

Are absolute. I agree that to substitute what you do for Absolute is obscene madness.

kevaburg
kevaburg

The second reason of "it moves too fast" is more appropriate. I don't know if others share my view, but most teachers I know (and I know a few) seem most comfortable teaching the things they came out of university with. They seem the most incapable of adapting to change, the most resilient or even unwilling. Maths and Science -based teachers got jiffed with the job of teaching IT back in the 80's whether they liked it or not and that really isn't the best start or the most productive way to start something new. The kids are expected to do a hell of a lot nowadays and teachers have a hard job to keep interest at even a moderate level. So when their own interest is low in a subject, then the kids will be as well. What is needed is Government investment in a teaching infrastructure that allows IT to taught by IT professionals and not by people talented and more interested in something else. I feel for the teachers sure, but something needs to be done or else we are going to lose any potential IT talent without even realising it.

Tony Hopkinson
Tony Hopkinson

What's the point of teaching a programming language, even if you picked something really current, to an 11 year old? It's pretty pointless at 16, with the rate of change we have. Anyone remember this one? PenUp MoveTo(2,0) PenDown MoveTo(0,0) MoveTo(0,2) MoveTo(2,0) MoveTo(2,2) MoveTo(1,3) MoveTo(0,2) MoveTo(2,2) MoveTo(0,0) PenUp Aside from solving the basic problem. Draw shape without lifting pen up and never go over same line. Programming, euclidean geometry, fun tech. Lots of coloured pens, a bit of competition. Fun, fun, fun. Do gradual just draw the shape then, look at optimising to save on ink... Teach programming through an inuse language, almost certainly the teacher is going to be lost, never mind the teachee, whereas anyone with a positive IQ should be able to figure out the above. It's too hard to start simple with a well used procedural langauge, OO forget about it.

Mark Miller
Mark Miller

Programming is like knowing how to read or write in this realm. It's not the end goal. Computing is no more about the computers themselves than astronomy is about telescopes. Computers are models of computing ideas (that's the difference from astronomy, I think) which we use to carry out the process. So Cliff Stoll's analogy does not apply. The concepts are the important thing.

Tony Hopkinson
Tony Hopkinson

as a discipline not using a language. Not if you want an omlette, first crack the eggs. No first get the egss, no find a shop that sells them or a chicken, no that's a cockerel (got you you PC b'stards !) That basic of programming is applicable anywhere, if fact most people program unconsciously all the time. Teach that, then for those who ae interested, teach how to apply it in computer programming, lawyer's can go for find witness, make sure winess helps case before put in stand.... Our problem is we are teaching teh above with C# or Java or some such at age twenty, as though breaking a task into steps was something only computers programmers do, and then as an optional extra.

wbranch
wbranch

Sometimes, dumbing down the tool set for a user isn't a bad thing. If I present the user 15 different ways to accomplish a task either a) they'll not know which way to use, or b) they'll do all 15 ways and then when it comes time to figure out what they've done, it's a mess pulling it all apart. I'm with you that educated users who are fully comfortable with the technology in question can probably be handed a full menu of options, but in the meantime, guiding and focusing users isn't necessarily a bad thing.

Tony Hopkinson
Tony Hopkinson

I'd recommend initially we take the computer out of programming. De mystifying it, is the best way to teach the basics, and to give a common basis of knowledge where those who can and desire to program can interact effectively. Programmers who think, people who want stuff programmed who think. That would give us a way of addressing the issues all three of us see. Not to mention failed projects, the business divide, low quality commercialistion and many others. Prgramming with a computer well, requires you to be comfortable with particular model, it doesn't mean you've got a lock on breaking a task into it's components and re-organising for some form of efficiency. People competent in any task do it evey minute of every waking day. Get well away from the fundamentally stupid idea that in order to program you must know all the key words in language X, and that if you do you can. We all know neither of those positions is even slightly true. I've taught many professionals in other disciplines how to program a computer when their knowledge of computing was little better than ma and pa browser, all you have to do is show them that the computer is the means of expression, not the thing itself.

santeewelding
santeewelding

You would not recommend to Justin's third-graders, nor to the entire of humanity, so that we may program how it is that we are? (getting back to the original post, mind, in line with the Prussian model)

Tony Hopkinson
Tony Hopkinson

book, after all he was one of the inmates. Visual Basic is without doubt the worst language I've used professionally. As for his influence on Visual Studio. I was a Borland type since the early 90s so don't even go there.

jlanus
jlanus

It's not common sense, it?s not the outcome of a reasoning or deductive process. It's a profession termed "Interaction design". Also "HCI" for Human'computer interaction or "UX" for "User experience", related terms with different width. Many universities teach that stuff. It is not subjective, actually one can have preferences but in a given environment the solution might be the kind of UI one likes less. And one can "measure" UI Designs, even before development starts. We call the subjective thingie "self referential design", like when a developer thinks that it must be OK for everybody else because he likes it. It does not "depend" on fuzzy variables, many things are already measured and some of them became best practices. It is not doing things too "generic" which I usually regard as the outcome of a developer who didn't dig enough in the domain aka was not furnished with proper requirements. See an example: I'm a developer developing a report and as I don't have a clear spec then I devise a rather generic report the user can customize at will. Good? No! The report customization burden does not belong to the user but to the functional analyst who is supposed to do it better, much better. "Empowering the user" usually only hides the developer?s inability to produce a solution that?s right. I wholeheartedly suggest that you read a book, inexpensive buy enlightening, written by Alan Cooper who used to be a hardcore developer, he invented of Visual Basic and thus could be regarded as the grandfather of all the MS Visual Studio saga. The title is "The inmates are running the asylum". This book provided me with lots of insight about my software dev profession. "The more people we try to appeal the less ...": yes, this is right. The outcome might be "lame". We identify "primary" and "secondary" users, design for the primary and validate for the secondaries. This is one technique, see "The inmates ..." please. Also, doing well is less work with more satisfaction, as one could understand by reading these old reports by Sun: http://interface.free.fr/Archives/SUN_usability_benefits_Cost.pdf The "Usability engineering" meme is about the usability stuff done by real developers, not graphics designers and the like. It?s done *before*.

Tony Hopkinson
Tony Hopkinson

Less effort to operate is too subjective, you ask someone who likes say VI's interface compared to the pointy clicky style. Or using the back button in rich web application for undo etc. All depends on how you define domain, but for every one you could come up with I could find 100 people who'd come up with an equally valid but different one. So I'm still firm on the NO, context is everything, trying to make theings so generic they mean nothing to anybody is self defeating. We write aplications to do things based on what we or some small group called 'they' look at the task. The more people we try to appeal to, the less we satisfy.

jlanus
jlanus

Not without thinking but thinking only about the domain issues. Well designed UIs, that require less effort to operate, leave more user energy for the real thing. What I take is the struggle with the software, not the user's smartness.

Tony Hopkinson
Tony Hopkinson

Ben Kinsgley moment... Any apps that doesn't require thought to use, will be used thoughtlessly and we'll get the blame.

Tony Hopkinson
Tony Hopkinson

Thing is it's always some of the missing 20% you need and of the 80, at least 20% could do with a twiddle or a tweak. That's not counting what all things to all men, does to your code base and costs in terms of maintenance and enhancement. I know a lot of teh ways myself, no one wants to pay for them though.....

Tony Hopkinson
Tony Hopkinson

hidden. We are suffering from a constant misinterpretation of the basics. Encapsulation hiding what as well as how. Reuse as a simpler way to do things!!!! Optimising too early. Using UI to define function. All basics, all seemingly dropped, in favour of the esoteric and acrcane, stuff that is just wank if the fundamentals haven't been applied. Here's a question exactly what does something like a data bound control simplify?

santeewelding
santeewelding

You count fingers and toes... You are old enough to have screwed, are you not? Well, you are screwed, clerk. Screwed, and I don't think you know it.

dogknees
dogknees

We need to educate people to deal with large complex systems. And get the point across that learning to do anything worthwhile is HARD and takes a lot of personal EFFORT. Not, we need to simplify our systems.

jlanus
jlanus

That's how MSWord gets bloated. I'm talking about design, interaction design (as opposed to graphs design). We such designers usually foster simplicity, minimalism. Software developers (like me) think in terms of components that can do operations (objects do methods) and we can figure out which methods have to be applied to what data in order to seek a goal. Like for example a series of piped *NIX commands. Also, delelopers think everybody can do the same, and thus if they supply them all the methods then the users will be able to achieve all the goals. Thus the software bloat ranging from 1.44MB diskettes to 2-layer DVDs. Thinking that what is good for one is good for all is the problem, we call it "self referential design". It's a sort of autism. It's the mindset that tries to do fool-proof apps because the users are fools that can't manage command chains. Actually, they are smart prople that can't manage command chains, and couldn?t care less. There is much more ... no space ... can't write ... more ... arrrgh! (nobody reads lengthy postings)

Mark Miller
Mark Miller

...because you only have so much information you can display on the screen at a time. Features that used to be readily available "disappear" because now you've added a bunch of other features that clutter up the workspace, making them difficult to find. This is what happened with Office. The sense I have about this now is I'm sure there's a better way to deal with trying to include everything anyone would want to do with a document besides the feature clutter that's developed. Part of the problem is the idea of requiring someone to navigate a drop-down menu system, or find the right icon. I've heard about Project Natal at Microsoft, and I think there are some promising ideas there. It has a camera that can sense hand movement, and a natural language system that can interpret what you tell it to do. That would be worth exploring. Douglas Engelbart explored how to set up different control devices for a computer system more than 40 years ago. The most famous of these was the mouse. A couple others he came up with was what he called the "keychord", and a lever that you could nudge with your leg, as I recall. The keychord was a device that would sit on the other side of the keyboard from the mouse. It had four or five little levers that stuck out horizontally. You could manipulate them with the fingers of one hand. You'd tap coded sequences with it, which corresponded to commands the system understood, like "delete word", "cut", "copy", "paste", etc. This way, along with using the mouse for cursor control, it was possible to manipulate a document without touching the keyboard, and without taking your eyes off of what you were working on. Last I heard he was experimenting with some glove technology which would allow the user to send commands via. hand gestures. I just had the thought--not unlike those cool scenes in "Minority Report", though I imagine not as dramatic. :)

Tony Hopkinson
Tony Hopkinson

The oh you don't need to know different ways to loop one will do, after all they are all the same aren't they school of numptyness. Case book example would be the MSChart component. Does every sort of chart you could ever want (except horizontal histogram !) with one 'simple' interface. Designed and implemented by Kermit, after Miss Piggy scooped the stuffing out of his head. After all XYChart,PieChart,ScatterPlot... That woudl have been way too complex for us glorified clerks to understand...