Citizen Programmers

  • P Jones (12/11/2014)[hr

    ...

    They wouldn't fully re-wire their home themselves but would call in a professional and they should do the same for business software.

    I can agree with some of what you wrote, but there's a difference between re-wiring your home and replacing a switch or socket. Certainly many homeowners can do smaller tasks, some larger ones.

    That's similar here. People can do some programming and certainly improve things. The first response in this thread has some good thoughts.

  • Iwas Bornready (12/11/2014)


    Sounds like a lot of whining to me. Our country is full of small businesses who have special needs that are not met by off-the-shelf software. If a non-professional programmer can meet the need, even done poorly, in a manner the company can afford (using the non-professional talents of an existing employee) then the company is better for it. Would the company be better off if it had a professional written piece of software? Probably. But I've seen many a professional company come in and fail at creating what a business really needs because they don't understand the business. So having a professional programmer write the software is no sure pathway to success. Let the non-professionals write code. It solves an immediate business need and perhaps sparks something in the non-professional to become a professional. We were all non-professionals at some point in our lives.

    An this business of IT staff not wanting to work on non-professional written programs, doesn't sound much like a professional to me. If you can't look at code and figure out what's wrong then perhaps you are not such a good professional programmer. It just highlights your own lack of talent and what I believe to be even worse, your own lack of interest in helping the business that pays your salary.

    Well said

  • Steve Jones - SSC Editor (12/11/2014)


    P Jones (12/11/2014)[hr

    ...

    They wouldn't fully re-wire their home themselves but would call in a professional and they should do the same for business software.

    I can agree with some of what you wrote, but there's a difference between re-wiring your home and replacing a switch or socket. Certainly many homeowners can do smaller tasks, some larger ones...

    Agreed, but I would consider Crystal Reports or Excel macros the 'switch and socket' job. I certainly would encourabe people to do these.

    ...

    -- FORTRAN manual for Xerox Computers --

  • Interesting editorial, as always!

    This debate / tension / pendulum swing is as old as programming itself; consider:

    - Fortran (FORmula TRANslator), which was intended to enable non-programmers use a computer to do calculations, rather than having them write machine code

    - COBOL (COmmon Business Oriented Language), intended to enable business analysts to code up software to run a business

    - SQL (Standard Query Language), intended to let business users easily query a data storage platform using a plain-English-like language

    - PERL (whatever it stands for on any given day) and Python, both intended to enable rapid development of gratuitous hacks that become systems for someone else to maintain [kidding, sorry!]

    - node.js, intended to enable web UI designers to build their own billion-dollar startup without requiring any of those greedy software engineer types

    (Obviously a list cherry-picked at random!)

    I think the original citizen-VB developers migrated mostly to Excel, both to larger sheets / workbooks (enabled by limit increases and faster formula processing), and to VBA macros.

    Personally, I think all is well with the world, with "citizen programmers" proving a need / demand and building out a spec in proof of concept form, and professional developers eventually bringing the most valuable / profitable of these to scale and efficiency....

    -f


    The End.

  • One thing that occurs to me after hitting 'Post' is that the most successful of these citizen-programmer oriented language systems have very 'messy' foundations, while the languages which have strict, clean, consistent, 'formal'-ish foundations seem to be less well received as citizen programmer tools (with an instant's worth of thought, here).

    As in, consider SQL: it's fantastically consistent, with a very solid theoretical foundation, but citizen-programmers generally stay away from it - even though it was really intended for them!

    Java and .NET languages: very clean foundations, and the exclusive domain of professional developers.

    And Python: solid foundations, and while it's used by scientists and engineers, the actual users that I know are really software developers first and foremost; there are few 'casual' users of Python.

    On the other end of the spectrum, we have Perl (enough said), and original VB / VBA, and node.js: all with (dare I say) 'messy' foundations, and all favorites for casual use.

    So my question: is this mere coincidence, or is there something more here? Or am I guilty of bias in my selection list? Or am I missing the solid formal foundations of the citizen programmer language platforms of choice?

    ?

    -frank


    The End.

  • Sir Slicendice. Do you have any empirical data to support your claims? Or are you relying on anecdotal 'evidence'? Or.. are you simply defining the programmer type by their language of preference because of your own personal bias?

    The citizen programmer is motivated by the need to get a job done quickly, and I suspect (as in I don't actually know for a fact) that they gravitate towards the languages that they can learn and therefore employ quickly.

    He or she is not interested in code re-use (the dogma of the object oriented programmer) because citizen programmers don't work in heirarchical teams. If they want to re-use code from a previous project they just cut and paste it.

    None of the other 'features' of Java et al are of much use to these heroes of coding either.

    Polymorphism? Overriding? Constructors? Just great ways of misleading the uninitiated who try to read your code. Why else would you need style conventions other than to indicate what kind of data type you are using?

    No. What we need is less obstacles to code writing. And less code snobbery. Let the compiler sort things out. Don't forget, people, the guys who write operating systems and the assembler parts of an RDBMS look down on mere application programmers. 🙂

  • Power Users have been writing code for as long as there has been code. The first IT people were not trained IT people but engineers and mathematicians who created IT. When I graduated from college there was no degree in IT at all in the University I attended, and that University was only 30 miles from where Microsoft is today.

    One of the first languages I learned was FORTRAN, which stood for Formula Translation. The language was built for mathematicians to write algorithms to prove or disprove their theories, as well as to research other areas of higher math. The people who used it were power users who were citizen programmers.

    RPG was developed for a non-programmer to be able to create detailed reports without writing a lot of complex code. In addition, it produced so may reports for citizen programmers it was pathetic. Then throw in DBase, RBase, Pascal, Excel Macros, VBA and you have a generation or two of programmers who are not "professional programmers" but are professionals who program because they had to or have to get what they need.

    This will not stop, as long as there is the perception of unlimited need in conflict with limited resources there will be someone standing to fill the gap, and write their own.

    Right or wrong, it is and will continue to happen.

    M.

    Not all gray hairs are Dinosaurs!

  • Sir Slicendice (12/11/2014)


    ...

    So my question: is this mere coincidence, or is there something more here? Or am I guilty of bias in my selection list? Or am I missing the solid formal foundations of the citizen programmer language platforms of choice?

    ?

    -frank

    No I think you are correct. And seriously I'm not an elitist. But in software (as in carpentry, auto body repair etc*), the casual user primarily wants to get the job done. But, like in those other fields, the experienced practitioner is far more aware of traps. To the beginner, GOTOs are fine, and who needs data typing, modular construction, normalization, or error handling? I know that because I WAS a beginner once. There's nothing wrong with that. Gradually I learned to appreciate the importance of doing the job right. But that takes a lot of learning time, and experience. Time that an accountant, or sales manager, or whatever could much better spend doing what they do well (and were hired for). And just like the shade tree body repair tech, it takes a long time to create a job that is truly professional quality.

    Additionally, in the corporate world, security is a serious threat. Even the products of professional developers get subverted because attackers are so creative. Looking at the recent events, Sony, Target, Home Depot, EVEN the White House, where experienced people were outmaneuvered by hackers, do you really want homebrew code?

    [* I know all too well about those limitations because of my own home carpentry and auto restoration projects]

    ...

    -- FORTRAN manual for Xerox Computers --

  • Sir Slicendice (12/11/2014)


    One thing that occurs to me after hitting 'Post' is that the most successful of these citizen-programmer oriented language systems have very 'messy' foundations, while the languages which have strict, clean, consistent, 'formal'-ish foundations seem to be less well received as citizen programmer tools (with an instant's worth of thought, here).

    As in, consider SQL: it's fantastically consistent, with a very solid theoretical foundation, but citizen-programmers generally stay away from it - even though it was really intended for them!

    Java and .NET languages: very clean foundations, and the exclusive domain of professional developers.

    And Python: solid foundations, and while it's used by scientists and engineers, the actual users that I know are really software developers first and foremost; there are few 'casual' users of Python.

    On the other end of the spectrum, we have Perl (enough said), and original VB / VBA, and node.js: all with (dare I say) 'messy' foundations, and all favorites for casual use.

    So my question: is this mere coincidence, or is there something more here? Or am I guilty of bias in my selection list? Or am I missing the solid formal foundations of the citizen programmer language platforms of choice?

    ?

    -frank

    Not a bad analysis. I do think plenty of people work with simple SQL, but they struggle when they get to more complex aggregates, windows, islands, running totals, etc.

    Certainly I think Python, Perl, VBScript, the scripting stuff does get used by people if they're exposed to it. It's easy to get started, but certainly hard to master.

  • There's nothing wrong with doing the job right. But when the tools become too complicated to grasp and use intuitively, and to learn progressively without having to learn a series of complicated and sometimes confusing rules, its time for a re-think. The tools of the carpenter have changed very little over the centuries, but the tools of the programmer bear little resemblance to those of a decade or two ago. Few programmers would open a text editor to write their Java or .Net app.

    I'm not decrying the need for structure and experience in building an enterprise solution. But the frustration of the accountant and department manager who can't get access to the information they need to perform their jobs is very real, and it is this that is driving the emergence of the citizen programmer. They don't have months to wait until the IT department is ready to handle their request. Their needs are often simple and basic, and they turn to tools that are simple and basic. The user base is often less than a dozen persons, the data never leaves their network and they are often only interested in a once off that has a life span of a year or two at best. Security, scalability and maintainablilty are simply not relevant. A decent range of data types was relevant when memory was measured in kilobytes, but for a citizen style application? Not worth bothering about.

    Besides, how many enterprise solutions actually got built last year? Better tools should also mean simpler tools. Let the machine handle the complexity.

  • stephen.kemp (12/11/2014)


    Sir Slicendice. Do you have any empirical data to support your claims? Or are you relying on anecdotal 'evidence'? Or.. are you simply defining the programmer type by their language of preference because of your own personal bias?

    No empirical data here; totally based on anecdotal evidence - actually more like heavily biased personal observation of a very small sample size, and fully subject to any and all arrogant elitist tendencies that I have....

    The citizen programmer is motivated by the need to get a job done quickly, and I suspect (as in I don't actually know for a fact) that they gravitate towards the languages that they can learn and therefore employ quickly.

    He or she is not interested in code re-use (the dogma of the object oriented programmer) because citizen programmers don't work in heirarchical teams. If they want to re-use code from a previous project they just cut and paste it.

    None of the other 'features' of Java et al are of much use to these heroes of coding either.

    Polymorphism? Overriding? Constructors? Just great ways of misleading the uninitiated who try to read your code. Why else would you need style conventions other than to indicate what kind of data type you are using?

    No. What we need is less obstacles to code writing. And less code snobbery. Let the compiler sort things out. Don't forget, people, the guys who write operating systems and the assembler parts of an RDBMS look down on mere application programmers. 🙂

    Well, yeah, I agree - and I really like jay-h's carpentry and auto repair analogies (being similarly inclined, myself) - but here's the thing: to ME, I find SQL far, far easier for joins than say VLOOKUP in Excel, but most all users are the other way around, e.g. (Again, no empirical studies, no double blind testing, no control groups, etc.) The simple consistency of the system being closed under all operations (everything produces a table) and the clarity of join behavior makes it easy to remember - and I thought it was easy to learn. OTOH, I also have to do a lot of VLOOKUPs, and I can never remember - what's the best way to do multi-column LOOKUPs; does VLOOKUP match exact, or less than, or is that another LOOKUP fn, etc etc. But in real-world situations with users who had free safe access to a production MySQL db, they preferred to extract to Excel 100% of the time. Every time. And yes they complained about how that was a PITA etc, but still preferred it. (Final solution was Tableau, but I digress....)

    Ditto for other languages, etc, but this is too long as is so I will end here - for the TLDR; crowd: I'm surprised that citizen-programmers generally seem to prefer programming environments with 'messy' foundational semantics, while professional (elitist!) programmers such as myself seem to invariably choose environments with well-founded footings, as to me, these footings and consistency make the environments easier to learn and remember.

    -frank, a completely elitist professional developer in the data analysis industry (finance and advertising), who is at home in the Ivory towers of OCaml, Haskell, Lisp, and Prolog but also slums with the citizen-programmers doing Excel, Perl, Python, now and then.... [<- poor attempt at humor there]


    The End.

  • As professionals I believe we should recognize citizen programmers and offer to mentor them in proper techniques. I have done this several times with good results. One thing you find out early in mentoring others is whether they really have an interest and a knack for the development process and techniques.

    Those that don't really want to be developers or have a knack for it just want to throw together an Access database and some VBA to get something done. Once they mess that up and get stuck, they want me to fix it. I generally say no, especially after they turned down mentoring.

    We have a responsibilty to help those that want the help and want to learn proper database design and proper techniques.

    Tom

  • I agree the issue of citizen programmers is not going away - there are needs that are not being met, so they will pursue solutions that allow them to do their jobs.

    It's also a reality that eventually, IT will be asked to support these citizen-created programs.

    To my mind, we might do well to consider a "split" solution - put up a team of quick-acting developers that could assist the citizen programmers with proper structure while creating what is really a PROTOTYPE system or application. Let the citizens / users work with it for three to six months, and then put it through a more "formal" review, and ask:

    - is it fulfilling the need they have

    - is it producing CORRECT information (always a concern in the business world)

    - does it meet basic criteria for efficiency, security, maintainability, etc

    - is it still cost effective

    - (any other questions your business model might consider important)

    A structure like that might provide more business agility while providing a less painful path to full support by IT. And might also be cost effective to achieve, if you look at the overall business need and cost of software.

    I'd love to hear if anyone has worked in a model like this. I've twice worked as an "embedded programmer" and I can tell you the business staff really loves having someone who understands the details of their work. In one case we had MS-Access based applications that were later merged and converted to SQL Server and a web app, and the data conversion was very straightforward since the rules of normalization had been applied during the initial construction. Writing the new web pages took up most of the project time.

    It might not be cost effective to have a programmer in every department, but then again, it might - especially if you factor in the impact they can have on the knowledge level of citizen programmers (via training in "better practices"). And the "speed to market" potential they might bring.

    Any thought on this as a possible improvement to our current situation? 'Cause yeah, I get to remediate those citizen-created MS-Access databases and Excel spreadsheets too... :unsure:


    Here there be dragons...,

    Steph Brown

  • In the past 246 days, students have made 2,261,601 apps and pictures by writing their own computer programs. Click on the pictures and screenshots to see each program in action.

    http://learn.code.org/gallery

    "Do not seek to follow in the footsteps of the wise. Instead, seek what they sought." - Matsuo Basho

  • This is an interesting article, Steve. I spent a lot of time in the late 90's writing VB code. In fact some of that is still running today. But I was a professional programmer doing that. And we didn't have any citizen programmers at my last job; none of our users could write any application, even in VBA.

    However, the job I had before that, working for the State of New Mexico, we did have a citizen programmer. It was a state lab chartered to test soil, water and biological samples for contaminates. This particular citizen programmer was the head of one of the chemistry divisions that tested biological samples. He was a wizard at MS Excel, and wrote a ton of Excel macros and VBA scripts that were used both for collecting data and generating reports. In fact he was better than everyone else in the IT department at doing that, which meant that we couldn't support what he wrote. So he had to write and maintain all of it; taking him away from doing his real job of being the head of the division. And of course none of this data was in a database of any sort; they were all locked up in hundreds of Excel spreadsheets throughout the Labs. WOW, thinking back at it I now realize just what a mess it was! I mean, can you imagine the nightmare that guy must of had to update all of those MS Excel spreadsheets if something critical needed to be propagated to them! But on the other hand this situation came about because of a legitimate business need. We in the IT department were trying to get a really old database that was no longer supported (the vendor went out of business) into what at the time was the state-of-the-air database (Ingres, in case anyone remembers that). We weren't trained and were doing the best we could trying to learn a new platform. But these reports needed to be done. They couldn't wait months for us to get the database up and running, and various applications written to work against it. (Each part of the Lab needed it's own interface because lots of data wasn't the same between the different parts of the Lab.) So I can't blame the guy for doing what he had to do. It must have been a pain for him to maintain, but it got the job done. I think that ultimately you're going to have situations like this where IT (and by IT I mean both IT and development) haven't the resources to get it all done, so citizen programmers have got to do something for themselves.

    As an aside, I know Dan Appleman. Not personally, but through his books and so on. Again, back in the day I was using VB and Appleman wrote books and articles in VB magazines that were important in learning how to use VB 4, 5 and 6. He was one of those who enabled the citizen programmer in the 90's to do what he/she did, because of his books and articles. I've got a lot or respect for him.

    Rod

Viewing 15 posts - 16 through 30 (of 40 total)

You must be logged in to reply to this topic. Login to reply