You'd rather I give you multiple helpdesk tickets because I want to install netscape 4.7, netscape 6, netscape 7, netscape 7.02, mozilla 1.4, mozilla 1.5, mozilla 1.6 beta. Heck, I'm still on web browsers..
Next day, another ticket because I want to install a development library I found on the web.
Next day, another ticket because I need to change a system environment variable so that the software I'm developing can run.
Not to mention the 28 tickets I've put in during those three days because I'm constantly re-compiling my code and I can't run it because the system is locked down.
As a developer, I work far more productively, effectively and efficiently if I have adequate levels of access to my own PC.
If I do install Kazaa, I expect to have a nasty interview with the Director of HR.
If I do install Gator, I expect your ticket resolution to be 'ok, we just need to re-ghost that PC'.
Sure, be a bastard sysadmin. But don't fucking prevent me doing my job, just to make your life easier.
So put in place acceptance criteria for the systems. Encourage system testing, performance testing, testing on a pseudo-live environment.
If a login page makes 75 ODBC calls, insist it gets re-written.
This 'ivory tower' developer considers system performance and maintenance to be a serious consideration during the architecture and design phases of a development project, and puts immense amounts of thought into ensuring they wont be problems.
However, the business needs the software written, today. I'm not going to ask my developers to spend eight weeks optimising their code when I can ask you to spend two weeks optimising the database.
I also don't expect they to be sat unable to fix a bug or deploy to a test environment because they don't have the necessary access, or because the admin is on holiday or something. That's just obstructive.
Developers and admins have to work together. Source code repositories are absolutely essential, but a lot of work to maintain. So I _want_ an admin for mine - he can deal with all the crap and let the developers implement value-adding business code. If the admin wants the devs to follow certain procedures to make his life easier, then fine, lets do that - but lets not make their lives intolerable to achieve that. If the system admin has everything locked down, nobody else can touch production and as a result he keeps it secure and stable then fantastic. However, he better be able to roll out a release on the agreed date. And yes, I'm happy to provide the information he needs to do that - that's what rollout plans are all about. Good DBAs are worth their weight in gold. I know how to write some pretty complex SQL. I can make a database do exactly what I want. I also need a good DBA to re-write what I've done so that the database performs well, to allocate data into various partitions to reduce bottlenecks, to implement online backups so that we dont need to bring the system down each night. So we need to work together - he lets me do what I need in the dev databases and I provide him with the information and time needed to translate that into the test and production environments.
So some admins are there to make life easier for the developers. And all admins should consider how they can make life easier for the developers. But developers should also spare a thought for the admins, and what their requirements and needs are, and cater to them.
It's a collaboration, just as with any aspect of software engineering.
That might be your personal objective, but if you're in a 'real enterprise shop' then your customer is 'The Business' and your objectives should be to ensure the correct operation of that business.
It might be cheaper to the business to have you (or a colleague) paged every three hours to sort something out than to spend a few weeks/months configuring something to avoid that.
As a developer, I just don't care. I need admin rights to my own PC if I'm running Windows, so that I can install software, modify system environment variables and do the myriad of other things that need to be done while writing software. I also fully expect you to respond to requests for assistance on said PC by saying 'ok, we'll re-ghost it'.
When I'm deploying systems into production, I am happy to provide you with adequate information on memory use, ports, bandwidth, routing, disk storage and other such items. I'm actually delighted if you take those raw numbers and translate them into a stable production environment that I don't have to worry about. It lets me worry about what I'm responsible for: ensuring the system correctly implements the business processes and rules that are needed by 'the business'.
To me there should be no 'admin v developer' issue - it's a partnership, with unusually clean lines of separation.
Having said that, when I'm architecting a system, I do look at network, hardware, capacity, admin skillsets, database sizing and performance. But I'm happy to drag a couple of admins in to give me a hand with that lot..
>> Now I doubt that the companies intentionally make the mistakes in order to extract more money from the customer...
However, they do make subtle business decisions that extract money from the customer.
I'm aware of a large credit card company that delayed putting the ability to pay off your card online, as that would encourage people to pay their bills on time.
Making it harder to people to pay means more people missing a payment, so more late fees and more interest.
Cynical, but not only does it happen, it's sometimes factored into the profitability of a credit card product.
I need to be able to scan previously unseen code fast, work out what it's doing, and spot any potential issues.
I rarely need to worry too much about the types of the variables and objects involved, and when I do, most modern IDEs make it extremely simple (a single key stroke) to find out what something is, where it's declared, etc.
Then again, I'm usually working with Java in a business environment; people writing device drivers in C have a somewhat different set of circumstances..
Actually, in fairness, there is no explanation for using Hungarian notation. What minimal value may be derived from it is more than countered by increased costs involved.
Hell yes. This is why I have multiple windows open with big red KILL buttons, poised to wipe it from my hard disk at the slightest signs of aggression.
The hard part is remembering not to hit them when I see a Flash advert obscuring a webpage. I _think_ it's not doing that on purpose...
If you can optimise by running things in-process, then more traditional OO techniques are going to apply. I was discussing the usual distributed environment (which is where you'd be using EJBs).
I haven't read Fowler's Enterprise Architecture book yet - it's sat on my coffee table waiting for me to finish another first..
Erm. No. When writing distributed systems (i.e. many of the current business systems being developed today) you need to use data somewhere it's not stored.
Whether you use RMI, Oracle OCI calls, a custom TCP/IP protocol, small children carrying bits of paper, a distributed system will work best by minimising the number of remote calls required. What you call a 'workaround' is what I (and half the industry) call a sensible implementation of a known design pattern.
For distributed systems, coarse grained interfaces are ideal. I don't want access to a Customer object, I want access to Customer data, and I'd far rather have to make one call to retrieve it than 30 calls to get the customer's name, house number, address, zip code, phone number, mother's maiden name, etc.
So finally, to answer your question: No, it doesn't illustrate a deficiency in RMI. It indicates an awareness of good programming practice in a distributed environment.
>> suffering he may have incurred arising from wrongful imprisonment
I'll say again: If he's been raped in prison, I hope he gets redress whether he's been wrongfully imprisoned or not. The correctness of his presence in prison is completely tangential to the wrongness of being raped.
>> If he was raped in prison, god forbid, and can prove it, then the government could be in for a very big shafting (no pun intended).
With all due respect, just what the fuck does that have to do with his innocence or guilt? I'd seriously hope he has legal comeback should he get sexually assaulted in jail whether he's Snow White or Jack the Ripper.
Did you really mean to imply that raping people in prison is perfectly acceptable if they were actually guilty?
Oh no, it's the only store open past 10pm!! Panic!
Bullshit. There will be smaller stores and garages open, you just haven't found them yet.
Even if you live in the one part of the US where there aren't, just how often do you need to go shopping after 10pm? Has it ever occurred to you to either plan ahead, and get your shopping done before 10pm, or perhaps (gasp) wait until the next day?
Your lame excuses are exactly that. Lame. Get a clue.
It's less a comment on the specific GM food being avoided, and more a protest at GM foods in general.
Maybe your 'wheat that wont create seeds that can be planted for next years crop' is perfectly safe to eat. That tells me nothing about the 300 variants you made to get that one, and their safety. It says nothing about preventing the propagation of those variants. It says nothing about the dubious marketing tactics you're using to encourage take-up of your new wheat.
So yes, it is irrational to avoid GM foods, simply because they are GM. But it is rational to avoid GM foods, simply because of the implications surrounding them being GM.
No ego? On the contrary. I'll back my programming ability against anybody on Slashdot. I know I can deliver high quality code to tough deadlines that actually meets business needs. I'm used to my projects hitting deadlines and going live on schedule.
What I am capable of doing is looking critically at my own code, acknowledging where I'd do things differently next time, recognising where an invalid assumption has made the code less optimal than it could be, and accepting such criticisms from others.
When I bore the hell out of my partner because I make so few mistakes, it's not because I can type 80 wpm, it's because I haven't been involving him in a discussion on what I'm doing, how I'm doing it, and why one approach may be better than the other.
When my partner is boring the hell out of me by being inadequate at the keyboard, I ignore his typing problems and focus on his intent. Is the code he's writing correct - does it have bugs in it, is the design sensible, has he written adequate unit tests, should we consider another approach to the problem.
Pair programming is not like training wheels. I'd even suggest it's worth getting junior developers up to a certain level before going full PP on them. I've yet to meet anybody who was so good at programming they wouldn't have benefited from pairing.
RUP was developed to sell Rational tools. I mistrust it for that reason.
XP was developed out of the practical pragmatic experience of several exceedingly good developers. I trust it because it makes immense sense to me.
I've tried both. I tend to use a mix of techniques from each, and some from elsewhere. Given the choice between pure RUP and pure XP, I'll pick XP - but I'll ask for a good coach to help my team get up and running on it.
I'm not an 'exceptional programmer' - I'm just a fucking good one.
When pair programming, I benefit from the expertise and experience of another developer. I avoid making silly mistakes, because he spots them for me. I don't write as many bugs, because he spots them. I don't dither about variable names, or whether to refactor a method, or which algorithm to use - because I have someone to help me keep focussed, someone that helps me make swift decisions, that keeps me on track and moving forwards.
Sure, sometimes I want to read a news story on the web. That's why when pair programming we take a break every hour or two. It depends on the progress we're making, how focussed we are, whether we've got the code to compile and pass all its tests.
Pair programming is not punishment. It's an enlightening experience, a joy to participate in, something I want to do more often.
Nobody is such an exceptional programmer that they can't learn from someone who still needs to look up the language syntax. Lose your ego, open your mind, and actually try PP.
Actually, it exposes them quicker, as their incompetence becomes immediately apparent to their partner.
Further, it gives the partner an opportunity to improve them and reduce their incompetence.
If that doesn't work, then they're hopelessly incompetent, and you're no worse off than had you not programmed (and indeed, much better than if you'd found out 8 months into development when you did your first code review)
>> reduces the learning that comes from failing at a certain approach
Actually, it increases the learning - that learning is spread around the whole team in short order. The team learn collectively from their failures, instead of each individual having to make them all in turn.
>> and discourages leaps of faith.
I'm not sure what you're getting at here. I have been sat with a partner while he's said "go with me on this one for ten minutes, I want to try something". I shut up, I watch, I learn, I see how he's intuitively solved a problem or implemented a mechanism and saved a ton of work.
Or I've been driving, and I've asked my partner, "I know we should methodically trace through this bug, but I reckon I can find it by guesswork - gimme a couple of minutes to have a go". Two minutes later, bug fixed, several hours of painful tracing averted.
It's about building good communication within the pair, in having faith in each others abilities. What you've been describing is not pair programming.
You'd rather I give you multiple helpdesk tickets because I want to install netscape 4.7, netscape 6, netscape 7, netscape 7.02, mozilla 1.4, mozilla 1.5, mozilla 1.6 beta. Heck, I'm still on web browsers..
Next day, another ticket because I want to install a development library I found on the web.
Next day, another ticket because I need to change a system environment variable so that the software I'm developing can run.
Not to mention the 28 tickets I've put in during those three days because I'm constantly re-compiling my code and I can't run it because the system is locked down.
As a developer, I work far more productively, effectively and efficiently if I have adequate levels of access to my own PC.
If I do install Kazaa, I expect to have a nasty interview with the Director of HR.
If I do install Gator, I expect your ticket resolution to be 'ok, we just need to re-ghost that PC'.
Sure, be a bastard sysadmin. But don't fucking prevent me doing my job, just to make your life easier.
~Cederic
So put in place acceptance criteria for the systems. Encourage system testing, performance testing, testing on a pseudo-live environment.
If a login page makes 75 ODBC calls, insist it gets re-written.
This 'ivory tower' developer considers system performance and maintenance to be a serious consideration during the architecture and design phases of a development project, and puts immense amounts of thought into ensuring they wont be problems.
However, the business needs the software written, today. I'm not going to ask my developers to spend eight weeks optimising their code when I can ask you to spend two weeks optimising the database.
I also don't expect they to be sat unable to fix a bug or deploy to a test environment because they don't have the necessary access, or because the admin is on holiday or something. That's just obstructive.
Developers and admins have to work together. Source code repositories are absolutely essential, but a lot of work to maintain. So I _want_ an admin for mine - he can deal with all the crap and let the developers implement value-adding business code. If the admin wants the devs to follow certain procedures to make his life easier, then fine, lets do that - but lets not make their lives intolerable to achieve that.
If the system admin has everything locked down, nobody else can touch production and as a result he keeps it secure and stable then fantastic. However, he better be able to roll out a release on the agreed date. And yes, I'm happy to provide the information he needs to do that - that's what rollout plans are all about.
Good DBAs are worth their weight in gold. I know how to write some pretty complex SQL. I can make a database do exactly what I want. I also need a good DBA to re-write what I've done so that the database performs well, to allocate data into various partitions to reduce bottlenecks, to implement online backups so that we dont need to bring the system down each night. So we need to work together - he lets me do what I need in the dev databases and I provide him with the information and time needed to translate that into the test and production environments.
So some admins are there to make life easier for the developers. And all admins should consider how they can make life easier for the developers. But developers should also spare a thought for the admins, and what their requirements and needs are, and cater to them.
It's a collaboration, just as with any aspect of software engineering.
~Cederic
That might be your personal objective, but if you're in a 'real enterprise shop' then your customer is 'The Business' and your objectives should be to ensure the correct operation of that business.
It might be cheaper to the business to have you (or a colleague) paged every three hours to sort something out than to spend a few weeks/months configuring something to avoid that.
As a developer, I just don't care. I need admin rights to my own PC if I'm running Windows, so that I can install software, modify system environment variables and do the myriad of other things that need to be done while writing software. I also fully expect you to respond to requests for assistance on said PC by saying 'ok, we'll re-ghost it'.
When I'm deploying systems into production, I am happy to provide you with adequate information on memory use, ports, bandwidth, routing, disk storage and other such items. I'm actually delighted if you take those raw numbers and translate them into a stable production environment that I don't have to worry about. It lets me worry about what I'm responsible for: ensuring the system correctly implements the business processes and rules that are needed by 'the business'.
To me there should be no 'admin v developer' issue - it's a partnership, with unusually clean lines of separation.
Having said that, when I'm architecting a system, I do look at network, hardware, capacity, admin skillsets, database sizing and performance. But I'm happy to drag a couple of admins in to give me a hand with that lot..
~Cederic
>> Now I doubt that the companies intentionally make the mistakes in order to extract more money from the customer...
However, they do make subtle business decisions that extract money from the customer.
I'm aware of a large credit card company that delayed putting the ability to pay off your card online, as that would encourage people to pay their bills on time.
Making it harder to people to pay means more people missing a payment, so more late fees and more interest.
Cynical, but not only does it happen, it's sometimes factored into the profitability of a credit card product.
~Cederic
At a cost of readability and approachability.
I need to be able to scan previously unseen code fast, work out what it's doing, and spot any potential issues.
I rarely need to worry too much about the types of the variables and objects involved, and when I do, most modern IDEs make it extremely simple (a single key stroke) to find out what something is, where it's declared, etc.
Then again, I'm usually working with Java in a business environment; people writing device drivers in C have a somewhat different set of circumstances..
~cederic
Actually, in fairness, there is no explanation for using Hungarian notation. What minimal value may be derived from it is more than countered by increased costs involved.
~Cederic
>> "no amount of commercial loss compares with murder."
Actually, sufficient commercial loss results in financial ruin for millions, economic depression and a lower quality of life for hundreds of millions.
The number of suicides and increase in abuse alone make it worse than a single simple murder.
~Cederic
I may be the wrong age-group, sex, level of intelligence or just sense of humour, but most of Homestar Runner seems pretty crap to me.
However.
One of the all-time truely great things on the Internet is Trogdor the Burninator.
~Cederic
>> PS - God loves you and longs for relationship with you.
Yeah, but so does the girl on the street corner, and her rates are better.
yeah - in the UK they're more likely to pull you over so that you _cant_ get to the loo on time. Hilarity ensues..
~Cederic
I buy books from the US pretty often. There is no import duty on them.
DVDs on the other hand...
~Cederic
People use fake names on
Ah, now that was an aircraft. I've seen those taking off, and it's a truly scary sight
~Cederic
Hell yes. This is why I have multiple windows open with big red KILL buttons, poised to wipe it from my hard disk at the slightest signs of aggression.
The hard part is remembering not to hit them when I see a Flash advert obscuring a webpage. I _think_ it's not doing that on purpose...
~Ced
If you can optimise by running things in-process, then more traditional OO techniques are going to apply. I was discussing the usual distributed environment (which is where you'd be using EJBs).
I haven't read Fowler's Enterprise Architecture book yet - it's sat on my coffee table waiting for me to finish another first..
~Cederic
Erm. No. When writing distributed systems (i.e. many of the current business systems being developed today) you need to use data somewhere it's not stored.
Whether you use RMI, Oracle OCI calls, a custom TCP/IP protocol, small children carrying bits of paper, a distributed system will work best by minimising the number of remote calls required. What you call a 'workaround' is what I (and half the industry) call a sensible implementation of a known design pattern.
For distributed systems, coarse grained interfaces are ideal. I don't want access to a Customer object, I want access to Customer data, and I'd far rather have to make one call to retrieve it than 30 calls to get the customer's name, house number, address, zip code, phone number, mother's maiden name, etc.
So finally, to answer your question: No, it doesn't illustrate a deficiency in RMI. It indicates an awareness of good programming practice in a distributed environment.
~Cederic
>> suffering he may have incurred arising from wrongful imprisonment
I'll say again: If he's been raped in prison, I hope he gets redress whether he's been wrongfully imprisoned or not. The correctness of his presence in prison is completely tangential to the wrongness of being raped.
~Cederic
>> If he was raped in prison, god forbid, and can prove it, then the government could be in for a very big shafting (no pun intended).
With all due respect, just what the fuck does that have to do with his innocence or guilt? I'd seriously hope he has legal comeback should he get sexually assaulted in jail whether he's Snow White or Jack the Ripper.
Did you really mean to imply that raping people in prison is perfectly acceptable if they were actually guilty?
~Cederic
So don't go.
Oh no, it's the only store open past 10pm!! Panic!
Bullshit. There will be smaller stores and garages open, you just haven't found them yet.
Even if you live in the one part of the US where there aren't, just how often do you need to go shopping after 10pm? Has it ever occurred to you to either plan ahead, and get your shopping done before 10pm, or perhaps (gasp) wait until the next day?
Your lame excuses are exactly that. Lame. Get a clue.
~Cederic
It's less a comment on the specific GM food being avoided, and more a protest at GM foods in general.
Maybe your 'wheat that wont create seeds that can be planted for next years crop' is perfectly safe to eat. That tells me nothing about the 300 variants you made to get that one, and their safety. It says nothing about preventing the propagation of those variants. It says nothing about the dubious marketing tactics you're using to encourage take-up of your new wheat.
So yes, it is irrational to avoid GM foods, simply because they are GM. But it is rational to avoid GM foods, simply because of the implications surrounding them being GM.
~Cederic
Or do OS development in Europe. I believe MS' patent doesn't apply over here..
~Cederic
No ego? On the contrary. I'll back my programming ability against anybody on Slashdot. I know I can deliver high quality code to tough deadlines that actually meets business needs. I'm used to my projects hitting deadlines and going live on schedule.
What I am capable of doing is looking critically at my own code, acknowledging where I'd do things differently next time, recognising where an invalid assumption has made the code less optimal than it could be, and accepting such criticisms from others.
When I bore the hell out of my partner because I make so few mistakes, it's not because I can type 80 wpm, it's because I haven't been involving him in a discussion on what I'm doing, how I'm doing it, and why one approach may be better than the other.
When my partner is boring the hell out of me by being inadequate at the keyboard, I ignore his typing problems and focus on his intent. Is the code he's writing correct - does it have bugs in it, is the design sensible, has he written adequate unit tests, should we consider another approach to the problem.
Pair programming is not like training wheels. I'd even suggest it's worth getting junior developers up to a certain level before going full PP on them. I've yet to meet anybody who was so good at programming they wouldn't have benefited from pairing.
~Cederic
RUP was developed to sell Rational tools. I mistrust it for that reason.
XP was developed out of the practical pragmatic experience of several exceedingly good developers. I trust it because it makes immense sense to me.
I've tried both. I tend to use a mix of techniques from each, and some from elsewhere. Given the choice between pure RUP and pure XP, I'll pick XP - but I'll ask for a good coach to help my team get up and running on it.
~Cederic
Have you ever actually tried pair programming?
I'm not an 'exceptional programmer' - I'm just a fucking good one.
When pair programming, I benefit from the expertise and experience of another developer. I avoid making silly mistakes, because he spots them for me. I don't write as many bugs, because he spots them. I don't dither about variable names, or whether to refactor a method, or which algorithm to use - because I have someone to help me keep focussed, someone that helps me make swift decisions, that keeps me on track and moving forwards.
Sure, sometimes I want to read a news story on the web. That's why when pair programming we take a break every hour or two. It depends on the progress we're making, how focussed we are, whether we've got the code to compile and pass all its tests.
Pair programming is not punishment. It's an enlightening experience, a joy to participate in, something I want to do more often.
Nobody is such an exceptional programmer that they can't learn from someone who still needs to look up the language syntax. Lose your ego, open your mind, and actually try PP.
~Cederic
>> it hides incompetent programmers
Actually, it exposes them quicker, as their incompetence becomes immediately apparent to their partner.
Further, it gives the partner an opportunity to improve them and reduce their incompetence.
If that doesn't work, then they're hopelessly incompetent, and you're no worse off than had you not programmed (and indeed, much better than if you'd found out 8 months into development when you did your first code review)
>> reduces the learning that comes from failing at a certain approach
Actually, it increases the learning - that learning is spread around the whole team in short order. The team learn collectively from their failures, instead of each individual having to make them all in turn.
>> and discourages leaps of faith.
I'm not sure what you're getting at here. I have been sat with a partner while he's said "go with me on this one for ten minutes, I want to try something". I shut up, I watch, I learn, I see how he's intuitively solved a problem or implemented a mechanism and saved a ton of work.
Or I've been driving, and I've asked my partner, "I know we should methodically trace through this bug, but I reckon I can find it by guesswork - gimme a couple of minutes to have a go". Two minutes later, bug fixed, several hours of painful tracing averted.
It's about building good communication within the pair, in having faith in each others abilities. What you've been describing is not pair programming.
~Cederic