Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!

 



Forgot your password?
typodupeerror
×
Programming Education

Better Tools For Programming Literacy 317

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."
This discussion has been archived. No new comments can be posted.

Better Tools For Programming Literacy

Comments Filter:
  • by Anonymous Coward on Wednesday January 09, 2013 @05:30AM (#42530041)

    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.

    • by eulernet ( 1132389 ) on Wednesday January 09, 2013 @09:29AM (#42531583)

      This is because people are not interested into the problem, they are only interested by the solution.

      And this is true for everybody: personally, I don't really care about how my car works, I just want that it works.
      When it does not work, I go to a garage to solve my problem.

      Trying to simplify programming will only give a false sense of expertise, because REAL programming is tough: it's about solving abstract problems.

      No matter the difficulty of the subject, there will always be people who are interested in understanding, and people who don't care (even if it's simple).
      So I would prefer that, instead of training people who don't care about programming, we train people who are interested into programming.

      And the best tool to make people interested into programming is games, because a lot of programmers started programming because they wanted to write their own game.

    • 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, a

  • by gweihir ( 88907 ) on Wednesday January 09, 2013 @05:33AM (#42530053)

    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.

    • by Anonymous Coward on Wednesday January 09, 2013 @06:28AM (#42530289)

      Bullshit. Programming still is *piss-easy* compared to our actual mental abilities. Everyone of us does all the stuff you need for it in daily life anyway:

      Everyone of us uses the concept of identifiers (think variables), when we say “he" instead of "Jim", or even "Jim" instead of shoving that person in front of your eyes.
      Everyone of us uses the concept of sequences of commands, when making a to-do list.
      Everyone of us uses has no problem with including tasks into that to-do list, that themselves are a set of steps one could write down somewhere else.
      Everyone of us is able to say "Do this 10 times.", "Do this for all people in the room.", or "Until you have at least $1000, keep on saving.".
      Everyone of us is able to make lists, use property lists (dating site profiles, etc), handle tree structures (company hierarchies, file systems), and even more complex ones.
      Everyone of us uses grouping (think modules) all the time in daily life. It's part of how our brain works, to group things into classes.
      Everyone of us can use and understand the concept of expressions, when we read and write recipes. (Which essentially are programs: dinner = [(simmerFor (10 min) (add [cream,whiteWine,(dried chickenBroth),nutmeg,(piecesOf broccoli),salt,pepper,garlic] (fried (chopped chickenBreast)))) + ((cookedIn saltWater (8 min)) tagiatelle), readyMadeGarlicyFriseeSalad ].)
      You do the next one.

      There is absolutely nobody with a normal working brain who can't program. With the right interface and presentation, your grandma can program medium-sized software packages, no problem.

      And most importantly: There's nothing wrong with small shitty scripts grown from one-off one-liners.a

      • Re: (Score:3, Insightful)

        by Anonymous Coward

        But you must understand the concept of "identifiers". Before you are 9-10, the name of your mother is useually just "Mom"... but so is everyones mother is named "Mom"... So now it is "joeys mom"... which is not "my mom"... and neither is a correct identity.

        Concept of a sequence of commands - not until you are told "No" long enough. The problem is not the concept of a sequence, but one of generating a sequence. And doing it properly is hard. It takes over twenty years for people to write a sequence of words

        • by Jmc23 ( 2353706 )
          He didn't write that monstrosity in Lisp. I can barely understand it and Lisp is the only thing I understand.
      • by gweihir ( 88907 ) on Wednesday January 09, 2013 @07:41AM (#42530639)

        You fail to see the problem. What you describe is the "primitives" of a simple programming language. Understanding them does not help you write software of any meaningful complexity. Your argument akin to saying somebody that can carry around a brick and put it somewhere is able to build a house that is comfortable and durable. Not so, rather obviously.

        • by slim ( 1652 )

          Your argument akin to saying somebody that can carry around a brick and put it somewhere is able to build a house that is comfortable and durable. Not so, rather obviously.

          And again, you're not allowing people to be non-experts.

          Not everybody can architect a house. Almost everyone can learn enough in a day to build a garden wall.

      • by txibi ( 1691198 )

        Everyone of us is able to say "Do this 10 times.", "Do this for all people in the room.", or "Until you have at least $1000, keep on saving.".

        Well you think that every one is able to understand that, but I know at least a person with a PhD in Law that is unable to understand the concept of "FOR" or a "WHILE", and we were 2 computer engineers and PhD in computer science trying to explain it...

        • by gweihir ( 88907 )

          Indeed. You have to get the view a program has of the world, i.e. the abstraction used. Unless you understand that, nothing can help you. And by now I am convinced from experience that this cannot actually be taught, most people are just not equipped mentally to understand it.

          • by Jmc23 ( 2353706 )
            Perhaps, the problem lies that most of the abstractions are created by programmers, and let's face it programmers have a unique way of thinking that's a bit different than the rest of the population.

            Coupled with the fact that these ad-hoc abstractions are usually developed incompletely, don't model the real world, and are frequently mired in tedious details it starts to become very clear why regular people are left out of programming.

            Seriously, programming language syntax is confusing and arbitrary. Prett

            • by gweihir ( 88907 )

              I agree with you on Lisp. The core language is strikingly elegant. I did some smaller work with it way back and really enjoyed it. I think the problem that most programmers have with Lisp is that if you do not understand recursion, it is very hard to get anywhere. That said, I am all for teaching (core) Lisp in school. You cannot get much more pure and simple than that. And maybe it will motivate the few that have the talent to go into software afterwards.

              However, as soon as you bring libraries in, Lisp is

              • by Jmc23 ( 2353706 )
                I'll admit the library problem in Lisp still exists today, though probably not in the same way. There are so many abandoned libraries out there it's hard to tell what to use. Though just a little bit of experience with Lisp brings an understanding of the library problem. You see, it's just too easy to write your own solution. I've spent probably 3x the time looking up libraries than I spend writing exactly when I need after finding out it doesn't exist.

                I wouldn't use Emacs as an example. Most good lisp

      • 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.

      • There are two hard concepts in programming, and your list doesn't cover either of them. These are recursion (induction, for the theoreticians) and pointers (indirection, for the theoreticians). The idea of a pointer as something that is a name for a name for a name for a thing, at arbitrary number of levels of indirection, and that you can work with these instead of with identifiers (which are a single, fixed layer of indirection) is something that a lot of people, even those enrolled on computer science

      • Ambiguity.

        The most people do not recognise ambiguity. People say things and then look at you oddly when you point out that what they have said also has a completely different meaning. The meaning they intended is usually obvious from the context but they are so locked on the context that trying to explain the alternative meaning is usually a wasted cause.

        That mindset just does not handle programming at all well. "It's obvious" is a usually a disaster when you start thinking about programming because it's on

      • Everyone of us uses the concept of identifiers (think variables), when we say “he" instead of "Jim", or even "Jim" instead of shoving that person in front of your eyes.

        False friends. Pronouns (he, she) etc are a closed set (think "keywords", not "variables"). And pronouns, like names, are fuzzy, context-sensitive references. It is precisely these linguistic constructs that make variables hard. We're not used to the fixed, uncompromising nature of an instatiated variable, and we're not used to the idea of strict scoping and overwriting of variables. I can talk about three different Jims without ever once making an explicit assignment declaration to the label "Jim".

        Everyone of us uses the concept of sequences of commands, when making a to-do list.

        But

    • by JaredOfEuropa ( 526365 ) on Wednesday January 09, 2013 @06:45AM (#42530363) Journal
      Don't confuse programming with software engineering. The latter does require a good deal of talent, education and experience. But programming? I agree with the author that many people can learn, given the opportunity and the right tools.

      Case in point: my high school taught a (somewhat unusual) computer class; this was in the mid-80s in what you might call a good high school (the Dutch high school system is divided in levels, the highest being "pre-university education" which was the level of my high school). The class consisted of some basic computer science (what is a computer, CPU, I/O bus, etc) as well as hands on programming in BASIC. This was a mandatory class which meant that we had a mix of geeks and non-geeks sitting in, but pretty much everyone was able to grasp the basic concepts of computing, logic, and programming, to the point were students were able to translate simple problems into working programs. Does this produce useful programmers? No, but it helps getting more people interested in the field, and in my current line of work I can see a clear difference between people who have had such a basic education in computing, and those who haven't. For people in IT who aren't actual software engineers, it's still useful to know a little bit about computers and programming.

      To achieve this, having the right tools is important. Complex tools may be necessary when writing complex software, and a software engineer refusing to master complex tools because they are complex is silly, but for a beginner, complexity distracts them from what they are actually learning: writing a program. That's why BASIC is still a good tool for teaching laymen about computers; it might not be a very elegant language with stuff like GOTO, but beginners can have a working program up and running in minutes, doing simple input and output. Contrast that with something like C, which requires you to set up and master a compiler first, which is no easy task for someone just starting to program.

      Your example of writing is a good one. Like programming, this too is something worthwhile to teach to the masses, and many are able to gain a basic proficiency in it. But you woudln't give a calligraphy pen (or a complex programming tool) to an amateur, you give them a BIC pen (or something like BASIC) so they can master the basics of the art without having to learn advanced tools as well.
      • by martin-boundary ( 547041 ) on Wednesday January 09, 2013 @07:01AM (#42530439)
        No. Writing is an excellent example here.

        Think about ALL the people in the world. There are billions of people who've learned to write, but how many of those can _really_ write a letter if they have to? I'll accept even people who write with bad grammar and spelling mistakes. All I want is people who can write an actual letter that is sufficiently intelligible to serve a simple purpose.

        Well? I expect less than half of those who have learned to write are actually able to do so. And if they can't even write a letter after having been taught the alphabet, neither can they write a program if they would be taught BASIC..

        • I'm thinking of the other half, the billions who have learned to write and are now able to write something useful. And how many of those billions got inspired to write something great? Likewise, I think it is worthwhile to expose more people to computer science and programming. It gets more people interested in the subject, and a sizable portion of students should be able to learn something useful from a beginners course, even if they never actually do any serious programming later. Programming teaches
          • Re: (Score:3, Insightful)

            While I agree that it is worthwhile to _expose_ as many people as possible to programming, I think you are being overenthusiastic about the expected success rate.

            Programming teaches logic, expression of thought, and troubleshooting: all useful skills in many other fields.

            Yes, except... writing teaches logic and expression of thought too, in a much more freeform and forgiving way. It doesn't even need a computer, just a pen and paper. The fact is that as a civilisation, we aren't doing that well on the

        • by gweihir ( 88907 )

          Thank you, just my point. And if the letter suddenly needs to communicate a complex situation and how exactly to deal with it, and also includes reactions to uncertainties, then we are beginning to approach what software is. The arguments of all those here is alike to saying "Those that can write cannot only write any letter for any purpose, the can also program, as programs are written in text."

        • by HeckRuler ( 1369601 ) on Wednesday January 09, 2013 @11:35AM (#42533279)

          All I want is people who can write an actual letter that is sufficiently intelligible to serve a simple purpose.

          Dear mom,
          We're out of milk.

          for(x=0; x!=100; x++)
          if(cell(x,1) == 5)
          cell(x,2).value = "good";


          What? Do you think programming or writing are some sort of high art that the plebs can't comprehend? Doesn't my letter serve a simple purpose? Doesn't it convey a thought? Doesn't the for loop perform a function?
          No, most people will never be professional programmers, or write "moderately complex" software. Because they don't have to.

          but how many of those can _really_ write a letter if they have to?

          No true scotsman fallacy. Get off your high horse.

          I expect less than half of those who have learned to write are actually able to do so.

          That's because you have an EXTREMELY jaded and cynical outlook on humanity. Go talk to some people.

          • if(milk.quantity == 0) {
            pick up purse
            put on coat
            put purse in coat pocket
            open front door
            go out of front door
            close front door
            take purse out of coat pocket
            take key out of purse
            lock front door
            put key in purse
            put purse in coat pocket
            walk to car
            take purse out of coat pocket
            take key out of purse
            unlock car door
            open car door ...
            put milk in fridge
            close fridge door
            }

            Dear comput

      • Re: (Score:3, Insightful)

        by gweihir ( 88907 )

        I am not confusing them. A reasonable programmer needs at least some software engineering skills. Otherwise you get people that write unreadable code, use the wrong algorithms that break systems because they just do not understand what goes in and the characteristics are, etc. Sure, once you have a detailed flow-diagram, putting that into code is just a mechanical exercise. But who do you think fills in the details here? A software engineer? Unlikely, far too expensive and then they could fire the programme

        • You're talking about professional programmers, in which case I agree that you don't become one by using a few simple tools and doing a few courses.

          A programmer is someone who writes computer programs; any stricter definition is just elitism. If you can come up with (not just copy)
          10 print "hello world"
          20 goto 10

          , you're a programmer, even though you're just a beginner. So is the guy with the smarts to write a few VBA snippets to tart up his Excel spreadsheet. These are just hobbyists or guys writin
    • by TheCarp ( 96830 )

      Show me an artist and I will show you someone who wasn't afraid to make a few smears.

      I don't see how any of this negates the argument that making the learning curve for getting started a little more shallow for those who need that could help more people learn to program. Its a useful skill, and frankly, I think a good one to learn. Teaches strong logical reasoning skills, is that not a good thing?

      What is wrong with smoothing barriers to entry?

    • What's wrong with more "really bad" software being written? What's wrong with "everybody and their grandmother" thinking they can make software?

      I *want* more people to have simple to use tools. I *want* more people to believe that they can write software. Why?

      It exposes more people to software development (and maybe more people get passionate about it and become good). Most people I've run across who are REALLY good at this whole software development thing got their start fucking around with simple, accessi

  • Pure Data (Score:5, Informative)

    by pedestrian crossing ( 802349 ) on Wednesday January 09, 2013 @05:39AM (#42530087) Homepage Journal
    I just started experimenting Pure Data [puredata.info], 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.
    • by mwvdlee ( 775178 )

      Although it can be very complex when you dig down into it.

      This is the problem with trying to simplify ("abstract") anything; you make the simple things easier and the slightly-less-than-simple things nearly impossible.

      • Re:Pure Data (Score:4, Informative)

        by gweihir ( 88907 ) on Wednesday January 09, 2013 @09:21AM (#42531489)

        Although it can be very complex when you dig down into it.

        This is the problem with trying to simplify ("abstract") anything; you make the simple things easier and the slightly-less-than-simple things nearly impossible.

        Something Microsoft also excels at in their products. As soon as you leave the narrow area of what they expected you to do, configuring Windows gets more cryptic than Linux kernel programming. You should always make things as simple as possible, but not more than that. This is one example of where the limit was crossed. With that, people are tricked into thinking they understand the problem, when in reality they do not. This prevents learning, realistic self-assessment and will produce any amount of fundamentally broken software.

    • by tulcod ( 1056476 )

      I think this fails for exactly the reason pointed out in the exert: it only hides the actual code between point and click programming.

  • by Shinmera ( 2514940 ) on Wednesday January 09, 2013 @05:52AM (#42530161) Homepage

    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.

    • by HungryHobo ( 1314109 ) on Wednesday January 09, 2013 @06:31AM (#42530299)

      bullshit. some don't admit it but there's a hurdle to start programming, knowing where to start.

      it can be as simple as sitting down with someone for 30 minutes, showing them how to write a bash script, save it, make it executable and run it. 10 more minutes for the idea of looping and a few more giving them a list of good sites to read when they're trying to figure something out.

      6 months later I get an email from the guy asking esoteric questions about specific frameworks and has become his offices translator for when the needed to ask for software.

      You are everything that's shitty about the industry. I'm glad I don't have to work with anyone as toxic as you.

      • It doesn't really take knowing where to start. I didn't know either when I began, I just picked a book that I found interesting and started reading it, following the examples in the book, etc.

        Sadly I've made the opposite experience. I've tried to get a couple of people into programming, but it just didn't work out, even giving them a very simple start wasn't helping their interest. Sure, there's definitely people around there that are just waiting to be shown something until they can flourish, but I'm quite

        • of course giving people easier to use tools gets more people in.

          How many top notch graphics designers and UI designers work in C or assembly?

          in theory they could but they'd waste thousands of hours by using tools which are pointlessly hard to use for their task.

          how many of them would have bothered even getting into the field if they had to spend a decade learning from the command line up?

          take one look at stats programming tools like R.

          the language is terrible and the tool unstable but it's insanely easy to

          • by Jmc23 ( 2353706 )
            Which is a little wierd when you think about it. If statisticians know so much about stats why'd they focus on a stats package that can give you incorrect results? Even the inventor says it was a mistake, but he couldn't grok Lisp at the time, so came up with R.
    • by jbolden ( 176878 )

      It will create people with basic computer literacy. A good deal of education is about creating people with exposure to a topic but far short of professional knowledge.

    • by Hentes ( 2461350 )

      I don't think he means more professional programmers, but more people who understand programming. Just like it's great that every person nowadays learns to read. They don't all become linguists, but having that skill is an advantage regardless. I just don't think that people have a chance to understand programming without understanding the mindset of math first, so in my opinion if you want to teach people to code you should first teach them logical thinking.
      But while all people could benefit from learning

    • by sco08y ( 615665 )

      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.

      The term "literacy" suggests that it's about developing a basic understanding, as opposed to expertise. Using written language as the example, we've got a 98% literacy rate, but fewer than 1% are qualified to be professional writers.

    • by gweihir ( 88907 )

      Well said. The more I know and the more skills I acquire, the more things I find that I know I do not have the required talent to do. Not the drive, motivation, time, but the raw basic foundation. One of the most important things in your own intellectual development is identifying your limits and most often they do not come in the form of scale, but of area. For example, even highly intelligent people cannot understand all areas of Mathematics. Even mathematicians on PhD level cannot. And it is not a matter

    • 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.

      I completely disagree. It doesn't make any sense to require that you start using the tools which the professionals use.

      If you wanted to become even an amateur race car driver, you don't learn to drive in an Ariel Atom. A second hand Honda Civic is probably a good start. You don't even need to start with a manual car, since the important things when starting off are learning th

  • 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.

  • Pointless article (Score:5, Insightful)

    by gigaherz ( 2653757 ) on Wednesday January 09, 2013 @06:01AM (#42530193)

    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.

  • 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" op

  • 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 mo

  • Programming (Score:5, Interesting)

    by ledow ( 319597 ) on Wednesday January 09, 2013 @06:56AM (#42530417) Homepage

    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

  • by Mister Liberty ( 769145 ) on Wednesday January 09, 2013 @06:59AM (#42530429)

    I taught myself programming. Nerds will be.
    The rest just enjoy yourselves with twitter.

  • It's not the tools (Score:3, Insightful)

    by Anonymous Coward on Wednesday January 09, 2013 @07:01AM (#42530437)

    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".

    • by narcc ( 412956 )

      This has been tried so many times before. The simple fact is that most people can't program.

      Only because they never learned how, not because they're incapable of writing computer programs!

      Most people don't see any benefit to learning how to program, and so they don't bother to learn. The absurd, unnecessary, barriers that aspiring learning face today is enough to hold back all but the most dedicated. How many people's lives have been made more difficult because we've locked-out the home user with unnecessarily complex tools?

      We're a long way from the old days, where all you needed to get started

    • by slim ( 1652 ) <{john} {at} {hartnup.net}> on Wednesday January 09, 2013 @11:08AM (#42532907) Homepage

      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".

      When I was young I had a little Casio keyboard with auto-accompaniment. It allowed me to experiment with chord progressions using major, minor, major 7th and minor 7th chords, before learning to play those chords manually. It's not a bad thing. 30 years later, I'm able to transcribe chord progressions almost without thinking - something a number of my musical friends find astonishing.

      Perhaps I'd have developed that skill without the dumbed down learning tool - but it definitely lowered the barriers to entry.

  • Well, BASIC still exists. There is nothing preventing anyone from using it.
  • ... of which is what programing and language is all about?

    http://abstractionphysics.net/pmwiki/index.php [abstractionphysics.net]

    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,

  • 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 languag

  • 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 g
  • Quite a few languages for education exist that do have easy setup and IDEs. http://en.wikipedia.org/wiki/List_of_educational_programming_languages [wikipedia.org]

    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.

  • 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 ge
  • 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 easie

  • I think he just described pythonanywhere?

    https://www.pythonanywhere.com/ [pythonanywhere.com]

    It's essentially "google docs for python"

  • 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?

  • https://en.wikipedia.org/wiki/Elisp [wikipedia.org]

    No setup, you can use it right away.

  • 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);
    weekday[0]="Sunday";
    weekday[1]="Monday";
    weekday[2]="Tuesday";
    weekday[3]="W

  • by erroneus ( 253617 ) on Wednesday January 09, 2013 @08:59AM (#42531277) Homepage

    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 y

  • 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 unt
  • by gweihir ( 88907 ) on Wednesday January 09, 2013 @09:44AM (#42531753)

    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 [codinghorror.com]
    - http://www.codinghorror.com/blog/2010/02/the-nonprogramming-programmer.html [codinghorror.com]

    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.

  • by dkleinsc ( 563838 ) on Wednesday January 09, 2013 @10:14AM (#42532097) Homepage

    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.

An adequate bootstrap is a contradiction in terms.

Working...