Agile is intended to handle the sudden and dramatic changes of requirement. Because I can virtually guarantee that any significant project that makes its way into user hands is going to get a lot of requests for changes. Not simply because of bad/sloppy original specs but because the users, given even a partial solution will discover new things that need new solutions. Sort of a software "Heisenberg effect", if you will.
What makes a developer great is the ability to allow for this and design for it instead of over-committing to the first set of specs that comes along.
can tell fads from technologies that actually endure
And are therefore defined in hindsight.
Critical thinking, not buying anything some software vendor is willing to sell you, is one thing, and betting on the right horse every time is quite another. At some point, you can't miss the latter by being conservative and only adopting "new" technologies when they're already mature (now, if you had some sort of almanac...). Also to note, "better" does not always mean "successful".
Oh, I dunno. I've found that if it's too good to be true, it's probably going to be a fad.
If it promises to make developers obsolete, it won't.
If you can get a flashy application working in under 15 minutes, everyone will adopt in and then discover that it takes just as long or longer to actually produce industrial-grade apps as the "old-fashioned" stuff does with the added excitement of discovering new security vulnerabilites.
On the other hand, if something comes along and I go "WTF is this? What does it do? What's it even good for? then I may have just discovered something of lasting value.
Yep, I've never met a really good programmer who didn't use every tool he could exploit to find his bugs.
Good point. In that vein, the best programmer I ever worked with once said he had an "anti-fetish" for bugs. I think that at least partly explained the extremely high quality of his work.
For most of us, though, finding and fixing bugs is a chore that we'd rather avoid because writing code (and therefore more bugs) is more fun. I try to emulate the anti-fetish mentality of my friend, but that remains something that I sometimes have to discipline myself to do rather than something that comes naturally.
Long ago, I had a set of "Programming Proverbs" books. I think that's where I ran into the term "anti-bugging".
Anti-bugging is simply the process of designing and coding so as to make bugs either impossible, or at least easier to detect. It can be as simple as always coding brackets around conditional clauses instead of only when needed, to pre-initializing variables so that in case all the various logic paths fail to set them that their value will be consistent (and ideally, obviously wrong). Coding tests to detect and report things that "will never happen". Because they do, alas. And so forth.
You WILL make mistakes and introduce bugs when coding. A great developer knows this.
Ask anyone you think is a great developer, "What do you do to help prevent or detect the mistakes you make?"
Computers are devices whose primary purpose is to make developers look like idiots when they make statements about what the computer is going to do or not do.
Don't even get me started on photocopies and traffic lights.
To be a great programmer (or even just a good one), you need to never stop learning. Always be learning something. Many times in my life I have learned something on my own, only to be able to apply is a totally different situation later in life.
Great programmer are insanely curious. They want to know the how things work, why one solution is better than another, always improving. That is the key, always be improving your craft, and your knowledge.
I agree. However, too many people can't be bothered to be curious. At best, they just want to get the job done. If you're innately curious, you're going to spend time looking deeply into stuff that "practical" people don't consider worth looking at at all. You're going to try things and see what happens, whether you're a kitten or a developer or Albert-frickin'-Einstein. And that, after all, is what learning really is. You don't so much force yourself to learn to become great, you become great because you can't resist the impulse to learn.
Its true *ESPECIALLY* with the occasional vulnerability because thats a vulnerability thats been found, publicised and fixed unlike in the proprietary shit where the vulnerability will be found by a limited group of people and kept secret so they can use it.
Oh, you mean those nice folks over in Eastern Europe?
Disk interfacing was messy up until IDE became the standard. IDE is no longer an option on my newer motherboards, but I have an adapter that allows me to access IDE drives via USB. Actually, I have 2 of them, come to think of it. One of them also can talk SATA. These days, external USB is popular for disk (and thumb drives) so I expect that it's probably going to have a fairly lengthy run, even as it mutates. I've got an external USB3 drive, but it can be used on USB2 systems.
Optical devices are not immune. Assuming that you're only referring to the CD/DVD branch of the tree, there's some compatibility, although that's another device that used to be available in IDE (and SCSI) and has since migrated on. Other stuff like LaserDisc and WORM devices I'm not so sure about.
Tape is the classic, but tape devices come and go with little inter-generational compatibility. Plus, at least in the case of older tapes, the plastic substrate was prone to become brittle and the oxide to come off.
The purpose of the elastic pricing was to make sure that there was always a nice supply of drivers. Cap the prices, and you won't have as many drivers available to drive you around in the snow. Econ 101, right?
You get a D.
Like a lot of things, "good enough" is often enough. It's not a straight-line or simple curve. Very few things in markets and economies are, despite the fact that many people are horribly prone to assume they are..
Maybe some people won't think that earning nearly 3x their normal fare isn't good enough, but I'll warrant a lot of them will.
Conversely, knowing that there's an upper limit on fares may bring in some people who'd otherwise not bother.
It stays because there is a large group of voters in Florida who still want it.
And they're hypocrites. They've exempted themselves from a lot of the restrictions that the rest of us have.
They've also done their compatriots a huge dis-service. One of the things that corrodes Communism faster than anything else is seeing the people next door bringing home big-screen TVs and buying cars made after 1957 Materialism trumps ideology anyday when you're talking the masses.
I'd be quite willing to give odds on the implosion of Cuban Communism the minute the USA truly opens the borders. Even the fundamental obnoxiousness of American tourists isn't likely to hold it back.
And I bet when you puncture an artery opening one of those "theft-proof" plastic packages for a product you just bought you run out and look for the nearest Boy Scout. Because bandaging up a cut is absurdly simple.
For a beginner, Pascal may seem more readable. For an experienced programmer, C wins. Words like 'begin' and 'end' look too similar to user-defined variables, whereas the curly braces stand out well.
Actually, for a certain programmer of long experience, I can say that I've never been suckered into thinking a stand-alone word like "begin" or "end" was a variable expression or fragment thereof.
I can say that words like "begin" and "end" stand out more (geographically speaking) than the smaller single-character braces, which aren't even fat characters. Just skinny little wiggly lines that are relatively easy to skip over, even when syntax-highlighted.
Two things that do frost me about brace-style programming languages:
1. Any language that doesn't mandate that dependent clauses be wrapped in some sort of delimiter pair is inherently dangerous. I've been burned more than once by code that didn't contain braces that went haywire because I put a simple debug print right after an "if" and forgot what it did to the existing logic. IIRC, pascal begin/end are not optional.
1a, You want to see REAL mayhem, look at one of the COBOL programs I've had to support where generations of "patch-style" programmers have had their way with complex conditional logic. In the original COBOL, even a pair of curly braces was too obvious. COBOL goes on and on until someone slaps down a single dot. At which point the entire if/then/else-pius-nested-conditionals comes to an abrupt end. I've seen stuff where a page and a half separated the primal "IF" from the ending ".".
2. A lot of begin/end languages have unique keywords to bracket clauses. if/endif, loop/endloop, do/while. Brace-delimited languages often use braces for multiple types of controlled clauses, which means it's much easier to lose track of what pairs with which. Not a few C and Java programs I've seen have even resorted to appending comments to their closing braces to make it clear what paired with what.
Until: "Let it go." "No way, that's not justice! I want a retrial! He's guilty, I tell you!"
Not in the USA. Even OJ didn't get double jeopardy. They had to settle for getting him on a separate civil accusation once he was acquitted on the criminal charges.
A retrial isn't something you can demand and get simply for not liking the verdict. You have to prove that the original trial was defective, irrespective of the guilt or innocence of the accused.
You can personally suspect anyone of anything and there's nothing stopping you. Including a verdict of "innocent". But your personal suspicions don't mean squat to the legal process. At best, they can be used by the authorities to initiate investigation, detention, and trial. Legally, whoever you suspect is still supposed to be treated as innocent UNTIL proven guilty, regardless of their actual guilt or innocence. Bur once proven innocent, that's it legally speaking, regardless of your personal assumptions, right or wrong. And the mindset of the USA used to be that personal assumptions of guilt or innocence were similar. We didn't, for example, automatically assume that everyone who walked into the personnel office was a drug-addled illegal immigrant until about 1984.
Actually, "until" assumes that the formalities MUST be observed before you're declared a criminal.
In other words, you must be assumed - and more importantly - treated as - an innocent person right up until the moment that the judge renders the verdict. Granted, you may be incarcerated, brought to the courtroom in shackles and chains and otherwise restrained, but the point is that actual punishment is (or was) forbidden until that final moment. And that in the eyes of the law, at least, no lasting stigma is carried away once found innocent.
I don't know that using the word "unless" makes any real difference except that it doesn't take the before/after time factor into account. Either phrase does tend to imply that you're under suspicion to begin with.
Hardly anything is a truly free market. There's almost always an imbalance on other supply or demand side even if other mechanisms such as regulation or economies of scale don't warp it.
That's why it's so ridiculous to make a religion out of it. Anything that can only function under limited conditions isn't something that can or should be expected to the a Universal Solution.
There was an article a couple of years ago looking at how much US politicians who voted for particular legislation were given by lobbyists in favour of that legislation. It turns out that plutocrats actually don't pay that much for politicians...
There was another one on US government employees who sold sensitive data to foreign powers. It's amazing what $5K could buy.
It's perfectly reasonable to have a position on a subject and still posses common sense.
It's obvious to pretty much everyone that a fleet of off-shore or H1B programmers bill cheaper to your customer than supplying them with actual citizens who can do the same job.
Or perhaps we should change caller ID schemes? Instead of showing the number that the headers are spoofing, have CID show the actual billing number. That can't be spoofed as easily as the CID headers are.
Some of these lizards route their calls through IP phone systems to help obscure actual origins.
I won't argue with the fact that "owning" your data is a lot more convenient, but there are several reasons why centralized data continues to be relevant:
1. It's hard enough to find a shop where even desktop systems have their disks backed up to a secure but accessible location reliably. It gets close to hopeless when you're talking laptops and portable devices.
2. If the data is on Fred's computer and Bert needs it, but Fred is off fishing in the Bahamas, there's a problem. If Fred took his laptop with him and it fell overboard, there's a real problem.
3. If Bert did get a copy of Fred's data, then got laid off, Bert has potentially sensitive corporate assets possibly on his personal home computer and we have only his word that they were erased when he was terminated. If we even know he had it to begin with. One real-world case I know of involved salesmen and their customer contact lists. And competitors.
4. In an era of Big Data, sometimes even a beefed-up desktop machine isn't up to the task of storing and crunching and serving.
5. In an era of "Constitution-free zones", you may not want employees travelling around with sensitive data or the only copy of the data on their portable systems that could be confiscated and possibly rummaged through by outsiders. That means the entire state of Florida and the most interesting (business-wise) parts of California, New York, Boston, Washington (DC and state) and so forth. Ditto-plus if you're travelling to less-than-hospitable foreign destinations where other governments are even more likely to do so.
As far as data-on-web/program-on-pc, that works OK when everyone has a standard copy of Windows. Not so much when it's a mix of Windows, MacOS, Android, IOS, and so forth.
In what way? Internally maybe. From a user perspective on a PC? Absolutely not.
No, I'm reliably informed by Respectable People that anything that's newer is always better and that preferring the old way means that I'm an ignorant dinosaur.
Because you're installing an operating system, and Microsoft does not make a multi-OS bootloader.
Sure they do. You can install and boot multiple Microsoft OS's.
Agile is intended to handle the sudden and dramatic changes of requirement. Because I can virtually guarantee that any significant project that makes its way into user hands is going to get a lot of requests for changes. Not simply because of bad/sloppy original specs but because the users, given even a partial solution will discover new things that need new solutions. Sort of a software "Heisenberg effect", if you will.
What makes a developer great is the ability to allow for this and design for it instead of over-committing to the first set of specs that comes along.
can tell fads from technologies that actually endure
And are therefore defined in hindsight.
Critical thinking, not buying anything some software vendor is willing to sell you, is one thing, and betting on the right horse every time is quite another.
At some point, you can't miss the latter by being conservative and only adopting "new" technologies when they're already mature (now, if you had some sort of almanac...). Also to note, "better" does not always mean "successful".
Oh, I dunno. I've found that if it's too good to be true, it's probably going to be a fad.
If it promises to make developers obsolete, it won't.
If you can get a flashy application working in under 15 minutes, everyone will adopt in and then discover that it takes just as long or longer to actually produce industrial-grade apps as the "old-fashioned" stuff does with the added excitement of discovering new security vulnerabilites.
On the other hand, if something comes along and I go "WTF is this? What does it do? What's it even good for? then I may have just discovered something of lasting value.
Yep, I've never met a really good programmer who didn't use every tool he could exploit to find his bugs.
Good point. In that vein, the best programmer I ever worked with once said he had an "anti-fetish" for bugs. I think that at least partly explained the extremely high quality of his work.
For most of us, though, finding and fixing bugs is a chore that we'd rather avoid because writing code (and therefore more bugs) is more fun. I try to emulate the anti-fetish mentality of my friend, but that remains something that I sometimes have to discipline myself to do rather than something that comes naturally.
Long ago, I had a set of "Programming Proverbs" books. I think that's where I ran into the term "anti-bugging".
Anti-bugging is simply the process of designing and coding so as to make bugs either impossible, or at least easier to detect. It can be as simple as always coding brackets around conditional clauses instead of only when needed, to pre-initializing variables so that in case all the various logic paths fail to set them that their value will be consistent (and ideally, obviously wrong). Coding tests to detect and report things that "will never happen". Because they do, alas. And so forth.
You WILL make mistakes and introduce bugs when coding. A great developer knows this.
Ask anyone you think is a great developer, "What do you do to help prevent or detect the mistakes you make?"
Computers are devices whose primary purpose is to make developers look like idiots when they make statements about what the computer is going to do or not do.
Don't even get me started on photocopies and traffic lights.
It's a conspiracy, I tellya!
To be a great programmer (or even just a good one), you need to never stop learning. Always be learning something. Many times in my life I have learned something on my own, only to be able to apply is a totally different situation later in life.
Great programmer are insanely curious. They want to know the how things work, why one solution is better than another, always improving. That is the key, always be improving your craft, and your knowledge.
I agree. However, too many people can't be bothered to be curious. At best, they just want to get the job done. If you're innately curious, you're going to spend time looking deeply into stuff that "practical" people don't consider worth looking at at all. You're going to try things and see what happens, whether you're a kitten or a developer or Albert-frickin'-Einstein. And that, after all, is what learning really is. You don't so much force yourself to learn to become great, you become great because you can't resist the impulse to learn.
FOSS *is* more secure, and that's true even with the occasional vulnerability.
Loooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooool.
Its true *ESPECIALLY* with the occasional vulnerability because thats a vulnerability thats been found, publicised and fixed unlike in the proprietary shit where the vulnerability will be found by a limited group of people and kept secret so they can use it.
Oh, you mean those nice folks over in Eastern Europe?
Disk interfacing was messy up until IDE became the standard. IDE is no longer an option on my newer motherboards, but I have an adapter that allows me to access IDE drives via USB. Actually, I have 2 of them, come to think of it. One of them also can talk SATA. These days, external USB is popular for disk (and thumb drives) so I expect that it's probably going to have a fairly lengthy run, even as it mutates. I've got an external USB3 drive, but it can be used on USB2 systems.
Optical devices are not immune. Assuming that you're only referring to the CD/DVD branch of the tree, there's some compatibility, although that's another device that used to be available in IDE (and SCSI) and has since migrated on. Other stuff like LaserDisc and WORM devices I'm not so sure about.
Tape is the classic, but tape devices come and go with little inter-generational compatibility. Plus, at least in the case of older tapes, the plastic substrate was prone to become brittle and the oxide to come off.
The purpose of the elastic pricing was to make sure that there was always a nice supply of drivers. Cap the prices, and you won't have as many drivers available to drive you around in the snow. Econ 101, right?
You get a D.
Like a lot of things, "good enough" is often enough. It's not a straight-line or simple curve. Very few things in markets and economies are, despite the fact that many people are horribly prone to assume they are..
Maybe some people won't think that earning nearly 3x their normal fare isn't good enough, but I'll warrant a lot of them will.
Conversely, knowing that there's an upper limit on fares may bring in some people who'd otherwise not bother.
It stays because there is a large group of voters in Florida who still want it.
And they're hypocrites. They've exempted themselves from a lot of the restrictions that the rest of us have.
They've also done their compatriots a huge dis-service. One of the things that corrodes Communism faster than anything else is seeing the people next door bringing home big-screen TVs and buying cars made after 1957 Materialism trumps ideology anyday when you're talking the masses.
I'd be quite willing to give odds on the implosion of Cuban Communism the minute the USA truly opens the borders. Even the fundamental obnoxiousness of American tourists isn't likely to hold it back.
Programming is absurdly simple.
Yeah.
All You Have To Do Is...
And I bet when you puncture an artery opening one of those "theft-proof" plastic packages for a product you just bought you run out and look for the nearest Boy Scout. Because bandaging up a cut is absurdly simple.
For a beginner, Pascal may seem more readable. For an experienced programmer, C wins. Words like 'begin' and 'end' look too similar to user-defined variables, whereas the curly braces stand out well.
Actually, for a certain programmer of long experience, I can say that I've never been suckered into thinking a stand-alone word like "begin" or "end" was a variable expression or fragment thereof.
I can say that words like "begin" and "end" stand out more (geographically speaking) than the smaller single-character braces, which aren't even fat characters. Just skinny little wiggly lines that are relatively easy to skip over, even when syntax-highlighted.
Two things that do frost me about brace-style programming languages:
1. Any language that doesn't mandate that dependent clauses be wrapped in some sort of delimiter pair is inherently dangerous. I've been burned more than once by code that didn't contain braces that went haywire because I put a simple debug print right after an "if" and forgot what it did to the existing logic. IIRC, pascal begin/end are not optional.
1a, You want to see REAL mayhem, look at one of the COBOL programs I've had to support where generations of "patch-style" programmers have had their way with complex conditional logic. In the original COBOL, even a pair of curly braces was too obvious. COBOL goes on and on until someone slaps down a single dot. At which point the entire if/then/else-pius-nested-conditionals comes to an abrupt end. I've seen stuff where a page and a half separated the primal "IF" from the ending ".".
2. A lot of begin/end languages have unique keywords to bracket clauses. if/endif, loop/endloop, do/while. Brace-delimited languages often use braces for multiple types of controlled clauses, which means it's much easier to lose track of what pairs with which. Not a few C and Java programs I've seen have even resorted to appending comments to their closing braces to make it clear what paired with what.
Until: "Let it go." "No way, that's not justice! I want a retrial! He's guilty, I tell you!"
Not in the USA. Even OJ didn't get double jeopardy. They had to settle for getting him on a separate civil accusation once he was acquitted on the criminal charges.
A retrial isn't something you can demand and get simply for not liking the verdict. You have to prove that the original trial was defective, irrespective of the guilt or innocence of the accused.
You can personally suspect anyone of anything and there's nothing stopping you. Including a verdict of "innocent". But your personal suspicions don't mean squat to the legal process. At best, they can be used by the authorities to initiate investigation, detention, and trial. Legally, whoever you suspect is still supposed to be treated as innocent UNTIL proven guilty, regardless of their actual guilt or innocence. Bur once proven innocent, that's it legally speaking, regardless of your personal assumptions, right or wrong. And the mindset of the USA used to be that personal assumptions of guilt or innocence were similar. We didn't, for example, automatically assume that everyone who walked into the personnel office was a drug-addled illegal immigrant until about 1984.
Actually, "until" assumes that the formalities MUST be observed before you're declared a criminal.
In other words, you must be assumed - and more importantly - treated as - an innocent person right up until the moment that the judge renders the verdict. Granted, you may be incarcerated, brought to the courtroom in shackles and chains and otherwise restrained, but the point is that actual punishment is (or was) forbidden until that final moment. And that in the eyes of the law, at least, no lasting stigma is carried away once found innocent.
I don't know that using the word "unless" makes any real difference except that it doesn't take the before/after time factor into account. Either phrase does tend to imply that you're under suspicion to begin with.
Hardly anything is a truly free market. There's almost always an imbalance on other supply or demand side even if other mechanisms such as regulation or economies of scale don't warp it.
That's why it's so ridiculous to make a religion out of it. Anything that can only function under limited conditions isn't something that can or should be expected to the a Universal Solution.
But the Free Market says that anyone who doesn't like the job conditions can just go look for a higher/better bidder! (just don't expect to find one.)
There was an article a couple of years ago looking at how much US politicians who voted for particular legislation were given by lobbyists in favour of that legislation. It turns out that plutocrats actually don't pay that much for politicians...
There was another one on US government employees who sold sensitive data to foreign powers. It's amazing what $5K could buy.
Yes but money is easy to measure.
Never done corporate accounting, have you?
Are you sure it's not because God foresaw fat people in spandex, so made spandex illegal in 3000 b.c.?
Well, that's the Bible for you. True today as the day it was written.
"Common sense" means "agrees with my preconceptions".
It's perfectly reasonable to have a position on a subject and still posses common sense.
It's obvious to pretty much everyone that a fleet of off-shore or H1B programmers bill cheaper to your customer than supplying them with actual citizens who can do the same job.
That's common sense.
Actually, I tend to file it under "mathematics".
Or perhaps we should change caller ID schemes? Instead of showing the number that the headers are spoofing, have CID show the actual billing number. That can't be spoofed as easily as the CID headers are.
Some of these lizards route their calls through IP phone systems to help obscure actual origins.
"Innocent until proven guilty" used to be an essential part of English/American culture, not just the legal system.
Where did we go wrong?
It isn't "their" data, it's the company's data.
I won't argue with the fact that "owning" your data is a lot more convenient, but there are several reasons why centralized data continues to be relevant:
1. It's hard enough to find a shop where even desktop systems have their disks backed up to a secure but accessible location reliably. It gets close to hopeless when you're talking laptops and portable devices.
2. If the data is on Fred's computer and Bert needs it, but Fred is off fishing in the Bahamas, there's a problem. If Fred took his laptop with him and it fell overboard, there's a real problem.
3. If Bert did get a copy of Fred's data, then got laid off, Bert has potentially sensitive corporate assets possibly on his personal home computer and we have only his word that they were erased when he was terminated. If we even know he had it to begin with. One real-world case I know of involved salesmen and their customer contact lists. And competitors.
4. In an era of Big Data, sometimes even a beefed-up desktop machine isn't up to the task of storing and crunching and serving.
5. In an era of "Constitution-free zones", you may not want employees travelling around with sensitive data or the only copy of the data on their portable systems that could be confiscated and possibly rummaged through by outsiders. That means the entire state of Florida and the most interesting (business-wise) parts of California, New York, Boston, Washington (DC and state) and so forth. Ditto-plus if you're travelling to less-than-hospitable foreign destinations where other governments are even more likely to do so.
As far as data-on-web/program-on-pc, that works OK when everyone has a standard copy of Windows. Not so much when it's a mix of Windows, MacOS, Android, IOS, and so forth.
In what way? Internally maybe. From a user perspective on a PC? Absolutely not.
No, I'm reliably informed by Respectable People that anything that's newer is always better and that preferring the old way means that I'm an ignorant dinosaur.