|
Manning | Brownfield Application Development in .NET[^]
Sidenote; I reviewed the book before it got published.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Looks like a very practical book!
|
|
|
|
|
|
It's named after the color of a steaming pile of...
(Probably not, but I like to think so and it's often true)
|
|
|
|
|
Any farmer will call that a fertile field
Our carrots were fertilized with cow-dung. We ate them without washing them.
George Carlin - Germs, Immune System - YouTube[^]
"You gonna get sick, you gonna die, and you gonna deserve it, because you fakking weak and you got a fakking weak immune-system".
"The polio never had a prayer; we were tempered in raw sh*t"
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Not this project.
Unless you want to learn how NOT to do things...
Such inheritance is often a bad deal since you'll be spending two to three times as much time as the old party to fix bugs while the chances of introducing new bugs increases.
Meanwhile, you're working half price since you can't invoice all the hours you're making.
And if you introduce enough bugs you may end up with an unhappy client.
"But the former programmer made a mess out of things!" is not a valid excuse.
Like today I had to "just fix a form, everything worked except a value was not saved to the database."
Opening the form revealed it had all kinds of buttons that did nothing (or worse, did something) and shouldn't be there.
There was binding in place, but everything was inserted directly into the controls.
So I added something to the binding, then the application crashed because you can't do both, then I removed the binding and the designer thought it necessary to reflect that...
Long story short, after trying to make it work for about an hour I started over, finding not even the database schema was correct.
It took me about four hours in total (which should've been a "quick fix"), which is more than the customer is going to pay me for this one
If that was all, I could've gotten away with it, but this is one of many such changes.
Eddy Vluggen wrote: that's not a good generic reason for everyone to decline such an inheritance Of course.
I inherited is as well, after all.
You just need a damn good reason (and I know a lot of companies that simply don't, ever)
|
|
|
|
|
Sander Rossel wrote: Unless you want to learn how NOT to do things... Learning is learning. Imagine a project, over 10 devs, over 10 yrs old. In VB6. Don't complain about some idiot storing bools as a list of strings in a database ("0010101010101000010101"), because the idiot might be your boss.
Sander Rossel wrote: Meanwhile, you're working half price since you can't invoice all the hours you're making. Your own choice. I get paid for the actual hours I work.
Sander Rossel wrote: And if you introduce enough bugs you may end up with an unhappy client. Who'd expect that?
Sander Rossel wrote: Like today I had to "just fix a form, everything worked except a value was not saved to the database."
Opening the form revealed it had all kinds of buttons that did nothing (or worse, did something) and shouldn't be there. Sometimes a fix is more expensive than expected. Just add it to the bill, it's what any car-mechanic would do. Why don't you?
Sander Rossel wrote: Long story short, after trying to make it work for about an hour I started over, finding not even the database schema was correct.
It took me about four hours in total (which should've been a "quick fix"), which is more than the customer is going to pay me for this one If you want to be an entrepeneur, you take risc. I'm just a simple slave, so I don't know about riscs.
Sander Rossel wrote: You just need a damn good reason (and I know a lot of companies that simply don't, ever) I don't need a reason, I do what I am paid for. I can point you to companies that don't exist anymore because they believed a rewrite was needed
You good at greenfields, me good at brownfields; a good team has balance
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Eddy Vluggen wrote: Learning is learning Unfortunately, no one comments their code with "This is bad code, so don't ever do this. Instead do..."
I'm now knowledgeable enough to know this code is bad, but I started out with code like this and back then I didn't know any better.
It's a sort of learning, I guess, but not nearly as effective as being in a good team with good programmers who know their stuff.
At least I knew what SQL injection was when I read that I shouldn't do that anymore
So with this project I'm not learning anything.
Eddy Vluggen wrote: Your own choice. I get paid for the actual hours I work. In this particular case this new client will give me some new projects in the new year.
Which they probably won't do if I'm charging two to three times the price their former programmer did.
I'm seeing it as an investment while still making some money
Eddy Vluggen wrote: I don't need a reason, I do what I am paid for. As a company, it's always a risk taking on projects that were set up by other companies.
If I had a boss and he told me to work on this project he decided to inherit, I'd oblige, take my sweet time to get familiar with it, and write down any hours I spent on it.
But when I'm asked to take over a project I'll think twice and discuss what's in it for me other than some incidental bug fixing that I'll probably do at half my rate.
There's also a big difference between inheriting a project from a coworker who's still around for questions and a project that was written by a different company.
The former is way more awkward when you're complaining about your apparently dumb coworker who obviously doesn't understand what the hell he's doing
|
|
|
|
|
Sander Rossel wrote: I guess, but not nearly as effective as being in a good team with good programmers who know their stuff.
At least I knew what SQL injection was when I read that I shouldn't do that anymore
So with this project I'm not learning anything. You learning what can go wrong, and the most common pitfalls.
Sander Rossel wrote: In this particular case this new client will give me some new projects in the new year.
Which they probably won't do if I'm charging two to three times the price their former programmer did.
I'm seeing it as an investment while still making some money That's management-voodoo. As a worker, you get asked back only if you deliver.
Sander Rossel wrote: As a company, it's always a risk taking on projects that were set up by other companies. Like buying company shares blindfolded, usually. It's not like they look at the code they are buying
Sander Rossel wrote:
There's also a big difference between inheriting a project from a coworker who's still around for questions and a project that was written by a different company.
The former is way more awkward when you're complaining about your apparently dumb coworker who obviously doesn't understand what the hell he's doing Doesn't matter to the employer. Explain they made a bad investment before, and that you're expensive because you fix it.
Don't like it? Find someone else to fix it.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
Eddy Vluggen wrote: That's management-voodoo As it happens, I manage my own company
Eddy Vluggen wrote: Don't like it? Find someone else to fix it. With my fresh few months old company I'm not in any position to refuse clients at this moment
|
|
|
|
|
Sander Rossel wrote: As it happens, I manage my own company Ah; that makes life a bit more complicated, dunnit? I can just focus on code, go for the best option without having to think about politics with the client. I can give reasons and arguments for what I do, and give the manager the option to choose; his/her arguments are final, since I don't do that voodoo. They know clients and their social/financial situation, I know nothing but code.
Manager explained me that clients want the best solution for the least amount of money. I cannot guess value, unless I can put a breakpoint there. What is best is "complicated". I don't even like discussing it, you do it right or you don't do it at all. If you are depending on the happiness of a client, then things like security may suffer.
Sander Rossel wrote: With my fresh few months old company I'm not in any position to refuse clients at this moment Good luck to you. If you're good at both things, then you're on the road to success.
..but that road will be hard and long. Just sayin', so you not gonna be surprised.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
That's the best part!
I've always considered the client and the costs, even when I was just a code monkey.
"I can make this, but with just a little change/concession I can do it a lot cheaper."
Or "We should REALLY do that even if the client doesn't want it because it's going to save us both a lot of pain later on!"
If I knew what was coming I could even tell my manager we should put some effort here, charge the client less, and then get it back on later work which would take less, but we could charge more.
I've even called clients to sell them my ideas or help them with theirs.
Of course there's a huge difference between helping existing customers and trying to reel in a new one.
The code, while sometimes fun, is often the most boring part
I did recently turn down a job offer by the way.
It was some bug fixing in a WordPress application.
I don't know WordPress all that well, so nothing good can come from that
Sometimes it's really not worth the investment.
|
|
|
|
|
Sander Rossel wrote: That's the best part!
I've always considered the client and the costs, even when I was just a code monkey.
"I can make this, but with just a little change/concession I can do it a lot cheaper." Then you management-material, or an entrepeneur. I couldn't care about budget, it takes what it takes. I cannot make up a price because I often don't know what it exactly takes. You can ask the car-mechanic for a price up front, where the mechanic guesses and makes assumptions about the costs. You cannot promise what you don't know (in my world), but that voodoo is what makes a good salesmen.
Sander Rossel wrote: I've even called clients to sell them my ideas or help them with theirs. Not shooting at my bosses' pigeons, I will give my ideas to my manager; if the company makes more, then it profits every employee in the end (or more profit for the owner).
Sander Rossel wrote: I did recently turn down a job offer by the way.
It was some bug fixing in a WordPress application.
I don't know WordPress all that well, so nothing good can come from that
Sometimes it's really not worth the investment. I read WordPress as "VB4". Did I mention I'm for hire?
A manager that can code, doesn't get mad when you get code filled with goto's and resume nexts, who understands finances, politics and social aspects, is something rare. One that also does sales succesfully, is too much to ask. If you can delegate, I'm interested.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
When I was teaching at a tech college, the class was split into four project groups for a four-stage project, all working from the same specifications and requirements. This was the last project in their bachelor study.
I wanted them to get accustomed to what they must expect when they enter working life: Take over someone else's code. So for each of the four phases, the results produced by each group was rotated to another group, as a starting point for the next work phase.
This was met by so much disgust and hatred that I was happy that these students would be out of college within a few months. I never tried to repeat anything like that. Still, I think Computer Science students should have been "forced to" work with the code of other programmers - that is, average middle class programmers, not the near-ideal source code of highly recognized open source systems, which does everything right, follows standards conistently etc.
The code handed over to you from an overworked colleague who never had time to clean it up, it never had a clean design but has grown uncontrollably like an amoebae, with lots of loose ends and age-old TODOs... That is far from the idealized, academic open-source code. And then think of all the non-idealized code of the zillions of open source offerings made by less than perfect programmers, but thrown out to the world in the hope that someone will volunteer to clean it up...
|
|
|
|
|
|
A brilliant idea, although the reaction was unsurprising. Having to suffer through this three times was cruel, but applying it to a two-stage project would be fair. If told up front that it would rankle them, it would probably temper the reaction.
|
|
|
|
|
I agree - brilliant. I can tell you this - there may have been much disgust during the class, but a few years into working, and they are going to have their "aha!" moment.
Charlie Gilley
<italic>Stuck in a dysfunctional matrix from which I must escape...
"Where liberty dwells, there is my country." B. Franklin, 1783
“They who can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.” BF, 1759
|
|
|
|
|
it's VB?
|
|
|
|
|
Sander Rossel wrote: I REALLY don't know what to make of this Why don't you remove the lines and push the app. That way when something crashes or misbehaves in the wild you'd know the first place to look.
|
|
|
|
|
that code block was a common trick from VB6 days -- there's code under a button somewhere and that has to run for some time, but async code is hard, so we just "block" logical progression by waiting for completion (in this case, 5 seconds), but we have to `Application.DoEvents()` now and then or the app becomes unresponsive.
It's not an ideal situation -- `Thread.Sleep()` could rather be replaced by something like `Test if mail sent`, but that's why it's there.
|
|
|
|
|
Ummm, Thread.Sleep() holds the UI & Application.DoEvents releases the UI ? (I have used it to update the Form while waiting for some stuff to happen) most of the time unless you are very luck if DoEvents gets through a code review!..
|
|
|
|
|
Sander Rossel wrote: I just spent over an hour fixing some custom DateTime TextBox that only worked if the system clock was in a specific Dutch format (both CurrentCulture and CurrentUICulture had to match) Yet another reason why we UI developers get the big money .Sander Rossel wrote: I prefer having my OS in English because it's more Googleable My employer insists on providing our UI's in English, French, Italian, German, Spanish, Japanese, Chinese Simplified, and occasionally Polish and Russian. Despite that, we find most of our customers running the UI in English. I think you've helped me figure out why.
Software Zen: delete this;
|
|
|
|
|
I would rather use a curare-paralyzed program manager's rib for my snicker-snee [^], but, let's not be afraid to go with our gut instincts: [^]
«One day it will have to be officially admitted that what we have christened reality is an even greater illusion than the world of dreams.» Salvador Dali
|
|
|
|
|
Another far-fetched story about the inuit. Why use warm sh*t if there's ice and rocks?
The story does not show "that inuit don't fear cold but take advantage of it", but shows that humans are creative in coming up with stories.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
"If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.
|
|
|
|
|
The depth and breadth of your scholarly interests never ceases to amaze me!
Will Rogers never met me.
|
|
|
|
|