last updated:06 Aug 2003 14:55 UK time
Joel On Software Discussion Forum
JOS Statistics - Recent Comments
(Comments added for week ending Sun 16 Mar 2003) | View Other Weeks
Preferences vs. advanced users. | Sun 16 Mar | mortee
Well, this is my first post here, I dont know the habits, I dont know if Joel actually reads this forum or if this was discussed in the past. Anyway, Ill address this to him. So, I just read the on-line chapter of your book of the title Choices. You write there: `` But wait! you say. Its important to have options for advanced users who want to tweak their environments! In reality, its not as important as you think. This reminds me of when I tried to switch to a Dvorak keyboard. The trouble was, I dont use one computer. I use all kinds of computers. I use other peoples computers. I use three computers fairly regularly at home and three at work. I use computers in the test lab at work. The trouble with customizing your environment is that it just doesnt propagate, so its not even worth the trouble. While agreeing to some extent, I have to object. I agree, because regarding the current common situation in computing, its true that preferences dont propagate, so after all its not even worth tweaking. I consider myself an advanced user, I use mutiple computers, I have to migrate from time to time, I have to reinstall the OS (while far not as often as you write) and so on. So, I indeed ended up not bothering with my settings, right out of the very reason you mention. But for two reasons, I dont agree. First, while I use multiple computers, I have a primary one, which I use most of the time. So, its mostly acceptable to tweak that one to the best of my preference, and somehow Ill get used to having a different environment on the other, less frequently used boxes. Some settings can even be transferred among them, partly right because Im a sort of advanced user, who finds ways to do so a novice might not know. Second, you encourage a workaround, instead of a solution to the existing problem. Instead of proposing a way how the preferences could be migrated through space and time, you encourage (or at least suppose) the users to not bother tweaking their environments, and for that reason, you encourage the developers to not include advanced options in their programs, because the users wont use them anyway. What I think about such oprions or preferences is that they should hide beneath what they refer to, as opposed to (or perhaps in addition to) lie on bloated preference panels. They simply shouldnt appear on the surface until the user specifically wants to tweak that aspect of the environment. They shouldnt interrupt the user, or distract attention. They shouldnt force the user to make a (irrelevant) decision. For that reason, they indeed should have very reasonable defaults, so that the given aspect just works. But when specifically asked for, when they really become relevant, and the user *wants* to make a decision, then they should be there for service.
Sun 16 Mar | Bored Bystander | Hmm, this is a really good topic! You said: >> What I think about such oprions or preferences is that they should hide beneath what they refer to, as opposed to (or perhaps in addition to) lie on bloated preference panels. They simply shouldn't appear on the surface until the user specifically wants to tweak that aspect of the environment. They shouldn't interrupt the user, or distract attention. They shouldn't force the user to make a (irrelevant) decision. For that reason, they indeed should have very reasonable defaults, so that the given aspect 'just works'. But when specifically asked for, when they really become relevant, and the user *wants* to make a decision, then they should be there for service. It sounds like you are basically saying that if preferences are closely associated visually and operationally with the features that they control, and if those preferences are not a distraction, then preferences should be designed into products... Given that Joel has made a living as a sort of user interface expert, my guess is that he had already anticipated these practices as objections when he wrote the paragraph you quoted. Personally - I think *every* SW developer wants to pride himself on 'ease of use' and 'intuitiveness' and 'flow' in his work. Only the real jackasses I've had the displeasure of working with have said or acted in a way to imply that the user interface isn't important or not worth the time to refine. So in a way you're implying a negative 'strawman' - that developers may seek ways of interrupting the user's flow with needless option setting requests and that developers would knowingly segregate option settings into nonintuitive and arbitrary parts of the software, and that these tendencies, once addressed, would solve the 'preferences' problem for all. Here's my $0.02: The prevailing practice of grouping preferences onto a (likely notebook tabbed) centralized dialog box in an application has seemed to evolve as a sort of canon among most SW companies since it's a non controversial, least common denominator. I agree with your implication that this is a clumsy non-metaphor that separates functions from options. In a 'perfect' world, there would be universal and commonly known pointing device gestures that would invoke property settings of elements of the application. IE: perhaps you'd somehow gesture on the text in a word processor and the program would 'guess' that you wanted to change the font. I am guessing that this is an example of your idea. But at least with the current way that things are - if a user sits down to an application that is new to him, he 'knows' that there is an excellent chance that an Options, Settings or Preferences window lives under one of the menus labeled Edit, View or File in most Windows applications. It may be a 'lumpy' and inelegant way of representing application properties but it's an easy to understand and portable representation - once you know that you're looking for program settings. You could find Preferences or Options in Quickbooks or Visual Studio .Net or 'My Lawyer'. Let me propose the following thought exercise: pick a common desktop application type. Lay out your idea of how a few common 'Preferences' type settings in such an application might be controlled with a more intuitive design. The point is, if you can show a specific example of how things could be done, then the idea may hold up better.
Sun 16 Mar | Bored Bystander | Let me add to that challenge: propose such user interface settings that manipulate *hidden* or non visual behaviors of the product. IE: one example of the kind of visual and unburied option setting that you're seeking is resizing of columns and windows in an application. But in my mind, that's just too easy and most programs implement things like that anyway. So the 'rule' here would be that the property or option doesn't have an obvious, draggable or clickable aspect to it that involves simple repositioning. Good luck, if you choose to take on this challenge. I'm open minded. I'd like to see what you can come up with. Perhaps my brain has been 'conditioned' by too much exposure to other people's limited notions...
Sun 16 Mar | mortee | 'It sounds like you are basically saying that if preferences are closely associated visually and operationally with the features that they control, and if those preferences are not a distraction, then preferences should be designed into products...' Yes. At least from the user's PoV. The main reason against measureless options has been that they 1.) make hard to find what the user is really looking for, 2.) they interrupt the user or distract attention, 3.) they enforce the user to make explicit decisions about irrelevant things. So, as long as those circumstances don't stand, more options are good. From the support PoV, having more options may have further impacts. That's what I'm not discussing here. 'So in a way you're implying a negative 'strawman' - that developers may seek ways of interrupting the user's flow with needless option setting requests and that developers would knowingly segregate option settings into nonintuitive and arbitrary parts of the software' You misinterpret my statements. I haven't said with a word that this is intentional. This common situation has many reasons I don't want to discuss here either, but the basic thing is that it's much more comfortable, and needs much less thought from the developer to throw every tweakable option on a preferences panel (or even into a rc-file), than to lay out intuitively. 'and that these tendencies, once addressed, would solve the 'preferences' problem for all.' Again, no. I just said that the approach proposed in the book is broken in my opinion. Especially out of the reason given there (migration problems). I haven't stated that I knew the ultimate solution to the preferences issue, just that it would deserve a different approach. 'The prevailing practice of grouping preferences onto a (likely notebook tabbed) centralized dialog box in an application has seemed to evolve as a sort of canon among most SW companies since it's a non controversial, least common denominator. I agree with your implication that this is a clumsy non-metaphor that separates functions from options. ' Glad you agree on that. 'In a 'perfect' world, there would be universal and commonly known pointing device gestures that would invoke property settings of elements of the application. IE: perhaps you'd somehow gesture on the text in a word processor and the program would 'guess' that you wanted to change the font. I am guessing that this is an example of your idea.' Not really. Two points here. When you are working on a text document, the font used is likely to be somewhat relevant to you, so preferences thereof may be exposed. Either on a toolbar, or a palette, or anything. If you don't like it, you can close the palette, and access it subsequently from a menu later. No big magic here. Second, for visual things, you always can have an option in the context-menu which offers you possibility to tweak the there-relevant options. If you right-clicked something, then it is probably of some interest to you, so it's a good place to access related options from there. In a way not mixed with other options which belong to things miles away. So, again, no magic gestures needed. 'But at least with the current way that things are - if a user sits down to an application that is new to him, he 'knows' that there is an excellent chance that an Options, Settings or Preferences window lives under one of the menus labeled Edit, View or File in most Windows applications. ' Has anyone said that various things should have only one way to access them? If you recall, I wrote 'preferences ... should hide beneath what they refer to, as opposed to (or perhaps in addition to) lie on bloated preference panels'. So, the nitty-detail preferences should be accessible starting from what they refer to. They shouldn't appear on the main preferences panel of the app, as they wouldn't either anyway if these options would just not made options. And then, the (probably advanced) user may need sometimes to be able to look over *all* of the possible existing preferences. Since this is surely a very rare need, and used only in very special cases, it's not a big drawback if this interface is not intuitive or easy-to-use. So, there should be an 'advanced' preferences panel, which isn't at all designed for everyday use, and where all imaginable preference options appear, in a list. This should just be a secondary (or umpteenth) way to access them. Just look at Mozilla's about:config. That's a good example of this. It may probably be used once every leap year, so its absolutely un-intuitive design is not a problem, but it collects everything that is accessible in some way in the application. 'The point is, if you can show a specific example of how things could be done, then the idea may hold up better.' Well, I haven't implied myself to be an UI expert. I haven't even stated I can do better (while it may be so). I just said there *may* be a better way, which may possibly be looked for, instead of taking the short way with a workaround. But anyway, see above for a five-minute approach. Anyone can do even better with a bit of real thought. 'Let me add to that challenge: propose such user interface settings that manipulate *hidden* or non visual behaviors of the product. IE: one example of the kind of visual and unburied option setting that you're seeking is resizing of columns and windows in an application. But in my mind, that's just too easy and most programs implement things like that anyway.' Well, OK. You picked a good example, 'cause that may apply to both of the sides you mention. See below. 'So the 'rule' here would be that the property or option doesn't have an obvious, draggable or clickable aspect to it that involves simple repositioning.' So, the column header is a good test case, because it's indeed quite a straightforward to simply resize the columns - but what about selecting which columns you wanna see? That's not that evident, right? Usually, settings for that are put into some menu; I even saw apps that had that preference hidden on some settings panel. Quite far from what we want to control. A much better place is to put it on a right-click menu at the column headers. That way, you access it where it belongs to; and it doesn't pollute the settings panel or the menu either. If we go more abstract, towards much less visible behaviours - well, I can't give a definitive, ultimate solution. But just out of quick thought, if the given aspect of the program is possible to ever become *really* relevant to the user, so that s/he explicitely wants to make a decision about it; then it may worth visualizing that aspect of the behaviour (in a non-distractive way), so that it has an interface where the related options may get an intuitive way to access. And then, for really non-visualizable aspects, there always are the settings panels. They aren't quite appealing, they are usually mentally far from what they refer to, but still a means to express preferences. For what's really needed to allow tweaking, it's a good place. And I still haven't said that every imaginable aspect of every non-visualizable behaviour of a program should be made settable. Just to a reasonable extent. Anyway, let me bring an example. Let's say, I, as a non-novice user, want to explicitely control how much of my bandwidth is committed to different uses. That's a fairly non-visual issue, right? A novice user is probably not really interested in this question, so a good default behaviour should be set for him or her. But what about making it possible to visualize the currently existing data flows going through my pipe? I am probably interested in the candidates I currently have, so I want to see those, not all possible cases. So, I may get my hands on a list or graph of various current traffic - and I immediately have an intuitive place on the screen to right-click on, get a panel where I can drag a slider or enter a value. Sure, making possible every such (perhaps considered braindead) case would be an impossible task for the developer. Or more precisely, it would be so if all those would have to be hand-made, one by one. But if I (as an advanced user, not necessarily in a trivial way) could just express to the system that I wanted a list of all the connections currently going through my uplink, grouped e.g. by protocol (a list of objects with various attributes, after all), then the programmer doesn't have to explicitely support this. Hope you get the generic idea behind what I am writing. And to turn a bit back to my original post, just to emphasize a bit the essence thereof: I haven't intended to propose a better means to handle preferences, just stated that if served in an acceptable form, then migration problems shouldn't be a reason to not allow the user to tweak some aspects s/he may be interested in.
Sun 16 Mar | Albert D. Kallal | Lets not forget that part of the point being made here is that every option you see in the those config tabs is often a setting that the developers could NOT decide on. Thus, they throw it into a config option, and let you decide. Also, often, a good deal of those tabs are very superficial stuff anyway. Basically, what is being said is yea, give the person some options, but those options are generally not that important. Changing the background color of ms-word to a deep blue, and the characters to a nice white does NOT really change how ms-word works. It is not big deal, but keeps the user happy! However, we don’t have any options in word to set the memory and buffer size used. We don’t have those options because the developers were intelligent enough to sit down and figure out what is best for us. Further, those developers write this stuff for a living, and know much better what those settings should be anyway! Sometimes you can expose some of these options, but in fact make the situation worse. A great example of this is the virtual memory settings in windows. I can’t tell how often I seen some bad tech person change the virtual memory setting from auto to some REAL STUPID setting. So, much of the point being made here is that often (not always) those config/control panels are results of poor developers, or a team that could not come to a decision about how the system should work. The real golden rule here is that as a developer you want to make the most sensible decision, but at same time make sure the user is in control. What do I mean by “in control”, but not too many choices? In Joel’s interface book he talks about how a nice shopping cart that rolls and turns EXACTLY THE way you want. This is how good software should be. When you turn the cart, it should turn EXACTLY the way you want. You are in control! However, if upon entering the grocery store you are presented with a list of 20 different types of ball bearings to CHOOSE BEFORE you have to use the shopping cart, then that is stupid. I don’t know if I want stainless steel ball bearings, or carbon Teflon coated ball bearings. I have no clue here. Maybe one ball bearing type is better for carrying real heavy duty cases of Coca-Cola and frozen pizza’s . A one day supply of programmers pop and pizza will generally overload and cause damage to a average shopping cart. Perhaps, if the shopping store is smart, they will make a leaky abstraction, and simply ask your profession before you get the shopping cart. At this point, the store would then install the correct type of ball bearings for you!! (all software developers will get pop and pizza ready shopping carts with extra big wheels). At the end of the day, what I really hope is that the designer of the shopping cart already made the correct decisions for me. They will make a good judgement call as to what kind of ball bearings should be in that cart. This decision may not be the best if you need 20 frozen turkeys (or a 2 hours supply of pop and pizza for some programmers I know!). I mean, do I really care if ms-word is supposed to use a recursive spell checking routine Vs a binary tree Vs a hash code scheme? A poor software developer will not be able to decide this, and thus give a user all 3 types of options. (on the other hand, if you are selling a legal text search system, then all those options may very well be needed). Thus, this whole point here is about making intelligent decisions FOR THE user. Thus, we make the users happy by given them some config options, but only fluffy stuff like changing the backdrop color etc. The real meat and potatoes decisions are made by the very good and intelligent developer. Further, the other main point here is that all of us are willing to give up a slight amount of personalization to our computers in return for a given amount of standardizing (the keyboard example was given). I for example spent the time to learn how to use the ftp client in IE5 and IE6. It is great to use this ftp client, but it is not as good as the ZILLION ftp clients available on the web. However, my time is simply too valuable these days. By spending the effort to learn the IE ftp client, then EVERY SINGLE computer I walk to now has that ftp client. I never have to install it, and all computers have this ftp client. I hate setting up a computer each time I need ftp access to my server files. Thus, last but not least, the point here is that you need to make sensible decisions for your users, but allow the advanced users some config abilities. It goes without saying that those advanced features are out of sight and out of mind for most users. There is always the advanced tab!! Joel’s other book on interface stuff is mostly on line, and is really fabulous. It is where I got the shopping cart reference from. Check out: http://www.joelonsoftware.com/uibook/chapters/fog0000000057.html Albert D. Kallal Edmonton, Alberta Canada Kallal@msn.com
Sun 16 Mar | mortee | I TOTALLY agree. I absolutely see the *crucial* importance of developers providing *reasonable* defaults to everything that even can have a default. It is very important to *save* the user the need to make decisions s/he simply doesn't want to make. I haven't intended to protect developers' inability to make those decisions. If you read through my posts again, you can find out that I stressed the importance of provided defaults. And I haven't said either that I would like access to things like the used mapping construct in word's spell checker. Those are things that really belong to the developer. I don't have anything to do with them, unless I have to deal with the source code to word. Again, my intent was to stress a bit on the importance of giving control to the user where s/he may really want it (even at places where an exposed decision opportunity would confuse novice users). So, if I *really* do care, I should be able to ask for a chart that e.g. can hold less, but turns better. Nothing specifically about the ball bearings, just a decision that is relevant to me. Regarding the IE as FTP client issue: that's also true. You better not set up every simgle computer you have work with just to be able to access your server. But that still doesn't explain why you shouldn't be able to use the best of those zillion other alternative FTP clients on your own home machine. And be honest: *most* of the PC users have to use one or at most two computers, so the way for them to customize the environment may be much more important than to you and to me, who have to deal with a mutitude of boxes sometimes.
Sun 16 Mar | Dimitri. | I bloody hate programs that are not customizable. Basically, I don't use them. Advanced options breaking the interface, that's a misunderstanding. Yes, a novice should not be bothered, I agree. But there should be somwhere there a menu item that sais 'preferences' or 'advanced preferences'. Make it hard to find, it doesn't matter. Keep it out of the way of normal users. It's power users that need it, the ones that now exactly what they want, and are prepared to read some instructions for it. So for them, it's ok to break the metaphor (how poetic...) because they don't need no stinkin' metaphor in the first place. They need just a tool that is as efficient as possible. Fortunately, some of the big software producers understood that. That's why you can modify the menu and the interface on Word ad nauseum, you can define your own keyboard shortcuts and so on. Some other didn't, which is why in Photoshop you get the colour balance with ctrl-b and ctrl-b only, and there is no way to have a keyboard shortcut for 'flatten image'. My two euro-cents.
writing coding tests at interviews | Sun 16 Mar | Simon
Gave a couple of interviews recently all had half hour coding tests, in C++ and Java.I am pretty okay withthem, asking algorithmic and programming questions, but sometimes I find they ask arcane language features, which you have to be a total expert to know.How do people design these tests? and how do they weigh the tests overall in giving job offers?
Sun 16 Mar | The Fake PC | > I find they ask arcane language features, > which you have to be a total expert to know... Maybe they are looking for a 'total expert'? Do you have some examples?
Sun 16 Mar | Simon | Well, something like why you can't pass a method in the parameter list of a method in Java( you could do it with func pointers in C++).
Sun 16 Mar | Mike Swaim | The problem with coding tests is that they test the specifics of what you remember, not what you know. Over the past year, I've done projects in C++, C, Delphi and C#, and debugged PowerBuilder code. There's a lot that I 'know' that I may not remember exactly.
Sun 16 Mar | bryan | Can you give more details about the format of the interview? Were you writing code responsively with an interviewer, or did they park you in a corner for a half hour with a computer? That said, the question you cite sounds completely appropriate. I would expect someone who has designed & implemented large systems in either Java or C++ to be able to discuss when you might want to pass a method to another method, and how you might be able to do that. Besides, even if the question was more esoteric, if you don't ask a candidate a question he or she can't answer, then you don't have a good feel for how much they know. I've sat through a ton of interviews (on the -ee side of the table) where the interviewer failed to ask any questions which would indicate whether my resume accurately reflected my knowledge and experience. I usually try to avoid working at such places, since they can't get lucky all the time. =)
Sun 16 Mar | Simon | I was writing code with pen and paper by myself.I know the method question is pretty legitimate, but are you supposed to get around 35-40 of these type of questions in 30 minutes? Besides there was no interactivity with the test, just straight marking of the stuff written out, at least in one case. A bit more interactivity would certainly have helped, as I could explain where I was coming from in the answers.
Sun 16 Mar | bryan | That does sound like a lot of questions. Do you know how it fit into the rest of their interview process? That is, are they using the test as a significant factor, or are they just getting a gauge for you rough skill level? I could sort of understand it as an alternative to those 'How do you rate your Java knowledge from 1-10' questions that I never know exactly how to answer. Either way, it does sound like a lot of pressure, in a rather unnatural situation.
Sun 16 Mar | Vincent Marquez | We use coding tests to 'screen' applicants. We don't really care if our lead java programmer knows how map works, or the internals of a a delegate, but if someone puts 4 years advanced perl and 2 years C#, they better know both of those. The best way to interview someone would probably be to go through code with them, and have them explain it.
Sun 16 Mar | one programmer's opinion | There are no pat answers. 'How do people design these tests?' Some employers purchase written tests, some employers 'roll their own' tests, and then there are some employers who place you in front of a PC and have you take tests that were created by a testing service such as TekChek. 'and how do they weigh the tests overall in giving job offers?' Depends on the type of employer you are interviewing with and the type of work you will be required to do. Most staffing/consulting firms place a lot of weight on coding and technology knowledge tests. While some non I.T. businesses (i.e. a large insurance company) may care more about your soft skills or business knowledge.
Sun 16 Mar | T. Norman | That probably wasn't the most well-designed test, but it's still probably better than the typical BS interview questions that reveal nothing about your abilities or experience, like 'what are your strengths and weaknesses?' and 'do you work well under pressure?'
Sun 16 Mar | Jimmy Chonga | I've seen a couple of these technical tests, and personally I find them to often be absurd. While it is important to understand that generally they aren't used to rate the selected prospects, but rather is just to filter out a gross lack of knowledge, they still can really goad a consumate professional. When I first started in the computer industry, I made it a personal mission to memorize every element of the language (at the time C), every standard library call, etc. As it progressed, soon I was remembering Windows API calls, then the MFC, then the ATL, etc. During this time I regularly used C, C++, Pascal (and the Borland Delphi variant Object Pascal), along with some scripting languages. There came a point, around the time that online help because speedy, that it just became ABSURD to try to continually memorize every aspect of programming. Now I quite honestly memorize very little: I hit the MSDN, Deja (er Google Groups), and other resources daily for things that I've done a million times, often because I'm jumping between a half dozen languages in an average day, using a huge swath of technologies. I don't chastize myself at all, though, as computer science has progressed to the point that it's a lot like the medical sciences: Ones job isn't to remember the contents of every book, but rather to have the analytical skills to call upon the experiences they do have to narrow down to the answer. In other words rating candidates by whether they know every parameter to printf off by heart is just silly, and is more prone to get you an idiot savant than a practical advanced programmer.
Automate Changes to MS Doc Properties | Sun 16 Mar | Baggaridim
My company went through a name change a while back, and we have thousands of .doc, .xls and .ppt that reflect the old name in the Document Properties (the tabbed dialog that appears when you select File... Properties from any MS Office doc). The data in the Summary tab is used by some search engines, and is often displayed in the search results. Not good for us, since this data is often incorrect. Anyone know of a method or tool to automate or speed-up the changing of these properties? E.g., I have a directory with 350 MS Word docs (Word 2000) -- how might I quicly change the company field on all of them from ABC Corp. to DEF Inc.? All files are in Office 2000 format, on Win2k. Thanks in advance for any suggestions.
Sun 16 Mar | yg | I suppose, these properties must be available through the office object model. So it should be possible to loop through a set of documents and update the values with a simple vbs or VBA script
Sun 16 Mar | Herbert Sitz | You might try doing something with this ActiveX utility, supplied by Microsoft: http://support.microsoft.com/?kbid=224351
Sun 16 Mar | Baggaridim | Thanks, those look like good suggestions. O if only we were dealing with an open, non-binary (preferably XML) format.
ASP/VBScript Question | Sat 15 Mar | Anon again
Are objects, declared and instantiated on an asp page, implicitly destroyed when the server finishes building the page or do I have to explicitly set them to nothing to tell the garbage collector that there are no more references to that object? For example, I declare and instantiate a connection and recordset object at the begining of the page. I then traverse the recordset in the middle of the page. At the end of the page, after the server is done parsing the file, are those objects stuck in memory because theres still a reference to them?
Sat 15 Mar | Li-fan Chen | They are automatically 'cleaned' up. Basically you don't have to worry about it anymore. But best practices dictates that you try to free them up. Because this clean up is supposely not perfect. With regards to database connections though. ADO and IIS cooperate to keep some of these connections open for a few moments more until inactivity (no more accesses on any asp pages) times out the connection. This is because establishing a connection is a heavy weight operation and results in unpleasant pauses to the user access experience. You'll have to look up some ASP books to figure out how exactly IIS and ADO do this. Would someone please correct me if I am wrong?
Sat 15 Mar | Damian | In theory they are cleaned up. In practice however, if you don't close and set to 'nothing' all of your database and connections you will find your server stops responding every few days and will need a reboot.
Sun 16 Mar | xasperated | Some hosts get upset if you don't clean up your objects after yourself. If you're developing stuff that others may host/use elsewhere it pays to be tidy with your objects if only to keep them out of trouble.
politics | Sat 15 Mar | The Real PC
I have noticed that certain groups, or people in certain occupations, are more likely to have certain types of political ideas. I have been observing this over the years. It also seems to correlate with how people dress. I think the underlying causes can be very complicated and I try to figure out what they might be. I was wondering if there are any typical political views connected with software developers. I thought that, maybe, working at a job where you have to solve complex problems and keep a lot of things in your mind could lead to more sophisticated ways of looking at complex problems in general. I have noticed that certain groups are more likely to have very simple answers to the current international problems, for example, and to be very self-righteous and opinionated. Anyone who disagrees with them must be unintelligent, ignorant or brain-washed by the media. I have always read a lot and thought about politics and I cant see any simple answers to the current problems. I wondered if any others here have a similar feeling. I realize that each individual, in any field, has their own unique opinions. Im just looking for statistical probabilities, and possible causes.
Sat 15 Mar | sgf | Of course many groups (professions/races/cultures) have general trends in their viewpoints. However in any group there are individuals who are different. Assuming any individual is like the group is the essence of prejudice. So I don't think anything good comes from focussing on the associations between group membership and political views, cultural practices, job performance or anything else.
Sat 15 Mar | The Real PC | I understand your point. On the other hand, it's impossible to understand human nature without acknowledging that prototypes exist. I know I'm not being politically correct when I talk about stereotypes, but I am motivated by curiosity, and if that conflicts with political correctness I don't care.
Sat 15 Mar | anon | There's been a few political dust-ups on the forum recently. What conclusions do you draw from those?
Sat 15 Mar | The Real PC | I must have missed them. I don't have time to read everything here, but I probably would have if I had seen titles related to politics or war. I would expect some people here to have strong simple opinions for or against the war. But I would also expect (hope) to see some thoughtful opinions. I also have a hypothesis that women, in general, are more likely to be against any war than men. So that would cause this forum, which seems mostly male, to be less strongly anti-war. On the other hand, men who dislike authority and powerful governments are likely to be against this potential war. These generalizations are based on my informal observations and are not backed up by any statistics. I'm not claiming my observations are 'true;' they are just observations. Since I'm interested in analyzing human nature, I can't help observing. As for political correctness, I completely disregard it in my quest for understanding.
Sat 15 Mar | Robin Debreuil | I think in a large part the generalizations come from which part of a problem you dwell on more, which is based on your location, job, politics, race, media etc. A lot is how personally threatened you and your group feels I think. I doubt most reasonable people would disagree with any of these very simplified facts: - GWB is an awful diplomat. A large part of the mess is because of this. - Saddam has plenty of chemical weapons hidden, and would use them given a chance. - The United Nations can not guarantee the security of anyone. They have a hard time doing anything concrete. So now, if you live in New York, or Kuwait for that matter, you are probably dwell on the chemical weapons. If you are a political person you probably dwell on liking/disliking Bush (or Chirac, whatever). If you think of yourself as an 'internationalist' you probably are willing to ignore the obvious shortcomings of the UN. Of course almost everyone is ignoring the real problem, which is nukes are easy these days, and what are we going to do about it. Those in the 'peace' camp dismiss it, those in the 'war' camp don't explain how this war will solve it, and those in the UN camp have their heads so far up their asses you can't tell what they are saying. So from an 'analytic programmer' point of view ; ), it seems the world has gotten bogged down on some trivial detail of the design spec, forgetting there is a looming deadline to meet - at our peril (happens a lot). The real problem to solve is: 1) Can the world prevent someone from letting off something big and nasty in a major city in the next 5, 10 or 50 years? (I really don't think so, but its worth a try). What has to happen to prevent this? if not: 2) When this does happen, say for the fourth time, and everyone gets on the same page, what will happen then? The problem will still be there, probably worse, right? Can we mentally treat that kind of thing like an earthquake or something? If the whole world was agreeing this had to be stopped, would it still be impossible? What does the recovery scenario look like? Hiroshima recovered in a few years, are wmd overrated?
Sat 15 Mar | Winston | Any software development which depends on the agreement of a large number of disparate groups will not get off the ground. The only successful developments I have witnessed have been created by a small team with a determined leader. Now we have got rid of the Euro backbiters GWB has such a team.
Sat 15 Mar | The Real PC | [Of course almost everyone is ignoring the real problem, which is nukes are easy these days, and what are we going to do about it.] Yes you're right, and have provided data in favor of my hypothesis -- software developers have experience in analyzing complex systems, and might be better at seeing through to the essence of the problem. Which you have done here, in my opinion. Nuclear weapons are the problem and no one on either side seems to be acknowledging it these days. The creativity and inventiveness of our species causes more trouble than outright evil. Every great discovery and insight can lead to more effective weapons. And there is nothing we can do about it because we are a creative animal, and we wouldn't give up our creativity even if that were possible. There will always be crazy people and there will always be anger and hate, so eventually whatever weapons exist will be used. I don't have an answer. I'm just tired of seeing everyone miss the main points.
Sat 15 Mar | runtime | I think the political stereotype of software developers is that they are either weepy Democrats or laissez-faire anarcho-libertarians. :-)
Sat 15 Mar | flamebait jr. | 'software developers have experience in analyzing complex systems, and might be better at seeing through to the essence of the problem. ' My experience is that software developers are also notorious for producing profoundly complex solutions to the problems they solve. I often hear about how other folks cannot see complexity, but maybe the ability to see it makes simplicity invisible to you. Based on some of the discussions I've seen on here and elsewhere it is also clear to me that many developers have very different goals that motivate their problem solving approaches. For instance, I hear frequent complaints about certain approaches being elegant, efficient, scalable, and what have you. This is fine as long as these things support product goals like make lots of money, or win a certain market segment, or achieve a certain level of product differentiation. That's what we get paid to do. The problem is that a lot of time the connection is tenuous and the developers complain when management tries to bring them in line. Perhaps the political views are similarly skewed by failure to perceive the true goals (which admittedly may themselves be counterproductive). Where do you even get good information to help you formulate your views on these things? I know I'm going to get flamed anyway, but please don't take any of this as an indictment of developers in general. I am one and I know it's a tough job, but I have seen enough of this kind of thing to make me want to take an opposing viewpoint a lot of the time.
Sat 15 Mar | . | I don't see any particular political characteristics of software developers. There are a range of sometimes conflicting views typical of educated people, of business people, of independent people, of employees, and so on.
Sat 15 Mar | Alberto | I think that part of our problem is perspective, we fear nukes because we used them ourselves. Maybe we are projecting our own ability for evil onto other races and cultures. Only one country in the world has ever used nuclear weapons with spite, at a time when the 2nd world war was well and truly over. And guess who that was - us. Would other cultures fear nukes as much as we do? Maybe thats why the Euros are less sabre rattling than us, they find nukes more abhorrent and believe the use of them to be more unlikely because of this. Also they live in a culture that has experienced much more war, with the ever present danger of enemies that live close by. All these things change your viewpoint.
Sat 15 Mar | Bored Bystander | I have found in my 20+ year career in engineering and software development that MOST (not all) career programmers - especially the classical 'lazy genius' type that is capable of great mental quickness and great productivity w/o breaking a sweat - are almost monotonously alike: - Libertarian and laissez-faire in general social outlook. - Very much into a Darwinist viewpoint that favors the gifted and quick. -Methodically unaware of even close by office politics. - Generally atheistic or agnostic. I've also found that the 'little boy king of the hill' intellectual bully/prima donna attitude is closely correlated with lack of experience of personal setbacks. So generally, you find more compassion and life wisdom in the ones that stay in the industry past,say, age 40. I think a lot of this stuff explains the general lack of interest by programmers in things like H1-B. The general attitude of the younger ones who havn't been bent over and raped by an employer (yet) appears to be that anyone seeking an equitable approach to offshoring or guest worker visas is a rascist, loser, or xenophobe. The attitude kind of goes with the cult of mental firepower that 'serious programmers' take up as their world view, that their brainpower makes them 'invincible'.
Sat 15 Mar | The Real PC | Bored, Your portrait of the stereotypical programmer is the kind of thing I have been noticing, about people in general. I keep seeing this kind of pattern. It's almost as if people don't have individual minds, as if we are somehow programmed to think in certain ways. It seems eerie sometimes. Your portrayal is actually not what I was thinking about when I posted the question. I haven't known all that many programmers, but your description does seem reasonable. I spent 4 years in an academic department, in a social science. All the professors in the department were atheists, every single one. And they all seemed to like affirmative action. But why? It almost seems like types of people are stamped out on an assembly line. I find it fascinating, and also a little weird. I often wonder if I myself fit into one of the patterns, hard as I try not to. Switching careers several times has helped. And I try to dress in ways that will confuse people. I'm definitely not the type you describe. I have questioned everything all my life, and then have questioned the questioning, so that now I almost seem conventional.
Sat 15 Mar | Bored Bystander | Hi Real PC, >> I keep seeing this kind of pattern. It's almost as if people don't have individual minds, as if we are somehow programmed to think in certain ways. It seems eerie sometimes. Unfortunately, I think 95% of the human race acts in a manner that is unconsciously intended to mimic the prevailing expectations of their peers. I think it's a behavior that is intended to reduce risk of rejection and increase chances of acceptance. Other examples: with (genuine) blue collar people, you get the 'lazy college boy that don't know nuthin'' working class hero diatribes, and the anti-management union mentalities. With agency technical recruiters you have the 'my Volvo/Inifiniti/BMW is better than your Lexus/Acura' money cult crap. And so forth. What I'm saying is that most people seem to be human 'state machines' simply out of a desire to conform to existing stereotypes so that they can be accepted. If anything, it's 10x worse today than it was 10 years ago. I think that in the current economic and political climate, *extreme* conformity is a perceived survival advantage. To reinforce what you're saying, I'd like to refer you to a terrific book, 'Class', by Paul Fussell, that is a humorous and yet serious examination of American social classes, their behavior, characteristics, attitudes, and mannerism. Fussell basically found out that most Americans are walking state machines back in the 80's and wrote about it. >> I spent 4 years in an academic department, in a social science. All the professors in the department were atheists, every single one. And they all seemed to like affirmative action. But why? It almost seems like types of people are stamped out on an assembly line. Given the reputation of college campuses, I'm not surprised. I think that what is really disappointing about the 'human state machine' premise, especially in the context of professors or preternaturally bright programmer types, is that really gifted people are as much walking carbon copies as are so called 'unthinking' blue collar types. >> I find it fascinating, and also a little weird. >> I'm definitely not the type you describe. I have questioned everything all my life, and then have questioned the questioning, so that now I almost seem conventional. Same here. Now, does that make you and I a new form of stereotype: 'ha ha, look at the introspective mature programmer types, they're so CUTE the way they try to be independent minded and contrarian... ' LOL.
Sun 16 Mar | MaisOui | Real PC said: 'All the social science professors in the department were atheists, every single one. ', adding that they were also all for affirmative action. That has a lot more to do with the person in charge of HR in social science, and the culture of the department than social science. For instance, the university I went to was fairly anti-affirmative action. As a result, the vast majority of the social science professors were also anti-affirmative action. I can't speak to the religious background of most of the professors, but one was a devout Hindu. There's nothing magic about social science afaik that makes a social scientist more likely to be an atheist. They are probably more likely to have a deep interest in people and society, and as a result more likely to have the background to draw conclusions about that topic, but that's about as far as you can safely go. Anyway, all that to say that I am not a big fan of drawing general 'truisms' based on one's own personal experience. For instance, I could say that most people restrict the circles in which they move to a very narrow chunk of society - and this is especially true for programmers :) This is certainly true in my experience, but to make assumptions about how other people see the world is very dangerous. Expanding this kind of assumption to someone you don't know opens the door to all kinds of potential problems and conflicts. It also gives you a false sense of security - when really, if your assumption turns out to be true, it's just a coincidence. Speaking of generalizations, the politics of the programmers I know tends to depend more on their background, education level and the sector in which they work. Since the group that I work with and the group I know are a fairly diversified group - it follows that their political beliefs should also be diversified (as in fact, they are). The beliefs range from the 'keep the status quo' to 'drop a nuke on Saddam'. Personally, I believe that a war with Iraq is not only a bad idea, it would be a morally corrupt venture with serious long-term repercussions for the US. It's likely to be ineffective: After all, the US bombed Afghanistan 'to get Bin Laden' with little success. They've also already (and illegally) done the anti-Iraq thing. It's not the main problem: Iraq and its potential cache of weapons is not nearly as dangerous as some of the other lunatics out there. And while nukes, biological and chemical weapons are very scary - terrorists are inventive (witness how they brought down the WTC). Historically, eliminating random threats as they occur hasn't exactly had a good track record. And we all know where arms races lead. Even if you accept the problem as being Saddam Hussein, it's not the logical solution: The main reason being given to support a war is that Saddam Hussein needs to be removed from power. The US has removed leaders they don't like before, without starting a war and without dropping bombs on civilians. So I really question the US motivation.
Sun 16 Mar | Robin Debreuil | The US bombed Afghanistan with little success? Could you clarify what you mean there?
Sun 16 Mar | Stephen Jones | -----'The US bombed Afghanistan with little success? Could you clarify what you mean there? '------ Quite right to attack his sloppy thinking Robin. America dropped a lot of bombs in Afghanistan and many of them went off, made a lot of rubble, and killed lots of turdworlders, which is what bombs are supposed to do. Also the TV ratings went up, and so did the government’s. This is called total success by any reasonable yardstick. Now maybe Mais Oui is one of these 'Eurowhiners' who actually thinks a 'successful' outcome might have marginally improved the lot of people in Afghanistan outside heavily subsidized, and still pisspoor, Kabul, or that 'liberating the Afghani people' involved something more than simply liberating a few thousand of them from their body parts with TNT therapy. Indeed he may even be under the impression that that was what the US government and allies were saying before the invasion - that and something about catching a guy called Bin Laden. This shows just how low down the evolutionary scale these cheese-eating surrender monkeys are. It was just guff; does anybody seriously believe that smoking Marlboro will make you look like a cool cowboy, or that MacDonald’s produces food, or Microsoft trusty computing? It's the same with the government - unlike the commy old-world governments the US has always embraced commercial values, particularly with regard to PR. The strike on Iraq will also be stunningly successful. Indeed the whole history of British involvement in Iraq shows the virtue of pre-emptive strikes. Iraq has never invaded the UK in 3,500 years of history, but in the last hundred years whenever a British PM has turned his gaze to the Middle East he has invaded Iraq (except in 1956 when they decided to invade Egypt instead). Britain 3 Iraq 0 QED Indeed the history of the US clearly proves the virtue of pre-emptive strikes. The US has bombed or invaded, or threatened to invade, pretty well every country in the UN (serves 'em right for joining such a pinko body) with the exception of Britain and Canada, who just happened to have got in first and been the only two countries ever to have actually invaded the USA. A double-whammy if ever there was one. There is only one thing that worries me; nearly all of Bush and Cheney's friends - Noriega in Panama, Saddam in Iraq, and Bin Laden in Afghanistan - have ended up having their countries. Considering how close Tony Blair is to Dubya, should us Brits be worried?
Sun 16 Mar | anon | When did Canada invade the US?
Sun 16 Mar | The Real PC | Bored, [really gifted people are as much walking carbon copies as are so called 'unthinking' blue collar types.] That is exactly what I've been noticing, and have been observing this for many years. I grew up in a 'liberal' family and all of us are above average in intelligence. I suspect my parents unconsciously contrasted themselves with lower class uneducated people. At the same time we supposedly believed that everyone is equal and racism is evil. We looked down on organized religion, because we associated it with lack of scientific education. When I became an adult I analyzed my parents' brand of 'liberalism' and eventually rejected most of it (although of course it contains some valuable idealism which I did not reject). But I think you're right -- my parents were looking for a sense of belonging and status that results from contrasting yourself with 'rednecks.' They didn't get their ideas from books -- they are not intellectuals and don't read a lot of non-fiction, aside from their central interests (my father is an engineer and I only remember him reading either engineering journals or novels). I have to say, out of guilt, that I love and respect my parents. I'm just describing a stereotype that I know well. In summary: I agree with you that fear of rejection and the need to belong to an 'in' group motivate a lot of this automatic thinking. I think there are other factors, though. A major factor is ignorance -- most people stop studying when they leave school, unless they have to learn something for their jobs. And even those of us who love to read and never want to stop learning have limited time, and therefore we are all relatively ignorant. And therefore a large part of all of our thinking is automatic. I'm going to read 'Class.'
Sun 16 Mar | The Real PC | Stephen, Do you read a lot of Chomsky, by any chance?
Sun 16 Mar | Stephen Jones | 1812 give or take a year or two. Stilll under Britain at the time. Burned down the White House. Don't they give it star billing in the history books over there? :) The war was the Napoleonic wars. Britain was at war with France, the US's oldest ally who had saved US independence in the War of Independence by moving troops in to attack Cornwallis and save Washington, who was holed up somewhere around the Potomac at the time. A bit embarassing those facts now (particulary owing your independence to part of the Axis of Weasel); still I'm sure Dubya's new allies form behind the old Iron Curtain can lend him a few unemployed experts in rewriting history. They're probably already polishing the Powerpoint Presentation that shows the Statue of Liberty was donated by EuroDisney.
Sun 16 Mar | Stephen Jones | ---'Stephen, Do you read a lot of Chomsky, by any chance? '----- The linguistics - none of the political stuff.
Sun 16 Mar | Robin Debreuil | Hey Stephen, Sorry to cause you such huffing and puffing. I think if you look at the requirements document for the afgan thing, they've all pretty much been met. Perhaps you should submit your blueprint for bringing Afganistan into this century, I'm sure all that is lacking is a plan.
Sun 16 Mar | Stephen Jones | Sure the requirements have been met. Lots of dead Afghans. Lots of news footage. Everbody in the US has forgotten about it. The Taliban are still controlling large swathes of the country. Hektmayer makes the Taliban sound like Mother Teresa. American troops are 'strategically withdrawing' from many areas of the country. Opium production is way up again (mixed news that). Bin Laden is still around. Al Quaeeda is still around. Each foreign intervention, whether British, Russian, American or Pakistani, has managed to leave the Afghanis worse off. Simply leaving them alone might be a good start.
Sun 16 Mar | The Real PC | Stephen, I more or less agree we (the US) should leave people alone. No one has elected us the police force of the planet. However leaving people alone is not the answer either, because we have no system of global law enforcement. That is the dilemma right now. Only the US is powerful enough to take on that role, but no one elected us. Even when our motivations are at least partially humane and compassionate, we look like a big bully. So the US should leave people alone, but then we need some other plan for global law enforcement, or the world will continue its collapse into chaos. The UN has not proven effective. Another problem that I see: When the US tries to help undeveloped nations we naturally impose our own definitions of 'success.' By 'helping' we destroy peoples' traditional social and economic structures, possibly resulting in resentment instead of gratitude. Maybe they want to herd goats and live in tents. We assume everyone wants Western education and technology, and equality for women. Those things are ok, but they aren't for everyone, and besides they bring along new problems. To summarize: The US can't win by intervening, but staying out of things won't work either. People should start looking at this tremendous problem more objectively. All I see everyone doing is blaming others and throwing around the word 'evil.'
Sun 16 Mar | Ajax | Why is global law enforcement a good thing?
Sun 16 Mar | Stephen Jones | The main reason that the UN doesn't work is that none of the five permanent members of the Security Council want it to. As to not all people wanting ' Western education and technology' but prefering to 'herd goats and live in tents' they are rarely offered the alternative. The American alternative to herding goats and living in tents is normally to have to abandon the goats and the houses to live in refugee camps. It is also well worth remembering that the US gives one of the smallest proportions of GNP in the world as foreign aid and that most of that goes to Israel (hardly an impoverished courntry) or Egypt, as military aid in both cases. The Americans have bombed or invaded something like 40 countries since the end of the Second World War, excluding those courntries where they intervened by proxy such as Chile where they arranged the murder of the head of the Armed forces for being loyal to the constitiion and then paid the lorry owners to go on strike to cripple the economy and the democratically elected government. In few of these cases has the American intervention been beneficial for the inhabitants of the courtries invaded, or indeed anybody else. I would say the only two examples that spring to mind are Bosnia and the first Gulf War and that has been marred by America's preference for a weakened Saddam Hussain and a crippled Iraq rather than self-determination for the different parts of Iraq. Exporting democracy, which has suddenly become the markieting formula for the Iraqui conquest is rather a joke. In general the Americans have been miuch better at undermining democracy whenever it produced a government they viewed as unfriendly, than in doiing anything to support it. Among its favoured allies have been the Shah of Iran, Ferdinand Marcos, and countless Latin American butchers (many of them trained at the School of the Americas). Do you seriously believe that the Americans have any interest in having democratic governments in the Middle East when the first thing all of them would do would be to break off all military co-operation with America? I don't doubt that the American public who applaud interventions and the troops that carry them out believe they are acting for the common good. I might even accept that the politicians who send them believe that on the odd occasion, but what is clear is that the intervention rarely achieives it; and when it fails it is not because 'people don't want our help' as so many Americans appear to delude themselves, but because the Americans have fouled up. Take Somalia where they come in to help and end up killing a few hundred Somalis and doing little else. Then they make a film of it and cast the Americans as the heros and the locals who suffered them as the villains. The Canadians and Italians didn't come out of it much better either. The average American does seem sometimes to be thiinking he is still living the the Second World War and its aftermath of the Marshall Plan. IPerhaps the best answer to that was given in the vice-presidential debate in 1988, when Dan Qayle compared himself to Truman and Kennedy: 'Son, I knew both Harry Truman and Jack Kennedy and you don't come anywhere near either of them.'
Sun 16 Mar | Chuck | Ajax, PC is right that global law enforcement is the answer. We need to give some organization ultimate unquestioned power over our lives. I am sure that they will use their power only for good and never evil because people are all basically good people it's society that's to blame when they go bad.
Sun 16 Mar | Dennis Atkins | 'It is also well worth remembering that the US gives one of the smallest proportions of GNP in the world as foreign aid and that most of that goes to Israel (hardly an impoverished courntry) or Egypt, as military aid in both cases.' -- S. Jones That's funny - I thought we gave more foreign aid than any other country by a wide margin. Do you have sources you can direct me to shouwing otherwise? You mention Israel. How much foreign aid did Sri Lanka supply to Israel last year?
Sun 16 Mar | The Real PC | [We need to give some organization ultimate unquestioned power over our lives.] That's ridiculous. We need a democratic world government that has the power to enforce it's laws. What we have now is international anarchy -- maybe that was ok before nuclear weapons.
Sun 16 Mar | The Real PC | He said in proportion to the GNP. We could give the largest sum and it could still be the smallest relative to our GNP.
Sun 16 Mar | The Real PC | Stephen, Speaking of stereotypes, you are right in line with the politics of typical high school teachers nowdays. You can't give the US a bit of credit for any of its accomplishments or good deeds. Of course our government was crazed in its effort to hold back communism. It could not distinguish between the twisted brand of communism practiced in the Soviet Union and democratic socialism. As a result we often supported cruel dictators just because they were opposed to communism. It was a semantic error, a result of the kind of extreme and simplistic thinking I see going on now, in a different context.
Sun 16 Mar | Nat Ersoz | Chuck was being sarcastic.
Sun 16 Mar | The Real PC | I know he was being sarcastic. I meant his being sarcastic was ridiculous, since there is no reason to think a world government would be a dictatorship.
Sun 16 Mar | Dennis | Why would you think a world government -wouldn't- be a dictatorship? Hasn't world government been the goal of every dictator and totalitarian regime?
Sun 16 Mar | The Real PC | The democratic western countries obviously don't want a world dictatorship. That's exactly what we're trying to prevent.
Sun 16 Mar | anon | yeah, we favor oligarchy!
Sun 16 Mar | realist | It's interesting how many Americans falsely think that the US is a philanthropic nation. It is 'national interest' that dictates US foreign policy. Were talking about business, not security, or lives, or justice, or helping the more unfortunate, we're talking cash baby, pure hard currency. It's also national interest that drives all foreign aid donations, America only gives when it receives in return, no philanthropy there I'm afraid.
Sun 16 Mar | anon | We haven't had hard currency in years. The US went off a metal standard in 1971 (I think). I don't think any currency circulating today is backed by anything but a promise. What we have is nice, soft fiat money.
Sun 16 Mar | realist | Your ignorance is amusing, 'hard' currency has nothing to do with metal.
Boomerang of offshore outsourcing? | Sat 15 Mar | T. Norman
I had a conversation recently with an Indian colleague who has had his green card for a few years. He is actually seriously thinking of selling his house and going back to India, partly because of the collapsing the US economy and the now-booming offshore programming sector in India. He was pointing out that: - Indian salaries are now more than double what they were 4-5 years ago, in real US dollar terms. - With the low cost of living in India, an experienced programmer can afford to live in a good-sized house with servants to cook, clean, and take care of the lawn. - Indian companies are very hesitant to lay people off, unlike US companies who lay off 1000 people if the wind direction changes. The more US and European companies outsource to countries like India, the more expensive and less productive it becomes as a whole. Increased offshore outsourcing sends up the price of those services, while decreasing the quality at the same time because they will eventually need to decrease hiring standards to keep up with the increasing demand for labor. The result could be either a lose-lose situation, where companies send out large amounts of work but dont profit from it because it isnt cheap enough to compensate for the delays and communication gaps involved, while American programmers are out of jobs at the same time. Or it could result in a mad swing back the other way, with companies realizing they got burned and pulling back loads of work into America, resulting in another hiring frenzy like in the late 90s. So, what are your thoughts?
Sat 15 Mar | Slava | This scenario is unlikely to be implemented:). 1) I highly doubt that good Eastern European programmers or Indian ones are worse than American ones. 2) I'm not sure about communication gap. These communication problems aren't so critical. I've seen a lot of good outsourced projects. 3) Had TV sets, videos, computers assembly jobs or steel jobs returned to US? No. And I highly doubt that this will happen in the near future.
Sat 15 Mar | T. Norman | By 'communication gap', I meant the gaps in time and interpretation that occur, as compared to someone on-site who has face-to-face interaction with users and managers. That gap is always going to be there, even if it is small sometimes.
Sat 15 Mar | GiorgioG | Does anyone know why our politicians are welcoming these offshore companies? http://www.buffalonews.com/editorial/20030308/1046850.asp Especially when they are using shady practices? http://www.businessweek.com/careers/content/mar2003/ca2003036_6655.htm *Sigh* -Giorgio Software Developer, soon to be street-cleaner
Sat 15 Mar | Stephen Jones | Indian companies are less keen to lay off staff because their staff are a lot cheaper. If the salary rates go up then things will change. Salaries are still a lot lower than the States or Western Europe. One of the advantages of outsourcing is that when the almost-inevitalbe cost overrun ocurrs it is nothing like as ruiniously expensive as it would be if you hired locally. You would probably get a clearer idea if you just forgot that the outsourcing went to another country. Imagine you're outsourcing to Minnesota instead of Mumbai. or Bimrningham Alabama instead of Banglalore. I think you'd agree that a balance would come into being; after all after a couple of years the guys in India are going to be more conversant with your product and company culture than newbies in Seattle or Santa Clara. Also remember that plenty of IT work cannot be outsourced because proximity to the client is an absolute necessity. I've spoken on this before. The limit to outsourcing in Inidia is most likely to be the creaky infrastructiure; in China there are 59 million internet users. In India there aren't that many telephone users, let alone PC users.
Sat 15 Mar | Robin Debreuil | Contrary to what you might think, the software industry doesn't exist to keep you employed. If you can't create the product people want at a competitive price, why would anyone feel obliged to buy it? What's good for you isn't neccesarily good for the country after all. If you assume that say half of the best programmers in the world (price/product) live outside the US - what should the US do about them? Option 1: Defend against them, let other countries hire them, and and watch those 'foreign' products beat you out of the market. Option 2: Hire them and an outsourced US product will beat you out of the market. Option 3: Bring them to the US and they will beat you out of the market with a pure US product. Obvoiusly they are trying three as hard as they can, settling for two, and laughing at most of the rest of the world doing one. There is a reason the US is the richest country in the world, despite seeming to get beat at every turn. And if you don't like it, you can move to India too - I moved to China and now live in a big house, have help, and can program all day. You are the one with the freedom to move, unlike most people here, so maybe its time quit whining about others having it better.
Sat 15 Mar | Yoav | Maybe the question to ask is, Why should ANY jobs remain in the United States when salaries are lower in other countries?
Sat 15 Mar | Devil's Advocate | While goods can (should?) be produced whereever is cheapest and then shipped, service industries need to be locally based. It is far cheaper to hire an American plumber (say) than to fly in his non-union Mexican counterpart. When IBM was running the computing industry show, writing software was seen as a service. If you wanted some software on your Big Iron, you called IBM and they sent a team to provide the service of writing it for you. One of the effects of the PC revolution was to commoditize (most) software. In the minds of most people in the U.S., software is a manufactured item -- something you get in a box with a UPC on it down at Staples or Best Buy or WalMart. As long as upper management believes this, programming jobs will follow the manufacturing jobs overseas.
Sat 15 Mar | T. Norman | I don't personally have a problem with the offshore outsourcing, if it actually results in increased profits and genuine cost savings. If that is what occurs, and I can't provide the price/performance to justify my US salary, then so be it. I will still benefit from cheaper goods and services and an improved stock portfolio, and there are other types of jobs that I can do to make decent money, even if it isn't quite as much as what I make now. The problem right now is that many companies are jumping into it as the latest management fad, thinking that they will magically save money just because the foreign salaries are lower. Just as in the '90s they all thought they would magically mint money if they put something on the Internet. They aren't carefully considering the types of projects that are good candidates for outsourcing, or the increased preparation and documentation involved in successfully completing projects offshore. Sometimes the companies won't even know when they're losing money as a result of outsourcing. For example, if an offshore project got completed with 10 people in 6 months, the American executive who sponsored the project will report to the directors and shareholders that it would have cost a quarter-million dollars more to do it in-house, because 10 American programmers for 6 months cost that much more (and of course, the exec gets a nice bonus for himself). But the reality could be that it would have taken just 5 in-house programmers 4 months to do the job, because of their familiarity with the company's products and systems and their direct interaction with users - in which case sending it offshore actually cost the company $100,000 dollars *more* in project costs AND two months of additional time to market. A result like that is a lose-lose situation where both the shareholders and employees end up worse off because the company isn't really saving money, and the employees' jobs are gone. (Of course, it's not lose-lose for the execs and CEOs who collect nice bonuses while this is going on). That is the situation I do have a problem with. In their enthusiasm to send more and more work offshore, some are failing to do the proper cost/benefit analysis to determine what and when and if to send work overseas. Some are even mandating that some arbitrary percentage of their systems must be outsourced. If they think it is an automagic money-making machine like they used to think of the dot-coms, the US economy will be in for an even bigger meltdown in a few years.
Sat 15 Mar | T. Norman | 'Maybe the question to ask is, Why should ANY jobs remain in the United States when salaries are lower in other countries?' Because programmer salaries are just one part of the equation. Once you outsource something, whether it is sent overseas or to a remotely located US firm, other factors come into play against you, such as one or more of the following: - A lower probability of producing exactly what the users want, as a result of the lack on-site interaction - Security concerns - Communication delays and time-zone issues (although the time zone thing can be a benefit in some cases) - Overall increased labor in terms of hours (such as the increased documentation requirements and the need for double-testing, i.e. the remote QA team will test it in addition the US client's QA team) - Lack of familiarity with the company's products, processes and systems - Differing interests: the US client's decision to send offshore is the prospect of saving money, while the offshore vendor's interest is to make money. This can result in ambiguous or 'gray area' requirements being interpreted in a way that favors the vendor ('Oh that's what you really meant? This is a fixed price project, we already developed what the contract said, it'll cost you $200K more to redo it in that way!') - No long-term stake in the maintainability of the systems they develop (unless the vendor also is signed to a multi-year maintenance/support contract)
Sat 15 Mar | | Maybe the question to ask is, Why should ANY jobs remain in the United States when salaries are lower in other countries? Not only is IT being outsourced but also backoffice work. I know of some big banks/brokerages sending there backoffice reconciliation and clearing overseas as well as there financial analysis and pricing. Also, telemarketing and call centers seem to be popular exports.
Sat 15 Mar | T. Norman | I meant to add to the point about the increased overall labor hours above -- that it may result in increased time to market, which may not always compensate for the direct cost of the labor itself being less.
Sat 15 Mar | Robin Debreuil | I'm curious if you view outsourcing to a domestic company, that isn't necessarily cheaper, the same way? A lot of these arguments were made as software spread out of Silicon Valley. Also, don't forget that these countries are markets as well as competition. The biggest opportunities are usually in a place with growth potential...
Sat 15 Mar | Bella | > - Indian companies are very hesitant to lay people off, unlike US companies who lay off 1000 people if the wind direction changes. Yes, and they also HIRED 10000 people when the wind changed directions. Why do you think you had a job the last 10 years? Ingrate. Live by the sword, die by the sword.
Sat 15 Mar | Bella | > Maybe the question to ask is, Why should ANY jobs remain in the United States when salaries are lower in other countries? How else would people pay for their new cars, housekeepers, and exotic vacations?
Sat 15 Mar | . | Managements have been revealing their inadequate understanding of software development for years, blaming their IT departments, their software developers, their anything. Anyone who thinks this offshore outsourcing gig is going to be some nice smooth ride is in for a big shock. It won't be long now before managements start kicking some blame again, and based on what I've seen of offshoring, there will be heaps.
Sat 15 Mar | Mark Hoffman | I agree with the original poster that Indian and other off-shore salaries are going to continue to be driven up. Good ol' suppy and demand. Unless you have a tyrannical government chaining techno-serfs to their keyboards, free markets will prevail. I've only had one experience with a project that had portions of it outsourced to India and the time-zone and communication differences made it quite difficult. I'm sure some projects lend themselves better to outsourcing. At either rate, there is an intrinsic cost in communcations when outsourcing. Combine that with increasing salaries overseas and I don't see outsourcing as the death of the American software industry. I do have to shake my head sometimes at my fellow American programmers who wring their hands at the prospect of losing their job overseas, but often fail to take even basic steps to make themselves more valuable.
Sat 15 Mar | GiorgioG | Well, just to satisfy my curiosity I did a job search for jobs in India. A VB/Oracle programmer with 3 years experience gets between $450-$550 per month. Offshore salaries may be going up, but they're going to have to go up a hell of a lot before they're up to our rates. As far as making yourself more valuable in the States, I don't see how in the long run there's any way to make a developer more valuable here than in some 3rd world country who has the same technical knowledge. Specialization may help, but there's little stopping a guy in India from doing the same thing. There's very few barrier sto entry in this field...
Sun 16 Mar | anon | Most of the stuff I've seen offshore is either low quality crap or heavy process, long duration. Compete by offering high quality and short lead times. Know your business, be able to talk to the people purchasing your services in their language. Most of all, DELIVER. Stop bullshi**ing your customers with buzzwords and other kinds of nonsense and bring some value to the table. Understand their problems better than they do. Make their lives easier. They will reward you.
Sun 16 Mar | Bella | > Most of the stuff I've seen offshore is either low quality crap or heavy process, long duration. Blanket statements like 'offshore is crap' makes you look like a stupid inexperienced ignorant flake. The sooner you accept that you're a commodity, the sooner you can start dealing with reality.
Sun 16 Mar | Bella | > Stop bullshi**ing your customers with buzzwords and other kinds of nonsense and bring some value to the table. Funny, its the american's who flounder in this bullshit. Offshore developers simple provide what the client desires. you're pathetic argument is nothing more than an endorsement for offshore, vs. self-interested american coders who think firms exist for the sole reason of providing people a place to make a living.
Sun 16 Mar | sincerely, anon | Would you rather I give a statistical analysis of each item I've seen produced that way? It's a general statement to be brief. Prepared to offer an analysis of your own, or do you just like to gripe and snipe? Get off your high horse. 'Funny, its the american's who flounder in this bullshit.' 'Offshore developers simple provide what the client desires.' So what, you have monopoly rights to blanket statements? And my argument *is* for americans to stop bitching and start producing if this supposed threat is bothering them. Read it again, this time with your eyes open and your brain engaged.
Sun 16 Mar | Stephen Jones | I suspect the Oracle/VBA programmer they will get in India for $550 will probably be pretty useless. I reckon the policy is hire half-a-dozen at the price and hope that one will be some good. Also VBA is small business stuff - you wouldn't dream of outsourcing an Access project to India because it's qucker to write the code than write the specifications (in fact Access is commonly used for writing speciifications). So I suspect he'll be used for internal work. It's the good guys on $2,000 a month you need to be worried about. Just to give you an idea of the competition at the bottom end, our college in Saudi (Indian or Saudi IT staff) has just send us an hour ago a list of 'community courses'. One of the things they are offering is a course for making small business applications using VB6 for the front end and Access for the BACK END. Methinks a certain misunderstanding of the correct tools here. However I did refrain from suggesting improvements to the course designer's back-end involving lubricants and metal tubing, if only because I am still puzzled as to why another course in 'Designing Static web pages with Front Page' should have knowledge of a scripting language as a preferred pre-requisite! It could be that both these cases are simply an example of the guy expressing himself badly, but this is precisely one of the problems that perennially comes up in the outsourcing debate.
Sun 16 Mar | Yoav | Lot's and lot's of talk about the quality of offshore-coded software .... Does anyone know of a product(s) in wide use -- good or bad, buggy or not -- that's sold by a US company though entirely coded offshore?
Sun 16 Mar | T. Norman | 'A VB/Oracle programmer with 3 years experience gets between $450-$550 per month. Offshore salaries may be going up, but they're going to have to go up a hell of a lot before they're up to our rates.' Remember that salaries are not the only factor. For example, companies spend millions of dollars a year for office real estate. The annual cost of the floor space, air conditioning/heating, electricity and other infrastructure related to the cubicle in which you sit is easily as much as 30% of your salary. If it wasn't beneficial to have programmers on-site, they would make all the programmers work from home and save those millions. By outsourcing development, corporations are giving up the benefits of on-site interaction, which is something important enough that they normally pay millions for it. At the same time, they are also paying for the real estate and infrastructure costs of the remote developers, which although cheaper than office space in a US city, it isn't as low as the 10-20% level that salaries are at. Rent in a software hub like Bangalore isn't so cheap, and it's rising rapidly. Also remember that unless the US company owns the Indian software firm, they'll be contracting the work out to the Indian firm, and the firm will put a markup on top of their salaries and infrastructure costs. As a result, the amounts charged to US firms are sometimes as high as $40/hour - not the 10% level that you'd get if you just look at programmer salaries. If Indian salaries go higher than about 1/3 of US salaries for the same skill level, very few offshore projects will be profitable. Salaries and commercial real estate there are going up while average skill levels are going down; it is much easier to get hired now in India than it was 3-4 years ago, and a study reported in an Indian newspaper actually projects India having a shortage of programmers within the next 3-5 years. Programming is not like manufacturing where there is a global supply of billions of people who are capable of being trained to do the job. Perhaps the long-term trend, after companies learn what really works and doesn't work, is that the projects that would have been outsourced to somewhere like EDS in Texas will instead be sent abroad (since if you have to deal with the remoteness and markups anyway you may as well do it cheaper), while what is done in-house will stay in-house. And the larger corporations will set up some of their own software centers offshore instead of using vendors.
Sun 16 Mar | T. Norman | 'Does anyone know of a product(s) in wide use -- good or bad, buggy or not -- that's sold by a US company though entirely coded offshore?' Oracle Developer 2000 was coded in India. What a buggy piece of junk.
Sun 16 Mar | . | The Visual J++ part of Microsoft's Visual Studio, back when Micosoft was supporting Java. VJ++ 6.0 was bad.
Sun 16 Mar | Robin Debreuil | Does anyone know a major product that wasn't at least partially outsourced?
Sun 16 Mar | Bella | Oracle Developer 2000 was the biggest piece of shit garbage I have EVER touched. Oracle lost ALL credibility in my eyes or ever having the NERVE of trying to foist that complete JUNK onto the software dev community.
Sun 16 Mar | T. Norman | There are still surprisingly many companies using Developer 2000. They got into it because they were using the Oracle database and they operated under the common management fallacy that it is better to have a single vendor for all or most of their IT products. They never would have bought it if it was from an independent company. Now they are locked in because they have so much code already built with it. I don't know who is worse -- Oracle for having the nerve to foist that junk on the industry, or the managers who decided to purchase it.
Sun 16 Mar | Stephen Jones | What's the worst in our case is the junk that they wrote with it!
Sun 16 Mar | Mark Hoffman | Bella, Anon's was clearly stating his experience with offshore development. He used clever phrases like 'most of the stuff I've seen'. How you saw that as a blanket statement is beyond me. You are the one looking ignorant here, Bella. Of course, I see you aren't above making blanket generalizations, though: 'self-interested american coders who think firms exist for the sole reason of providing people a place to make a living. ' And what in the world do you mean by 'self interested'? Do you mean someone that has the gall to want to protect their own job? Gasp! Get a rope! You claim that programmers are nothing more than a commodity. While I agree that some companies do treat people this way, I'd say this provides some insight into your past experience. Most true professionals with solid skills don't feel that way. Why? Because they've crossed the chasm of being a 'rank and file' coder to being someone that can offer more valuable skills than just coding up a VB 6.0 form. If you feel like you're just a commodity then try making yourself more valuable.
Sun 16 Mar | Slava | >>Does anyone know of a product(s) in wide use -- good or bad, buggy or not -- that's sold by a US company though entirely coded offshore? << CuteFTP, CuteFTP Pro. Coded in Russia.
Sun 16 Mar | anonymous | Wipro coded some Corel products, or part of them like parts of the Corel Office Suite
Sun 16 Mar | Dennis Atkins | There is no threat whatsoever of american IT jobs being lost to overseas. It's all hysteria bought into by insecure people who don't know any better: > [T]he fear that great numbers of tech and other white-collar jobs have been permanently transferred offshore is probably hysterical. 'As a cyclical phenomenon, jobs moving offshore isn't that important,' says Robert Shimer, an associate professor of economics at Princeton. The concern, says Kevin Hoover, an economist at the University of California at Davis, is based on the misapprehension that if our wages are high and other people's are low, all our jobs will be exported. 'It turns out we are more efficient than the people we are competing with,' he adds. see: http://www.business2.com/articles/mag/0,1640,47135%7C2,00.html That article also references credible salary and employment information showing that not only is unemployment in the US at historical lows right now, but salaries are going up and pries of goods going down, producing a massive surge in the quality of life. Those of you who in the Parade magazine thread though $45k was a good salary for a developer are totally out of touch with reality. If you are making less than $70k doing anything in IT you are probably a janittor, incompetant or too stupid to know your own worth. Here's the real salary info. these are nationwide averages too. If you live in a hotspot or are of above average talent, your salary will be even higher: http://www.business2.com/worth/0,,,00.html
Sun 16 Mar | Mike | How much or is any MS software coded overseas. I think it is not much. The 'evil' empire are actually better about keeping jobs here than some of it's bretheren, i.e. Oracle.
Sun 16 Mar | Mark Hoffman | 'That article also references credible salary and employment information showing that not only is unemployment in the US at historical lows right now' Um...there are some folks at the Department of Labor that might disagree with that. http://www.whitehouse.gov/fsbr/employment.html There is reason to believe that the unemployement rate is dipping, but it's hardly at 'historical lows'. And your comment that if you make less than 70K in the IT industry then you are 'incompetant, a janitor or too stupid to know your own worth' is laughable. Are you honestly suggesting that someone fresh out college is going to earn 70K a year? In all areas of the country? So the thousands and thousands of people in our industry that are looking for work and can't find anything paying even 50K a year..Are they just all stupid too?
Sun 16 Mar | Devil's Advocate | Dennis - I don't know if I would go so far as to call those cited salaries 'credible'. Firstly, their salary collection methodology is never properly explained (certainly not on the Methodology page). Secondly, if we combine their 'sample' salary data with some fairly recent census data ( http://www.census.gov/prod/2002pubs/p60-218.pdf ), we see that 149 of the 150 listed professions (including 'Executive Housekeeper', excluding 'Senior Retail Clerk') earn more annually than 50% of all full time working women in this country (or about 30% of all households). This strikes me as unlikely in any reasonable subset of professions from the economy at large. My suspicion is that these numbers are based on very few data points and / or were carefully chosen to reflect the biases of the core readership.
Sun 16 Mar | Deepak Shenoy | I live in India, and run a software business - an 'outsourcee' if you may. A few thoughts from this end: a) Indian companies are less keen to lay off staff: Yes, sometimes to some obscure degree of fanatism. I don't know if it's leftover socialism from the past, our archaic labor laws, or just the fact that we have absolutely no social security. But managers aren't too keen to fire staff for non-performance or incompetance, let alone lay offs. Social issues play a part too - there are tons of languages spoken in India, and nepotism among common-language-speaking-people is...well...common. (I personally can't stand it, for the record) 'Taking care of their own' is like a mission statement in some places. b) Salary increases - While IT salaries have been going up, the last two years have been much lesser in terms of growth. From an industry average raise of 50% annually, we're down to something like 10%. Also, it's taking a while for other industries (manufacturing, banking, retail etc.) to catch up with the salaries - so the standard of living for an IT person is very high. But even now, the highest payers are not 'outsourcee' companies - that credit goes to the offices of fully owned foreign companies (e.g. GE, Oracle, IBM) c) Outsourcing quality,differing benefits and the fact that US companies are not evaluating cost/benefits enough: True, a company could twist glazy specs in fixed bid projects, but they won't get their biggest source of customers - references. Plus it'll teach both parties to keep the requirements VERY well specified - I've been burnt by partial specs on fixed bid projects, where I've had to do a lot more than what I believed was promised. In terms of quality - it's probably true that some companies have hired by the dozen without too much emphasis on skills, and maybe because the salaries are so low, but in the long run these companies are either going to die, going to fire the incompetent people, or the people might make themselves valuable. What's happening right now is perhaps best for the Indian industry - that the outsourcers are concentrating more on quality, so companies here have to address that or die. If American companies aren't addressing cost/benefits enough, then they'll learn after they get their fingers burnt. My company stands to lose if a client decides purely on price - I offer intangible things like communication skills, and higher quality which costs me higher (and so I can't offer the lowest price). In fact we stand to lose if a customer does no cost benefit analysis even if we get the project, because expectations are way too high. There are enough hurdles in just the time zone issues to warrant serious problems, and one has to understand that this will happen in an outsourcing scenario. d) A point on salaries - while in the US and Europe salaries are the highest % spend of a company, out here (in my company at least) we spend between 40-60% on infrastructure and other costs (Internet, admin etc.) So if a company has spent tons on infrastructure they hire like crazy even if there's no current use for the people - because, or so they say, the investment does them no good otherwise. (I don't subscribe, but that's a different story). That might explain why a number of large companies have more than 20% of staff 'on the bench'. (Yes, there is such a thing as a resource buffer, but 20%????) That might explain excessive hiring but again, as the competition with other countries (China, Russia etc.) heats up, these companies will have to shed all their flab, and start moving faster. In fact, some of the companies here are also planning offshore outsourcing to China and Phillipines! e) Products built offshore - there's a couple of companies I know that are developing famous products - iFlex, Citibank's banking software arm is one of the biggest players in the banking industry - that's developed in India. There's a CRM product called 'Talisma' that's done here too. Most of the rest I know are heavily vertical. Mass market apps usually take a lot more cash in terms of marketing, support etc. which might be the reason they're not done here (or if they are, the partners abroad might be branding them) One other reason for outsourcing has been the work itself - maintenance on large projects is very important for companies, but their best staff wants nothing to do with them. Maybe because they're boring or offer no space for growth and learning etc. Such maintenance work has, in my experience, benefited from outsourcing - a maintenance company can focus on maintenance itself. Just my 2.
Sun 16 Mar | Stephen Jones | Deepak, A fabulous analysis. One thing you mentioned is the cost of infrastructure. Presuming computers are the same price in India they are in Sri Lanka we will be talking of a 30-50% premium compared to the States, and possibly more for business buyers. To the best of my knowledge the only broadband in either courntry are leased lines at mid or early nineties US prices, and phone charges for dial up are around $1 an hour in Inida I believe (in Lanka they go up to $3 an hour at peak times). I also suspect you either have to provide your own generators or rent in a fairly limited area of the centre of the city as although most of both courntires are electrified outages are common (the lLankan government has allowed the import of oil so we no longer have the scheduled cuts for drought, but I still find there is at least one day a week the power is off for some reason). Perhaps you could tell us where you are and what the office rents are. I remember seeing that Mumbai office rents were 80% of downtown New York (which was incidentally a lot cheaper than London, and even Birmingham England). In the States there is not as steep a difference in land prices as there is in Lanka, where a perch (25 square metres) of building land in Colombo can cost as much as $8,000 to buy, whilst only 30 kilometres away the price goes down to $300 or lower.
Sun 16 Mar | T. Norman | 'Maybe the question to ask is, Why should ANY jobs remain in the United States when salaries are lower in other countries?' I'm going to twist your question around and ask 'If offshore programmers can offer the same quality and efficiency* as in-house American or European programmers, why would they continue to accept a significantly lower salary?' *efficiency being net of the problems associated with remoteness, such as communication issues and time delays, etc.
Sun 16 Mar | Dennis | But Mark, someone fresh out of college is probably the first and the third. Not to say that can't change with experience.
Sun 16 Mar | Dennis | 'carefully chosen to reflect the biases of the core readership' Devil's Advocate, I don't know, it's Business Week. It's for managers and executives right? Wouldn't their bias be to hear that there is a surplus of low priced engineers, desperate people willing to accept any job just to have a job in the supposed high unemployment, outsourcing is good, etc? Instead they are saying companies will be increasing wages this year, engineers make a good wage, outsourcing is pointless since americans are THAT much more productive, and unemployment is at historical lows. What purpose would these things serve to Business Week's readership of executives?
Sun 16 Mar | Stephen Jones | Dennis, The positions chosen are those which the readers of the magazine are likely to hold. You don't see janitor's salaries because janitors don't buy the magazine (they probably can't afford to). And I don't exacltly know what a 'help desk analyst' is biut at $61,000 you can get out the L1 or whatever (or better still pay me $40,000 and outsource me to South India or Sri Lanka!)
Sun 16 Mar | Dennis Atkins | Mark, I followed your link to the white house and went to see the graph at: http://data.bls.gov/servlet/SurveyOutputServlet?request_action=wh&graph_name=LN_cpsbref3/ and was greeted with: >500 Internal Server Error >SurveyOutputServlet: >java.lang.NullPointerException Which reminded me of the thread a couple weeks back on exceptions -- this is exactly the problem! Low quality unstable code!
Sun 16 Mar | Dennis Atkins | Stephen, Many janitors in the US make much more than you are asking. Janitorial work is often unionized. $70k is not uncommen, nor is $120k for a dock worker.
Sun 16 Mar | Devil's Advocate | Dennis - I don't know where you are getting your numbers, but according to salary.com's salary wizard (for what it's worth) 75% of 'Senior Janitors (3-5 years janitorial experience)' living in NYC or San Jose, CA (the highest cost-of-living metro areas I could think of) earn less than $33,000/year. While there are certainly some janitors in the US who earn more than that. As to your other point, I am not familiar with Business 2.0 and cannot speak of it specifically (but I think it is a different entity than Business Week). There are any number of reasons a (less prestigious?) subscription magazine might want to report extra rosy news. It makes the subscribers happy, and higher circulation is good for the magazine. I take issue with their study because the methodology is secret, hence the conclusions are irreproducable. Additionally, the numbers they have reported do not agree well with what I have seen either in my area (greater NY metro) or in other publications (census documents linked previously), which convinces me not to give them the benefit of the doubt.
Sun 16 Mar | Devil's Advocate | Should be 'While there are certainly some janitors in the US who earn more than that, I don't think $70K can reasonably be considered 'common''
Sun 16 Mar | Dennis | Ack! You're right; I don't know why I thought it was Business Week, it does seem to instead be some sort of self-serving tech-worker rag, and you're also right that without the methodology reported in a way to make it replicable, the 'study' is worthless. Back to our cages everyone!
Tracking metrics with FogBUGZ | Sat 15 Mar | Guy Gervais
Since FogBUGZ uses an SQL backend to keep its data, cant someone who wishes to track bugs-by-programmer simply connect to the DB and create his own report using any reporting tool? Or is the DB obfuscated and encrypted to prevent exactly that?
Sat 15 Mar | Joel Spolsky | No, they can do that... it's pretty easy: off the shelf Microsoft Access, and we even have documentation explaining how to make your own reports. They're just not built in, one-click, which discourages non technical managers from messing around with things they don't understand :)
Sun 16 Mar | Gwyn | I think this is a great piece of marketing from Joel! He doesn't want to expend the cost and effort to allow customisation of FogBugz in terms of lifecycles, attributes, reports but he cleverly advertises this as an additional benefit! However, I don't buy it. However well intentioned, telling people that they don't really want what they're asking for simply comes across as arrogance to a number of people. And we don't like arrogant suppliers, oh no! Provide the tool, make it customisable, try to deter people from customising it by education and by providing a good process model set up in the tool in the first place (a lot of tool suppliers give you a flexible tool but don't give you a good initial setup - probably because they understand the tool but not the process it fits into)
Is FogBuz really required ? | Sat 15 Mar | Sunish
I just happened to see and use a simple bug tracking software Bugtrack 1.3 from http://www.pacsoftware.com.au/ . The download and install is quite simple as its a simple desktop app with no heavy db or web interface. For a small shop of just 2 developers I think its great for its price(its free). Anybodys got any experience with it ? I mean long term issues. Are there similar better alternatives ?
Sat 15 Mar | Bella | MS-Excel is fine for many projects as well. An MS-Access database built in 20 mins (One table, one screen, and a few reports) is also more than enough for many projects.
Sat 15 Mar | Sunish | You can have a reasonably good UI and all the features mentioned even with less than 20 minutes, just a matter of download.
Sun 16 Mar | murph | This is a 'how long is a piece of string' question. Step by step: 1) Is a tracking tool need at all? I think the balance of opinion here is yes. 2) So just use excel (or similar)? Well you if it works in your context that's fine but what if it doesn't... Which bring us to the answer (more or less) in that its not so much a question of whether FogBugz is really required as whether the cost incurred to acquire the particular set of facilities and features provided by fogbugz represents good value (to you and your organisation). Personally I think that technically and philosophically FogBugz is excellent and that it is good value for money (ask a) how long would it take one to provide an adequate home-brewed solution, and then b) multiply that by your hourly rate...). Naturally it won't be a good fit for everyone, nor will all users want to use all the features which brings us back to the value question.
Sun 16 Mar | Martin | I had te same questions as Sunish. So decided to test FogBUGZ - you can get a free 45 day trial account, just visit http://try.fogbugz.com/ . Of course you can use Excel (or whatever tabular data storing and presentation tool you prefer). But then you will suddenly have to do your daily work AND develop, tweak, update, etc. a new utility. The time you save by using a home brewed bug tracking tool might well end up being used on maintaining your bug tracking tool - and time is money.
Any experience with post-test analysis? | Fri 14 Mar | Post-Mortem Pete
My team has just wrapped up a complex web-app (Servlets/JSP/XML/HTML) for processing new insurance policies online with a specific carrier. Ive got the task of rounding up the root cause for our 400+ closed bugs. The main goal is to devise a mitigation strategy based on the source of most bugs. Mgt. is behind this exercise because a cursory glance at most bugs reveals a change in spec or client desires/goals. Basically, the client is wondering: Did we really collectively change our minds 400 times? or did these guys botch a lot of code? My first swing is to get the team to answer the question Why does this bug exist? (change in spec, immature code, new requirement) and hopefully some buckets will emerge. Also, weve already identified where the bugs occurred to show some hot spots. Any experience with this type of exercise, comments, questions or suggestions would be appreciated and promptly answered.
Fri 14 Mar | Li-fan Chen | The date the bug was reported is import.. so is the check in time of the code that caused the bug. When was the first date it was checked it, when was the day it was fixed (after the bug was identified). I know.. usually you check in at the end of the day or the end of the week so you get a lot of bugs solved at a time. So that's a revision control usage issue. But assuming you have concurrent access prevention and you check things back in pretty frequently you should have a good idea when new features requested that day by a client was the cause of a bug. When you correlate the two (bug count and bug id with the check-in date of the program code) you can quickly tell whether client request was introducing bugs on an on-going basis or 'all at once' as you put it. -- David
Fri 14 Mar | Joel Spolsky | I'm not at all surprised if most 'bugs' are really feature requests because the client changed their mind; this is natural. Software is exploration; you don't know where you're going until you get there, and you find a million reasons to adjust the path a little bit on the way. See The Iceberg Secret: The Client Doesn't Know What They Want. Stop Expecting The Client to Know What They Want. Anyway, post mortems are fine if you use them to learn how to make better estimates in the future. Next time you'll know that in a project of size X, the number of small course corrections you need to make is Y ...
Fri 14 Mar | ODN | The hot spots you have identified are great starting points for your investigation. One of the rules from 'The Art of Software Testing' states that 'The probability of the existence of more errors in a section of a program is proportional to the number of errors already found in that section.' As you suspect, there is a good probability of correlation between low-level errors and higher-level requirements 'errors'. To quote from 'The Art of Software Testing' again (which is quoting from I.M. Copi's 'Introduction to Logic'), 'A problem may be characterized as a fact or group of facts for which we have no acceptable explanation, which seem unusual, or which fail to fit in with our expectations or preconceptions. It should be obvious that -some- prior beliefs are required if anything is to appear problematic. If there are no expectations, there can be no surprises.' So bugs can be 'created' in some cases just by changing expectations, as you noted. It might be helpful to take a top-down approach in addition to the bottom-up approach of 'Why does this bug exist?' and see if you can meet in the middle. In other words, start with a list of requirements, and try to identify higher-level course corrections, and then think through the low-level impact of these. If you don't have this kind of higher-level track record, you can most likely recreate it using the 'Why does this bug exist?' approach, but if you have a higher-level audit trail, it should help you focus your efforts more. In a sense, you are trying to recreate the results of regression testing the user acceptance tests, if such a thing were possible. :-)
Fri 14 Mar | Post-Mortem Pete | Thanks for your replies, so far so good. ODN: It sounds like requirements traceability and change control tracking is your way to start at a higher level. Correct? Also my brain almost deadlocked on this one: 'In a sense, you are trying to recreate the results of regression testing the user acceptance tests, if such a thing were possible.' ..but I see your point. Joel: It sounds like your mitigation strategy is to know that revision is natural and will happen, but accurately estimate to what degree based on the size of the proj. Makes perfect sense to me. But let's say mgt. is hoping for some process tweaks on our side that help us reduce the late-in-the-game 'discoveries', are there any on the top of your brain? Should I just read a book on XProgramming and get it over with? ;) Thanks, Pete
Fri 14 Mar | Big B | No experience as far as the original question, but in response to how to avoid discoveries late in the development process... I usually write both a specificaiton, and, when I think I'm done, I write a schedule, consisting of a list of things I need to do to meet the spec. As I'm writing the schedule, I always realize that there are things in the spec that won't work. Extrapolating from that experience, anything that causes you to think differently about the problem will help. Specs, schedules, mock up screens, user stories, drawings, presentations...
Sun 16 Mar | Stephen Jones | Wouldn't a better use of the iceberg metaphor be 'The client does know what he wants, but nine-tenths of it is below the surface'?
Adobe UI - really bad, or is it just me? | Fri 14 Mar | Kyralessa
Ive been working with trial versions of Adobe FrameMaker and InDesign, trying to find something to do a medical conference brochure and other stuff with. (My university gets major Adobe discounts.) I played with FrameMaker for about twenty minutes before deciding it wouldnt work. Ive been fooling with InDesign for a few hours, and while its more powerful, it has many of the same shortcomings. Why is the user interface so bad? A lot of stuff is done through what Ill call tool windows, which can be called up through the Window menu (hardly an intuitive choice in my opinion). Some of these tool windows can be resized, and some cant. Some can be combined as tabs in the same window, though it takes several drags to hit exactly the right pixel to combine them; and sometimes they combine in the same tab row, while sometimes they stubbornly appear above or below another group in the same window. Since only some can be resized, theres no point to sticking them all in one tabbed window anyway; click on a non-resizable window and it shrinks down to an inch across, and all the tabs are crammed together where you cant read what they say. Ideally Id have all this stuff in ONE big window, autohidden against the right edge of the screen, instead of in more than twenty individual windows all floating around my screen. Dragging this crap out of the way of what Im doing is a phenomenal waste of my time. None of the windows and toolbars seem to be able to dock anywhere; they just float around here and there all the time. Has anyone else noticed all this? Do all page layout/graphic design programs have UIs this bad? (I havent seen any reviews that emphasize these problems.) I did last years brochure with Word, and painful as that was, this seems twice as irritating and counterintuitive. Other opinions?
Fri 14 Mar | anon | I used to feel the same way about Dreamweaver. As a once-in-a-while user the multitude of windows were a real trial. I imagine, though, that if you make a living using the tool so that jumping around the windows is second nature, it probably isn't so bad. I wouldn't mind having hotkeys for everything myself...
Fri 14 Mar | mark | I've never worked with those products, but I've been using Illustrator and Photoshop for years, and the UI you describe is the same in those programs as well. I like it, and find that it's easy to use after learning for a few days Since their entire line is designed that way, once you learn one, you can find your way around the others in minutes. And as far as the windows being in the way, remember that most designers use larger monitors. My design machine is a Mac with dual 21' monitors. I'm not saying there isn't a better way, but for legions of graphic professionals, this works.
Fri 14 Mar | Li-fan Chen | You are probably not wrong. But do try it for a little while, most people stop complaining after dealing with it 24/7/365 for years. One or two really angry users had tried storming the Adobe Head Quarter and were all promptly shot.
Fri 14 Mar | Wei | hmmm. i use photoshop alot and yeah it exhibits some of the behaviour you mentioned. as a graphic designer i know most if not all the shortcuts, and whatever palettes i need, so i'd say it's a pretty alrite ui. the thing about adobe (as previously mentioned) is that all of their software products exhibit similar behavior. =)
Fri 14 Mar | Nat Ersoz | I've abandonned all GUI documentation tools, including Word. Pretty much, I'm down to text files now. Kind of ridiculous, I will admit, but... 1. Using Word like tools takes too long. I try to keep the docs up to date, and WYSIWYG tools take too long to use. This actually discourages accurate documentation since the tools are so cumbersome. 2. Its impossible to grep through the document when stored in binary formats. 3. The anti-intuitive nature of Word like tools finally forced the issue. One of my biggest gripes is that I wanted uniformity across documents by using a common template. Change the tempplate formats and the docs based on the template should automatically change. Never worked. Very little of the expected results of documents nesting documents ever worked properly. In fact very little ever worked as expected so text and some HTML became my norm. Screw it. If they cannot read text, it sucks to be them.
Fri 14 Mar | HeyCoolAid! | Anon said: 'I wouldn't mind having hotkeys for everything myself... ' Alas, there ARE hot keys for everything. I find TAB to be a particularly useful one, as it will show/hide all tool bars and windows. I usually work in Adobe products with everything hidden, using the hot keys to switch between tools/settings. A simple tap on the TAB key will reveal all when I need something else.
Fri 14 Mar | rexguo | This phenomenon is mentioned in one of Joel's older articles, that the 'UI-sucks' issue is irrelevant when it is the type of application that its users are expected to use it very often. What's more important in such apps is maintaining consistencies while adding features in version upgrades. This is a mainly coders forum, and you complain about a graphical app's UI, so how about complaining about IDE's UIs too? The UI problem is really the learning curve. If someone invents a way for a new user to learn a UI without reading a manual or hitting the help key, i.e. within the app, then he/she will make lots of money.
Fri 14 Mar | Robin Debreuil | Don't tell that to macormedia, they got sued (and lost) for emulating those very things. I use those products and similar ones all the time. One thing to remember about that type of product is that there is a wide swath of very different tasks done in each product. So in say photoshop, an icon maker will have a totally different setup than a person working in print. You don't want long lists or customizable dialogs, as most users only use about 15% of the features for any given task. But - the 15% that you do use are so used that having them anywhere but front and center is a non starter. Second thing, as was pointed out, most graphics people have at least large monitors, usually dual. That really helps. Actually I think the programming IDE's and office apps could learn from graphics in certain areas - there just hasn't been as much pressure for easy access and customization in these categories, so they haven't worked as hard on it...
Fri 14 Mar | Rahoul Baruah | Don't forget that Adobe is a Mac company, and they do things differently over there. Not better, not worse, just differently. I think Joel did an article on it once.
Fri 14 Mar | Kyralessa | Actually, rexguo, the forum is for 'open discussion of topics raised on Joel on Software', so UI qualifies, whether or not it's in a coding-oriented product. But I will concede that (a) I'm not a professional graphic designer, (b) my monitor is only about 17', and (c) this is probably not the proper tool for me. It appears to be of far more use to people who are going to be using it for most of the day every day, and who are willing to spend time mastering it, than for people who want to create something just every now and then. But that said, apparently the fact that professional graphic designers have big and multiple monitors and spend time learning the key shortcuts is what lets Adobe get away with such a sloppy user interface; contrast it with something like Acrobat, which is more likely to be used less frequently and on one smaller monitor, and which has a much cleaner UI.
Fri 14 Mar | BW | Hold on, there. Adobe Acrobat has a better UI than Photoshop or Indesign? Setting aside the fact that these programs all have entirely different purposes, the main difference is that Acrobat buries most of its functions and preferences in obscure corners of the menus under non-intuitive names. The eight to twelve most-used functions (zoom, select, etc.) are in a toolbar at the top, obfuscated by tiny, baffling icons. This has the advantage of leaving the maximum possible screen area for viewing documents (which is the main idea of Acrobat), but navigating the document can be very difficult. Most of my clients have needed to be told that the little magnifying glass means zoom and the little binoculars mean search. Ye Olde Photoshoppe and Indesign do call for a completely different UI, one that may not be intuitive at first, but one that can be customized enough to make the user more efficient. They are professional tools, after all. While I agree that some aspects of managing the palettes are more obscure than they should be, the small investment of effort into learning how pays big dividends in efficiency over the years. And, of course, the knowledge transfers to other Adobe products. If I walked into a machine shop, I wouldn't have the vaguest idea how to operate all the knobs and buttons on an electronically controlled lathe. But after a bit of time spent learning the controls, the professional operator will be able to use the tool with maximum efficiency.
Fri 14 Mar | Robin Debreuil | Have you looked at the price of those products? Pretty hard to justify for the occasional user that wants to print a newsletter... Visual Studio is pretty confusing to the new user that want to put the occasional javascript in html, but I would say that is a mistake either.
Sat 15 Mar | | Personally, I find most Adobe products very hard to use and I need to use them on an on-going basis (that's what clients use). So I don't buy the 'user can learn interface and then will like it' argument. (Similar to this forum, I use the product in spite of, and not because of the limitations of the user interface). It has nothing to do with monitor size - I have two large monitors. I also don't think it has anything to do with the assumptions coming from the Mac World (although I do mainly use a PC), because I've seen Mac users struggle with the same things that drive me crazy about it. Aside from all of the little windows that you can't dock and don't dock/undock automatically - it's hard to find things in the menus, which are incredibly badly laid out, and as someone else mentioned - poorly named. As a consequence of this, to use any Adobe product requires a great deal of clicking to get anything done. There's a high learning curve to use the products, and especially to do more than the bare basics. And while to some extent the attitude 'oh well, [graphic design] is complicated' is justified, that doesn't mean that actually using the program on a day-to-day process should be so hard. On a 'we can choose how to accomplish this' basis, we eventually switched to Paint Shop Pro from Photoshop (which aside from being easier to use, is also a heck of a lot cheaper), and to Word from Illustrator. I'm sure all the Illustrator users in this forum will give me heck, but with the exception of dealing with printers (requires some file format creativity), the result has been faster turnaround and superior quality of work. And recently, we had a client whose normal shop couldn't handle a task in Illustrator (said it was 'impossible'), which we were able to accomplish with no problems. And Word is not really designed for this kind of work! What's wrong with this picture? The problem with the vast majority of Adobe product is not just that the program is complex. We also use TrueSpace (basically a 3D animation tool) which is for a highly complex task, and the interface is certainly daunting at the beginning if you know nothing about animation (only about a million coloured icons across several menu bars), but once you learn about animation (and the relating terminology), and learn how the user interface is put together, actually using the program is pretty easy. To be honest, I think the poor UIs are a mix of sloppiness on Adobe's part, which they can get away with because they have such a big market share, and legacy code from umpteen versions and platforms. They do fix things - but as an example, how long did the text selection tool in Adobe Acrobat select text along a single line, even if it was formatted in columns? Answer: several major releases, which is way too long. And did anyone have the misfortune to actually use the 'forms' feature (also in Acrobat) a version or two ago (to be fair, this is much improved, but it still sucks to use). I'm picking on Acrobat because it's the product I had to use yesterday and I'm still steaming with frustration after the experience.
Sat 15 Mar | Going back to bed. | Brain a little behind fingers today. Obviously, I meant Page Maker and not Illustrator.
Sat 15 Mar | Stephen Jones | I've read in various places that Adobe is one of the 'we know much better than the luser' companies. It can get away with an atrocious interface firstly because of the other things it does better than anybody else, and secondly because so many people have been forced to use it that it has become the norm, so even programs such as Corel's Photo Paint copy the basic design. The best user interface I've seen was MS Photodraw, but because it was different from the Photoshop way of doing things it never took off (being buggy didn't help either - it was the source of my favourite MSKB bug, 'MS Photo Draw won't start if an odd number of fonts are installed on the machine'. Now from what I've heard Photoshop is positively user-friendly compared to Quark Express.
Sat 15 Mar | runtime | As a Windows user, I can't stand the Photoshop-style apps that have tons of tiny, floating toolbars. I like my windows maximized. I don't wany my windows or toolbars moving around or inefficiently wasting pixels by letting the desktop show through.. I think Adobe apps use tiny, floating toolbars because that is the Mac style. My girlfriend is a graphic designer and (inevitably) owns a Mac. When I use her computer, I have great difficulty juggling many apps and windows because they don't show up in the Dock.
Sat 15 Mar | runtime | Also, is there a Mac hotkey equivalent of Windows' ALT+TAB (to cycle between apps) and CTRL+TAB (to cycle between MDI windows within a single app)??
Sat 15 Mar | Dennis Atkins | It's CMD-TAB on the Mac to switch apps. OS support for switching windows is in OSX but not 9, its OPT-F? or CTRL-F? -- forget which FKEY and which modifier but it's there.
Sat 15 Mar | Dan Maas | I also find Adobe's 'little tool window' interfaces annoying (mostly in Photoshop and Premiere - stay away from Premiere!). I think the reason the widgets are so small (way too small IMHO) is that Macs have historically used lower resolutions than Windows PCs on typical monitor sizes. (e.g. 800x600 instead of 1024x768, or 1024x768 instead of 1280x1024). So buttons that are 'just right' on a Mac end up looking 'too small' on a PC.
Sun 16 Mar | Robin Debreuil | Macs do not have native support for MDI last I checked, so there probably isn't a native hotkey for switching - not sure about osx, but I've heard its the same. All those tabs can be rearranged, combined, closed, toggled by key, or tabbed away - not sure what everyone is talking about...?
Sun 16 Mar | | This article is interesting in the context of this conversation (it's about Microsoft's forthcoming push into Adobe's turf, and Adobe's chances of fending them off). http://www.business2.com/articles/web/0,1653,47988,00.html
Sun focusing on software from now on? | Fri 14 Mar | Just me (Sir to you)
Is Sun realy going this route? I know competing with Intel/HP/Dell is though, but BEA/IBM/Microsoft are no small fry either. Software has never been a strong point with Sun, they are silicon at hart. From: http://www.baselinemag.com/article2/0,3959,842375,00.asp We had a line we used for 15 or 20 years now at Sun—All the wood behind one arrowhead, says John Loiacono, Suns vice president in charge of operating systems (Solaris and Linux). Thats still the case, but the arrowhead has moved. The arrowhead is Java-based applications in the Sun One environment.
Fri 14 Mar | Pat Rice | Just look what this strategy did for NeXT and Be....
Fri 14 Mar | Li-fan Chen | > Sun focusing on software from now on? > Is Sun realy going this route? All IT is down. (HW or SW) Suppose Sun becoming more a software company, what do you guess will be their tactical movements? My guess is a big believer in networking, they might look at the entire enterprise world and propose something that will really cut cost for everyone. So they probably won't jump right into fat pcs, or bleed more on thin pcs ( In the past they have projected over and over again that corporate spending on Fat PCs will be down. But the projection is always a little too far too early)--I hope they will do something completely different. Sun's competition is the whole f***ing world. It includes warner brothers, Ben and Jerry's, some remote forest company in south east asia, or your cousin's pachingo shop. We all get paid for the same reason: better solutions at lower cost. I don't see how a vague directive like 'Let's do more software' will help them much without learning more details. :-) -- David
Fri 14 Mar | XRD | In more that 5 years of existance, Sun has not succeeded in turning Java into money. I don't see how they can do that now especially if they are becoming weaker and weaker.
Fri 14 Mar | pb | Wouldn't plan on them getting out of hardware anytime soon.
Fri 14 Mar | Dennis Atkins | 'Just look what this strategy did for NeXT' Pat, I bought a brand new computer running Mach and NextStep (now called Mach and Cocoa) a few months back and I love it. I paid a hefty price for it too and it was worth every cent. Stable and fast! Best computer I've ever owned or developed for by a huge margin. No comparison. So whatever NeXT did, they seem to have done it right, even the name change. 'All IT is down. (HW or SW)' David, Today Adobe announced that they made unexpectedly large profits. I wasn't surprised as I contributed a grand of that to get my new NeXT computer stoked out wit hthe latest. Apparently I'm not the only one either. Other people are willing to pay a lat more for stability, speed and ease of use too. Of course there will always be a place for $500 cheap junk computers (PCs) by people who aren't particular if their computer is unstable and slow, but likewise there will always be a market for $4000 high end computers (NeXT) that do everything the right way.
Fri 14 Mar | Marcos | I hate to think of it, but they will probably be stretched between their no-revenue hardware and no-margin Java business models like a prisoner in a medieval rack. Disgusting, isn't it?
Fri 14 Mar | Li-fan Chen | I gotta admit, when I was in college with my dinky 486 Blue-lightening from IBM, I felt bad that the rich coders in the next dorm had a NeXT cube or two. How do you compare the GUI of twm/fvwm of Linux or the simple Program Manager of Windows for Workgroup 3.11 with the NeXT look? Back in the days, I like the little title bars that look like you can actually grab them showing up in Photoshop 5.0 in the fancy imaging labs. And BeOS look like it was some embedded OS stolen from the tank Tank Girl used.
Fri 14 Mar | Stephen Jones | ---'Of course there will always be a place for $500 cheap junk computers (PCs) by people who aren't particular if their computer is unstable and slow'---- Unless you're a developer or gamer then a $500 machine is plenty fast enough. I work with a 733Mhz home desktop, a 1.6Ghz laptop, and a 2.0Ghz work desktop, and 99.5% of the time do not notice any difference. As for stability Linux, W2000 and to a lesser extent Win XP are all rock solid. In fact if you inherit a $50 machine you can use W98SE and it will be pretty reliable. Make sure the motherboard comes from one of the big names and you get the almost the same reliability from a $500 machine than from a $5000 one.
Fri 14 Mar | Li-fan Chen | > $50 machine you can use W98SE and it will be pretty reliable. What????? Okay.. maybe let's quanlify that statement by saying 'assuming you are managing thousands of these W98SE boxes with a fully staff team
Fri 14 Mar | Robert Moir | You just watch what you say Li-Fan. I've got a Windows 98 box at work that's been doing it's job for years. Never crashed never needed any attention. Of course it's job has been 'holding a door open' for the past few years but hey.
Fri 14 Mar | Li-fan Chen | LOL
Sun 16 Mar | Stephen Jones | Sorry LiFan but W98SE was a considerable improvement on previous versions. I ran it on a laptop for three and a half years and it never crashed, which is more than I can say for XP, which seems to love random rebootings followed by send a message to MS dialog boxes. There are plenty of Pentium I's still around doing a perfectly good job of wiriting documents, searching the web and getting email. They can't be woirth much more than $50 now but if they do everything you want why upgrade?
The Real Problem | Thu 13 Mar | Xylaphone
The real problem with software is that it is always one person or a group of people trying to solve other peoples problems or trying to predict other peoples needs and create solutions. It is only when -anyone- can create their own software - to solve their own specific needs - at a given point in time - in a minimal amount of time - that the software problem will be solved. Maybe not even then... The problem is that communication is not universal. Your ideas and thoughts on a topic are not mine just as mine ideas and thoughts on the same topic are not yours. There is no piece of software that can transition the two. Or is there?
Thu 13 Mar | anon | '...that the software problem will be solved....' What problem?
Thu 13 Mar | Matthew Lock | I would say the 2 real problems are the difficulty of estimating how long a project will take, and the tendency of clients to keep changing the goals of the project. I also have a pet theory that the price of packaged software has lead people to erroneously believe that custom software development costs too much.
Fri 14 Mar | anon | The two problems are related. Probably the biggest source of uncertainty that is under the control of the customer is project scope. If you can manage the scope, most of the time the other problem goes away, or at least becomes manageable. Tell 'em if they want precise estimates, then give you precise requirements.
Fri 14 Mar | Mitch & Murray (from downtown) | Maybe the best first post I've seen in years. Yeah, you've got it. Ever wonder why so many vertical market apps (like vet offices, dry cleaning, etc) are such pieces of shit? Because the guys who wrote the code were vets or dry cleaners first, and software developers second. Best case, probably had their brother-in-law 'just out of the joint' do it. Why? Because THEY UNDERSTOOD THEIR BUSINESS, and wished to merely use software to do something useful like make more money with less manual work. What a concept. How many dry cleaners really understand software development? How many software developers really understand the business model of dry cleaning? The $64K question is how many dry cleaners developing their own vertical market app are willing to pay for professionals to develop it for them? Answer = almost zero. 'Hey, our app runs fine as long as you rebuild when it says 'record is not found!''. Now you get it ...
Fri 14 Mar | Prakash S | According to the Theory of Constraints (TOC) - there generally exists only a couple of Core problems - looks like that is what you (Xylaphone) are addressing.
Fri 14 Mar | | Matthew, you are absolutely right. But then those people do not know the first things about basic economics.
Fri 14 Mar | Ged Byrne | Remember that specialisation is not unqiue to programming. Whenever we need something donet that requires a high level of skill we need to call in the professionals: Law, plumbing, building, etc, etc. As professionals what we need to do is learn how to listen to those we serve.
Fri 14 Mar | Tech Chimp 03 | I think most software is fundamentally designed to improve an established process of some kind. If the process is flawed the software will be flawed and a good process will usually result in software that will meet at least 90% if not all of a clients needs. Most complaints about bug free but unsatisfactory software are the ' it doesn't do what I want it to do ' kind. Hence if a process is very well defined early on within a project and any flaws, bottlenecks, mismatches etc can be exposed and corrected, development can occur in a more timely and efficiently. However as a rule humans (including me would you believe it) tend to lapse and are not always able to thoroughly analyse or define their personal or company processes. We always seem to miss something be it detailed, trivial, obvious whatever. Maybe The Real Problem's only true answer is to ask God to make us more meticulous and detailed. Yes! God should make us all Vulcans but without the cold, logical personality and somewhat obvious inability to have loving relationships and good sex.
Fri 14 Mar | tapiwa | Xylaphone, I am going to play devil's advocate for a little bit. One package that immediately springs to mind, is MS Access. If you access me, the lack of a db that easy to use is what is holding back migration to suites like OpenOffice. People around the world use it to help them work better. Each access database with forms is a basic application, and for the most part, does the job well. The problem is that a lot of software developers view these custom apps as vile, and not professional, and advocate for the removal of access from users desktops. http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=28465&ixReplies=26 The point they miss is that apps like this actually do the job. A user might have 20 databases that they use alone, or share with their team. To a developer, that is wrong. Why not hold the info centrally? Why not nomalize the databases better? Why not standardise the fonts? Like I said in an earlier thread, I was tempted at one point at work do create a 'better' solution to the tens of databases we use in our team of about 20. Having watched how the users used them though, I decided against it. If I built it, it might be better from an engineering perspective, but from a users' it would be hell. They are always changing things in their databases. Adding a field here and there. Creating a new report or query etc etc. All I can do is help when they are trying to do something. To expect them to learn SQL, or to produce data models normalised to the 5th form is silly. In short, maybe developers should stop looking at software as a way to solve interesting technical problems, but as a tool to allow users to create the software that they use in their day to day jobs, with everchanging requirements.
Fri 14 Mar | Carl | tapiwa, I think hits on a key point, one that I've been formulating in my head for some time now... I think many technical folks get so enamored with the technology or finding the perfect solution to solving 'technical' problems that they lose sight of the the real 'business' problems that they are trying to solve. A prime example of this is the OO programmer who spends so much time generating the 'perfect' object model that in his/her mind is going to solve the worlds problems. In the mean time the software gets scrapped because it doesn't meet the business' needs and never gets used because other programmers find it too massive and unwieldy.
Fri 14 Mar | igor | 'The real problem with cars is that it is always one person or a group of people trying to solve other peoples problems or trying to predict other peoples needs and create solutions. It is only when -anyone- can create their own car - to solve their own specific needs - at a given point in time - in a minimal amount of time - that the car problem will be solved. Maybe not even then...' You can substitute almost anything here. We've had specialization since the middle ages - or even earlier. Software is no different.
Fri 14 Mar | tapiwa | Maybe one day programming talents of sorts, will be equivalent to writing today. The computer = paper and paper. Software= Writing. Give someone a blank piece of paper and a pen, and they can generally put their ideas down, and communicate. On the other hand, someone with a thorough understanding of the business process might not have the ability to translate those thoughts, not into code, but into a business supporting tool. Before you dismiss the analogy, remember that until a few hundred years ago, reading and writing were the preserve of priests and kings. Folk did not read the newspaper... they listened to the Town Crier. Today, you still have professional writers, copy writers etc, but Joe Average does not need to employ someone to write a letter for him. A bit like the Cathedral and the Bazaar. I am don't think that it will happen any time soon, but one day I think the 'writing' tools will be easy enough to be available to all, and the people will have learnt to 'write' from an early age, as part of standard learning.
Fri 14 Mar | Brent P. Newhall | I agree with the problem, but not with the proposed solution. I would say, it is only when -anyone- can truly drive the creation of their own software - to solve their own specific needs - at a given point in time - in a minimal amount of time - that the software problem will be solved. Maybe not even then. I don't wish to harp on Extreme Programming, but that's one of the problems that XP purports to solve. The customer is on-site, s/he specifies all the functionality directly to the developers, and iterations are short enough that the customer can quickly see changes and order new functionality.
Fri 14 Mar | Reginald Braithwaite-Lee | I'm not convinced that most vertical apps are 'pieces of feces' :-) Most vertical apps are ugly but highly functional. They service their users' needs. That, why people use them. Software developers are no exception to this rule: look at Emacs, Linux, and Perl for examples of ugly but functional 'vertical market' software embraced by programmers. In my experience, most software projects waste way too much time and energy making the software 'user friendly' and 'scalable' and 'object oriented' and too little time making it deliver functionality in a robust and error free way. (not trying to troll, not intended to attack anyone!) -- http://www.braithwaite-lee.com
Fri 14 Mar | Robin Debreuil | One opposite point - most software indeed is a kind of 'automator' of current established tasks. But there is also the software that creates a new model, and opens a door for users too. Visicalc would be an obvious example. Partly software isn't always personalized enough, but more often it isn't inspiring enough - it doesn't make the user say ah-ha! If one program simplifies a step, and another makes it irrelevant, I'll vote on program 2. Great software, in a weird way, is all about destroying value.
Fri 14 Mar | Must be a manager | There's a circularity in the argument that started this thread. I think the fact is that perceiving the relationships and requirements of a software need is quite difficult, and few people can do it well. A good software engineer is precisely that person who can do it well. Writing is the same, by the way. Many people can write things, but some are much capture at accurately capturing meaning and intent.
Fri 14 Mar | Must be a manager | Whoops. Writing is the same, by the way. Many people can write things, but some are much _better_ at accurately capturing meaning and intent.
Sat 15 Mar | Stephen Jones | I've read in various places that Adobe is one of the 'we know much better than the luser' companies. It can get away with an atrocious interface firstly because of the other things it does better than anybody else, and secondly because so many people have been forced to use it that it has become the norm, so even programs such as Corel's Photo Paint copy the basic design. The best user interface I've seen was MS Photodraw, but because it was different from the Photoshop way of doing things it never took off (being buggy didn't help either - it was the source of my favourite MSKB bug, 'MS Photo Draw won't start if an odd number of fonts are installed on the machine'. Now from what I've heard Photoshop is positively user-friendly compared to Quark Express.
Sat 15 Mar | A_Troll_001 | What does that have to do with 'The Real Problem'?
Sat 15 Mar | Stephen Jones | Dear A troll, Nothing. It was meant to be a reply to another message. I don't know if it was my fault, or if it was a bug in the software that sent me to the wrong link for the reply. I have seen this problem arise half a dozen times or so in the last week. Hopefully all three messages will be deleted. Steve
Sat 15 Mar | Hoang Do | I think it boils down to a mentality problem. We do what we do to make money to survive in the world. In order to make money, the business man needs a certain problem solved. He would think: 'how can I solve it while keeping costs down'. He hires an engineer and that is already a level of indirection. If he has to go through a team, that's two or three levels of indirection. The engineer/programmer is more concerned about his product's structure. He is far enough removed from the customer that chances of what he produces will satisfy the customer is a little low. If he were his own customer, it will be another matter. Just notice how much you change your initial requirements if you were to write a program for yourself. More than 90% of the time, it has morphed away from the initial plans.
Sat 15 Mar | LazyCat | 'Like I said in an earlier thread, I was tempted at one point at work do create a 'better' solution to the tens of databases we use in our team of about 20. Having watched how the users used them though, I decided against it. If I built it, it might be better from an engineering perspective, but from a users' it would be hell. They are always changing things in their databases. Adding a field here and there. Creating a new report or query etc etc. All I can do is help when they are trying to do something.' This is a very good point. Small db's are like pieces of paper on your desk, while central db's are like libraries. Both have their place. It might become really silly when librarians (db guys) start to dictate how the papers should reside on the local desks, and how they should be accessed. I have seen some db guys so fixated on the idea of storing everything in a central db that the info becomes a lot less usable to those currently actively using it. If a central db does not fit user needs, it should not become an end by itself. This was a good essay on paper use which has good parallels with local vs. central storage and usage arguments. Here is the link: http://www.gladwell.com/2002/2002_03_25_a_paper.htm
Sun 16 Mar | X. J. Scott | I think its already true that people write software to fulfill their own needs -- when they are motivated to do so. Example: VST software synthesizers. Steinberg created a decent C++ plugin API for softsynthesizers. Now tens of thousands of people, most of whom have no previous experience programming, are writing DSP code in C++, learning about convolution, comparing the performance of various FFT algorithms, learning about imaginary numbers, complex math, pole-zero diagrams, Chebychev polynomials, obscure FP errors in various processors and how to get around them, synchronizing multiple processors at the interrupt level with their own handmade PPC assembly, etc etc. All pretty advanced stuff. Most of them are musicians with little or no prior programming experience. They do it because it enables them to make cool things. The complexity of the math, the difficulties of the problems, the subtleties of awesome UI design, these are all things that an average guy with a high school education and a few years experience playing in a band master if he is motivated.
I have a confession to make. | Thu 13 Mar | Mark Hoffman
After all the sermons Ive given to people about good software engineering practices, about raising the standard in our industry, about ensuring your design is solid and more importantly about using a testing framework to routintely test your software....I just blew it big time. I made a number of changes to some code, didnt really think them through all the way and worse yet, didnt test them adequately....and then went to a meeting to demo my system and watched it fail in a most spectacular way. I wonder if this ever happens to Steve McConnell?
Thu 13 Mar | Brent P. Newhall | Ouch. Sorry to hear this. It happens to the best, though. I hope the meeting attendees were able to pretty much laugh it off? (This illustrates the benefit of automating things so that, for example, you *can't* compile without having already built tests.)
Thu 13 Mar | Prakash S | It's always easier said than done,...
Thu 13 Mar | Robert Moir | If it helps, it probably happened to Steve McConnell so many times he resolved to change his ways for good and write a damn book about it or something ;-)
Thu 13 Mar | Alberto | Never happened to me. I always do the right thing. yeah right.... remember - 'to err is human'.
Thu 13 Mar | Anonymous Coward | To err is human, but to really screw things up you need a computer.
Fri 14 Mar | | Look at it this way - you will never make that mistake again! (You won't, right?)
Fri 14 Mar | ScottB | I find demos are very nerve-wracking. I've tested, double-checked the code, tested, got colleagues to use the system, tested, etc... In the demo - 'this is the system, click on the button xxx to use feature xxx and as you see it does what you asked of it. ' etc At the end, the sense of relief...
Fri 14 Mar | Mike | The computer allows you to make mistakes faster than any other invention, with the possible exception of handguns and tequila
Fri 14 Mar | Just me (Sir to you) | Thing with demos is that they almost always happen in unusual circumstances (Running all the servers of a laptop that goes into sleepmode right in the middle of things, disconnected from the DNS servers with no LMHosts file entries, switching to a second monitor so you can keep Powerpoint going on the first screen, ...), that are often ouside of the platforms target constraints. Always prepare for a demo failing in the most horrible way. (easier said than done, I know).
Fri 14 Mar | Peter Ibbotson | I have some superb demos I'd like to do, but since they'd all involve 'real' comms using a phone line I just don't dare!
Fri 14 Mar | Prakash S | reminds me of the Windows 98 demo by Bill Gates - that was hilarious :-)
Fri 14 Mar | GiorgioG | This is why I think most demos should be 'Smoke & Mirrors' until the app is ready for production/release because I don't like explaining (excuse-making) that 'Well we're still working on it.'
Fri 14 Mar | Brent P. Newhall | Speaking of demos: I once read an article of advice by former engineers at Be, Inc. about giving demos (Be demos regularly amazed audiences). One suggestion was to always use the exact same computer to demo as you had to practice on. In other words, change NOTHING between practice sessions and the demo.
Fri 14 Mar | GiorgioG | Brent, That only works if you're doing the demo at your site unless you've got alot of $ to spend on beefy laptops. Terminal Server/Remote Access, etc is no good because you can't depend on the client giving you internet access at their site, not to mention firewalls, etc. Boss had to do a demo at a big client's site and the only access they give you is through port 80. Problem is we were going to use VPN to get into another client's office (with their permission) to demo something we had done for them. In the end, I put RemotelyAnywhere (remote access over http s/w) on my home machine (cable modem), set it to run on port 80, setup the VPN client to our other customer and ran it that way. Needless to say it was dogsh*t slow and we wound up bringing these folks into our office 2 months later to do a real demo.
Fri 14 Mar | Tj | I believe bringing your own machines is a must. Unless you're trying to score a hail mary by installing it in front of them. PCs are too variable in too many ways. Other reasons are that you care a lot about security and you want to be considerate to your clients' machines
Fri 14 Mar | Mark Hoffman | Oh I wished I could blame the problems on differences in the computers, but this is an web-based intranet application that runs from a single server.
Fri 14 Mar | HeyMacarana | No one's perfect. Not even Steve McConnell.
Sat 15 Mar | smkr4 | Well, were you forced by management to make those changes? :) What kind of time pressure were you under? I regularly do demos at work. No matter how large or small, we always seem to wind up making ridiculous and invasive changes at the last minute, after we pledge to freeze the code at a given point. Generally, we manage to avoid blow-ups, but at the very least, these last-minute changes lead to making our software quite unmanageable after a number of demos. Thus, we then spend a lot of time refactoring between demos. Quite the vicious cycle, that--we make huge messes for demos, and then clean them up in the interim. :) I'm not trying to make this a soapbox for ranting about my job, but just giving an example of a general point. Demos are pretty much the antithesis of good software management processes, because they often carry with them the time pressure and the anxiety that avert the creation of great software. That's not to say one should never give demos, but they should be few and far between, and with much aforethought. (the worst, by the way, is when you're in the 'Surprise! We have a demo in 5 minutes!' situation--never has my life flashed before my eyes quite so quickly...)
Sat 15 Mar | Norrick | 'The computer allows you to make mistakes faster than any other invention, with the possible exception of handguns and tequila ' Comedy GOLD! In all seriousness - I doubt there is a coder amongst us who has not, for one reason or another, at one time or another, blown it big-time on a simple piece of functionality and ended up kicking himself. It goes with the territory. The trick is not to avoid mistakes, but to make as few as possible and avoid making the same mistakes more than once. If you can do that you're in pretty good shape.
Sun 16 Mar | Bella | You should be fired. You NEVER make a change to production level code without proper change control approval in place.
job prospects | Thu 13 Mar | anonymous
Given 3 interviews in 3 weeks for developer positions, what do you think are the average job prospects? 1 in 3? 1 in 5? what are peoples previous experiences?
Thu 13 Mar | Chris Tavares | My previous experience has been three interviews in 6 MONTHS, not 3 weeks. If you're getting that many interviews, you must have something people want. Sounds like your prospects are fairly good, assuming you don't flub the interview.
Thu 13 Mar | anonymous | Actually I had nothing in the previous 2 and half months, I guess it's a bit of luck
Thu 13 Mar | Darin | It depends whether your talking at the interview meets, or better yet, exceeds, the claims you made to get the interview in the first place.
Thu 13 Mar | optimistic coder | You'll get the job if your skills match what they're after. Seriously, there are so many different tech skills these days that all this talk of over supply is just there to keep us in crappy jobs that we hate.
Fri 14 Mar | Li-fan Chen | In times of bad economy do you guys suppose the agencies have all the advantages? They seems to be the only one promising to be able to sift through thousands upon thousands of resumes no one can read through. Sometimes I feel so bad for these poor companies in desperate need to sift through the hay that I wish two paragraphs, 8 frames of powerpoint, or a 1 minute video is all job seekers ever submit. -- David
Fri 14 Mar | Mr Jack | If you're good, I'd say you'd get three job offers.
Fri 14 Mar | RocketJeff | 'If you're good, I'd say you'd get three job offers. ' What's your definition of 'good.' In this market (and, really, any time other then the bubble of the late 90's), it means fitting the employeer's requirements. He could be an excellent C++ programmer (for example) with great communication skills but not be 'good' for a Java (or Cobol, VB, whatever) position. He could know manufacturing systems down pat but not be 'good' for a position with a financial company. It's more about fit then it is about good.
Fri 14 Mar | anonymous | most of my previous experience is in C++ and Java, the positions I have interviewed for have been varied, from PHP in one case to C to Java.It's hard to say.
Fri 14 Mar | one programmer's opinion | RocketJeff wrote, ---------------------------------------------------------------------- What's your definition of 'good.' In this market (and, really, any time other then the bubble of the late 90's), it means fitting the employeer's requirements. He could be an excellent C++ programmer (for example) with great communication skills but not be 'good' for a Java (or Cobol, VB, whatever) position. He could know manufacturing systems down pat but not be 'good' for a position with a financial company. It's more about fit then it is about good. ---------------------------------------------------------------------- This type of reasoning is what I expect from a clueless employer (98% of them seem to fall into this category). There shouldn't be such a thing as a COBOL, VB, C++, or Java position! If employers in non I.T. related industries (i.e. Insurance, manufacturing, etc.) need to discriminate based on requirements then it should be based on a potential job candidate's knowledge of the software development lifecycle. What happens to a new hire when a software project that uses COBOL, VB, C++, etc. gets canceled after 3 months? Also, industry knowledge is highly overrated in my opinion. The reason why some employers look for it when hiring typically has nothing to do with a person being a good software developer. With all of the 'catch-22's' that exist in this industry, it simply amazes me that anyone is able find employment or stay employed. You should hire developers based on talent and provide training to those that happen to lack a specific technical skill.
Fri 14 Mar | RocketJeff | 'You should hire developers based on talent and provide training to those that happen to lack a specific technical skill. ' I agree, completely (since I'm an out of work IT guy). However, in the current market, employeers are able to find very talented developers who already have the specific technical skills they want. It isn't an either/or situation.
Fri 14 Mar | Seth Gordon | Since the new year[*], I've had five real interviews[**] and four rejections. (Still waiting to hear back from #5.) One of the companies that rejected me interviewed fifteen people for a single position; another interviewed about 50 people for six to eight position, and checked references for 23 (including myself); a third interviewed three people for two positions (ouch!), and I don't know what the statistics are for the fourth. So I figure that with every interview, I have about a 5% chance of getting an offer. Obviously, I'm trying to figure out how to increase my odds, but I'm trying not to invest too much hope in any one company that I interview at, and trusting that if I keep working at it for long enough, *one* place I interview at is going to make me an acceptable offer. [*]I was laid off in November and got no interviews in November and December, but that's not surprising. [**]I define a 'real interview' as one that's face-to-face with someone at the company that's hiring me, as opposed to a phone screening or an interview with a recruiting firm.
Fri 14 Mar | T. Norman | 'However, in the current market, employeers are able to find very talented developers who already have the specific technical skills they want. It isn't an either/or situation.' They can find developers who match a long shopping list of skills, but they aren't finding many *talented* developers like that. Most of the people who match their shopping list lied on their resume or exaggerated the truth, and most of the others just happened to sit on projects that involved the specific languages and platforms, but they aren't really *good*.
Sat 15 Mar | anonymous | Do all empoyers actually get back to you? I am yet to here from some of them yet...
Sat 15 Mar | Bella | > Given 3 interviews in 3 weeks for developer positions, what do you think are the average job prospects? 1 in 3? Let's say there are 5 people interviewed per job. If all people have the same odds of getting hired, you have a 1/5 chance of getting each job. 1/5 + 1/5 + 1/5 = 3/5 chance of getting a job.
Sat 15 Mar | Bella | > What happens to a new hire when a software project that uses COBOL, VB, C++, etc. gets canceled after 3 months? One option is to fire him, and hire someone else who fits your new needs. Of course, the company must take all factors into effect. Cost of rehiring, cost of retraining a new employee, impact of reputation of firm, impact on current employees psyche, etc. vs cost of retraining existing resource, etc
Sat 15 Mar | Seth Gordon | Make that 'five real interviews and *five* rejections'. It's just like college admissions ... when you see the thin envelope in your mailbox, you know it's not good news. Bella -- if you go on three interviews and you have a 20% chance of an offer for each one, the total chance of success is not 80%, but slightly under 50%. A 20% chance of an offer is equivalent ot an 80% chance of *not* getting an offer, and (assuming that the three interviews are statistically independent) the chance of not getting an offer for any of the three interviews is therefore 80%^3.
Sun 16 Mar | Bella | Seth, It's no wonder you're unemployed. You're an idiot.
Sun 16 Mar | Harlequin | Bella, Seth is correct. You have a 48.8% chance of getting hired, and a 51.2% on not getting hired. Basic probability theory.
Sun 16 Mar | Bella | Here is some more simple probabilty theory. P(getting EXACTLY one offer) = 3C1 x (1/5)^1 x (4/5)^2 = 6 x 1/5 x 16/25 = .768 = 76.8% P(getting EXACTLY 2 offers) = 3C2 x (1/5)^2 x (4/5)^1 = 3 x 1/25 x 4/5 = .096 = 9.6% P(getting all 3 jobs offers) = 1/5 * 1/5 * 1/5 = 1/125 = .8% or P(getting EXACTLY 3 offers) = 3C3 x (1/5)^3 x (4/5)^0 = 1 x 1/125 x 1 = .768 = .008 = .8% P(getting AT LEAST one job offer) = P(exactly one offer) + P(exactly 2 offers) + P(exactly 3 offers) = 76.8% + 9.6% + .8% = 87.2%
Sun 16 Mar | Stephen Jones | Dear Bella, Your math is hopeless, although I presume your last post is just a pisstake. He is asking about the probability of being offered a job as opposed to not being offered a job. So the easiest thing to do is to calculate the odds of his not being offered a job. The first time it is 80%. The second time it is 4/5 of 80%, which is 64%. The third time it is 4/5 of 64% which is 51.2% , exactlly as Seth said.
Sun 16 Mar | Vegas? | P(getting AT LEAST one job offer) = P(exactly one offer) + P(exactly 2 offers) + P(exactly 3 offers) = 76.8% + 9.6% + .8% = 87.2% This one made me laugh.
Is Inheritance a Pillar of OO? | Wed 12 Mar | Ged Byrne
Ive had an interesting discussion (argument) at work over whether or not inheritance is possible in VB. He sent me this link and showed me something similar: http://www.larrymusa.com/vboop.asp The approach is using the ability of VB to implement an Interface. I argued that this is composition, not inheritance. Composition is considered preferable to Inheritance. Ive read this advice in both GOF and Effective Java, so calling it Inheritance rather than composition is doing VB a disservice. http://c2.com/cgi/wiki?CompositionInsteadOfInheritance http://saturn.cs.unp.ac.za/~peterw/objects1/inheritance/tsld007.htm Of course, its important to call it Inheritance because Inheritance is one of the 3 pillars of OO, along with Encapsulation and Polymorphism. Inheritance is the oft-quoted reason for dismissing VB6 as a true OO language. Thing is that Inheritance is one of the most abused concepts of OO. http://medialab.di.unipi.it/web/IUM/Programmazione/OO/what/abuse.html As I say, it is now generally accepted that Composition is Preferable to Inheritance, and yet Inheritance is still one of the first things taught when introducing OO to students. In my experience the proper use of interfaces is given very little time. Instead, they are made to look like a poor substitute for multiple inheritance. When Inheritance was introduced as a pillar of OO was that a mistake for which we are now paying for? Should those three pillars of OO be Abstraction, Polymorphism and Encapsulation with Inheritance being delegated to being just one way of achieving abstraction? When the designers of VB decided to allow Composition but not Inheritance were they actually doing a smart thing?
Wed 12 Mar | John Topley | Inheritance still has an important place in the OOP practitioner's toolkit, as long as it's ensured that subclasses are always going to be logical subtypes i.e. they follow the 'is-a' rule.
Wed 12 Mar | Robin Debreuil | I think those books say 'favor' composition over inheritance which is more for when it isn't clear which is better... I would guess the biggest problem is when people finally get used to it, they 'inherit' the color of their socks and use that to hang their curtains (in my case anyway : ). Inheritance certainly has its central place imo, just you have to be aware what all you are committing to when you allow it. As to whether a language is oo without it (or without encapsulation), or 'what is a pillar', its just semantics. Certainly a language is without one of the big benefits of oo if its missing any of these types of things - that doesn't mean it isn't well suited to its core task either.
Wed 12 Mar | Matt H. | VB 6.0 is object-based. Object-Based pretty much means 'everything but inheritance' (maybe not operator overloading either. :-) VB.Net is object-oriented. :-) Yes, inheritance is a pillar of OO. Books that claim to teach OO in VB (and there are some) are probablly figuring the 80/20 rule - but, sadly, they may leave people with a false impression of what OO truely is. I'm currently taking CS 611 (software engineering) - we just got to OO Design. The professor basically said that OO means UML, rational rose, and use cases. Ugh. (It's a theory course, not a coding course.) I feel bad for the students that don't have a coding background that now think that's what OO is. :-) regards,
Wed 12 Mar | Frederik Slijkerman | In my (limited) experience, nobody at a university has any clue as to what OOP really is about. In one 'advanced' Java class, the professor once said that he had never been able to find a purpose for inheritance and that it would be best not to use it...
Wed 12 Mar | Will | then Fred, you were very unlucky at university. Inheritance is very useful for specialisation etc. Visual components come to mind as a good example of where inheritance beats interfaces hands-down.
Wed 12 Mar | John Topley | • Is VB 6.0 object based? Yes. • Does VB 6.0 allow inheritance of interfaces? Yes. • Does VB 6.0 allow inheritance of implementation? No. More interesting, is how many VB 6.0 developers actually use these features, because in my professional experience, it's not many.
Wed 12 Mar | Rahoul Baruah | Whether it is or it isn't is not the important thing to me. The real problem is the number of ex-procedural programmers I meet (and whose code I have to debug) who think they know OO because they've figured out inheritance. I can't believe it when I see some of the convoluted, monstrously huge classes, with hundreds of methods, where your never sure which of the tens of ancestors it was introduced in. In it's place, inheritance is fantastic. But I wish the OO 'teachers' would stop emphasising it.
Wed 12 Mar | Just me (Sir to you) | If you can stomach it read something like http://www.cas.mcmaster.ca/~emil/publications/fragile/ I think the main problem with implementatiion inheritance is that it is very seductive to use since it gives you so much result for such a small effort to start with, while at the same time it binds you into a very broad and very ill defined longterm contract. It is like giving live handgranades to to a bunch of preschoolers where the safetypins are popsicles.
Wed 12 Mar | Karel | In the big picture it is all about commonality & variability. Deal with commonality via normalization - inheritance is one mechanism of normalization. Deal with variability via indirection - polymorphism/dynamic despatch is one mechanism of indirection. Indirection and normalization look different at different scales
Wed 12 Mar | Just me (Sir to you) | Karel, Your writing is terse but I will try it anyway. In real world systems many things initialy fixed become 'variable' over time. Somtimes this includes things that you have normalized. Service chains that make liberal use of interfaces, delegation and aggregation, while initialy more work, seem to be a more flexible way of dealing with the changes in 'variability' over time than normalization under the form of inheritance as implemented in many contemporary programming environments.
Wed 12 Mar | Robin Debreuil | I think big pictures are best described with small words ; )
Wed 12 Mar | Ged Byrne | I'm certainly not questioning the _usefulness_ of Inheritance, but rather the _importance_. The way OO is presented now inheritance is one of the first concepts introduced. As Rahoul and Sir say, this is not the right place for it. It really belongs in the advanced classes. What should be introduced from the start is the idea of Abstraction, and how it can be achieved.
Wed 12 Mar | Ged Byrne | Thinking on it, the problem is not just with the teaching, but also the language desing. In Effective Java Blochs 15th item is 'Design and document for inheritance or else prohibit it.' http://java.sun.com/docs/books/effective/toc.html At the moment you Java and other OO languages allow and encourage inheritance by default. Surely the language should disallow inheritance by default. Instead of having to explicitly declare something final, shouldn't everything be final unless the programmer explicitly decalares it inheritable?
Wed 12 Mar | John Topley | Fascinating idea, Ged.
Wed 12 Mar | Robin Debreuil | That's how C# works - all methods are non-virtual by default. So if you want to inherit, you first have to mark the method virtual, and then the subclass has to specifically say it is going to 'override' that method (as opposed to using 'new'). I really like that about it. Another question could be, should classes be sealed by default... I don't think so, but it is the next step I guess.
Wed 12 Mar | Ged Byrne | Robin, what exactly do you mean by 'Sealed'?
Wed 12 Mar | Thomas Eyde | Refactoring in C# is a pain. Adding and removing virtual modifiers takes time, and you have to remember it. And, if I am not mistaken, you only have to declare a method as virtual in the base class. All descendants thereafter is free to override. When we are deciding today what should be allowed for the future (using final, sealed, virtual, whatever) then we are guessing. And every restriction is reduced flexibility and freedom. I argue that we can't possibly know what the proper use of our object today will be 6 months from now. So we can't design for it, either. We should design for today's needs, not tomorrow. If we discover that a class must be sealed, or a method can't be overridden, then fine. If not, we should let our object be open for future extentions.
Wed 12 Mar | backintheday | One of the reasons for introducing inheritance so soon must be to explain where the .toString came from without us writing it. Books and courses do tend to approach the language from first principles. Looking at exisiting code and working out how it works seems to be a far more useful way of learning (for me, anyway).
Wed 12 Mar | David Clayworth | I think inheritance is emphasised in the early stages of learning OO because it has such potential power. If someone comes to OO wondering what it's about and whether they should be interested in it, they will look at the pillars. Encapsulation looks like it might reduce mistakes, but you have to write extra code, and every developer secretly believes they won't make those mistakes anyway. Polymorphism looks nice, makes some things conceptually easier, but won't reduce the amount of code you have to write. Ah, but inheritance! Who can resist the thought of being able to create a whole new piece of functionality by just rewriting the few bits that are different? Everyone can see the potential. Everyone can think of a case where that would have been useful. Also inheritance is unquestionably Object Oriented. It's distinctive. If you are using inheritance, eveybody knows you are writing OO code. I think that's why teachers teach it early - it feels like you are really learning something new.
Wed 12 Mar | John Topley | Sealed in C# is the same as final in Java, I believe. C# is the same as Delphi in the respect that methods have to be specifically marked as overridable. Anders Hejlsberg is the common factor in both languages. I read an interview with him in which he explained why this is the case (it's for performance reasons) but unfortunately I can't find a reference to it now.
Wed 12 Mar | Edoc | This reminds me of the 'OOP Oversold' article at: http://www.geocities.com/tablizer/oopbad.htm Which might hold a shred of a viewpoint if you can get past the author's unpleasant ranting. I've found inheritance useful for limited domains, such as user interfaces, but not very helpful for many common tasks. In most cases, simple prototyping ('cloning') is good enough.
Wed 12 Mar | Go Linux Go! | To answer the question about sealed classes in C#: By marking a class as sealed, you tell the compiler that no other classes can be derived from it. I do agree that inheritance is a pillar of OO, but that is often grossly abused. Interfaces are a somewhat abstract concept, but anyone can understand inheritance. It just makes sense in our minds. Interfaces take a second longer to click. Unfortunately, many people aren't well versed in good OOP practices. Just recently, I was reading a book that discussed building a multi-threaded server built on UDP. In it, the author built a Mutex class, then derived his Thread class from Mutex and then finally built an Application class derived from his Thread class. A simple 'is a type of' test would have shown that his class structure was broken.
Wed 12 Mar | Tal Rotbart | The Mutex->Thread->App person mentioned above was mis-using inheritance in a classic way -- to 'inherit' functionality (Instead of Mutex used-by a Thread used-by an Application). I think that if you teach newbies to use interfaces (and interface inheritance) to define the 'is-a' relationships, you make them understand inheritance better, because implementation lazyness will not be the reason they use it...
Wed 12 Mar | Tal Rotbart | John Topley mentioned above that Hejlsberg (the sell out that he is, sorry...) chose the explicit override approach for performance reasons. To clarify that -- Hejlsberg wanted to avoid the v-table lookup for each method call (plus enabling inline optimization in some cases) which Java curtails for having methods all be overrideable. An example scenario where this is disasterous -- You need to inherit from a component and override a certain method to fix a bug that the no-source-code 3rd-party component includes (and which they intend to fix somewhere in Q4). Well, you just can't, because they haven't explicitly allowed this method to be overrideable. So, instead, you need to delegate and redirect the entire API of that component... And of course that 3rd party have not provided an interface for that component... *Doh*
Wed 12 Mar | John Topley | 'the sell out that he is, sorry...' Well he had the choice of remaining at Borland whilst Delphi was evolving into a Web development tool and Borland was wasting millions on silly name changes, or moving to Microsoft and getting the chance to work on the development of a new development platform and language. And get paid a lot of money for doing it. Not a difficult choice IMHO!
Wed 12 Mar | Tj | (IIRC, java programmers tend to escape the performance problems by using obfuscators, which can declare non-overridden methods 'final.' This isn't normally decidable, but the programmer can tell the obfuscator not to worry about weird cases.)
Wed 12 Mar | Just me (Sir to you) | Tal, If you are talking .NET, with the full metadata present in the assembly generating the code for a quick full front aggregate should be a piece of cake.
Wed 12 Mar | Robin Debreuil | 'If we discover that a class must be sealed, or a method can't be overridden, then fine. If not, we should let our object be open for future extentions. ' The thing is, it is much easier to unseal a sealed object in version 2, than put the genie back in the bottle. Imagine doing a library, releasing version 1, and then maybe for security reasons realizing that a class/method that is now being used by an untold number of third party projects has to be taken away. This is the nightmare scenario of leaving all your loose strands open. If you do leave something open, you better be sure you can work around any problems that may crop up with it - that alone can add hundreds of hours to a project if you tend leave things open indiscriminantly. It's not that different than making all your methods and properties public, in the sense that you are commiting to defend against any abuse that can come from below (which can be much nastier with access to all that is protected) as opposed to just from the outside. Also, helper methods that could have been private may now need to be protected, so you tend to expose a lot more of your interface than you would have with a sealed class. Which means more documentation, more thinking, more money etc. etc... I do think inheritance is great, but only in places you are willing to support it!
Wed 12 Mar | David Roper | Not wanting to stray too far from the original line of argument, may I suggest that the principal problem underlying the 'inheritance' issue is typically a lack of thought about, or even understanding of, the real relationships that exist between objects (i.e. instances of a particular class). The standard description that inheritance implements an 'is-a' relationship falls over when you ask the simple question, what do you mean by 'is-a'? My personal preference is that it means 'is a form of' in the sense of a Linean taxonomy with inheritance thus being used to implement aggregation or specialisation of characteristics. The trouble lies when inheritance is used to implement other relationships or, particularly, to modify behaviour. The classic case of this is creating sub-classes based upon the role that an objects can play, for example Employee or Customer or Patient or Doctor or.......
Wed 12 Mar | DavidG | I think the core feature of OO being discussed here is polymorphism. Polymorphism can be implemented using inheritance or composition or a combination of both. Inheritance can be used poorly as with any language feature. Just because it is often abused does not make it a bad idea that should be prohibited. By that argument, we'll have to eliminate all language features, since they all can and are used poorly.
Wed 12 Mar | Ged Byrne | DavidG, The argument is not that Inheritance should be prohibited, but rather restricted. At the moment Inheritance is presented as a basic skill needed to use OO. Since it is so powerful and liable to misuse, shouldn't it instead be treated as an advanced technique that should be used with caution. With regards to a specific class, the argument is that inheritance should be prohibited unless the class has been designed with inheritance in mind. As Robin points out, inheritance can cause problems if it is not done properly.
Wed 12 Mar | Chris Tavares | In my opinion, the most important feature of OO programming, the thing that makes it different from what came before, is polymorphism. Inheritance is a useful reuse technique, and encapsulation can be done in just about any other language. In early OO systems, like Smalltalk, polymorphism and inheritance were independent concepts. If you called obj.foo, ANY object that implemented the foo method could be used regardless of it's base class. This behavior is preserved in Python and Javascript and other languages, and it's a real boon. Smalltalk didn't support multiple inheritance OR interfaces, but it didn't need them - as long as the object supported the specific methods you need, it's good. However, OO really took off when C++ started getting mindshare. In C++, every variable must have a declared type. As a result, polymorphism and inheritance got tied together, since inheritance was how you linked types together. In these languages, class A's version of foo is different from class B's version of foo, and never the two shall meet. Java arguably took the worst combination of the two techniques - single rooted inheritance tree + static typing. As a result they had to hack interfaces in to work around the limitations. Anyway, my point is that in order to teach the important thing (polymorphism) instructors using C++ or Java were forced to first teach inheritance, because these languages require inheritance to implement polymorphism.
Wed 12 Mar | Chris Tavares | Oh, and just a minor comment on inheritance. Several posts have mentioned that inheritance should only be used for an 'is-a' relationship. I would argue that this term is vague and confusing. What inheritance should be used for is an 'is-substitutable-for' relationship. This is known as the Liskov substitutability critera, and it's an important thing to remember. It makes it much easier to reason about inheritance. For example: Square vs. rectangle. Square is-a rectangle? Yep, at least in the geometric sense. Square is-substitutable-for rectangle? Nope. Why? Well, suppose that the interface of rectangle does something like this: class Rectangle { void setWidth(); void setHeight(); }; In a rectangle, you're allowed to set width and height separately. In a square, changing one changes the other. As a result, the 'contract' of the Square class has a constraint that rectangles don't, and so you can't use a square everywhere you use a rectange. Therefore, square should NOT inherit from rectangle. Hope this helped, -Chris
Wed 12 Mar | Ged Byrne | Chris, Thanks for that. I was trying to figure out what made OO in Smalltalk and Javascript different from Java and C++. I knew it had to have something to do with static typing, but wasn't sure.
Wed 12 Mar | Robin Debreuil | I think teaching how to subclass and why that is useful should be right in the basics. Teaching how to make a class that can be subclassed should come sometime in the second semester ; ).
Wed 12 Mar | passerby | The kinds of polymorphism offered in languages like Smalltalk is very different from what is available in C++. The former offers syntactic polymorphism, while the latter provides semantic polymorphism. The choice is a trade-off between flexibility and risk. Bertrand Meyer provides an excellent discussion of these issues (as well as just about every issue concerning OO) in his book: http://www.amazon.com/exec/obidos/asin/0136291554 I used to develop large systems in Smalltalk and never found lack of static typing to be the issue some folks claim it is. More often it was a lifesaver. I can see its value, though. One thing I do not like about Java's type system is that it goes way out of its way to ensure semantic consistency, but defeats the entire effort by not providing generics. As soon as you put things into collections, you take all the risks associated with dynamic typing and get none of the benefit. As far as inheritance goes, I use the approach described by a previous poster based on the Liskov Substitutabilty Principle most often. Robert Martin discusses this in his book: http://www.amazon.com/exec/obidos/asin/0135974445
Wed 12 Mar | Ged Byrne | Robin, An important distinction. I think that makes absolute sense. Creating applets could be an ideal introduction to subclassing when teaching Java.
Wed 12 Mar | rwh | 'Therefore, square should NOT inherit from rectangle.' No, a *modifiable* square can't be used where you expect a *modifiable* rectangle. If squares and rectangles have value semantics (their properties are defined at creation and can't be modified), then there's no problem at all.
Wed 12 Mar | Chris Tavares | Which just comes back to the fact that no one type hierarchy will work for all systems.
Thu 13 Mar | Toby Reyelts | Chris wrote: Java arguably took the worst combination of the two techniques - single rooted inheritance tree + static typing. As a result they had to hack interfaces in to work around the limitations. ------- Interfaces in Java are no more of a hack then pure abstract classes in C++ are a hack. In fact, interfaces in Java are rather elegant, because they bring the concept of interface inheritance into the language as a first class feature while entirely sidestepping the issues associated with multiple implementation inheritance. and Chris said: If you called obj.foo, ANY object that implemented the foo method could be used regardless of it's base class. ------- What you describe with Smalltalk is structural conformance. The problem with structural conformance is that the implementation details of a method are exposed to the user in order for them to discern the implicit interfaces of the methods parameters. It should be obvious that this is bad - especially for programming in the large. You can see the same problem with C++ templates, which are also based on structural conformance.
Thu 13 Mar | Tj | People probably read too much into Java. Generics is the main big thing for Java 1.5.
Thu 13 Mar | Liron Levy | IMHO inheritance per se is not a pillar of OOP. You need to look at what stands behind the idea of inheritance which is re-use. This is the most important idea and not inheritance. Using interfaces and composition is just another way to do re-use. Just my 2 cents ...
Thu 13 Mar | treefrog | Chris wrote: 'In a rectangle, you're allowed to set width and height separately. In a square, changing one changes the other. As a result, the 'contract' of the Square class has a constraint that rectangles don't, and so you can't use a square everywhere you use a rectange.' I'm sorry, but I don't buy this argument: William of Occam wrote 'Do not multiply objects without necessity' (Occam's Razor). If two different classes enforce the same contract, why have two classes at all? Chris's example illustrates the degree of ambiguity present in the English language. Square and rectangle do present the same interface: They both have 4 sides, and they both have 90 degree angles at all verticies. As rwh pointed out, the problem might come with modifiable squares and modifiable rectangles - a distinction that would be made as soon as one tried to design a class hierarchy. The distinction between 'is-a' and 'is-substitutable-for' needs to be made with care. The ideas of design by contract and inheritence do interact, but when posing the question 'Is A substitutable for B?' one needs to be aware of who is doing the substituting. There are not two actors involved (A and B) but a minimum of three: 'Is A substitutable for B from the point of view of C?', where C is the class or entity that would be using A or B. Returning to chris's example: If I am building a wall, then I do not care whether the blocks I use are square or rectangular, as far as the builder is concerned, the contract must enforce that they have parallel sides. However, if I am creating windows or panels, then the independence of setHeight() and setWidth() may be an important part of the contract.
Thu 13 Mar | Ged Byrne | The whole Square vs Rectangle problem comes down to contract rather than behaviour. A Rectangle may have all sides of equal length and it is a square at that time. However, it is not guaranteed to be a square. There is no contract that height will always be equal to width. When an object is declared as a Square, it is being explicitly stated that this is a square, and that height must always equal width.
Thu 13 Mar | Tal Rotbart | A Square and a Triangle both implement the 'GeometricShape' interface which inherits from 'Shape'. However, both Triangle and Square are implemented differently: Square inherits from Rectangle (which inherits from Polygon) but enforces the 'equal width and height' contract. Triangle inherits from Polygon. etc. Get the drift? :)
Thu 13 Mar | Robin Debreuil | I always thought the square/rectangle was one of the worst examples used to describe inheritance, I'm not sure why it always comes up... Having actually programmed a lot of graphics (and thus done more than one oo shape hierarchy) the conclusion I always come to is, why the hell do you care if it is a square or a rectangle? You can constrain a rectangle and you can check if both sides are equal if you need to. If that is not enough (it always has been for me though), you obviously need a separate unrelated shape. It would take some very broad categories, proabably unrealted to geometry, before a 2Dshape class would need more that one level of inheritance imo. The overworked shape sample is probably a major reason I (and no doubt others) went hog wild with 10 levels of inheritance in the first while. I know it isn't said to be for real world use, but why use a sample that encourages the very thing beginners seem to always get wrong? It is a good real world example of what not to do with inheritance I guess, if they would only introduce it that way...
Thu 13 Mar | Chris Tavares | Toby Reyelts wrote: 'What you describe with Smalltalk is structural conformance. The problem with structural conformance is that the implementation details of a method are exposed to the user in order for them to discern the implicit interfaces of the methods parameters. It should be obvious that this is bad - especially for programming in the large. You can see the same problem with C++ templates, which are also based on structural conformance. ' I would disagree with this statement. My experience with templates in C++ and programming in Python (another language that uses what you call structural conformance) has been the exact opposite. Instead of introducing bunches of classes and interfaces that exist solely to get get around the type system, I can write more flexible code in fewer lines in less time.
Thu 13 Mar | apw | Square is a Rectangle, Rectangle is a Square?? hmm... I thought that squares and rectangles (along with parallelograms, trapezoids, and rhombuses) are *quadrilaterals*.
Thu 13 Mar | Toby Reyelts | Chris wrote: 'Instead of introducing bunches of classes and interfaces that exist solely to get get around the type system, I can write more flexible code in fewer lines in less time.' Can you give an example of this 'more flexible code' and 'bunches of classes and interfaces' of which you speak? // A C++ function that adds two objects template T add( T t1, T t2 ) { return t1 + t2; } This looks practically identical in Smalltalk, and I imagine Python, too. The primary difference is that the C++ compiler will fail at compile time if T doesn't implement operator+(), while the Smalltalk and Python runtimes will raise exceptions at... run time. God bless, -Toby
Thu 13 Mar | Chris Tavares | Yes, but you're using templates - the very thing you complained about in your previous message! I've got no problem with templates (well, no problem other than that the syntax gets overly complicated when used for template metaprogramming, but that's a whole different discussion). So, how would this example look in C++ WITHOUT templates? Let's take the example you give - adding two objects. Well, you'd need to have each object implement an Add method of some sort. So we have: IAddable Add( IAddable a, IAddable b ) { return a.Add( b ); } Ok, we've just implemented IAddable strictly so that we could sandwich various types into the system. It doesn't matter that Point, Rect, and Complex all implement operator+ already - to be used with this method, the parameters MUST be derived from IAddable. (Not to mention the problems C++ will have with object slicing and the return value here. Pretend it's Java instead. :-) ) And suppose now we want to subtract two objects as well? Well, I suppose we'd do: ISubtractable Sub( ISubtractable a, ISubstractable b ) { return a.Sub( b ); } Fairly simple. Now, we want to combine the two, say to calculate ( a + b ) / ( a - b ). ISomething Calculate( IAddableAndSubtractable a, IAddableAndSubtractable b ) { ... } We've now added a whole bunch of arbitrary interfaces to work around the fact that the type system requires a matching VTBL rather than matching via method signature. I hope you see my point here. Templates makes this problem go away. Signature based polymorphism (like Smalltalk or Python) makes this go away. Wether it complains at run time or compile time is a different issue really. You claim that compile time errors are better; I claim that compile time checking is overrated. I'm willing to let that argument go; I doubt we'll be able to convince each other.
Thu 13 Mar | Dennis Atkins | Regarding this square rectangle thing, it's perfectly OK to ADD RESTRICTIONS when creating a subclass. Maybe this exapmle will help: Example: PERSON. MAN is a type of PERSON and is an appropriate subclass. WOMAN is a type of PERSON and is an appropriate subclass. WOMAN has method giveBirth(). MAN does not have method giveBirth(). *So* giveBirth() should *not* be a method of PERSON, but of WOMAN only. Now, SetWidth and SetHeight separately does not make sense for square. But you could add the restriction to square that setting either one also sets the other one. Or you could derive square and rectangle from a common parent, which is probably a better solution.
Thu 13 Mar | Dennis Atkins | I'm with apw on the quadrilateral thing, that was the word I couldn't remember for the parent class.
Thu 13 Mar | .- / --. ..- -.-- | Adding a method to a subclass is not a restriction. If you study programming with contracts, you will see that one of the key consistency rules is that subclasses must honor the contracts of their superclasses. If you write a contract correctly, it states what the value of each basic function on a class' public interface will be when you call a procedure. The square/rectangle example would fail this test. It would resemble something like this: class Rectangle method SetHeight(pHeight long) preconditions: ... mHeight = pHeight postconditions: GetHeight = pHeight GetWidth = old.GetWidth The square could not honor this contract and also honor the constraint that its width and height are equal.
Thu 13 Mar | Toby Reyelts | Chris wrote: 'Yes, but you're using templates - the very thing you complained about in your previous message! I've got no problem with templates...' Sorry, I think we've managed to cross wires here. You complained that Java interfaces were a hack, I said they weren't. I described how C++ templates provide the structural conformance you're looking for in Smalltalk. I complained about how structural conformance (both in Smalltalk and C++ templates) exposes implementation details. You did not address that issue. So, to recap, what I'm saying is that the static typing, interfaces, and single inheritance that you lament in Java is elegant, is unrelated to the structural conformance you miss from Smalltalk, and the lack of structural conformance is more elegantly solved in statically typed languages through a generic mechanism. Aside from that, I believe people would be better served if the generic mechanism required type constraints, because it would prevent the exposure of implementation details that occurs with structural conformance. Essentially, if Java were to go with something like PolyJ, you'd be able to write compile-time type safe generic methods that don't expose implementation details. Much better than Smalltalk, and unrelated to interfaces, etc... God bless, -Toby Reyelts
Fri 14 Mar | Robin Debreuil | If I would see a shape class, in an actual program, that went Shape>Polygon>Quad>Rect>Square I would call that a very bad design and inheritance gone wrong, wouldn't you? What if someone casts a square to a polygon for a single instruction - then what? At very least you are creating far more work than you are saving. As for catching bugs at compile time or runtime, I agree it isn't that big of difference - it is the ones that you don't catch at runtime that hurt. I my experience non-typed languages allow a lot more of those through by their nature.
Fri 14 Mar | Ged Byrne | The whole square/quadrilateral/rectangle problem highlights one of the weaknesses with inheritance. Objects invariably belong in more than one set. Here we have three sets: Polygon, Regular Polygon and Quadrilateral. Regular Polygon and Quadrilateral are both sub sets of Polygon. There is an intersection of Quadrilateral and Regular Polygon – Square. Regular Polygon also contains non-quadrilaterals such as equilateral triangle. The whole thing is confused because we are using the inconsistent naming of mathematicians – why not call a square an equilateral rectangle? So in the design stage it has to be decided what the priorities are. Rectangle as an abstraction of Square? Square and Rectangle as siblings on the inheritance tree? No square class at all, just an IsRegular method for all polygons? This all depends on the purpose of the object model. For me this was one of the key things to grasp before finally understanding OO. My naïve approach was to try to model reality properly, and then reap the benefits from my extra effort. Truth is that OO just doesn’t provide the tools to model reality that accurately. You still have to make choices and trade offs when drawing up the design.
Fri 14 Mar | Practical geezer | Ged, You have just opened the door to an even messier subject, multiple inheritance. In the real world, objects are not part of any hierarchy whatsoever. Hierarchies are a human invention, for classification purposes, and as has been pointed out, it depends on your purpose which classification you use. So, objects can belong to any classification hierarchy you choose, as long as it honors the rules of the classification system. Multiple inheritance can be used to support this, but sadly, multiple inheritance can be abused even more than inheritance alone. Still, both are good tools, provided that they're used correctly. Otherwise they'll come and bite you, eventually.
Fri 14 Mar | John Topley | 'In the real world, objects are not part of any hierarchy whatsoever.' There is a DNA hierarchy amongst living things. We share some DNA with yeast, for example.
Fri 14 Mar | Seth Gordon | Living things inherit traits from their parents, thus creating a hierarchy, because living things have ... well ... parents. The rest of the world is not always so well-organized.
Sun 16 Mar | Bella | Anyone who thinks Inheritance is interchangeable with Interfaces have no fucking clue what OO is about. Get youu head out of your ass and out of your textbook. when you code a real OO project,you will not need to ask these idiotic questions.
Sun 16 Mar | | Got a hangover, bella?
Sun 16 Mar | JW Peppah | Bodies are a contract of organs, which are a contract of tissues, which are a contract of cells, which are a contract of molecules, which are a contract of elements from the periodic table, which are a contract of atoms, which are a contract of elementary particles, which are a contract of subatomic particles, which are a contract of superstrings, which are a contract of dimensions of energy . . . looks like inheritance all the way.
Laptop recommendations? | Tue 11 Mar | Philo
Im looking for a new desktop replacement laptop to replace my current one. My requirements: 1600x1200 screen 1GB RAM 5400rpm hard drive All the other stuff (DVD, CD-RW, wireless) seem to be ubiquitous - the big three above seem to be the ones that knock most options out of the running. Dell offers this, but going from 512MB->1024MB is $800 (?!) My current favorite is Sager ( http://www.sagernotebook.com/ ) - $3000 for the perfect machine. But I wanted to canvas the folks here to make sure I wasnt missing someone. Philo
Tue 11 Mar | ODN | The trick to getting lots of RAM in a Dell laptop at a reasonable price is to buy it separately. It makes no sense to me, but you can save hundreds by getting a laptop with minimal RAM installed and ordering your 'real' RAM separately from Dell. You actually save money doing this, even BEFORE you resell your original RAM on eBay. Or you can buy your RAM from Crucial to save even more. The last time I was in the market for a similar configuration, the options boiled down to Dell or IBM. I hear Sony now has a good 1600x1200 screen on one of their machines, but I'm not sure about the other specs. I went with the Dell 8200 and haven't been disappointed. The UltraSharp 1600x1200 is the way to go.
Tue 11 Mar | Eric Debois | I dont know if these models are available with the specs you asked for, butthese are my two favorites right now: HP Omnibook 6200 is my 'mobile' laptop and its very sturdy. Ive had it for six months and I dragg it around every day and it still looks bascily new. Easy to handle. I think it has a P4 1.7. My stationary laptop is a fujisu-siemens Amilo. Its a consumer laptop, and its not as well put together as the hp, but as I dont move it much thats secondary. Its good bang for the buck, though the screen is not terribly well lit.
Tue 11 Mar | Stephen Jones | I second Eric's comments on the HP 6200; it's the first laptop I've really liked working with. It is underspecced for Philo's uses though, but if somebody else finds the odd one going at clearance prices it's well worth buying. I would think about getting a DVD rewriter. Toshiba now do them with their top of the range models. If you're using a laptop as your primary machine you really want to have a convenient way of backing up all data at one go. And if space is not a problem it might be worth thinking of having a desktop and a lower specced laptop; spend $1500 on each instead of $3000 on the one.
Tue 11 Mar | Philo | [nod] My desktop machine is fine. The problem is that lately I've been doing a *lot* of development on the road, and I prefer to work on a comfortable speedy machine. Philo
Tue 11 Mar | Yaniv | Take a look at: http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=29169&ixReplies=28 for more.
Tue 11 Mar | Brian B. | You might want to check out the new Dell Inspiron 8500. It's got a wide aspect 15.4' display that supports a resolution of 1920x1200.
Tue 11 Mar | Kyralessa | Definitely buy your RAM from Crucial, not from Dell; you'll save 50% or more. I just did this recently with a laptop and spent $150 on 512MB instead of Dell's $314. So far as brand, I'd say think about lifetime, not just specs and price. I used to work in contract PC repair, and Dell had the best part-replacement scheme of anyone we contracted with (which also included HP, Compaq, Toshiba, Best Buy...). They really do get it there the next day if you call in the morning and need a part replaced, whereas with others it ranged from several days to who-knows-when. They also had a far better percentage of correct diagnoses on the first part replacement, and more knowledgeable techs when you had to call in.
Tue 11 Mar | Philip Dickerson | I don't own one, but the Sony GRX700 Series looks tempting, and a match to your requirements. Sony GRX700 as configured below - price $US2689.99 16.1” UXGA (1600x1200) LCD display Mobile Intel® Pentium® 4 2.2GHz-M 1024 MB DDR-SDRAM 60 GB hard drive CD-RW/DVD-ROM Combo Microsoft® Windows® XP Professional You can decrease the price by substituting, for example: 40 GB hard drive [subtract $180.00] 30 GB hard drive [subtract $210.00] Mobile Intel® Pentium® 4 1.8GHz-M [subtract $250.00] Mobile Intel® Celeron® 1.7GHz [subtract $410.00] You can increase the price/capability by substituting: DVD±RW/CD-RW combo with Click to DVD™ software [add $300.00] Mobile Intel® Pentium® 4 2.4GHz-M [add $300.00] More info at: http://www.sonystyle.com/is-bin/INTERSHOP.enfinity/eCS/Store/en/-/USD/SY_BrowseCatalog-Start?CatalogCategoryID=0.4KC0.NZxUAAADzvzpE.teE or start at: http://www.sonystyle.com (their specific links change periodically)
Tue 11 Mar | fool for python | Anything that runs OS X.
Tue 11 Mar | Eric W. Sink | Two points: 1. Read everything you can before buying a Sager. I cannot speak from experience, but I almost bought one several years ago. I talked myself out of it by reading the comments of those who have bought one. 2. I strongly recommend the IBM Thinkpad A31p. Over the years I've owned 12 different laptops, including Toshiba, Dell, Gateway, NEC and Sony. The bottom line is that Thinkpads are the best, and the A31p is the finest laptop I have ever used.
Tue 11 Mar | Prakash S | ODN, Kyralessa: Won't your warranty with Dell be void if you put in your RAM? Philo: After doing some more research on Laptops, I would say 1.) Go with a name brand model: Dell, IBM, Toshiba, etc. 2.) Get a 3 year warranty. 3.) Dell has the best customer service (not the greatest, but the best compared to the rest). best,
Wed 12 Mar | Prakash S | Kyralessa, I was checking up RAM prices for my laptop - $100 for 256 mb sounds good to me. Wanted to know if opening up a laptop doing an upgrade is easy? I have done it on PC's, but never on a laptop. FYI: My warranty ran out. THanks,
Wed 12 Mar | anonymous | On a laptop, spend until it really hurts and then keep it as long as you can make it make do. I have a Dell Precision m40, because I needed it a year ago. Nice machine, too expensive. It's built around the Latitude C800 series, which is a nicer and more robust platform than the Inspirons. Particularly, you get two PCMCIA slots and the nubby stick in the middle of the keyboard in addition to the touchpad. I'd go crazy if I had to use the touchpad. I just plain like the industrial design better, too. Make Dell sell you a Latitude.
Wed 12 Mar | Stephen Jones | It's even easier to put memory in a laptop. Normally you just take out the battery and open a slot at the bottom. Have a look at your manual.
Wed 12 Mar | Albert D. Kallal | Don’t forget a first rate warranty. I have owed at 4 notebooks,and EVERYONE of them has had some major failure (screen, or hard disk). I use my notebooks a lot, and in fact the finish on the last one actually wore off where my palms rest! My current keyboard was replaced under warranty, and is only a few months old, and again is showing real good signs of wear. In my previous notebook, the flat screen just stopped working. The cost of replacement was more then the notebook was worth! Of ALL my friends who also have notebooks, the ones that actually use/move the notebook (ie: it does not count if your notebook just sits at the office and never gets moved). I am talking about people who actually use, and need a notebook. That means it gets moved on a daily basis. If this is the case, then it will break with normal use. Just general wear and tear means your notebook WILL FAIL. I REPEAT every notebook I have has had some major failure. Every SINGLE one of the people I know have also had, or required warranty work if they are on the go all the time. A large portion of notebook users do NOT move the notebook everyday, and thus do not experience much failures at all. As a result, I now always have my notebook under warranty. It is has been a few months since dell rolled the truck to fix my notebook, but it is costing them a bundle, and not me. I strongly recommend that you get a very good warranty, and in fact purchase at least 3 years worth of warranty. I will restate this gain: I strongly recommend you get a VERY good warranty. With a desktop pc, you pull out parts and replace it. Dirt cheap, and disposable those desktop computers are. Besides, they don’t get moved, and thus there is not stress on the motherboards. With a notebook, a small failure will cost you big bucks. You need a warranty to use, and run a notebook. There is no other way around this. Albert D. Kallal Edmonton, Alberta Canada Kallal@msn.com
Wed 12 Mar | one programmer's opinion | I recently read that Sager is currently kicking Dell's butt on laptop prices. Note: I haven't verified this myself. As far as Dell is concerned. As others have already mentioned you should buy additional memory from a third party vendor such as Crucial. You will save yourself some money. Btw, adding more memory to your machine won't void your warranty. While comparison shopping make sure to check out various web sites for coupon deals. You should be able to find coupons deals for memory as well as the laptop itself. Just in case you don't know a coupon is -- a coupon is simply a discount code (i.e. ABC3457U might equal 10% off the purchase price) that you type into a particular web site during checkout time. Let us know what you wind up buying.
Wed 12 Mar | one programmer's opinion | '3.) Dell has the best customer service (not the greatest, but the best compared to the rest).' Prakash S, I realize that you are orginally from India so don't take this post as a personal attack against you. Imo, Dell's customer service currently sucks. Do a Google search if you don't believe me. I recently was looking to purchase a new desktop PC and all of the reviews that I read from Dell customers who recently purchased a PC I was interested in buying went something like this, 'great machine, but the customer service I received was simply awful'. Dell outsourced most of their customer service calls to an Indian firm a couple of years ago.
Wed 12 Mar | Yaniv | I have mentioned this in previous threades regarding buying new laptops. I was in the similar position looking for a desktop replacement notebook few months ago and I wanted the fastest, most powerfull notebook available in the market. Dell wasn't offering 2.8GHz notebooks then. Hence I looked at Sager, Pro-Star, Alienware etc. They all had machines with similar configuations. Alienware said it will take a month to deliver the machine. I went with a Pro-Star 5654 (P4 2.8GHz, 1GB RAM, 40GB Hard drive, 1600X1200 resolution) becuase of the better pricing. It was a big mistake. It's very heavy (12 pounds!), Everything is so small in 1600X1200 resolution, it really hurts the eyes and if I go to a lower resolution the display becomes blurry, battery life is horrible (1 hour max), Too much of heat generation! (I keep my coffee hot, I mean HOT, not just warm!, the whole day!). $2800 down the drain :( Think twice before buying a laptop with P4 desktop processor as opposed mobile processor (P4 M)! Just some food for thought! Let me know if any of you have any other opinion and agree or disagree with me. Thanks.
Wed 12 Mar | Philo | Albert, re: warranties - agreed. Also make sure you get an 'onsite' warranty. My first Dell was depot repair - the screen went bad while I was living off the laptop and they wanted it for two weeks to fix it; I couldn't even pay for the service visit - it was send it in or no warranty. (I ended up writing a letter to Michael Dell's office which got me a trade for a refurbished machine, with which I was very happy) Philo
Wed 12 Mar | Karl Perry | I'd go with Dell. I've had my Inspiron 8200 since September and I've very happy with it. Prior to that I owned a Micron TransPort Trek II for almost four years and was never happy with their service. Dell is constantly changing the 'specials' they offer, and many times they offer a 'double RAM' special. I was able to increase my memory from the 128MB standard to 512MB for about $75. No doubt you could do the same, and get Dell RAM. (I've also bought from Crucial and have been very happy both with price and their service.) I just checked their site and they don't currently offer that deal, but their specials change on Thursday - so check back tomorrow. Also, their inventory changes almost daily; at one point I had the opportunity to get double RAM AND a combo DVD/CDRW drive at an incredible deal, but wasn't quite ready ... I decided two days later it was too good of a deal to pass up, but when I checked the site the drive was no longer available. So when you find the combo you want at the right price, jump on it. As others have said, get the longest warranty you can, and make sure it's for on-site repair. A lot of my dissatisfaction with Micron was that the laptop had a manufacturing/design defect: its hinges were far too tight, and the plastic in the display portion of the case basically disintegrated about two years after I bought it. I spoke with several others with the identical problem. I had not purchased the extended warranty (unavailable since I bought a 'refurbished' unit), and it took me almost three months to get Micron to admit fault and fix the problem without cost (it would have been $400 otherwise). With the $300 extended warranty, it would have been a matter of calling them and telling them to fix it, and everything else would have been covered, too. Look both at their small-business and their home sites. Their prices for the identical computer on the two sites can be hundreds of dollars different. I find that their small-business pricing is much better. Also, be sure to continue to check their site AFTER you receive your machine. About 25 days after I received my new Inspiron I needed research a new laptop for a client, and out of curiosity I re-priced the configuration I bought. It was almost $300 less! I called Dell's customer service, and they credited me for the difference. You have to do this within 30 days of purchase. Finally, check the 1600x1200 resolution carefully. Have you worked with one of these displays yet? I have a friend with one, and found the characters were just too small for my 43-year-old eyes. He's a bit older than I, and thinks it's great. I compromised on the 1400x1050 display and have been very happy. Dell has by far and away the most choices available, and their product is very nice. I recommend them highly, despite Joel's opinion of their servers :)
Thu 13 Mar | Prakash S | Just bought additional RAM from Dell, it was $19 cheaper than what I found at Crucial's website. Customer service was pretty good, never had any complaints with Dell Service.
Thu 13 Mar | Chris Tavares | I recently bought a Sony Vaio R505 to replace my aging Z505. It doesn't meet the original poster's specs, so I wouldn't recommend it for him; I bought it because of the small size / light weight. But I just wanted to comment. I seriously thought about a Dell laptop. I know several people who own them, and swear by them. And they all said the same thing: 'Yeah, and the Dell service was great the three/four times I had to send it in for repair!' My first Vaio went for 3 years without a hitch. Dells seem to need major or minor repairs every six months in my experience.
Sun 16 Mar | James Ussher-Smith | In May last year I got a Sony PCG-GRX316MP (P4 1.6GHz, 512MB, 30GB, 16.1' screen) and couldn't be happier with it. I would definitely recommend Sony's latest model which I believe has already been mentioned earlier in the thread.
Going from on-line contact to face-to-face | Sat 15 Mar | Alex Chernavsky
I admit to having anti-socialist tendencies. Left to my own devices, I tend to sit in my basement in front of the computer. However, a new service has recently improved my social life. http://www.meetup.com/ is a great idea. Basically, this website unites people who share a common interest, and helps organize face-to-face meetings among these people. Meetup.com was profiled in a recent article in the New York Times: http://www.nytimes.com/2003/03/13/technology/circuits/13meet.html Ive been to three Meetup.com meetings so far (I live in Rochester, NY), and all three were pretty good. I thought Id bring it to peoples attention here, in case anyone else was interested. (Other than being a user, I have no connection to Meetup.com.)
Sat 15 Mar | sgf | Yeah, I hate the Socialists too, high taxes and all that. :)
Design and implementation as separate roles | Fri 14 Mar | ODN
From the recent CAMEL discussion, Nat Ersoz said It will be a cold day in hell when I code something that someone else architected. Likewise, if I have to write the spec, then I might as well spend the remaining part of the day writing the code. Ive traditionally taken the same design-to-code-in-one-day approach as Nat, but am considering taking a new job with clear separation between the design role and the implementation role. My job would be to do the design and then hand it over to an on-site contractor to implement. At first, I worried that Id miss the satisfaction of coding my own designs, but the more I think about it, the more I like the thought of not having to shift gears so much. Because I would do less transitioning from high-level to low-level, I could actually get more done, and have a more focused, comprehensive approach to development. As Ive practiced honing my design skills in preparation for this possible job, Ive noticed that having to put down on paper trivial things where I would traditionally have jumped straight into code helps me to spot conceptual gotchas a lot sooner. Of course this level of rigor comes at a cost. What are your thoughts on the kinds of projects that justify this degree of separation, and what are issues to look out for when different people have different roles? (The cold day in hell response, etc.)
Fri 14 Mar | matt | Often, designers will create a reference implementation of their design to prove that it is implementable. I know the W3C won't release a spec as final until there are at least n (can't remember the number) implementations. On a separate note, I have heard Steve McConnell talk about this (apparently, MS did it for a while with Master and Slave Coders) and he says it's horrible for morale. Well, for the slaves anyway.
Fri 14 Mar | Big B | I read Nat's 'remaining part of the day' more as a figure of speech than as switching roles on the same day. When I work on a new subsystem, I spend 30-50% of the time planning before I write any production code at all. This sometimes goes on for a couple of weeks or more. Then I switch roles and write code most of the time. I imagine if I had to hand over my spec to a coder, I'd have to spend much longer on it, because there are many details I don't need to put in there because they don't concern anyone else but me as a programmer and architect. The good thing about having two separate people working on the system is that two heads think better than one. But given the fact nobody wants to be a code slave, and it only makes the architect's job more cumbersome, I'd prefer two all-round developers.
Fri 14 Mar | Nat Ersoz | Well, yes, I used some exageration - it was to make a point. I often code to a specification - in fact most of my work is that way. I have hardware data sheets from a manufacturer, and I have ITU, ISO and IETF standards/RFC's to code to (among others as well). So I'm no stranger to coding to something defined outside of my own realm. However, these are not software architecture designs by individuals in secret rooms. They are open standards designed by comitee. This is something completely different that having some architects appointed within a corporate structure with the intent of telling someone what to do. Additionally, it should be expected that individuals will have skills that are specialized and will be more proficient within a certain context than others. Each individual should be taking part in the design discussion, especially when they are known to be skilled in a specific art. I'll put forth the hypothesis that any engineer will to be a code slave is not worth having on a team. That certainly has been my experience.
Fri 14 Mar | ODN | Nat, I think we're coming from very different business areas. Business software design can be a lot less straight-forward than things that have clear-cut standards to code to. If I'm implementing networking protocols for a wireless device, I would expect as a coder to understand far more about the big picture than if I were coding part of a huge line-of-business application. I would also expect to participate more in design discussion as a networking programmer than as a business programmer. I would be far more likely to refer to coders on a networking device project as engineers than I would coders on a line-of-business project. Working as a coder on a large line-of-business project would probably drive someone with the 'engineering mind' bonkers. There's a valid place for both kinds of programmers in this world, but it's often hard for people on one side of the fence to understand that about the guys on the other side.
Sat 15 Mar | one programmer's opinion | Hi ODN, Let me turn the tables and ask you a question -- What are your thoughts about this position? The following are questions that I would like to know something more about before commenting on your question: * What type of design work are we talking about here? Modeling large object-oriented business systems? * Is design work going to be your ONLY responsibility? What about analysis and requirements work? * Does the company have enough 'new development' work in the pipeline to keep you busy for the next couple of years? * What tools and technologies are you expected to know/use? * Have you ever designed a large 'corporate enterprise' business system before? What I mean is do you feel you are qualified to do this type of work? My only comment for now is -- If I was looking to specialize in something, I don't think I could ask for a better job than what you might be doing soon. Let us know what how things turn out for you.
Sat 15 Mar | ODN | In answer to OPO's questions: My thoughts on the position are basically that it is my ideal job if I'm actually able to perform. But if I can't perform then I shouldn't waste their time and mine. It's a tough call to make because it's not an easy job for me to to quantify from what I've been able to learn so far. I would say the design work involves small to mid-size object-oriented business systems. But they expect several of them to be on my plate at once, with an eye toward eventually creating one unified system from some of them. There will be requirements gathering and analysis in addition to design, but I chose 'design' as the representative word to keep the discussion as down-to-earth as possible, given some people's aversion to anything remotely related to the word 'architect'. From the plans they've talked about, there is no shortage of projects for the foreseeable future, from SCADA to maintenance management to accounting and everything in between. They seem quite dedicated to staying cutting-edge, and perform extensive analysis of new technologies as they arrive. New development is currently focused on .NET with Oracle back-ends, but they have some Java and other technologies in their past, and they aren't afraid to change gears quickly, which I believe is part of the reason they contract out almost all implementation. They haven't emphasized any particular development methodology. In fact they've emphasized that they really feel that software development is more of an art than a science, and therefore value people who have a good intuition more than they value a particular brand of methodologist. As long as you're able to produce, it doesn't matter how you get there. We did cover software engineering and project management topics fairly extensively, and I think we see eye-to-eye for the most part, but I would probably have a fair bit of leeway as far as design tools and techniques. I haven't designed a large business system before as far as big-bang design goes, but I did spend several years iteratively designing and building a mid-size system that nobody knew was going to grow to deal with all the different business areas that it did. I would say it ended up being enterprise-wide in scope by the time it was done. It was in a similar line of business as the new job opportunity. One of the non-technical things that appeals to me is the opportunity to specialize in a business that deals with a wide range of roles, from the maintenance mechanic to the engineer to the more traditional information worker types. I think working to meet the technology needs of that range of people in a unified way is a great opportunity to grow.
Sat 15 Mar | Patrik | This idea of splitting design and implementation roles has a few major drawbacks as I see it. Most large corporations have their share of designated 'system architects' or 'database architects' or what you want to call them. For the sake of the argument they are all designers. Then, you have a buch of coders, that code from given specs. If you come in as a new coder and you are spoonfed completed specs you can not easily build up a full understanding of your platform, because you never get to excersise it to the fullest. Its when you design complete solutions, and then implement them you really learn the ways of working on a given platform, and a given tool. This being a designated coder maybe works for relatively inexperienced coders, that are just starting to work professionally. Also, if you have a group of designated designers that do specs, they sometimes seem to justify bad design descisions with being 'superior' to coders. With database designers for example, having done tons of DB2 stuff does not automatically make you a good designer for Oracle. The way the databases handle non-trivial stuff differs. The design of a new system is always a series of tradeoffs, and if the person doing the design is not very proficient with the tools/platform being used you are in for surprises. I have seen cases where the coders would make better designers than designers because they have a better hands on experience with things. I think working together and taking the best design that can be thought up between designers and coders, is what is going to work best. Either split things up, or have the designated designers take part in the implementation process as well. A designer of a system is not finished working when the spec is done.
Sat 15 Mar | ODN | I'm not sure what I've been saying that's giving off the large company vibe, but the job I'm talking about is in an IT department that I'm guessing has less than a dozen people in it, including management, network admins, and DBAs. They seem to have made a conscious effort to keep themselves lean and mean despite ongoing application development work. I believe this is the exact opposite of the type of place that people are characterizing when they put double-quotes around the word 'architect'. If I were to take this position, I would do my best to involve the programmers in any relevant design decisions and definitely in time estimates, but because they're all contractors there's an extra layer of separation I'm not used to dealing with. They have some truly brilliant programmers working for them, so I'd like to find ways for them be as involved as possible. Perhaps I'm seeing the separation of roles as more drastic than it actually is, but if it really is that clean-cut then I need to find a way to deal with it.
Sat 15 Mar | Patrik | ODN, Maybe separation works if done right, maybe I have just seen poor implementations. Nothing you said really led me to believe you were talking about a big company. My experience led me to that, because when I worked for smaller outfits (10-30 people), I have not seen this splitting done to the extreme. Ofcourse even the smaller places had people that were given titles along the lines of Senior Develper, Lead Programmer, Designer and what have you, but this was mainly just titles. We were working as a team always, and whats important is that the most informed member of the team is making the descision for a given design issue. In other places I have seen developers are forbidden to make design descisions, add a table, talk to the DBA. Add a field in the table, justify that change with the DB designer - I can understand that some companies enforce such strict rules in their production systems, but when applied to development, this leads to territorial fights and is harmful. I guess its simply a matter of how you implement the system. After thinking for 30 seconds, the key rule seems to be that the most informed person in the team should make the descision. May seem like this almost goes without saying, but the role separation is malpracticed in some places.
Sat 15 Mar | Joe AA. | Sure... the larger the group and the more the group fragments into titles of speciality and the greater the social prestige of those titles, the more dysfunctional the group becomes. The greatest dysfunction occurs when the group adds to its numbers just to continue its existance (e.g. job security illusion). The distribution of responsibility for something like design and implementation is not necessarily bad by itself, but becomes so when 'conceptual intergrity' as defined by Fred Brooks becomes impossible to achieve. At this point, all projects and implementations can rightly be called failures.
Sat 15 Mar | anon | From the point of view of the business, you have to understand the economics of the organizational scheme you choose. It does no good to say 'specialization is best!' or 'generalizing is best!!' or any of that until you understand your goals. Each kind of organization is designed to optimize some goal. If you choose what is usually called 'the functional team' approach, you choose specialization as your primary organizing principle. You have a bunch of finance people on the team called 'finance' and you have a bunch of engineers on the team called 'engineering.' Similarly, if you choose the purley cross functional approach, where you have autonomous teams staffed with a variety of skillsets, you are choosing generalization, or breadth, as your primary organizing principle. The first kind of organization strives for efficiency of each functional unit though economies of scale within the unit. The tradeoff is that this kind of organization is relatively slow due to relatively lean communication links between the functional areas and lack of visibility across the areas. The second kind of organization strives for speed. This comes at the cost of reduced quality (in general) and inefficiency. Recently, hybrid teams have resulted in what's called 'matrix organizations.' These posses either the best qualities of each of the other types or (more often?) the worst. If you are a business, you need to decide what your goal will be and organize your resources accordingly. When you are choosing how to develop your skills, you have to look at the market for each of these kinds of organizations and plan accordingly. Assuming, of course, that your main goals are economic.
Terms | Fri 14 Mar | Jay
Can someone please explain the following terms for me? Strategies vs Tactics vs logistics I am looking for definitive answer. Thanks
Fri 14 Mar | RocketJeff | The Merriam-Webster dictionary is at http://webster.com/
Fri 14 Mar | anon | Strategy is about goal selection, tactics is about the methods you use to achieve the goals, and logistics is about the process that controls the tactics.
Sat 15 Mar | Nat Ersoz | Tactical strateegery synergisticly complements the logistical global dynamic paradigm. Usually, Webster's definitions matter little when these words are used...
Sat 15 Mar | Herbert Sitz | The technical meaning of these terms has its origin in military matters. Here's my understanding of it: The big distinction between 'strategy' and 'tactics' has to do with scale. 'Strategy' has to do with overarching decisions that are fairly general in nature. Doesn't describe how to do something, but decides what is going to be done. E.g., 'We're going to fight this war on two fronts.' 'Tactics' have to do with the particular method of accomplishing smaller scale items. E.g., 'To take over that position we'll first soften them up with cannons and then rush them and use hand-to-hand combat with bayonets.' Generals study and decide strategy. Lower level soldiers study tactics. Tactics are used to execute the strategy decided upon by the generals. Logistics has to do with the shuffling around of resources from place to place. Not sure how it relates to strategy and tactics, exactly. I would think that depending on their scale logistics decisions could be either strategic or tactical. As related to software, 'strategy' is obviously closely related to the overall architecture of a project. Tactics would have more to do with specific implementations. In the current thread about 'design and implementation as separate roles', the 'design' can be thought of as 'strategic', the 'implementation' as 'tactical'. If you want, you can think of the software architects as the generals and the coders as the grunt solders. ;)
Laptop OS upgrade (XP home to pro) | Fri 14 Mar | tim
Ive got a Dell Inspiron 8100 running XP Home Edition and I want to upgrade to XP Pro. Ive got a XP Pro cd (gotta love MS Campus Agreements) but Im wary of making the switch. Im just worried that something will go horribly awry and Ill have to wipe the drive and start from scratch. Anyone have any tips or things to note before I bite the bullet and upgrade? Also, Im assuming that Ill have to reinstall all my software. Is this correct? I know that ME (yuck) didnt require this when upgrading/downgrading (depending on your pov) from 98. Anyone? Thanks for your help.
Fri 14 Mar | John Conners | I've done exactly what you're considering and it was almost painless. For some reason it reset the start menu so all the shortcuts to all the software I'd installed disappeared. If you make a copy of them you shouldn't have the pain I did reconfiguring them. Aside from that it ran a treat and everything still worked.
Fri 14 Mar | Wei | should not be a problem... i've upgraded home to pro without any issues, not even the shortcuts thingy mentioned. just curious? why the upgrade? home is fine, it's not like you need multi-processor, multi-monitor support on a laptop rite? given a choice i'd just stick to win2k sp3... it's really stable and running great. =)
Fri 14 Mar | Li-fan Chen | If your laptop has a CD burner just zip up your favorites and everything in your 'My Documents' (or My Music or My Pictures or My Microsoft Bob whaever) folder and burn it.
Fri 14 Mar | Li-fan Chen | I am a great fan of SP3, but SP2 has slightly less compatibility for me. I have had some incompatibility problems. On the gaming side I tend to stay with DirectX 8.1 Final.. you'll want to back up these old Service Packs because it gets really hard to find them (time consuming) in Microsoft's huge website.
Fri 14 Mar | Li-fan Chen | Oopps.. said it opposite. I meant SP2 is more compatible with the various software I install. Try SP2, and go to SP3 only if you need all of the hot fixes really badly.
Fri 14 Mar | Philip Dickerson | Also read these Microsoft KB articles: http://support.microsoft.com/default.aspx?scid=kb;[LN];Q312369 http://support.microsoft.com/default.aspx?scid=kb;[LN];Q312368 http://support.microsoft.com/default.aspx?scid=kb;[LN];Q315341 One of these explains why the Start menu items might disappear during the upgrade if XP Home was pre-installed by the manufacturer.
Fri 14 Mar | Philip Dickerson | Regarding why upgrade to XP Professional, for me the biggest reason would be that IIS is only in the Professional edition - if you use your system for developing ASP or ASP.NET applications/sites/pages it's really useful to have a local IIS on your system. Other significant features that are only in XP Professional that may be of interest are (some of which are mentioned in earlier replies): multi-processor support, multi-monitor, multi-language, Windows domain networking, encrypting file system, remote desktop.
Fri 14 Mar | Duncan Smart | Check out the 'File and Settings Transfer Wizard' in Accessories/System Tools too -- works rather well.
Fri 14 Mar | flamebait sr. | It's much better if you are prepared to rebuild your system from scratch at any moment, anyway. So make sure you have backups and all of the installers for any software you want and just stop worying about it.
Fri 14 Mar | ODN | I did the XP Home to XP Pro upgrade on my brother's new Dell 8200 laptop. I had originally intended to reformat and do a clean install, but decided to go with the upgrade process that popped up when I stuck the CD in, just for kicks. It worked great, and left all the programs in perfect working order, as well as the Start menu intact. I have a friend with XP Home who I helped install IIS 5 on his computer from some Windows 2000 MSDN cds. It's not supported, but can be done. Search Google Groups for instructions. It works for some things, but ASP.NET doesn't play well with it, so I'm considering doing the XP Pro upgrade route, but am afraid that with the nonstandard IIS install, it might hose it. I seriously doubt anyone here has gone this route, but on the off chance someone has, does it work?
Fri 14 Mar | Wayne | >>multi-processor, multi-monitor support on a laptop rite? Actually, multi-monitor in *any* computer can boost your efficiency by 100%, since you then have 100% more screen to work with. Let me tell you a little story. I worked for a guy that /insisted/ that everyone in the office used dual screen. At the time I was a ferocious youth and argued with him terribly about everything. Eventually though, I came around and now I insist on it in my office. Even when I go on site to a client's location, if there's an extra monitor around, I use it. You can just *see* everything that much better. Furthermore, Windows XP Pro handles dual monitor better than all versions of Windows.
Sat 15 Mar | Tim Miller | Thanks for the replies. As to the why? I'm hoping to use my laptop as my test system for learnign ASP.net, sql, etc, and as was mentioned, IIS not available in home. Also, I discovered while working on a Java assignment that it would be nice to be running IIS while not networked so I can avoid IOExceptions when testing apps that look up URLs. Anyways, thanks again for the info.
Joel on Writing | Thu 13 Mar | Beka Pantone
As of late I have been working on a field where little knowledge is committed to print. I keep playing around with the idea of writing a book on the subject. Unfortunately I know nothing about the publishing industry or the process involved in writing a book. As the existence of this book attests http://www.amazon.com/exec/obidos/ASIN/1893115941/ref%3Dnosim/joelonsoftware/104-4688036-0936749 Joel has been there and done that. I would very much enjoy reading an account from Joel on how software developers become book authors. From the idea to the shelves. Do you need an agent to get a publisher? Does the publisher assign you an editor? What is your relationship with the editor? Is it required to physically meet your editor on a regular basis or can it all be done through email? (might be relevant to people that doesnt live in cities) Does the author have a say on the format of the book? Things such as cover design, page format, graphic plates, typography, etc. Does content evolve as you write or does it have to be set in stone before you get a publishing deal? What tools are used in the writing of a book? Are you expected to deliver in a particular document format? Do you have to get the proofreaders yourself or do you get some assigned? Is the book delivered all at once? Or is the writing/feedback process iterative? The whole publishing industry is a complete mistery to me, so if anybody has any experience Id be delighted to hear about it, for I will certainly learn from it.
Thu 13 Mar | Beka Pantone | Erm... of course a basic step would be to check for spelling mistakes. That should have read 'mystery' instead of 'mistery'. :)
Thu 13 Mar | Mike Swieton | My suggestion, call up a publisher or two and ask. This presumes that you need a publisher, of course, which isn't necessarily the case (my dad prints out lab books for the course he teaches, but it's a bit easier to sell books when the audience must by them). I haven't written anything, but I imagine that if a publisher wants a book on the subject, they should at least be willing to spend the time to tell you about their process (which is almost certainly very similar to every other publisher's process).
Thu 13 Mar | TK | The CityDesk forum mentions a successful use of iUniverse: http://discuss.fogcreek.com/CityDesk/default.asp?cmd=show&ixPost=5584&ixReplies=8 Make sure the read the bottom posts.
Thu 13 Mar | Beka Pantone | Technical details such as the document format (although mentioned in my initial post) do not worry me in the least, I would think that this is the easiest problem to overcome. My post intended to encourage Joel to write about 'how he got around writing his book', from the idea to the bookstore. I would enjoy reading what he discovered along the way. I assumed that perhaps someone else in this forum might be interested in reading such thing, or write about it (if they have an experience to share).
Fri 14 Mar | Justin | Wrox press have some blurb on their site for potential authors. You might also look the 'Re:The book' part of Critical Section at http://www.w-uh.com (a link a came across a couple of days ago somewhere else on this forum). Something written about by Joel was the 'fire and motion' tactic (strategy?). It applies in this case in the sense that you shouldn't allow a few more days to slip by without making some...*any* progress towards your goal of a book. Even if its just notes. The longest journey begins with a single step (or some such platitude). I, of course, do not follow my own advice and have successfully never started writing a book over the course of 15 years.
Fri 14 Mar | Simon Lucy | Its a crowded market these days. If you have a good niche subject, good direct experience which is going to make you standout from the rest, do a synopsis of the book, no more than a page. You have to sell the idea to get the contract. Technical books aren't quite like trying to sell a novel (not that I've done the latter), technical publishers tend to have very good ideas as to what they want to publish. They are also unlikely to pick up a finished book. Hence the synopsis.
Fri 14 Mar | r-pt | you should read this page http://philip.greenspun.com/wtr/dead-trees/story.html it has some insights about the publishing process.
Fri 14 Mar | Brent P. Newhall | As a writer and ex-editor, I can answer this. :-) Here's the typical process, assuming an author has written a book: The author chooses a publisher to submit the book to. The author looks on the publisher's website for submission guidelines; if there are none, the author checks a copy of The Writer's Market, a massive book available at any bookstore or library. The publisher may only accept submissions from agents, in which case the author can't do anything unless s/he has an agent. The publisher may accept only query letters, or may accept a cover letter along with a few sample chapters. Assuming the publisher accepts non-agented query letters, the author then writes a query letter to the publisher, essentially saying, 'I've written a book on this subject, that covers this information. Here's why the book should sell like crazy. Here are my credentials. Please consider it for publication.' The author then sends the query letter -- along with a self-addressed, stamped envelope -- to the publisher, and waits to hear a reply. Assuming the publisher accepts non-agented cover letters with sample chapters, the author writes a cover letter, essentially saying, 'Included is the first few chapters from a book on this subject, that covers this information. Here's why the book should sell like crazy. Here are my credentials. Please consider it for publication.' The author then formats the sample chapters according to the publisher's submission guidelines and sends this stuff -- along with a self-addressed, stamped envelope -- to the publisher, and waits to hear a reply. Realistically: The author then gets rejected, submits to another publisher, and repeats the process many times. That's just the way of the industry. Then the author gets a reply letter! A publisher is interested. The author then formats the entire book according to the publisher's submission guidelines, and sends it. An editor reads it over, and replies with a final yea/nay (at this point, a 'nay' is unlikely), along with a request for changes such as re-arranging the ordering of parts of the text, tweaking examples, etc. The author then sends the full manuscript with changes, which then goes through a big process involving many people at the publisher: proofreader, typesetter, etc. Then the book is published. Here are answers to specific questions: Your relationship with the editor is ideally a friendly business relationship. The editor already likes your book, so your relationship should be friendly. The editor may ask you for changes, and some folks get ticked off by this, but it's the editor's job to know the market and book format so s/he can advise you on what will work best. Any changes are requested in the spirit of helping your book to sell as many copies as possible. You should never have to physically meet with your editor. Most authors never physically meet their editors. The author usually does not have a say in the format of the book, because those decisions are best left to those who've been trained to make those decisions. You can certainly request things, but don't count on them being followed. The content will typically evolve, once a publisher has shown interest. The tools are: one (1) word processor. That's it. There is a standard format, yes. The fundamental standard for pretty much all printed work is to format the work in a fixed-width font (like Courier, not Times), double-spaced, with page numbers at the top. Text that you intend to put in italics should be underlined instead. Otherwise, formatting should be kept to an absolute minimum, since the document will be re-formatted into the publisher's format anyway. Each publisher will have specific formatting requirements; again, check their website or The Writer's Market. Proofreaders are assigned; you won't have to worry about that. However, you should strive to write a manuscript that won't need proofreaders. Feel free to post or e-mail with further questions; I'll be happy to reply with what I know.
Fri 14 Mar | B# | Brent Which begs the question: 'Do you have a link to your book(s) or article(s)? Thanks
Fri 14 Mar | Jeff Linwood | I can add a little to Brent's (I've co-authored a software programming book, and I've done some technical reviewing/editing on books). Usually for software writing you haven't written the book before you sell it, because when you sell it, it will have to match the publisher's guidelines for the series, their formats, etc. The publisher (through the acquisitions editor) will sort through all of the proposals, try and figure out what book people will want to buy a year or a year and a half from now, what the competition is, that sort of thing. I've never met my editors, it's all email and phone calls. It's a really crowded field though, so you'll have to come up with something original, of course, if it is too new, no one will want to buy the book, and on and on.
Fri 14 Mar | Jeff Linwood | Generally speaking, proofreaders and technical editors are assigned, you probably don't get any real control of the title or the cover or the layout, as each publisher has their own styles and covers already (maybe O'Reilly lets you pick the animal)
Fri 14 Mar | Danil | Mark Pilgrim's solution was to blog his book.
Fri 14 Mar | wannabe writer | What about copyright issues? Isn't it possible that when the publisher gets the mauscript he can say no to you and start working on a similar book. What can I do to prevent the publisher to steal my idea?
Fri 14 Mar | e | Realistically, that's a risk you have to run, unless you're dealing with fiction, where it would be easier to establish that a creative idea was actually stolen. Publishers get 1,000s of ideas and submissions, mostly from people who grossly overrate their writing ability and the likely prospects of their proposed book. Philip Greenspun has a very perceptive comment, based on his own publishing experience: he realised that publishing is a business that exists to pay the wages of editors, managers, designers and book sellers, not authors.
Sat 15 Mar | Stephen Jones | ---'Isn't it possible that when the publisher gets the mauscript he can say no to you and start working on a similar book.'--- Mail a copy to yourself and leave it unopened. Many countries such as Spain have official registries. Remember that you as the author represent a small part of the total cost of the book. It's too much trouble for an editor just to steal your basic idea, and anything else opens him to a charge of plagiarism.
3 Forgetful Ladies | Thu 13 Mar | Bob
Alright, I should say taht my mother didnt let me laugh of old people, but the idea is still... an idea (if its not a funny joke). Actually its 2 ladies: Lady1: Lady2, are you going to the fruit market? Lady2: No, Im going to the fruit market. Lady1: Oh, I thought that youre going to the fruit market. (Sorry about the naming... :)
Thu 13 Mar | B# | Those 'ladies' wouldn't by any chance represent something else, like... say... Pints of Guiness? Would they?
Thu 13 Mar | Marcos M. Rubinelli | This reminds me of a mathematician trying to tell a bedtime story: 'Let there be a wolf W and three pigs P1, P2, and P3...' And I'm sorry to say there is prior art, so you won't be able to patent this joke. The differences are cosmetical: they are male, one of them is going to fish, and they have hearing, not memory problems.
Thu 13 Mar | Bob | I should add that the above discussion took place in fruit market... It wasn't about joking, I referred to what Joel wrote about his bank's slow web site, that he feels like an old forgetful lady. I wanted to add a different kind of forgetful lady. Joel's ladies want to take out the trash or to go to the grocery, but my ladies are here to talk crap, or anything. People like crap, heat, hate, and sometimes a good laugh too. That's why they go to Slashdot, I guess. But Joel didn't want that.
Fri 14 Mar | Li-fan Chen | In times of bad economy do you guys suppose the agencies have all the advantages? They seems to be the only one promising to be able to sift through thousands upon thousands of resumes no one can read through. Sometimes I feel so bad for these poor companies in desperate need to sift through the hay that I wish two paragraphs, 8 frames of powerpoint, or a 1 minute video is all job seekers ever submit. -- David
Fri 14 Mar | Duncan Smart | What on earth are you all going on about?
Sat 15 Mar | Bob | I don't know if David's post was related so much, but I was talking about Joel article Building Communities with Software http://www.joelonsoftware.com/articles/BuildingCommunitieswithSo.html
MyYahoo alternatives | Thu 13 Mar | S
Ive been using http://my.yahoo.com for getting my morning news but lately it has gotten pretty bad. Before, when I logged in to Yahoo Messenger, it automatically logged me in to myyahoo. Now I have to do it in 2 steps. Also whenever I start a new browser window, I have to log in again. More recently, lot of their news links dont work. I have also noticed that many times the stories dont match the images they show. Anyone can recommend another web portal I can use for my news? I need World News (not just US), Canadian News, Hockey News, Stock Quotes for the symbols I am interested in, and Motorsports news. The rest is gravy. Thanks
Thu 13 Mar | Nathan | i've started using http://news.google.com/ and i've been very happy with it. i'm not sure if it would fit your customization needs though...
Thu 13 Mar | Prakash S | I second google news ++ keep listening to EDGE or MOJO Radio:-) for the hockey:-)
Thu 13 Mar | Bob | http://www.myway.com that is.
Thu 13 Mar | pb | Are you using the Same My Yahoo that I am? My Yahoo will save your log in so you never have to. And I've never seen a bad link to any of the news stories.
Thu 13 Mar | S | Well I am using http://my.yahoo.com I just noticed the bad links are for any Canadian news and not for others so that's probably why you have never seen it. It used to work fine. As far as the loging in is concerned, I see that if I click on th e 'Remember my ID & Password' then you don't have to log in ever but I don't like that. It used to work with messenger. If I signed out of messenger (when I go home or if I signed on somewhere else) than I would be signed out here. That prevents people from reading mystuff. Maybe I should contact yahoo and complain. Bob, thanks for the MyWay link. I just tried it and it looks pretty nice (well almost a carbon copy of my yahoo). Unfortunately, no Canadian news source. :(
Thu 13 Mar | RocketJeff | >>Maybe I should contact yahoo and complain. I'd demand my money back...
Thu 13 Mar | Tim Lara | It's not really a portal - it's a search engine - but I though since people mentioned Google's news, I would mention http://www.daypop.com . It indexes weblogs as well as news sites, and it works extremely well for me...Their 'Top 40' list is usually pretty interesting, too.
Fri 14 Mar | pb | Do you have any examples of bad links? I'm not sure how you expect to be automatically logged in without having some portion of your credentials saved.
Fri 14 Mar | S | Here is an example, In the section 'Top Stories: Canadian Press Association' if I click on the story 'Canadians could be deployed with U.S., British forces in Iraq War', it is supposed to go to this link http://ca.news.yahoo.com/030314/6/s7jb.html but it always brings you to this link instead http://news.yahoo.com/ which has nothing to do with the story I am interested about. RocketJeff Yeah I want my money back!!! :-) Nah what I meant to write there was not complain but let them know of the bug. I finally did yesterday but haven't heard back.
Sat 15 Mar | Mike Sivertsen | A do-it-yourself portal I've been using for several months may be an alternative: http://www.mypip.com/. You set the links yourself and can rearrange content as needed. Also possible to share your portal page with others.
How do I make a forum like this one? | Thu 13 Mar | Antonio J. Galvan
Im favorably impressed with the architecture of the present discussion forum. I believe such scheme would suit a quite small forum Id like to get started, I wondered which of the free web based forum implementation services would allow me to most closely emulate the Joel on Software forums. Should such prospect be impossible, which tools would help me get the job done? Many thanks, Antonio
Thu 13 Mar | Patrik | Over in this thread http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=32302&ixReplies=9 there is a discussion of free forum software.
Thu 13 Mar | Frederic Faure | Just one PHP script and some space on a MySQL server: www.johnsadventures.com/backend/DiscussionForum/APHPDiscussionForum.html
Thu 13 Mar | Li-fan Chen | Create a table of users (email, full name, survey, date added, status, source ip, cookie) Create a table of forum listing ( questionid, forum question, forum owner first name, forum owner last name, date added) Create a table of storing the non-branchable threads (questionid, answer, full name, email addr, Use the users table to automatically flag jerks for easier moderation. Use the forum listing to list the questions at the beginning and to store the questions when users pick a question to see the stream of thoughts just do: select full name, email, answer from table answers order by date added where questionid = question id of the quesetion picked To ensure people don't see your email just use an emailid and reference a emailid -> emailaddr table It won't be as pretty as this forum right away.. but that's probably how you would do it at first try.
Thu 13 Mar | Li-fan Chen | Additional features provided by this discussion forum is the ability to disable messages or even entire question/answer associations to keep the chats on topic. So you just need an inactive/active status flag I don't know if this feature exist or is even useful, but I suspect that there's a karma count for this forum engine. Internally for reporting purpose you might have a karma count which is calculated from who gives really good answers so in a administration enabled page moderators can mark a thread as good question.. and any given answer as good answer.. and your karma point increases internally.. that way a new moderator would know who is okay to ban or not. Other features that make this forum non-trivial is an ability to automatically flag troublesome posts.. there need to be a way to determine whether people are just trolling and causing trouble (otherwise the moderator would have to read every post) I guess you could write a little bayasian filter to highlight trolls automatically... You need to clean up the input to prevent answers from popping up ads for readers..and other stupid stuff like that.. without making it too difficult for user to submit legimate data like programming code and URLs.. So if you want to successfully replicate this forum, YMMV
Thu 13 Mar | Li-fan Chen | There has to be some anti-idiot proofing too, you have to ensure that you don't accidently allow reclicks (click back, click submit again) to cause duplicate messages to be submitted in response tot he same question. Okay, I made my point.. it's both easy and hard to get it working exactly like fog creek's. But the hardest part is having enough people show up. The net's filled with trillions of very very very quiet forums... even those forums backed by thousand dollar award winning software..
Thu 13 Mar | SC | 'Create a table of users (email, full name, survey, date added, status, source ip, cookie)' What is the field 'survey' used for? Also, Discuss@JoS doesn't seem to associate any status with users. User details are transient and coupled tightly to the post so there is little need for a user table. Hence, wouldn't it be better just to have two tables - topics and messages?
Thu 13 Mar | Joel Spolsky | you only need one table, for 'posts'. Some posts have parents (those are replies). Posts without parents are top level posts.
Thu 13 Mar | Chris Tavares | Not being a database guy, I've always wondered something - do you store the actual text of the post in the database as well? If you do, how do you define the field so that you aren't arbitrarily limited on the length of posts? Or do you just set some limit with VARCHAR(1024) or whatever?
Thu 13 Mar | Joel Spolsky | most databases have a variable-length, long text data type. In Access it's called MEMO, in SQL Server it's called TEXT. The record only stores a pointer to a separately managed area of disk.
Thu 13 Mar | Li-fan Chen | It's really gross but some people join up the varchars with limits. So a really long 8000 char message would store as 8 rows in a varchar(1000) field. And you use a helper function that grabs them all and join up the function. It's another way. Joel thanks a question table is unnecessary for this simple example :)
Thu 13 Mar | Li-fan Chen | EmailIds -> Emailaddrs are also unnecessary if the session remembers the userid.. this is only useful for multiple emails and the like..
Thu 13 Mar | | ...but it's the, erm, interesting mix of posters who really make a board. Amazon should sell them prepackaged. 'Grow your own forum pack - includes in variable quanities: Jaded Programmers, Rush Limbaugh Listeners, Out Of Their Depth Schoolkids, Semantic Argument Bores, European Lurkers...'
Thu 13 Mar | anti-troll | ...and unnamed trolls with axes to grind.
Sat 15 Mar | | damn, you got me!
Cross-platform options? | Thu 13 Mar | LC
I thought id post this here, since we seem to have intelligent people reading :) First the groan: Weve just spent a good 6 months on the lastest upgrade to our web based application, using Microsoft IIS and ASP to deliver an application in Microsoft Visual Foxpro. Now marketing tells us that is great, but could we convert it to run on Apache as well - by which I suspect they mean Apache on Linux... Now the question: I really dont want to have to have 2 totally different applications. Id like a common application (at least at source level) to maintain all the business rules etc. What are the real options for building cross-platform web based applications? What languages exist that I can build a rock-solid application in and then compile it to run on Win2000 and Unix (Linux) boxes and serve them up on IIS or Apache or whatever? Has anyone actually tried doing this? All (sensible) opinions welcomed.
Thu 13 Mar | Canuck | Java
Thu 13 Mar | Walter Rumsby | Is ChilliSoft ASP still around? I think Sun bought them, but essentially it is supposed to allow ASP pages to run on *nix servers (possibly as an Apache plug-in). I'm only aware of the product, so I can't comment on how well it performs.
Thu 13 Mar | Matthew Lock | It's Chillisoft is still around but it's called 'Sun ONE Active Server Pages' now http://wwws.sun.com/software/chilisoft/
Thu 13 Mar | Matthew Lock | We build all our web applications in Perl, and they will run unmodified on Apache (linux and windows) and IIS.
Thu 13 Mar | Walter Rumsby | Actually, in answer to your actual question... Java is the answer... although I'm surprised that this even needs to be said.
Thu 13 Mar | runtime | Macromedia Cold Fusion runs on Windows, Linux, Solaris, and HPUX and works with many databases. Cold Fusion is built on J2EE, so you can use your existing J2EE or the bundled JRUN server. You can also integrate Cold Fusion with whatever web server you use, such as IIS, Apache, Netscape, or Sun ONE. If you don't already have a web server, there is a bundled web server built on JRUN. http://www.macromedia.com/software/coldfusion/productinfo/system_reqs/
Thu 13 Mar | Vincent Marquez | perl works, but I dont' think i'm the only one who feels uncomfortable running perl on IIS. We're currently developing a web application that will run on a linux farm, but we develop right off our own laptops. We're using jboss, which is a free j2ee server. I've been pretty impressed so far. Took a while to set it up, but now that its up, everything seems to be running smoothly.
Thu 13 Mar | Frank | I'm surprised you didn't anticipate this. Apart from Java there is also the trusty stalwart, C++ which I have used for my cross platform web applications since 95. Now however I am looking forward to when http://www.go-mono.net/c-sharp.html finish their C# compiler for Linux, then we can use C# for cross platform web apps as well....
Thu 13 Mar | Matthew Lock | > perl works, but I dont' think i'm the only one who feels > uncomfortable running perl on IIS. Who feels uncomfortable about it? Activestate's Windows port of Perl is a great fit with Windows and IIS. It has plug ins for ISAPI, ASP etc. I ahve used it for years in production and it's totally stable. http://www.activeperl.com/Products/ActivePerl/
Thu 13 Mar | Matthew Lock | ...don't just take my word for it http://groups.google.com/groups?hl=en&lr=&ie=UTF-8&oe=UTF-8&selm=392342eb_2%40excalibur.gbmtech.net
Thu 13 Mar | Joe Random Webprogrammer | The replies thus far have missed out a popular and perhaps obvious candidate, PHP Yahoo uses it (but you shouldnt necessarily use it because they do), its simple to learn and get up to speed on.. and regardless of what the Perl enthusiasts say, I somehow feel more comfortable installing PHP on an IIS server than ActivePerl.. besides, the addons cost money for Perl, but the accelerator for PHP is available for free It runs wonderfully on Apache of course, just check Netcraft for the most popular apache module.. its not mod_perl, its mod_php Of course, if its a very large project, you may have problems maintaining the codebase (I program in both Perl and PHP, so I think I know what I'm talking about) and you may also be slightly turned off by having to mix HTML with PHP.. sometimes that can be hard to read (but of course, you're used to ASP, so its much the same thing)
Thu 13 Mar | Walter Rumsby | I'm still thinking I've missed something in the original post - and yes all of the options mentioned above are worthwhile options (there are many cross-platform options as long as your provider is not called 'Microsoft') - it just seems so surprising that someone needs to ask 'what are my cross-platform options' for a web app in 2003.
Thu 13 Mar | Li-fan Chen | You can get Apache to work on both platforms, but only on windows can you plug in ASP.dll.. To get asp.net going you can use the in-development mono on the linux side or what Microsoft provides you on the Windows side. On Apache.. there's mod_gnomebasic or something like that.. as a language engine it is discontinued and no longer particularly pushed by the Ximian development team.. but as a ASP substitution it can almost there but not quite ASP 2.0. Chilisoft or Sun ONE is a little pricy but basically you get all you ever want out of ASP except an environment where you can access COM objects.. I am not sure you can run every com object you want on Linux.. as they are not exactly platform agnostic. The Sun ONE/Chilisoft answer has been either DCOM or rewrite all your com objects and Java-based components. All of the free and commercial ASP solutions on Linux can use the ODBC-substitutions provided by the driver geeks who do it for fun..so you can still connect to a separate SQL Server on Windows NT/2K from Linux.. but your biggest problem is learning how to use a subset of ASP (safe subset) and trying to make do without COM.
Thu 13 Mar | Li-fan Chen | Sun One probably provides a proxy that let's you run out-of-process COM objects on a separate Windows BOX (or VMWare..that's always an option for running Windows in Linux).. and tunnel the responses and requests back to the Unix side of things. There is also an effort to clone ASP .. you write the ASP script.. the tool would compile it to java bytecodes.. and you have access to all the java business logic you can come up with.. and most of the asp code you write acts the same way. I think this is either free or commercial. Don't know the name off the top of my head. All of these solutions are pretty poorly supported (which to me means the number of articles written on using them according to Google) compared to good ol asp 3.0 and the new asp.net. But that doesn't mean you aren't competent enough to reap the benefits of going 'free' or 'near free'. ASP is at the end a very simple wrapper.. you should be able to make the transition as long as you know how to tell whether your projects are using very complex ASP /IIS facilities or not. Another thing to point out.. if you have any IIS filters or processes.. like URL rewriters and all that.. you'll have to find Apache equivalents (mod_perl can do URL rewriting really well--it's actually really famous for its rewriting feature..)
Thu 13 Mar | David Roper | If you're up to rewriting everything I would urge you to look at Python, either using Apache's mod_python or, if you're looking for an application server, Quixote or Zope. Zope is also a good choice if you need to access databases as it has a number of good interfaces (via ZODB) and load balancing (via ZEO).
Thu 13 Mar | Colin Evans | Jave is currently the best choice for reliable and portable web applications. Check out Tomcat or JBoss/Resin for web serving; they are the open-source standards, and both integrate closely with Apache. If you're using FoxPro right now for a DB, MySQL is free and easy to learn and will provide similiar scalability and better stability. Considering that you have an IIS/ASP frontend with a FoxPro database, though, dropping everything and rebuilding in Java is a big risk. You should probably try to figure out why you need cross-platform support, and make clear the costs.
Thu 13 Mar | LC | Thanks guys for your rapid responses. When you are a Microsoft house you tend to lose track of where other solutions are going. I had assumed Java was going to be the most popular solution, but I was looking for some other ideas just to make sure. I was also a little nervious about running Java on an *MS* machine - not sure about stability etc. (I have, like many people, had bad experiences with Java on the desktop). Perl, PHP and C++ were the other options in my mind. I should have mentioned that the VFP components are actually middle tier (business and data access) connecting via COM to the ASP pages and ODBC to an Oracle database. Thus rules out Chillisoft because it can't do COM on *nix boxes. As for why we didn't anticipate this, as I said we are an MS house and this is the first real project where we have moved from the desktop to the web. Desktop software sales are usually arranged by Business units where Windows is fine. When you get to the web you hit IT departments where Windows is the devil. We hadn't anticipated just how strong this hate of Microsoft is - officially 60 % of our clients do not use Internet Explorer (although in practice everyone does) Again thanks for the advice (and confirming my suspicions) Cheers
Fri 14 Mar | Just me (Sir to you) | 'officially 60 % of our clients do not use Internet Explorer (although in practice everyone does)' ROFL!
Fri 14 Mar | drazen | Maybe you would like to look at Delphi+Kylix. Can do Windows and Linux with same code. And is much closer to VisualWhatever then java.
Fri 14 Mar | drazen | And it does SOAP and Webservices on Linux and Win2000 for IIS and Apache.
Fri 14 Mar | Li-fan Chen | Drazen that sounds like a good deal. I don't use Kylix nor Delphi.. how much would an enterprise license cost if you bought a package that can build to both platforms? And is it that much more VisualWhatever than JBuilder?
Sat 15 Mar | drazen | Take a look at Borland homepage, they have pricing info, you can get eval copies for everything. I think that if you buy Delphi enterprise, you get Kylix enterprise in box. Not sure. Delphi/Kylix IDE is much more like MS IDEs. Standard windows app. disclaimer: I do not work for Borland, I do not make money selling Borland stuff.
Supply Chain Management Software | Fri 14 Mar | Prakash S
This is for a friend. He is trying to identify which SCM s/w to buy. It is for medium to large scale shipping company that has offices in various parts of the world. Have any of you guys used any such software? What would you recomend? I2, Oracle, etc are the first ones that I could think of, but want your thoughts and opinion on this. Thanks for your inputs.
Fri 14 Mar | John Burton | The company I work for makes supply chain managment software. I've no idea if it would be what you are looking for but here is the URL just in case : http://www.finechain.com/
Fri 14 Mar | Alex | http://www.sap.com/solutions/scm/
Fri 14 Mar | Mike | http://www.agilisys.com/agilisys_supply_chain_planningS.htm
Fri 14 Mar | Paul | http://www.webplan.com/
Fri 14 Mar | Prakash S | thanks guys! will ask him to look into this.
Social aspects of "world class" developers? | Thu 13 Mar | Bored Bystander
The world class thread intrigued me because someone posted in a bulleted list of attributes there that the best helped others on web based coding discussion boards. Most developers I personally know have no interest in participating in professional tech related newsgroups, or in fact, have no interest in even socializing with other software people. But Im in a backwater with little technology culture so maybe my sample is skewed down in quality. Myself - perhaps I am or am not world class. Id be satisfied with continent class. :-) Ive posted help to others on occasion in response to questions on newsgroups and other places, and I do see the same names appearing all the time on those places as gurus. But even though my schedule is flexible, Ive found that its just no *fun* re-reading repetitive beginner questions, and very often you arent even thanked for or get any acknowledgement for a tip that works. Basically, I see participation in web discussion as an extremely low leverage way to network. It doesnt seem to have any conceivable payback unless you were to literally live in front of a computer for 12 hours a day, 7 days a week. More power to those who can motivate themselves to a high level of effort in this direction but it aint me. So, what does anyone here think - are the best more socially oriented than their less illustrious peers, or is it a wash? And perhaps the greater social tendencies of some leads to a greater sense that the person *is* better - better personal PR, in other words. Just curious what others thought of this.
Thu 13 Mar | Mike Swieton | My specific experiances answering questions people ask is when I'm looking for help, too. Whenever I'm learning something, I tend to ask questions on forums. While I'm reading them, I tend to answer questions I already know the answer to. Once I learn enough that I have no more questions, I tend to visit the forum less and less and answer questions less and less.
Thu 13 Mar | Robin Debreuil | I agree I post/read most when I'm learning something. I don't know about people who spend 12 hours a day reading/posting to a computer being more socially oriented though!
Thu 13 Mar | HeyCoolAid! | As Joel said, great programmers 'Are smart, and get things done'. I can't imagine that spending 12 hours a day reading/posting to a message board is either smart or indicative of getting things done... unless your company is paying you for that... which I highly doubt.
Thu 13 Mar | John Ridout | So that means if I post this I'm not a 'world class' developer, damn!
Thu 13 Mar | flamebait sr. | No, but smart and gets things done does include contributing to CS theory (i.e. certain usenet groups and other scholarly discussion forums, but prolly not here ;) ) and being a resource to the fellow engineers. In school, I loved helping people out because then I'd be sure that I understood something, if I could explain it to somebody else.
Thu 13 Mar | Bored Bystander | Well, the question quickly devolved into discussion of online participation. My bad, I should have phrased things differently. ;-) On the entirely self-serving aspect of board participation, I've occasionally heard urban folklore about developers getting contracts or landing jobs because they were discovered on a newsgroup or discussion board. Flamebait made an excellent point about contributing to CS theory via board discussion and I think that's a social positive that any professional would want to consider. 'Professional collaborate with peers' ought to be a principle of practice in any profession. On the other hand - my opinion only- discussion boards can enourage beginner laziness because the temptation exists to post a question rather than try to search the message base for similar cases in answered questions. I think that's where I get my reluctance to spend a lot of time on boards - the content in a given topic gets very repetitive. The more complex 'second order' or conceptual questions that would be fun to discuss don't tend to get asked that often. On collaboration - I've found that the people that I *don't* want to be associated with in this industry have a 'cliqeuy' attitude and go out of their way to *not* help anyone, either in person or online.
Thu 13 Mar | one programmer's opinion | 'The 'world class' thread intrigued me because someone posted in a bulleted list of attributes there that 'the best' helped others on web based coding discussion boards. ' Hi Bored Bystander, Sounds like you are referring to the post I made in the 'world class' thread. I doubt that most developers who spend a lot of time posting helpful messages on discussion boards do it simply to network, although, I too have heard a few stories where someone was offered a job because of thier online activities. Some people DO get paid to answer questions in discussion forums, however, I believe most probably do it for the following reasons: * He/she has no social life or enjoys the type of social life that an online community offers them. * He/she is marketing something (ever visit the Extreme Programming newsgroup on Usenet?). * He/she is a book author or article writer looking for the next hot topic to write about. * The board might serve as a meeting place. Developer might have formed several offline relationships at a recent industry conference. I haven't visited DevX's newsgroup for quite some time, but when I did do so, I always noticed that the same VB MVPs were always there ready to answer a question or point someone in the right direction. * They enjoy helping others learn to do something they have already mastered. Sometimes a developer is looking for an ego boost and sometimes a developer does it for more altruistic reasons (loves to solve problems using a particular programming language).
Thu 13 Mar |   | Carmack's own wife described him as 'Spock like'. Most questions on this board are gossip and not technically interesting. If you want to interact with world class developers go to where world class developers hang out.
Thu 13 Mar | Patrik | > If you want to interact with world class developers go to >where world class developers hang out. The proxy at work denies ./, so I guess Im stuck here.
Thu 13 Mar | Patrik | Bored, I think its as easy as some people get along and some dont get along. Sometime you come across a working partner that elevates your own skills, so that 1+1 is not 2, but more like 4.So that 2 'continent class' developers can elevate themselves to 'world class' by working together. If you find it worthwhile to socialize with somebody you will be able to, if not your body language will say 'no way', and you probably can not fake it :)
Thu 13 Mar | Bored Bystander | >> Most questions on this board are gossip and not technically interesting. If you want to interact with world class developers go to where world class developers hang out. So where *do* world class developers hang out online? I've gathered that there are forums for particular niches like game development where gurus hold forth. What about other segments of the IT world? Actually, I have gotten the impression that some 'world class' or at least 'major political jurisdiction class' developers do hang out here. Yes, the discussions here usually aren't specific nuts and bolts; but they help me (and I presume others) to understand how software is done in other environments and they illuminate worklife aspects that don't get discussed much in a language or tech specific fora. I'd call this about the most 'serious' board on the web dedicated to SW developers. >>> If you want to interact with world class developers go to >>>where world class developers hang out. >> The proxy at work denies ./, so I guess Im stuck here. LOL! You can't be serious. /. is the equivalent of a few diamonds and flecks of platinum floating around in a swimming pool (or perhaps worse). IE, there are some really insightful commentaries over there but the drift of the discussion topics is usually toward games, free software, and politics interfering with free speech/MP3s/free whatever.
Fri 14 Mar | Patrik | Bored, No I wasnt serious, lame attempt at humor :)
Fri 14 Mar | Just me (Sir to you) | 'discussion boards can enourage beginner laziness' wadayamean 'Beginner', where all lazy pros here dude.
Fri 14 Mar | Simon Lucy | Yes I've got work occasionally because of contributions online. That isn't why I contribute particularly but when it happens its pleasant.
Fri 14 Mar | - Roland | 'A guru has the expertise of a specialist and recognizes that programming is only 15 percent communicating with the computer, that it's 85 percent communicating with people.' Heck, if I only could remember where this quote is from ...
Fri 14 Mar | trollbooth | HeyCoolAid!, some of us are actually working while posting; multitasking. As I write the sentence I am solving world hunger.
Fri 14 Mar | trollbooth | Sometimes a guru will come out of the woodwork and reveal that he has been lingering, was is the case with Bruce Perens and his posts on /. I would consider him world class and yet he still posts to 'useless' messageboards and finds time to interact with others in the community.
Fri 14 Mar | HeyCoolAid! | I didn't mean that one should *never* post to message boards, and I agree that social interaction is a great way to keep up on all the new stuff going on (that we should all keep up with). I just meant that it's probably hard to be a guru if most of your working hours are spent posting messages. Moderation is usually a good thing. ;)
Fri 14 Mar | Srdjan | 'On the entirely self-serving aspect of board participation, I've occasionally heard urban folklore about developers getting contracts or landing jobs because they were discovered on a newsgroup or discussion board.' It is not just urban folklore... My friend got involved on some newsgroup five years ago (while living in Serbia). Somebody from South African software company saw his posts, contacted him directly and, after phone interview and small test project he packed up things and moved there...
Real World Metaphore | Thu 13 Mar | Benji Smith
In a continued effort to explain what I do to my dear spouse, Im looking for a good metaphor to explain the concept of finite state machines. Im currently writing a FSM implementation of an XML parsing engine (for a relatively new programming language that doesnt yet have a native XML parser. Also, projects like xerces are way too big for my needs). I think its an interesting project, and Ive been telling my wife little bits and pieces of why Im doing it, but when she asks what is a finite state machine Im at a loss for an easy way to explain it. Its easy to explain a stack because you can refer to the salad-bar-plate-stackers. And its easy to explain a queue becuase its exactly like the way we line up for tickets at the movies. And its even possible to explain the structure of an XML document, because I can show an example document with for a bookstore with and and tags. But Im having a hard time thinking of a good real-world example that I can use to explain how a finite state machine works (and why youd want to use one). For some reason, it seems like the perfect example just at the tip of my brain, but I cant quite find it. I want to say a telephone is kind of lika a FSM or a tv set is kind of like a FSM but they arent. Any ideas? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | just guessing | </b> How about a soda machine? Each coin/control moves it to a different state, generates output, etc. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Joel Spolsky | </b> model train set? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Matt Kennedy | </b> Board Game? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Martha | </b> I saw an explanation somewhere that used an automatic transmission as an example... </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Marcos M. Rubinelli | </b> What about a garage door with the input coming from the garage opener? That's how I learned about FSMs at college. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | B# | </b> Etch-O-Sketch? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Philo | </b> BURMA!!!! Oh sorry - I panicked. Philo </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Doug Withau | </b> How about a magic house of rooms. Each room has many doors, all one way. Every door has a light above it. When the light goes on (an event) you go through the door (state transition) into a new room (state). It is magic because you can go through a door and be back in the same room. You can extend the metaphore by claiming that each room has a machine that lets you do one and only one thing. By moving through all of the rooms, you get work done. No hallways ;-) </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | shrinky | </b> Elevators? States; - FloorX, if it is available and on a given floor (X) - Out of service (with an optional floor modifier) - Reserved for movers (again with an optional floor modifier) Further, if required; - On the correct floor, and available, but doors are closed You can make it as simple or complex as you want. For further credit, the reader may explain the difference between Mealy and Moore machines using the button and floor lights ;-) </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Finally Stopped Monologue | </b> I'm just going to be a pain here. Why are telephones and tv's not state machines? Phone is off. State 1. Turn phone on. State 2. Press a number. State 3a. Press six more numbers. States 3b through 3g. Pressing the power key (cordless) returns to state 1. Perhaps anytime an object looks, acts, feels, or smells different than it did yesterday, there's an FSM lurking in the shadows? I'm thinking of an FSM involving personal hygiene and showering, but that's best left for another time. Thanks guys, now I can't stop thinking about this. Decidious trees? Venetian blinds? My pen & pen cap? Oooops, now I'm late to go home, so moving to the 'Late to pick up girlfriend' state, my internal Mealy machine reveals that a move to that state requires that I press the 'Post Message' butt<end of signal> </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | UI Designer | </b> Washing machine? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Brian Hall | </b> What's a finite state machine? ...sorry, someone had to make it their reply, so I decided to be the one ;) </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Tom Payne | </b> Traffic lights? Simple state changes are juat the lights changing colours. Throw in a pedestrian crossing where the pedestrians have to press a button to make the lights change and you've got My First FSM. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Benji Smith | </b> Good replies. I've thought through several of them before but none of them have quite satisfied me, since one of the most important aspects of a FSM (at least, as far as I've always thought) is the fact that the states are controlled by the system itself, rather than by an external actor. A train set, for example, seems to fall short because the train just zings around on a predefined series of tracks. Even if there are switches and track junctures, the train doesn't take them because the train has no mechanism of flipping the switches itself. An external actor has to flip the switches to change the layout of the track. And even if you have an external actor (someone playing with the trainset), that actor still needs to operate on a set of criteria that can be used to decide when to flip the switches. Telephones and soda machines both make sense to me as FSMs, but the differentiation between the different states may be a little too obscure to explain to a non-technical person as different states. Oddly enough, my favorite example so far is the 'person wandering around in a house with magic doors' example. Even though it's certainly not a real-world example, it illustrates the idea really really well. Also, a stoplight doesn't quite do it for me, but a 'stoplight with cars and a pedestrian' is good. Keep em coming. This is fun. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | HeyMacarana | </b> What about a turnstile? Those things where you have to drop money into before you can pass to get into the subway? 1. The initial state is locked. 2. When a token is placed into the turnstile, it is then unlocked. 3. After the person passes through the turnstile, it is then locked. 4. If the person pressed the ticket button before passing through the turnstile, then a ticket is printed after the person passes through the turnstile. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Beka Pantone | </b> I was explained FSMs in Uni using the vending machine analogy, I found it easy to understand. I guess that the fact that I still remember the theory behind FSMs some 20+ years later proves the analogy to be effective. If you have trouble explaining an FSM without being explicit about how FSMs are implemented (by a computer program, electronic vending machine or whatever other means) then use graphical representations of abstract concepts. Draw simple graphs, define nodes as states, say things like 'so when I pop 25 cents into the coin slot, this is what happens', draw state transitions. Start with a very simple vending machine, one in which all items cost 2 euros and doesn't give change if you put 7 in. If the state machine is simple it will be easier to represent graphically, easier to understand and therefore the analogy will be more effective. FSMs are nothing but an _abstraction_, since FSMs are abstract concepts it's very unlikely that you'll find some particular mundane object that embodies a FSM, so analogies are just as good as you can make them be. Methinks... </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Lurker | </b> Did anyone else read those 'choose your own adventure' books as a child? For example: As you sneak into the room, a big horrible zombie lumbers out of the closet. Do you... ... bash the zombie on the head (turn to page 17) ... run screaming (turn to page 42) The formula is something like: - Get input (a big horrible zombie) - Make decision (run or fight?) - Change state (goto page 17) - Generate output (page 17: the zombie had two heads so it gobbles you up!) This seems quite FSM-like to me. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Penguin | </b> Oh dear the radio's exploded... </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Fri 14 Mar | Robin Debreuil | </b> I once programmed a Survivor paradoy tournament. The concept was really simple, there were 16 contestants, they come on in pairs and gave reasons you should spare them. Then a shotgun appeared and you shot one. The winner moved to level two, which had eight 'survivors'. They sometime refered to each other, hit each other, etc so the animation would change slightly for things like 'he or she', black eyes, clothes etc. I thought it would be really easy to brute force method, but it was crazily hard! Then between that project and the sequel I learned about state machines... bingo! The sequal too about a day instead of two weeks. So things like tournaments. When you hear the announcers saying 'if the Packers win and the Rams lose, the Titans will play Dallas at home', that is an easy to understand state machine at work. Of course if your wife is like my wife, explaining with a football metaphor might not make it easier : ). </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Fri 14 Mar | Ged Byrne | </b> I always think of a finite state machine as being like induction day at college. At my college/university you had a big hall full of tables. Each table had a person with a box full of cards and stuff. Before you could do anything else you needed an ID card so you went to the ID card table and they gave you an ID. They you could go and collect the keys to your room, or enrol on a course. Each table is like a state, and when at that table you are dealing with specific task. Some tables require you to have already visited another table (such as needing you ID card) I think this example also shows the benefits of using FSM. Trying to handle everything at once would be a nightmare especially when youve just moved away from home. Thankfully, you only need to worry about one table at a time and the options for you next action are always clear. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Fri 14 Mar | jharkins | </b> I'd use cooking as an example of an FSM. First your in the 'what's on hand' state. Then move to 'find recipe'. Following are 'accumulate ingrediants', 'prep', 'suate veggies', 'brown meat', 'add meat to veggies'. You can add stuff like 'not enough chicken, return to find recipe state'. I knew all that cooking I did would come in handy someday :) </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Fri 14 Mar | anon | </b> How about one of those programmable car radios. Each time you press a button, it goes to a new state. If you like to talk about hierarchical state machines, you can toss in the band selection button. If the band tuner is set to AM, it's one group of states, FM is another group, and FM2 is a third group. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Fri 14 Mar | Robin Debreuil | </b> ...or how about having her explain why she would say yes to a question when she was happy, and no to the same question when she wasn't? Is it the same person? We even call that 'emotional state'. Probably easier to relate to than football anyway. </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33994' title='View item'> record not found error - error?</a> | Thu 13 Mar | na</td> </tr> <tr> <td bgcolor='#FFFFCC'>kinda philosophical question: how do you handle / interpret a record not found in a business-object? lets say: GetBook(ISDN = 1984-666-111-777) do you count it as a bug? basically you assume the record is in the db but in reality its not. so its an error. do you count it as a normal thing => user search for a book which has invalid id (so its not a bug, because the function correctly identified that there is no such a book). should we use exception? what is the exception here? a search with no result? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Big B | </b> If the assumption is valid that the book your're looking for is always there, then I would raise an EBookNotFound exception with the ISBN as a parameter. If the ISBN number was entered by a user or otherwise not guaranteed to be there, it can be expected that some books will not be found, and depending on your language and programming style, you might choose not to raise an exception. Inspired by the runtime library of my favorite language, I would call it GetBook in the first case where an exception is raised in case the book doesn't exist, and FindBook in the latter case, and use a return value to indicate whether it was there or not. It's really a matter of style, but this seems to work pretty well. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Justin | </b> Do you intend to validate the ISBN number format, length etc. If so, as part of that process, do you intend to check that it is a valid number, possibly using Big B's FindBook method? I know absolutely nothing about ISBN numbers. Can they be validated using an algorithm (like a credit card number) ? Of course this only tells you if the number is valid, not that it exists in the database. I agree about it being an exception, rather than an error (assumptions made). </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Justin | </b> Sorry, I got distracted while writing that and forgot you were only using books as an example. :( </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | DJ | </b> I agree with Big B - it depends on the context. I would say your Getxxx function should return a status or return code Found / Not found (or even a null object) An real error would be something unexpected ie type mismatch, connection lost etc. Low-level data routines do not have enough business rules to determine if a missing record is a fatal error or not. It would be up to the calling object to determine if it is a problem or not. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Fri 14 Mar | anon | </b> All depends on what you advertise as your assumptions. If your GetRecord assumes that the record will always be there, then you should document it as such, and then also provide the caller with a FindRecord method so the assumption can be checked prior to the call to GetRecord. If the caller invokes GetRecord without checking the assumption and the record is not found, then that is an exception - the caller violated your assumptions. If you decide that GetRecord should not assume the record will always be there, then you should return null or a NullObject (see: http://www.cs.oberlin.edu/~jwalker/nullObjPattern/) to indicate that no record corresponding to the key was found. My personal preference is for the latter design because it introduces less overhead, but purists probably would lean toward the former since GetRecord could not be used as a proxy FindRecord method by callers. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Fri 14 Mar | Peter Ibbotson | </b> It depends, if this is part of a collection, then do whatever your language does naturally. IIRC VB throws a bad parameter error if an item isn't in a collection, but VC++ expects the caller to check result code. However in .NET the system.Collections.SortedList.Item property returns nothing if it's not found. We did all of this a while ago in VB adding a wrapper layer around a more traditional ISAM database. So we had stuff like: Set ThisCust=Thing.Customers('BILL') do while (ThisCust is Nothing)=false ThisCust.DoStuff Set ThisCust=ThisCust.NextCustomer loop The initial set would fail as per VB via an exception but the next customer property was much more friendly and would return nothing. You could use 'for each' but then you never get a chance to set the initial start point so we needed a simple iterate function. </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33974' title='View item'> CAMEL: The morning meeting</a> | Thu 13 Mar | Philo</td> </tr> <tr> <td bgcolor='#FFFFCC'>Heh. Im gonna make a project of keeping you guys posted, since this looks like its going to be a fun ride (that is, if youre interested). I chose CAMEL as the tag: http://phrases.shu.ac.uk/bulletin_board/6/messages/552.html So we got together with two senior managers yesterday morning to talk it out. It was actually fairly amiable - there was definitely a lack of communication on both sides (we didnt keep them posted as to what we were doing in the week we decided to take the bull by the horns on this project). There were also personnel issues - the three senior architects (myself included) have only been in this office for about two months, while others have been here for years. Some of them complained to management that we were off doing our own thing and having secret meetings and leaving them out. From our point of view, we were knuckling down and simply getting things done. So the net result was that this morning we had a meeting to present the organization methodology to the team (14 people). We are now going to move forward by having everyone review the requirements as entered and keep track of any comments they have. On Monday were going to get together again (all 14 people) to discuss all the comments. Yes, its more important to keep everyone happy than to pursue a project plan. Philo </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Just me (Sir to you) | </b> I'm looking forward to this story unfolding. Thanks for the update Philo. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Prakash S | </b> keep the stories comming Philo. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Anonymous Coward | </b> 'A camel is a horse designed by a committee.' Sir Alec Issigonis (1906 - 1988) British automotive engineer (designer of the Morris Minor) </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Mark Hoffman | </b> Keep the reports coming, Philo! </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Fri 14 Mar | Philip Dickerson | </b> I think you were using sarcasm when you stated: 'Yes, it's more important to keep everyone happy than to pursue a project plan.' (It's a little hard to tell from the text of your note.) However, there is actually a lot of truth in this statement when read without any sarcasm. It's important to make the effort to mostly 'keep everyone happy' as well as 'pursue a project plan'. This is something many engineers (including me) either have trouble with or aren't even aware of the issue. For example, it's fine to have meetings with only a small group of people to decide designs, architecture, etc, but the decisions, reasons for them, technical issues, and even the as-yet unresolved questions need to be conveyed to and discussed with the rest of the team, almost immediately and frequently (responding to any criticisms, accepting any suggestions, explaining choices that were made, listening to suggested alternatives). Early in the process this needs to be done face-to-face, later it can be mainly emails, discussion forums, etc still with occasional meetings. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Fri 14 Mar | Philo | </b> Philip: Agreed on keeping everyone informed and maintaining morale as much as possible, but not to the detriment of the project. People don't get to take roles or join teams just because they want to (let's face it - *everyone* on the project wants to be an architect). If a developer cannot work productively doing what they're assigned to do, then they need to leave. For example - one team here has to work with implementing an EDI solution. I've just spent the last year living EDI on another successful project. I let the team leader know that, then I shut up. I have no idea what the status of that team is, but I'm not worried about it - if he needs my help he knows where my desk is. I am most certainly NOT going to run to management whining that I should be on the EDI imports team. Philo </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Fri 14 Mar | Nat Ersoz | </b> (let's face it - *everyone* on the project wants to be an architect). Of course they do. It will be a cold day in hell when I code something that someone else 'architected'. Likewise, if I have to write the spec, then I might as well spend the remaining part of the day writing the code. I can then go home and call it all 'done' - AND take responsibility for the remaining bugs that ensue. This kind of goes back to the notion of specialization (previously discussed). Based on what I've read in this thread, I'd be inclined to give you enough rope and watch you hang yourself - a trick occaisionally used when someone is playing power politics with the code base. </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33838' title='View item'> Once you go laptop-can you go back???</a> | Wed 12 Mar | razib</td> </tr> <tr> <td bgcolor='#FFFFCC'>Hey alls, I just had my laptop tweak out for a week (power cord was messed up), so I had to use my backup desktop. It was really difficult since I didnt have freedom to sit where I wanted too.... Now, right now I telecommute, so this is not a big deal. But have any of your had experiences where you had to switch from a laptop to a desktop, could you handle it? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | pb | </b> Considering tha desktops are superior in nearly every way, yes. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Eliezer | </b> I just got my first laptop... and I'm spoiled. This things may be more expensive, but they sure are worth it! </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Mark Hoffman | </b> Desktops are superior in every way? Really? I wasn't aware of that. How about mobility? As a consultant, I move around from client to client. A laptop is critical. Even if I weren't moving around, I really enjoy the ability to take my work with me anywhere I go. The only drawback for me is that I can't get a really good graphics card for them. I've got the GeForce 4 GO chipset and it's pretty darn sweet for a laptop, but it still doesn't compare to something like a GeForce 4 Ti-4600 or Radeon 9500. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Brent P. Newhall | </b> I got my first laptop several months ago. It's been a fabulous experience. Now that I can use the computer from anywhere in my house, it seems like the most natural desire in the world. I dislike being tied to a desk now. I love being able to hack away at my website, or work on writing a book, from a coffee shop if I want to. I also appreciate the design that goes into a laptop. The laptop manufacturer must think about keyboard design, ergonomics, and other issues that a desktop maker doesn't. My laptop is a well-designed package, rather than a bunch of components that may or may not fit together well. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Robert Moir | </b> Personally I hate using laptops unless it's a special case where their good points come to the front, I find them much less usable than desktop PCs on the whole; keyboards much less comfortable, I can't get the screen positioned just right, etc. They are good for space saving and mobility and that's about it. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Bill Tomlinson | </b> Well, I'll go for the opposing point and say that, aside from mobility, you just can't beat a really good desk bound environment. And I say environment because in addition to purely computer issues (like faster disk drives (4500rpm vs 10000rpm?)) I'm including: really good keyboard, mouse, good chair, good adjustable desk, perfect lighting, multiple monitors, plenty of desk space for printouts and books, etc, etc, etc. Well, my point is that, sure, it's nice to sit under a tree while answering some emails, for day-in, day-out, hour-after-hour programming I want my heavily customized work space. And under a tree or a conference room or the kitchen table just doesn't cut it. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Mark Hoffman | </b> Oh, one more thing....there is something to be said about having a laptop and a wireless internet connection in your house. Normally, when I'm at home I work from my office. However, there are times when I want to go upstairs to watch TV and answer emails, or work in the den while keeping on eye on my son crawling around,etc, etc. Being able to take my laptop around the house and stay connected is quite convenient. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | William C | </b> I'll definitely buy laptops for the rest of my life. 'I can't go back!' Am I missing something, but I don't think that a few issues have been brought up: 1) You CAN get laptops that are just as fast as desktops. I think they are as fast. With Alien Ware and Saeger (sp?) you can get laptops that use the Intel P4 processors (read: NOT the Intel P4-M's). Maybe they are not ... as fast ... but quite close. 2) Just because you have a laptop doesn't mean that you can't plug it into a docking station (which I got included free with mine) so that you can use any mouse, keyboard, or monitor that you want. So I don't buy that argument. So now, I have a situation where I can get a laptop that is pretty much as fast as any desktop machine, I can use any mouse, keyboard, and montior ... AND ... I can get mobility too! Seems like a no-brainer. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Mike | </b> 'Desktops are superior in every way? Really? I wasn't aware of that. How about mobility?' I'm a big strong strapping young lad. I tote my minitower everywhere. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | William C | </b> I second Mark Hoffman's comment about the laptop with wireless. Many times I find myself at my desk coding, and then I get up and move onto the couch to read email/surf the web/watch the tv. I move from room to room on many occassion. Just last week I was at my kitchen table watching a DVD on my laptop while eating my Cheerios. Mmmm...laptop with wireless...droooool. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Bill Carlson | </b> I can't go back either. Fortunately, I have small hands, which helps. Even though many laptops have 'full size' keyboards, the keypress travel distance is less on a laptop keyboard and this sometimes bothers those with larger hands. One irk though, is the unavailability of trackpoint (the eraserhead in the middle of the keyboard) on most laptop brands. I'm hooked on my Thinkpad's trackpoint and wince when having to use a touchpad. Also, it should be manditory that all laptops have some hardware equilivalent to a wheel mouse. For 95% of applications, even a low end laptop is capable enough. $1500 gets a pretty nice system. They're almost disposable... </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Mark Hoffman | </b> 'I'm a big strong strapping young lad. I tote my minitower everywhere. ' Hehehehe...Back in the day when laptops were inferior to desktops, I remember hauling my 486DX (monitor and all) into my car every weekend so I could work on a project with a friend 100 miles south of here. (That was also in the day when hard drives didn't handle being hauled 200 miles every week too well. Backup software was my friend.) </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Dr. Super | </b> The best thing about laptops and wireless is that you can take a big crap while enjoying this forum. In fact, I'm producing some massive business objects right now, as a I write this post. Hold on... time for a core dump! Okay, now let's do a System.gc(). </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | William C | </b> Why is it that I'm 31 and doody-humor such as Dr. Super's has me laughing out loud! I tend to not bring the laptop into the bathroom. Although, as I'm sure everyone here can attest, I use that place for some of my best ideas/algorithms. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Daniel | </b> Ten minutes later. Still laughing. :-) /Daniel, Stockholm </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | trd | </b> I have a laptop since ages. It isn't the fastest computer money can buy but it is suitable for 95% of the tasks I do. When I need more power, I just connect it to the office LAN and remotely open a session on one of the servers. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | | </b> If they made laptops with a 21' screen, large keyboard, and a good mouse I wouldn't mind using one. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | William C | </b> So what is stoping you from plugging your laptop into your docking station and using a 21' monitor and the keboard and mouse you like? I thought I brought that point up already. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | raindog | </b> Once you go iPod -- can you go back to a stationary stereo? :-) </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | William C | </b> To play devil's advocate (as I am a laptop fan), the only negative I can find about being a lap-top consumer is the price. I'm supposed no one brought this up. Obviously the desktops are much, much cheaper for the same speed/power. But, I'll be happy to spend the extra for the convenience. It is worth it. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | flamebait sr. | </b> I like a cheap laptop and a good desktop, if it's my money. At home, this works fine. My laptop can be used to access my MP3 collection, my various files, websurfing, etc. For hardcore work and gaming, I switch to my desktop. At work, we are issued laptops, monitors, keyboards, and a port replicator. Which works fine for the most part. The latest laptops are getting pretty good. I love the laptop because I can run both the LCD and the 21' monitor, giving me still more screen space. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Jimmy Chonga | </b> One of the greatest things about laptops is the screens some of them are coming with. Dells in particular are coming with astounding ultra-super high resolution displays that are a godsend to anyone who does a lot of visually cluttered work </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Tyler Soltis | </b> Sorry, the 4500 rpm hard drives in laptops are the ultimate killers of performance. I find laptops frustatingly slow, esp for development tasks like compiling, etc. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Kyle Cordes | </b> For the last several years, I used a notebook PC exclusively. It was top-of-the-line when I got it several years ago, though weak by current standards. As a consultant I travel regularly, and being able to have everything with me has been convenient. Nonetheless, when the time came for a new machines, after extensive thought, I went with a desktop system... but I spent as much on the desktop system as I would have spent on a high-end notebook. I got some pretty nice things for the tradeoff, by far the most important of which is dual 19' LCD flat panel monitors, with DVI video boards. I'm extremely pleased with the new setup, much more pleased than with the highest-end notebooks I could find. Of course, I'll keep the old notebook to travel with; it turns out to be pretty easy to keep the things I really need with me on it, for example in a few minutes I can current source of all the projects I am working on. When the old notebook is finally too slow for that, I'll replace it with a low-end, small, lightweight notebook, which will be far more portable than the mammoth high-end notebook I would need if it was going to be my primary machine. And I won't have to worry about loss or theft of a multi-thousand-dollar portable machine with my entire life stored on it. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Prakash S | </b> Laptop for sure. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | William C | </b> You've got to look at these things with an open mind. Obviously some people here are dead set on what they think is best and filter out all new information (maybe I fall into the same category --- but I still haven't seen a convincing argument). Here are examples of laptops I speak of ============================ This laptop has: * P4 2.8 GHz 533MHz FSB w/ 512KB Cache * 40 GB 5400 rpm HD (not 4500 rpm claim I've seen twice) * 512 MB DDR PC-2100 - Two SO-DIMMs http://www.1shoppingsource.com/alienware/laptops/detail.php?ProdID=Area-51m This laptop has (I am drooooooling, Once my laptop gets to be 2 years old -- I'm getting something similar): * 16.1' UXGA Active Matrix LCD Display * P4 3.06 GHz * 1024 MB PC2100 DDR memory * 60.0 GB (5400rpm) Ultra DMA Hard Drive * TV-Tuner with Remote, Detachable MP3 Player Modular http://www.sagernotebook.com/pages/notebooks/product2.cfm?ProductType=8887&SubType=V Just look at that 2nd laptop I linked to. My goodness that is sweet! It's laughable that anyone here could complain of speed using any one of these laptops. *giggle, giggle* Slow. *snicker, snicker* :) </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Tj | </b> The one thing I could do without is the lack of laptop reviews. But oh god, I am so not a desktop kinda guy. The ergo, power, reliability, and the discrete components of desktops is better, but you can't take it with you. And plus, I like to recline, be on my back or on bed. I just have to be sure I'm not leaning on my elbows or twisting my neck. I can't wait when it finally comes time to get an IBM Thinkpad. I only really care about reliability and good design, and on Wintel that probably means only Thinkpad. Let the desktop chug away at compiles! I probably wouldn't be a programmer without laptops; I'd associate it with too much pain. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Anonymous dreamer | </b> I always want to use the latest high-end 3D graphics card, and I'm cheap, so a laptop is out of the question for me. But I sure do like looking at some of the tiny Japanese micro-laptop designs. They're like little works of art: http://www.dynamism.com/index.shtml </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Stephen Jones | </b> ---' It's laughable that anyone here could complain of speed using any one of these laptops. *giggle, giggle* Slow. *snicker, snicker* :) '---- That's cause they're all desktop processors. The crunch question on speed is how fast can you dive into the swimming pool to cool your parts after using them on your lap after half an hour. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | William C | </b> My friend Dave has a Sager (not that exact model) with a desktop processor and there is no heat problems. Doesn't generate more heat than my compq presario. I remember Dave telling me that the P4's don't generate as much heat as the P3's (optimized to perform fewer instructions?). So much so that they could be used in laptops. Also, don't discount the way these laptops are manufactured (AlienWare touts 'Advanced cooling technology). This was the point I have been originally trying to make. At one time, the latest laptop was inferior to the latest desktop. This is not the case anymore (to an extent .. you wouldn't notice anyway). </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Philippe Back | </b> As I like to have a big screen (like 20'), tied to my desk I am... even if I have a laptop. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Stephen Jones | </b> Desktop P3's had a ).25 micron core. P4's started out with a .18 micron core (Williamette) and then moved on to a .13 micron core (Tualatin) with copper wires instead of aluminum ones. It is this that makes them run cooler, and allows desktop chips to be reliably used in laptops. P3M's originally had a 0.18 micron core and then were shrunk to a 0.13 micron core. They run at 1.1v off mains power and .945v at speedstep. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Bod | </b> Why not have a laptop for working at clients' sites, at home etc, and have a docking station with seperate monitor, keyboard and mouse on the desk at the office? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | John Ridout | </b> I currently user a 'desktop replacement' also known as a luggable and when I next upgrade I'm torn between buying a small form factor PC or an even meatier luggable. The three main issues I think are: am I going somewhere with a nice monitor, how often will I travel with it, and do I really want to sacrafice sitting in the garden with a cool drink and my laptop while I chat to someone on the phone in a stuffy computer room? Hmmm, now about that plan for a garden office... </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | mark | </b> I've been using a Dell Inspiron with a Pentium III for 3 years now, and I have to agree with the 'why would I want a desktop' crowd. You want to talk about mobility? I just bought a Logitech wireless keyboard/mouse combo for it! Combine with an external monitor, and it's the best setup ever. The only downside to laptops (besides their price) is that when certain pieces of hardware goes, you are QUITE screwed my friends. You better hope that warrantee hasn't run out yet! </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Philo | </b> Just look at that 2nd laptop I linked to. My goodness that is sweet! It's laughable that anyone here could complain of speed using any one of these laptops. *giggle, giggle* Slow. *snicker, snicker* :) ****** Compare that to a dual Xeon system with 15k SCSI drives and dual head that can be had for the same price. I've used a dual CPU/SCSI desktop for about three years now, and even P4 - 2GHz boxes feel slow sometimes compared to my dual 866's. The issue is 'what do you do with your computer?' Sure if all you do is read email, surf the web, or write HTML maybe a laptop is enough. But when you've got two development environments open, a bunch of IE windows, SQL Enterprise manager (with SQL Server running on the box), etc, etc, well... that's when SMP and a good SCSI bus make their presence known... Philo </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Just me (Sir to you) | </b> My biggest concern when I switched to a laptop was screen realeste. At the time going back to 1024x768 seemed chalenging to put it mildly. So I looked around for a long time before setteling on a model that had good video-out, external keyboard + mouse connections without needing a docking station. Got a Toshiba Tecra 8100. After the first week I stopped bothering plugging in the external stuff, with the exception of the mouse. I do not want to be deskbound ever again. Now I want a Tablet PC convertible. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Dimitri. | </b> They both have advantages and disadvantages. Desktop advantages: fast, ergonomic, upgradeable, big screens, multiple screens. Disadvantages: not portable. Laptop advantages: portable, doesn't take space, doesn't clutter the desktop. Disadvantages: impossible to upgrade, not very ergonomic keyboard, limited speed, limited graphics. This said, I have one of each. I could therefore avoid the trap of buying a 'desktop replacement' laptop which is barely luggable, and could get a reasonalby light one. Yes, it will get old fast, and I can't upgrade it, but for this I have the desktop (I bought the laptop 1,5 years ago and it is already half as fast as my desktop). In the desktop, I have a real graphics card (eh well... for fast compilations, yes, that's it!), HUGE hdd (two of them, cost almost nothing) - and btw, the 20 gig disk that was top-of-the-line for the laptop one and a half years ago... well - and a rather fast P4. The laptop is great to have. It has built-in dvd/cd-rw, which means I can take it with me and rip&burn whatever music I like. One night on a cross-Europe drive, in a parking lot in the middle of nowhere (Poland, actually), I burned a few cd-s with music from the laptop because I had gotten tired of the cds I had with me. That's cool. Also, with the wireless card, and with broadband at home, you can read mail/browse the web from everywhere. But at the same time, it's nice to also have a desktop that you can upgrade when the next Unreal is released, with huge hdd-s where you can keep everything and so on. I meant next Visual Studio of course... </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | flamebait sr. | </b> Note that the latest crop of fast laptop drives generally have equivelent specs to a the 7200 or even 10,000 RPM SCSI drives a few generations back. I wouldn't want to use them to edit video, but they are great for most 'normal' usages. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | William C | </b> Philo, I'm not an 'html coder', so I do understand the need for speed. I will have multiple Visual Studio IDE's open all the time. I will go through all the same things you go through (past year and a half I've been developing for palm/pocketpc/windows). The laptop I have now is a 900MHz with 320MB RAM and I don't see it getting in the way of any development I do. My friend Dave just got one of the Sager's (I think it's 2.4GHz P4 w/ 512 MB RAM). He got this 3D/graphics/Benchmark thingy from MadOnion.com. I forget the numbers, but if 10,000 was the max -- his laptop was scoring 8,000. We were watching the different graphic intensive tests they run and he was getting 30-40 fps on most of them. That thing kicks butt. But hey, you're going to tell me that when you compile one of your projects on your machine and compare it against a machine similar to my friend Dave's ... that you will notice the difference in compile-times in terms of multiple seconds (not milli-seconds). Well, Great! I, personally, would trade convenience/mobility for that extra milli-second. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Reginald Braithwaite-Lee | </b> I'm writing this on my Tablet PC: I won't give up my desktop PC for writing code, but the Tablet is my system of choice for design and note taking in meetings. p.s. 80211b rocks at home and at work! -- http://www.braithwaite-lee.com </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | William C | </b> Those tablet PC's are so cool. We had 3 in the office just recently (for a project we are working on). I like the handwriting-to-text converter. Very nice. The thing is, those things are more expensive than most laptops! Yikes! </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Reginald Braithwaite-Lee | </b> I'm using the Toshiba 3500, It is more expensive than equivalent laptops, but at least it is also a full function laptop.</td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Mark Hoffman | </b> Philo, On my laptop, I routintely have two copies of VS.NET, at least one copy of TOAD, SQL Enterprise Manager or MySQL Control Panel (one of the three, not all three), a few Terminal Service sessions and a handful of IE windows open. At all times I've got the SQL Server and MySQL services running. My compile times are just as fast as a similiar powered desktop. The only time that super-duper SCSI disk system is really gonna shine is when you are basically doing server type applications, at which point both the argument about desktop and laptop is pointless since we're heading in the direction of rack mounted equipment. I suppose that if you were compiling a *massive* program that took longer than 20 minutes to compile, you would probably see some performance increase with the SCSI on a single processor desktop, but IMHO, even that would be marginal. (But yeah, a dual processor desktop with a screaming SCSI system is gonna be faster, but c'mon..that's not really a typical desktop so it isn't a valid comparison.) </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | William C | </b> uhhh yeah...Mark Hoffman said it much better than I did! :) The thing is, I do have that sneaky suspicion that Philo's comment was more of a 'I'm a real developer not an html coder' put-down (not realizing that I am, by his definition, a real developer). But then again, I don't know Philo. So I could be way off base or just reading too much into it. === Oh and that Toshiba 3500 is cool. I wouldn't mind, as my next laptop, one that swivels into a tablet pc. But with those sager's that I'm eyeing, I'm not sure if that is possible (also I do want the 16.1' screen or bigger -- if by the time I'm looking they get bigger). </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Philo | </b> William - No way did I mean that. I was commenting on the idea that some developers work in a text editor, others use more complex GUI's. This is not an indictment against either method (the only thing that *really* matters is producing a product), just a recognition that one method requires more horsepower than the other. :-) Philo </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | William C | </b> Philo -- sorry about that. I shouldn't have even brought it up. You're cool with me and I'm also insanely jealous of your current set-up (regardless of it not being a laptop :) </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Fri 14 Mar | razib | </b> well, this topic really sprang up. for me, using a laptop is more about the options than actually moving around. for instance, i tend to sit at a desk most of the time rather than lounging about-but, when i'm on my desktop i don't the choice. i think there is a psychological comfort level difference.... </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Fri 14 Mar | Robert Jones | </b> Being new to the whole laptop experience, I have to say that I love it. I just scored an IBM Thinkpad with a 366 PII. Not a great system but good enough to play some simple games, Write PHP, and Run an Apache server for testing. I absolutely adore the ability to go to the local coffee shop and write code. The thing I like the best is the mobility. I have a home office in my basement with my other two PCs and I can't tell you how many times I wanted to just go upstairs and work on things. I don't feel like I'm staring at a cubiicle wall in my own home anymore. I won't be going back to a desktop only situation again. But I still like to play GTA3 on my beefy desktop. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Fri 14 Mar | RocketJeff | </b> One of the main issues with getting a laptop is finding/having a good location for it where you do most of your work at home. I bought a laptop when I started commuting to work by train. It was a godsend for that - I could do work, work on personal projects, play games, etc. The only problem is that I didn't find a good location for it at home - no matter where I set it up, I was always needing to move it (set it up on the table and I'd have to move it to eat, etc). I finally cleaned off a small desk for it and now it's as useful at home as it is on the train. Just clearing off a corner of my normal comuter desk wasn't good enough - I couldn't see the monitor for my other computer with the notebook in front of it (besides almost knocking it off the desk several times as I tried). </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Fri 14 Mar | Li-fan Chen | </b> My main problem with switching on the fly between a laptop and a desktop is mainly: 1) Is the keyboard layout the same? 2) Is your workspace the same.. If you got most of your work files over an VPN from your laptop (accessing your corporate network) that's great because they will probably have the same network mount points on your office desktop. Same thing with outlook. The main problem is finding your bookmarks on one machine and not the other. There's really no reason why you can't love or hate both of your machines :) </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33776' title='View item'> Warchalking</a> | Wed 12 Mar | Joe Paradise</td> </tr> <tr> <td bgcolor='#FFFFCC'>Warchalking is the practice of marking a series of symbols on sidewalks and walls to indicate nearby wireless access. That way, other computer users can pop open their laptops and connect to the Internet wirelessly. It was inspired by the practice of hobos during the Great Depression to use chalk marks to indicate which homes were friendly. http://www.warchalking.org/ Reminds me of IBMs Peace, Love and Linux campaign, where they spraypainted symbols on the sidewalks of San Francisco. That got them a $100,000US fine. What do you think about this practice? Is it legal? A waste of time? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Mark Hoffman | </b> That reminds me...I need to tighten down my wireless LAN at the house... </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Nat Ersoz | </b> Except for the 'chalking' part - that is you are defacing public or private property with graffiti, I would guess that the wireless snooping is perfectly legal. 802.11 operates in unlicensed spectrum. Therefore, no one has an intrinsic right of privacy nor prefered use. Check out http://airsnort.shmoo.com/ I ran this against my wireless lan at home, to see how long it would take for a potential driveway hacker to crack my keys. Well, since I don't typically generate enough traffic - even when someone is playing an online game - it looks as though (extracting from my single night of data) that it would take more than several days to crack my home WEP. Now, if you're a company, well your traffic rate is much higher. Driving around the greater Seattle area yeilds 802.11 beacons galore. About 3 per mile, just driving around at normal speeds with no special antenna - just a Aironet 350 card on a laptop. I read where people go up on hilltops with antennae and point in the general direction of 'down' and can DHCP at will. They don't even know whose network they're on, its a random shot. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Matt H. | </b> Here's an idea: Public Website or napster-like service that lists wireless LANS and distance. (It would be pretty easy to tie this into Mapquest to get directions to the nearest W-Lan and figure out which are the closest.) It could even run over gnutella. hmm. Sounds like a business idea to me, but I fear it's much too much like napster - it's hard to make money by giving stuff away. Plus, how many of those wireless networks actually _want_ roving sign-on freeloaders? :-) regards, </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Prakash S | </b> use 128 bit WEP @ home. no encryption @ school. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Justin | </b> I haven't checked with any of m'learned chums, but I suspect that it's not legal in this country (UK). Recent legislation, the 'Computer Misuse Act' springs to mind. Inciting someone to break the law is also probably frowned upon, which would cover the act of chalking, if not already covered by defacement laws. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Ed the Millwright | </b> Nat, when you said 'you are defacing public or private property with graffiti', I wonder if the fact that it is water soluble nontoxic calcium carbonate (chalk) would matter. Would you favor prison sentences for children playing hopscotch, in other words, and if not how would you distinguish between the two. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Mark Hoffman | </b> 'Would you favor prison sentences for children playing hopscotch' Someone hasn't had their nap. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Nat Ersoz | </b> I wasn't advocating anything. I was merely suggesting that the graffiti part might me the only part that is illeagal. Using water solluble chalk would not be useful, as it would wash away, so I would guess that paint is more common. However, back in the midwest, we cyclists used to paint 'Dan Henrys' (which is a little notation used to mark bicycle routes), and never worried about it. It seems much less common out here, and I was told that if you're caught painting on the streets, you'll be fined. Anyhow, if someone does get fined for painting on the streets, just tell 'em that Ed said it was groovey with him. It'll be fine... </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Ed the Millwright | </b> Nat my man, I did not realize they were using paints. I guess the term 'chalk' threw me there. Yeah I'm with you on this - if someone is out there PAINTING the sidewalks then that is grafitti/defacement and illegal. Since I thought it was chalk, I thought pretty wild to be talking about making sidewalk chalk drawings illegal as if that was common knowledge, which led me to the obvious hopscotch example. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Katie Lucas | </b> It's supposed to wash away - that way the symbols vanish before they get outdated. Admittedly, it therefore works best in California... in the UK the symbols would be washed off before the first packet had been ACKed. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Sam Gray | </b> Matt H: Here's a map of people who do want roving sign-on freeloaders, at least here in the Portland, Oregon area: http://maps.personaltelco.net Of course, this only lists nodes which have been *deliberately* set up to be public, which is a little bit off-topic. (= </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Fri 14 Mar | The voice of rationality | </b> This is old news. When the site went up last year, it hit Slashdot, then the mainstream media (e.g. the Wall St. Journal). Lots of coverage. My gut feel is this is more a satirical web site than a real movement. Despite the fact that I live and work in the high-tech mecca of Silicon Valley, I've never seen such a mark. Whether or not warchalking qualifies as graffiti doesn't even come close to making my top ten list of ethical dilemmas. </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33528' title='View item'> MS Access or MSDE for a new development?</a> | Tue 11 Mar | Sergio</td> </tr> <tr> <td bgcolor='#FFFFCC'>Im about to start a new development using VB6 and I cant decide between using MS Access or MSDE (SQLServer Personal Edition) for the database. As a programmer, I would love to use MSDE, but Im doing research before making a decision, mostly for deploying issues. I have used Access for desktop apps and SQLServer for enterprise app development but I have much more experience with SQLServer than with Access. I have never used MSDE as database is a desktop app, though. About the application: Its a semi shrink wrapped monolitic application designed to run on user desktops. The users are clients of my client, so the app will be distributed and installed exclusively by my client on the users machines. User desktops specifications range between Win98/ME, Win2K and WinXP. The application allows data input for very specific surveys, does very simple calculations on data entered, and prints out reports. User activities are data-input oriented and the work is often done by several people, so there is the need for several computers to have the app installed and accessing a single database on a central machine over the LAN. The setup program would ask if installation type is client or server and the only difference should be that the server installation will host the database and all other machines should be installed as clients. When installing a client, the setup program will ask for the name of the server machine to setup an ODBC entry (or building a connection string). The databases are small, typically from 100 to 600 three-page surveys, making something like less than 10 MB if stored in Access. So, what do you think?, Is Access enough and reliable (Im mostly concerned by the distributed side of the application having the database in one machine and accesing from several machines, via ODBC I supposse) or I should go with MSDE? (where I have to worry about the users machine having minimum requirements to install the SQLServer service). To make things a bit clearer, I dont need the MS-Access front-end, Im talking about the database driver only to operate on a .MDB file. Also, not as important as the thechnical issues, Is there any special considerations I should watch concerning licensing of the MSDE engine?. Thanks a lot for your time and comments </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Sergio | </b> From MSDE site: http://www.microsoft.com/sql/techinfo/development/2000/msde2000.asp ' ... MSDE 2000 is designed to run on Microsoft Windows® 98, Windows Millennium Edition (Windows Me), Microsoft Windows NT® Workstation version 4.0 (with Service Pack 5 or later), and Windows 2000 Professional ... ' So, operating system seems not to be a problem. But, ' ... MSDE 2000 can be built into applications and redistributed royalty-free with Microsoft development tools, such as Microsoft Visual Studio® .NET and Microsoft Office XP Developer Edition ... ' Does that mean that I cannot use it with a VisualStudio 6 application ? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Matt H. | </b> >(I'm mostly concerned by the 'distributed' side >of the application having the database in one >machine and accesing from several machines, >via ODBC I supposse) My experience has been that access scales up to a -few- users. Once you get seven people banging away at the database, forget it. :-) If you're using ODBC, why not start out with access. If it becomes a performance problem, swap up to SQL Server. (Can you Ship MSDE to people for $$? I dunno.) Using ODBC means that your app doesn't -care- about the database back-end. All you have to change is the install script. So, in conclusion, don't assume that access has performance issues. Fix the problem when and if you have one. :-) regards, </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Joe Paradise | </b> The product I'm working on is very similar to yours. We decided to use MSDE (with a VB.NET front-end). This was informative for me when making this decision, especially Table 1. http://msdn.microsoft.com/library/default.asp?URL=/library/backgrnd/html/msdeforvs.htm </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Jimmy Chonga | </b> It sounds like Access would be a better candidate for the needs that you've expressed. The Access Jet engine of course only runs when instantiated through ODBC/OLEDB, versus the MSDE engine that runs as a service, often 24/7 without explicit control from your application, and the Jet engine is dramatically lighter on resources (as the MSDE really is SQL Server, just with a couple of registry tweaks hardcoding some arbitrary limitations). In many ways the query syntax of Access is actually more powerful than SQL Server, though of course you'll want to remain as close to 'pure SQL' as possible if and when you decide to upgrade to SQL Server. As a sidenote, note that a large percentage of the systems infected by the Slammer virus were actually running MSDE...often without the user realizing it. I am a huge fan of SQL Server, but for a small client application it's just a gross overkill. The one scenario where I could see it is if you planned on actively using the replication facilities of SQL Server (i.e. many clients that gather and replicate information to a central database), but you could do that fairly easily 'by hand' anyways. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Kyralessa | </b> While I've never used MSDE for development, everything I've read about it gives me the distinct impression that its fundamental purpose is to let you produce an application which works with SQL Server without having to have SQL Server on your development machine. In other words, it seems to be a 'practice' SQL Server which you use in development and then replace with the real thing when you deploy. One good place to search is Google Groups; go to comp.databases.ms-access and search on MSDE and you'll find a number of professional Access developers' views on it. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Sergio | </b> Matt, Thank you for your comments. You made an interesting point. I really hadn't thought that I could design my app database independent and use ODBC to switch later if needed. The main reason I wanted MSDE was to use stored procedures instead of hardcoding the SQL statements in VB code (an approach I really like and use all the time when using SQLServer as database). The second reason is to eliminate ODBC administration. I like the way you can connect to SQLServer using just the connection string without having to install ODBC DSN entries. I remember having used DSN-less connection to a .MDB file, but I don't know if you can connect like that to a remote machine. I suposse It will better if I quit complaining about ODBC DSN and learn to do that stuff =) </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Stephen Jones | </b> Is the application gioing to run separately on each of your client client's site? How many simultaneous users? How much processing is involved in each query. If there's a lot then Jet is faster because the processing is done on the desktop machine and not all on the server. If it's just a question of adding records then client/server seems superior. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Jimmy Chonga | </b> There is no doubt that stored procedure like programming is superior, and Access gives you that via 'Queries' (they can even take paramters). Additionally there is an Access OleDB driver that lets you provide the path, and if the database is on another machine accessible via a share then you most certainly could access it in such a manner. If you have multiple PCs all connecting to the same database instance, then the MSDE may be an option. As another user mentioned, the MSDE really is a choice where SQL Server would be appropriate, but people don't want to pony up the dough for a SQL Server license : Microsoft really hopes that the user will become entrenched in SQL Server, will grow into the MSDE limits, and will then upgrade to SQL Server. The other instance where MSDE is appropriate is where you're using the replication facilities. Cheers! </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Joel Spolsky | </b> In our case, for CityDesk, we chose Jet (access) because the installation is easier and people understand the idea of one database = one file. Trying to explain to end users that they need to be running a server to use the application is way too complicated. For SETUP, it's much simpler just to make sure they have a bunch of DLLs in place rather than also making sure that they are running a server with all the complexity that brings in. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Albert D. Kallal | </b> Number of users here is a big issue: The decision breaker for this is going to be based on several issues: What is the average number of users (multi-user). If on average, you will have a LOT of single user systems, and the occasional 2-3 user system, then I would go with a JET/mdb file share. Your support costs will be less. You might throw in some code to make a daily “copy” of the data in case of file damage. The jet file share is thus a lot better for simple load and go type software. Many commercial programs out there do still use JET and a file share. Joels CityDesk does. So does the very popular simply Accounting software. As side note, you don’t use ODBC to share a JET/mdb file on the network, you simply share the file in a folder. You will wind up using a ADO connecton string to JET (that occurs only ON the locak pc). So, in therory, ODBC is never actually occuring across the netwrok. You still wind up using a standard file share via JET/mdb over the network. However, if you stick to straight sql, then can write as if using odbc. Hence, the only real down side to a JET file share is the possibility of a damaged file on a network. With a good backup policy, then maximum exposure is one day, and most of the time that is an acceptable risk. It is with CityDesk, and it is with Simply Accounting. Thus, #1 issue is average number of users. If you users counts are below 5 users, then I would go with JET. Other issues are: Connectivity. Do you need the data eventually for a web site? How about access to the data via a wan? If you need a variety of connection options, then the MSDE is the better choice. It is a socked based connection, and NOT a file share which is useless across a wan. Security: You can’t prevent employees walking away with a file share. With the MDSE, then you can lock up the actual data files. None tier, or 3 tried design? Do you plan to design a 3 tried system with business objects between the database, then the GUI? If yes, then again, MDSE is the better choice. Are you existing software designs that way now? If you have a first rate team, and they do the 3 tiered dance, then you might also consider this design approach to your application. Will a number of clients have large user seat counts? If you expect a large number of clients to have more then say 10 users, then you will want to offer sql-server as a option. For little guys, you run MSDE, and for the large ones, you run Sql-server. Hence, design for your average user seat count. Does your designs assume stored procedures. If you are a real sql-server guy, then loosing stored procedures is going to hurt, and again you want to use the MSDE. Potential market: Selling a product that requites sql-server can actually give your product respect. If this is not a issue, then this is not a issue! In addition, you can also consider something like open source MySql, as that also is a good possibility if your application is quite simple, but needs lots of users (I say simple, since MySql does not have stored procedures, but is very good for appcltions to share data, and this is especially so when stored procedures and triggers are not needed). Albert D. Kallal Edmonton, Alberta Canada Kallal@msn.com </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Sergio | </b> Thanks evryone for your comments. Jimmy, thanks, that was very helpful. I think I should have better asked for reasons to NOT using MSDE, as I'm already positive that Access is good for the job. I also believethat system resources consumed by MSDE are not justified by the size of the application and its relevance to the user, neither do the security vulnerabilities exposed. What I think I'm going to do is start with Access, but being careful on isolating SQL code in data access classes. I'm even thinking on builing a VB class called 'StoredProcedures' that will have a method for every SQL statement and isolating it in an independent DLL. That way I will be able to change data access statements the same way I do when using real stored procedures. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Just me (Sir to you) | </b> I realy like MSDE. It is not a toy at all. It is the full SQL Server engine with some performance caps andf excluding some of the nice perifery. Very capable in a wide range of situations. My only beef with it is is that it is not maintained trough Windows Update. This is a very big deal which in my mind should disqualify the use of this engine in 'desktop' style applications that is intended to run without the supervision of a true administrator. Think about it: do you think your clients will be able to handle SQL Server SP and hotfix installations? Do you even want to ask them? If Jet can handle the load, I would go with it for this reason alone. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Clay Dowling | </b> I think that using either ODBC or ADO are your best bets here, and don't worry so much about the backend. As somebody else mentioned, so long as you stick to standard SQL, everything should be fine. For now, stick which whatever backend will be easiest to deploy and support. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Sergio | </b> Yes, the multiuser scenario is less frequent than the single user scenario. And I'm talking about half dozen people working at the same time at most. Typically it will be 2 or 3 people. Albert, that is an interesting security observation, I will take that into consideration because the data collected is in fact sensitive info about the user's company. Also, the file share approach means also a little more of setup administration (sharing the folder) but the advantage of seeng the .mdb as local is worth the extra configuration. BTW, you surely type fast ;) Thanks again everybody. As a side note, it is really amazing how can one get so many top quality comments in such a short time. You helped me in 20 minutes to make a decision I have been thinking for days. I am a frequent reader of JOS forum, but I will start to post more often also. long life to the formum. =) </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Herbert Sitz | </b> Sergio said, 'The main reason I wanted MSDE was to use stored procedures instead of hardcoding the SQL statements in VB code (an approach I really like and use all the time when using SQLServer as database).' Sergio -- As someone else said, Access/Jet actually does do stored procedures. Actually sort of a very limited stored procedure that is basically just a stored query that accepts parameters. But that can cover quite a few scenarios; that's all a lot of the stored procedures I use in SQL Server are. You have to use ADO to get access to these stored procedures. Nice thing is that a stored procedure with no parameters is really the same thing as a view. Having this available really adds to the usefulness and usability of Jet, in my opinion. And makes it easier to start out with Jet and later migrate to MSDE. The Jet/ADO stored procedures are not usable from within an Access application. And I don't think many Access or non-Access programmers are even aware of them. But they do exist and they are cool. Here are a couple links to more information about how to create and use them from within VB: http://support.microsoft.com/default.aspx?scid=kb;en-us;201493 http://support.microsoft.com/default.aspx?scid=KB;en-us;q202116 </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Karl Perry | </b> 'If it's a lot of processing then Jet is faster.' Stephen, are you sure of this? The whole concept of client/server is to offload processing from the workstation. If you have five workstations each who have to execute a query for a table containing 100,000 records, then you're downloading 500,000 records over your network just to determine which records to include in a query result. This is horribly inefficient. The real question in my mind is, do you have a sufficiently powerful server? If you're using an old P65 with 32MB of RAM that's one thing. A PIII/500MHz with 512MB of RAM will outperform any file-based database, IMHO. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Eric Budd | </b> Access is only fast if the database is located on the local machine running the application. If you are sharing the file over a lan, performance goes way down. We have just moved out application (payroll) to MSDE\SQL from Access. Some of our cliients have 3000+ employees and databases over 500 megs. Performance of Jet under those circumstances (with multiple users) is not good. Also, Jet files can get get very flakey. We had too many files get hosed in multiuser senarios over a lan. Novell client patches, Win Server 2000 SP3, ect. I just wouldn't trust Jet with anything too critical. Just my .02. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Sergio | </b> Herbert, wow. That was.. enlightening. One more reason to go for the Jet alternative. To be honest, I thouht that jet was already becoming 'old' and wanted to make the leap to the next cool tool... Well, I was wrong and it seems that using a jet/mdb database is the right tool for this time. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Herbert Sitz | </b> Well, Jet is getting old. And MS is trying to push people away from it. It can still be the right tool for some jobs, though. I wouldn't want to use it for apps expecting to get more than 100 MB or so of data, or that will be used by more than 15 or 20 concurrent users. But if you program the front end the right way, you can minimize most of the speed problems caused by it being a fileserving database. And if you do regular backups you won't have too worry much about the fact that it's not as industrial stength as other solutions. No fileserving database is ever going to be able to absolutely corruption-free. From what I can tell, Jet has improved in this regard from the problems it had several years ago and it seems to be fairly reliable, so long as client machines aren't crashing and taking the .mdb down with them. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | RocketJeff | </b> Just me (Sir to you): 'Think about it: do you think your clients will be able to handle SQL Server SP and hotfix installations? Do you even want to ask them? If Jet can handle the load, I would go with it for this reason alone.' The is actually a big consideration. The latest SQL Server 'virus' also infected machines running MSDE that wern't patched with the fix. How many users of MSDE: 1) Knew that there was a patch available? 2) Knew that they should patch their machine? 3) Even knew that their app used MSDE? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Albert D. Kallal | </b> >>>If you have five workstations each who have to execute a query for a table containing 100,000 records, then you're downloading 500,000 records over your network just to determine which records to include in a query result. This is horribly inefficient. That does not happen. Lets assume we have a single user pc, with NO network involved. We fire up ms-access and then do a query on that 500,000 reocrd table. Lets assume that they query will return one records. Does JET load all 500,000 records to find that one records? No, it is does not. It reads in the index file, and only part of that. It does a binary tree search into the index, and then finds out where the record is. At most, a few “pages” of data gets loaded. Only that one record + some of the index will be read from the disk. Now, take the above example, and share the file on a network. The exact same thing happens (nothing changes, except the location of the disk drive). The whole file is NOT sent down the network. Well, ok it is if there is not index on the field we are searching. Eric’s comments about JET slowing down with large files and lot of users is correct. In those types of environment, JET is not workable at all. However, for small files in the 50, to 150,000 record range, and only a few users, it is a very good solution. The horse for the right course is the key here. I have a lot of JET applications running in 2-6 users in a file share. With 5 users, and 55 related tables, some in the 50,000 record range, response is instant. There is not hint of a slow down yet with such small files. Albert D. Kallal Edmonton, Alberta Canada Kallal@msn.com </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Stephen Jones | </b> Karl, I expressed myself badly here. The scenario where Jet will win is where multiple users are each doing simultaneous adhoc queries on the database. You lose the time taken to download the recordset but will gain in the fact that the queries will execute a lot faster, not least because you have multiple processors and memory to do them with, instead of just the one server. One factor to bear in mind is whether the application has the server to itself. If you have a MSSQL or Oracle application on a database server that has a load of other applications on it that also access the database engine then things could slow down. In most cases though you will be right. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Just me (Sir to you) | </b> Joel, one thing I never got was the reason why you ignore MSDE for FogBUGZ? I know this is not an oversight. You are far more clever than to just let something like that slip. So there must be some serious reason but I can not see directly in this case what it could be. Your insights might be very relevant for those of us considering MSDE for their own products. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Eric Budd | </b> One more thought, will your clients respond differently to an Access vs SQL Server Application? For some applications it may simply be easier to sell an IT manager (or worse a PHB) an application built on 'SQL Server Technology' than one built on Access. Access is fine for many applications, but it doesn't get any respect (probably since it is on everybodies desktop). Also, it has no security to speak of that can't be broken in about 10 seconds. Just my $.02. Wait, now it is $.04. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Stephen Jones | </b> Eric, Albert has pointed out in another post that Access has the same security model as SQL server. You can set up user-level seciurity, and every object can have varying levels of permission set. Frankly it's a pain to set up but it certainly can't be broken in a few seconds. In fact the main problem is people who forget to print out the report on the security settings and keep them in the safe. You can also encrypt the data to prevent it from being read . The only problem would be that somebody could copy and paste the entire .mdb file; I would think that there are ways using OS security to prevent that happening, and you'd still have to break the Access security to do anything with the file. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Eric Budd | </b> Yes, you can. You can also buy a handy-dandy utility for less than $100 which will crack both the Access Encryption and the Access User security in the .mdw file. Go to http://www.crackpassword.com/#office We tried their demo and, sure enough, it works. Access user and group based security is fine for some things, but it is insufficient if you really need to keep the data safe. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Stephen Jones | </b> Thanks for the link; I've bookmarked it in case I ever need it. You would presumably need access to the .mdw file in the first place. It seems to me that you could stop that scenario by not granting sharing on the folder but allowing traverse folder rights so that the user would be able to connect to the file but not view it. You, or somebody actively involved in NT seciurity would have to answer this one, as time constraints mean checking it out has got to wait its turn on my todo list. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Fri 14 Mar | Albert D. Kallal | </b> I may have mentioned that ms-access has the same security 'model' as sql server. However, what I meant is that you have the same concept of users, and groups. That does not mean, or imply that ms-access has the same security “model” as sql server. Hence, with ms-access you have groups, and security rights etc. In fact, it really is the same “idea” as windows 2000 sever. While it is the same conceptually, there is no real security with ms-access. Ms-access security is no different then most products (you have users, groups, and assign users to groups and then assign those groups to tables etc). That part of ms-access is simple, and is no real big deal. However, a employee can simply copy the both the mdb file, and the workgroup security file and take it home. So, we have to distinguish between what we mean by security here. Ms-access has some security in the sense of saying certain users (or groups) can run only certain reports. Or certain users can't read a particular table. However, if you don't want an employee walking out with the data, then don't use ms-access. It is not secure in this regards. With sql-server, users DO NOT need physical access to the data file, where as with ms-access they do. There is NO WAY to prevent a user from walking out the door when using a jet file share. With a true data server, users do not need access to the actaull data files (the server only does). For keeping employees from not running a sales report, ms-access is fine. To prevent employees walking out with your data, it is useless! Albert D. Kallal Edmonton, Alberta Canada Kallal@msn.com </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33447' title='View item'> Unit testing in n-tier app</a> | Tue 11 Mar | drazen</td> </tr> <tr> <td bgcolor='#FFFFCC'>We are building 3-tier app. Client - mid-tier - database. Client app unit testing is simple (we have idea how to do that). But how do you write unit tests for middle-tier bussiness rules? Each procedure have complex preconditions (data in pretty complex datasets). This is COM+ app, so there are transactions involved, etc. We cannot find any reasonably large(complex) unit test procedure. Any hints? Experiences? Online resources? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Thomas Eyde | </b> Unit tests should be small. Is it possible to break down the dataset handling to smaller, more test friendly code? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Nat Ersoz | </b> I was thinking about something in similar terms - but this isn't unit testing, this is end-to-end testing. OK, so scratch the notion of unit test here, unit test is testing upon the small quantities of code - like a math library, algorithm, device driver, user widget, ... But suppose you want to automate the testing of the end product, client against server. Has anyone successfully created a test harness which tests a user intensive client? Just thinking aloud, you'd need: 1. A method of automating user input (we've done this with a UDP socket handler in the past, which we send simulated user key input via UDP). This is easy part. 2. A method for determining if the application responds properly. I'm thinking that hook into the server for correct client application response to the UDP key input is required here. 3. For every human test script item, you'll need an machine method for determining success or failure. The question is can this testing be reliable or not. Can you successfully test a GIF rendering library without viewing the GIF? If you aren't convinced that the machine can test the application reliably, then is it a waste of time to try? I don't think its a waste of time to try - because you'll likely create a tool that you'll wonder how you ever lived without. But it likely won't eliminate the human testing. That's my guess, and nope, I've never successfully seen it done. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Thomas Eyde | </b> Could you somehow script the input and the expected output? For tips, see http://www.xprogramming.com/xpmag/acsIndex.htm www.fitnesse.org </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | drazen | </b> For example: Simplified bussines rules for invoices: add taxes to items (some items have no any taxes). No taxes at all for export. If you want to test tax adding procedure (really small) you have to do some really big setup. You cannot have item record if you do not have invoice record. So for setup I have to create two datasets and fill at least two records. Now there is COM+ in play. Object expects transaction in progress, so my test proc should prepare MTS just to be able to check if procedure will correctly add 5% to item amount. This is biiiig overkill. All TDD examples and tutorials I found on internet are more/less academic. I could not find one that could be applied in n-tier scenario. Even more, I cannot see any of those examples to be aplicable in any kind of database application. What am I missing here? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Matt H. | </b> 1) Create a test environment 2) Create modules that pass what you need back and forth 3) Create unit tests that walk the main routine For example: You want to transfer some money from account 1 to account 2, then print a receipt. Test the data interface layer: 1) Transfer. Pass it -$1. Check for error 2) Transfer. Pass it an invalid from account. Check for error. 3) Transfer. Pass it an invalid to account. Check. 4) Transfer. Pass it an invalid to and from account. 5) Transfer. Pass it valid $ amount, to and from. Check for success. Get the transaction ID. 6) Print. Pass it an invalid transaction ID. Check for error. 7) Print. Pass it a valid transaction ID. Check for success. Check the output against a specific flag. Business Layer: Similar to 1-7. Slightly different parameters. UI and system: You know how to test this. Does that help?</td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Chris Winters | </b> I don't know jack about COM, but in Java I try to make my business objects dumb (aka, POJOs, Plain Old Java Objects) so that I can test them in a mocked up environment and not even need a database. Read the data I need from XML files (or whatever data format you choose) and operate on it in-memory -- makes it easy to keep the data consistent because there's nothing stored between test runs. A nice side benefit: you can create a separate applet that allows your customers, or your implementation team (however you do that) to create scenarios of the data using a separate utility. These scenarios are then stored in the data files and used by your testing environment. Barring that, some sort of framework to load a known set of data into your database (and clean it out) is immensely helpful. In Java there is the dbUnit [1] utility to help out with this. [1] http://dbunit.sourceforge.net/ </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Bill Tomlinson | </b> Cover All Adjoining Tiers with Test Software </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Bill Tomlinson | </b> Sorry, accidentally posted. One alternative I'd suggest is to write unit tests that use test code for all tiers (other than the one being tested), not just the ones 'above'. So to test your middle tier code, you'd write test code that behaved like your 'upper' tier; but rather than actually using the database 'lower' tier, you would also write accompanying test code that simulates the appropriate responses from the lower tier. In other words, your test case code sandwiches the tier under test and you don't exercise other tiers. You need a high degree of decoupling in your code to achieve this, but it does let you test each tier in isolation. And, of course, this only applies to unit testing. Don't neglect your integration testing. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | drazen | </b> Thanks for advices. Question is if unit testing in this kind of application is cost effective? We do full QA, and these tests discover bugs, reports are sent back to developers, they do fix, we do new release, then we repeat this until there is acceptable release. I hoped that we could minimize number of bugs by introducing unit testing, so that we can lower number of bugs as much as possible before QA. As it looks now, unit testing in n-tier would require much more work than QA procedure we now have. Not using data access objects directly would require large amount of new code that will probably generate number of new bugs. 'Sandwiching' of objects is possible, but needs too much effort to be cost effective. Is there any book or online resource that describes agile methods approach to n-tier application (and example is not trivial )? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Adam Young | </b> End to end testing is functional testing. If you have figured out how to Test your front end (in an automated fashion) do the same with the whole thing. I assume this is a windows app, so use an app (WinRunner?) to walk it through it's paces. For Htp use can use HttpUnit or something similar. Just go a gainst a clean, testing database (not live data). Check the results of what appears on your screen with what you expect. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Steven C. | </b> Nat Ersoz: I realize this is a bit late in the conversation, but just to reply to your early comment/question -- I currently work on a product where we do automated user input testing for the product I work on. We have both text input validations (where we script possible inputs from our command pane) and a GUI validation, where we use various text commands to simulate GUI actions (open menus, select menu items, display windows, close windows, etc). In both cases, we write a validation by preparing a script and an expected output. Our validation system then compares the output from our program with the expected otuput (using diff), and complains if they mismatch. Pretty simple, really, but we can catch a pretty significant amount of functionality using this system. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | pUnk | </b> Don't really know anything about it, but here you go: http://www.iunittest.co.uk/ </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | one programmer's opinion | </b> 'This is COM+ app, so there are transactions involved, etc. We cannot find any reasonably large(complex) unit test procedure. Any hints? Experiences? Online resources?' I have NOT read any the responses you have received so far, however, if you are looking for example(s) that you can follow and emulate at work then my suggestion is that you visit a local bookstore and look for books that among other things covers testing/debugging MTS components. You might also want to re-post your question on a few online programming newsgroups (such as Microsoft's) that have a COM+ or a MTS forum. Let us know if you find anything useful that you would recommend to others. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Nat Ersoz | </b> Steven, This is interesting to me. Has your automated testing reduced your reliance on human testing, and by how much (i.e. it used to take us 16 hours to fully run a test pass, and now it only takes 3 hours). The more I think about this, the more it seems to make sense to me. If you don't mind me asking, what does the end result of your GUI app generate (server interaction, text, ... )? Thanks, </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Steven C. | </b> I work on a debugger/IDE my company sells. As such, the end result (pre se) is a little hard to quantify, but most individual actions have a quantifiable change -- we change the displayed text, we change the status of some breakpoints, etc. These individual changes are what we attempt to validate. Originially, I belive our validation system was designed to validate our compilers (which is a very easy thing to do, relatively -- since there is a single correct answer for every source code, you just compile it and see if it does the right things). Only recently did we finish extending it enough to handle pure GUI functionality and even then, we handle that by exposing the callbacks to command pane interaction. Its a bit hard to say how much this setup has saved us in human interaction -- but I'm pretty sure 'tons' is close to accurate. Particularly since I work on a large project in a decent size group, the validation system we have has given me a number of warnings when a change over HERE broke something over THERE (especially when 'THERE' was something I didn't even know existed). </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Fri 14 Mar | Nat Ersoz | </b> Thanks! That is very encouraging. I love the full on test, which is part of the development process. I'd say your's is a somewhat rare case of professionalism at that level. Very elegant. Thanks, </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33957' title='View item'> I18N & L10N</a> | Thu 13 Mar | John</td> </tr> <tr> <td bgcolor='#FFFFCC'>I am writing a Windows utility. It should be able to support all languages. I am using _UNICODE, UNICODE defines and <tchar.h>. The app takes text inputs from a dialog box. I am not clear about CJK and East European languages input. Suppose I set the correct locale in my application and do a GetDlgItemText() (which is actually a GetDlgItemTextW), will I get the input that was entered by the user? Usually CJK is in MBCS. Secondly, Using SetDlgItemText() shows blobs in the text box. I have installed the CJK language pack on my machine. Does it have to do with the font? Third: If I want my app to run on Win95 & Win98, how do I go about it? (Win95 & Win98 dont have the W version of the Win32 APIs). </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Heston Holtmann | </b> The Platform SDK has info on getting UNICODE apps to run on Win95/98/ME http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=582A9FF1-D491-49F9-9479-371EA97D5B38 </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | pUnk | </b> Hop on over to http://www.microsoft.com/globaldev/ </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33952' title='View item'> RSS</a> | Thu 13 Mar | The Real PC</td> </tr> <tr> <td bgcolor='#FFFFCC'>Im using RSS in an intranet portal. An RSS channel is a list of items, and each item can have a title, a link and a description. I need the descriptions to have possibly more than one paragraph. In other words, they need html tags like <p></p> or <br/>. Either that, or allow more than one description per item. I was not able to get html tags in the descriptions to show up, so far. Is there any easy way of doing this? Or should I use something other than RSS? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Tal Rotbart | </b> If you want it to not mangle up RSS feeds. make sure that the formatting information is escaped (i.e. uses <>) and de-escaped before being placed into the result page. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Ralph Brorsen | </b> Also, you could look into <![CDATA[ ]]> sections in your XML document. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Ronaldo Ferraz | </b> The description element shouldn't contain HTML. Use a newer RSS version (as 1.0 or 2.0) that supports the content:enconded element, which can contain HTML. For more information, take a look at the following article, which contains more information and pointer to the specifications: http://www.xml.com/pub/a/2002/12/18/dive-into-xml.html </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33890' title='View item'> What does a 'world class' programmer know?</a> | Wed 12 Mar | Mike Swieton</td> </tr> <tr> <td bgcolor='#FFFFCC'>A few recent threads, such as the Reluctance to learn thread, have brought up the issue of what a programmer should know. Some people there suggested that a real programmer should know C, for instance. What does a world class programmer need to know? Im not thinking what can average enterprise app consultant get by by knowing, but what does a real software craftsman know? What sort of things do the best learn? Im thinking that a great programmer should understand things like recursion, some basic data structure coverage, understanding of pass by value vs. pass by reference (just here because it comes up here at the Univ. level way too much). Do predicate logic languages matter? What about lisp and friends? Thoughts? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Vincent Marquez | </b> 'I'm thinking that a great programmer should understand things like recursion, some basic data structure coverage, understanding of pass by value vs. pass by reference.' Thats what an AVERAGE programmer should know. A world class programmer should be able to pick up a language very quickly, be able to put themsevles in the mind of another architect/programmer and figure out their code/structure, along with being able to architect and design their own systems. on TOP of that, a world class programmer can do this all very quickly and meet deadlines despite them being unreasonable. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Mike Swieton | </b> Specifically: does VB matter? I can understand arguing C, but what about VB? I am not a VB programmer, and do not know any VB. Is there some magic point of enlightenment like I hear that lisp offers? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | god | </b> 'What does a world class programmer need to know?' rule #1 Computers dont work rule #2 Code that runs on computers cant work (see rule #1) rule #3 Applications written using code that runs on computers cant work (see rule #2) ...any developer that understands the above rules and their implications is ready to begin writing code </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Prakash S | </b> Mike, This is the way I look at it. 1.) Techincal & 2.) Non-tech Technical would include whatever you and Vincent said. Non-tech: is equally important. Communication skills, People skills, etc. There are a lot of things that would go into points 1 & 2. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Contrary Mary | </b> They are capable of producing work in a truly original arena, where there is no precedence for success. Some portion of their knowledge and skills are the best in the world. When coming up with a list of the top people in an area, they should be on the first hand. Think Olympic athlete. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | jb | </b> I think it comes down to two things that Joel mentioned in a previous article. A good programmer needs to 1. Be Smart 2. Gets things done. It is aptitude which matters not skills. Anyone with the right aptitude can pick up whatever they need to know and be able to use and implement it in an efficant manner. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Marc | </b> A world class programmer is someone who can 'roll his own' for any task. It is also someone how knows better than to 'roll his own' just for the sake of doing so. Take .NET for example. Knowing how to use the framework is a good skill. Knowing how the framework functions is an even better skill. Being capable of writing the framework yourself is an amazing skill. But knowing better than to waste your time by reinventing the wheel just because you can? That is a world class skill. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Canuck | </b> I don't know about 'world class', since I've never met a Fowler or Yourdon, but I've worked with some very good people. Here is what I have observed of them: C/C++ It seems that working with C *requires* knowledge of pointers, templates and interfaces. Concepts required to make tight, fast code in any language. API's I do Windows stuff, and these guys all knew a good deal of the API. Object Modelling Design patterns were second hand to these guys. I/O Very conscious of all I/O tradeoffs. This includes database access, file access, device communication and network protocols. Classic CS concepts Semaphores, memory management, mutexes, grammars, compilers, OOP and so forth. And all of this seems to culminate in what Marc described above: 'roll your own'. All of this knowledge allowed them to turn their own custom solutions when required: load balancers, transaction managers, databases, languages or file structures. As for soft skills, they really lacked in this area for the most part, poor communication was a mitigating factor here. If I had to pick one quality though, they all seemed to thrive on innovation. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Stephen Jones | </b> --'what about VB? I am not a VB programmer, and do not know any VB. Is there some magic point of enlightenment like I hear that lisp offers? '----- Yea, comes when you realize it's a crock of ***** and you'd do better to start leanring a real language :) </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Stephen Jones | </b> Actually a world class programmer is somebody who speaks of Ada Lovelace with the same look of longing in his eyes other mortals have when speaking of Jennifer Lopez or Britney Spears </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Katie Lucas | </b> How delightfully Victorian. There are some non-bloke developers out here you know. And some of us have mothers who were programmers before us. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Alyosha` | </b> A world class programmer should know that there isn't such a thing as a world class programmer; programming requires such a range of abilities that you'd best be off trying to find out what makes a 'world class' human being ... </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Lindon | </b> a world class programmer should know.... That fixing a bug with one line of code is statistically likely to induce 3 more bugs Fixing it with 3 lines = 1 More bug With 6 lines = 0.5 more bugs with 12 line = zero new bugs. Or more succinctly put...they should know its harder than it first appears... </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Marc | </b> I think Alyosha nailed it. Not that this stops us however. Next subject; Yetti! Truth or Myth? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Matt H. | </b> The techinical stuff anybody could tell you, and is covered by a good CS major. However, the non-tech stuff is -ALL- too often ignored. (And I'm going to count 'How to develop bullet-proof software' as Non-Tech Stuff. I've known at least one true, actual genius (1600 SAT's type guy) who could learn a programming language in a day, and produce an incredibly complex system in a week, but it would be buggy as heck. They just don't teach good QA in most schools. So here's what I'd put down for the non-tech stuff: 1) How to figure out what the customer needs when they don't really know what they want - or - worse - they know what they want, and it won't fit thier needs. (Nobody likes a consultant that comes in an delivers a perfect system under budget that doesn't really meet the need.) 2) How to develop software with a very low defect rate. Unit Tests, System Tests, Automated Tests, Extreme Programming, Bug Tracking, Source Code Control, Change Control, etc. 3) How to manage medium and large teams. 4) How to manage medium and large projects - and I AIN'T Just Talkin' Bout' Microsoft Project, Willis. :-) 5) How to negotiate. Marketing and Sales guys live to negotiate - and when you enter into a discussion of what you can have done when, unless you study this, they will eat your lunch, and you'll promise something you can't deliver. 6) How to deliver on-time, on-budget, high-quality, feature-complete. (And when to pick what if you can't.) 7) Software Engineering. Process Models, Control Models, E/R Diagrams, Database Theory, etc. hmm. This truely deserves an essay. Maybe I'll write one this weekend. In the mean time, I'd suggest taking a look at Steve McConnel's Software Engineering Pyramid (off construx.com), and Joel Spolsky's recommended reading list. A couplea more things: 1) 'Extreme Programming, Explained' 2) Atlas Shrugged 3) The Books of John, Acts, and Romans. :-) 4) Successful Software Development 5) Debugging the Development Process 6) Writing Solid Code 7) PeopleWare. Oh, wait, that's in spolsky's list. :-) 8) The Goal & Critical Chain by Goldratt. 9) http://www.csis.gvsu.edu/~heusserm 10) Mythical Man Month 11) The Practice Of Management, Peter Drucker that's plenty off the top of my head ... regards, </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Matt H. | </b> 'Million Dollar Consulting' That's a good un' as well ... </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | trollbooth | </b> [ Fixing it with 3 lines = 1 More bug With 6 lines = 0.5 more bugs with 12 line = zero new bugs. ] Wouldn't a world class programmer know that every line of code is a liability? And wouldn't they also know that the # of lines used to fix a bug is not related to the chances of introducing a new bug? I mean if anything an increase in lines of code will be more likely to introduce MORE bugs, not the opposite. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Robert Moir | </b> A world class programmer is someone who is repeatedly,succesfully and lastly, appropriately able to 'extend the art' to achieve their goals. To be average at any job that requires real thought you need the 'Is smart, gets things done' stuff. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | T. Norman | </b> World class programmers, which means they are at a level above *great* programmers, do things with technology that make waves in the industry. Examples are: Linus Torvalds, Richard Stallman (GNU/Linux) John Carmack (Doom, Quake) James Gosling (creator of Java) The lead programmers of Google John McCarthy (pioneer of LISP and Artificial Intelligence) </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Li-fan Chen | </b> So T. Norman, you can't be a world class programmer unless you are the head of a systems programming team at a major IT vendor and freely take credit for ideas you don't invent? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Li-fan Chen | </b> Most of these softwares were at the right time in the right place with a few good ideas.. most of the rest of it seems like a whole lotta sweat and marketing backing... </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | trollbooth | </b> I think it's asfe to say though that when any of the above talk everyone listens. Except for Stallman, in that case you are forced to listen because he will follow you down the street and let you know it's GNU/Linux my friend, not Linux. I think Donald Knuth could be considered world class. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | fool for python | </b> How to figure out how to get the job done. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Canuck | </b> <snip> A world class programmer should know that there isn't such a thing as a world class programmer </snip> State your proof. Is it impossible that someone *might* actually be good at this programming stuff. Or, do our egos not allow us to recognize this? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Nat Ersoz | </b> I can't define what a good software engineer is, but I know it when I see it. I also know _bad_ when I see it. Actually, you can smell _bad_ coming from a mile away. BTW: Yourdon? Not the prototype for world class anything, except perhaps money machine consulting delivering nothing. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | David Clayworth | </b> Is there really such a thing as a world class programmer? It seems to me that most of the people mentioned above are 'world class' because of things they do other than programming. Writing about economics and software management, inventing a new way to distribute software, or inventing a new language, are all things that you can do without even being able to debug. Now I have no doubt that these guys are excellent programmers, but if they weren't would it invalidate the things we consider them world class for? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | one programmer's opinion | </b> Hi Mike Swieton, Well, the way you posed your question sounds as if you are really asking the following question 'what does a world class coder know?' This is not an easy question to answer simply because the I.T. industry is so huge and diverse. Imo, a world class coder is NOT the same thing as a top-notch business software developer or a top-notch commerical software developer. A world class coder typically receives a lot more respect in I.T. related industries (i.e. gaming, commercial software, open source, etc.) then in other industries (i.e. someone who works for a company whose primary business not I.T. related). World class coders are: * Known for being expert at implementing technology solutions (i.e. programming and design) * The people who consistently win coding tournaments at places such as Topcoder.com * The person who answer lots of 'how do I this' type of questions on web-based programming forums * and the list goes on and on and on..... Who would I classify as a top-notch software developer in the business arena? Note: I have not worked on a commercial software project, so I don't feel qualified to comment on who might be or might not be a top-notch commerical software developer. However, my guess is that Joel might qualify as one. Imo, most book authors are essentially very good coders, however, to make it easy for me and you -- I will list a few book authors who I feel fall into the top-notch business software developer category. Steve McConnell -- not only does this guy write about all the different aspects of software development he practices what he preaches in his books. Peter Coad -- a well known object-model builder. Ever hear of the company called TogetherSoft? Kent Beck -- a Smalltalk/Java wonk who has made contributions in patterns for software development, the xUnit family of testing frameworks, CRC cards, refactoring, and the Extreme Programming methodology. Paul R. Reed -- has written a couple of books on how to create an object-oriented solution using UML with a particular programming language (i.e. Java and VB). Deborah Kurata -- an early advocate of object-oriented programming with VB. Those VB programmers who were lucky/smart enough to follow her advice are going to find the move to Microsoft .NET a lot easier than VB programmers who only have experience with procedural programming. Jake Sturm -- a former Microsoft consultant who has written several books on various Microsoft technologies and other aspects of software development (i.e. OOAD/OOP, project management, etc.). So what do these book authors have in common besides owning their own companies? All of them can take a software project from cradle-to-grave all by themselves (if they had to). Another thing they all have in common is that they have developed their own software development methodologies (i.e. someone who can 'roll his own' for any task). Some of these book authors are probably world class coders while others probably aren't. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | T. Norman | </b> 'Now I have no doubt that these guys are excellent programmers, but if they weren't would it invalidate the things we consider them world class for?' If they weren't excellent programmers, they would have failed to achieve what they are now famous for. They all had direct hands-on involvement in the technical design and development of what made them famous. For example, with only about three other programmers Carmack was able to create Doom which was way ahead of what was acheived on the hardware at the time. That is something that a team of 100 average programmers toiling for years couldn't do. Stallman had direct involvement in creating much of what makes up Linux (he is the GNU in GNU/Linux), including being the primary programmer of Emacs and the GCC compiler. The Google team came late into the search engine market, but were able to surpass what thousands of others had been doing before them. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | William C | </b> >>>>> I've known at least one true, actual genius (1600 SAT's type guy) who could learn a programming language in a day >>>>> But, can't we all learn a programming language in a day? I think anyone of us here can pick up on a language and start writing meaningful code by the end of the day. To an extent, I suppose. For example, if your background is VB, it will be pretty hard to go from VB to C or Assembly or something. But if you've had education (my CSE degree) in Assembly, C, C++ ... I think you can pretty much pick up any language in a day. For example, I started a project 6 months ago that was in VB. I had never used VB before. So, I picked up a VB book ... read the first few chapters on the IDE, the different primitave types (ints, longs, variants, etc.), the if stmt's, for loops, and while loops, etc., and how to use Forms. After that I was raring to go. Once you have the basics, I feel that the rest is pretty much cake. Learning the API's of any language isn't that difficult. Especially when you have something like google waiting to help you (searching out information quickly and easily is a 'skill' -- i've seen programmers that haven't learned how to do this). Maybe I'm over-stating this, I don't know. But this past year and a half I developed for the Palm OS using the CodeWarrior IDE, PocketPC using Embedded Visual C++ IDE, php for backend stuff we do, and Windows using VB and It's IDE ... and I had not known any of those IDE's or API's, or languages (except maybe the EVC -- because I had Visual Studio/MFC/C++ experience). So a 'programmer' that is 'world class' should have at least these skills: 1) Be able to pick up languages fairly quickly. 2) Be able to search for information quickly and effectively. 3) Be able to debug well. 3, to me, is very important. Very important. But the thing is, when people are interviewing candidates for a programming position .. there are rarely any tests or questions that look for this skill. I've seen over and over again people who if you asked them a question could state all the computer science theories, talk about the advantages of this language vs. that, know all the architectures, etc., etc. But produce buggy code. I don't get it. In other words they can talk the talk but not walk the walk (but it's usually the 'talk' that gets them in the door -- cause how do you interview for the 'walk', extensively?) I think there is a style of programming that you can learn that keeps you from writing buggy code and I've seen smart people that haven't learned how. I've been told by people that I write 'bug free code'. And I think it's because of the debugging and testing skills that I have. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | flamebait sr. | </b> Being able to apply the abstract, platonic concept of computing to any language (i.e. being able to be raring on a new system in days or weeks with little downtime) is not all it takes to be 'world class' That just means that you have a great intuitive grasp of coding. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | William C | </b> Hmmm...maybe flambait sr. I'm not sure. But programmer and coder are synonymous to me. I think I envision a programmer as someone who writes code. An architect might define the architecture, but the programmer actually gets the task of coding done. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Bill Carlson | </b> What is a 'world class developer'? Someone who makes everyone happy. A few questions to determine if someone is 'world class': Does this person listen to management? Or, more importantly, is this person _listened to_ by management. Can they make management understand that their demands are unreasonable? Are they liked and trusted enough to push through a clean design or process? Do the users like the software produced? Is sales satisfied with the compromises that were made? If not, can this person bring them to the point of understanding. Is marketing happy with the modern look of the product? Being 'smart' and 'getting things done' are not enough. A great developer needs respect, otherwise his sphere of influence is small and that precludes him from being considered 'great'. This isn't about recursion, pointers, or OO. Spend your time asking 'who am I making happy with the line of code I'm typing'? If the answer is only yourself, rethink your strategy. A 'world class' developer is one who pulls out all the stops to ensure that his company creates 'world class' software. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Canuck | </b> <snip> A great developer needs respect, otherwise his sphere of influence is small and that precludes him from being considered 'great' .... Can they make management understand that their demands are unreasonable? </snip> I disagree. This presupposes that management can identify talent. Sometimes they cannot. I would agree that the developer in question is under utilized, but his skillset remains the same. I would suggest that, in this case, management is not 'world class'. Not vice versa. I say this because I worked with a guy in this exact situation. When it came to software development he brought all of the requisite tools that might classify him as 'world class'. Politically however, I have never seen anyone humbled so quickly. The two existing senior developers, by virtue of seniority, not skill, undermined him at every step. The rest of the developers, at all levels, pleaded and begged, to have this guy step in and run the show. No dice. Every guy in the place wanted to be on his projects, lined up at the door. Working with him for two or three months was like a year of learning on your own. So, is he still 'world class'? I think so. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Bill Carlson | </b> Canuck, I think we basically agree. In many cases, it's not politically possible to sell your ideas or modify existing process. My point is that 'world class' developers do whatever is in their power to advance the success of the company. Be it mentoring, writing code, 'rightsizing' expectations, etc. An analogy would be a great teacher given lousy curriculum or a master craftsman given shoddy tools. The true measure of competence is what we do with the 'real world', not what we would hypothetically do with an 'ideal' one. </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33829' title='View item'> O'Reilly Safari</a> | Wed 12 Mar | Bill Tomlinson</td> </tr> <tr> <td bgcolor='#FFFFCC'>Does anyone have any experiences with OReillys Safari online bookshelf service? I was looking at it and it seemed like a good idea and deal. At this point, however, Id like to make a plea for people to skip all the I cant read books on a screen posts that you were planning. Thats a religious war level issue that can have no true resolution and well just take it for granted that if you cant read books on a screen then you also wont like Safari. But for those of us who can (or plan to use the service primarily for reference books), do you have any experiences, or what do you think. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | woohoo.python | </b> i like it. i use it. But one thing i dont like , is that you have to keep a book out for a few weeks before you can check it back in. This eats up your 'points' . For ten a month you get 5 points. usually a point a book. Also some titles I want arent there. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | razib | </b> OK selection. i would start out on the low levels point wise. i never got around to using all my points, so i dropped it since i wasn't utilizing it. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Benji Smith | </b> How is the book text presented? Is it in some ebook format or pdf or is it in plain text? Is the plain text organized according to the page numbers of the print editions or is it organized strictly according to sections and chapters? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Kirk | </b> It works exactly the same way as it does if you're not logged in, except you can read the entire book. Go try it. It's well worth it. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Marc | </b> I like it a lot. It is great when you need to get at some info but don't want/need to invest in an actual book. For example, I deal with T-SQL once in a blue moon. But this month I'm doing a lot with it, so I added the book to my list. Once the project is complete I'll just delete it. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | rexguo | </b> I have a 5-book account. It's pretty useful and I used it alot when going into an area of programming (e.g. J2EE)that I wasn't familiar with. If you haven't spent alot of money buying the paper version, then I feel it's a good investment. I also find it cheaper than going to the local library, borrowing some books, forgetting (or no time) to return them, extending the loan ($$) and then pay the fines. Comments: - The booksearch works well, but the relevance sorting is poor. - The text size is way too small and you can't change it using IE's text size, so you have to disable CSS by IE->Tools->Options->Accessibility. - The selection is OK and it'd be great if they include more titles from their competitors. - OReilly's new titles take sometime (a few weeks?) before they make it available on Safari. - They should add a user feedback for each book/chapter so that users can fill in more information or point out inaccuracies especially since this is about software. Such a feature will add value to Safari. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Carl | </b> I've used it for a few months now at the 10 point level and have been very happy with it. In the 3+ months that I have been a subscriber I've gotten pretty good use out of at least ten different books. At about $15/month for a 10 point library, when you consider the annual cost as the equivalent of 3-4 technical books, I think the service is well worth it. Yes, not everything is there, and many of the books tend to be older publications, but I think there is enough there that is useful. I certainly don't know if I would recommend going with any of the higher subscription levels. I find that I am using a couple of books at the most at any given time and at most 5-6 books within a month period (the amount of time you are required to keep a book on your bookshelf) and really haven't felt limited by the 10 point limit. As for preference for online vs. physical text, I've always shied away from online. I certainly don't have any plans to sit down and read Shakespeare on my laptop. I think however, that the way a technical book tends to be read, or at least the way I read technical books by reading the few intro chapters and then going to the sections that are of most interest, the online format actually works reasonably well. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Bill Tomlinson | </b> Thanks for the responses. I'm going to give it a try, but go with the packages with the lower number of 'points'. You know, this seems like a great thing for a company to provide as a standard tool for their developers. I'm going to add it to the list of standard benefits for the company I'm eventually going to start up. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Karel | </b> I discovered errors in xslt cookbook and submitted them but safari expects you to state the page number - this does not relate to the online stuff at all. They do not have it all sorted out but i did subscribe today as my evaluation expires tomorrow. With all this stuff i think a lot of market research goes into making the service ramp smooth so you end up upgrading to the next level. Thus the 5 points and 30 days were calibrated with care. </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33802' title='View item'> Webhosts</a> | Wed 12 Mar | Yoav</td> </tr> <tr> <td bgcolor='#FFFFCC'>Can anyone here recommend a good Win2K webhost that costs at or below $10.00/ month? Thanks. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | GiorgioG | </b> Yoav: Check out http://www.connecticut-web.com - $20/year. I opened my account a couple of weeks ago...seems to work just fine...ASP.NET + SQL Server included. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Philip Dickerson | </b> Try CyberTec: http://www.highspeedhost.net/cnet/ $95/year for Windows 2000, 500MB web space, FrontPage, Active Server Pages, Access databases, SQL Server (extra cost), unlimited email, Perl, etc. Or, check the lists at c|net, such as: http://webservices.cnet.com/html/aisles/Most_Popular_-_Hosting_Plans.asp or start at: http://www.cnet.com/internet/0-3799.html If you only want a small amount of web space or don't need ASP, etc, then there are providers available for much less than $10/month. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Ori Berger | </b> I can recommend an excellent FreeBSD hosting service that costs ~$20/year. They have excellent administration and support, the $20 packages includes lotsa stuff, e.g. FrontPage, FTP, webmail with SSL, IMAP, CGI access, ability to upload your own executables (if you want a C / C++), a private MySQL database, and more [ see http://34sp.com/hostingfeatures.shtml ]. This sounds like an advert, but I'm not affiliated with them in any way except being a very satisfied customer. I see you're looking for a Win2K server. If the reason is that you need ASP / ASP.NET, and your app works on Mono, you might be able to get them to load mod_mono for you (they don't officially support it, though). There are also ASP/VB to PHP converters that may help. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | J. D. Trollinger | </b> See also this earlier thread: http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=24776&ixReplies=18 </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | pb | </b> brinkster.com </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Not Joel Spolsky | </b> I've got a setup at http://webhosts4life.com - 9.95/mo for ASP.net, SQL2000, yada yada... best deal I could find. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Not Joel Spolsky | </b> erg, make that http://www.webhost4life.com </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Diego | </b> Check out www.alentus.com Economy Plan - $9.95/month Setup Fee: $15.00 It is worth it though despite the setup fee. Never had a problem with them and fast support. Although I haven't needed their support in a while though.</td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Harvey Motulsky | </b> http://www.crystaltech.com They are super! </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Happy | </b> Reading this thread I opened an account with http://www.webhost4life.com yesterday evening. The website was set-up by this morning. I had a customer support request and 10 minutes later it was solved. So far I am a happy customer of http://www.webhost4life.com </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33791' title='View item'> Another "interruption" to programming: email?</a> | Wed 12 Mar | Reginald Braithwaite-Lee</td> </tr> <tr> <td bgcolor='#FFFFCC'>As noted on slashdot and elsewhere, Ole Eichorn has written a provocative essay lambasting email as interruptive and therefore considered harmful to programming. His words are here: http://w-uh.com/index.cgi/articles/030308-tyranny_of_email.html He gives some suggestions for handling email. There was a spirited discussion about telephones and programming in this forum. Do people generally agree with his thesis that being interrupted by email does more harm than good? Does anybody have strategies for getting into and staying in the zone without being interrupted by emails? -- http://www.braithwaite-lee.com/ </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | John Topley | </b> See http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33393&ixReplies=26 </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Robin Debreuil | </b> Uhh, close your email? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | big bob | </b> Can't close the email. We have a company wide policy about answering emails in a timely manner. Gotta love big companies. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Alyosha` | </b> Apparently focussing on one's work and getting stuff done is not company policy? Sign me up for a job like that ... </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Rob | </b> Interuptions from email wouldn't be so bad if it were possible to set up a filter that does not notify you for unimportant emails. Going slightly off topic: Everywhere I've worked has required that we use MS Outlook. The problem with Outlook is that it has no filtering rules that TURN OFF THAT DAMN SYSTEM TRAY NEW MAIL NOTIFICATION. We have a policy here that everyone gets email notifications everytime someone checks in code. This results in a lot of useless spam (on top of the usual CC-every-man- and-his-dog spam one gets in an office). But no matter what filtering you do, you cannot stop Outlook from popping up that icon on the system tray. I would switch to a different email client just to get rid of that icon, if I could. Email interruptions wouldn't be so bad if you could make it so that you only get notified immediately is actually of immediate importantance to you. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Mike | </b> Add a 'little' dll, AutoRead (http://www.techhit.com/autoread/ ) in conjunction with Outlook Rules and that icon will disappear. Works like a charm for those 'less than urgent' emails </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Patrik | </b> Big Bob, >Can't close the email. We have a company wide policy ' >about answering emails in a timely manner. A timely manner for me really can be translated into 'my earliest convinience', which is in the morgning, before luch, after luch or right before I leave. Email should be handeled like voicemail. All voicemails I ever heard said 'I will get back to you at the earliest convinience yada yada...'. Email is the same. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Eric Moore | </b> >Everywhere I've worked has required that we use MS Outlook Same here. I just ignore that and use whatever I please. Usually nobody cares if you don't use the standard office tools as long as it doesn't impact anybody else (and you use free software). </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Patrik | </b> >Same here. I just ignore that and use whatever I please. My place uses Outlook as well, but they wont allow IMAP email fetching. Otherwise I would have used Pine doing IMAP to read my mail. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | big bob | </b> sure it is Patrik. See how far that would get you where I work though. :) </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Karl Perry | </b> Rob, Outlook 2002: Tools/Options/E-ail Options/Advanced E-mail options: 'When new items arrive ...' Uncheck 'Show an envelope con in the system tray' I dunno if this existed in older versions. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Reginald Braithwaite-Lee | </b> I have Outlook XP at home, and you can turn the system tray notification off. At work, I have Outlook 2000 and the system tray notification is not an option. Worse, Outlook's default behaviour when you close its window is to keep running, so the system tray icon will show up even though you think you got rid of Outlook! Oh well... -- http://www.braithwaite-lee.com/ </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Rob | </b> Mike: Muchas gracias - that app may well prevent me from sliding into complete insanity (mind you, insanity has its benefits - it means I could become a professional Lisp programmer). Karl: Yep, that's an Office 2002 feature (and anyway, wouldn't that feature mean that you don't notified of any email at all, no matter what its importance is?). </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | mb | </b> Outlook has (or had) alternate notification mechanisms. So if all mail marked 'urgent' is urgent and you want to be notified, set up a rule to play a sound/bring up an alert/whatever when urgent mail arrives. And ignore/disable the tray icon. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Robert Moir | </b> Well big bob, what does 'timely' mean to you? To me. it doesn't mean hovering over the email client just in case a mail comes in but it sounds like that's what it means to you, or what you think it means to your employer? What's not timely about reading your email and replying to it 3 times a day? That's every couple of hours after all which imho is as much as anyone could expect. Do you expect to get disciplined if an email requires a few hours of research before you are in a position to reply to it? After all, it could be argued that you didn't reply to that in a timely manner. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | big bob | </b> The policy in a nutshell is to respond to email in the same manner as if someone had phoned you. We are to keep our email open at all times, 8 a.m. to 5 p.m. If something is going to take several hours, then you send an email saying 'this is going to take several hours, let me get back to you'. You sound like you have a problem with me. Do you? Keep in mind this isn't a policy I designed, nor do I get to define what 'timely' means. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | S | </b> big bob, where do you work so that I can make sure I never apply there? I thought the whole point with e-mails is that you could live without having the answer right away. If you need an answer right away, you can always call. Anyway it is obvious that who ever came up with that policy at your company never read Peopleware. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Nathan | </b> how do you handle the issue of keeping Outlook closed, but then also getting notified for meetings and appointments? is there software that will ping your calendar on exchange and notify you of your appointments, so you can keep the email closed? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Robert Moir | </b> I don't have a problem with you. I was having a mildly frustrating time when I took a break to read JoS and posted the first time. My apologies if it sounded like I was having a go at you. Now we've got that aside, do you not think I was asking a fair question (which you've now answered, thanks). I thought it was important to the discussion as a whole - let alone any thoughts I myself might have - to understand exactly what that meant. We too have a policy of checking and reading email 'in a timely manner' for all staff where I work, and timely here means 'thou wilt log in at least once a day'. With your answer to hand I have to admit I'm staggered by how short sighted your managers appear to be. Is programming a portion of an overall 'computer support' function where you work? To me that's the only possible rationale for expecting you to behave in the way they expect you to and even then it's not a good reason. Are you in a position to work at home or some similar place without interuption and demonstrate the difference in productivity? Would the possibility of a group of like-minded people going to the management together as a group to suggest a modification to this policy work? There are plenty of references from well respected people you could cite to show that constant interuption like that kills productivity but I suppose managers boneheaded enough to have a policy like this in the first place are probably also boneheaded enough not to listen to complaints about it. </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33669' title='View item'> Website Implementation</a> | Wed 12 Mar | Prakash S</td> </tr> <tr> <td bgcolor='#FFFFCC'>I have been reading this website for quite a while : http://economictimes.indiatimes.com/cms.dll/xml/uncomp/default I find their implementation rather strange, why would someone want to implement their website in this way. Doesn;t this drastically slow down a website? What advantage does this hold? thoughts.. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Matthew Lock | </b> Buzz word compliance. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | pb | </b> It doesn't render in either of my browsers (Safari & Camino). What is it? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Gertjan de Back | </b> It does not render on either of mine as well (Netscape 7.0 and Internet Explorer 5.5). I doubt they even want people to read it. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | | </b> Sounds like you are going to have to be more explicit about what 'this way' is. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Jeff | </b> In IE6 I get the message: The XML page cannot be displayed Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later. -------------------------------------------------------------------------------- The stylesheet does not contain a document element. The stylesheet may be empty, or it may not be a well-formed XML document. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Prakash S | </b> http://www.economictimes.com is the actual website, try it. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Martin | </b> For those who report that the site doesn't render: Please give it some time - it takes a bazillion seconds for a browser to figure out what this page actually is, and it apparently draws on many other slow sources. I've looked at the source code, and it identifies itself as XML, so I ran it through some XML validator - and it doesn't validate, don't know if it's the validator or the source code that is broke... And it certainly isn't HTML... </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Jeff | </b> Though I can't actually see the Website, from the url and error message I assume the site consists of xml documents which are rendering by xsl. There are currently no good technical reasons for doing this. The decision to do this was most likely made by a non-technical person who places more value in being chic and sexy then in having a functional Website. Jeff </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Jeff | </b> The first URL Prakash posted was sending XML. The second URL, http://www.economictimes.com, does send valid HTML but slowwwly. The sites slowness may not be related to generating HTML from XML on the fly. Regardless, I think generating HTML from XML is generally a bad idea. What do others think? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | | </b> It can be a good idea. Some companies I know use XML and depending on the user gets different outputdepending on how they are connecting - web browser results in html output to the client, wap broswer gets wml, etc. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Just me (Sir to you) | </b> Prakash, I can not get to either site so you migth want to explain what exactly the site is doing. We have used XSLT(XML)->HTML for some sites based on a CMS before. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Lou Brothers | </b> A news site sending out html from xml is a reasonable idea, as it could offer content removed from presentation so the site can be completely updated without losing any data. However if a site is sending out semi-static information (where the data doesn't change second to second but rather hour to hour or day to day) it should render a new site in its spare time for the necessary files and store them. When a user requests a page, if a stored page is still current send it (HTML) otherwise render a page, store it, and send the new HTML (from XML). This would significantly speed up the user experience on the site. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Jeff | </b> I agree that there should be a layer of abstraction between the content and it's presentation. This layer of abstraction should be a relational database, not xml. Smart news sites will store their content in an RDBMS then generate the html (or wml) from that. In most situations, this will be more efficient and maintainable then using xml. I read once that most of microsoft.com consists of xml that is generated to html on the fly. Does anyone know if this is true? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | trollbooth | </b> But then you couldn't use that big ole box of XML (tm)! What a great idea. Because god knows one day that this piece of shit application might need to share data with another and I want to build in every feature ever that has even a 1% chance of becoming reality. I want to spend the cost of time and money up front, not later when we might need it. Seriouly though, what if you have multiple data sources on different platforms, or feeds from other sources? XML would make a great case for itself if so. If you want to use the same data for different platform displays (IE: one for web, one for PDA's, one for some in house aggregator/RSS feed) XML is a good way to abstract a data store(s). I think XML is great but XSLT is bloated and half ass IMHO. I prefer to parse XML using a parser to output the various formats I need. Of course that's just my opinion and goes against the current trend of XML/XSL everything (tm). XML will fight tyranny. XML will make you look good. XML helps fight cavities. XML is thought to help cure cancer (I can prove this, all I need is $1 million in funding for my study). XML made a red carpet appearance at the Academy Awards and Joan Rivers said XML looked marvelous! XML, did I ever tell you that you were my hero. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Stephen Jones | </b> Not really wanting to start a fllame war <g> but in general sub-continental web sites are VILE. They seem to take the worst in colour displays from 1999-2000 (pink text on a dark bliue background for example) and then combine it with the slowest loading least necessary flash animations ever devised. And this from a sub-ciontinent where broad band or even unmetered dial-up access is almost unknown. I was looking at real estate in Sril Lanka a couple of days ago and the time it took to load was increidible; you could almost build the real house faster than see the 3D flash animation they gave you of the development. It does seem as if nobody actuallly bothers to time how long it takes their sites to load under a normal flaky telephone line going through a sub-standard switch. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Prakash S | </b> Just Me: I think the website is spewing out XML, was not sure how or why it was doing it the way it was doing it Stephen: The paper edition has that kind oh hue (like the Finacial Times) , that is the reason they are trying to maintain the same thing on the website. They are being consistent with the paper edition and the website More thoughts? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Practical geezer | </b> 'They are being consistent with the paper edition and the website' Which ignores the fact that paper and computer display are not the same. Although consistency itself is a good thing, ignoring factors that might influence it isn't. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Brian | </b> XML + XSLT is a fine way of seperating content from presentation. The only problem is if you put it on your web site and expect the user's browser to apply the XSLT for you... New versions of IE do it fine, but support is not universal. Also, it requires that the client download the XSLT, which may be large and any amount of it could be unnecessary (like an excessive CSS file). Also, I think it's not possible to even begin applying the XSLT until both it and the XML file are fully downloaded (whereas the browser can start to render HTML on-the-fly). What I would do is apply the XSLT server-side, and return the html to the browser. Best of both worlds. </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33664' title='View item'> Windows Shell Programming</a> | Tue 11 Mar | John</td> </tr> <tr> <td bgcolor='#FFFFCC'>I have been doing some windows shell programming of late. I find it rather confusing. Any good book(s)? Links & examples? I am trying to emulate the context menu on a shell item in windows explorer in my application. I find that a pidl (ITEMIDLIST) is required for the item (folder/file) that I would display in my list view control. SHGetPathFromIDList() gets the path from a pidl. Is there any way I can get a pidl given a path to a folder/file/network shared resource? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Joel Spolsky | </b> IShellFolder::ParseDisplayName. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Philippe Back | </b> This is a good start :-) http://netez.com/2xExplorer/shellFAQ/index.html and http://netez.com/2xExplorer/shellFAQ/shmain.html </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | John | </b> Joel, Philippe - Thanks a lot. I was able to get exactly what I wanted! </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Tal Rotbart | </b> The quest for this exact API call (shuffling through the IShell interfaces) which was concluded successfully but brought my frustration to a boil and made me ditch C++ and switch to Java... Oh the memories. ...Happily living without the Win32 API for 803 days :) </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | John | </b> I still think Windows Programming is cool. Well, there is some excitement! </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33592' title='View item'> Do you use a news aggregator?  For what?</a> | Tue 11 Mar | programmer</td> </tr> <tr> <td bgcolor='#FFFFCC'>I have been reading a fair amount about RSS and news aggregators lately, and I am intrigued by all the hype that this technology is getting. http://davenet.userland.com/2002/10/08/whatIsANewsAggregator So, Im curious -- Do you use a news aggregator? If so, do you use it for personal reading, work-related reading, or both? And is maintaining an RSS feed of your own something thats easy to do? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Eric | </b> I tried a few news aggregators but it became frustrating trying to sync my subscriptions at home and at work so now I use this online one http://www.kungfoo.com/index.php/portal I get my news fix no matter what computer I'm on. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | A RSS addict | </b> I use Awasu all the time. I have almost 100 subscriptions, mostly news and blogs (it's a wonder I get any work done!) but Awasu has a plugin system that lets you monitor anything so we use it to keep an eye on our web servers and Source Safe checkins. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Andy | </b> I've been digging Dare's RSS Bandit. http://www.kuro5hin.org/user/Carnage4Life/diary http://www.gotdotnet.com/Community/Workspaces/Workspace.aspx?id=cb8d3173-9f65-46fe-bf17-122e3703bb00 </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Peter | </b> Yeah - I'm bit of an RSS fan. I was using Syndirella, but changed to Awasu. I'm checking a few websites - Velonews, (Ok - so I'm a cycling fan) - Ironman Australia (for race updates - I'm racing in April), CodeProject, and a couple of other non RSS sites via MyRSS. Also I get World news off, and a few interesting blogs. It's kinda handy - and saves me spending so much time browsing the web. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | pug | </b> Awasu can't get through our corp proxy. Do you know other apps which will use IE proxy config automatically to funnel the RSS feed? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Just me (Sir to you) | </b> Best I found is http://www.newsgator.com . It's not free anymore, but the Outlook integration is extremely convenient. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | fool for python | </b> Yes. Most of the sites I read with any frequency have RSS feeds. No need to browse the sites when I can just browse all the content in one place. Trying out Newsmonster now. Not quite there yet but lots of good stuff. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | A RSS addict | </b> Pug, if you're having problems with Awasu, try posting something up on their forums. They're pretty responsive. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | ko | </b> Pug, I had problems with awasu connecting through my corp proxy and posed some questions to the forums on the site. they couldn't help me with the specific problem but were very responsive (under an hour during the day and i live in australia) i'm using ie6 and our corporate proxy is isa. this solu. worked for me, hope it helps you: in tools -> internet options -> advanced tab and tick the Enable Integrated Windows Authenication in the security section. Apply the changes. Stop and restart ie and startup awasu. try to create new channels. </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33575' title='View item'> Pair Programming Metrics</a> | Tue 11 Mar | Brent P. Newhall</td> </tr> <tr> <td bgcolor='#FFFFCC'>One of the strongest arguments against Pair Programming is that there are no objective metrics proving that Pair Programming is better than solo programming. What sort of objective metrics would you like to see applied? Im in a situation which would allow me to apply such metrics of pair programming vs. solo programming, and will be happy to do so. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Walt | </b> The problem with coming up with a metric is that the benefit of Paired Programming is not quantitative, but qualitative. My partner and I have used our own variant of XP, and we often pair programming. But the results are not necessarily fewer work hours. Most often the benefit is reflected in the quality of the underlying design and the number of bugs. However, we believe that it has helped reduce production times. Always remember that PP isn't oriented to all tasks. We use it most often when designing the code on the board, and implementing complex code. Small simple code and bug tracking are not as beneficial using PP. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Thomas Eyde | </b> http://www.stsc.hill.af.mil/crosstalk/2003/03/jensen.html </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Philo | </b> That analysis used 'lines/person-month' as a metric. Of course, 'lines of code' being absolutely the worst possible metric... I would think the best evaluation of Pair Programming would be to take a small, complex task (like 'Build a parsing engine to do [strict set of processing guidelines]'), and take 30 people - ten work as individual programmers, the others work as ten pair programming teams. When they're done, score the 20 projects - a subjective blind score on coding style and an objective score from a test harness (run 1000 documents through the engine, score the results). Average the scores and rank by manhours taken to complete the task. Philo </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Thomas Eyde | </b> I agree that lines of code is a bad metric in general, but assume the coding style is the same before and after a methodology change, then a higher line count must mean a higher productivity. But that's of minor interest. The real interesting part is the one about quality. Did you notice the reduced bug count? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Philo | </b> Yeah, and i don't doubt it - I find these days a *lot* of my bugs are 'head smackers' - obvious once they're pointed out. I think I could work pair, and would probably enjoy it with the right person. It's finding the right person that makes me question PP as an absolute. Philo </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Robin Debreuil | </b> I don't think anyone doubts working in pairs is beneficial in some situations. I'd be more interested in what situations it works best, and what team configurations (skill levels etc) work bests in these situations. I think if 'those parts' of the pp advocacy movement would stop calling people social rejects, and maybe drop the 'silver bullet for all situations' mantra, there would be a lot less people calling for 'proof'. When I've worked in pairs with pleasure and success is on design, esp the type that crosses boundires, and debugging. I haven't done a lot of mentoring in programming, but in other fields I've often paired up with the learner (or pro) with the learner at the controls. Learning to drive for example. I think that is obvious and outside the whole pp thing... For straight programming of a module though, I think a lot of the benefits of xp are still there if you: 1) use a good ide that catches bugs, has intellisense so you don't have to memorize so much, does quick partial builds etc. 2) Take short breaks every 15-20 mins, depending on you 3) write comments that explain your intentions, always 4) Follow a (any, but a) standard coding practice (style and architecture) 5) Be conscientious. Don't surf the net or sleep when you should be working. Don't show up tired, drunk, or with a hangover. (ok, not regularily) 6) Write tests, don't take shortcuts on things like exceptions or type saftey 7) talk with others when you need to, obviously. Work in pairs, or a full on orgy when it makes sense. Don't be dogmatic. I see this has veered a little off topic though - sorry. Tests I would like to see (or observations are fine) would try to figure out what exactly are the advantages of pairing when it is an advantage (eg how much of it is taking breaks? How different are individuals with their optimum time between breaks and length of break?). Then use this to figure out what situations pp makes the most sense, and also (I would guess) to improve your productivity when alone or in larger groups. I would guess that each aspect of it would have to be separated somehow, and measured on people working alone and in pairs. There is as much to glean looking into people who can't program in pairs too. Probably they have a very different path to productivity, much like visual thinking vs analytic vs social. It is important to look at the individual if you want to get maximum productivity out of them rather that push them into a box. Maybe by the end, a sort of aptitude test that finds your best work enviroment. If you are an 'pp only' shop, such a test would still be useful - at the interview ; ). </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Daryl Oidy | </b> I wouldn't agree that a higher line count is a valid measure of productivity, even in this limited context. One of the benefits of pair programming is smoother transfer of project knowledge -- which can include things like 'you don't need do that in X, we've already handled that case in Y'. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Thomas Eyde | </b> If we introduce pair programming and the process results in more reuse of existing code, then the loc count will drop. If we know we are better on reuse, create higher qualitu code, and the loc count still increase, what would that mean? I would say increased productivity. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Philo | </b> ...or your first two assertions are in error. :-) Philo </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Big B | </b> (DeveloperSatisfaction + ManagementSatisfaction) / 2 </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Just me (Sir to you) | </b> Since the last tread on pair programming I have been tinking about it, and have come to the conclusion that I am actually keen to give it a try. My intitial gut reaction of 'No way!' stems more from an instinctive fear of being forced to pair up with 'that monster', as opposed to a reasoned evaluation of the method itself. Unfortunately in my current position there is no opportunity for pairing, but should it arise in the future, I am going to test the waters a bit. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Brent P. Newhall | </b> Glad to hear it, Sir! I hope you find it as productive and enjoyable as I have. FWIW, you might want to consider pairing with a friend off-hours, just for testing purposes. I've had a lot of fun coding with buddies. </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33571' title='View item'> "We're in a time crunch on this project..."</a> | Tue 11 Mar | Philo</td> </tr> <tr> <td bgcolor='#FFFFCC'> ...so we dont have time to interview the users Just had to share. Philo </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | big bog | </b> You know what I said about maybe development should look in the mirror? I take that back. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Joe Grossberg | </b> Oh please. I've come across the following: '... so we can't waste time planning. We have to jump right into implementation.' '... so we don't have time to test. Just test it while you develop it.' Along with 'We have a demo at 2pm, so we have to stop all development at 1:30.' (OK. Not exact quotes.) What I wonder, though, when managment uses lack of time or money as an excuse to do things wrong (even if it will cost them more time and money later) ... who does have all the time and money they want? (Besides MS, maybe.) I mean do they think that, at the companies with best practices, the management is sitting around saying, 'Folks, time and money are no concern!' Joe http://www.joegrossberg.com </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Brent P. Newhall | </b> Management isn't thinking. I'm not bashing management; I think that this sort of response is a natural human reaction to a crisis. Instead of thinking hard, you react. It's the 'fight or flight' response. This is where a compassionate voice from the ranks can gently provide a rational perspective before it's too late. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Mikayla | </b> I think the problem is with the 'compassionate' and 'gentle.' I mean, it's unfortunate that most of us programmers are both quiet and optimistic, and it pretty much has to devolve to snowball's-chance-in-hell before we (read I) notice it past our optimism and to life-or-death before we (read I) intentionally break ranks and mention it... How do you notice things going bad before they're terrible? And more importantly, once you've done that, how do you give the hint? And how do you know they've taken it? I mean, I've tried saying 'This is terrible,' before, and rarely do I get any response I can't interpret as 'We're in a hurry to meet a deadline for business reasons you don't (need to) know, probably having something to do with the sales guy's commission. Please stop having an opinion; if we wanted you to have one we'd've told you so. Real opinions are for managers only; for you to have one is insubordinate and rude and drags down everyone's morale.' </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Go Linux Go! | </b> Philo, It's just not your week, is it!? Did you try to talk to mgt about this? Did you show them any evidence that shows that failing to involve users at the beginning is a blueprint for failure? I've been told this same thing to, but I persisted with management and made them sit down and listen to me while I showed them why the approach wouldn't work and then, more importantly, asked them to explain to me how they felt the project was going to be success without involving the users. In my experience, most managers want success, they are just ignorant of how to attain it. Normally, when I clearly communicate the risk and dangers of just jumping in, they usually listen to me. (Not always, though) So go talk to them! </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Philo | </b> 1) We've been pushing for user interviews since the beginning (about four weeks ago). 2) Last week we, the architecture team, decided to stop padding around and confront management with our belief that the deadline was unrealistic (deliver a full client/server case management system for 2000 law enforcement officers by 9/30/2003. Let me point out again that we started four weeks ago and we're in the requirements stage) 3) So when managment reacted badly to *that*, well, it's been pretty unpleasant. 4) The request to meet with the key manager (who was eating lunch and reading email at the time) got us a meeting scheduled for 8:30 tomorrow morning. Philo </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Joe Grossberg | </b> Mikayla: I once explained that it's a 'law' of software that, all things equal, cutting the schedule increases costs and decreases quality (e.g. bugginess, poor design for future enhancements, etc.) and my boss snapped that she had been managing for longer than I had been coding. I don't see where you get the 'quiet and optimistic' bit from. In my (limited) experience, most programmers are realistic and no quieter than most. I think if people are quiet, it's because they're resigned to the fact that it's unrealistic to expect some people to listen, instead of viewing them as a complainer. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Stephen Jones | </b> Philo can you tell us which jurisdiction this is being rolled out in - I rather fancy increasing my bank balance in the last months of this year! I'd be rude as hell; inform the management that if they don't do all the work with the users the software will be full of holes, and bring as many cases as you can find between now and the time you have the meeting. COST THE SCENARIO OUT. Give them the costs of overrun when they find they have to change things mid-contract. Ask them innocently of their legal department has been informed of the addtional liability they may have if their defective software causes the law enforcement department to malfunction and they are sued for punitive damages as a subsidiary who did not take due care in the process at the design stage. You probably won't win because human stupidity is a pretty powerful force and software development is where history repeats itlself in an endless loop. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Bella | </b> Haha, that brought back such fond memories of projects doomed from the start. Classic disaster. Hopefully, you're a consultant. It's amazing such naive prject mgmt still exists. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | UI Designer | </b> Ah yes. It's always heartwarming to see sacred software engineering principles sacrificed in the name of expediency. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Contrary Mary | </b> Learn to ask with a straight face, 'Is this supposed to work after we deliver it?' as if you don't want to be disloyal by exposing a scam. Fondly remembering a disasterous system, that I got brought in on to 'just finish up the user interface and help roll it out' after a programming whiz (who only sucked up to the VPs) left the company. It was supposed to keep track of the budgeting process, but only had one set of hours remaining on project. If an engineer logged into the system, entering expected hours overwrote the budget. If someone entered the budget hours, vice versa. There was no possibility in the system for discrepency between budgeted and actual hours. Slick. I explained the whole thing nicely and went back to school. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | one programmer's opinion | </b> As most developers can attest, unrealistic timelines for software projects are a common problem. Being given an end date (9/30/2003) before your group has even come up with any type of estimates (schedule, costs, etc.) is not that unusual, however, the odds are very good that things will NOT work out as well as your company hopes they will. I think the general problem is that your group has to work by a set of rules (i.e. software development process), but others in your organization don't want to or feel they don't need to play by those same rules. The salespeople in your organization seem to be capable of making up their own project estimates or they seem to have the power to agree to client's business demands which of course you then have to live with. Imo, if your organization's sales people didn't recieive their commissions until the customer was satisfied then things might work differently in your organization. Also, management would have an incentive manage the customer relationship and let the techies do what they do best. Sounds like your IT department desperately needs to hire someone who has the clout and the balls to stand up to upper management. If management won't listen to your group and compromise (i.e. by accepting a stripped down version of the product) then if I were you I would keep my head down, my mouth shut, and do all I can to CYA. If an executive or even a project manager has committed to a project being completed in six months, do you really want to be the messenger who gets shot? Realistically, the only options you seem to have available to you are: 1) Quit 2) Do what you can to make the project a success and hope for the best What ever you decide to do make sure your resume is up to date! </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Konrad | </b> If you've got no requirements then you've got one less set of contraints. You've got time as a constraint, but perhaps one option is to de-scope features - it is more useful to come back with 'according to our estimates, this time enables us to give functionality x', where x is the set of features you guys think you are capable of delivering within the time constraint. However you'll obviously still have to spend some time with the users to work out what the features are that are actually needed! I'm sure this would go down in flames, as the need is to have all the features, all working, in the arbitrary timescale... </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Just me (Sir to you) | </b> Right at the very top of your 'Top 10 Risks' list for this project at number one put: 1. Poor alignment with customer requirements leads to client not signing of on final deliverable. Probability 96%. Proposed solution: Interview clients for use cases. Status: risk reported, solution proposed, awaiting aproval Make sure the other nine points are reasonable too by tomorrow morning. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Evgeny Goldin | </b> [[ You probably won't win because human stupidity is a pretty powerful force and software development is where history repeats itlself in an endless loop ]] Can't say it any better. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Mark Newman | </b> 'There comes a time in the history of a project where it's necessary to shoot the engineers and start production.' I don't know who said it, but it's often true. :) </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Philo | </b> And how do you feel when management decides that moment is before the design has been started? Philo </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Patrik | </b> This being given an absolute end-date before any real estimates have been done rings a bell with me. When you get this deal, the most common case is that you have to replace some old legacy system where the vendor is withdrawing support for the old version, and wants a bagfull of money to upgrade to a recent version. Even though vendors usually announce end-of-life-dates for their old products way ahead of time, it always comes as a chock to management that you cant replace a 10 year old legacy system in four or six months. Management usually wakes up every year, inspecting support deals with vendors, and then spend 6 months arguing if they should pay for a new system out of the left or right pocket. The estimates is then retrofitted given the original dates; and everybody seem to know they are mostly irrelevant. When the project later fails and goes way over budget nobody remembers the initial restraints that were put on the planning and estimates. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Philip Dickerson | </b> Read IT/software disaster stories like these at: http://www.computerworld.com/networkingtopics/networking/management/story/0,10801,53014,00.html - AMR Corp - After 4 years and $125 million in development, [the project] crumbled in 1992 when it became clear that [the project] would miss its deadline by as much as 2 years. [The project] died and AMR Corp took a $109 million write-off. - When it launched a $35 million enterprise resource planning (ERP) project way back in 1993, FoxMeyer Corp. was a $5 billion drug distributor in Carrollton, Texas. Now it's bankrupt. It wasn't the fumbled IT project alone that destroyed FoxMeyer, but that was a critical contributor [...] A few quotes from the article: - The root causes of IT failures haven't changed a bit over the years. Miscommunication, hazy goals, 'scope creep,' inept leadership, pitiful project management - you've heard, if not heeded, it all before. - Bruce Webster, a director at PricewaterhouseCoopers in Washington recently studied 120 IT lawsuits filed since 1976, and he said he's convinced that most flops could be avoided if people simply knew the time-honored best practices of systems development. - 'There's a natural tendency to get overly committed to something, especially when there are no clear signals telling you you are off course,' said Mark Keil, an associate professor at Georgia State University in Atlanta. Though specific individuals might learn from their own mistakes, those lessons aren't transferred to any collective IT consciousness. - In IT groups, everyone below Webster's 'thermocline of truth' knows the project is sinking, while everyone above it thinks things are fine. Senior executives can be oblivious. They aren't involved enough, they don't want to have to face a failure, or underlings are afraid to tell them, he explained. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Just me (Sir to you) | </b> Philo, give us an update after your meeting this morning. Might make life bearable for those of us in similar situations. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | richard | </b> One thing that really amazes me is that while production level people (i.e. coders, designers) are expected to be even more and more competent than ever before (cost saving and all that), incredible leeway is given to management in terms of (lack of) competence - when they can gate the productivity of so many people, and potentially waste so much company money. Whatever happened to the responsibility side of possessing authority? That bit was probably given to the developers. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Philo | </b> The phrase is 'You can delegate authority, but you can never delegate responsibility' This seems to be one more thing that bad managers have backwards - my ever-loving management team at work have honestly admitted, when pressed, that they are trying to delegate responsibility but not authority. Philo </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33526' title='View item'> Shared email archives</a> | Tue 11 Mar | Nacho Bracho</td> </tr> <tr> <td bgcolor='#FFFFCC'>How you conscious people here manage your email archives? We have eight years of emails in a miriad different formats an I want them all to be shared in the intranet (4 users, 2 servers). Last year messages are in the server and we access them with IMAP apps. The conversion of all the archive is a hard work so I only want to do it just once. I have been considering import the old messages in the actual IMAP system, but I don not think that IMAP is designed as a historical mail repository. Maybe a database is the solution, but you lose the email feeling. I think this eight years email communications are really a great part of my personal life, and the whole part of my company so yes, I want them all!!! Regards </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Mike Swieton | </b> What kind of email mailboxes are you talking about? Are we looking at proprietary (or at least binary) formats like a lot of Win clients may use? Or are they all standard Unix formats like maildir? I think that's the biggest question here because if it's mostly standard Unix-style plain-text archives there are probably free tools you can manipulate it with. As for actually managing the archive, I don't know what the best way to access it is. I just tar up all my old messages and rotate archives every few months. Not great, but I don't access it all that much, either. Maybe there's a web app you could use? Or maybe a mailing list archive CGI could be tricked into thinking all your old emails were list data. I haven't ever set one up, but hey, email is email, it can't be that bad ;) (knock on wood...) </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Chris Winters | </b> The Cyrus IMAP daemon [1] allows you to setup mailboxes that can be shared among multiple users. It's also fairly speedy on larger mailboxes, assuming that you aren't running it on a five year-old PC. What's nice is that people can use their preferred mail reader -- I've used Outlook, Outlook Express and Mozilla Mail -- to access the archives and they're not smashed into a plodding web format. [1] http://asg.web.cmu.edu/cyrus/ </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Nacho Bracho | </b> There are tools to convert between formats. Its just a question of patience (we have emails stored in Outlook, Emailer, other apps, even Compuserve files, almost a year of FirstClass shared with another company and current intranet IMAP). Well, loooots of patience... Surely our amount of emails are just a fraction of the bulk processed by Hotmail in two hours but I dislike using unappropiate tools. I can setup a shared database, but the email threads with message id's is just a mess (something to study and spend time in). IMAP is good, but to perform a query, all messages must be downladed in the client machine, not only headers, so it is not better than POP. I'll keep on searching... </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Robert Moir | </b> No way you should consider moving to this platform but if you are already using Exchange server as we are where I work, you can use a public folder as a shared and searchable mail archive. It's fairly common practice too that these are used for mailing list subscriptions as it's nice to have an archive of *some* *techincal* discussion lists at times. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Javier | </b> Have you tried (or at least given a looK at) ZOE: http://guests.evectors.it/zoe/ From their about page: 'Zoë The goal here is to do for email (starting with your personal mailbox) what Google did for the web... The Google principle: It doesn't matter where information is because I can get to it with a keystroke. So what is Zoë? Think about it as a sort of librarian, tirelessly, continuously, processing, slicing, indexing, organizing, your messages. The end result is this intertwingled web of information. Messages put in context. Your very own knowledge base accessible at your fingertip. No more 'attending to' your messages. The messages organization is done automatically for you so as to not have the need to 'manage' your email. Because once information is available at a keystroke, it doesn't matter in which folder you happened to file it two years ago. There is no folder. The information is always there. Accessible when you need it. In context.' That quite odd manifest 'hides' a great program. The idea: it's a sort of meta-index and mail proxy at the same time. It'll index and cross-reference your messages... It's not something easy to undertand, but it's quite 'addictive' once you try it... My recomendation: Give it a try. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Thu 13 Mar | Nacho Bracho | </b> >Have you tried (or at least given a looK at) ZOE I tried it a couple of times, and I will try it again. I do not know if the app is not mature enough for me or, on the other side, I am not mature enough for the app. :-) Thanks for remembering it to me. On the Exchange suggestion, yes, I don't like the switch, but I get the idea you are talking about. (Technical lists are also in my mind to share in the intranet, in spite of all my friends say 'Do not store junk, everything is in Google'). I posted my question here, at Joel's site, because of the 'realistic' nature of the site and the people in it. Somehow, I was expecting more on 'forget email format, store it all in a database and go on working'. :-) Regards: </td> </tr> <tr> <td align='left' class='sumSpacer'></td> </tr> <tr> <td><a href='http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=33515' title='View item'> Reluctance to Learn</a> | Tue 11 Mar | Alai</td> </tr> <tr> <td bgcolor='#FFFFCC'>One my coworkers is a VB programmer and thinks other languages are too hard and doesnt seem to have the willingness to learn other languages (C in particular). Any solutions to this? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Walt | </b> Get a new employee. One of the fundamental characteristics of our field dictates that things evolve, languages included. If one chooses to not evolve with it, he is subject to the laws of natural selection. That's why most universities teach concepts rather than languages. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | B# | </b> I have to whole-heartedly agree. I can't imagine a programmer saying anything is too hard. Isn't that why we do what we do... because it's hard, or so we think? If he's not up to C or whatever, be gone with ye! </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Tim M. | </b> Is there a reason that he needs to learn C, besides earnning 'geek points' in your eyes? VB to C seems like a large jump - if all he's ever done is VB, C can be daunting, especially if he's dropped into a production app too early. Perhaps he is not reluctant to learn in general, but sees no point in learning C in particular. The truth is that C is a good thing to know, but many (most?) programmers have no need for it. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Walt | </b> Learning C alone is not of particular benefit, but it is very helpful to know C when you want to start using C++. And C++ still has many years left in it. But I am an idealist, and I don't think that specific languages are the issue at all. A good programmer doesn't limit himself to one language, since it may not be around in a few years. Tons of VB6 programmers are jumping to C# and ASP.NET. C++ people are learning Java. And we don't know what will come tomorrow. New languages should address old problems, and provide new innovative solutions. If I had an employee that was unwilling to change because he doesn't want to learn, then I'd look for someone who would. There are tons of them out there looking for work right now. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | anonymous | </b> This topic is like saying: - my coworker is a C programmer and thinks assembly language is too hard and doesn't want to learn it - my coworker is an MFC programmer and thinks that writing kernel-mode device drivers is too hard - my coworker speaks English and thinks that learning to speak Sanskrit is too hard Why do you think that the VB programmer needs to learn C? If there is no specific work reason for the VB programmer to learn C, just stay out of his/her way and let him/her continue to be much more productive in VB. It is true that some people seem unwilling or reluctant to learn new things that would be useful in their work (or lives), but being unwilling (or uninterested) to learn the C programming language (or some other specific language) is probably not a good indicator of whether someone is unwilling to learn in general. I am personally 'unwilling' to learn (or uninterested in learning) Ada, C++, Lisp, Java, etc. However, I have learned many new things over the years - XML, SOAP, XHTML, HTML (years ago), CSS, JavaScript, some new design patterns, Win16 API, Win32 API, VB1, VB3, VB5, VB6, VB.NET, better user interfaces, database modeling, Access, SQL Server, Oracle, stored procedures, moving from client/server to 3-tier to n-tier programming, transactions, stateless programming, and on and on (not to mention all the non-programming learning - how to pour a concrete patio, etc). </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | raindog | </b> >> Any solutions to this? Solutions are needed when you have problems. What is exactly the problem in this case? I know many people who know the only natural language -- English, and don't want to learn other languages. Is it a problem? Probably, it's not. However, I personally speak 6 languages and think that mono-lingual people definitely miss something. The same is true for programming languages. 'Learn a new language, get a new soul' - a (Czech?) proverb. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Walt | </b> I don't think is about requiring people to learn old languages. For that matter, VB is old and outdated as well. Large scale desktop applications written in VB are bulky and the code base is a huge mess. And if you want to do something later that you can't do in VB (such as inheritance), plan a major rewrite. VB can build you software quickly, but the long-term return on investment is horrible if you have to maintain it. Programmers need to be aware that any language is not all powerful, and different tasks require different languages. C is not dead by any means because if you have a small task you want to run very quickly (like doing floating point calculations), you don't want to do it in VB. My company uses VB for a main UI, yet all calculation intense operations are done in C and C++ DLLs. What one language can do in x lines of code, others take 3x lines. And no one will say that 3x lines are easier to maintain than x lines. In summary, 1) Programmers should be open to learning new languages so they are capable of solving problems in different ways 2) Large scale projects often require more than one language. 3) You don't want to keep a stoic, single direction programmer on his single, stoic path for years and years, only to find that once he's gone or that the path doesn't work any more, you don't lose all your money in a total rewrite. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Bored Bystander | </b> Threads like this seem to indicate that techies have a say. In technology oriented companies in technology rich areas they do. In any other circumstance they generally don't. >> One my coworkers is a VB programmer and thinks other languages are too hard and doesn't seem to have the willingness to learn other languages (C in particular). Uh, in my area, a guy like that usually makes more than me or other people who are 'serious developers'. Why? Mainly because he's not smart enough to intimidate anyone, therefore is known as a 'good guy', not one of these 'overly smart pricks' that know too much ... Being an uber-geek is generally a recipe for career suicide because it invokes jealousy, on the part of everyone else. Because he probably partied in college (if he even went at all), therefore can hold his liquor, and therefore comes off as funny at parties, so he's more socially oriented - which means a candidate for management grooming. The most 'serious developers' are generally at a SEVERE political disadvantage in most companies, unless the owners of the company or top management are technically oriented and they know such developers personally. Which is usually not damned likely. Being a serious developer, career wise, means sitting in the midst of a domain where you are nitpicked over trifling style disagreements with management. As far as the VB lightweight goes, more power to him. He'll probably make more than all of us soon if he plays his cards right. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | trollbooth | </b> THERE'S NO CRYING IN BASEBALL! kill him immediately and make room for an actual developer. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Walt | </b> If the organization strongly resembles the Dilbert universe, then anything is possible. If you are a serious developer (meaning you probably have a degree and are versatile as to your programming abilities), you will generally look for a job that supports that. If your company hates you for what you are, find one that appreciates it. If your company's a .com and all it cares about is having a really cool web site and making a quick buck before backruptcy, then they'll stock their pond with cheap programmers that probably never went to college, and are usually limited to a single domain (like VB). They are very good at what they do, but that's where they end. If your company is striving to produce quality software, and plans to keep doing so, then you need a higher class of developer. In that case, being smarter doesn't make others jealous, since one person's raise doesn't mean another's paycut. I have good fortune to work in a team of 4 developers, all of whom have different strengths. And I am first to admit to being the low man on the totem pole. But rather than be jealous, I've learned from them, and in the time I've been here, I've moved from straight C++ to COM, C#, and a little VB as well. And the pay raises don't come from just sitting in a cubicle and programming with blinders. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Go Linux Go! | </b> Wow...some serious cynics here. Interesting excuses aside, a true professional in this field will always be striving to learn something new, be it a new language, technology, etc. I've met lots of 'I know <insert relatively outdated technology here> and that's all I care to learn.' I have *no* use for most of these people on my projects because I want people who have a passion for this industry. I want people who feel the constant need to learn something new. Once, I was just a happy programmer writing assembly language. Nobody asked me to learn all the languages I've since learned. I took it upon myself to expand my horizons and adjust to industry changes. And that's a good thing. There ain't a lot of work out there for guys that only know assembly language. Hey, if someone wants to stick with VB and not learn anything else, then that's fine. Good luck to them. As for me and the people I work with, that's not good enough. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | B# | </b> I find this silly in the extreme. Inherent in the original post is the fact that there is some need to learn other languages. Alai didn't say: 'A co-worker is unwilling to learn to remove his own gall bladder with a spoon and, although there is no good reason for him to do so, I was just curious why he doesn't want to learn. Can we assume that there is some requirement to learn and he/she is simply refusing or reluctant. No? Naw that's silly! Less learnin' more earnin', that's what I always say. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Robert Moir | </b> One my coworkers is a VB programmer and thinks other languages are too hard and doesn't seem to have the willingness to learn other languages (C in particular). Any solutions to this? ^^^ That would depend on what the problem is exactly? Is the problem that the co-worker is unable to do the job they are hired to do? In that case, it should be put to them that they _need_ to learn to keep the job and action taken to replace them if they fail to take the hint? Is the problem that you feel offended that he doesn't laugh at your jokes about common C bugs? In other words, is the problem that you think the co-worker 'Should' be learning C because 'It's a good thing'. In that case, the solution would be for you to get on with your own work and mind your own business. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Just me (Sir to you) | </b> I would also think twice if I would be asked to invest heavily in a technology that in my mind is a dead end. I am not implying by this that C somehow qualifies for this and that VB or wathever does not. That is a value judgeent everyone makes for himself. But if tomorrow it was decided I should invest the next year to become our specialist in <insert a technology you think is running on its last legs within your company and is probably unmarketable anywhere else>, would you jump at this opportunity to aquire this new knowledge? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Alai | </b> The general idea is to get slightly more structure and more reliability then I can see in VB -- one example is trying to get a timer control to be consistant across different speeds of processors. C# might be a good idea -- I don't know much about it, but I've heard it's fairly easy to pick up. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Bored Bystander | </b> B# - I don't like to post 'yeah, what you said' posts but: >> 'A co-worker is unwilling to learn to remove his own gall bladder with a spoon and, although there is no good reason for him to do so, I was just curious why he doesn't want to learn. ROTFL! Excellent! Is that copyrighted? :-) >> Less learnin' more earnin', that's what I always say. Could be that the VB programmer is 'onto' this. Businesses value whatever earns them more money. Very often, 'lightweight' people who take the low road have figured this out. Seriously, whether this guy 'should' learn VB will be related to several factors: his career goals and interests, his interest in continuing to code for a living; and his management's plans for him, being predominate weighting factors. Also, I've observed that developers with only one language experience commonly just don't know and aren't aware that their tool *is* limited. To be elitist about it, this happens most with the ones that have no professional credentials such as some college or otherwise narrow technical experience. They kind of think the whole world is BASIC or Progress or Access. I worked with an ex-machinist who had made the jump to programming (VB) back in the 'we need warm bodies' mid-90s, and he would assert loudly that 'you could use VB to do anything!'. Obviously he knew nothing about device drivers, OSs, databases, engines or low level programming in general, and he would drunkenly kick your ass if you tried to tell him.... </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Alai | </b> This is also a generalized consensus between the two of us that C might be more flexible then VB for the things that we need to do (custom video playback, and networking). I might just explain things badly, but some concepts (like bitmasks and recursion) are things that I would have difficulty getting across. Is the problem on my end? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Go Linux Go! | </b> Alai, You mentioned custom video playback and networking as examples. Are there defined performance requirements for the application? VB is not known for being nimble when it comes to speed. What kind of networking? Client/Server, peer to peer? With winsock, VB can easily be a client or a peer, but if you are having to make a server then that just flat leaves VB out. (Doing things like IO Completion ports in VB just won't happen.) Anyway, if there really is a concern that VB won't work, then try to hammer down some performance requirements...and then hang him with 'em. :') </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Alai | </b> This networking is both peer-to-peer and acts as client to server, with the VB program being the client. I'm not sure on the limitations of VB, but my coworker feels that VB is very limiting in certain respects (he's been programming in it for years). </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Joe Grossberg | </b> Why does he think it's hard? Is that specific to C or with new languages in general? If it's the former, try addressing those specific concerns. If it's the latter ... Very, very early on in my career as a Web Developer, we had a CGI/Perl script that needed writing. I didn't know how to do so, I told my manager. 'Well then learn how!' she rudely demanded. But after my initial defensiveness, I realized she was right. No one's born knowing this stuff. All it takes is intelligence and hard work. And if they're missing either attribute, you don't want them as a coworker. Joe Grossberg http://www.joegrossberg.com </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Alai | </b> It's not a matter of lacking intelligence or hard work -- he has both, and works extremely hard. He just feels that even though he thinks that C or something like it is the way to go that it would not be a good investment of his time, and is struggling with recursion. In the meantime, he has many other duties that make his time very tight, and so doesn't feel like learning this, although it would be the way he feels things should go. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Mike Swieton | </b> Alai: That last description of the situation makes it sound to me like he's using a familiar tool for the job because he doesn't have the time to learn the correct tool (Not that C necessarily is the Right Tool, but if we assume it's not VB...). This sounds like a management issue to me. It seems like your friend is being asked to do many tasks, and the only way he knows to get them all done by the deadline is to do it with what he knows. That sounds reasonable to me. If the quality of what he's outputting is good enough, then fine. But if his VB work won't cut the mustard here, then management should get someone with the skills needed, whether that be through replacement or just giving him a week to play with C or whatever magic bit of syntactic sugar is needed for this project. Maybe there's another option here, but it sounds like he's not being given the opportunity to do his job better (Assuming it isn't good enough now). </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Robin Debreuil | </b> Don't underestimate the secondary skills people with 'lesser' languages usually have. I'm not comfotable with vb myself, but many I know who are, and they tend to be very good at things like the business end, they are closer to the end user, or better at integrating with office, champions of the quick and funtional etc etc. Imo, the benefit of learning new languages is mostly that you get a better look at a different level/aspect of programming. If someone isn't interested in C, there is no reason to feel superior. Maybe device drivers just don't float their boat. I don't get more into vb because the 'around the office' part of programming doesn't interest me, and that is where vb seems to shine. If you see a vb person making more money than you, don't right it off to brown nosing right away. There is a good possiblity that they are bringing more value to the company. Maybe because VB is easy, in fact. I've gotten very familiar with actionscript through animation. The programming was easier than now, but the concepts that came with it weren't. Of course the hard part of learning any new language isn't the fourty odd keywords, its understanding what it exposes. Something to keep in mind I think when rating one's intelligence based on how 'hard' their language is, I think. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | RocketJeff | </b> >> ...and is struggling with recursion. What does recursion have to do with learning C? You can do recursion in C (or in VB for that matter), but it's not a fundimental part of learning the language. Most of the time when recursion is the answer to a problem, either it's the wrong anser or the wrong question was asked. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Sunshine | </b> What is your company doing to help enable him to learn? Sign him up for a class, get somebody to mentor him, buy him some books. After he's gotten his feet wet, he probably won't be so reluctant to learn C. Just because he's not as self motivated as many doesn't mean he can't learn it. He may lack self-confidence, or time, or motivation, or support. Granted, these are something you want the employees to have, but why throw him out on ear until he's been given these tools to turn him into a better employee? Proper co-employees and managers should be able to turn him into a better employee. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | anonymous | </b> These are the types of issues holding this industry back. Programmers (or whatever fancy title you want to give them) who refuse to learn new things. Whether those things are software development concepts they should already know (that might be learned through another programming language) or communication and business skills that help provide customers (whether internal or external) what they actually need to perform their tasks. What other supposedly 'professional' industry can you think of where people read one For Dummies book and then declare themselves trained? Doctors? Lawyers? Accountants? I have yet to see a case where replacing a 'good enough' programmer with a great programmer wouldn't generate additional revenue or decrease costs. This includes everything from higher support costs because of utterly pathetic code that some of these people write to unhappy customers because the programmer seems to feel that usability is a training issue. Do you think that any of the truely successful software development companies hire these poor excuses for programmers? Think Microsoft and IBM. It is no wonder that these jobs are being shipped overseas. While it is questionable whether or not overseas developers are better in what I mentioned above, they are certaily cheaper and probably just as good at creating code that is 'good enough'. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Stephen Jones | </b> Let's get this straight. This guy is producing software to a tight schedule, and you expect him to learn C in his coffee breaks and produce production level code in it at the same time? It seems to me that it's all the guys who are criticizing him who need to do some quick learning - like the neurons firing before fingers on keyboard technique. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Mark Hoffman | </b> Actually, Stephen you may want to take your own advice. Who said anything about in between his coffee breaks? Regardless of whether or not he should learn C, programmers should take an interest in learning new technologies on their own time. This will probably upset a lot of people, but if about the only time you learn new software development techniques is while you are working your 40 hour week, then you are very likely stagnating. Sure, you may be able to hold down a job without ever picking up a technical book during the evenings or weekends, but rest assured that over time you will become a relic with outdated skills. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | anonymous | </b> I guess I didn't make that clear. Learning should be done on your own time if necessary. I would expect anyone who wants to be a software developer to have at least that much interest in their profession. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Alai | </b> He is very good at the business end, and more of his time is being soaked up by this; I don't expect him to be an expert, but it would be nice if he was familiar enough to get the gist of something that have explained before and now have code for. I have noticed that VB is very good for prototyping and getting a mockup; often the mockup becomes the real thing because redoing part of it to fit comments produced before release would involve more development time and that cost is easier to see then the cost of a redesign of the interface to accomodate changes, but that's a whole other can of worms. I suppose that this reluctance to learn something that we've said might be better to work with is partially due to the fact that he has me handle that end, and is thus a more efficent use of time. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | | </b> put out an add for a programmer with C and VB skills. Then dump the hundreds of resumes you get on his desk and ask him to pick out his replacement. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Tue 11 Mar | Contrary Mary | </b> I think one of the real problems of this industry is the blame the victim attitude I see here. I keep hearing the phrase 'world class coder' and if a guy (or gal) isn't one of those then they should just lie down and die. Anything that happens to them can't possibly be worse than they deserve. I'm sorry, but the phrase 'world class coder' brings to mind about 500-1000 people. Now how much of the world's work are these folks supposed to be able to get done? Should all the rest of the programming in the world just stop until these gods get around to it? What I see here is a valued VB programmer, good with business rules (the heart of VB work), being treated like dirt because his C colleages are untalented enough to be able to explain what they are doing in their part of the project in plain English. Two points: 1. Constant learning is part of the computer world. I take a community college or extension course each year in a new or related area. If recursion is his problem, having a teacher would probably help. I had to hear this stuff a couple of different ways (teacher, TA, a book or two) before it sunk in. 2. The methods out there for learning computer math on your own are crap. I got a 5 on my AP calculus exam and a B in differential equations in college. When I came to programming later, the math gave me fits. And there was very little help available. Someone at O'Reilly needs to write a math for programmers book like the physics for game programmers book. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Stephen Jones | </b> -------'Regardless of whether or not he should learn C, programmers should take an interest in learning new technologies on their own time. '----- You still don't get it Mark. The guy is stressed out doing a difficult business application to meet a deadline; he probably is too tired to do much studying during the week, and will need half of the weekend at least to wind down. How quickly do you think somebody can learn C to the extent of being able to write mission critical code in it? A couple of weekends? It probably took you most of a year at college to get anywhere near that level. This thread is mistitled 'Reluctance to Learn'; it should be called 'Reluctance to Learn C' which is a different matter. Now this guy doesn't need to learn C because it's a useful extension to his present skills; as other posters have pointed out there are plenty of other things (VB.NET. C#, ASP.NET, XML, UML as well as domain related stuff) that are more relevant to the typical VB programmer's normal work. The company wants him to have C now for the program he's writing to a deadline. I speak three or four foreign languages; if somebody told me that Chinese was necessary for a business project we had in China for the next three months, and that it was my job as a professional linguist to keep learning other languages, I would laugh in their face. By the time I had even a smattering of Chinese the project would be over. Why do these self-appointed guardians of the programming flame find it so difficult to apply common sense to their situation? </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Just me (Sir to you) | </b> Look at it this way (I'm deriving all the 'facts' from indirect hints in the posts here): - You colleague is a hard worker with a lot on his plate. - He is bright and very productive with a certain tool, VB, and this is the reason he manages to keep the plate from overflowing. - There is this new project added to his workload, that has a tight schedule associated with it and can be done in VB - It could also be done in C and in theory the result could be more performant - Your colleague has no C skills, and basically would have to learn this new skill while pumping out the production code on the tight schedule My advice: Finish the thing in VB. Look at the actual performance bottlenecks (if any). A possible solution could be rewriting selective parts for performance (maybe in C). It is unclear to me what your role in this project is. If you are involved and have the required C skills already, why not take on some of the parts you intuitively feel would benefit most from the C approach? I see no reason why you could not produce some components for him to consume? Why would it have to be 100% C or 100% VB? Unfamiliar with C component development for VB consumption? Now here is a great opportunity for learning on your part. </td> </tr> <tr> <td bgcolor='#FFFF00'><b>Wed 12 Mar | Mark Hoffman | </b> Stephen, Relax. Chill...Read what I said. I said the argument *isn't* over whether he should learn C. You even quoted me then went off to rant why he shouldn't be forced to learn C. Forget about C. It's moot. Once again, my point wasn't that he should learn C. My point in general is that many programmers make zilcho effort in advancing themselves. Does this describe the programmer in question? It's impossible for any of us to say unless we know him personally. Since I don't know him personally, I can only draw from personal experiences. And in that experience, I have met many 'Cowboy Coders' who know one technology and that is all that they want to know. Often, it's VB programmers. They know jack about architecture, jack about software engineering, jack about how to do unit or system testing, yada, yada. All that would be fine if they could be isolated and left to focus on what they are good at. But therein lies the rub. All too often these 'Cowboy Coders' are allowed to run amock. I'm not picking on this particular person. I'm making a broad generalization about many programmers that I have worked with that sound a lot like this person. (In this case, he doesn't understand recursion. That's a pretty *basic* concept. If he doesn't understand that, he needs