Slashdot Mirror


After the Gold Rush : Creating a True Profession of Software Engineering

Thanks to Jason Bennett for sending us a review of author Steve McConnell's lastest book After the Gold Rush. The book looks at the maturation of software development and what that means for us. Click below to read more. After the Gold Rush : Creating a True Profession of Software En author Steve McConnell pages 182 publisher Microsoft Press, 11/1999 rating 9/10 reviewer Jason Bennett ISBN 0735608776 summary One impression of the maturation of software development

Background

I've always been amazed that certain fields of endeavor exist in which many people prefer rank amateurs to trained professionals. I don't know many people who would choose their neighbor's kid to perform surgery, or hire a journalist to build a bridge, yet every day software development shops hire people whose only training is that they have read some book on Visual Basic or C++ or Perl, and put them to work on major projects. In fact, in the software development business, experience can sometimes be a liability (see the debate over immigrant programmers and age discrimination). Don't worry, you won't have to apply for a license to write code, and no one is going to confiscate your keyboard if you design your own web page. Accountability, however, is another story....

What's the book about? Steve McConnell, author of Code Complete , Software Project Survival Guide , and many other excellent books on software engineering, has returned. For those of you who might not be familiar with him, Steve is President and Chief Software Engineer of Construx Software, a software consulting firm based outside of Seattle. He's also the Editor in Chief of IEEE Software, and is generally regarded as one of today's best authorities on how to do software the right way. In After the Gold Rush, Steve gives his view of where the software world should go from here.

Currently, people don't know how to build software. Or, to be more accurate, there are good techniques out there to build software, but most people ignore them for one or more reasons, none of which hold up under close scrutiny. In addition, software development depends on death-march-style schedules, whereby programmers wreck themselves trying to get the software out the door at the appointed time. One major problem is that the developers are not trained in writing software in the first place. They are either trained in computer science, or some totally unrelated field. To compound this problem, very few if any continue their education in such areas as professional reading or training.

There is hope, however! Now that software development is moving out of its "gold rush" period, where the firstest gets the mostest, we can begin to develop software engineering as a profession. This means training people in engineering instead of science, and defining what it means to be a software engineer. Unfortunately, we have a lot of work to do both on the level of education, and in the mindset of today's software developers.

The third and final part of ATGR dwells on the future, especially as it relates to what these developments will mean for software developers of today. I'll spare you some of the suspense, and tell you that you won't be forced to be certified. Does anyone really care if your desktop clock was written by a true engineer? On the other hand, you bet I care that my air traffic control software and my medical scanning software and my car's control software were signed off on by someone who knows what he's doing. Licensing will be in software engineering what it is in other engineering fields: required in some areas, meaningless in others. In the end, however, software will be better for it.

What's Good?

Personally, I greatly enjoyed this book, mostly because it says what I've felt for some time now. The development of true software engineering will be akin to the development of true medicine. We will be able to move ourselves from the Age of Leeches to a more enlightened age where quality and process matter. McConnell makes a compelling case for why events will transpire in this way, and what the benefits are. No one thinks that these developments will be some sort of panacea or silver bullet, but when true software engineers, complete with a code of ethics and a professional organization, are responsible for developing software, there will exist an undercurrent of ownership and responsibility that currently does not exist.

What's Bad?

There's not much I didn't like about this book. If you develop software for a living, read this book. It describes where your industry is going in the next twenty years.

So What's In It For Me?

Maybe a lot, maybe nothing. If you develop your software purely as a hobby, these events won't directly effect you much. You will never need a license just to write code. If, however, you belong to that cadre of programmers that likes to think of themselves as "software engineers," or who would like to think of themselves as such, read this. You won't be forced to take a test tomorrow, but software development will never be the same.

Pick this up book up at ThinkGeek.

  • Table of Contents
  • Acknowledgments
  • Introduction
    1. The Tar Pit
      1. Software Dinosaurs
      2. Fool's Gold
      3. Orphans Preferred
      4. Software Engineering Is Not Computer Science
    2. Prospecting
      1. After the Gold Rush
      2. Engineering a Profession
      3. Ptolemaic Reasoning
      4. Body of Knowledge
      5. Novum Organum
    3. Through the Pillars
      1. Stinking Badges
      2. Architects and Carpenters
      3. Hard Knocks
      4. The Professional's Code
      5. Alchemy
  • Epilogue
  • Notes
  • Index

152 comments

  1. Humdee dum dee dah by Foogle · · Score: 1
    Good review. The worst problem I see today with the software-creation process is design. Programmers design software (I design software, and I am a programmer). However, the people who are writing code for software should not be allowed to design that same software. It a conflict in being objective about the interface to your own code.

    As for the "Gold Rush" - I don't see why anything is changing (maybe I should read the book). It's not like software is no longer a competitive industry. Hardly - it seems more competitive now than ever, and the "Firstest" is still sometimes the preffered, if not "Bestest"

    -----------

    "You can't shake the Devil's hand and say you're only kidding."

    1. Re:Humdee dum dee dah by dennisp · · Score: 2

      "The worst problem I see today with the software-creation process is design. Programmers design software (I design software, and I am a programmer). However, the people who are writing code for software should not be allowed to design that same software"

      I don't know about that. However, I do get a lot of peer review and help along the way (as well as 1001 new client demands to sort out).

    2. Re:Humdee dum dee dah by Anonymous Coward · · Score: 0

      Uptight

    3. Re:Humdee dum dee dah by Foogle · · Score: 2
      Well sometimes it can't be helped. I work for a very small software company that simply can't afford to pay for people just to design software. But any larger software developers (this includes Open Source) should be splitting up the tasks.

      Interface design should be handled by a team separate from Programming. In this situation, the design is never built around code-logic, and therefore does not present the user with an interface based on the logic of the code. An interface should have logic of its own.

      This is not to say that a programmer can't handle design as well as coding (certainly it's been handled gracefully before), but just that as a good guideline they should not. Moreover, I'll stick to my original statement: The worst problem I see today with software is design.

      -----------

      "You can't shake the Devil's hand and say you're only kidding."

    4. Re:Humdee dum dee dah by jilles · · Score: 2

      It's an illusion to think that design and implementation can be separated. Software development is an iterative process rather than a linear process (req->des->impl->test->deploy). Separating design and implementation therefore is a bad idea because the design would get outdated rather quickly (and since time is money most companies wouldn't bother updating them).

      In the case of OSS you'd have complete anarchy where the design people would simply be ignored if the programming people would disagree.

      Rather I'm in favor of having an integrated approach such as in TogetherJ where design level changes are reflected in the code and vice versa. When working in a project you typically let the more experienced design people work on the designlevel while the programmers fill in the details. Since changes in design affect implementation and vice versa both coders and designers are forced to think about each others work. This leads to interesting things as a coder discovering design flaws and communicating with designers to solve the problem Similarly designers learn about implementation issues for their beautiful design since what they do directly affects the code.

      "The worst problem I see today with software is design."

      Well I think the problem really is lack of design. Often coders are ahead of the design team after a while. I.e. the design team is strugling to capture the current implementation rather than designing the next version. This leads to interesting stuff like "the source is the documentation".

      --

      Jilles
    5. Re:Humdee dum dee dah by Anonymous Coward · · Score: 0
      I disagree strongly with your first point. Allowing a designer to offload the programming onto someone else is a sure recipe for poor design. To put it another way: someone who doesn't program will not understand enough of the issues to produce a good design.

      The same is true of splitting development and support roles - the developer who doesn't support their own products will produce unsupportable products.

      High quality is achieved, not by the institution of bureaucratic and inefficient procedures (and certainly not be meaningless certifications) but by:

      i) Frequent and rigorous peer review.

      ii) Individual responsibility.

      This does imply that you can't treat developers, not matter how well certified they are, as interchangeable 'head count', and expect a high quality.

      (Note that I haven't read the book, and I do agree with your second point!)

    6. Re:Humdee dum dee dah by Foogle · · Score: 2
      That's such an elitist view of design, but it's hardly uncommon. But let me reiterate. The person who does the design should not be ignorant of programming. They should have experience in the game; enough to know what is and is not possible to implement. But don't for a minute think that non-programmers cannot create decent interfaces. You're kidding yourself it you do.

      I know dozens of programmers (who are great coders by the way) who wouldn't know a good interface from a poke in the eye. And I'm not necessarily talking about aesthetics either. I'm talking about serious *interface* issues such as navigation and control. Being a programmer does not make someone a designer. The reverse is true as well, although it helps to intimately know who you are working with.


      -----------

      "You can't shake the Devil's hand and say you're only kidding."

    7. Re:Humdee dum dee dah by Salamander · · Score: 2

      >However, the people who are writing code for software should not be allowed to design that same software.

      I strongly disagree, for the same reasons others have. They've done a fine job explaining the problem(s) already, so I won't duplicate their efforts. Instead, I'd like to suggest what I think is a better solution than what you propose.

      Here are a couple of ideas that should warm the hearts of /. types: openness and shared ownership. Yes, even if the product is proprietary, these things work wonders. The problem you're worried about occurs not because the same person does both design and implementation, but because they're allowed to do either in a bubble, isolated from other opinions and views and influences. If both the design and the implementation are laid out for other people to see and comment on, and if those other people feel that they "own" any potential bugs in the code as much as the primary author, those potential bugs will be prevented from becoming real bugs. There's nothing worse than a programmer who never lets on what they're up to, and nothing better than a programmer who realizes that leading other people through the process is even better than excluding them.

      --
      Slashdot - News for Herds. Stuff that Splatters.
    8. Re:Humdee dum dee dah by Foogle · · Score: 2
      Yeah, I think at some point or another we have all been guilty of writing code that had no business being written because the application it was being written for had yet to be fully designed. Application development is not a "figure-it-out-as-you-go" process. Decent products require cafeful planning, design and documentation. Unfortunately most products ship without a decent amount of any of those things.

      -----------

      "You can't shake the Devil's hand and say you're only kidding."

    9. Re:Humdee dum dee dah by sql*kitten · · Score: 1
      Being a programmer does not make someone a designer.

      As a profession, one of our worst mistakes was to permit words like "design" and "creative" to be appropriated by graphic illustrators.

    10. Re:Humdee dum dee dah by Salamander · · Score: 3

      Lest anyone think that I'm saying the open-sourcers have "gotten it right" let me set the record straight. Closed source has its characteristic problems, some (but not all of which) can be addressed by looking to the open-source model. Open source also has its characteristic problems, which I'd say come down to lack of discipline.

      The first symptom of this is that open source tends to be all about programming, without anywhere near enough attention to design, testing, documenting, etc. As much as we bash MS for using their users as guinea pigs, open source tends to rely on users even more heavily in lieu of real testing. Yes, I know, at least open-source users have volunteered to be guinea pigs and haven't paid for the honor, but I think that's an inadequate excuse for developers shirking an important part of their role.

      The second symptom is lack of a means to control the jerks. I think the majority of open source folks favor cooperation, but a substantial number are more competitive than cooperative. They want to be top dog, or they don't want to be in the pack. When this attitude is recognized, they can be removed from a project by those that remain, but that recognition is often preceded by a lengthy period during which they're allowed to be obstinate and disruptive and generally counterproductive. When dealing with volunteers, it's harder to get people to shut up and do their assigned task, because there's no repercussions to them. They won't suffer for years from bad reviews or bad references, the fear of which is at some level a powerful motivating force in the commercial world not to be too much of a jerk.

      As I said at the top, each approach has its problems. The benefits of open source may well outweigh the problems I've described, but it's not a panacea.

      --
      Slashdot - News for Herds. Stuff that Splatters.
    11. Re:Humdee dum dee dah by dennisp · · Score: 2

      "But any larger software developers (this includes Open Source) should be splitting up the tasks."

      Splitting up tasks, yes; but I feel that almost everyone should have input (as in review) on the design process throughout the project. Design is never perfectly linear.

      "Interface design ..."

      Uhh, I'll let the UI guys do whatever they want. They can also have input on design - as there can be conflicts between team goals.

      "but just that as a good guideline they should not"

      You must not be working in a very good team environment. Yes, some guys should be doing conceptual design -- but in my experience, logical design can be worked out in teams and even change as requirements sometimes do as the project progresses.

    12. Re:Humdee dum dee dah by Rectal+Prolapse · · Score: 1

      You have some good points there. I agree, open source projects often put far too much emphasize on code over design (the early versions of GNOME and Enlightenment spring to mind).

      I think the only real solution to removing jerks from an open source projects is simply to never let them in. Rigorous peer review can help with this. For example, if someone wants to join an open source project, they have to cite work done on previous projects AND there should be a "dossier" on the person himself. This dossier would contain an assessment of the person's abilities, especially the ability to cooperate in a group project, written by members of other projects the programmer has worked on before.

      In essence, it is like a resume written by your peers.

      Of course, if the person has never worked on an open source project before (or does not have a dossier), a probation period could be in effect, similar to what many corporations practice when getting new hirees.

      Hugs and kisses to those who can improve on my little suggestion!

      Rectal Prolapse

    13. Re:Humdee dum dee dah by Dinosaur+Neil · · Score: 1
      Lack of design is definitely the problem; I've seen ostensible six-month projects that didn't have their requirements defined and signed off until month seven, and the project ran 18 months and 8 times the projected cost.

      When I first started working in this industry (mid 80s), I saw a cartoon that summed this up best; two guys are at a desk and the first one tells the second, "You start coding, I'll go find out what the user wants..."

      --
      "I'm a scientist! I don't think, I observe!" - Dr. Clayton Forrester
  2. Licensing is here in another form by UnknownSoldier · · Score: 1

    We already have a form of licensing, its called "education papers" aka a Degree.

    Sure software companies have lots of choices in the candidate pool, but the fastest way to the chaff from the wheat is to put a B.Sc requirement on the job. (Not that it always works, as there are some people I wonder how the heck they even PASSED with so little they know.)

    People also seem to keep forgetting that software engineer is relatively new, 25 years, compared to the other hard-core engineering disciplines. With every company developing their own programs from scratch, instead of being able to use off-the-shelf re-usable software components, is it no wonder the quality of software is so bad? Everyone is forced to re-invent the wheel ! Fortunately, Open Souce Software is providing one solution: Developers are able to share code.

    But then again, what do I know, I'm just a game developer. ;-)

    Cheers

    1. Re:Licensing is here in another form by Steve_Dallas · · Score: 1

      Unfortunately, requiring a degree is also a good way to ensure you don't get some of the best people. If I had actually finished my degree (I'll use the example I know best ;)) the information about programming and computers learned would now be about 15 years out of date. I think actual experience and ongoing professional development (courses, reading, conferences, etc) count for a lot more than 4 years at party central with a piece of paper. Amazingly enough, so does my employer ;) Some of the best developers I know have either no degree or a non-engineering degree. Having said that, I guess you still need some way to figure out who is worth the trouble for those entry level positions.

    2. Re:Licensing is here in another form by mynameistim · · Score: 1

      Sure software companies have lots of choices in the candidate pool, but the fastest way to the chaff from the wheat is to put a B.Sc requirement on the job. (Not that it always works, as there are some people I wonder how the heck they even PASSED with so little they know.)

      This touches on something that I rant about in the RW alot. If you want to build a hospital, you go hire an Architect (who legally must have professional association for a project like this), who in turn will likely hire engineering consultants (who must also legally have professional association). Then the client goes and hires a consultant to build the computer systems that will help run the hospital. If they're a smart organization then they'll know how to get a company that is qualified to do this, but it really could come down to luck.

      How does the client know that the company they are hiring is capable of completing the project. How does the copmpany know that the programmers it hires even have some basic formal knowledge about testing, documentation, etc.

      I read an article in a Transactions on... journal a couple of years back talking about exactly this. In fact the article was commenting on the way that programmers call themselves "Software Engineers". In some locales the term "Engineer" is restricted in its use -- you can't call yourself an engineer unless you legally are one. Since most (all??) "Software Engineers" have no legal (not trade) certification, they aren't engineers.

      The argument that Computing is a relatively new field doesn't excuse a company that builds a critical app which subsequently fails (and possibly costs lives). In some areas, if a building collapses, the engineer can be brought up on criminal charges (ie criminal negligence). The company that build the critical app which failed might be sued, but the "Software Engineer" who runs the company will come out of it OK.

      Now the question arises, "Where do you draw the line?" Analogous to construction, there are certain projects that there is no need for the developer to be qualified as an Engineer. In Canada, anyone can design and build a house. In fact, anyone can design a building less than a certain size, or for certain uses (residential and light commercial under 600 square meters, I think). Likewise, there is no reason that a game, word processor, or other application which isn't going to cause major problems if it fails should be designed by a (legal) "Software Engineer". But the person designing an app that has the potential to cause a great deal of harm if it fails should (in my opinion) have a legal certifcation that the client can view as a guarantee that the designer is qualified and capable.

    3. Re:Licensing is here in another form by Anonymous Coward · · Score: 0

      We already have a form of licensing, its called "education papers" aka a Degree.

      A degree is not any form of liscensing. All it proves is that someone could study and pass tests. The worst programmers i've ever met were PhD's in Computer Science.

      Sure, they could probably spout algoritms and theories by heart, but they couldn't code it to save their lives.

      The #1 things that make a good programmer: Continuing education - buy books, magazines, stay up with the industry. Experience - Make mistakes You have no way to learn what's good or bad without screwing up. Learning from others mistakes - do code reviews of others and talk with them. And #1. Take pride in your work.

    4. Re:Licensing is here in another form by Anonymous Coward · · Score: 0

      Right. The biggest problem with author's case is that existing credentialling systems have failed, largely because those who employ programmers have discovered that credentials are a poor predictor of performance, and have stopped using them. McConnell did a good job of writing the wrong book : he should have analyzed why the university / degree system FAILED to "capture" software engineering as a profession, how it is trying (and so far, failing) to create a "pay-us-or-you-can't-play" racket in engineering just as it has for law and medicine. Remember, 30 years ago, hardly anybody without an advanced math degree got anywhere near a compiler. Now, anybody can program. What if, in the intervening 3 decades, it had impossible to work as a programmer without passing muster with the University? Would computers be as good as they are now? I seriously doubt it. Does McConnell really think a "profession" of software engineering will be free of the cronyism, inefficiencies, and high costs associated with so many other professional licensing arrangements?

  3. Whats sad is I can read that ... by UnknownSoldier · · Score: 1

    Hey, post the source for your 3l33t h@ck3R -> english translater ;-)

  4. Moving out? by gorilla · · Score: 3
    "Now that software development is moving out of its "gold rush" period, where the firstest gets the mostest,"

    Seems to me that the pressures of 'first to market' are getting worse, not better. The marketing message is "Who cares how buggy it is, as long as it's available now?"

    1. Re:Moving out? by helarno · · Score: 2

      Think Microsoft.

      Then tell me that "bugginess" doesn't catch up to you. It just takes a while.

    2. Re:Moving out? by JordanH · · Score: 2
      Hmmm... Microsoft just had a record quarter. Hasn't caught up with them yet.

      There are warnings, including Microsoft's own announcements, that there are storm clouds on the horizon for Microsoft. I doubt that Bill Gates moved over to let Ballmer bask in the glory of every increasing profits.

      By all accounts, Windows 2000 will be their most stable OS since DOS 6. A pretty amazing feat considering the umpteen millions of lines of code.

      Now, what message will THAT send. Big software company puts out buggy, unstable Operating Systems, year after year to ever increasing profits. Finally, they put out an OS with greatly improved quality and profits turn down.

      Software quality problems are not essentially problems of the "professionalism" of the practitioners. Management sets the tone. If they ask for bad products to meet arbitrary "market windows", they get bad products. Note that Microsoft Management made a priority of quality with Windows 2000 and things seem to have improved. It's just that simple.

      Ultimately, it's not really management's fault either. The market windows are REAL. Businesses that put out good products too late, after other products have staked out the market, do suffer. The problem is customers who are willing to put up with low quality software.


      -Jordan Henderson

    3. Re:Moving out? by Sarah_Serious_Bitch · · Score: 1

      Release now. Patch later.

      Usually, its because you've got one of a few things :

      You've got bad project managers that can't understand the software process.

      You've got coders that are mentally 'stuck'. Giving them the opportunity to ship it, then go away, then come back to it can be quite valuable. Although, it can have the opposite effect in some.

      You've got the people that have given you their money bashing on the windows. You just end up running out of money and need to ship the damn thing to save your sorry wallet.

      You've got a customer, or the whole market that wants your product, NOW (as you say). This is the worst of them all.

      There are a few other reasons... but, I won't go into them. Its only 8am!

      --
      **This message was brought to you by the letters N, T and the number 666**
    4. Re:Moving out? by vanth · · Score: 1

      Pressure to be first to market DOES exist, but
      I think vary between markets:

      e.g. in the console game market, the format of distribution forces the developer to take a verry close look at the stuff being shipped out to be pressed - its very hard to issue patches to CD's and cartridges -

      the publishers which DO NOT pay attention to details like this generally don't tend to last very long.

      Long live the PSX
      Long live the Dreamcast

      :)

    5. Re:Moving out? by Anonymous Coward · · Score: 0

      The console game market has homogenous hardware. This is a large factor that you fail to address.

  5. The only way to stop the Gold rush... by Anonymous Coward · · Score: 0

    ...is to kill all the babies, This is certainly not the first gold rush and it sure won't be the last, everytime a new technology comes out a group of people say "Hey you don't need to listen to those old guy's over there in the IT (or whatever) department, I can get want you want really quickly because of this new thing PCs/VB/Perl etc"
    What happens is that the first thing they implements usually sort of works but the forth or fifth thing never does.

    While we are all excited about new stuff this process will continue and as we get older and hopefully wiser we will try and caution the next younger generation and we will be ignored exactly like as those who tied to warn us.

  6. Management, anyone? by PD · · Score: 4

    The problems with software engineering are fundamentally a management problem. It's been many years since the "Mythical Man Month" showed us how adding programmers to a project can only make it later because of communications overhead. But, many many managers are still doing just that. Furthermore, many managers are afraid of the technology, proclaiming loudly that they don't know anything at all about programming computers; good managers can manage anything at all without knowing about it.

    Gantt charts and org charts are something that programmers should never see. But yet in many companies I work with, you can't get anything done unless you've got a big graph of the organization to help you find someone who is high enough to have some weight, but low enough to actually have some brains.

    And even worse, technologies are often driven by management needs. Software costs too much, so all the managers want to get some of that good object orientated stuff on the project. So, they hire a few C++ programmers out of school and give them Visio. The programmers are told that their highest goal is re-use. Never mind that the system they are building is meant to handle 320 contradictory/arbitrary business rules for selling widgets to a client in New Zeeland. So, the programmers dutifully build the system to be as re-usable as possible. And, those 320 business rules never get used anywhere else but New Zealand. Meanwhile, the primary goal of re-use has caused the maintainability of the system to go to hell, because management ignored the faster/cheaper/better trichotomy and gave the team a week and half to design the system.

    I could go on and on and on about management horror stories. Every place I've ever worked has been the same way, and a lot of those places were Fortune 500 companies. Books outlining ideal software development worlds are great. We really need some new ideas in that area. But how much progress can we make if our managers have never READ the books?

    1. Re:Management, anyone? by sql*kitten · · Score: 1
      And even worse, technologies are often driven by management needs

      The sole purpose of corporate IT is to enable and support management objectives. It serves no purpose otherwise, and wouldn't even exist.

      Software costs too much, so all the managers want to get some of that good object orientated stuff on the project.

      It is management's responsibility to both ensure that sufficient resources are available, and to ensure that the resources are employed most efficiently.

      So, the programmers dutifully build the system to be as re-usable as possible.

      If the programmers think they could manage the company better, there's nothing stopping them moving into management themselves.

    2. Re:Management, anyone? by JordanH · · Score: 1
      • If the programmers think they could manage the company better, there's nothing stopping them moving into management themselves.

      Except for perhaps the bias against promoting technical people into real management positions? Why should those technical people be promoted? They've never been able to meet our expectations before...

      If you don't believe me, just check out the ranks of board rooms. Few people with any kind of technical background there.

      I notice you ignored the parts of the comment that dealt with how management rarely bothers to become educated in the issues surrounding Software Engineering and Software Project Management. I think you'll find that management does not ignore principles of accounting or marketing.


      -Jordan Henderson

    3. Re:Management, anyone? by stephend · · Score: 1

      > The problems with software engineering are fundamentally a management problem

      Just as management have a responsibility to define the requirements as clearly as they can and define reasonable dead-lines, you have a responsibility to tell them when what they demand is impossible.

      If they want to throw more people onto a late project, don't just tell them it won't work. Tell them *why*, quote Fred Brookes, *reason* with them.

      > Gantt charts and org charts are something that programmers should never see

      Disagree. To do a good job, you need to know where your piece of the machine fits in, what it affects if you deliver late (if you have to make a compromise, is it better to devliver late or slightly incomplete?).

      If you want to stick your head in the sand about management issues, that's fine too. But there's still a lot you can do. I'm sure you've seen the figures about the difference between the most and least productive developers. It's not magic, you can *learn* many of the techniques that the most effective developers use.

      Read the books your manager doesn't and educate them! Not all companies are that bad. I work for a FTSE100 company and only have a small number of management horror stories.

    4. Re:Management, anyone? by 0xdeadbeef · · Score: 3

      The sole purpose of corporate IT is to enable and support management objectives. It serves no purpose otherwise, and wouldn't even exist.

      And managment objectives exist to enhance shareholder/owner value, which is done by bringing products to market in the most efficient manner possible. So you could say that technology is driven by the market's needs, and that managers who misdirect the development of technology to satisfy their own unpractical whims (ie, buzzword compliance, irrational attachment to specific languages/platforms/etc) are in fact causing a problem, which is what I think the original poster meant by that statement.

      And remember, a lot of developers aren't in corporate IT, they are themselves developing a product, and most likely understand the product and related technologies far better than management.

      So get off your authoritarian high horse, management can in fact be fallable. :-)

      If the programmers think they could manage the company better, there's nothing stopping them moving into management themselves.

      Except politics, glass ceilings, an aversion to pretentious clothing, etc. I should quit now, their spy programs are watching...

    5. Re:Management, anyone? by PD · · Score: 1

      "If they want to throw more people onto a late project, don't just tell them it won't work. Tell them *why*, quote Fred Brookes, *reason* with them."

      Oh if it were that easy! Besides programming, I'm pretty good at UML designing. I understand the importance of designing with tools that can generate code, as well as integrate changes back into the design. I've argued with my manager at length about this.

      Their response? "Visio is good enough. Nobody's going to read the documentation, but we've to to have it to mee the requirements. We can't afford to spend the time to train everyone to learn UML either. So, just do the docs in Visio, call it a design, and get back to porting the app from Perl to Java. And while I appreciate you working 20 hour days for the past week, we've got to keep that up for another three weeks to meet our deadline. If we miss it, our vice president will get a demerit on his annual goals, and that affects his bonus."

      No shit! This is exactly what is happening to me right now. But don't get me wrong - I *love* this situation. I get paid overtime, and I don't have any responsibility for the project schedule.

    6. Re:Management, anyone? by noom · · Score: 1
      If they want to throw more people onto a late project, don't just tell them it won't work. Tell them *why*, quote Fred Brookes, *reason* with them.


      This statement definitely goes along with somoene else's observation that a company's technical staff doesn't get enough respect to be promoted to managerial positions. Probably the MAIN reason people don't reason with their managers nor get promoted to management positions (even if they really do know what's up) is because so many of them are incapable of communicating effectively. Even if you know how to do something, you're still useless as a manager unless you can communicate your ideas to everyone involved. And still yet, you've got to be able to develop an organizational infrastructure to support it -- which is NOT the same thing as just proposing a vague idea.

      -NooM
    7. Re:Management, anyone? by Anonymous Coward · · Score: 0

      I don't know many people who would choose their neighbor's kid to perform surgery, or hire a journalist to build a bridge, yet every day software development shops hire people whose only training is that they have read some book on Visual Basic or C++ or Perl...

      My experience has shown that companies want to hire these types. It almost seems like they do it on purpose and are just willing to throw away money. I don't want to turn this into a whine session, but would like to give an example from the current company I'm with.

      Over 3 years ago we took on a project to implement a corporate wide ERP, consisting of Baan, Aurum, and a shop floor automation system that would replace our old A2400 system and tie everything together. At this time I was not in the IS dept., but working out on the shop floor and taking classes in computer programming ( I only have 3 years of work done on my B.S. currently). The classes I took were in Assembly, C, C++, and Visual Basic. I earned excellent scores and really enjoyed it, still do. However, when it came time to go job searching and move on I asked to speak with the then current IS director and feel him out as to possibilities.

      Basically, conversation went along the lines of, "We currently will not need any programmers for 10 or so more years, but if you want I may get you into the Help Desk." Meanwhile, I had an offer from IBM in a starting position with a temp. contract that could lead to bigger things based on how I performed. I turned it down because I didn't want the 45 min. commute and have been working here for 7 years, figuring I could climb higher up the ladder. I turned down Big Blue (can I put that on my resume?).

      Well, first we start with a company (S) to make a shop floor system that never works correctly and is slower than a snail. Then we chase more money down the hole by hiring consultants to implement Baan who are walking out of here with $250.00/hr. for each one at up to 25 at any one time. They never do get it working, nor does other company. Fine, fire all of them and hire brand new. O.K., pause for few monthes so these new ones can figure out how we do things. Back on track, now go. Whoops, have to rewrite the whole friggin Shop Floor App., because the code is so confused it'll never run right. Next year goes by and suddenly stock starts plumenting. Rumors crop up about consultant x at the bar yakking to everyone in ear shot about how he's taking this place and laughing all the way to the bank at $5,600.00/week and a percentage of his programmers salary. So fire them and, hey we still don't have Baan going fire them too. While we're at it fire that 2 year no shop floor experiance C.I.O. and let's start fresh. O.K., back on track but Y2K right around corner, we gotta move. Oh hell, we'll never make it so throw more money at old system to roll it over. I could go on for days....

      Whole time I'm working help desk and trying to get noticed. Wrote an app in C++ that tracks employees attendence, hours, vacation, etc., but company says that because they don't own it, no one can use it, even the sups who like it. What the ?!?!? Write another app in VB to make employeee badges with pictures, because old app won't print across network to color printer. Works excellent and even has feature to include a bar code for logging into terminal if needed. User likes it and seems like all go, until someone comes along and says throw it out. We're going to hire consultants from co. x to make new app. (Bang head a thousand times on desk). Hear from time to time my name crops up about possibly helping to code new shop floor app, but always hear back later that someone from outside was hired in as consultant and after they learn how we work, they will be the new coder. Even had the VP and new CIO e-mail me, but no news. I know how to code and already know how the whole company works, plus I know what the user wants.

      This is not the only place I've heard of this. I think the IT age has thrown around to many myths about e-commerce and what it can do that every company is willing to jump on the bandwagon. They go out and grab anyone they can get with the consultant label on their resume, whether they know what they are doing or not. The good ones get all the hype and the companies that do it right succeed, but tons are being misled and the backlash will happen one day.

      It's nice for a guy to write a book and say that we need this and that from the software engineering aspect. But, a lot is going to have happen with the companies who hire and the consultants who mislead or the industry will never slow down. There is just not enough of the good ones to force it to, because competition makes the little guys hungrier and willing to cut corners. Which keeps the race going.

      Standards are needed and need to be clearly defined for all of the business world. Especially the managers and top chiefs doing the hiring. I for one would be willing to take any road necessary, even certification above and beyond what I have, if managers would be willing to follow and abide by it.

      Well, now that we're all lost.... I'll return you to those who have a more level head then me.

  7. Two types of programmers by Anonymous Coward · · Score: 0

    1. Weekend experts
    2. Experts

    The first category is made up of people who just bung together any old thing and it works - after a fashion. This group have made the most of code-reuse ... cut and paste is a wonderful thing.

    The second category is made up of people who know all about their language, they're familiar with good design and when they write code they're usually pretty good at it. This group have made little of code-reuse. They know it should be done, they design mammoth systems and hierarchies to promote it ... but their ego's are too big to actually do it. "I think this can be done better ..."

    After that gross generalization we should recognise that there are shades of grey (gray - for our US cousins), but the gray is either very dark or very light :-)

    The book looks good. Onward with the march of engineering!

    1. Re:Two types of programmers by jacobm · · Score: 2

      Is that really true about experts? Can people with industry experience vouch for that as a widespread phenomenon?

      I am a student, not an industry worker, but at my department (Rice University) the idea that you must abstract and reuse code as much as possible is drilled into our heads pretty unrelentingly, and is taught both in an object-oriented framework (via [increasingly] Java and [decreasingly] C++) and a functional programming framework (via Scheme and perhaps a smidgen of ML or Haskell depending on what you take and when), just so we'll be sure to get the point that the principles of abstraction aren't language-specific. I honestly can't imagine anyone who did well in our department going out to industry and writing code that didn't have a lot of code reuse built in.

      Is Rice just an exceptional school?

      --
      -jacob
    2. Re:Two types of programmers by unDees · · Score: 1
      I am a student, not an industry worker, but at my department (Rice University) the idea that you must abstract and reuse code as much as possible is drilled into our heads pretty unrelentingly

      It wasn't always that way, even at Rice. Even just a few years ago, during my sophomore year (1993-1994), they stressed abstraction quite a bit (algorithms, Scheme, etc.), but reuse was barely even given lip service, much less graded. Even within two years, the department had finally started to modernize and teach code reuse. (I'm assuming you mean the COMP department, not ELEC.)

      And yes, licensing is a two-edged sword. Accountability is a Good Thing where safety's on the line, but there are plenty of incompetent doctors and lawyers who still have their licenses. Make no mistake, requiring such an "insider's club" for software engineering would attract the same kind of buddy-buddying and industry-wide lobbying (to the detriment of the consumer) we've seen between, for example, the AMA and the pharmaceutical industry. (You know some folks wanna make you pay for a prescription for Vitamin C?)

      I always thought they'd simply create a new category of Professional Engineer, or make it a subset of Electrical Engineer. That system is definitely a racket. I've personally had to read, debug, and scrap really--really--lousy code written by licensed professional engineers. Licensing kinda makes me wonder why I would have to pay to take two expensive tests (in Texas, anyway, barring some exceptions), accompanying classes, and make a fscking diary of all my projects for four years, just so I can be in the same esteemed company as the idiots whose code I had to destroy.

      Perhaps licensing would solve a few problems, but I agree with other commentators here that, with or without licensing, we need more clueful managers. We need people who can design the software as a whole. We need user interface specialists. In small shops, a developer might have to become an expert at all of these things.

      So how do we do that?

      I welcome suggestions.

      --unDees

      --
      "I call a baby goat a 'goatse.'" -- my non-Internet-savvy 6-year-old stepdaughter
    3. Re:Two types of programmers by Anonymous Coward · · Score: 0

      just what are ML, Scheme, Haskell and Java going to do for you in the real world, where you're thrown down in front of a computer and must churn out Windows C++ code all day?

    4. Re:Two types of programmers by Anonymous Coward · · Score: 0

      Define reuse!

      Some folks define reuse as using the same piece of code (class) in twelve different projects.

      Then, there was the company I used to work for. They paid by the line. So, their programmers (if I can call them that) never called the same routine twice. Instead, they copied it (cut&paste), and made some minor one-line change. This increased the number of lines of code they produced per day. Their project, however, failed catastrophically.... And their programming staff fled like rats on a sinking ship.


      I have generally found that what you are taught in school does not have a strong bearing upon the real world. I saw some students being encouraged to migrate the implementation of Java Interfaces off into base classes. Right. The tradeoff of an extra five lines of code in the class vs a more complex class hierarchy really makes things cleaner in a 50,000 line program. Perhaps it's true. Those who can, do. Those who can't, teach. Those who can't teach, teach gym.

  8. 2000: Where To? by washort · · Score: 4

    The art of programming has come a long way since its modern inception. Advances have largely come in stages: the advance from hardwiring to machine language, from machine language to assembler; from assembler to low-level compiled languages; and from low-level compiled language to high-level compiled (native and virtual-machine) languages.

    The question now becomes: what next? What obstacles exist to the advancing of the art?

    In my opinion, one of the main obstacles is the widespread use of C and C++. Both are low-level languages designed for close interaction with the hardware. (C++ may share features with high-level languages but is too tied to C to actually be an HLL.) This is a useful design for many tasks, but not for general application programming, at least at this time. Moving to safer, more powerful languages (Smalltalk, Dylan, Eiffel, Ada, ML, and Haskell to name a few with useful free implementations) is necessary, IMHO, to further the creation and maintainability of complex software systems. C still has its place of course -- critical inner loops will probably be implemented in many applications where the high-level language does not perform adequately -- but general development should move along to more useful tools.

    I believe that the free-software community is uniquely prepared to do this, simply because language choice is a technical and not political problem.

    Happy hacking.


  9. It not just the coders by spiralx · · Score: 3

    Currently, people don't know how to build software. Or, to be more accurate, there are good techniques out there to build software, but most people ignore them for one or more reasons, none of which hold up under close scrutiny.

    Yes unfortunately most people who program have learnt to program well before they come into any contact with actually being part of a team writing a large application. When it's just you sitting in your room at home coding something just for the sheer hell of it your style of coding and the method you use to design and implement the code are relatively unimportant. I'm sure the most popular method is the 1) Think of something you want to code, and 2) Sit there and start coding it as soon as possible :) Unfortunately this doesn't, in my experiance, work at all well for larger projects.

    The software house I currently work for has a lot of problems with how the project is managed. The man in charge of the overall development for our application is far more interesting in trying to code things which have caught his fancy at the time than in making the product consistant, efficient or even bug-free. Designs have generally been of the "here's what we want - go do it" kind, and once someone has done a particular client, they're the only person who knows exactly how it works. When people leave someone else needs to spend a good two weeks just trying to figure out the code. We've recently started to move into a more structured approach to coding, but it remains to be seen whether this will have any impact.

    Now that software development is moving out of its "gold rush" period, where the firstest gets the mostest, we can begin to develop software engineering as a profession. This means training people in engineering instead of science, and defining what it means to be a software engineer. Unfortunately, we have a lot of work to do both on the level of education, and in the mindset of today's software developers.

    Very true - we've got a lot of good programmers, it's just that they don't know how to write a large piece of software. This is something I see a lot of, and it seems that it takes not just good programmers, but also a good structure for them to work in, to produce something that is consistant, efficient and can be easily maintained. For people out there involved in the same sort of work ask yourselves - if everyone involved in your project left at once, how long would it take for a new team to pick up where you left off?

  10. Programming is design by richieb · · Score: 1
    Actually programming is design. The idea that programming and design are separate tasks leads into the problem thinking that 'cause someone can get a 20 line C++ program to compile he is a programmer.

    The problems with "Software Designers" who don't code is opposite. They come up with wonderful "designs" that are completely impractical that cannot work. But at least they get to blame the programmers.

    ...richie

    --
    ...richie - It is a good day to code.
    1. Re:Programming is design by Foogle · · Score: 2
      If it can't be created, it can't be created. I won't argue with that. But if a design-team is competent, they will create an interface that is best-suited to their target audience, *not* to other programmers and people who are used to dealing with shoddy applications.

      A person who writes a 20-line C++ program is a programmer (they have written a program; the very act of doing so defines them as one). It does not, however, make them a *good* programmer. Sure, if you happen to be practically perfect in every way then you don't to split up the work into different teams. If you're perfect, you can write an entire operating system by yourself. You can leap tall buildings in a single bound and stare down charging llamas.

      I don't know about you, but I'm not perfect. I don't write all my code in assembly either. I write it in C++ because I find it easier to break my work up into protected objects. Along the same lines, I don't always trust myself to design the very best interface for my software. I'd rather get it right then be right.

      -----------

      "You can't shake the Devil's hand and say you're only kidding."

    2. Re:Programming is design by richieb · · Score: 1
      I don't know about you, but I'm not perfect. I don't write all my code in assembly either. Iwrite it in C++ because I find it easier to break my work up into protected objects. Along the same lines, I don't always trust myself to design the very best interface for my software. I'd rather get it right then be right.

      My current favorite programming language is Eiffel. You can express your designs much better in Eiffel than C++. You should check it out.

      As far as getting a design right. How can you tell it's right unless you implement it? Except for very obvious things that have been tested by others before (like how do you design a hash table), you cannot tell a priori that a design is good.

      Unless you have quite a bit of experience implementing systems you will not know how to design it.

      Designing user interfaces is a completely different thing. This is not software design, but human factors design. I'm sure it wasn't an aircraft designer who thought that the knob that rasises and lowers the landing gear should be shaped like a wheel.

      ...richie

      P.S. I'm not perfect either. I never said I was.

      --
      ...richie - It is a good day to code.
    3. Re:Programming is design by Foogle · · Score: 1
      Well it seems we have a bit of a misunderstanding: I was in fact talking about human-factor design, or "Interface" as I like to refer to it.

      And sure, I think I will check out out Eiffel.

      -----------

      "You can't shake the Devil's hand and say you're only kidding."

    4. Re:Programming is design by drewpt · · Score: 1

      A person who writes a 20-line C++ program is a programmer (they have written a program; the very act of doing so defines them as one).

      If I change the oil in my car, am I a mechanic?
      If I pop a zit on my face, am I a dermatologist?
      If I handle my father's stocks, am I a stock broker?

      Why then is a person who can write a 20 line C++ program, a programmer?

      I don't buy it.

    5. Re:Programming is design by Bob+Ince · · Score: 2
      if a design-team is competent, they will create an interface that is best-suited to their target audience, *not* to other programmers and people who are used to dealing with shoddy applications.

      Doesn't seem like there are that many competent design-teams about, tho, does it? :-(

      I think the important thing is that the internal design should follow the interface design, not the other way around. I always start with the user interface, what sorts of objects and models I'd want to interact with as a user. This often suggests much of the implementation. You could call it outside-in programming, or something; design top-down, then implement bottom-up. Of course, for me, designing how things should work is a lot more fun than actually making them work, so I guess less than 50% of my pet projects actually ever get implemented.

      A lot of programs, alas, seem to have started their design with a few simple internal classes, and layered as many UI elements over them as are needed to make the software usable at all, ending up with horribly counter-intuitive interfaces. (I've been guilty of this in rushed projects too, natch.) Then you end up having to add crud like Wizards to perform common operations because the normal interface makes them too hard. Yuck poo smell. And bum as well.

      As it happens, I did used to write much of my stuff in assembler. Wouldn't say that exactly made me perfect, but hey. I used to be able to understand my programs at the time, as well. My habit of labelling subroutines .thing_thing_kludge or .john_prescotts_face doesn't make it entirely fun maintaining the code now...

      (Of course, ARM assembler doesn't count anyway, since it is far too easy to be classed a proper assembly language.)


      --
      This comment was brought to you by And Clover.
    6. Re:Programming is design by dgph · · Score: 1

      An interesting thing about Eiffel is that as well as a programming language, it is a design language. The distance between design and implementation is shortened, which is a good thing because energy isn't wasted in translating back and forth between separate design and programming languages.

    7. Re:Programming is design by 0xdeadbeef · · Score: 1

      A person who writes a 20-line C++ program is a programmer (they have written a program; the very act of doing so defines them as one)

      I once used a timing circuit to make a group of LEDs blink in sequence. Therefore I'm an electrical engineer. I think I'll put that title on my business cards...

      I think you're confusing GUI design and the design of software. People in this thread should be using "software architect" when they're saying "designer".

      A software architect's target audience is the programmer. If this person does not understand programming, and does cater to the programmer's needs and the limitations of the systems involved, then this person will design crap. It's that simple. No magic software engineering methodology will make happy little worker ants of programmers implementing the designer's grand vision.

    8. Re:Programming is design by Anonymous Coward · · Score: 0

      I think the important thing is that the internal design should follow the interface design, not the other way around.

      This is most definately *NOT* the way to do it. User Interface design should be irrelevant to the internal design of the application. There should be clear seperation between business logic and UI. Both should be well-designed with a glue layer between them to translate.

    9. Re:Programming is design by Doctor+Memory · · Score: 1

      If you bake a cake, are you not a baker?
      If you sell your car to a friend, are you not a car salesman?

      As always, the answer is "it depends"...

      --
      Just junk food for thought...
    10. Re:Programming is design by Anonymous Coward · · Score: 0
      Once I had an ingrown toenail that I had to cut out with a scalpel. I bled a lot.

      -- Anonymous Coward, MD

    11. Re:Programming is design by Foogle · · Score: 1
      Considering I started this whole discussion I think I'll keep calling it by the term that I meant to: Designer. I'm not talking about "Software Architects." Of course that's a job for programmers; who else could do it?

      I am not talking about GUI design either, although that's closer to the truth. I'm talking about *interface* design. Maybe it's a semantic difference, but I don't necessarily think "interface" has to do with the graphical display aspect of an application (clearly not in text-mode, but I'm talking about windowing systems too).

      What I meant was that a programmer should code (and design the code as in "Software Architect") but they should not design the *interface* to their own code. That should be done by a separate team. The other team doesn't have to be non-programmers, but they do have to be good designers. And they do have to communicate well with the programmers. They just shouldn't get involved in the writing/planning of the code and vice-versa. Unconscious maybe, but its a clear conflict of interests.

      -----------

      "You can't shake the Devil's hand and say you're only kidding."

    12. Re:Programming is design by Anonymous Coward · · Score: 0

      If I change the oil in my car, am I a mechanic?
      If I pop a zit on my face, am I a dermatologist?
      If I handle my father's stocks, am I a stock broker?

      No, but if you change your neighbour's car's oil and charge him for it, you are.

      As for being a stock broker, you might have to get certification from some sort of trade group (like engineers do), which, as the original poster pointed out, is something code-grinders _don't_ need to get hired.

      Without certification we're more like mechanics than stockbrokers and dermatologists.

  11. But what is engineering? by u&t · · Score: 1

    I'm graduating in a few weeks (not comp Sci) and still don't know the definition.
    My current best guess is "don't do anything until you know what you want to do and then make it in a way so that its easy to change it when you later on realize you wanted something else".
    I don't know if its the right definition but i'm sure they didn't teach me that in school.

    My guess the problem of badly engineered projects is quite common. It's just more obvious in programming

    1. Re:But what is engineering? by richieb · · Score: 1
      I don't know if its the right definition but i'm sure they didn't teach me that in school.

      In Norman Mailer's book "Fire on the Moon" he described the difference between science and engineering. For example the science of how to go from Earth to the Moon was solved by Isaac Newton.

      But to actually get people to the Moon required quite a bit of engineering.

      In more general terms engineering is the art of building useful things on time and under budget.

      ...richie

      P.S. See several books by Henry Petroski for more discussions of what engineering is.

      --
      ...richie - It is a good day to code.
    2. Re:But what is engineering? by dingbat_hp · · Score: 2

      Engineering is making things that don't break any more often than you expected to, or more often than the budget allowed you to.

  12. Computer Science/Software Engineering by Powers · · Score: 1
    The distinction between the two professions is becoiming clearer to me now. However, as a Computer Science graduate myself, I can say that I don't feel it left me totally unprepared for working as a programmer. At my alma mater, the Software Engineering and Computer Science curricula are nearly identical until the third year (differences: SE majors must take one year of Physics and must take Software Engineering II; both are optional for CS majors).

    The one thing I haven't figured out yet is, if Computer Science (strictly) isn't really for software development, what is it for? I thought it was very useful to get some training in algorithms and grammars, etc. (the Science of Computer Science), but I sure as heck wouldn't want to do it for the rest of my life!

    Fortunately, my school's CS curriculum mixes in plenty of programming and software engineering-type coursework, so I still feel I was left with a good foundation.

    --

    Powers&8^]

    1. Re:Computer Science/Software Engineering by Scott+Johnston · · Score: 1
      The one thing I haven't figured out yet is, if Computer Science (strictly) isn't really for software development, what is it for?

      I find it useful for thinking about and discussing a wide variety of programming activity. Somehow studying the "pumping lemma" warps your mind in a way that makes recursion and self-reference easier to deal with. Like cutting up a dead body makes you a better physician. Without it you just don't have the same neural wiring. Unix and the Internet came from computer scientists, not software engineers.

  13. Software development vs. solution design by hanssm · · Score: 1

    One of the basic problems is that most developers think in a very narrow scope. Most of the time developers are called in to tackle a specific problem, and think only in the context of solving that problem, rather than thinking about the rest of the operating environment.
    This tends to work fairly well when you deal with single tasks, but starts to really crack when you try to fit in the application withing a larger context, such as a multi-channel CRM strategy or integration of applications within a larger enterprise.

    What is required is a way of working that promotes thinking in a wider scope, and taking a more technology or method pragmatic approach to development. At the end of the day it's primarily a matter of wanting to solve a business problem, and the best way to do that is to go through a full analysis of generic functional service requirements rather than individual functions.

    Hmm. Did I just get off-topic here? Hope not. What I really wanted to get across is that I really see a need for developers to start thinking more in terms of enterprise-wide design rather than functional-point development.

    Live long and ... whatchamacall ... enjoy.


    --
    "That's funny. I just had this conversation the other day!"
  14. Code of ethics by EvilKevin · · Score: 1

    Some programmers already are compelled to abide by a professional code of ethics as terms of membership in either the ACM or the IEEE. Admittedly there is no substantive penalty for breaking these codes. But the codes are there and most members (that I know) take them seriously. Codes of ethics are good.

    What I'm wondering is how many programmers welcome training in and practice of software development processes? Many programmers that I know believe that what they do is create software -- that they are software craftspeople. They perceive software engineers as people who do more paperwork than programming, and who value process over ingenuity in programming. Now I'm not endorsing this view, but what do you guys think?

    1. Re:Code of ethics by sbarber · · Score: 1

      I really don't believe that Codes of Ethics do very much good, and I'm not a huge fan of the idea that software development needs to be turned into a "profession," whatever that means.

      As a software guy who used to practice law for a living, I've lived both sides of the street.

      Lawyers live under a code of ethics that in most states has literally become enacted as part of the statutory law, and also is enforced, at least in theory, by the courts and Bar Associations. Some of the ethical codes work to help protect the clients, some work to better some view of society I guess, but many of these rules simply operate to keep other working folks from practicing law without a license. It is turf protectionism in its rawest form. Further, some lawyers actually spend time pushing the envelope on what practices are "ethical" by finessing the rules. Not a pretty picture. And, of course, there are now lawyers who specialize in the lawyers' ethical rules themselves, making lucrative practices out of defending other attorneys accused of malpractice. Do we in software really want this stuff to happen in our field?

      The existence of the lawyers' code, and mandated degrees, and bar exams, and mandatory legal education do little to the ensure competence of the individual lawyer. Word of mouth from satisfied customers you know is still the best way to find a good attorney.

      Regarding the IEEE/ACM SEEPP Code of Ethics, I was for a while a member of the task force that drafted the current code. It's all very nice and noble, but there isn't much in it that all of us didn't learn by the time we got to kindergarten.
      Worse, there are a few things in there that I wouldn't want to be held accountable for as a practicing programmer. Here are the highlights:

      1) Once you are a "professional", you can be held liable for malpractice, and you must legally exercise a higher standard of care than other mortals have to in their chosen fields. For most software, there is little societal benefit to be gained for the added burden placed on the practitioner (and their malpractice insurers). The costs for such insurance are just passed on to consumers, anyway. (Some software does require high standards of care, but really, not most.)

      2) The Code effectively makes programmers responsible for respecting and enforcing other people's intellectual property rights in their workplace. So, if your boss won't pay for a site license for that software everyone is using, does that mean you should be sanctioned by a professional organization for continuing to work there? For not sticking your neck out? Where's the line? Why do software people have to live with this explicit ethical responsibility and not, say, secretaries? Don't we all have to follow copyright law anyway? I don't get it.

      3) The Code also places the responsibility for quality on individual programmers, where it often belongs, but doesn't magically imbue programmers with any means to impose this goal on the their employers. The Code itself does not speak to the non-programmers' employers' ethical responsibility. So, in practice, this stuff rings a bit hollow.

      Finally, when thinking about the ACM/IEEE Code of Ethics, I find it helpful to remember that most of the good folks on the task force aren't actually practicing programmers (though many of them were at one time or another). The task force was predominantly composed of academics who make their living teaching computer ethics courses. I don't mean to question peoples' motives; I found all my colleagues on the task force to be good and honorable folks pursuing ideals in which they passionately believed. I mean, why else be an ethics professor? But I really couldn't ignore the fact that most of these folks' passions will be essentially guaranteed places in the curricula of our universities once software ethics is legislated.

      So I still can't figure out how a software ethics code makes the world a better place, even though the ethical practice of software development is a good thing unto itself.


  15. It all boils down to this:can you program? by rambone · · Score: 1
    McConnell has been publishing the same book now over and over again for the last few years. He's really sold on software engineering. Not me, alt least anymore. A number of bubbles of mine have been burst since I left college to work "in the real world":

    Algorithms are the most important thing - does anyone do searching and sorting of large data sets without the aid of a SQL database anymore? Does anyone write their own search routine? I've found that for 97% of cases, searching and sorting is optimized by leaving it to someone else.

    Software engineering matters - does anyone write specifications? Does anyone follow a development methodology? I've never worked in any market that executive felt was "slow" enough to allow for sound engineering techniques. Everything has been lost in the rush, and nearly everyone is rushing.

    Now what I have found out is this:

    Knowing the specific issues of particular systems (databases, operating systems), is far more important than knowing theory of any kind, almost all of the time.

    Thoughts?

    1. Re:It all boils down to this:can you program? by Anonymous Coward · · Score: 1

      I have to respectfully disagree with some of what you said. It's great to be able to pull a component off the shelf and use it (such as using SQL for searching and sorting). But it's not always possible. I had a job where I had to optimize the fuck out of an image compression algorithm. There was no off the shelf solution I could use because of the nature of the project. I had to understand the algorithm and optimization in general.

      As for "does anyone write specifications?" The answer is yes. Don't get me wrong, it's very hard to get management to stick to them, but at my company they have seen the benefits of using them (faster development, better development), and they actually *want* us to use them. As I said, they have a tendancy to stray from them from time to time, but it's getting better each time.

      As for your last thought about knowing particular systems being more important than the theory, my experience is the opposite. I might have to write my code for the Mac one day, Windows the next, and both plus Linux after that (which is the case with my current project). It's more important for me to know how to abstract the parts that will vary between the systems (file handling, UI, etc.) than it is to know the specifics of how to implement those parts on each system. I can read a manual to figure out how to get data from disk into memory, but if I can't architect it properly, it'll be a mess getting it to compile on all 3 platforms.

      -D

    2. Re:It all boils down to this:can you program? by twit · · Score: 2

      Not to rain on your parade, I'd say that a properly engineered project goes at least as fast, and usually faster, than one engineered on an ad hoc basis. This is especially true for work completed for clients rather than internally, since they can use every excuse not to pay you. Having scope and spec on paper denies them that excuse.

      Honestly, I wouldn't even consider working on a project without appropriate spec and scope laid out; it's a recipe for exhaustion and doomed to failure. I've done this in the past, but my self-respect is worth more than

      However, this is a matter more of project management methadology rather than software engineering methadology. Why is it worth mentioning here? A software engineer isn't, or shouldn't be, just a code hack. They should be a leader, like a P.Eng is. Plain old developers are technicians - talented technicians, quite often, but they don't need to keep their eye on the ultimate goal of the project like an engineer or systems analyst would.

      The techniques that you're mentioning are more development techniques than anything else. That isn't to say that they're unimportant, and they can be very important when you're rolling your own code as a researcher, but in the workday world they're of less and less importance as you ascend the food chain.

      --

      --

      --
      There is no premature anti-fascism. -Ernest Hemingway
    3. Re:It all boils down to this:can you program? by wrook · · Score: 2

      I don't want to sound overly harsh, but this comment is classic in many ways. It is exceptionally common and exceptionally wrong. The premise is, "I live in a disfunctional family. No-one knows how to communicate. Therefore, communication is an utterly useless skill". Communication is not useless, it is merely useless in this particular environment. If you fix the environment, you find that the previously useless skills become your best assets.

      If you are working in an environment where you are always rushing, where computing theory has no place because there is no time to think, then you are working in a disfunctional system.

      I believe that this type of environment is common in the industry for 4 reasons.

      1. Get rich quick syndrome. Venture capitalists want to see a 20 to 1 return on investment on high tech firms. Breaking even is seen as a failure. The goal is to find a rapidly growing niche market and to dominate it. Quality products are secondary to market penetration. Features are everything (sell the sizzle, not the steak).

      2. First to the market wins syndrome. For some reason being first to the market is seen as essential to obtaining market dominance. It is irrelevant that there are virtually no software products where the first to the market maintains dominance for the long term (I dare anyone to give me an example -- I can't think of any). Time to market is seen as more important than quality.

      3. Like rewards like. If you work on a project, deliver tons on functionality and get it out the door really fast, you will be promoted. In fact, most people are promoted well before anyone realizes that their code was complete crap. In some cases, they may even get promoted before the product ships. These people maintain and extend the disfunctional environment (they promote the environment that made them successful).

      4. A legacy of ignorance. People are not taught any better. How many people got out of school looking forward to the day when they finally get to work with fantastic people in industry. How many people fantasized about how much they would learn from software gurus that they would meet in their career. How many people were crushed when they got out of school and found semi-literate neandrethals (sp?) hacking away in the most bizarre ways. How many were disappointed to find that even if you could find one or two guys that knew what they were doing, that they couldn't (or wouldn't) teach anything to you. In a world where the experienced can't teach the newbies, everyone has to learn from first principles. You can't build on the experience of others. Only the very best people become at all competant. The vast majority struggle in valiant ineptitude.

      Confusious said that if society is corrupt, then your must remove yourself from society. This is perhaps a bit extreme. However, you *can* change the world one step at a time. Think globally, act locally. Grab a new person out of school and become their mentor. Teach them what you know. Take responsibility for your own code. Struggle with all your might to add a small bit of quality to *your* code. Advertise your success. Dare others to match it. Propose a project to your management where you take a commonly used product and enhance it (you'd think that we would eventually learn from East-Asian culture...).

      OK.... Enough ranting..... Maybe I should write a book :-)

    4. Re:It all boils down to this:can you program? by WaistcoatMark · · Score: 1

      2. First to the market wins syndrome. For some reason being first to the market is seen as essential to obtaining market dominance. It is irrelevant that there are virtually no software products where the first to the market maintains dominance for the long term (I dare anyone to give me an example -- I can't think of any).

      I believe Word for Windows was the first Windows word processor and has done quite well since. Then again it did slip 1.5 years while they laboured to get it right. In general, however, I agree with you (as I imagine the author of VisiCalc might)

  16. Bah, humbug by joss · · Score: 2

    I have a degree in CS, 10 years professional experience, and I think this is misguided. Try as hard as you like, software just isn't like other "professions". Of course experience counts, but trying to become like other professions with certificates and other bullshit is the worst thing we could do. Professional bodies exist to monopolise fields of study and provide a bar to entry. Organisations like the American medical association and the Bar council are just protection rackets. There only purpose is to raise the salaries of those in the club, not "protect the consumer". We should irradicate them, not copy them.

    Writing great software has more in common with writing poetry than law, medicine or even civil engineering. You can stuff huge organisations with "professionals" following "best practice engineering" and they'll still get trampled into the dust by a couple of smart kids working in a garage somewhere. I'm not saying you should hire any old moron to write software, but the trick is to have clueful (developer) managers and they can make up their own mind as to who to hire. Organisations *should* have the right to hire the neighbourhood children to write software, just like they have the right to go bankcrupt.

    If you want to see something sensible on programming check out the programmers stone at http://www.melloworld.com/reciprocality

    --
    http://rareformnewmedia.com/
    1. Re:Bah, humbug by jacobm · · Score: 2
      Professional bodies exist to monopolise fields of study and provide a bar to entry. Organisations like the American medical association and the Bar council are just protection rackets. There only purpose is to raise the salaries of those in the club, not "protect the consumer". We should irradicate them, not copy them.


      That's pretty harsh. Would you trust your life to a doctor who didn't know what they were doing? Would you want the poor who can't afford the likes of Johnny Cochran to try their luck with public attourneys who might well not know the law well enough to see an obvious and powerful defense for their clients? More to the point, would you want to drive your car over a bridge that was designed by a guy who thought he would like to try his hand at bridge building and who gave the city the lowest quote?

      Computers don't usually have as high profiles as doctors or lawyers, but it would be pretty naive to think that their flawless operation is not increasingly critical to first-world society. (Can you imagine what would happen if the software that runs Wall Street turned out to have a bug that misreported stock prices in strange circumstances? Just a teensy example.) And Microsoft has a built-in feature in every copy of Windows that says, in white letters on a blue background, "Market forces do not ensure high-quality programming."

      It is increasingly important that we not only have high-functionality programs, but also that we have highly correct programs. Unfortunately, it is obvious that the industry doesn't have a good way to produce them. Does that mean that an equivalent of the bar is required for programmers? I dunno. I sort of like the idea, myself, but I would be happy with any system that ensured that all software products that were sold had at least a reasonable guarantee that they were correct.
      --
      -jacob
    2. Re:Bah, humbug by joss · · Score: 2

      Would I trust my life to a doctor who didn't know what they were doing ?

      I would prefer not to. Unfortunately, I don't have any choice, since once the guy has qualified as a doctor, he can get away with gross incompetence for decades. The "ethics" of his "profession" mean that the worst thing a doctor can do is point out that another doctor is incompetent.

      > Would you want the poor who can't afford the likes of Johnny Cochran to try their luck with public attourneys who might well not know the law well enough to see an obvious and powerful defense for their clients?

      Exactly my point. Profession qualifications don't make you competent, they make you complacent. They take away the power of ordinary people to challenge the priesthood. You have no right to an opinion without the professional acreditation. Watch "Lorenzo's oil" sometime.

      The law is just the worst example of this. As an example, you are incapable *by definition* of determining whether you are infringing on a patent unless you are a qualified patent attorney. You could be the worlds leading expert on something, but your firm won't let you look at the patents in your field because this ruling means that there is no possible upside in doing so.

      --
      http://rareformnewmedia.com/
    3. Re:Bah, humbug by chadmulligan · · Score: 1
      Professional bodies exist to monopolise fields of study and provide a bar to entry. Organisations like the American medical association and the Bar council are just protection rackets.

      Nobel-prizewinning economist Milton Friedman makes a similar, and very well reasoned, argument in his book "Free to Choose" (co-written with his wife Rose D. Friedman). The only profession for which he reluctantly concedes that a professional organization might be unavoidable is for MD's.

      I agree with him that most such organizations are perfectly dispensable and over time mutate into money-gathering and lobbying organizations, paying only lip-service to their original goals. There have been examples galore of licensed MD's who have killed their patients, licensed engineers who built highrises that tumbled down and killed scores of people, licensed lawyers who've commited all sorts of imbecilities... the notion that these organizations are per se able to guarantee the professional competence of their associates is just wishful thinking.

      I've also had several personal run-ins with such people. Over 25 years ago (and in another country), when I co-founded a software consulting company, we were pestered for over a year by a Business Administrator's Association, which claimed that we had to pay dues, employ at least two licensed administrators, and so forth, because according to their understanding "software" necessarily meant "administrative software" like payroll and accounting, and therefore fell exclusively under their charter... argumenting that we did systems software (of which they'd never even heard of) was to no avail. We let several thousand buck's worth of unpaid fees and penalties pile up and ignored them until they went away.

      IMHO the solution is showing competence. If an engineer, architect, or programmer can show me solid, well-executed work, I don't care if he/she's certified or not - heck, I don't care if she/he/it's got a diploma, even.

    4. Re:Bah, humbug by jacobm · · Score: 2

      Ah, I think I see where our disagreement lies. I am not defending boards per se as opposed to any other method of ensuring high quality and consumer protection. I think that a licensing organization is better than nothing at all (a.k.a. "total free market," in my opinion a really dangerous idea for areas in which it is difficult to tell whether a craftsman is competent or not before something bad happens- law, medicine, civil engineering, software engineering are all examples of that), which is what you seemed to be advocating. However, I don't mean to imply that a board is infallible or that it's the best possible way to protect consumers. If you (or anyone) has a better idea, I'd love to hear it.

      --
      -jacob
    5. Re:Bah, humbug by Remote · · Score: 1

      How about this:

      In Brazil we don't have the profession that is called optometrist. Such work is done by oftalmologists only, that's the law. So, I went to the doctor's office this morning just to learn that my glasses are still exactly what I need, after 2 years since my last visit. She did a comprehensive examination, ok, but I wasn't feeling anything wrong when I got in there. I expressed my feelings about the need to go to a doctor to have e prescription for glasses and her answer was much in the lines of "would you trust your eyes to someone else other than a medical doctor?", so I saw there was no point mentioning that *that* is precisely what is done in societies where doctors don't have such a strong lobby. I have a friend who is an optical technician, perfectly capable of doing these things, but she's not allowed, so she helps clients choose frames!

      OTOH, I have a degree in Business Administration, and I earn a living as a tax auditor. Guess who wrote the system for the company in charge of controlling parking tickets in the town I live...

      Very personal and punctual examples indeed, but that analogy of "trusting one's life to an incompetent person" as having to do with writing good software = being a member of some computer bar is just too exagerated. Sure, it has been expressed in this discussion more than once.

    6. Re:Bah, humbug by speek · · Score: 3

      I don't get your examples of the lawyers or the doctor. Are you suggesting that it's the certification that guarantees your doctor is competent? Poor people do have to use public attourneys, so I'm not at all sure what your saying there.

      Your bridge example is more interesting, becuase it gets more to the core of the issue. It's a better comparison to software. Doctoring and lawyering are performance skills, and thus, the skill of the person involved is the only measure to use to predict the quality of the outcome.

      A bridge, however - you can test it and see how well it works. You can go over it's design to understand it's theoretical limits. Who made the bridge is irrelevant at this point (except that the honesty of the person is involved in as far as the documented design might not have been followed).

      This is even more true with software. It can be tested and studied, and there are no hidden elements. It is not important who wrote it, it is only important who signs off on a seal of approval for it.

      Therefore, license software, not software developers. Companies can become certifiers and guarantors of software, as a business model. Kind of like Red Hat with Linux - they service it, and essentially lay themselves open for blame for it's failures, in exchange for money

      --
      First, make it work, then make it right, then make it fast, then, make it bloated!
    7. Re: Bah, humbug by smurfi · · Score: 1
      You can go over its design to understand its theoretical limits. (Note the missing apostropes... :-/)

      "Tacoma Narrows", 1940-11-07. In other words, no you can't, except in simple cases.

      The same thing applies to software. The good thing is, with software you can do a whole bunch of tests much more easily than with a complicated physical structure, or a medical problem for that matter. Extreme Programming, while somewhat extreme :-), has some things to say about this topic.

    8. Re: Bah, humbug by speek · · Score: 2

      Missing apostropes[sic]?

      Regarding the Tacoma Narrows, it's nice (note the apostrope[sic] where it belongs) to have a ready made example, but it doesn't invalidate my point. A license on the bridge builder wouldn't have (didn't?) made a difference. And you point out there wasn't anyway to know beforehand it would fail.

      The answer to that is, shit happens - you can't prevent all of it. What you want is recourse once it does happen, and licensing the software gives you that recourse. Licensing the programmer would be a less optimal solution.

      --
      First, make it work, then make it right, then make it fast, then, make it bloated!
  17. There are a lot of piss poor programmers by Greyfox · · Score: 2
    Back when I was in college, there were a lot of people who had never touched a computer before in the CS program. They were attracted by the sky high salaries of the profession and to them it would never be more than a job.

    I've found that even if you have no idea what you're doing, it's still quite easy to get a job somewhere. You can bluff your way through six months or a year an then bail and no one will question the short employment times because they're so common in this industry. The company goes out and hires another programmer and if they get lucky they find one who knows what he's doing and that programmer takes a look at the previous programmer's code, realizes that person was an idiot, and has to start the project from scratch. I've been that second programmer a number of times now.

    Compounding this problem are managers and recruiters whose expectations are often very unreasonable. They'll give you three to five programmers' worth of work and set impossible deadlines or they'll plunk you down in a completely unfamilar environment because you happened to mention that you looked sideways at the environment 10 years ago.

    Further compounding this problem is the fact that when you get into the "Real World" you find that they're still doing DOS and are lagging a decade behind the OSS community and educational institutions in coding practises and hardware. Several times I've wanted to completely rip out the environment we were working in and replace it with a nice clean Linux system and of course I didn't have the authority to do so.

    Lately I've decided that the first company to abandon all this crap will win, so I decided to hit the management track and carve out a small empire to demonstrate this. It'll be interesting to see if I can pull it off...

    --

    I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

  18. Programmers MUST learn design by Anonymous Coward · · Score: 0

    If programmers don't learn design, they will NEVER write anything of any value, and the bad software that they do produce will create troubles and inefficiencies that they can never begin to imagine.

  19. It CAN be helped. by Anonymous Coward · · Score: 0

    When a company hires a programmer, the programmer MUST be a designer. Programmers who are not designers should go find another job.

    1. Re:It CAN be helped. by Foogle · · Score: 1
      Blah Blah Blah -- you're missing the point. I'm not saying that a programmer can't be a designer. I'm saying that a programmer shouldn't the the designer of a program that he is writing himself. It leads to conflicts discussed above. Yes, it is possible. No, I don't recommend it if you have the manpower to spare.

      If I might suggest some reading on this subject. "The Inmates are Running the Asylum" is an excellent book by Alan Cooper. In it he does a truly wonderful job of discussing the concepts behind quality interface design, and task-designation.

      -----------

      "You can't shake the Devil's hand and say you're only kidding."

    2. Re:It CAN be helped. by Anonymous Coward · · Score: 0
      I think we all know what you're saying. The only problem is that it's wrong.

      Yes - some programmers are pathetic at interface design. Don't hire them. Hire the people that understand both design and implementation, and you get twice as much done. If they understand support as well, then you may even have a supportable product at the end of it.

    3. Re:It CAN be helped. by stimuli · · Score: 1
      I'm not saying that a programmer can't be a designer. I'm saying that a programmer shouldn't the the designer of a program that he is writing himself. It leads to conflicts discussed above.

      I can see this being a good idea for some teams on some projects, but I hardly think it should be universal. It is in the management of a project where the discrimination must be made, and we all know how that works.

    4. Re:It CAN be helped. by Foogle · · Score: 1
      I hardly think that makes me wrong. Sure, some programmers a lousy and yes, some of them are truly excellent. But like another response to my last post wrote, this is really a management issue. What if you don't have truly excellent programmers? Or you do, but they're swamped with work (programming hopefully). Most of the time it just makes sense to break your projects into teams, by talent and time.

      You get people working on what they're best at, and you get them doing it all the time. I'd much rather have excellent programmers programming and excellent designers designing than have a bunch of excellent people doing two things that maybe aren't their strongest skills.

      -----------

      "You can't shake the Devil's hand and say you're only kidding."

  20. Programming is NOT design, NOR is design a vision by Anonymous Coward · · Score: 0

    The only thing a program that compiles and links is a bunch of code that does not violate the rules of compiling and linking. Apparently you call that a design, per se. Well, no, it's not a design. I will not accede that a wonderful design can be impractical and cannot work. That is a shit design. A wonderful design is created hour by hour, day by day, and programmed as an ongoing extension to an extensible design. The PROCESS of good vision, design and coding is what happens about 3 percent of the time. They are inseparable and essential. Take any one away, even for a brief period, and the whole thing turns to shit.

  21. Should we emulate the engineering profession? by GoofyBoy · · Score: 1


    I just had this discussion with my sister a few nights ago. She is a fire protection engineer and uses her stamp on a weekly basis.

    There are many things wrong with the engineering profession. Many untrained (got their designation in the 50's) and unqualified (graduated in one field, works in another only exposure is on the job) engineering people. There is also the whole "closed, elite, old-boys-club society" of us vs. them ideology.

    There are many good parts to being in an organized, well-defined professional but you need more reasons than just "we are slowing down, we can promote the best now".

    Besides hasn't Slashdot already gone through this whole debate? (Project Managers should be licenced, how can you verify programs are correct, etc) (I would include a link but I'm just too lazy this morning. Its my unprofessional attitude.)

    --
    The surprise isn't how often we make bad choices; the surprise is how seldom they defeat us.
  22. Relationship to Open Source? by Dave+W · · Score: 1

    I have 3 of Steve's books and have found them all helpful. But it seems to me that this latest one is much less relevant to where I find myself now.

    I think that the Open Source/Free Software methodology challenges a lot of software engineering as it would appear this book is promoting.

    How can software engineering handle the talent of many open source programmers many of whom are unqualified and very young? Yet the os/fs methods work well.

    Products produced using os/fs methods can appear very quickly, can change rapidly (including major design changes - see KDE and it's use of CORBA for communication within a single machine as one example). Yet these same products typically have a much longer life than commercial products. How many commercial editors have been going as long as Emacs (and are still alive and well)?

    It seems there has been a progression towards control and a "right way" in Steve's books which seems a pity. I would have much rather have seen a book on Quality Development to match Rapid Development. Such a book could have provided lessions for both os/fs and closed source programmers - there are things both can learn from the other as well as from best practice in their own camp.

    Dave

    1. Re:Relationship to Open Source? by John+Ratke · · Score: 1
      Good points. I don't think there really is much relationship between SE and Open Source.

      As an individual, I could use some SE methods to develop an Open Source app, but who does that? No one I know of. I actually think that it might work and produce some good quality stuff if they did. Especially if all the people working on it have access to the same tools.

      One important issue is the tools. KDevelop may be nice, but how does it help you do software engineering? It doesn't. What we need is quality CASE tools. ArgoUML shows promise but is lacking a lot of features and is still early on in its development. Together/J is pretty nice, but you need the commercial version to get all the features.

      I have never seen an open source app that deals with requirements and design documentation. The thing we like to be able to do in industry is trace (follow) requirements to their implementation in design and code.

      And then there's version control. CVS doesn't have all the features of something like ClearCase, but bitkeeper is looking good.

      Why does so much commercial software suck when compared to open source? Probably lots of reasons. Market timing pressures, poorly documented legacy code, bad management. But maybe the most important one is lack of large scale peer review. In open source there are a lot of fresh faces who are free to come in and say:

      "This design sucks!! We should scrap it and start over and we will come up with something better. Fine, i'll do it myself in a few hours."
      You'll almost never see something like that said (out loud) in industry.
  23. Software Engineering Economics by kip3f · · Score: 1
    Most programmers today are employees, producing closed source commercial programs. Their job is not to write a perfect program, but to maximize some function like functionality / ( bugginess * development time). Good software is nice, but never forget that, for most commercial software, the only goal is increasing the companies revenue.

    Free software tends to suck less, but only the projects that are actually being worked on. If nobody fixes the bugs, the bugs don't get fixed.

    ps: Software Engineering Economics is the title of a book by Barry Boehm. I haven't read it yet, but I intend to.
    --
    My opinions may have changed, but not the fact that I am right.

    --
    ****Gfx Scrollbar Special case hit!!*****
  24. Commercial Software Developers are a Microcosm by cshotton · · Score: 4
    It's never surprising to see yet another attempt to herd the cats that are software engineers towards the greater good that is structured design. And there doesn't seem to be anything particularly interesting or new in this iteration either.

    The one important flaw to note about this book is that it treats software engineering as if the lone example of its practice is in the offices of commercial, shrinkwrapped software vendors. It may surprise a lot of people to realize that the total software sales of commercial software products (including all of Microsoft's products, Oracle's, and SAP's) are only a small, small percentage of the amount paid for custom software solutions for industry, government, and the military.

    In these non-commercial arenas, strong software engineering disciplines have been the norm for decades. Good design, long development cycles, and carefully engineered software are an absolute requirement when human lives are involved (air traffic control, avionics, flight control systems, manned space flight applications, command and control systems) or extremely expensive hardware is affected (factory production lines, communication satellites, telephone systems, railroads, etc.)

    To lump all software developers under the umbrella of the frenzied exercise that passes for software "engineering" in the commercial marketplace is a myopic view at best and is pretty much wrong. Yes, commercial software developers could do a better job. But market pressures don't allow for this, and frankly, they never will. So ranting about making the engineers do things "better" without addressing the market pressures is a waste of effort.

    Until the tools, processes, and automation that surround software engineering improve beyond handwritten code in a text editor, this situation cannot improve. If the market continues to apply innovative pressure on the developers, the only way to catch up is to give developers a higher level platform to develop from. Twiddling around in the O/S, pushing bits around in a frame buffer, and spewing characters to and from a hard disk are far, far below the level where software engineering should be practiced, yet that's what most engineers have to suffer through given the relatively primative state of operating systems and development tools.

    It's like trying to build a skyscraper with a hammer and a saw.

    --

    Shut up and eat your vegetables!!!
  25. Bravo! by Anonymous Coward · · Score: 0
    This quote in particular is worth repeating, even though you just read it:

    You can stuff huge organisations with "professionals" following "best practice engineering" and they'll still get trampled into the dust by a couple of smart kids working in a garage somewhere.

    We need to remember that the field of software, at least for the forseeable future, is so competitive that results are going to be the only metric of use.

    1. Re:Bravo! by Doctor+Memory · · Score: 1

      You can stuff huge organisations with "professionals" following "best practice engineering" and they'll still get trampled into the dust by a couple of smart kids working in a garage somewhere.

      *snort!* What a crock of bullshit. I'd like to see "a couple of smart kids" crank out a few million lines of code to compete with something like SAP R3, the SABRE airline reservation system, or any other significant piece of software. Give them an impossible deadline and a bunch of conflicting user requirements (none of which are any fun to write solutions for) and tell me what you think they'll come up with. Sure, you can find dozens (if not hundreds) of small start-up companies who serve vertical markets (e.g. web page design) that could easily be run by a couple of smart kids, but don't "kid" yourself that you're going to find one of those companies producing a monster ERP system.

      --
      Just junk food for thought...
    2. Re:Bravo! by joss · · Score: 2

      They don't crank out a few million lines. They crank out a few thousand that make the million obsolete.

      OK, so nobody is going to rewrite SAP on their own, but SABRE I'm not so sure about. Almost all significant new developements comes from individuals or pairs of programmers. It happens all the time.

      Unix - written by Ken Thompson and Dennis Ritchie, while 100s of programmers worked on Multics, and 1000s worked on MVCS.

      dbx - the best debugger of it's time written by 1 guy, while 100s of people worked on xdb. It was not only more powerful, it had more functions.

      Borland, Lotus, Linux, even fucking microsoft. Later on large organisations grow around the original innovation, but the *significant* software does NOT come from large teams.

      --
      http://rareformnewmedia.com/
    3. Re:Bravo! by SETY · · Score: 1

      Totally agree.
      Maybe this will change in the future.
      So it all comes back to the question of whether taking Software engineering professional is the answer.
      I think we could compare CS and EE, there are alot of people that know EE who aren't licensed and know it better than many EE's. They come up with lots of cool little tricks/gadgets. They don't design the next pentium though.
      So maybe a professional industry can co-exist with gargage hackers.......

  26. Licenses and certification by speek · · Score: 1

    I haven't read the book, but I want to respond to the idea that software needs licensing and certification to improve. It's bull. Getting a license or certificate proves nothing except that you could get a license and certificate.

    It provides for the illusion of competence that lets a big faceless organization hire a consultant they know nothing about, but they'll have a certificate to point to to justify the decision.

    It allows those with licenses to arbitrarily charge more for their services than those without, regardless of actual competence.

    It requires money to enter the profession - licensing and certification always costs money. Lots of money in some cases.

    This guy works for a software consulting firm, right? Big surprise there. He's sick of seeing incompetence compete successfully against him, and thinks he can simply "outlaw" it by requiring licensing. Licensing never guarantees competence. Are teachers who are certified better than those who aren't?

    Licensing is an integral strategy of the closed-source, proprietary, non-free model. Only doctors who are accredited are accepted by insurance companies - thus no "open-source" doctors. Open lawyering is just plain illegal. Home teaching, interestingly enough is legal, but culturally frowned upon. Licensing programmers will result in "accredited" software. It's an way to shut out the OSS developers, and a justification for business to never use OSS software.

    --
    First, make it work, then make it right, then make it fast, then, make it bloated!
    1. Re:Licenses and certification by Jonathan+Blocksom · · Score: 1

      First off, read the book (RTFB?). McConnell addresses most of your concerns. Secondly, what makes you think that a licensed software engineer wouldn't write open source software? When licensing does become common practice, I would expect that IBM, Red Hat and other large open source companies would employ licensed software engineers to work on their products. My company believes there is a place for both commercial and open source software in the world, and we also are committed to fostering an environment where mature software engineering practices are the norm. I don't see any reason why we can't apply those practices to both are open and closed source products.

    2. Re:Licenses and certification by speek · · Score: 2

      Of course a licensed programmer might write open source software. But that wouldn't make that software "licensed". Of course there's a place for both open-source and proprietary. My main point is that licensing doesn't guarantee anything about quality, but that's exactly what it will be advertised as. Software from a "licensed" developer will be automatically billed as better than from a non-licensed, and they'll charge more for it. The government will outlaw non-licensed code in certain areas. And that list of outlawed areas will inevitably grow. Amateur programmers will get slowly squeezed out.

      --
      First, make it work, then make it right, then make it fast, then, make it bloated!
  27. Software Engineering by Harri · · Score: 1

    When I did Soft Eng courses as part of my CS degree, I was left feeling very strongly that I had learnt nothing at all. All the talk about waterfall models, spiral models, and object models had left me none the wiser about a sensible way to design a real live large project. At the time I concluded that the only way to learn SE was to watch it actually in progress. So, is this the case or is it that:

    a) My lecturers were just uninspiring
    OR
    b) The current state of SE is such a mess that there is _nothing to teach_ apart from how to get it wrong like everyone else does. In twenty year's time my children will actually learn things from their SE courses. Which is what this book seems to be saying.

    Did anyone feel that the stuff they learnt in Software Engineering courses actually helped them engineer software?

    1. Re:Software Engineering by Anonymous Coward · · Score: 0
      Never took a SE course, but I had the opportunity to observe and participate in a relatively large software development program. The managers were more interested in the nuances in the relative merits/risks of the waterfall vs. spiral development models. For a while it appeared that the most important things was for the managers to generate the requirement docs, while the programmers just wanted to check off the requirements one by one.

      However, there was one fatal flaw. Noone was listening to the eventual end-user of the system. It was only very late in the development process that someone finally observed how the end-user actually did their work. The result was a very inefficient and inoperable set of programs that ultimately the end-user rejected.

      I don't work on large scale projects. However, whenever I start to develop some new program, I also check out how the end-user does his/her job. Usually, I can recognize some tasks that can be easily automated or made much more efficient.

    2. Re:Software Engineering by Anonymous Coward · · Score: 0
      That's pretty much the same impression I got from my software engineering course, with one exception. Of all the complicated development ideas we were expected to study, there was ONE SINGLE TRICK which had actually been somewhat scientifically proven to improve productivity! Everything else was just someone thinking that this seems reasonable so this is how people should be building software, without a shred of evidence to back it up.

      By the by, the single proven thing was peer review of code.

  28. Dammit Malda, fix /. already by kip3f · · Score: 1

    http://www.amazon.com/exec/obidos/ASIN/0138221227/ qid=948810740/sr=1-3/104-3114364-8512462

    is the link. I entered it as: Anchorname. SLASH translated it to

    Software Engineering Economics. Apparently it can't deal with a newline between the first quote and the =. This bug probably occured because perl makes it much easier to deal with HTML on a line by line basis than with a proper HTML parser.

    --
    My opinions may have changed, but not the fact that I am right.

    --
    ****Gfx Scrollbar Special case hit!!*****
  29. C: smaller,faster is still better for "platforms" by rambone · · Score: 1
    C will always be the language of choice for platforms (RBDMS, OSs, HTTP servers), while the other languages you mention are adequate for extending platforms and scripting.

    Smalltalk can probably be written off, and I doubt Dylan will ever get off of the ground. Python, Java and Perl are your best candidates in this field.

  30. I dunno by ch-chuck · · Score: 2

    It depends on whether we want to have accountability - of software to run airport baggage systems (refering to an oldish Scientific American Article called "The Software Crisis" which featured the Denver Airport programming disaster) - not to mention real mission critical systems like hospital life support, nuke plants, and my payroll. The SciAm 'solution' IS adopting 'formal methodes', at least for critical sub-systems - which basically means VERY expensive, time consuming, and very well thought out, kinda like the software in the space program - it may not be 'latest and greatest' but it's GOT to work, particularly for wo/man'd flights. I'm not sure I can trust the local whiz-kid or starving artist to fulfill that role. An artist or garage band can royally screw up and the worst that happens is nobody buys their art - but I sure wouldn't want a surgeon who has to go into a trance before cutting into the old appendix!
    Licensing and professional organizations may SEEM like just an exclusive club but I think they add a sense of professionalism for critical jobs - they may still screw up, but then they can be 'disbarred' and booted out, held accountable - so we don't end up with just anybody claiming to be a power engineer, and having their system crash and kill thousands with the only repurcussions being 'opps! Sorry about that!'. But that's pretty much the state of the art with contemporary software licensing - the consumer bears the entire risk of product defect liability. Read any EULA. I'd like to see software where defects mean someone's head rolls on the production end! We used to call it "bet your job".

    The Scarlet Pimpernel

    --
    try { do() || do_not(); } catch (JediException err) { yoda(err); }
  31. It doesn't have to be that way. by Jim+Hammond · · Score: 2
    Unlike this book, I foresee an increasingly dynamic and profitable future if the government continues to allow the naturally exponential pace of innovation. Any government involvement would inevitably be a form of order-by-means-of-stagnation.

    However, stuff happens, and any problem at all is a chance for a politican to champion the interests of the people, and just as with so many other fields, we would never realize the wonderous future we had given up to benefit the careers of politicians and the fears of bureaucrats.

    As for why there are some problems:

    The benefits of good design such as extensibility, flexibility, and reusability seem less important now that a monkey can rapidly develop software with a slick interface using today's development tools. If software needs change, it is not such a big deal to write new software.

    Most businesses are also ignorant of any critical and yet not blatantly obvious requirements such as security, scalability, data integrity, and reliability.

    The way that this issue will be resolved in a free market is that the more far sighted companies, who are able to build on their past technology (like MS), will eventually out compete those who want it ALL and want it all NOW. Another way that competition will solve this problem is that companies will develop tools that make it easier to develop software that has a good architecture. Such technologies are currently known as components combined with application servers. Two examples are COM+ and EJB/NAS. Yet a third free market measure is certification tests like those given by Sun and MS.

    The fourth, and perhaps the best argument against government involvement, is reputation. The reputations of companies and individual developers will become public knowledge given the Internet, and thus accountability will modify their behavior. Government on the other hand is not accountable - try to stop paying taxes - try to elect someone who is not a Republican or Democrat.

  32. moderate that one up! by urge · · Score: 1

    I am contatly defending the craft of programming to my "artistic" friends who seem to have all decided that since what I make is useful and involves (eek!) math, it must obviously not be "creative". Looks like I have another Steve McConnel book to buy. If it's even close to as good as Code Complete, it's well worth it.

  33. Nobody wants a software engineer by bubbha · · Score: 4

    As a software consultant I change jobs somewhat frequently so I go to lots of job interviews and must stay in touch with what skills the industry is looking for. Invariably, when I'm asked to provide information on my work experience, nobody wants to know what aspects of the Capability Maturity Model I've found to be most useful in ensuring project success, what design and documentation techniques lead to testable event-driven user interfaces, or asked to discuss performance engineering trade-offs between a databases' conceptual model, logical model, and physical model. Nope, their requirements only want to know what programming languages, operating systems, and application types I've worked on. And they want the latest versions of this stuff as well. If you stay on and contribute to the successful conclusion multi-year project from start to finish, you will be really helping your customer but potentially cutting your own throat. And what's really ironic is that the worst programmers and engineers in this profession change jobs the most frequently and are therefor constantly exposed to the latest technology. I easily spend 10-20 hours a week and thousands of dollars a year (my book bill alone is approx. $2000/yr) keeping up with new technology. And it doesn't help when software tool vendors hawk their wares by duping IS management into thinking that using their IDE or modeling tool or methodology causes good designs, good code, good documentation to pop out the other end. A fool with a tool is still a fool. It still takes smart people doing smart things to make projects succeed. And until IS management understands this its going to be business as usual. And you will know when the change has taken place when the posted job requirements call for engineering skills rather that tool skills. Lets face it, a decent programmer can learn VB or Perl pretty quickly. But building reliable, scalable, distributed object-based systems on time and under budget ... that's tough.

    --
    I want to be alone with the sandwich
  34. Why the plug for ThinkGeek? by Danborg · · Score: 1

    I was rather disturbed to see the plug for ThinkGeek at the end of the review. I was even more disturbed when I found out the book is $5 cheaper over at Amazon.com.

    I'd prefer not to see endorsements for specific vendors as a part of a book review. But if you have to do it, at least pick the vendor with the lowest price!

    Thank you.

    1. Re:Why the plug for ThinkGeek? by irix · · Score: 2

      Becuase ThinkGeek is owned by Andover.net - that's why.

      Who said that Andover buying Slashdot never changed anything.

      --

      Do you even know anything about perl? -- AC Replying to Tom Christiansen post.
    2. Re:Why the plug for ThinkGeek? by drivers · · Score: 2

      Because most of us are boycotting Amazon.
      http://linuxtoday.com/stories/13652.html

  35. Designing Software by mprovost · · Score: 2
    In my experience it is very tough to get taken seriously as a professional by others because the whole world has a bad attitude about programmers. I'm the database admin for a pretty good sized architectural firm so I can see this first hand. Here are people that produce incredibly detailed drawings and multivolume specicifications for even the smallest project. Why? Because every drawing has to be sealed by a state-approved architect and that architect is liable for those drawings.

    So these people should be used to a very meticulous way of designing things - but when it comes to a computer project it might as well be something sketched on a napkin. It is assumed that computer people don't need to have something designed and specified ahead of time. And computer people don't care because you can always quit and find a new job and who cares if the thing has bugs.

    I guess the argument could be made that architects and engineers and professionals like that design things that can have life or death consequences. But these days how can you separate computers from any job? The engineer designing a new car is relying on crash simulation software designed by some untrained programmer somewhere. If the simulation produces bogus results, the car is designed and kills people, who is responsible, the car engineer or the software engineer? What if a shoddy print driver in Autocad prints out incorrect symbols on a blueprint and the roof falls in? I think to say that computer programs don't matter is simplifying things too much.

    1. Re:Designing Software by Anonymous Coward · · Score: 0

      Well, architecture is pretty standardized, because blueprints are pretty standardized, contractors are trained to read their specific subplans and implement them accordingly, because the plans are standardized, etc.

      Maybe this would work with software if the only approved software engineering environment was something like:

      UML specification.
      Code implementation in Java 1.2, test against a specific JVM.
      etc.,

      ...but it's not. What would you do if you were a Java development shop and the approving authority only liked VB, and spanked down your work because *THEY* couldn't verify it?

      Engineering works in the same way. There are big books of the Approved Calculations, tables of material behaviors, design limitations, load factors for various structures, etc., that are "official", that engineers use. The mathematical techniques and processes are standardized, etc. The people doing the approval know the standard ways of doing things, so anything not standard generally stands out like a sore thumb, etc.

      The usual problems happen with engineering when limits are too thin so that the built-in variations in things cause point failures, rules and procedures are ignored, or proper testing is not done. And there is also a good base of forensic engineering and techniques to figure out why bad things happen. Is there really any of this for software? Not really. Is this kind of structure really possible to expect for software development?

      Software development is like city "planning" in Puerto Nuevo, B.C., Mexico. If you've been there, there are no standards. Every sidewalk is different (if it exists). Different widths, curb heights, etc. 4 different implementations of the Ortega restaurant, for example. But the rock lobster sure is good there...and it's a cool place to go to get a little anarchy and chaos with good food into your system.

  36. Job Description: Information Infrastructure Design by LL · · Score: 1

    What is software engineering? Any 10 year old can learn to program (and many probably have) but are we trying to define the job in too narrow a fashion. For example, if we had to use a real-world analogy, would an IT career be caompred with the construction industry, the medical industry or the creative arts industry?

    Construction:
    Some companies design IP components (bricks), other integrators (builders) bang them together along with necessary hardware, and if your lucky, an inspector (QA) comes along and declares the edifice adequate to live in (guarenteed not to crash within 30 days or your money back :-) )

    Medical:
    The consultant rolls along, eyeballs the requirements, then searches the black bag for the magic pill based on skill of diagnostics and brain-washing ... err ... training. If the problem is too complicated, iti s refered to a specialist and they can arrange for major surgery with this top notch indian team.

    Creative Arts:
    A code scultor imagines this fantastic piece of language/world-builder which will do unimaginable things not possible through any other application. By enlisting the help of others and displaying it in public galleries, the work (though a bit fragile) eventually attracts a sponser who agrees to pay for the completion in return for the rights to make cheap knock-down copies in china.

    While somewhat tounge in cheek, I suspect people need to think about what is really design. Essentially software is the codification and expression of human capabilities so it does have creative aspects but then once the general technique is mastered, it requires engineering discipline to propagate and train the next generation as well as the simple documentation so that DIY builders can assemble it at low cost.

    There probably are a whole raft of specialisation that could exist, design, maintainer (sys-admin), inspector (auditor), etc ... Perhaps over time, IT will become as big a career option as medicine and the allied health services sector. However, it would be nice to have professionalism recognised in some standardised official way to reassure customers/clients they're not getting done over with shoddy work.

    LL

  37. Degrees are meaningless by wboatman · · Score: 2

    Programming is all about attention to detail, and knowing the results of your changes. Based on my experience, that isn't taught in school. Probably because the schools can't or won't assign large, team based projects to give students some real experience.

    Started work in a shop that is in the medical industry. Since they won't pay well, they get the people that are willing to work below scale. We started with a COTS database package, and it is utter crap. It works more by 'magic' than by design.

    The original programmers would do things like open a record set, count the number of rows until they found a match for the other key, and use that counter as meaningful data elsewhere. God forbid that the orignial record set would change.

    Or the programmer that said 'oh, I thought that might happen' after I spent all day digging through his code to find out why it didn't work after his last change.

    Nevermind that half the bugs fixed have side affects because nobody really understands how the system works, or why global variables are a bad thing.

    Nobody here knows how to test to see if the code works, no one knows how to get real requirements, no one knows how to write code that does error trapping. I've spent 5 months trying to get management to buy into a peer review or at least a design review so that we can get out of a continual maintenance mode. Of course that would eliminate interfaces with 30 parameters, most of them named product1, product2, product3

    No one else can understand why I spend 3 days writing code, then a week writing the test script, then another week writing all of the documentation. Oddly enough, they can't understand why I don't have to keep going back to fix my code. Hmm, wonder if the testing and the lack of bugs are related.

    Sure glad I bothered to finish my degree in CS. Then I'd be as clueless as all the degreed people (some with Ph.D's) I've had to babysit during my career.

  38. Programmers vs. Engineers by SheldonYoung · · Score: 2

    For good software engineering practices to be adopted, I see one large hurdle. Everybody thinks Software Engineer == Programmer.

    Programmers are the work-horses of the industry. They are the ones in the trench typing the code to get the daily jobs done. Perl is their friend.

    Software Engineers are the ones who build large systems, they spend three-quarters of their time on design and review. This is the only acceptible way to build good large systems that aren't Crap. Perl is usually not their friend.

    The problem I see is that most of Management assumes a Programmer can product a beyond-small sized program as good as a Software Engineer in less time. The Engineer will take 6 months to build a elegant system that scales well, and requires little maintenance in the future. The Programmer can do it in 4 month, but it will require a lot of maintenance and shoe-horning in the future.

    Which one is better for the job? It depends, but in general Programmers are great at small one-off systems. The Software Engineer knows that true small one-off systems are very rare.

    The Kernel Hacker is curiuos mix of Software Engineer and Programmer.

  39. OSS Red Herring by twit · · Score: 2

    Comparing OSS and a need for licensing (and there is a need) is a huge red herring. The OSS process is intended to produce maintainable, repairable, and reusable code; who writes the code, on the other hand, is of no concern to the process. It exists whether written by rank amateurs or seasoned professionals. Thus a move towards licensure is neither pro- nor anti-OSS.

    However, there are cases where who writes, or at least who signs off on the code is a concern. For example, industrial or other mission-critical software. Reputation may presently be sufficient measure, but over time a quantitative, rather than a qualitative, measure is required.

    Licensing is chiefly a matter of lawyer-speak rather than a guarantee of competence (and any manager who expects otherwise is an idiot). This doesn't make it somehow unfair; licensure protects both the developer/engineer and the client through limits on liability and collective organization of developers/engineers. Bringing this back to OSS, any amount of code may be reused or appropriated from an OSS project; what matters is where you can lay the blame for project failure.

    On the other hand, I worked as an electrical designer and the act of programming (PLC's, but still programming) was frowned upon by the old style EE's (and perhaps frowned is a nice way to say it). The attempt to bring software development into the engineering field can be viewed, and justly, as a power grab by the engineering profession.

    I suggest another form of licensing, where a counterpart to the professional engineer's act (modify this as required for your jurisdiction) is enacted. This should give licensed programmers certain limits to professional liability, the right to organize and accredit programs, and a clearly stated purview for software engineering.

    I don't, however, think that software engineering should become an exclusive profession with reserved duties, like many professions have become. Programming as an act is too broad for this, and the act of programming is certainly broadly distributed enough that anyone should be able to try their hand at it. With the rapid influx of computers into our daily lives, software should be written by all and sundry, most of all by the people who need them, and professional sw engineers should be only priviledged where absolutely necessary.

    --

    --

    --
    There is no premature anti-fascism. -Ernest Hemingway
    1. Re:OSS Red Herring by speek · · Score: 2

      Comparing OSS and a need for licensing (and there is a need) is a huge red herring. The OSS process is intended to produce maintainable, repairable, and reusable code; who writes the code, on the other hand, is of no concern to the process. It exists whether written by rank amateurs or seasoned professionals. Thus a move towards licensure is neither pro- nor anti-OSS.

      It is anti-OSS the moment the government passes a regulation requiring certain types of software systems (such as medical) be from "licensed" programmers. The list of such regulations will inevitably grow as time goes on. So, I very much disagree with you here.

      However, there are cases where who writes, or at least who signs off on the code is a concern.

      No, who writes the software is of no concern - ever. Who takes responsibility for it is what you're referring to. That's why Red Hat can be a money-making business. They sell service for Linux. They place themselves in blames way in return for money. Linux doesn't work for you? Blame Red Hat, and make them fix it.

      Licensing is chiefly a matter of lawyer-speak...

      Yes, true. That's why I think it's the wrong tool for the job. Because Licensing, in practice, is interpretted as a quality issue, not a lawyer/legal issue. Licensing doesn't prevent people from dying from bad medical software - it gives an outlet for blame and compensation.

      Let me suggest an alternative: license software instead of people. A company sells service regarding a peice of software. They have tested the software, studied it, and pronounced it "good". Good enough to make money on anyway and not get bankrupted by its failures. Now you've gotten to the core of the issue - is the software any good, and who is responsible for it. It could have been written by a hailstorm on my keyboard for all I care.

      Licensing, for this purpose, has everything to do with the software, and nothing to do with the developer. License software, not people. It'll work better, and it won't be a barrier to people.



      --
      First, make it work, then make it right, then make it fast, then, make it bloated!
  40. Excuse me? by jabber · · Score: 2

    The Bar Assoc and the Medical Board may protect their members, but they do a lot more.

    They provide assurance of the credentials of the people they accept into their ranks. Some quacks slip through the ranks, but many fewer than would be able to practice were these governing bodies not there. The alternative is federal management, and that bodes ill.

    I do not want a cheap, home-grown surgeon taking out my kid's appendix. I do not someone with little more than a strong opinion to represent me in a Court Of Law. I require proof of competency!

    In the consumer market, software will most likely remain Caveat Emptor, but I do not accept the future where missle guidance systems, air traffic control software, embedded pacemaker logic and other critical systems are written by self-taught lowest bidders.

    It is these fields where professional training, professional certification and licensing will debut. After that, we'll see professional designers offer higher-cost alternatives to commercial software - and some people will choose this over the quick and dirty versions.

    Now, I won't argue that experience counts for a great deal. It's crucial. This is BTW why people fresh out of medical school have to do residency - where their every move is scrutinized and approved before it becomes terminal (pun int).

    In mission critical, safety minded and heavy-financial application, where lives and big money is on the line, accountability is required. Even in many consumer goods markets, the sort of accountability and competency assurance that comes from having a Professional Engineer design the anti-lock brakes and air-bags is a Good Thing.

    --

    -- What you do today will cost you a day of your life.
  41. They ARE a programmer by UnknownSoldier · · Score: 1

    > Why then is a person who can write a 20 line C++ program, a programmer?

    What is the DEFINITION of programming?

    A person who writes a 20 line C++ program is an AMATUER or HOBBIEST. They may be good at it. They may not be. But they are STILL a programmer. No one ever said they were a professional software engineer with all the skills to design good programs.

    Why does this discussion have to end with symantics?

    1. Re:They ARE a programmer by Foogle · · Score: 1
      It's "Semantics" -- Symantec is a company.

      I'm sorry, I had to; the irony was just too thick.

      -----------

      "You can't shake the Devil's hand and say you're only kidding."

    2. Re:They ARE a programmer by Foogle · · Score: 1
      It's "Semantics" -- Symantec is a company.

      I'm sorry, I had to; the irony was just too thick. You should make that your sig and see how many people jump on it :)

      -----------

      "You can't shake the Devil's hand and say you're only kidding."

  42. Innovation VS Persperation by jsin · · Score: 1

    To understand the current state of "software engineering", consider the unique nature of software as opposed to other engineered products.

    All innovation comes from a passion or creative source, which is then tempered by the scientific realities require to make the idea a reality. In most fields, specialization and fabrication is necessary in order to make this happen, therefore the "inspiration" and "engineering" become seperated, decoupled, which allow the creative side to think and act feely, and the scientific side to focus and operate within the constraints of the disipline.

    This is not always true, in face, in the beginning of any disipline, boths tasks are ususally managed by a single individual, exibiting the unusual traits of being creative and analytical. It is especially untrue in the case of software developers, but also in the original "computer hobbists" of the 60's and 70's.

    My first computer experience came from my grandfather's SWTP 6800. Watching him load the bootstrap from a programmers console (eight switches and a commit button) ingrained in my mind what passion for technology really means, and it is something I don't see much anymore in the industry.

    The really good software engineers balance the artisan nature of the creative scientist, and find a way to make a living doing it.

    ...or wait for the next bandwagon...

  43. Erm... by GregWebb · · Score: 2
    One major problem is that the developers are not trained in writing software in the first place. They are either trained in computer science, or some totally unrelated field.
    UK CS undergraduate here, for reference.

    The second year here (Reading) is basically the bits the department have to put in to get course accreditation from the British Computer Society. It includes Software Engineering and Formal Methods.

    I don't know what US courses are like and that's certainly not the whole course, but it's a decent percentage and it's effectively requred over here.

    Greg
    --

    Greg

    (Inside a nuclear plant)
    Aaaarrrggh! Run! The canary has mutated!

    1. Re:Erm... by stephend · · Score: 1

      While your course is better than nothing, the difference between what they teach you and what happens in industry (and, indeed, what *should* happen in industry) is very large.

      One of the main differences is size. The *biggest* program I looked at/developed at uni was around 10000 lines. The *smallest* I've worked on since has been over 50000. Hell, I write 30000 lines of PL/SQL in the first few months of last year!

      My 'credentials': I read CS at Durham just over four years ago (we had a similar course) and am now a software engineer (/developer/programmer/whatever).

    2. Re:Erm... by GregWebb · · Score: 2

      I agree absolutely that size is a big difference, but...

      Firstly, the basic principles hold no matter what size you're developing. They may not actually save time on a 100 line project, but once you clear a few hundred LOC you need them IME.

      Secondly, how on earth would we have the time to develop anything that large? We're taught using examples and the principles scale.

      Greg

      --

      Greg

      (Inside a nuclear plant)
      Aaaarrrggh! Run! The canary has mutated!

  44. Re:C: smaller,faster is still better for "platform by washort · · Score: 1

    >> C will always be the language of choice for platforms.


    Why? Is this for technical or social reasons?
    Lisp and Smalltalk have been used to implement operating systems,HTTP servers, and database systems and quite efficient and powerful ones at that. What advantage does C have besides being close to the hardware?

    examples:
    Li sp Machines
    CL-HTTP Hypermedia Server
    Squeak
    Pluggable Webserver and Swiki
    MinneStore
    GemStone

  45. re: bah humbug by dnnrly · · Score: 1

    I agree completely with joss that programming is an art form. Akin to poetry, you can look at the world in a whole new way after reading a well written program. It reinforces the fact that there are many ways in which to view things. You can look at a table and see 4 poles and a wooden sheet. Someone else might see something else.
    BUT programming is completely separated from designing a SYSTEM. When you build a solution for a company, you don't only look at how a computer program should fit into the business, you look at what changes need to be made to the business. Software engineering is a discpline of designing stable programs. Programming well doesn't make you a software engineer. If we take the Denver Airport Baggage System as an example (a case study in system failures in my first year at uni: UMIST), one person would have a very hard time designing a system like that all by him/her self. You need teams of people who know how to look at the problem first. These people need to know how to express this formally so they can even remember whats going on or hand over to someone else to take over. There are good ways of doing this and bad ways, where do you suppose people are going to learn this sort of stuff with out unis? How can you prove you know what your doing without a BEng or MEng?
    The thing about Engineering as a profession is that projects tend to involve many people, the question of one person being incompetent is not important if you have trustworthy(ie. professionals) there to catch them. Since doctors often work alone, we don't detect any malpractice until later on. Usually when it's too late.
    As for the law in this matter, I think the BCS (British Computing Society - it even has a royal charter as far as I know) is trying to get Software Engineering accredited as a proper engineering discipline that needs a proper engineering degree!

  46. Re:C: smaller,faster is still better for "platform by rambone · · Score: 1
    C will always be the language of choice for platforms.

    Why? Is this for technical or social reasons?

    Obviously, tweaked C code will always be smaller and faster. As for your examples, the success of Lisp machines speaks for itself, Squeak is going nowhere, and I've never even heard of the other projects.

  47. Programmers, Engineers, and Computer Scientists by SEGV · · Score: 1

    Note: I am a programmer with a CS degree, who isn't afraid of software engineering.

    I think there is a difference between the three. The programmer writes code. Anyone can do that. The CS grad knows the fundamentals and theory of algorithms, data structures, information science, etc. The software engineer applies sound engineering practices to software design and implementation.

    They aren't the same. A PhD in computer science may not know anything about software engineering: construction of real systems. A software engineer may not know the little details of languages, automata, etc. And a programming wizard may not know either, but dwarf them in his C expertise and knowledge of an OS.

    They can all work together. Each contributes something to the team.

    One thing I've noticed, though, from where I used to work, with "computing" engineers and CS grads. The engineers cut more corners, are far more cowboy. Perhaps it is a rebellion against their training, a chance to cut loose in the abstract world of software. At any rate, I found their lack of rigour disturbing, and invariably it bit us in the end.

    --

    --

    --
    Marc A. Lepage
    Software Developer
  48. Dangers of Software Engineering by Donut · · Score: 2

    I recently left a shop (in disgust) that had been taken over by people espousing "Software Engineering" and McConnell. I had been through many crunch projects, and was tired of it, and was willing to give anything a try to be able to go home once in a while.

    So, I bought a copy of "Software Project Survival Guide", read it, learned it, loved it. I was willing to start to implement the good ideas, and ignore the ones that did not apply to our warez, and make a go of it. We still had to make software, but there might be a better way.

    Well, it turned out the the push behind our embracing of "Software Engineering" was not a way to get schedules and process under control, it was a new, novel way for executives (who were lawyers and accountants!) to micromanage the architecture and coding of our systems! We would generate all of the "Upstream" documents, and they would be picked apart by people who couldn't tell the difference between C and ASM. So, we went back, and regenerated (meetings, meetings, months).
    The other problem was that during the time we were generating the "Upstream" documents, we were not actually coding. That in itself was not bad, but to people above us, it appeared that the only output of my group was the paperwork. Since no real implementation work could be done, then it was SIMPLE for the execs to drastically change the nature of the product we were working on. After all, we hadn't DONE anything, right?

    After months of this, and 3 complete sets of docs, I left. I went to a small software house, and hacked for a good 3 months to get back into the groove. At the new place, we use some of the ideas in the "Big Orange Book", but we are thankfully able to concentrate on the real job: Making software.

    Bottom line: Software engineering is a means to and end. Beware the motives of those who would make you concentrate more on that process, and less on the actual output. Make sure that the people managing the process are actual engineers.
    Customers could care less about how you made the software, they just care about the end product.

    1. Re:Dangers of Software Engineering by DuctTape · · Score: 1

      I have to agree with the above post that you really have to watch what you're making your artifacts for: just to satisfy an upper-level requirement or to actually put together some good code. I know some PHBs that will want you to take shortcut after shortcut to get code done on time, but hide behind the process when the going gets tough, and will say, "you didn't follow the process" when things go awry. Of course nobody notices when things go fine and you deliver on time and on budget, but that's for another day.

      I'm currently experiencing the pendulum swinging the other way. I just joined a sales tool project as the architect about 2/3 the way though the life cycle. Unfortunately there was no architect on board when the project went through requirements and design, so, of course, the requirements are totally inadequete, and the design is best described as a spaghetti-code VB hack; we're currently in an endless cycle of rework where we fix things, the (internal) customer tests the software against how they think it should act, they find problems that they don't like, they submit the issues on our defect tracking tool, and we start the cycle over again. We're on at least our 4th fix release cycle.

      Of course, shortly after I was brought in, I was expected to save the project and release us from this endless rework cycle. I attempted to at least document the design by reverse-engineering the (non-existent) design document from the code. Alas, 'twas a meaningless exercise in futility, and I gave up. I've recommended to the PHBs that we continue with the rework cycle on the present code base, but adding some software engineering practices like design review on changes; and then scrap and reengineer the project once the dust settles. Well, thats's not what they wanted to hear.

      A lot of this could have been prevented from happening if we would have followed a formal process and if I would have been on-hand during the design time. Even without me, having the other architects in the department take a look during design review would have saved the company thousands of dollars. So instead we have this monolithic piece of VB crap that will never truly work correctly. This is the result of a "programmer" who knows every trick in the VB book, but was inadequately trained to do anything else than to throw up a bunch of forms and hide an amazing amount of non-modular code behind them.

      That is why we need software engineering and software architects.

      DT

      --
      Is this thing on? Hello?
  49. Programming is like writing literature by rcromwell2 · · Score: 2

    Being able to effectively plan out your story, your characters, and how it unfolds is taught to most college students who take composition and literature courses. A writing class generally helps a person become better at communicating and arranging their thoughts in a succinct manner.

    It's a top down technique with bottom-up feedback and iteration (rough draft, edit, next draft, edit, etc)

    On the other hand, the vast majority of programmers are not taught techniques for arranging their "thoughts" and putting them into code effectively. Software engineering courses on campus are little more than a *REVIEW* of current SoftEng literature, and not much of a workshop. And usually only one class is required or even exists. In an english composition class, you might have to write 5-6 essays throughout the course of a semester, all putting into practice the techniques you learned.


    So much time is spent in CS departments teaching algorithms, programming languages, and analysis, that precious little time is left over for teaching effective software composition. Which probably means that colleges need to make a distinction between Science and Engineering. Right now, colleges have both CS and IT classes (IT usually emphasizes technology, and not science), and I think IT should add more requirements related to teaching style and technique. After all, the IT people are the "grunt" workers who actually have to go out and design/build the bridge, not study the materials engineering that goes into the steel used to build it.


    As a minimum, "engineers" in addition to getting some required science background, should be able to concentrate in "design", such as the following:

    1) requirements analysis
    2) design (booch, rumbaugh, jacobsen, design
    patterns, et al)
    3) process
    4) management/team building
    5) risk analysis

    And, like any good engineering school, there should be heavy emphasis on actual real projects.



    This is no way takes away from the "art" aspect of programming. Can't a scientist use his skills for building a bridge or building a sculpture? All I'm asking is that the people building the applications I use and depend on (and moreover, that the nation's infrastructure depends on) be a little more "serious" and a little less focused on "coolness" vs design/maintainence.



    of course, anytime someone calls for this, there are always cries that it will kill innovation, passion, etc etc. Personally, I see far more "failures" than I do innovation from most of the amateur coders. People like to focus on the successes, but that doesn't give you the whole picture.


    1. Re:Programming is like writing literature by WaistcoatMark · · Score: 1

      Can't a scientist use his skills for building a bridge or building a sculpture?

      Speaking as someone with a BA (don't ask) in physics, I can assure you that I can design a bridge... made out of infinitely rigid concrete with inextensible cables of negligible weight.

      There's a world of difference between being able to derive the transistor equation from first principles of semi-conductors and being able to design a quality op-amp.

  50. Re:Are we doomed? by Anonymous Coward · · Score: 0

    Don't sweat it, dude. Most Slashdotters are kids in school (grade school, college, etc.) or Taco Bell employees. Not too many professionals here. Professinals don't dick around with this Open Source bullshit. It's just for the kiddies whose parents won't let them use their credit cards any more. We've seen the future, and Linux ain't it.

  51. Oberon is about as fast as C . . . by Anonymous Coward · · Score: 0

    because it is compiled just like C, except that the compiler is 10 times faster. Unlike C, Oberon is type-safe and garbage collected. It makes a fine system-level language. The ONLY justification for using C or C++ is that they are widely used. Oberon S3 Native runs on bare Intel hardware -- no other OS required. Try it. "A Comparison of Object-Oriented Programming in Four Modern Languages", Robert Henderson and Benjamin Zorn url = "ftp://ftp.cs.colorado.edu/pub/cs/techreports/zorn /CU-CS-641-93.ps.Z", abstract = "The paper evaluates Oberon, Modula-3, Sather, and Self in the context of object-oriented programming. While each of these programming languages provide support for classes with inheritance, dynamic dispatch, code reuse, and information hiding, they do so in very different ways and with varying levels of efficiency and simplicity. A single application was coded in each language and the experience gained forms the foundation on which the subjective critique is based. By comparing the actual run-times of the various implementations it is also possible to present an objective analysis of the efficiency of the languages. Furthermore, by coding the application using both explicit dynamic dispatch and static method binding, it is possible to evaluate the cost of dynamic dispatch in each language. The application was also coded in C++, thereby providing a well-known baseline against which the execution times can be compared.", }

  52. Well said! by DrCode · · Score: 1

    I agree, as most of the true "professional" software engineers I've met were incapable of writing software. And although you compared software to poetry, I believe writing software is more like writing a novel. Sure, there are "engineering" aspects to writing a novel, such as plot devices and techniques for character development. But basically, some people have the talent for writing a decent work of fiction, and most don't. From what I've seen of software development, the same is true there.

  53. Programming environments by DrCode · · Score: 1
    Fortunately, once you've had some successful experience, you'll find that companies will want to recruit you. And then you get a bit of leverage. Some people will use this leverage to bargain for higher salaries, or more perks. But I just make one demand: Regardless of the target platform, I get to choose my development environment.

    And guess what I've picked for my last two jobs?

    At my previous job, where my department had its budget restrained, my boss was really quite happy that my choice of software tools (which included gcc set up as a cross-compiler for two different targets) was nearly free of costs.

  54. Re:Are we doomed? by Peaker · · Score: 1

    Heh, yeah, EROS is the future, and EROS IS opensource. The 'professionals' don't dick with opensource software, they're too busy creating quick&dirty unstable solutions for Windows.

  55. Yes, "they do a lot more", not all good. by MattMann · · Score: 1
    [Bar Assoc and the Medical Board] provide assurance of the credentials of the people they accept into their ranks.

    Yes they do, they assure credentials... but not cost-effecive quality. Instead, they create market inefficiency leading to wasteful pricing.

    While they may start out as well-meaning -- imagine the world before they existed -- they unfailingly fall prey to the forces of the "invisible hand", market economics, and selfishly become white-collar trade unions in response. In economics texts, these organizations are used as examples: they use certification as a means of erecting barriers to competition. Perfect market theory would predict the availability of a continuous spectrum of quality of medical care or legal advice, such that you could find providers who you knew weren't quite as good, but who cost less so you might rely on them for non-critical issues. However, these services would threaten the profitability of the specialists, so they use their political clout to eliminate this source of competition.

    Much of the training for certification for "professionals" is not directly related to quality of service, or is overkill for many applications of a profession. The most egregious example of this is teachers' unions: now (in the US) you need a degree in "education" to be a history teacher, rather than a degree in history. The extensive certification process is designed to make sure that unemployed historians do not become teachers and threaten the continued employment of teachers who have no particular skills. In the medical field we see extensively trained doctors monopolizing healthcare when lesser skilled practitioners could provide many more narrowly focused services.

    There is some positive benefit to consumers of these organizations. It's a second order effect, so I'm putting it second, so don't walk away with the impression that it somehow balances out. That is, all of the dedication of effort to achieve "unnecessary" certification does provide some (game theory) information "signals" that the practitioner is "serious" about becoming a practitioner.

    Of course, what I'm advocating here is that I should be allowed to get legal advice from someone who hangs out a shingle that says IANAL. Good idea? YMMV! ha ha. Look at it this way: it would open up a whole bunch of newly desirable domain names : )

  56. What really matters by guran · · Score: 1
    In software engineering (as opposed to mere coding) you must work with management types.
    Therefore the most important thing is to have all specifications written down, cause otherwise you'll find yourself wasting days and weeks arguing over what was included in the project and not.

    Also, the *most* important thing is to have a clue about how your product is supposed to be used. Learn the terminology of those that are supposed to work with it on an everyday basis. Your application must speak *their* language, since they most likely don't know yours.

    If you write software for, lets say, a law firm, you must take your time to learn a thing or two about how things work there. What procedures are done with a tight schedule? They must be optimized. What is frequently done by newbies? That must be simple. What is done by experts on an everyday basis? That must be quick, so that your system is not percieved as slow. (A seconds delay while I'm watching always seems slower than a minutes delay when I'm doing other stuff)

    Yes, you must be a decent programmer, but unless you see why something as stupid as a talking paperclip actually can be called a feature you will get in trouble.

    --

    All opinions are my own - until criticized

  57. They write the right stuff by karkle · · Score: 2
    This reminds of an article about writing "perfect" software in Fast Company

    The article discusses the process NASA uses in its attempt to write perfect software. And it does not require programmers to stay up all night

    1. Re:They write the right stuff by ariux · · Score: 1

      Interesting. The article seems to spend too much attention on irrelevancies like the programmers' clothing and personal lives, but it also describes the process they use. For those who don't want to dig through the article:

      Spec comes before implementation. If you want to make a change, you spec it first, then everyone meets and talks about the spec, then once they all agree you can make the change.

      A friendly rivalry between coders and testers. "Fix those bugs, can't let the testers find anything" / "Can't let them slip a shoddy one through, let's do our best to break their system".

      When a mistake turns up, don't blame the people involved - blame the process, *then fix it so it won't let the mistake happen again*. Thus, the process gets better and better - and the process, of course, lives as long as the task, surviving changes of team - and people aren't encouraged to hide their mistakes.

      Big database tracking every line of code, all changes made, all errors found, fixed, how, with explanation. I'm not so sure how this could be done effectively, but it sure must create lots of automated reference material, provided you can navigate it correctly (not heuristically, this has to work 100% of the time). This must help some with the previous step.

  58. White collar unions by jabber · · Score: 2

    There certainly are both good an bad sides of these organizations. I wonder how 'corrupt' medical organizations would be if the Bar Association didn't make it so easy to sue a Doctor for malpractice. ;)

    These organizations need to be held accountable for the practice withing the field they claim to advocate. For example, it should be a part of every legal oath (is there such a thing?) to not entertain a frivilous lawsuit (with parameters provided and kept up to date, to define such a suit), just as all doctors swear to 'first, do no harm'...

    Also, you seem to suggest that teachers have no skills. If I misunderstand, then I apologise. Teachers need special training to impart knowledge onto students, especially in the age group most resistant to being taught. They need special training is child psychology, conflict resolution, structuring of the learning process and other things, that make education uniform across schools and regions.

    The requirement of being degreed in Education in order to teach in any field is not true at University levels, and also not adhered to in many private schools. In these areas, an expert in the field is preferable - especially in education. Once education is no longer required, and students make the choice of being there, then the Educational training otherwise required is no longer needed.

    But I do agree with you in principle. Education is a great place for a lazy person to get comfy... This is why the whole idea of tenure prings up a systemic deficiency in the educational system. It takes literally years to remove a tenured teacher from their position. You need to use the words 'sexual abuse' just to get the overseeing 'bored of ed.' to wake up and take notice.

    Returning to the topic of the article though, Software Engineering is not the same thing as programming. The difference is that a programmer implements the design of the SE. The SE needs professional training and programming experience, the programmer needs skills. The degree to which the programmer has freedom of design is a managerial matter, dictated largely by the legal department, and mostly (in the final tally) by the accountants.

    The engineering firm I work in has very few P.E.'s. Most are degreed engineers who just never took the PE exam, or don't bother to keep paying the fees for maintaining the license. The thing is that the PE's have 'sign-off responsibility' which allows them to authorize design changes. Even if the changes are the idea of a non-PE. They have approval, they are the ones to get hit if the changes are wrong, and they get paid a bit more for that.

    As an SE/Programmer (still fuzzy for us in CS) I can make design changes, and all I have to do is get buy-in to the idea from other developers and management. I can argue the point, and the only repercussion for failure is that it was MY idea. My professionalism, or the integrity of my career or employability, is never at stake. Unlike an architect who is branded for life if his building collapses, when my software crashes, I get to say 'oops' and try again.

    There are significant portions of the CS industry where this is not acceptable. Colliding jumbo-jets is one such area. Cratering a probe on Mars, because they said feet, and you heard meters, is another.

    A P.S.E. certificate would not really set up a racket. I really don't think it would. It WOULD reduce wages for people who do not hold the cert. The head architect(s) of the system would still make in the six figures per annum. The guys that crank out 10 KSLOC per week straight out of high-school, having read a single VB in 21 days book would realize their value in the grand scheme of things right quick.

    --

    -- What you do today will cost you a day of your life.
  59. Re:C: smaller,faster is still better for "platform by washort · · Score: 1

    >>>C will always be the language of choice for platforms.

    >>Why? Is this for technical or social reasons?

    >Obviously, tweaked C code will always be smaller and faster.

    In a time where a machine with 500Mhz CPU, 128MB RAM, and 10GB HD can be had for around $1000, the limiting factor is programmer productivity, not machine productivity. As I said previously, inner loops and performance critical sections may be best coded in C or assembler -- but less than 1% of the code in the typical software system meets that description. The Lisp Machine was a huge success, technically -- poor marketing, licensing, and pricing destroyed it. Squeak is doing a lot of amazing things for a project going nowhere. And even something like Oberon (which someone else mentioned) or Eiffel is better than C.

  60. Re:C: smaller,faster is still better for "platform by Anonymous Coward · · Score: 0

    C code will certainly be smaller and faster, but assembly is smaller and faster still, and you don't see anyone using that, except maybe for some critical inner loops.

    I think a shift to higher level languages is unavoidable, for economic reasons if nothing else. Since the inception of computers, everything (cpu, memory, networks, etc) have been getting better exponentially. The only thing in CS that has been getting less reliable and more expensive has been a line of code. High level language, perhaps not reversing the trend, at least help alleviate the problem.

  61. Is a degree worth it? sort of by UnknownSoldier · · Score: 1

    > the information about programming and computers learned would now be about 15 years out of date.

    Thats not true, its only around 10. :-) (Ok, so the C++ class was up to date.) How do I know? I finished my degree a few years ago.

    Was it a waste of my time? Partially. But I learnt a few gems that I wouldn't of learnt on my own. I was a self-learning already by the time I got to University, so didn't find the system to be all that beneficial.

    I gave up a career at Electronic Arts to pursue my education. Do I regret that choice? No, because the degree is done for life ;-) (Notice I didn't say learning is done for life!) I can go back to EA anytime.


    > Some of the best developers I know have either no degree or a non-engineering degree.

    Agreed. Remember you don't need education to be successfull, but it will help in the long run, all other things considered.

    Cheers

  62. Degree being used like a license by UnknownSoldier · · Score: 1

    > A degree is not any form of licensing.

    I didn't mean literally a degree is a form of licensing. I meant that it is being used like one, requiring it for jobs, and "dis-qualifying the people who don't have one."


    I agree with the rest of your article. Excellent post.

    Cheers

  63. Touch� by UnknownSoldier · · Score: 1

    > I'm sorry, I had to; the irony was just too thick.

    Now that was funny. Nice thinking.



    Since you didn't attempt any rebuttal I guess the argument is over ;-)

    Cheers

  64. Re:Two types of programmers (and code re-use) by belswick · · Score: 2
    Yes, experts frequently accomplish very little code re-use, except perhape their own code. Why?

    1. Because you can't verify that code is correct unless you understand it and can at least audit the source. This leaves out closed-source "objects". How do you know if you are testing all possible path through the code if all you can do is black-box testing?

    2. Because there are no guarantees on software. Just read the license agreement on the next box of pre-constructed objects you purchase. "No guarantee of merchantability of fitness for purpose" leaves a hole big enough to drive a truck through.

    3. Optimization. If you don't thoroughly understand the code, you can't fix bottlenecks that crop up in that code.

    4. In the case of closed-source code reuse, you can't even step through it with a debugger unless you want to do it in assembly.

    Another point. While it's very nice to learn OO design in a teaching language, it is the very unusual real-world application that you can code up in Scheme. And now that the buzz is wearing off of Java, I actually see a trend back to C++.

  65. The so-called mature industry by Camelot · · Score: 1
    There always exists a need for good books, and I don't doubt that this book could be classified in this category. However, I have to criticize the premise that software is now somehow mature. New tools are and will be developed, new techniques and theories are thought of, the industry will get forward. But it doesn't really get easier, because software engineering is conceptually hard. I know Hemos mentioned this too, which indicates that he has done his homework ;) but I'll say it anyway: There is no "silver bullet", which would suddenly solve all problems. Proclaiming that software industry is somehow a mature art isn't that either.

    Some have wondered how OSS fits into this. Well - it doesn't really make any difference from the software engineering point whether the piece of code is open source or not. Good software engineering techniques can be applied for open source as well - and it is certainly being done. See Mozilla, for example. It should be noted, though, that most open source projects, especially smaller ones, aren't really disciplined with regard to software engineering, which makes them inefficient. On the other hand, for commercial software this is not acceptable; in the industry such projects get the axe, one way or the other.

  66. My Software Engineering Course was Very Good! by John+Ratke · · Score: 1
    I think I learned a lot from my software engineering course.

    Maybe you had a bad professors for your courses. Mine really knew his stuff. In fact, he recently started a Software Engineering major at MSOE.

    There were a few good things about my SE class. (I only had one). One thing was that we were split into teams (not of our choosing). This simulates the real world. We also had project to work on where the professor was the client. And we did the project in 2 phases. (We only had 10 weeks!) The 2nd phase added some requirements and we got to see how good our design from the first phase was. We got to use Rational Rose, which is a pretty nice CASE tool. Once you put your model in as UML, you click the "Generate" button, and Bam! Out comes the skeleton code in either C++ or Java. We used C++ and put a MFC based front end on our app. Doing the actual programming was the easy part!

    Then as an outside project I took the back end code and wrote a KDE front end for it!. And I did it in you a couple of hours!! I think this shows the importance of creating a design that is as non interface-specific as possible. (Depending on the purpose of the app, of course). One thing I like to do is think of what the back end code would have to look like so that the interface could be either text mode or GUI. It makes you think! Perhaps a good example of this is Linuxconf, with a text, X, and web interface, but I haven't looked at the code at all.

    The SE course I took was probably on of the hardest (most work) courses I had in my four years, but it was also the most interesting.

    I do agree that SE is a young field. Compare it to something like Architechtural Engineering. Architechture has been around for thousands of years. Computers have only been around for, what, about 50. And the idea of actually doing software engineering is even younger.

    Hopefully the good ideas (I hate the phrase "best practices") in Software Engineering will stick and we will have better software to show for it soon. I agree with another poster though in that market pressures make this difficult for commercial software development.

  67. Re:Are you sure you need a skyscraper? by mlosh · · Score: 1

    It's like trying to build a skyscraper with a hammer and a saw.

    Why do so many people and organizations want to build skyscrapers? Metaphorically speaking, the needs of many organizations and people are better met with a tent, or a hut, or a simple house. People waste so much time trying to save time, but when you are building a skyscraper, its complexity and sheer size make it difficult to do efficiently.

    Steve M. had written some excellent books. I have not read ATGR, his earlier SPSG tried to strike a good balance between rigor and efficiency. I think that a better and more realistic balance is described in Kent Beck's Extreme Programming Explained. In this book, they tell you "You ain't gonna need it" when it comes to adding extra generallity (you might change your mind later, or have the project cancelled). Think about it before you jump into building a new skyscraper!
    --
    Mike

  68. Problems with B2B Project Management by SethBarker · · Score: 1

    Hi,

    I just came off a B2B integration project between a major ERP vendor and a Travel partner that had some major problems, and I was wondering if anyone else has had similar experiences. The project vision was pretty cool. We were making it possible for users of the ERP system to book Airline, rental car, and hotel reservations through their browser, and have their ERP expense reports be automatically populated with their major trip costs.

    The project ran into problems because it was run across corporate boundries. Neither partner wanted to give the other access to its source control system, bug tracking system, or schedule system. The net result was 1)Lack of project visibility 2)Lack of change control 3)lack of version control of shared assets (the spec, xml docs, DTDs) 4)No visible shared schedule 5) History of the project stored in emails (when people left the project, their project knowledge was lost with their deleted email accounts)

    Has anyone else tried to run a B-to-B (B2B?) software project across corporate boundries? Did you experience similar problems? Most importantly, how did you solve them?

    Finally, has anyone implement an "eCommerce-in-a-box" solution like Ariba Inc., Commerce One Inc.? When doing so, did you run into any cross-corporate project management issues similar to the ones I
    mentioned above?