For sure, it's possible for engineers to invent things that customers wouldn't have imagined. But those innovations are still going to have to produce business value for the customers, or else the innovations are of no use (or nobody will pay for them, which is just as bad for the engineers).
It's still possible to say to the customer "We can make exactly what you do a little easier, for $X, or we can provide you with the following extra benefits to your business for $Y - which would you like?". Ultimately, it's the customers' decision.
The customer makes decisions in business terms, not in technical terms. It's your job to translate their business needs into technical needs - and to ask the right questions to be able to do so. You're the expert about the technology - but you're not the expert about their business.
This has nothing to do with being sociable or being a hermit. This has to do with inability to concentrate when frequently interrupted.
In an open plan office, I can look over and have a good idea of whether you're head down and busy or whether you're interruptible. If you're in a private office, I have to go over there and interrupt you just to find out whether you're busy.
There's some good discussion of this topic in the "Agile Software Development" book - the relevant chapter is even online:
Also, remember that you may lose productivity when you are interrupted, but the people that interrupt you gain productivity, because they're not stalled all day trying to figure something out that you knew all along. It's important for the office to be productive as a whole - not just for you to be productive on your own.
Being a "software engineer" doesn't mean that I spend my head down programming all the time. Half of being a competent engineer is teamwork, and that works much better in an open-plan office.
I wonder whether people's objections to open-plan environments come from experiences with bad acoustics, or in offices shared between developers and sales staff that are on the phone all the time. In the open-plan offices I've been in, unwanted interruptions from other people's noise have been minimal - mainly due to good acoustic design, but also partly due to everybody being reasonably considerate and taking loud conversations off to a meeting room.
Anyway, not all sofware engineers are hermits! Some of us are sociable!
Funny, that. I recently started working at a company with mandatory code reviews. Here's a list of my recent experiences with it:
1) Checked in code. Spent fifteen minutes justifying design decisions. No changes made.
2) Checked in code. Code contained horrible horrible bug. Code reviewer didn't see it.
In my experience, although code reviews often suffer from the failings you illustrate, they're invaluable for two reasons that people don't often mention:
There's one more person that has at least a passing familiarity with each piece of code.
Each time a reviewer suggests a change, even if it's a ridiculous idea, it allows for a discussion of the principles involved. By the end of everything either the author or the reviewer will have learnt something. It may be frustrating to have to spend time explaining to junior developers things that seem obvious, but it's important if there's to be a new generation of senior developers that know what they're talking about.
Just because someone's morals aren't identical with yours, doesn't mean the person is immoral. Plenty of people on this planet don't see anything wrong with providing a service for money, erotic or otherwise.
Herb Sutter mentions planned C++/.Net CLR extensions being discussed for later inclusion in the C++ standard in last months C/C++ Journal. (Sorry, there is no link on their site yet.) I thought it odd that the chairman of such a standards board would mention M$ proprietary software so favorably. Then I saw that he works for M$ and understood perfectly. No conflicts of interest here. Enough to make you sick.
Microsoft has taken enough flak before for its "embrace and extend" attitude to standards. How come it's a bad thing to standardise their extensions?
Remember that any language unable to access.NET goodies such as garbage collection is going to be quickly marginalised - Windows is still the most popular platform out there in a lot of markets, and developers are not going to pick a language that handicaps their.NET use. Microsoft extensions are inevitable - the only question is, how open are they going to be about those extensions and how compatible will the extensions be with existing C++ code?
As I understand it, Herb Sutter has been the one driving both the effort to keep the extensions compatible and the effort to standardise those extensions, mostly in the C++/CLI standard which is under development, but possibly also in the C++ standard.
He has also driven Microsoft's C++ compiler from abysmal standards conformance to being pretty much the most standard conformant compiler on the market.
Re:There are NO standard compliant c++ compilers
on
Interview With Herb Sutter
·
· Score: 3, Informative
It's the library that comes with this book
http://cseng.aw.com/book/0,3828,0201704315,00.ht ml
It uses enough of the corners of the language that most compilers have problems compiling it.
The book itself is very very good: all experienced C++ developers ought to read it.
Personally, I found it amazing that he completely blew off a perfectly legitimate question like this.
Hello, he linked to an article of his describing how a great number of these issues are slated to be sorted out in the next standard! How is that "blowing it off"?
And, by the by, the C++ committee isn't a bunch of lawyers and accountants or something: it's made up of C++ developers, compiler writers and so forth. If you want to get your point across, go to a committee meeting! There's little use in complaining that the people who could actually be bothered to go aren't following your agenda.
it seems.. well.. wrong, for someone recommending the C++ standard to be part of ANY commercial company who's job it is to write C++ code.
The C++ language is _for_ people who write C++ code. Are you seriously suggesting that the majority of the users of a language should be banned from participating in the standards process, because they get money for doing their job?
I am hoping you really meant that the people who write the compilers should not be allowed input: but even this is impractical, since nobody wants a standard full of features which turn out in practice to be unimplementable.
If your code is written so that it requires this level of commenting to understand, it is _crap_.
If you have a block of code that says
// do X
[ code that does X ]
// do Y
[ code that does Y ]
and so forth
Change it so it says
void doX(){
[ code that does X ]
}
void doY(){
[ code that does Y ]
}
//....
doX();
doY();
Each function should do _one_ thing. Comments should be reserved for stuff which it isn't possible to express in the code itself.
Re:FOR loops: a question, ANSI C++, C++98, C++99..
on
GCC 3.0 Released
·
· Score: 3
This post lists the non-compliance issues that VC7 will ship with. The for-loop scoping problem isn't there.
Re:FOR loops: a question, ANSI C++, C++98, C++99..
on
GCC 3.0 Released
·
· Score: 1
The C++ standard specifies that the for scope ends at the end of the for loop. The only compiler I know of that gets this wrong is Visual C++. That is a bug with Visual C++ and will be fixed in 7.0 AFAIK.
If you get as far as an interview, always ask the interviewer what exactly they do. If you manage to get through the whole thing without meeting someone technical, that's a bad sign! Otherwise, ask them if they enjoy it. Ask if you can meet the team you would be working with (and preferably go to the pub with them). See if they are enthusiastic about the technology they use and the technology they are creating. Try and get a look at their office space where you would be working, check it isn't really depressing.
Try asking the interviewer what they feel are the good points and bad points of working for their company. (Especially if they just asked you to specify your Worst Fault!)
Make sure you have a really really clear idea what they actually do. If you haven't, ask. Ask what a typical day might include, or what a typical client might want, or whatever.
Working in a grotty office with people you don't like on a project you aren't enthusiastic about is not a good idea.
... and, now that we have the printing press, people spend all their time indoors reading RUBBISH NOVELS instead of socialising. So we should certainly not encourage the cheap publication of books. Um, and now we have the telephone, so people go and visit each other less frequently. Let's not encourage that either.
And, who are you to say that the internet doesn't enhance people's lives? Tell that to all the people who can look at a website to see pictures of their grandchildren, and the housebound people who talk to their friends on the internet, and the people with obscure interests who can finally talk to similar people on USENET.
Because if you give out the addresses of people with these sort of problems, they will be driven away by their neighbours, and then not even the police or the Social Services will know where they are to keep an eye on them.
Not to mention a whole host of other reasons, for example, the right to live out the remaining ten years of your life in some kind of dignity, for the majority of us who are not stupid enough to pass on any fatal diseases we might catch.
If there are really certified homicidal lunatics living down your street, surely they should be living in a secure mental institution, rather than the police just telling all the neighbours that they should probably watch out when the full moon comes round.
Um, we have a Tivo and it turns over the channel on our digital box. It has a little gadget that you hang over the top of the box, that remote controls it.
Why people donate their hard-earned cash to charity:
Set of people 1: These people actually enjoy their jobs. They have more money than they need to live on, and rather than donating it to their employer by asking for a pay cut, they donate it to someone who needs it. They do not feel that they morally earned the right to a bunch of money they don't need, since they are spending their days doing fun stuff.
Set of people 2: May or may not enjoy their jobs, but feel that morally nobody has "earned" the right to sit and admire money which they do not need but which could help other people. Perhaps they noticed that the people they are donating to do _even worse things_ every day, and don't get compensated at all. Thus _your_ logic now says that the recipients earned that money more than the person donating it.
Set of people 3: are required by their religion to donate a certain percentage of their income to charity. For example, I believe Jews do this. Then the moral rights or wrongs are second to the religious requirement.
Can I ask, (assuming you celebrate Christmas), do you give your family/friends/whoever presents at Christmas? If you can establish why it is that you do this when you have earned that money yourself for your hard work, then that is probably the answer to your question.
Some public toilets already have phone lines in, apparently they ring up to ask for more toilet paper or something. I have heard several stories of people getting nuisance calls from wrongly programmed toilets.
The whole Pentium 4 thing is based on the concept that customers will go for a higher clock rate, even though the P4 gets less done per clock than a P3.
... which is probably entirely true. Time Computers are running an ad full page in magazines which advertises the FIRST 1GHZ MACHINE FOR UNDER £1000. The machine has only 64Mb of RAM and is generally under-spec'ed, just for the sake of getting a 1GHz chip in a cheap machine. If the only measure people have of chip performance is MHz, that is what they will measure it by.
Coding C++ for it is just about that easy. There is an emulator which runs on Windows, you can build for it with Visual Studio (there is a custom tool that makes VS makefiles), debug to your heart's content, and then rebuild using their gcc for arm, and it should run with no problems on the device.
Some of their libraries are hard to get used to, especially the string stuff. Exceptions are implemented with setjmp/longjmp, you have a CleanupStack on which you have to put everything to make sure it is deleted if you "throw" (No stack objects allowed if the destructor does anything, no throwing from constructors...). Porting existing C++ might be quite a lot of work. There are C libraries, but I think they are built _on top of_ the C++ libraries, and I am not sure that they are complete. You can also code for it in OPL, a kind of interpreted BASIC-like thing.
I don't know how it works in your country, but here the actions of one's children do not endanger one's own freedom or house(??) in any way. Sometimes people with repeat-offending children get ordered to go to parenting classes, but that's it. If it's like that in your country I think that is morally wrong, not to mention weird and freaky.
As for the bail money, you don't have to bail anyone or pay for lawyers for them if you don't want to. If you feel morally obliged to, then think of it like you would think of paying for a new stereo for them if they did something stupid and smashed it. You don't tie up your child to prevent them costing you money.
And, you do not have a moral right to raise your daughter entirely as you see fit. You cannot beat her and lock her in cupboards. Personally I would count invading someone's privacy as a right that you never have, like beating them or killing them.
Thing the first: The guy's children are _not at that school_, and he is requesting the log files for all of the children in the school. He does not have responsibility for any of those kids.
Thing the second: You might have the legal right to go through your daughter's drawers. But I'm not convinced that you have the moral right. Why shouldn't she have the same right to privacy as you? I don't believe your "responsibility" for someone's upbringing suddenly gives you the right to go through their personal stuff.
Nobody told me about that!
For sure, it's possible for engineers to invent things that customers wouldn't have imagined. But those innovations are still going to have to produce business value for the customers, or else the innovations are of no use (or nobody will pay for them, which is just as bad for the engineers).
It's still possible to say to the customer "We can make exactly what you do a little easier, for $X, or we can provide you with the following extra benefits to your business for $Y - which would you like?". Ultimately, it's the customers' decision.
The customer makes decisions in business terms, not in technical terms. It's your job to translate their business needs into technical needs - and to ask the right questions to be able to do so. You're the expert about the technology - but you're not the expert about their business.
In an open plan office, I can look over and have a good idea of whether you're head down and busy or whether you're interruptible. If you're in a private office, I have to go over there and interrupt you just to find out whether you're busy.
There's some good discussion of this topic in the "Agile Software Development" book - the relevant chapter is even online:
Forming Teams that Communicate and Cooperate
Also, remember that you may lose productivity when you are interrupted, but the people that interrupt you gain productivity, because they're not stalled all day trying to figure something out that you knew all along. It's important for the office to be productive as a whole - not just for you to be productive on your own.
Being a "software engineer" doesn't mean that I spend my head down programming all the time. Half of being a competent engineer is teamwork, and that works much better in an open-plan office.
I wonder whether people's objections to open-plan environments come from experiences with bad acoustics, or in offices shared between developers and sales staff that are on the phone all the time. In the open-plan offices I've been in, unwanted interruptions from other people's noise have been minimal - mainly due to good acoustic design, but also partly due to everybody being reasonably considerate and taking loud conversations off to a meeting room.
Anyway, not all sofware engineers are hermits! Some of us are sociable!
1) Checked in code. Spent fifteen minutes justifying design decisions. No changes made.
2) Checked in code. Code contained horrible horrible bug. Code reviewer didn't see it.
In my experience, although code reviews often suffer from the failings you illustrate, they're invaluable for two reasons that people don't often mention:
Just because someone's morals aren't identical with yours, doesn't mean the person is immoral. Plenty of people on this planet don't see anything wrong with providing a service for money, erotic or otherwise.
Microsoft has taken enough flak before for its "embrace and extend" attitude to standards. How come it's a bad thing to standardise their extensions?
Remember that any language unable to access
As I understand it, Herb Sutter has been the one driving both the effort to keep the extensions compatible and the effort to standardise those extensions, mostly in the C++/CLI standard which is under development, but possibly also in the C++ standard.
He has also driven Microsoft's C++ compiler from abysmal standards conformance to being pretty much the most standard conformant compiler on the market.
It's the library that comes with this book
t ml
http://cseng.aw.com/book/0,3828,0201704315,00.h
It uses enough of the corners of the language that most compilers have problems compiling it.
The book itself is very very good: all experienced C++ developers ought to read it.
Hello, he linked to an article of his describing how a great number of these issues are slated to be sorted out in the next standard! How is that "blowing it off"?
And, by the by, the C++ committee isn't a bunch of lawyers and accountants or something: it's made up of C++ developers, compiler writers and so forth. If you want to get your point across, go to a committee meeting! There's little use in complaining that the people who could actually be bothered to go aren't following your agenda.
The C++ language is _for_ people who write C++ code. Are you seriously suggesting that the majority of the users of a language should be banned from participating in the standards process, because they get money for doing their job?
I am hoping you really meant that the people who write the compilers should not be allowed input: but even this is impractical, since nobody wants a standard full of features which turn out in practice to be unimplementable.
If your code is written so that it requires this level of commenting to understand, it is _crap_.
....
If you have a block of code that says
// do X
[ code that does X ]
// do Y
[ code that does Y ]
and so forth
Change it so it says
void doX(){
[ code that does X ]
}
void doY(){
[ code that does Y ]
}
//
doX();
doY();
Each function should do _one_ thing. Comments should be reserved for stuff which it isn't possible to express in the code itself.
This post lists the non-compliance issues that VC7 will ship with. The for-loop scoping problem isn't there.
The C++ standard specifies that the for scope ends at the end of the for loop. The only compiler I know of that gets this wrong is Visual C++. That is a bug with Visual C++ and will be fixed in 7.0 AFAIK.
Try asking the interviewer what they feel are the good points and bad points of working for their company. (Especially if they just asked you to specify your Worst Fault!)
Make sure you have a really really clear idea what they actually do. If you haven't, ask. Ask what a typical day might include, or what a typical client might want, or whatever.
Working in a grotty office with people you don't like on a project you aren't enthusiastic about is not a good idea.
is 2004-07-31 20:40:30, but it doesn't want to go past the lameness filter.
And, who are you to say that the internet doesn't enhance people's lives? Tell that to all the people who can look at a website to see pictures of their grandchildren, and the housebound people who talk to their friends on the internet, and the people with obscure interests who can finally talk to similar people on USENET.
Not to mention a whole host of other reasons, for example, the right to live out the remaining ten years of your life in some kind of dignity, for the majority of us who are not stupid enough to pass on any fatal diseases we might catch.
If there are really certified homicidal lunatics living down your street, surely they should be living in a secure mental institution, rather than the police just telling all the neighbours that they should probably watch out when the full moon comes round.
Um, we have a Tivo and it turns over the channel on our digital box. It has a little gadget that you hang over the top of the box, that remote controls it.
Set of people 1: These people actually enjoy their jobs. They have more money than they need to live on, and rather than donating it to their employer by asking for a pay cut, they donate it to someone who needs it. They do not feel that they morally earned the right to a bunch of money they don't need, since they are spending their days doing fun stuff.
Set of people 2: May or may not enjoy their jobs, but feel that morally nobody has "earned" the right to sit and admire money which they do not need but which could help other people. Perhaps they noticed that the people they are donating to do _even worse things_ every day, and don't get compensated at all. Thus _your_ logic now says that the recipients earned that money more than the person donating it.
Set of people 3: are required by their religion to donate a certain percentage of their income to charity. For example, I believe Jews do this. Then the moral rights or wrongs are second to the religious requirement.
Can I ask, (assuming you celebrate Christmas), do you give your family/friends/whoever presents at Christmas? If you can establish why it is that you do this when you have earned that money yourself for your hard work, then that is probably the answer to your question.
Some public toilets already have phone lines in, apparently they ring up to ask for more toilet paper or something. I have heard several stories of people getting nuisance calls from wrongly programmed toilets.
Some of their libraries are hard to get used to, especially the string stuff. Exceptions are implemented with setjmp/longjmp, you have a CleanupStack on which you have to put everything to make sure it is deleted if you "throw" (No stack objects allowed if the destructor does anything, no throwing from constructors...). Porting existing C++ might be quite a lot of work. There are C libraries, but I think they are built _on top of_ the C++ libraries, and I am not sure that they are complete. You can also code for it in OPL, a kind of interpreted BASIC-like thing.
As for the bail money, you don't have to bail anyone or pay for lawyers for them if you don't want to. If you feel morally obliged to, then think of it like you would think of paying for a new stereo for them if they did something stupid and smashed it. You don't tie up your child to prevent them costing you money.
And, you do not have a moral right to raise your daughter entirely as you see fit. You cannot beat her and lock her in cupboards. Personally I would count invading someone's privacy as a right that you never have, like beating them or killing them.
Thing the first: The guy's children are _not at that school_, and he is requesting the log files for all of the children in the school. He does not have responsibility for any of those kids.
Thing the second: You might have the legal right to go through your daughter's drawers. But I'm not convinced that you have the moral right. Why shouldn't she have the same right to privacy as you? I don't believe your "responsibility" for someone's upbringing suddenly gives you the right to go through their personal stuff.