Saturday, July 18, 2009

How To Teach Software Development: Why Good Developers Should Care - Part One

How To Teach Software Development
  1. Introduction
  2. Developers
    Quality Control
    Motivation
    Execution
  3. Businesses
  4. Students
  5. Schools

Doctors and lawyers in the United States have the American Medical Association and the American Bar Association, respectively, and surely have analog organizations in other countries. As representatives of their professions, they work collectively with their colleagues at a reasonable and useful goal: quality control. It is in the interest of doctors that their med students are not idiots. It is in the interest of lawyers that their opponents are not (more) unethical. There are other, perhaps less admirable uses of these controls (too many doctors would lower all their salaries).

There is no such quality control in our industry. We have individuals at the lowest end of the ability spectrum and at the highest peaks of skill, and, we have the teaches of many years of expensive higher educations on some of our shoulders and only the passion of self-teaching for others. Neither dimension seems an accurate predictor of the other, and this should raise an automatic red flag. What is our education doing for us, if it doesn't let anyone trust your ability without first hand experience, evidence, and other proof you could give them as easily without that education?

I'll own up to my fair share of complaining about the problem in exchange for anyone to agree with me to do something about it. This isn't just an annoying situation that crops up in forums from time to time or can explain why a silly "newbie" asked a silly question. No, this is something costing the economy billions (trillions?), making all of our jobs more difficult, and actually killing people in the rarest situations. We aren't just being elitist snobs when we complain about someone taking a route seemingly inadequate compared to what we think we can do. Further, it shouldn't be considered bad to tell them so. If any of us have any difficulty being told we could improve, we don't have the dignity in our job that it deserves.

Of course, this might seem pointless. Do you think I'm just venting? If so, you may either believe there isn't anything we can do to improve the situation or that there isn't any point in improving it. Either way, my aim is to convince you.

Next: How To Teach Software Development: Developer Motivation
  1. Introduction
  2. Developers
    Quality Control
    Motivation
    Execution
  3. Businesses
  4. Students
  5. Schools

6 comments:

Sparks said...

There is no such quality control in our industry.

Except for the IEEE CSDA and CSDP programs and the Chartered Engineer (C.Eng) accreditation and the various vendor-specific certifications (though I'll grant you, some of those are out-and-out stupid), and of course the usual internationally accredited computer engineering and computer science university degree courses.

Nonetheless, yes, a program which promotes CPD such as the C.Eng program, would be a good thing. That's why they already exist.

Calvin Spealman said...

I don't pretend organizations don't exist. I'm a card holder myself in some, but that isn't what I said. I said "there is no such quality control" not no such organization. We don't enforce a quality of the members of our industry or the education they get.

Look at a resume from anyone who took an 18 month "become an extreme video game developer!!!!" program and you'll see what I mean.

It would be great if any of these existing groups were more active and direct in this area, but overall we need to take it into our own hands to influence the directions we all need to benefit from.

Still, I'll take your correction into edits. Thank you!

Sparks said...

But we can't set minimum standards for anyone who wants to get into the industry like that. Nobody can - take your examples. The AMA can't stop homeopathy or chiropractors or vaccine critics. They can say that they're daft, or not as useful as claimed, or outright vindictive liars, but they don't have the legal power to stop them unless those people try to practise medicine in a hospital or similar setting, and even there, the level of quality control is minimal from the AMA and mostly is imposed by the hospital itself looking at references and qualifications.

Similarly, the Bar Association can stop a lawyer from practising law in court; but can't do anything about one giving legal advice outside of court or running a practise or acting as a paralegal. Again, minimal quality control, only one specific arena is controlled, and caveat emptor rules the day.

For our industry, and for the wider engineering industry, the same is true. We do have proper, recognised training and accreditation programs, and there are regulations in some countries as to who can use terms like "engineer", but for the main part the onus falls on the company doing the hiring to hire qualified and accredited professionals instead of someone who speed-read a Sam's book and skipped the exercises. And, should they decide to cut corners and hire someone like that to do the software that controls your anti-lock braking system, then they're liable for that negligence.

So maybe what we need to do is start sueing more companies who deliver broken software because of bad hires...

Calvin Spealman said...

I agree.

I'm not advocating anything as enforced as what the AMA or the ABA does, nor saying they have perfect quality control levels. I am saying they are good things to look at when discussing improving the quality of one's own industry. This is something to work towards and all examples are useful, even if they don't apply directly, because we take care to know what to take from them and what to leave.

I didn't originally intend this writing to stretch out like it seems to be doing, so go ahead and read the next post, because I think I'll clarify some of that. You're giving me a lot to think about with how I've paced this, because you're responding to things before I get to the same points.

Tennessee Leeuwenburg said...

One challenge is that almost any "big" solution -- such as a new organisation, certification or improvement to education across the board -- will be met not merely with skepticism but active resistance. The Python, and indeed IT community, isn't exactly thrilled by anything which is deemed 'orthodox', or attempting to exert power. For whatever reason, respect and credit (by developers, as opposed to by non-developer employers anyway) is given to people who have put their money where their mouth is, and not otherwise. I don't know if you can change culture like that. I think the challenge is to work with that culture -- to harness the exactitude demanded by the community of those who make code or opinions public.

The communities of practise are also very isolated, generally. There is not as much cross-pollenation between, say, open-source, systems development, scientific programming, web programming, applications programming etc as there (IMO) should be.

The major exception to this is conferences. If I were to come up with 'the answer', it would be to run a body to publish statistics on who is publishing the best open-source code, how much, who is presenting at what conferences, validating/reviewing conference presentations etc. However I think that anyone who really is 'in' the community would be best-served by going to conferences and being a part of everything. Making contacts and getting involved with things is the best way as an individual to make opportunities for yourself, and I'd suggest that any employers get involved in supporting this kind of grassroots effort also.

It doesn't take a lot of money to support conference activities and local user groups, and it would greatly assist with recruitment too.

I think. :)

Saravanan said...

Computers are now invariably used in every area of business. It is being seen as a symbol of pride and if activities are automated it will save the much needed time and energy. Your article highlighted the importance of developing Software for minimizing Users intervention. We also understood the various issues associated with software development like portability, reliability, response time etc.

I write here about programming, how to program better, things I think are neat and are related to programming. I might write other things at my personal website.

I am happily employed by the excellent Caktus Group, located in beautiful and friendly Carrboro, NC, where I work with Python, Django, and Javascript.

Blog Archive