Exactly my point. The degree itself is indeed optional, but not the skills required and so demonstrated. (note that I don't say degree in software/computer anything). For those of you who still think that you're special if you're just a fine coder -- no doubt a legend in your own mind -- what about the other 80% of work that software developers do? For starters: revision control, release management, design, modelling, planning, deployment, migration, system evolution, process improvement, requirements gathering, quality assurance and reviews, test development, tool selection and development. If the thought forming in your mind is something along the lines of "that's all time-wasting bs that keeps me from finishing the code", well, as I say, exactly my point.
You're right -- as long as a company with a shop full of high-school kids can get into the same business as a shop of SEs and not feel the pain, we have no basis for licensing.
Don't we wish we could practice our craft with the rigor and discipline it deserves, rather than being dragged down to the lowest levels. Until we can correctly pin the blame on business management, who are willing to hire high-school kids and college dropouts and give them the same responsibilities and tasks as certified degree-holding professionals, the industry will stay in the hole it's in. What other profession does management blame the professional for not being able to get the job done "as quickly as that guy who stays up all night on Mountain Dew"? Those of us with the skill and experience to know the real effort and cost of building software that makes business run are not doing enough to make managers feel the hurt when they choose to take shortcuts and accept shoddy work.
It know this is crazy talk, but if the managers and users shouldered the burden of responsibility for squeezing schedules and ballooning requirements that make it impossible for a skilled developer to do careful, quality work, you bet there'd be a lot more heat on bad managers when things go wrong.
There are ways to quickly deliver working software that meets requirements but isn't half-baked buggy, security-hole-ridden patched crap, but companies refuse to pay for that. I only support licensing programmers as software engineers if 1) companies could hire un-licensed programmers at management's own risk, and 2) the process of developing software is controlled by the engineering people, not marketing.
On 1), we'll never get anywhere as long as EULAs literally absolve the vendor from any responsibility, and before we can get to 2), however, there is the little matter of having all the software engineers agree on what the process is.
At work they're starting to get tired of me talking about the magic ctrl+1, but to me that's the best part of Eclipse. It lets you write the code you are thinking about at the moment, then gives you help fixing up the little details and loose ends. Some of my favorites:
Add stubs for unimplemented methods
Add either a catch clause or a throws declaration to deal with an uncaught exception
Add unimplemented abstract methods
A simple example: You're working on a bit of code that needs to call a method on another class, but with a different number of parameters than the method currently has -- you can go ahead and write the call, then ctrl-1 and Eclipse will offer to create the method for you.
It would be nice to know whose jvm you have installed/what version and what command line options you have set -- the performance of Eclipse is going to be heavily influenced by these factors.
I believe you nailed with "in just about any country you can imagine". It's the automobile unit of SI. Hardly any other car is as ubiquitous -- you can go to the Americas, Europe, Asia, Africa, and you're likely to see a Bug.
There have been plug-ins for Mozilla to run ActiveX controls since before 1.0, so that's not new. I believe this just means that the code for making it possible for Mozilla to be used as an ActiveX control is getting into the trunk.
Among the interesting tidbit: CodeWeavers CrossOver Plugin 1.2 so you can host ActiveX controls in Linux now.
The development of a new interstate highway system is being condemned by leading automobile manufacturers as "a deadly blow to the industry's lifeblood". Manufacturers fear that without the income from the frequent repairs cars currently needs as a result of trying to use rough, unimproved roads crowded with sometimes dozens of cars, the industry will crumble. Says a spokesman for Nash, maker of the popular "Rambler", "These new highways are smooth, roomy, and safe. By making it easy for vast numbers of cars to go long distances with a much lower risk of accident, these Interstate Highways threaten to reduce the need for service and replacement parts drastically, cutting into the vital after-sales market the industry depends on for its revenue stream."
Excellently said -- the cataloging standards and skills of librarians are indeed a credit to the profession. On the other hand, I can see ways this is a burden to the general book-reading public. Quick: what's the LC catalog number for your favorite book? What LC catalog section should you go to for books on chess playing? The specialization required to know this is a deterrent: the system was created by specialists for specialists and it gets more complex as the specialists refine it. I would be very interested in seeing what kind of cataloging system would emerge from a collaborative feedback-loop effort by the general population of book-readers. With enough readers and catalogers, we might see a very powerful and intuitive system arise. Or we might get junk, but it'd be fun to see.
Wow, so we can have another site, like imdb and cddb, where thousands of volunteers can create a huge and valuable database, which is then claimed as sole property by a single company which then proceeds to make money for itself by charging for use? No thanks. May I suggest the Library of Congress card catalog instead?
I'll 2nd this recommendation. I run Linux exclusively at home, but my employer of course uses Microsoft for email, networking, office, etc. There is a Citrix ICA client for Linux, and it works with Mozilla if you want to use the web portal. Also, you can map a local directory to a drive letter within the Citrix environment, so you can share files across the systems.
Combine with our two-factor authentication and running over https, there's enough security to satisfy a lot of the suits' concerns.
It's very weird to see Outlook '98 running as just another window on my Linux desktop!
I did read part 2. Look again, there's a comment about how the build process has been expanded to include more analysis. It's quite likely that it doesn't need to take 12+ hours, and if continuous integration were the goal, it could be done.
Incremental builds are fine for development, but you really do want a from-scratch, or "clobber" build for the gold version. Dependencies are complex, and tools like make and pre-compiled headers are not perfect. For highest quality you really want to start clean and be sure everything gets rebuilt.
Legislators for the state of Oregon are considering such a law. The state Attorney General is pushing it, according to this story. It doesn't seem like it would be a huge win, but it's something, and the recognition that spam is out of control.
You'd end up like one company I know of, that is just partway through a migration away from Windows 95 -- to WinXP. Skipping that many generations of upgrades causes more problems than at least attempting to keep up.
I use debian linux at home. Just an apt-get away from keeping current.
Want to know why computers get ever more bloated and hard to use? End user demands get ever more ridiculous and endless. Imagine what a stapler would look like if it were designed based on typical user requirements.. Dessert topping, floor wax.
In a way you are right: don't throw together a thousand or ten thousand lines of test code for testing's sake.
You missed one thing though: Test-first is design. The tests don't just ensure that the thing works as written, they define how the thing is intended to work, and in order to write a test that exercises that aspect, you have to think about what problem the code is supposed to solve. This results in the test being the thing that validates the features of the code under test, and by definition, the features of the code are its design.
I never claimed I could flawlessly develop on time and within budget, but then, I wouldn't suggest that a single individual can develop a distributed, scalable, multiuser SCM in six months. Perhaps I wasn't clear: 8 people for 3 years is a fine scale for what BitKeeper is -- it was the initial estimate that ought to have been run out of town on a rail. That kind of estimation is at best an unprofessional commitment to the impossible. There's a term for projects that start out with those kinds of unrealistic promises, that every developer dreads: Death March.
Personally, if someone tried to hire me to develop a new SCM tool with the scope of BitKeeper in six months by myself, I'd kindly excuse them from my office, no matter how much they offered.
There's no such thing as "evolutionary prototyping", that's an oxymoron. Yes, you can (and should) do evolutionary, incremental development, but if you think you can take a prototype and turn it into a final implementation with a few iterations, then you will get burned. Netscape fka Mosiac is an excellent example of what happens you attempt to slipstream your prototype code into the final version.
The only activity that is can be called prototyping is exploration, where you knock out something to explore a particular problem space, and use what you learned to go by and build your production version.
But don't take my word for it, examine the pre-Gecko Netscape source.
McVoy's first estimate was that he could create BitKeeper in six months, working by himself. The number of programmers increased to two, then four, then eight. The time grew from six months to three years.
For those of you keeping score, that's an overage of 48 TIMES the initial estimate. Even the NASA didn't do that bad with the ISS.
This isn't a revelation for me. For some time it's been clear to me that sloppy code is a sign of sloppy thinking generally. I see code that is formatted oddly, indented irregularly, and I know I'm in for trouble. Throw in unused variables, or redundancies like the article talks about, and for sure that program is going have nasty bugs.
some moron just keeps on talking and we really want them to shut up or go away Or be like Buzz Aldrin and deck the rude wacko:
A much bigger and younger man was hounding the 72-year-old astronaut in Beverly Hills, Calif., calling him "a coward, a liar and a thief" and trying to get him to swear on a Bible, on camera, that he walked on the moon. Aldrin, a Korean War combat pilot, responded with a fist in the chops.
is a launch how often? Not very often, last I recall.
On average, somewhere on earth there is one launch to orbit or beyond every week. That includes all the big rockets, US and foreign, like STS, Atlas, Delta, Titan, Proton, Soyuz, Ariane, Long March, H2-A etc. Smaller rockets with suborbital payloads and are common.
That's exactly the sort of rule of thumb that John S. Lakos talks about in his terrific book, Large-Scale C++ Software Design (ISBN: 0201633620). Basically, pre-compiled headers are for developers who are too lazy or inexperienced to manage inter-module dependencies efficiently.
Exactly my point. The degree itself is indeed optional, but not the skills required and so demonstrated. (note that I don't say degree in software/computer anything). For those of you who still think that you're special if you're just a fine coder -- no doubt a legend in your own mind -- what about the other 80% of work that software developers do? For starters: revision control, release management, design, modelling, planning, deployment, migration, system evolution, process improvement, requirements gathering, quality assurance and reviews, test development, tool selection and development. If the thought forming in your mind is something along the lines of "that's all time-wasting bs that keeps me from finishing the code", well, as I say, exactly my point.
You're right -- as long as a company with a shop full of high-school kids can get into the same business as a shop of SEs and not feel the pain, we have no basis for licensing.
Don't we wish we could practice our craft with the rigor and discipline it deserves, rather than being dragged down to the lowest levels. Until we can correctly pin the blame on business management, who are willing to hire high-school kids and college dropouts and give them the same responsibilities and tasks as certified degree-holding professionals, the industry will stay in the hole it's in. What other profession does management blame the professional for not being able to get the job done "as quickly as that guy who stays up all night on Mountain Dew"? Those of us with the skill and experience to know the real effort and cost of building software that makes business run are not doing enough to make managers feel the hurt when they choose to take shortcuts and accept shoddy work.
It know this is crazy talk, but if the managers and users shouldered the burden of responsibility for squeezing schedules and ballooning requirements that make it impossible for a skilled developer to do careful, quality work, you bet there'd be a lot more heat on bad managers when things go wrong.
There are ways to quickly deliver working software that meets requirements but isn't half-baked buggy, security-hole-ridden patched crap, but companies refuse to pay for that. I only support licensing programmers as software engineers if 1) companies could hire un-licensed programmers at management's own risk, and 2) the process of developing software is controlled by the engineering people, not marketing.
On 1), we'll never get anywhere as long as EULAs literally absolve the vendor from any responsibility, and before we can get to 2), however, there is the little matter of having all the software engineers agree on what the process is.
A simple example: You're working on a bit of code that needs to call a method on another class, but with a different number of parameters than the method currently has -- you can go ahead and write the call, then ctrl-1 and Eclipse will offer to create the method for you.
It would be nice to know whose jvm you have installed/what version and what command line options you have set -- the performance of Eclipse is going to be heavily influenced by these factors.
I believe you nailed with "in just about any country you can imagine". It's the automobile unit of SI. Hardly any other car is as ubiquitous -- you can go to the Americas, Europe, Asia, Africa, and you're likely to see a Bug.
Not only that, they are one of the few cars that can evoke this kind of emotional reminiscence.
OK, this is severly karma-whoring, but let's ask the source: Mozilla ActiveX Project.
There have been plug-ins for Mozilla to run ActiveX controls since before 1.0, so that's not new. I believe this just means that the code for making it possible for Mozilla to be used as an ActiveX control is getting into the trunk.
Among the interesting tidbit: CodeWeavers CrossOver Plugin 1.2 so you can host ActiveX controls in Linux now.
Nothing hugely earth-shattering, though.
The development of a new interstate highway system is being condemned by leading automobile manufacturers as "a deadly blow to the industry's lifeblood". Manufacturers fear that without the income from the frequent repairs cars currently needs as a result of trying to use rough, unimproved roads crowded with sometimes dozens of cars, the industry will crumble. Says a spokesman for Nash, maker of the popular "Rambler", "These new highways are smooth, roomy, and safe. By making it easy for vast numbers of cars to go long distances with a much lower risk of accident, these Interstate Highways threaten to reduce the need for service and replacement parts drastically, cutting into the vital after-sales market the industry depends on for its revenue stream."
Excellently said -- the cataloging standards and skills of librarians are indeed a credit to the profession. On the other hand, I can see ways this is a burden to the general book-reading public. Quick: what's the LC catalog number for your favorite book? What LC catalog section should you go to for books on chess playing? The specialization required to know this is a deterrent: the system was created by specialists for specialists and it gets more complex as the specialists refine it. I would be very interested in seeing what kind of cataloging system would emerge from a collaborative feedback-loop effort by the general population of book-readers. With enough readers and catalogers, we might see a very powerful and intuitive system arise. Or we might get junk, but it'd be fun to see.
Wow, so we can have another site, like imdb and cddb, where thousands of volunteers can create a huge and valuable database, which is then claimed as sole property by a single company which then proceeds to make money for itself by charging for use? No thanks. May I suggest the Library of Congress card catalog instead?
How can any complex search engine be implemented in 350 lines of code that also covers the persistance?
Easy -- it's not implemented in C, it's implemented in powerful naturally OO languages. You ought to try them some time.
I'll 2nd this recommendation. I run Linux exclusively at home, but my employer of course uses Microsoft for email, networking, office, etc. There is a Citrix ICA client for Linux, and it works with Mozilla if you want to use the web portal. Also, you can map a local directory to a drive letter within the Citrix environment, so you can share files across the systems.
Combine with our two-factor authentication and running over https, there's enough security to satisfy a lot of the suits' concerns.
It's very weird to see Outlook '98 running as just another window on my Linux desktop!
I did read part 2. Look again, there's a comment about how the build process has been expanded to include more analysis. It's quite likely that it doesn't need to take 12+ hours, and if continuous integration were the goal, it could be done.
Incremental builds are fine for development, but you really do want a from-scratch, or "clobber" build for the gold version. Dependencies are complex, and tools like make and pre-compiled headers are not perfect. For highest quality you really want to start clean and be sure everything gets rebuilt.
Daily Builds are for Wimps! And they only have one architecture to build for. Compare for example Mozilla's Tinderbox.
Legislators for the state of Oregon are considering such a law. The state Attorney General is pushing it, according to this story. It doesn't seem like it would be a huge win, but it's something, and the recognition that spam is out of control.
You'd end up like one company I know of, that is just partway through a migration away from Windows 95 -- to WinXP. Skipping that many generations of upgrades causes more problems than at least attempting to keep up.
I use debian linux at home. Just an apt-get away from keeping current.
Want to know why computers get ever more bloated and hard to use? End user demands get ever more ridiculous and endless. Imagine what a stapler would look like if it were designed based on typical user requirements.. Dessert topping, floor wax.
In a way you are right: don't throw together a thousand or ten thousand lines of test code for testing's sake.
You missed one thing though: Test-first is design. The tests don't just ensure that the thing works as written, they define how the thing is intended to work, and in order to write a test that exercises that aspect, you have to think about what problem the code is supposed to solve. This results in the test being the thing that validates the features of the code under test, and by definition, the features of the code are its design.
I never claimed I could flawlessly develop on time and within budget, but then, I wouldn't suggest that a single individual can develop a distributed, scalable, multiuser SCM in six months. Perhaps I wasn't clear: 8 people for 3 years is a fine scale for what BitKeeper is -- it was the initial estimate that ought to have been run out of town on a rail. That kind of estimation is at best an unprofessional commitment to the impossible. There's a term for projects that start out with those kinds of unrealistic promises, that every developer dreads: Death March.
Personally, if someone tried to hire me to develop a new SCM tool with the scope of BitKeeper in six months by myself, I'd kindly excuse them from my office, no matter how much they offered.
There's no such thing as "evolutionary prototyping", that's an oxymoron. Yes, you can (and should) do evolutionary, incremental development, but if you think you can take a prototype and turn it into a final implementation with a few iterations, then you will get burned. Netscape fka Mosiac is an excellent example of what happens you attempt to slipstream your prototype code into the final version.
The only activity that is can be called prototyping is exploration, where you knock out something to explore a particular problem space, and use what you learned to go by and build your production version.
But don't take my word for it, examine the pre-Gecko Netscape source.
For those of you keeping score, that's an overage of 48 TIMES the initial estimate. Even the NASA didn't do that bad with the ISS.
This isn't a revelation for me. For some time it's been clear to me that sloppy code is a sign of sloppy thinking generally. I see code that is formatted oddly, indented irregularly, and I know I'm in for trouble. Throw in unused variables, or redundancies like the article talks about, and for sure that program is going have nasty bugs.
Or be like Buzz Aldrin and deck the rude wacko:
Go Buzz!
is a launch how often? Not very often, last I recall.
On average, somewhere on earth there is one launch to orbit or beyond every week. That includes all the big rockets, US and foreign, like STS, Atlas, Delta, Titan, Proton, Soyuz, Ariane, Long March, H2-A etc. Smaller rockets with suborbital payloads and are common.
That's exactly the sort of rule of thumb that John S. Lakos talks about in his terrific book, Large-Scale C++ Software Design (ISBN: 0201633620). Basically, pre-compiled headers are for developers who are too lazy or inexperienced to manage inter-module dependencies efficiently.