Comment Answer 2 Re:Just another soapbox rant by me. (Score 1) 169
I really don't see how any alternative alignment of the software development profession would benefit the updating of the stereotype in the views of non programmers.
The core problem with licensing developers is who would be responsible for creating the requirements? Software developers are rarely hired by other software developers, so they really have no say in it (and we software developers are reluctant to demand a say in it). Marketing hires developers at a much higher rate, but their dilemma of not ever knowing what they need means that they also can't write the requirements. Management controls the money, but we as software developers are not comfortable with them monopolizing the requirements, and management under no circumstances wants software developers to control their destiny. As much as I do not like the status quo, I don't have a solution that all of the players involved would agree is better.
At some point software load will level off and drop. We software developers cannot continue to believe that marketing will continue to throw money at us because of their blindness that the effort we charge for things like A-B testing or customer relationship software is actually returning a valid return on investment. If the consumer loses faith in the truth in online reviews, then that money will be turned off. If questionable data collection justified by improvements in AI turns sour due to some horrendous breach of private information, this could cripple a large portion of our industry. I could go further, but it would all devolve to the plots of the Dune prequels and the tenet "that no machine can be made in the image of a man." Needless to say, our industry is treading on very shaky ground.
The level of intelligence of software development hasn't changed, it has just shifted to different aspects. The tools we use help facilitate the transfer, but not the sum amount. It also helps to define the concepts of constructive and destructive laziness. I'll try to explain all this with this example:
If I were to compare my intelligence to the software developers who had to program using punch cards, I would consider myself really stupid. Those people had to keep so much stuff in their head. They had to code at a level of precision and discipline I will never achieve, because their time with a computer was fleeting, precious, and tedious. I rarely can write code that passes a compiler first pass, and if I do I am highly dubious that what I wrote truly works. One of their tools I had the privilege to witness was a mechanical card sorting machine that would organize a large stack of punch cards. If one were to drop their stack of punch cards, and they had the discipline to number them properly, the device would quickly organize the cards into the correct order. Now this tool's purpose was for pure laziness, but this laziness was constructive because it saved precious time.
Though these programmers had level of precision that I will never see in my lifetime, it came at a cost that their programs are very simplistic to the things that I can achieve, with my horrible typing skills and wealth of computer access.
A developer will continue to require a certain level of combined intelligence, but can shift the burden to our tools. The simpler the tool, the easier to maintain, and the easier those tools will transfer. If the tool becomes too specialized, its beauty and constructive laziness will befall the fate of the magical card sorting machine. Complicated tools provide the illusion of acceptable stupidity. If one doesn't know how to properly use a hammer, a nail gun just makes one's stupidly more prolific to see. Complicated tools require somebody smart enough to create the tool and the infinite time and patience to maintain it for lesser intelligent people to use improperly. Very few people have the desire to do this, even fewer for free. A really good example of a complicated tool that has gone overboard is Curl. So much effort has gone into the command line interface that the true gem, the curl library, becomes overshadowed. Too many people, through destructive laziness, attempt to do nontrivial tasks through the command line interface when it would be more sane to create a program that uses the library directly. Same could be said about using Perl for build processes, and ridiculous search strings for grep, but this tangent veers into holy territory that I have no vested interest (If you don't want to do as the Romans, than don't go to Rome).
The only way I know of to improve quality is to never stop learning. Unfortunately this solution does not lessen quantity. Quality and quantity are not related. These are things I do:
1. Sometimes I attempt to do things without a tool. I always find some insight and appreciation for the lack of the tool or define its level of constructive/destructive laziness. Do not allow yourself to be crippled by your tools. I am blessed with time and freedom to do this at work.
2. Always have a secret project that you believe may have some benefit to how you do things. I cannot stress the secrecy. This should be a project with no deadline. This should have no consequences other than downtime lost if you find out it does not pan out. I am blessed to being able to do this at work.
3. Find a software developer who you respect and take them out to lunch/dinner in return for them critiquing your code, and in turn be available to explain their code. The dinner is to balance out that you are inconveniencing them for your benefit. Do this even if your organization has useful code reviews.
4. Treat documentation with the same precision and zeal as coding. Understand and write developer, operator, and user level documentation. Documentation should always be in a system neutral document format first, and in system biased format (such as man pages) second.
5. When working on open source projects on your own time, don't get frustrated when they dismiss your submissions. If it works for you but not them, keep it for yourself and take your talents elsewhere. Never allow yourself to be abused for free.
6. Understand that quality requires discipline. Discipline is always detrimental to time.
7. Do not abuse your QA team by sending untested code. The sole purpose of QA is to prove the stereotype that developers are morons. Do not allow QA to accept your code without them testing. There is nothing more frustrating than losing a great QA analyst because they assumed that your code will always work.
The core problem with licensing developers is who would be responsible for creating the requirements? Software developers are rarely hired by other software developers, so they really have no say in it (and we software developers are reluctant to demand a say in it). Marketing hires developers at a much higher rate, but their dilemma of not ever knowing what they need means that they also can't write the requirements. Management controls the money, but we as software developers are not comfortable with them monopolizing the requirements, and management under no circumstances wants software developers to control their destiny. As much as I do not like the status quo, I don't have a solution that all of the players involved would agree is better.
At some point software load will level off and drop. We software developers cannot continue to believe that marketing will continue to throw money at us because of their blindness that the effort we charge for things like A-B testing or customer relationship software is actually returning a valid return on investment. If the consumer loses faith in the truth in online reviews, then that money will be turned off. If questionable data collection justified by improvements in AI turns sour due to some horrendous breach of private information, this could cripple a large portion of our industry. I could go further, but it would all devolve to the plots of the Dune prequels and the tenet "that no machine can be made in the image of a man." Needless to say, our industry is treading on very shaky ground.
The level of intelligence of software development hasn't changed, it has just shifted to different aspects. The tools we use help facilitate the transfer, but not the sum amount. It also helps to define the concepts of constructive and destructive laziness. I'll try to explain all this with this example:
If I were to compare my intelligence to the software developers who had to program using punch cards, I would consider myself really stupid. Those people had to keep so much stuff in their head. They had to code at a level of precision and discipline I will never achieve, because their time with a computer was fleeting, precious, and tedious. I rarely can write code that passes a compiler first pass, and if I do I am highly dubious that what I wrote truly works. One of their tools I had the privilege to witness was a mechanical card sorting machine that would organize a large stack of punch cards. If one were to drop their stack of punch cards, and they had the discipline to number them properly, the device would quickly organize the cards into the correct order. Now this tool's purpose was for pure laziness, but this laziness was constructive because it saved precious time.
Though these programmers had level of precision that I will never see in my lifetime, it came at a cost that their programs are very simplistic to the things that I can achieve, with my horrible typing skills and wealth of computer access.
A developer will continue to require a certain level of combined intelligence, but can shift the burden to our tools. The simpler the tool, the easier to maintain, and the easier those tools will transfer. If the tool becomes too specialized, its beauty and constructive laziness will befall the fate of the magical card sorting machine. Complicated tools provide the illusion of acceptable stupidity. If one doesn't know how to properly use a hammer, a nail gun just makes one's stupidly more prolific to see. Complicated tools require somebody smart enough to create the tool and the infinite time and patience to maintain it for lesser intelligent people to use improperly. Very few people have the desire to do this, even fewer for free. A really good example of a complicated tool that has gone overboard is Curl. So much effort has gone into the command line interface that the true gem, the curl library, becomes overshadowed. Too many people, through destructive laziness, attempt to do nontrivial tasks through the command line interface when it would be more sane to create a program that uses the library directly. Same could be said about using Perl for build processes, and ridiculous search strings for grep, but this tangent veers into holy territory that I have no vested interest (If you don't want to do as the Romans, than don't go to Rome).
The only way I know of to improve quality is to never stop learning. Unfortunately this solution does not lessen quantity. Quality and quantity are not related. These are things I do:
1. Sometimes I attempt to do things without a tool. I always find some insight and appreciation for the lack of the tool or define its level of constructive/destructive laziness. Do not allow yourself to be crippled by your tools. I am blessed with time and freedom to do this at work.
2. Always have a secret project that you believe may have some benefit to how you do things. I cannot stress the secrecy. This should be a project with no deadline. This should have no consequences other than downtime lost if you find out it does not pan out. I am blessed to being able to do this at work.
3. Find a software developer who you respect and take them out to lunch/dinner in return for them critiquing your code, and in turn be available to explain their code. The dinner is to balance out that you are inconveniencing them for your benefit. Do this even if your organization has useful code reviews.
4. Treat documentation with the same precision and zeal as coding. Understand and write developer, operator, and user level documentation. Documentation should always be in a system neutral document format first, and in system biased format (such as man pages) second.
5. When working on open source projects on your own time, don't get frustrated when they dismiss your submissions. If it works for you but not them, keep it for yourself and take your talents elsewhere. Never allow yourself to be abused for free.
6. Understand that quality requires discipline. Discipline is always detrimental to time.
7. Do not abuse your QA team by sending untested code. The sole purpose of QA is to prove the stereotype that developers are morons. Do not allow QA to accept your code without them testing. There is nothing more frustrating than losing a great QA analyst because they assumed that your code will always work.