last updated:19 Aug 2002 12:07 UK time
Joel On Software Discussion Forum
JOS Statistics - Recent Comments
(Comments added for week ending Sun 17 Mar 2002) | View Other Weeks
What do you want from this forum? | Sun 17 Mar | Timothy Falconer
Personally, Id prefer it if we stick to topics stemming from Joels articles, such as writing functional specs, UI design, running a software company, interviewing, the software industry, great books, software marketing, project management fundamentals, etc. Do we really need another how-to resource for specific programming technologies?
Sun 17 Mar | Mike Gunderloy | How about 'all of the above'? Certainly the number of responses to the specific technology questions seems to suggest that lots of people do find those discussions useful. After all, many of us have given up on Usenet entirely as a gaping suckhole with a very poor rate of return with time invested. So 'take it to Usenet' isn't necessarily a useful response. I suspect a lot of us here could get behind a 'forget this topic' function that would enable pruning the list. But when you come right down to it, it's up to Joel to provide the functionality and set the tone here. While he's playing King Log, we're going to get random chatter, homework questions, and technology discussions, as well as Joel-related topics.
Sun 17 Mar | Timothy Falconer | Good points. I went looking for an indication from Joel what the scope of this forum should be, and there it was, staring me in the face: 'A public forum for open discussion of topics raised on Joel on Software.' IMO, most of the last seven or so topics don't qualify (visual basic homework problem, what to use for simple copy, how to disable flash, how to write ASP code, what do you think of .NET, etc) Are they useful to some people? Sure. Perhaps he should create another forum for 'Practical Programming Advice' so the people who came here for the Joel on Software topics don't have to sift through advice on specific technologies.
Sun 17 Mar | Jan Derk | Timothy Falconer wrote: 'What do you want from this forum?' Good point. I agree that the amount of off topic (read less interesting for the selfish me) posts is slowly growing. My fear is that this ever increasing popularity will make it worse and might even kill these groups, because many posters don't want to look at 'how can I program Hello World' posts. So what's the solution. Here's my proposal: Add multiple topic groups. Like: Discussions about Joel's articles, Software design, Homework questions, whatever, to keep areas on topic. Add moderation to move/edit/delete posts if they go off topic. Allow emails to be sent if somebody responds to your post. In short: Put up VBulletin to kick this forum in 2nd gear and keep everybody happy. The bad news is that Fogcreek already mentioned that they were not interested in that.
Sun 17 Mar | Christopher Wells | Nothing. Sometimes I get some anyway. Whenever you post a new topic title, do you lose an old one (does an old one scroll off)? Actually, here's something I want. Has anyone found a way that doesn't involve my installing non-standard s/w, to automatically or semi-automatically archive or keep available to me all messages here? In a real newsgroup I use Agent with 'purge' switched off.
Sun 17 Mar | Albert D. Kallal | Actually, I think my last post does qualify. In fact, I could argue that this post is more off topic then mine! This post has nothing to do with software development! Clearly mine does. In fact, I can site at least 4, or more articles that Joel has written on the very question I asked. For any of you who just think that I would come here with a question on how to copy a simple file...you are *V E R Y * mistaken. I also did NOT ask for example code, nor ask how to solve the problem in a particular language. My question is about code dependencies, and the future trends in software development. Please read my response in that thread. The real issue is about code dependencies. Anyone who develops software would see this as issue. Code to copy a file is like breathing air....it is a non issue. Very much of what this discussion board becomes is what we the readers make of it. Thus, I hope some people read a message and see a larger topic. This means taking some time and effort to think and contemplate what the issues of the day are. If you don’t make an effort, then my question seems dumb. If you do make an effort, then it centers on one of the largest issues we developers are facing today. Joel has a great style of writing. So, when he says we should all read the book PeopleWare, he also gives a great little story as to how, and where he found that book at Microsoft. Things I like: ** Problems that developers encounter, and how they were solved. ** Joel’s articles on how Excel ate Lotus 123’s lunch (and thus also how Word ate WordPerfect). It was not marketing, it was not bundling, it was not discounting. At the end of the day Excel and Word ate 123 and WordPerfect due to certain decisions. Learning those decisions was perhaps one the greatest secrets that Joel exposed about Microsoft. It is also a means that I can make my software company better. Anyone who offers articles how they beat the competition are gold (problem is, most don’t write those articles). ** Joel’s Articles on functional specs. Everyone talks about them, but Joel’s articles on this subject are brilliant because they are so dead simple as to be boring and UN-cool. You could read them, and say they lack complete substance. But then you folks would be missing the whole point of the matter. Joel also made a brilliant observation about the difference between “threaded” discussions boards, and non threaded. For this type of group, I actually agree with Joel’s decision on this. The reason for this is that the more “trivial” responses and noise is reduced. We are losing some good conversations as a result, but the benefit is reduced noise. I can only hope that people make a true effort to read posts here, and then make a intelligent response to them. That is the goal we all should shoot for. Albert D. Kallal Edmonton, Alberta Canada Kallal@msn.com
Sun 17 Mar | Timothy Falconer | I agree about non-threaded posts. The best web discussion forum I've ever used is at The WELL. We all have our favorite, I suppose, but I'd love to have more sites that use this interface. You can try it out in their free conference
Sun 17 Mar | Timothy Falconer | More proof that 'no one reads anything' (I included HTML tags). here are the links again: The WELL: http://www.well.com free conference: http://engaged.well.com/engaged/engaged.cgi?c=inkwell.vue
Sun 17 Mar | James Ladd | Timothy, I can see your point, but I would not want to limit this forum to just items related to what Joel has to say. Someone may ask a progamming question, but the spin-off discussions on the management of that problem are often more interesting that the programming solution. I hope you can see my point.
Sun 17 Mar | Mark W | This forum has turned in to, for better or for worse 'Tapping the brains of people who read Joel on Software and like posting to message boards.' This board appeals to a certain demographic, and this is the stuff that some of the people in that demographic want to discuss. (Why I never got into marketing, I'll never know.) As Joel gets more popular, the group is going to expand, and 'old timers' are going to be upset about the group losing focus, etc. etc. I think this happens everywhere. Every newsgroup I read (I started reading them circa 1993) has had a thread like this that seems to be running since it's inception. I think they occur in even years. 'You know the sixth guy in this group is beginning to post sleightly off topic stuff.' These are simple growing pains. The way I see it, this thread is a sophisticated 'us v. them' where the 'old timers' are complaining about the 'newbies' (who else would be posting useless questions?). Why don't you become a project management/usability guru, start a blog and create your own message group. Then you can control it any way you want.
Simple Batch copy – What software would you use? | Sun 17 Mar | Albert D. Kallal
I have a old program that was written in clipper (before me), and then after a few years some changes where needed. The original programmer was long gone, but we had the source. I of course came along and modified the source code (this was 1993). I did not have clipper, but did use FoxPro and the runtime distribution kit. That means this simple little program in dbase could be changed, and then converted to a STAND ALONE exe file. The above approach is seems fine. Just this week I was called in by these folks to *modify* the software. My thinking is that this little and simple program should be upgraded to something that is not ms-dos based, and can be supported for another 8 years. Remember, I came along in 1993, but that little piece of code had already been in use for a few years. The software is a *SIMPLE* little program that copies a few files. These files have nothing to do with database. DBaseIII was no doubt used at the time since the ms-dos batch commands *could* have been used, but they are very poor at prompting the user for a date. Also, a nice language with a if/then/else structure of course made this whole thing a lot easier to write (dBaseIII also has a nice “file exist” function). The program simply looks for the existence of two files (with a known name). For each of these two files, the user is prompted for a date. When the user hits enter, the files are copied to a archive directory with a format of: 16Mar02.snt. Thus, the language also needs some ability to convert a date from 03/16/02 to the above format. Of course now the software will need to prompt for 4 files (and thus actually 4 dates). Usually the date will be the same, but sometimes the operator will change several of the dates. At any rate, the default date (today) is displayed, and the user can choose to modify it. My first choice is to use windows scripting. After all, I want to keep this as simple as possible. My 2nd choice is of course VB. Building a VB install package via the VB package and deployment wizard seems like over kill in this case. I could certainly just create a exe file in VB, and if I say away from any ActiveX controls, then I could simply email the client a nice and tiny exe file. (the resulting VB exe would be less than 50k). Of course not using the date picker in VB will also kind of suck when it comes to entering dates. Of course windows scripting is even worse from a user interface point of view, and cannot place up a small form that prompts the user for more than *one* date (I am assuming that the only reasonable means here is to use inputbox). In addition, I don’t get any kind of “mask” for the date input. What should I use to develop this little copy program? Perhaps this one case where I should continue to use the old program, and simply modify the dbase code? Albert D. Kallal Edmonton, Alberta Canada Kallal@msn.com
Sun 17 Mar | Sonny | Delphi, no question about it. Much better than VB, believe me. Been there, done that, ain't never goin' back! Having been a Delphi user for about 4 years now (ex-Clipper, ex-VB, exPowerBuilder) I don't understand why people automatically assume that WindowsApp = VB. Is Microsoft broadcasting some subliminal frequency that doesn't register in my frontal lobe? More importantly, why do so many people seem to so actively avoid Delphi? Clearly they have never tried it, despite the 'best tool for the job' mantra they so love to spout. Sorry for the rant, but like every other Delphi user I feel like some elite group with this amazing secret that nobody knows. Albert, do yourself a favor, expand your horizons. Sonny Also from Edmonton, Alberta, Canada (Oilers Rule!)
Sun 17 Mar | Ged Byrne | There are some good little Basic scripting languages that are great for this type of thing. They are written by enthusiasts and keep things simple. I'd recommend IBasic for something like this. http://www.pyxia.com. IBasic costs just $20, and will only take a couple of minutes to learn. It creates a small, standalone exe that requires no supporting files.
Sun 17 Mar | Anonymous Coward | ActiveTcl (http://tcl.activestate.com/)
Sun 17 Mar | Timothy Falconer | i'd go with either prolog or lisp ;)
Sun 17 Mar | Timothy Falconer | BTW, these kind of questions are why i avoid most newsgroups. I'm hoping we get fewer 'do my homework' requests and simple-task-how-to's here. That's what USENET is for. This forum has the chance of being a geniunely useful place to talk about the larger issues of software development & management.
Sun 17 Mar | Albert D. Kallal | Actually Timothy, I thought long and hard about posting this question here. I did in fact post the question for several reasons. The question from a programming side is *completely* trivial. In other words, the question is not one of a complex algorithm. In fact, I posted the question because the problem is in its self so very trivial. However, the question of what tools use in this case is *extremely* complex. This question is about the larger issue of code dependency. For example, it was suggested that I use Delphi. While I have done a good bit of Pascal, it does seem to be overkill to install, and learn a *large* and complex development system to copy 4 files? It was also not explained to me if using Delphi would reduce code dependency (however, that does seem to be the #1 battle cry of Delphi people). Don’t tell me to use Delphi. Tell me that Delphi does a better job of reducing code dependency, and then I’ll use it! However, it does bring up the very issue of code re-use. Joel has had a whole bunch of articles on this. This is about the issue code dependency. Perhaps I should have chosen a much more complex problem! In fact, my subject should have been: “How to reduce code dependency” The last ten years has seen a march towards the idea of re-usable components. The model has been ActiveX (com). I believe that this kind model is great from a inter-application point of view. In other words writing applications that can be used as a com object was a great leap forward. I do lots of this with Word, Outlook and many others. This is very much a dream come true for Bill Gates. He outlined the world where applications would them selves would be come re-useable components in Byte Magazine more than 10 years ago. I am a very strong believer in this concept, and benefit every day from it (his dream has been true for a some time now). Of course some IT people consider application automation a loaded gun on each persons desk. You just have to look at the Melissa virus to get a taste of the dark side of com automation (Melissa ONLY worked with OutLook, and not OutLook express...due to the fact that OutLook is a com object). Inter-application communication is the #1 thing that MS has over the Linux environment (sure there is Cobra..but until applications are written to this standard, this is of no use to anyone). While the application interoperability march has been a real bonus, the idea of shared components (not applications) has been a true disaster. If you look at windows XP, it has a huge amount stuff in there to prevent the system dll’s from being changed, or updated by software being installed. We were supposed to be able to use those dll’s are we not? In other words, the trend in the industry is now swinging back in favor of *reducing* dependencies. Too much code today is breaking. The industry is finally waking up to this. The .net initiative of course is the extension of the com object model *accross* the net. Again, if the model is used for inter-application communication then this I believe this is good. This model will NOT WORK if it is used to increase dependencies for applications that need simple components (yikes...now our code will break when something *across* the net is screwed up on the other end!). I suppose I would support the use of a map control that gets me any map in the world (and those maps come from a .net server). The trade off for dependency here does seem to be worth it. In fact, the ideal solution here would be for Microsoft to re-introduce a linker for its products (remember those things?). I need to create a stand alone utility with *NO* dependencies. In other words if write using standard tools, then I wind up using ActiveX controls. I believe in this case that I should be able to *link* the code from these objects into a stand alone executable. If the linker could pull the actual date picker code from the mscomcts.ocx then I would be fine. The code I need from mscomcts.ocx is no doubt much smaller then the 700k size that it currently is. I don’t care about 700k. However, if I use 3 or 4 controls for 3 or 4 controls from re-useable libraries, then I now have a very large hunk of code to distribute. In addition I introduce the possibility of now breaking other applications (since the dll’s/ocx that I now must distribute can overwrite existing components). A linker that pulls only the code I need into a nice small .exe is what I need. The equivalent in the .net would be allow the com object to actually be copied to my PC, and only a *connection* would be established. Anyway, in thinking about this problem. I going to continue to use the 14 year old dbase code. As Joel said: Don’t throw out the old code. He is right on, and in my case also! To anyone who though this was a simple programming question, well you missed my point... Albert D. Kallal Edmonton, Alberta Canada Kallal@msn.com
Sun 17 Mar | Christopher Wells | > “How to reduce code dependency” You can use the MS C/C++ compiler to make an executables with no dependencies (except dependencies on the O/S DLLs). C/C++ will still be readable for at least another 10 years ... another 50 years, given there are young C/C++ programmers today. > Of course not using the date picker in VB will also kind of suck when it comes to entering dates. I haven't tested it but perhaps http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/CommCtls/DateTime/DateTime.asp shows how to use the Date and Time Picker Controls in comctl32.dll (which you may assume are already on the system). > Perhaps this one case where I should continue to use the old program, and simply modify the dbase code? If you do, ensure that the client owns and keeps a copy of the dbase IDE (they'll need it later).
Sun 17 Mar | Timothy Falconer | This is why I love Unix/Linux. We're talking a five line shell script, I'm guessing, yes? Geez, even LDOS on the TRS-80 had a better job control (batch) language than MS-DOS. I'd give anything to go back and tell the appropriate Microsoft person (or Bill Paterson): 1. make DOS a decent command interpreter 2. use / instead of \ for directory seperators 3. use LF not CRLF for text files
Sun 17 Mar | Timothy Falconer | As for the larger issue of the appropriateness of the topic... I do see the importance of minimizing hard-wired widget dependencies, and the moving target that is Microsoft. Your initial post & title seemed to say primarily 'here is my situation, what would you do', not 'what do you use for simple tasks to minimize dependencies'. The latter point is in there, but it's kinda lost in the description of the problem. My apologies if my words caused offense.
Sun 17 Mar | Christopher Wells | If you want to know something about batch files, try http://gearbox.maem.umr.edu/~batch/batchtoc.htm
Sun 17 Mar | Albert D. Kallal | Actually, Windows scripting (vbscript) is just fine from a file copy point of view. The scripting language can even define and use applications as a com object. This means you can open applications, and use code from that application. This is great, and in fact for scheduling and automating certain kinds of software it is unbeatable. The ability to use applications as a com object in a batch file can boggle the mind. You can launch Excel, do some calculations, load, read sheets and print some stuff, save it, and then launch the next application in the batch file. As long as the application is written to the com standard, it can be automated via vbscript. In fact it makes vbscript *too* powerful and dangerous in many cases. Some admins are now starting to ban the use of vbscript. In other words, the lack of features in windows scripting is probably second to none. For roll out of software in a network, I can’t think of anything better. The real problem here is not really the script part, but the part that needs to ask the user for a date. It should default to today's date, and also have a nice input mask so the user does screw it up. It should also not allow a user to enter illegal dates. Also, notice the requirement that today’s date of 03/16/2002 be converted to a file name of 16Mar02.snt In other words, your scripting language better be able to convert 03 to the string text 'Mar', or you will have to start writing some code! Vbscript has good bunch of string manipulation stuff (much the same as vb). Thus Vbscipt does do a fine job in this area. However, it sucks on the user input side. The old dbase code does 1 thing well, and that is prompt the user for a date with a default, and checking! By the way, I would probably change the whole file copy mess, but then again, that software was built around 16 years ago. This system was upgraded to run on Linux only this year, along with Windows clients (before that, they were green screen terminals via rs232) The only pc all these years was a billing submissions pc with a modem. The software (Medical billing system) is still very old. We did dump the old text word processor and now have integrated ms-word into this system (I was called in since I happen to be fluent in the database system running on the Linux box, and also with windows development). Ms-word was again great here since when you hit alt-f11 in word, up comes the visual basic IDE. I suggest you all try hitting alt-f11 in ms-word if you have never done so. Imagine, every single copy of word has visual basic! This goes back to Bill Gates dream of each piece of software being a re-useable and *programmable* component. Well, folks we are living in this dream. Windows, and their applications are now com programmable objects. The problem is that some people would call this something other than a dream. Actually, as mentioned I do love com. It enables amazing automation, and inter-operability between my applications, and stuff like the ms office suite. Everything is simply a programmable and re-useable object. It is also why I believe that Linux is not ready for prime time (at least on the desktop). Without com, most of the above stuff can be done in Linux, but it is a real pain. Thus Linux does not even come close to windows when you try and integrate applications. Of course the Linux/com debate does not belong here in this thread!
What must the great programmer know? | Sat 16 Mar | Richard J.
Management only goes so far. But strong management skills need strong programmers to manage. What do you think that a passionate programmer should know? I think there are at least two things: computational theory and algorithms. I dont think knowing these two makes an incredible coder, but I think incredible coders know them. I had only been studying computation a couple of weeks while holding down a full-time job, but already I feel an order of magnitude better. After learning to speak the language of tuples and graphs, my APIs are clearer; less complicated. Or at the very least, it takes me less time to come up with them and know their soundness. Whereas knowing algorithms keeps me aware of how to implement these designs, keeping my performance-devouring tendencies in check. ;-)
Sat 16 Mar | Jared Levy | I disagree; understanding algorithms is often of secondary importance. The goal of any programming project is the development of solid bug-free code that satisfies the customer's requirements and is maintainable for future changes. Performance is just one portion of that goal, and is only relevant in the portion of the code that forms a bottleneck. Also, at least in the performance tuning that I've been involved with, sophisticated algorithms play a minor roll. Instead, I've focused on minimizing how often the code performs expensive operations, such as accessing a database or allocating memory. Still, I'm not sure how to answer the initial question. Outstanding programmers have a general ability and way of thinking that involves a lot more than a particular knowledge base. Of course, additional knowledge and experience make one a better programmer.
Sat 16 Mar | Ged Byrne | Richard, Computational theory sounds good. Where do I go?
Sat 16 Mar | James Wann | The only great programmer is one who is appreciated by her team and management for her contribution. Stories of miracle working by programmers are often signs of poor management, not great programming.
Sun 17 Mar | Tony | Most software development is easy. Great programmers only worry about the hard bits if they exist firstly, and secondly work it out generally from first principles. Knowing and algorithm is 'handy' but little more. Ever noticed that the terms 'Research' and 'Development' often go hand in hand. Good developers are good researchers to.
Sun 17 Mar | Richard J. | Ged, here is a link. It is a sweet little book, and if you're not disposed to liking it anyway, the comments have other suggestions. http://www.amazon.com/exec/obidos/ASIN/053494728X/qid=1016358761/sr=1-1/ref=sr_1_1/002-1164014-8317633 Tony, I think that good software dev *can* be easy. But I really want to talk about orders-of-magnitude improvements in programming ability. To be an amateur poet, it is like solving a nice maze, only to find out later you're in another one. Somewhere it ends, but few know where. I don't think knowledge of algorithms makes an incredible programmer, but incredible programmers know them. At least intuitively. Because part of the job is inevitably optimizing. I think I would also add knowing security to the list. If only because it implies a deeper understanding of data.
Sun 17 Mar | Ged Byrne | Thanks, This books looks interesting. I had heard of the computation theory when reading about Turing, but only as an historical reference. For some reason the book is much cheaper in the UK. Makes a nice change. I think I'll make it my next book once Code Complete is finished. http://www.amazon.co.uk/exec/obidos/ASIN/053494728X/qid=1016378921/sr=1-10/ref=sr_1_0_10/202-0344247-0149431
Sun 17 Mar | Tony | Richard, you say, 'But I really want to talk about orders-of-magnitude improvements in programming ability' My point is that algorithm and computational theory knowledge do not map in any way to an order of magnitude improvement in programming ability. How does one define programming ability anyway, I may be able to write slick, tight functions but may be hopelessly inadaquate at developing a complete system, or vice versa. If you have a head full of computational theory and algorithm knowledge then all you have is an ability to memorise. Good developers, work out what needs to be done and research the best solution, that may or may not mean discovering an algorithm, maybe for the 2nd or 3rd time in a career. Everybody knows not to re-invent the wheel.
Sun 17 Mar | Timothy Falconer | What every great programmer knows: 1. how to read other's code (which is usually more like playing a massive game of concentration than reading a book) 2. how to instinctively refactor their own code to make it more generally useful, more readable, more concise 3. how to sit down and *STUDY* a computer book or manual, straight through, for its own sake 4. how to use a debugger and a profiler 5. when to give up for the day and go home
Visual Basic Code Issue | Fri 15 Mar | chad Steinacker
I’ve been trying to figure this problem out for over 2 weeks now! Can you please send me what you believe the Visual Basic code should look like for this problem? *Assume you have a bank account that compounds interest on a yearly basis? In other words if you deposit $100 for two years at 4% interest, at the end of the year you will have $104. At the end of two years you will have $104 plus 4% of that, or $108.16. Create the Visual Basic program that would read in deposit amount, a term in years, and an interest rate. The program should display the running balance on the form, or a separate form. The program should also: · Check for invalid data being entered. · Display a message to the user indicating the mistake, and · Give them the chance to re-enter the correct information The form must contain a minimum of three (3) command buttons: · Calculate. Takes all the value entered by the user, and displays the answer. · Clear / Start Over: Must clear the values entered by the user, and clear the displayed answer(s). It must also reset the focus on the main form ready for the user to begin entering data. · Exit Anyone thats willing to send me the code for this PLEASE DO... Ive just recently started on VB coding and this problem has me stumped! HELP is needed. Thank you-
Fri 15 Mar | James Wann | Is this somebody's homework?
Fri 15 Mar | B | 'a minimum of three (3) command buttons'... Will extra points be awarded for additional buttons?
Fri 15 Mar | Mike Gunderloy | Mr. Steinacker also has e-mailed this question to at least some of us posting here. I wonder if I should quote consulting rates for doing homework?
Fri 15 Mar | James Ladd | Hmmn, I replied to this, but it doesnt seem to have come up.
Fri 15 Mar | James Ladd | I tried again to post a reply, but only these short ones seem to come up. Oh well. Ill be helping Chad, its the community thing to do !
Fri 15 Mar | anon | Do your own homwork
Sat 16 Mar | p.h.b. | Um, this is a site about software management. If any of us knew how to code, do you think we'd be managers? Frankly, if a young programmer came up to me with this problem, I'd tell him that using the Chomsky Normal Form almost makes the program write itself. Then I'd stare at him, daring him to say he didn't understand me.
Sat 16 Mar | Frederik Slijkerman | I'm sorry, but if you can't figure this out alone, you'd better start working in a grocery store...
Sat 16 Mar | Christopher Wells | Maybe he's practicing at being a software manager and at persuading other people to write code for him. Not a bad ambition... If it's schoolwork, sending code would not be a community thing to do IMO; instead (which would take longer), walk him through whatever difficulties he is having at doing it himself ('what trouble are you having with writing the code yourself, where are you stuck?').
Sat 16 Mar | Timothy Falconer | Perhaps it's been too long since I started out, but this problem seems exceedingly simple.... almost a 'Hello World' for basic UI design. The point, I'm sure, is simply to see if the programmer can wire together a basic GUI app. Definitely a homework assignment. No doubt at all.
Sun 17 Mar | Tony | Maybe we could use this forum to sell stuff too. I can just see the topic... 'For Sale - Nissan 180B, good tyres $900'.
Sun 17 Mar | James Ladd | Wow, a 180B with good tyres. SOLD !!
Best books for programmers | Thu 14 Mar | Cindy Brown
Code Complete. Read it BEFORE you learn how to program. Programmers Book of Rules by Ledin and Ledin (my version is 1979) ISBN 0-534-97993-9 Again, readi t BEFORE you start writing code for people.
Thu 14 Mar | randy | A few more recommendations for developers and development managers: Under Pressure and On Time by Sullivan (MS Press)- Great for covering the basics of developing software for wide scale distribution. Slack by DeMarco- Speaks to the need for some 'slack' in organizations in order to effectively maintain and leverage human capital. Software Engineering Economics by Boehm- A bit of a classic, but still relevant for determining how to effectively make decisions using analytical methods when managing large scale software projects.
Thu 14 Mar | Andrew Simmons | Am I the only person in the universe who doesn't like 'Code Complete'? It's just too long and verbose for my taste - 50 pages on code layout is at least 49 pages too many. On the positive side, I really like 'The Practice of Programming' by Kernighan & Pike, and the updated version of 'Programming Pearls' by Jon Bentley. Both very well written, and neither requires a fork-lift truck to pick it up.
Thu 14 Mar | Alex Givant | 'Pragmatic Programmer' - I like this one. Read it!
Thu 14 Mar | Dan Sickles | Andrew, your not the only one. I dragged it (Code Complete) out and dusted it off yesterday after reading all the posts here and after skimming through, I remembered why I never read it all the way through and why it needed dusting. It's 3 to 4 times longer than it needs to be. I'll second your vote for 'The Practice of Programming'. I also really liked the assembler book I got from the Library after I saw one of the first Midi sequencers...it was the first one on the shelf. Writing a real time application to an early midi interface in assembler is a great intro to CS. Who knew there were 'easier' languages?
Thu 14 Mar | Alyosha` | I *liked* Code Complete. Well, no ... actually, I like reading code with consistent indentation and naming rules. Anything that convinces other engineers about the importance of human-readable code is a Good Thing in my book. The one book that I didn't enjoy was Godel, Escher, Bach by Hofstadter. I didn't 'get' it, and I fear, there's nothing there to get, short of a pedantic rambling on nothing in general and everything in particular. It reminded me of the madman in Pi who tried to find patterns in everything ...
Fri 15 Mar | Gabriel Lima | Good to know I am not the only one. Actually, I bought 'Code Complete' mostly because Joel has it in such high regard. But when I started to read it, I became a bit dissapointed. Yes, it is very informative, but it is a real bore to read. I love 'The Pragmatic Programmer' though. I have read it several times. It is a very good book filled with insights on how software development should be done, it gives some great ideas on how to think pragmatically in order to improve one's way of thinking and working, and best of all, it is fun to read.
Fri 15 Mar | Ged Byrne | I love code complete. I'm half way through and I've learnt so much. Reading it has been like somebody coming to me and saying - the full stop shows where the sentances end, the spaces separate the words. Suddenly I discover why I find it so difficult to read.
Fri 15 Mar | Timothy Falconer | ... on Code Complete being a dull read ... I usually find that the more I have to work to learn something, the more I get out of it. It's the difference between reading and studying. Think Code Complete is dull? Try reading a few technical specs and RFCs. Read a couple of those, then read Code Complete ... you'll think it's a real page-turner. Another thought... the people who really like Code Complete (like me) are probably the ones who have spent many years in programming purgatory, banging their heads on the desk repeatedly over the lack of craftsmanship around them. Reading Code Complete is *very* enjoyable to this group, since we're sitting there thinking 'EXACTLY!' over and over and over.
Fri 15 Mar | Timothy Falconer | My suggestion: Effective Java Programming Language Guide by Joshua Bloch. Java's rep for being slow comes from 4 things: 1. before JITs came along, it *was* slow 2. incorrect compile vs. VM preconceptions 3. Netscape 3/4's 'Loading Java' message when it loaded the VM (and their awful VM implementation) 4. bad programmers that make common mistakes The first three points are moot. The last point is answered very, very well in Bloch's book. Java isn't slow if you do it right. This book gives more useful advice towards this end than any I've seen in print.
Fri 15 Mar | skautsch | I'll pipe up for Code Complete. I wish every undergrad CS would master it. It helped me a lot at the time that I read it, and I wished I had done so earlier. Another good contribution by McConnell is 'Rapid Development'. It explores the boundaries to realistic scheduling, and should also be read by junior developers before they're asked to give estimates. I'll have to disagree with Joel's negative assessment of 'Slack' by DeMarco. Although I had some disagreements with DeMarco, I thought the book did add some material to 'PeopleWare'. However, I agree that 'PeopleWare' is more of a 'must read' than Slack.
Fri 15 Mar | mackinac | Ged gets the sarcasm award in this thread. :-) Someone who has been doing software development for a while is likely to feel that way. It is more appropriate for someone just starting programming. I'd say best to read it just after starting programming to have a little experience. Why do books have to be so big these days? #1 book: 'Peopleware' ObLink: http://www.canonicaltomes.org/
Fri 15 Mar | Banana Fred | I am greatly indebted to CODE COMPELTE. I read it during my last year in college and it was a real eye-opener. I was studying computer science and did not know much about software engineering in the real world. Yes, CODE COMPLETE is a bit verbose, but it is an easy read and filled with informative footnotes and references to background research reports. I recommend this book again and again to college students or people on my QA team that want to learn more about 'real' programming.
Fri 15 Mar | Steve Wheeler | Personally, I'm also one of those who likes 'Code Complete.' I also like 'Writing Solid Code' by Steve Maguire and 'Math Toolkit for Real-Time Programming' by Jack Crenshaw. For good books that aren't directly related to programming, I'd recommend 'A Whack on the Side of the Head' by Roger von Oech.
Sat 16 Mar | Sammy | There's also 'Programming Pearls' by Jon Bentley. Basic sorting and data structures? Writing correct programs? Sounds dull, except that most programmers I know don't understand how to apply these concepts. Instead they take up a lot of time in meetings because they just know Methodologies and Java, but haven't read any dull books. Do I sound bitter? ;-) I think companies should stop spending time talking about Quality, when they can't program.
Sun 17 Mar | Baruch | I'm freshly out of university though I've been hacking computers and programs for quite some time now, only in the last few years did I start to really program for a living. (Doing side projects along studying). I've like 'The Pragmatic Programmer', and dislike 'Code Complete' I bought both of the since Joel recommended them heavily. I enjoyed the pragmatic programmer even though it was a bit too light at times, and disliked CC because it was so heavy, it is probably a good tome for those just starting who didn't yet get these insights, but for me it was mostly a 'duh!' all along, though I didn't finish it yet. 'The Cyberiad' is so much funnier :-) The Gang of Four book 'Design Patterns' was an eye opener for me, I've read it a year or two ago and it gave me some insight on the various patterns that I use/see when I program. I've yet to really design with patterns, but it's a good book if you need to design software, the insight gained by reading this book is useful even if you dont use it directly.
Sun 17 Mar | Mike Gunderloy | Based on those evaluations, I'd guess you would enjoy Fowler's REFACTORING.
Tools we love, tools we want | Sun 10 Mar | Mike Gunderloy
What obscure little software tools make your life as a developer easier? Conversely, which tools do you _wish_ someone would write for you to use?
Mon 11 Mar | Mark W | Here here! Regular Expression is an essential tool. I use Homesite a lot (okay, so I just do HTML) but it's also very useful for other kinds of programming, and the search & replace is excellent.
Mon 11 Mar | pb | I still haven't found a Windows text editor that I like as much as BBEdit Lite. They all seem to include too much garbage and don't feel refined. Any suggestions?
Mon 11 Mar | David Fischer | Re: a good windows text editor. I recently discovered Metapad (http://liquidninja.com/metapad/) and it immediately replaced C:\windows\notepad.exe. For a basic text editor, this is great!
Mon 11 Mar | Jutta Jordans | I found WndTabs by Oz Solomonovich (http://www.wndtabs.com) a very helpful addition to VC6, it organizes your open files on tabs so you can easily change between them without using the windows menu. It has some other helpful features as well, for example it makes your life with CVS a little more comfortable since it shows if a file is write protected (I think this feature comes only with the registered version, but registering costs only 10 $ if I remember rightly). I am still looking for a better debugger that will integrate with the Visual Studio and is a little more stabile when debugging multithreaded apps than the normal MS debugger. I get bluescreens a lot when debugging multithreading apps, and of course they are somehow due to my own mistakes, but finding these mistakes is what a debugger is for, isn't it? Have fun,
Mon 11 Mar | Roman Eremin | Automated or semi-automated refactoring tool for Object Pascal, C++ and C#.
Mon 11 Mar | Sanborn | Tools I use: * I like Python's interactive interpreter a lot. But I wish it were better. Like those Scheme interpreters. Maybe I should switch. * Apache's Ant is the best replacement for make, when using Java. * Notepad is becoming quite the nice but absurd tool, ever since I learned the whole .LOG trick (if you put .LOG as the first line, notepad will timestamp the bottom). But hmm, Metapad does this too. Tools I want: * Better groupware, and none of this madness that takes 256 MB on each client. Ideally, it mainly uses a web interface. I am looking at Scoop (which runs Kuro5hin), SourceForge/Savannah, and perhaps Userland's products. I don't think the efficiency of tech has been close to realized for large projects. * I wish there were simple memory-leak commandline tools for Java. I hate needing to reinstall a copy of JProbe just to find someone's brain-dead memory leak. I'm thinking of writing a free replacement. Ideally, software is like Google -- it just works, none of this license garbage.
Mon 11 Mar | Tom Seddon | visual assist: http://www.wholetomato.com/ I'm lost without it... highly recommended. Send these people your money! I second the WndTabs recommendation. That's great too.
Mon 11 Mar | Mike Gunderloy | Tools I use...there are so many it's hard to know where to start. For editing, I use CodeWright (version 7 just shipped), http://www.starbase.com/ (though one thing I would love would be an external editor that integrated better with VB6 - that won't matter to me much longer). For XML stuff in general, it would be tough to live without XML Spy, http://www.xmlspy.com . For storing random bits of information I've beeb pleased with Vault, http://www.personalmicrocosms.com/ . I'd love a diagnostic tool that could look at a Windows event log and say 'you dummy, you need to do x, y, and z' to fix your Active Directory installation. An FTP client with an Explorer interface that was more stable than FTP Voyager would be nice. Also a newsgroup client that runs under Windows and didn't suck rocks (yeah, I know, there are good ones I could run on the Linux box).
Mon 11 Mar | Chad Hulbert | GViM and grep, even on Windows.
Mon 11 Mar | Mark W | I use Action Outline and Treepad for knowlege storing. Action Outline will even export numbered outlines, and /*comment headers*/ (though I've found that it won't save or export when I entered a C++ program into it). Both are shareware, but there's an excellent compact version of Treepad that I keep on floppy with all my notes. ( http://gpsoft.hypermart.net/ao.html ) ( http://www.treepad.com ) I'll second that endorsement for XML Spy. I just wish it didn't associate itself with EVERYTHING right down to .txt files. I've been using Xnews for newsgroups and so far (these past couple of days) I'm happy with it. ( http://xnews.3dnews.net/ ) I tried Metapad too, and it takes a full second or two longer (on my 233mhz win95 machine) to load than notepad, so I never did that replacement thing. I also keep handy a boot disk with expand.exe (which will extract those file.ex_ files that microsoft loves), pkunzip.exe, and spinrite5.exe from Steve Gibson ( http://www.grc.com ). http://www.bootdisk.com has some good boot disks. http://www.collakesoftware.com/ has programs that will compact .exe files and embed .dll files into them. Extremely useful in the right circumstance. ExamDiffPro is a good (but I'd love to find a better one) source/diff program for windows. SpaceMonger is great for tracking down and freeing up space on your hard drive, or any networked drive. Calipers is an essential tool as a designer - works like real calipers, measuring the pixel widths and distances with ease. I don't have links for those last three, a Google search should turn them up.
Mon 11 Mar | Michael K | There are two tools that I really love: Clipmate http://www.thornsoft.com/ and Snippets http://www.softcircuits.com/snippets/. Clipmate remembers everything that goes into clipboard. I just wish the user interface was a little better and keystroke shortcuts were a bit more thought through. Snippets is a very simple program that allows you to store snippets of ASCII text in a File manager-like tree and search through them. Every time I come up with at new piece of reusable code I put it into Snippets. You don't need to install the application, it just needs to be zipped up and copied to give it to somebody. It would be great is somebody wrote a collaborative version of Snippets. I have registered copies of these programs already, but I would definitely pay for improved versions.
Mon 11 Mar | Mark W | We seem to like tree based editors. There's a good overview of them here: http://john.redmood.com/organizers.html This is what I use RoboType for. http://www.zdnet.com/downloads/stories/info/0,10615,77481,00.html The difference is when I want to paste that code, all I have to do is type the command I set: '?subroutine ' will be replaced by whatever I set RoboType to replace. (the '?' can be any number of symbols, I chose ? because it's easy to type and won't be accidentally triggered)
Mon 11 Mar | mackinac | I don't think of them as obscure, but I'd be lost without find and grep. awk can be handy. And I make plenty of use of emacs (and XEmacs) not just editing but ediff, shell, vm (mail), and regex in substitutions. Sometimes I wish for a better RPN calculator.
Mon 11 Mar | Michael K | This reminds me. I'd pay for a visual tool that would assist in creating and interpreting various flavors of regex expressions. Does anyone know if stuff like that exists?
Mon 11 Mar | Vincent Marquez | I didn't see anyone post this, so here goes: TextPad. This has to be one of the best text editors out there, I use it for everything. Its cheap too ($20 I believe), and has syntax hightlighting for about every langauge out there. I've converted all the developers in my Compay.
Mon 11 Mar | Mark W | The O'Reilly book on RegEx is great, though I wish it were more of a reference and less of a teaching manual. Agent Ransack has a regex builder built in, and it will let you test for a pattern. I remember the builder being so-so, but the test pretty good. Then again, I don't recall ever seeing another Regular Expression builder so... http://www.agentransack.com/ 100% positive reviews on download.com
Mon 11 Mar | James Wann | I'm fairly vendor neutral when it comes to the technical tools. However, when it comes to doing my todo lists and doing task discovery, I tend to use theBrain http://www.thebrain.com/ . The interface is a bit on the fancy side (it really is just an animated graph editor :-P ), but the way it lets you arbitrarily associate information visually is quite nice.
Tue 12 Mar | Gerry Shaw | re: RegEx testing tool. Mine only works under .NET but the idea is simple enough to implement you could write it your self for a different engine in a few minutes. Now if your willing to pay me... http://www.organicbit.com/regex/
Tue 12 Mar | Gabriel Lima | One of my favorite tools that I always install once I get to work on a new machine is a small registry hack from Microsoft called 'Command Prompt Here', included in the Microsoft Power Toys for Windows 95 (although it also works on NT and Win2K). It adds allows you to open a DOS prompt in any folder from within Windows Explorer. Very useful indeed.
Tue 12 Mar | Philippe Back | http://web.singnet.com.sg/~axon2000/index.htm Is pretty cool to support thinking in all kinds of situations (capturing knowledge from users is quite effective with it).
Tue 12 Mar | Marcus Zetterquist | My number one tip: Email effects from www.sigsoftware.com! It's for Windows and Mac OS 9 and X. Shareware. It's a simple little drawing program (think Illustrator) that you draw ASCII art with for your email signatures! We use it to make small drawings directly in our source code. Simple UML diagrams, view hiearchies, tables etc. Example: if you write a function that does something to a linked list you can actual make a little drawing directly in the header file with little boxes for the nodes and arrows for the pointers! If you need to draw some boxes on a piece of paper to figure something out or to explain something - take a few minutes to put the drawing directly into your source code where it belongs! Yes - you can copy drawings back into Email effects to edit them! /Marcus
Tue 12 Mar | Jeff Darcy | Re: Windows editors. I've been using EditPlus (http://www.editplus.com) for years now, and couldn't do without it. I'm probably the only guy I know who hacks UNIX kernel code using a Windows editor, but I also use it for all of my Python, HTML, etc. Tabbed multi-file interface, configurable syntax highlighting (I wrote the first Python syntax file for it in about ten minutes), easy external-tool integration, etc. It's also one of the most stable programs I've ever used on any platform; after using it all day every day for years, I can still say that I've never seen it crash, weird out, or even display text incorrectly. Re: tools. The tools I'm always personally looking for are (1) better parsing tools and (2) better bug-finding tools. The first category is pretty self-explanatory. I've gotten pretty good at using yacc/lex over the years, because quite honestly I've never found anything that really seemed to be all that much of an improvement. Part of me still believes that there should be a tool that does all the grunt-work of turning a complex config file into an easily-manipulated parse tree requiring no more than a single concise description encompassing both lexical and syntactic elements, but I have yet to find such a thing. Don't tell me XML is the solution, either. XML is great, but I want to be able to parse files whose format was designed without XML in mind, and I wouldn't want to use an XML-based programming language either. To some extent I believe XML exists as a concession to the belief that more general forms of parsing are too hard, and I'm not ready to surrender yet. In the second category, of bug-finding tools, I'm thinking of things that go beyond strict type-checkers and memory leak detectors. Dawson Engler's MC (http://hands.stanford.edu/osdi2000/) seems to me like a huge step in the right direction. It lets you augment or annotate *real code* with concise and readable descriptions of rules the code must follow, e.g. checking pointers before dereferencing them, matching locks with unlocks, etc. In a way, it does for the control part of the code what strict type checking for the data part. We need lots more work like this, creating ways to guarantee code safety and correctness without sacrificing performance or putting programmers in straitjackets (take that, functional-programming weenies).
Tue 12 Mar | PeterM | grep, Perl (Win32 & Unix) find (Unix) UltraEdit (Win32)
Wed 13 Mar | Timothy Falconer | Can't say enough about Araxis Merge: http://www.araxis.com/ $124 for a diff utility? Damn right! Plug this puppy into WinCVS and you'll find yourself using it hourly. It's very well designed ... an example of software done right.
Wed 13 Mar | Sonny | I develop C/S applications with Delphi on the front and Oracle on the back. I couldn't function without the following three: DOA (Direct Oracle Access) http://www.allroundautomations.com/doa.html is a translation of Oracle OCI from C to Delphi. Database access speed is un-freakin-believable, even multi-threaded queries. Moreover, it makes app distribution a snap - as long as the client has the Oracle client installed all you need is the Delphi-compiled .EXE. To hell with ODBC/DAO/RDO/ADO or whatever the hell they're calling it this week. Did I mention the blazing speed? TOAD (Tool for Oracle Application Developers) http://www.toadsoft.com is the ultimate tool for any Oracle developer. Interestingly enough it is written with Delphi using DOA! Finally (and this will be the one that proves I'm certifiable), I wouldn't be near as productive as I am without Ozzy, Megadeth, or Judas Priest screaming in my ear. San Francisco's 107.7 The Bone http://www.1077thebone.com is the finest I've found. Thank goodness for streaming audio!
Wed 13 Mar | Mark W | I'll double that TOAD endorsement.
Wed 13 Mar | Colin Davies | PL/SQL Developer for Oracle development (much less expensive than TOAD) (www.allroundautomations.com) TreePad for organizing miscellaneous bits of text, code, etc. (www.treepad.com) UltraEdit for text editing (www.ultraedit.com) PowerDesk for file management (www.ontrack.com) Enterprise Architect for UML modeling (www.sparxsystems.com.au) ER/Studio for data modeling (www.embarcadero.com) MKS Toolkit for UNIX utilities on Windows (www.mks.com) CS-RCS for version control (www.componentsoftware.com)
Thu 14 Mar | Michael Chansky | I completely agree with EditPlus. I also regularly use DJGPP's Bash for Windows. Tab completion is just too handy to ever use DOS. And TortoiseCVS. It's a CVS extension for Windows Explorer that modifies the icons to indicate the status of a file reletive to the CVS tree and lets you do all your CVS stuff with context menus.
Thu 14 Mar | Doug Alcorn | RE: Regular Expression Building Tools In (X)Emacs, there is a tool called re-builder.el. It 'provides immediate visual feedback about how well the regexp behaves to your expectations on the intended data.' Here's one link: http://groups.google.com/groups?selm=87puv66dxt.fsf%40magrathea.outer.space.org and here's another: http://www.emacswiki.org/cgi-bin/wiki.pl?search=ReBuilder
Thu 14 Mar | Mike G. | Rather than using MKS Toolkit or DJGPP's bash, I've had lots of luck with Cygwin. Very nice. The X Server also works, which saves a lot of money vs. Exceed.
Thu 14 Mar | Mike Gunderloy | You can actually get some command-completion in the Windows NT/2K command processor. See http://support.microsoft.com/default.aspx?scid=kb;en-us;Q244407&SD=MSKB& . Still a far cry from bash, of course.
Fri 15 Mar | Sonny | I downloaded and tried TreePad Plus after seeing it mentioned in this thread. What a fantastic tool, thanks for the recommendations!
Fri 15 Mar | Glade Warner | Four Windows tools I can't live without: 1. TopDesk from Snadboy. Freeware. It allows access to desktop icons underneath all the open windows. Currently a little hard to download. http://www.snadboy.com lists an email address to ask for a copy. 2. VIM. Vi editor improved. http://www.vim.org 3. Cygwin utlities. (Mentioned by others). grep, tail, other Unix commands. http://www.cygwin.com 4. Flashdesktops from http://www.flashdesktops.com Flashdesktops ($25) is a virtual desktop manager that allows quick switching between screens. I setup all the business screens (Word, email, etc.) on one screen, compilers on another, applications on another, etc.
Sat 16 Mar | Roman Zabicki | IntelliJ is a great Java IDE. It has some wonderful refactorings built in. Great auto-completion, class-browsing, and live templates (macros for doing common things like iterating over an array). It also has a local mini source-repository built in (in the beta version) There's support for ANT and a couple different source repositories.
Sun 17 Mar | Frederic Faure | My own favorite programs include: - Windows Commander (http://www.ghisler.com/) - Namo WebEditor (http://www.namo.com/; fantastic WYSIWYG editor) - Opera as my web browser (http://www.opera.com/) - FreeAgent as my news reader (http://www.forteinc.com/) - UltraEdit (http://www.ultraedit.com/) - WebCopier offline browser (http://www.maximumsoft.com/) - CRT and SecureCRT for telnet/ssh access (http://www.vandyke.com/) - CD Labeller (http://www.ziplabel.com/) - SmartDrawer (http://www.smartdraw.com/) - LotusOrganizer as my PIM (http://www.lotus.com/organizer) - FileCompare (http://www.oneysoft.com/) - WorldTimeClock (great if you work with teams in different parts of the world; http://www.programming.de/) - ActionOutline (http://gpsoft.hypermart.net/) My ¥.2 Fred.
cyclic includes | Fri 08 Mar | Keith Paton
What do others think about cyclic includes as in a.h includes b.h b.h includes a.h Is this ever justified?
Sun 17 Mar | John McQuilling | One approach that is used in the standard libraries is to prevent a include file from being included twice. This is done by checking for a preprocessor variable and only including the code if the variable is undefined. It may not be elegant but it prevents problems.
For ASP developers | Sat 16 Mar | Wanderley Miyata
Just curious: 1. When writing a lot of ASP pages, do you guys write on every page or use ? 2. Do you guys use one ASP page for each task or just one page (like Joe)? And if you use just one page, you code everything there or split it into multiple include files? 3. Encapsulate VBScript code in a COM DLL or just be lazy (as me)? Im finishing a big ASP project and I wonder if everybody has the same approach. :-)
Sat 16 Mar | razib khan | for most server-side apps i try to segregate presentation from logic. the logic i tend to stuff in a few files that reach toward the database and offer some level of abstraction. the presentation i tend to disperse in multiple files that generally cluster around the outermost logic file (furthest from the db). it kind of ends up looking like so.... presentation presentation presentation presentation < - logic logic -> database presentation presentation presentation kind of like a tree :) if two web pages are really closely related (say a page with a form that takes info and the page that outputs a copy for you to print out) i might keep them together and mixed code and tags. but usually i find that the more i do this the more i mix presentation and logic without thinking about it. include files i use a lot for the header and footer information that standardizes the layout of the pages (style sheets, and maybe session info that i use throughout the site). p.s. i used to think that putting all the presentation in one file saved time, since i didn't need to open multiple files-but i ended up wasting time figuring out what was where and wading through gallons of comment just to get my bearings. on the othe hand, i find that the most code oriented files i can arrange it however i feel is the most 'logical' with less concern about dispaly (no concern actually), so i'm more confident stuffing a lot of lines of code into these (as long as i make things modular and comment i don't seem to have a problem)
POLL:Programming taking toll on personal lives? | Sun 10 Mar | Bella
I want to take a survey of how long hours affect programmers personal lives. Do you feel your long hours have taken a lot away from qualitiy of time with your spouse and/or family? Do you often wish for a way out? Also, some demographics may be helpful. For easy parsing, please reply in the following format: If you are single, type in your reply: STATUS|S If you are married, type in your reply: STATUS|M If you have kids, type in your reply: KIDS|number_of_kids Knowing age may help... AGE|your_age Thanks.
Mon 11 Mar | Tony E | >>Easier said than done, no? What if you work in a >>team where everyone is in their 20's, live right in the >>big city, and can work 60 hour weeks, and you don't >>want to anymore? Eventually you will realise its just not that important, do you see yourself sat on the porch in later life looking back and saying 'I wish I'd spent more time in the office'?
Mon 11 Mar | Ged Byrne | STATUS|M KIDS|1 AGE|30 Nowhere near as disruptive as her career - teaching. I spent my entire sunday evening glueing pages onto cardboard for display.
Mon 11 Mar | Jutta Jordans | STATUS/S KIDS/0 AGE/30 I live alone, I do not have a boyfriend or family and therefore little reason to quit working at 5pm, but if I seriously do overtime for more than a week in a row I just break down. I work about 40 h a week and I am rather flexible when the schedule is tight and I have to stay longer at night or come to work on the weekend (something that has happend only once at my current job). But I try to compensate this as soon as possible by leaving early on another day or taking half a day off. It is my strong believe that there is only a certain amount of time you can spent on a task every day/week/month. Trying to work more than that is neither productive nor healthy. Have fun,
Mon 11 Mar | Michael Chernin | Depends. Are you also a lifer, or do you just do programming because it's part of a greater (if vague) goal? People can fruitfully work long hours if they're creating something that needs to be created. Maybe a lot of that work goes to waste, but the mind is learning during those days. Creating something important is just as important as having a family or reading books. Working for money isn't.
Mon 11 Mar | Mike Gunderloy | STATUS|M KIDS|1.5 AGE|42 I still work 90-hour weeks, but actually the quality and amount of time with my family is quite good, because both my wife and I work at home. I do far more parenting than most dads.
Mon 11 Mar | Bella | 90 hours weeks? You may want to check your numbers. You must be taking breask during the day, otherwise I can't possibly see how you can 'father more than most dads' working 90 hours a week. I think your '90 hour' week at home is not at all like actually being in the office for 90 hours. If you worked 5 days a week, that would average 18 hours a day, which is working from 6am-midnight. Not enough time to eat and sleep. This will lead to a speedy death. If you worked 6 days a week, that would average 15 hours a day, which is working from 7am-10pm. No way you're seeing your kids in this case. If you worked 7 days a week, that would average 13 hours a day, which is working from 8am-9pm. 7 days a week. What else can I say? Either your number are way off, or you're a very deulded man.
Mon 11 Mar | Bella | Jutta, it must be nice to be able to work 40 hours a week. Im my world, that's unheard of. Unless there are firms that are willing to trade off bigtime with salary and a limited workweek. You may be in for a shock if you ever change jobs.
Mon 11 Mar | x | I used to work ~60 hours per week, partly due to a troubled (unrewarding) homelife, partly due to boss who encouraged people to work by inducing fear. Spouse is now on medication for schizophrenia, I now work 38 hours/week to be able to help give us both 'a life', and it's now a much better situation all round. I've heard oldsters say that they divorced after working insane hours for a few years; which is the cause of that and which is the effect may be left as an exercise for the student. HTH.
Mon 11 Mar | mackinac | Bella> it must be nice to be able to work 40 hours a week. Im my world, that's unheard of. Where is that world? I work mid-Atlantic USA doing software development. 40 hours/week is the norm, with extra hours and some weekend work near deadlines when we find out that there is just too much unfinished stuff to do. Severe overtime for a few weeks may happen on really badly managed projects, but I have not gotten stuck with one of those. To me the overtime is a relatively minor problem compared to my long commute, which consumes 10 hours of my time a week, or the less than optimal working conditions and project management which make the 40 hours more stressful than they should be.
Mon 11 Mar | Banana Fred | STATUS|S KIDS|0 AGE|28 I used to work lots of overtime, but after being burned by a dot-com or two, that won't happen again. My work has been 'asking' people to workends to ship a product with an overly optimistic schedule. My girlfriend gives me grief for working on the weekends, but I know she is right. It's 9-5 for me from now on..
Mon 11 Mar | Mike Gunderloy | Either I wasn't clear enough, Bella, or you're misunderstanding me. Or both. I am typically at my desk 5AM to 9PM, 7 days a week. But that doesn't mean I am constantly working during that time. Subtract off 3 hours for meals and meal prep (I do most of the cooking around here) as well as feeding the animals around the farm, and there's the 13-hour day. But that doesn't mean I'm coding that whole time, any more than an 8-hour office day means coding for 8 hours. I work with just about the same intensity that I did when I used to go into an office. So I claim those 90 hours as the equivalent of 90 office hours, even though there are lots of breaks and multitasking. This morning, for instance, I just got done taking a ten-minute break with our toddler to go play with the baby chicks. Now he's in my lap helping me type. Presently we shall read my e-mail and his Cat in the Hat. Then perhaps he'll play with dinosaurs while I write something. So, I work 90 hours the same way that most office-goers work 40 hours.
Mon 11 Mar | Ged Byrne | Mike, You have a sweet set up there. Its what I hope for myself one day.
Mon 11 Mar | Frederik Slijkerman | Except that 5 AM is perhaps a little early to start. :-)
Mon 11 Mar | noone | If you are single, type in your reply: STATUS|S Knowing age may help... AGE|25 I have screwed my life so much that it does not really matter whether i screw it up a bit more by programming. So it does not affect me.
Mon 11 Mar | Mike Gunderloy | Frederik: I start when the rooster starts :) In the winter it's somewhat later.
Mon 11 Mar | Semi Free Corporate Slave | S/34/0 is easier to parse :) I work at a startup. I get in around 10 and leave between 6 and 8 (average ~ 45 hrs/week.) I don't work weekends except in emergencies. I'm definatly in the minority. I get in after most of my co-workers and leave before most of them (most people work ~ 80+ hrs/week.) Also unlike most of my co-workers, I'm not perpetually burnt out. When people ask me to do something, they get it on time (mostly) because I know how much I can do and really try not to accept more than that. None of my managment seems to be complaining much, other than when I tell them they really need to go home early once in a while instead of sitting numb in their cubes staring into space. If I eventually get laid off for not overworking enough, then hey, I guess I'll just have to get another job.
Tue 12 Mar | Bella | To the people who work at home. Do you worry about what will happen if your work at home job goes away? Do live somewhere where you can get a new job?
Tue 12 Mar | tchaos | M/2/30 Situational fire-fighting/pre-release chaos notwithstanding, I'm home by 5 and on weekends, as family time is more important to me than burning myself out. Of course, I'm almost always in the office by 6AM, because I'd rather be gone in the morning while my family is asleep, then in the evening when they are awake.
Wed 13 Mar | Mike Gunderloy | Do I worry about getting enough work at home? Constantly. At the moment one major contract is drawing to an end at the end of this month, and there's not another one signed yet to take its place. But that's not really much different from any other sort of freelancing business. Keeping the work flowing is always tough when you're working for yourself. The big disadvantage I have is not that I work at home, but that I am in an extremely rural area and am no longer willing to travel long distances to client sites. It's all a matter of trade-offs; in our case, we prefer this as a place to raise kids over places where I could get more work that paid better more easily .
Wed 13 Mar | Bella | Mike, Yea, that spells potential disaster, if you've painted yourself into a corner, and are uncommutable to an office job, and are not able to find work at home gigs.... I never understood how people can get a job in a remote location, where they are 100% dependent on one employer. (IBM is a great example of this) When that office/plant shuts down, it's time to move, or work at the bowling alley. And of course, when 100 homes come on the market at once, with no reason for anyone to move in and buy them, the bottom falls out harder than you can comprehend. Talk about putting all your eggs in one basket ! I guess your lifestyle has been great so far, cheap remote real estate, good hours, etc. but that was a function of one job, which can be lost in an instant, which you are now grpappling with....False reality? How long a drive would you need to make to find a programmer job in an office?
Wed 13 Mar | F.J. Weiland | M|1|42 My hours traditionally tend to be fairly heavy, on average say 50+/week, with work on weekends or at home in the evenings. 40 hours is a noticeably light week, and crunch time can easily take that to the far side of 80/week, including camping out at work overnight in the lab. I have kind of a bad commute now, also, which doesn't help. The commute also is why I'll sometimes stay over at night if I'm too tired to drive home safely. Yep, it does cut into my personal life quite a bit. My wife and I don't like that, but it's the breaks of the game, pretty much. It's been worse, though. Just wondering, those of you who have responses posted that follow the pattern more or less of 'I'm just doing my 40', 'it's just a job', 'I'd rather not burn out', 'I just get up and leave' etc. -- have you ever considered the possibility that your actions may be making somebody else on your team have to work harder than they otherwise would? If you're seeing the other members of your team at the office pull down heavy hours, and you get up after your 40, when was the last time you tried to see if there was anything you could do to help? How can you actually in good conscience get up and leave if you know you're only spending half as much time as your teammates are without at least trying to find out what's up? You may be the one who's right, you may be 100% better than they are, great if so. They may be complete idiots... anyway you look at it raises a great opportunity for improvement. Oh wait - here's a kicker - when was the last time you voluntarily went to your *QA guy* and worked through the requirements and designs for your part of the system to make sure that: 1) the conditions your code may be subjected to are identified 2) what your code is supposed to do under those conditions is identified 3) these things are coordinated with the other stakeholders on the team 4) the interface (human UI or other system ) supports all this 5) the QA guy understands what your code is supposed to do under specific conditions so he can write tests for it. 6) all this is expressed in a format that makes the lives of those who must use it easier rather than harder? 7) ...etc. Well, if your answer is 'never', then you've got people around you who are working harder than they need to because you're cutting corners you should not be cutting. Have you considered that your teammates might be approximately as deserving of their time at home with their families as you might be with yours? At 42, I'm among the older of those I've seen on this group so far. Some of you on this group are closer to my daughter's age than you are mine. I served a good while in the Army at a various levels, and in the civilian world as well, I've led teams ranging in size from 2-3 and commanded a unit as large as 260 soldiers. I've had more or less three careers in the last 20 years. Bottom line, been around the block a few times and know a fair amount about being part of a team and running one. In the Army, we had a term that applied to just doing your little slice and skating out the door - the G-rated version of the term was 'screwing-over your buddy'. There were a lot of ways to screw over your buddy, but one way was to not carry your share of the load when the whole team is trying to carry a common burden. The mission was always too big for one person alone - the mission was a team mission. No individual was done until the team was done. Sure, everybody had their parts to play, but you help each other out whenever possible or practical (some skills are really specialized and could not easily be shared, I know). If you're so good, and you might well be, that you can do in 40 hours what it takes a teammate 80 hours to do, then you owe it to the team and to your teammate to see if you can help them learn how to do things faster, too. Maybe you can't, but at least you checked into it. The person you asked if you could help will probably remember that you did, also. Someday, the shoe may be on the other foot. Wouldn't it be better if your shop had a team of people who could all get your amount of work done in 40 hours / person / week? Then you'd all be happier. Or, you'd all be more efficient and may be able to beat out a competing firm for a contract because you know you can under-bid them and still make money? Many good things can come from trying to help out to make things better and not just bail-out when you've got your piece done. I'm a QA Manager, in case you hadn't guessed from my comments above. I'm one primary consumer of information and artifacts regarding the system behavior. When it is never developed, or when it's never made visible to me, then I'm one of those who pays for the short-cuts taken upstream by those who don't want to 'burn out'. Guess it's ok for us to burn out.
Wed 13 Mar | Mike Gunderloy | Bella - Nope, I'm not dependent on a single employer. Well, only in the sense that I'm self-employed. These days, I'm doing consulting work for a couple of clients, editorial for a couple more, and writing books and articles. With one major job about to end I'd like to slot another into those hours, but it doesn't have to happen immediately. For that matter, we could keep going for at least a year with no income coming in beyond book royalties. So I'm not particularly worried. An office job? I'd have at least a 2-hour one-way commute. I've done that in the past (crossing Los Angeles), but I'm not about to do it again. Something will always turn up.
Wed 13 Mar | x | FJ, We usually have more than one day's worth of work 'scheduled'; e.g. a 6-month 'new project', or something shorter. I am *not* going to attempt to finish it all in one day and night, even if my bosses *would* appreciate my (succeeding at) doing that. Something that worked successfully for me recently was to make a WAG ('wild-ass-guess')schedule at the beginning of the project, measured in weeks. Then a weekly status report, saying what's done, what's not done, whether the project has slipped, what the blockers are, *adjust* the schedule at the end of every week, and publish it to the bosses. (There's some advice about how much to adjust/revise your estimated schedule in, I think, the book called _Rapid Development_). Net result: I was usefully employed every one of those weeks (they managed to feed me input as needed, or find something else to do temporarily if some expected input was delayed); I didn't burn out; the WAG schedule 'slipped' 2 months, but everyone knows exactly why and they had plenty of time to adjust their end-dates, and to adjust the feature set which they're attempting for this release. I've been out drinking with my QA manager, berated him for working such long hours as he was working if the hours were contrary to his desire, told him that it wasn't necessary (citing myself as an example), let him blow some steam, and he feels better now for whatever reason. QA people imho tend to feel less job-secure than developers; wrongly, if I have any say in that ... I would far rather lose a developer or two than any QA. Also managers can feel less secure, as they try to protect (make up for any perceived deficit left by) their underlings. I've also (per my manager's instructions) made it explicit in writing that no single person here will be held responsible for missing some important ship date; that if we succeed then we will all succeed, and that if we fail then we will likely all be fired en masse; and that if anyone has nothing much to do (near the end of a project), the QA manager has plenty and go see him. The QA manager characterized that to me as an 'evil' email (since it mentioned our all being fired), and said that as a result of it several people came to ask him how they could help. So, that went well. In the end, I don't want my family to burn out. If this company can't survive without my working 60+ then I just need to find another company; that's where my loyalties are; but, so far, they seem to be surviving. I used to work long, and I benefited from it then, and now not. HTH.
Thu 14 Mar | Jutta Jordans | FJ wrote: >Just wondering, those of you who have responses posted that follow the pattern more or less of 'I'm just doing my 40', 'it's just a job', 'I'd rather not burn out', 'I just get up and leave' etc. -- have you ever considered the possibility that your actions may be making somebody else on your team have to work harder than they otherwise would? Hey, I was one of the 40 h people, and I think you misunderstood my point. To me it is not 'just a job'. My work is the most important thing in my life. My colleagues are too. I would never think of letting them down in any way. For one thing we have a pretty straight forward 40 h policy in our company, you are not only 'allowed' to leave after an 8 h work day, you are by all means expected to do so. We have a monthly release cycle and by the end of the month things tend to get a bit rough sometimes, most of us work a little longer then. In the more relaxed times you see people leaving office early. It works really great that way. We do not get paid overtime (even though we might be in for a bonus of some kind for extra weekend efforts or the like, I got an invitation to a David Copperfield show last year after working on sunday). We are expected to compensate by taking a day off. Also I think that none of my colleagues (neither programmers nor QA nor management whom I consider colleagues too :-) ) would gain anything from regular overtime done by me or any other developer. 40 h in front of the screen is enough. You do not stop thinking anyway, the best problem solution pop up in my head at night. Working longer on a regular basis wears me out. I had that on a previous job and it ended up with me being seriously ill and unable to work for almost a month. This I consider letting my fellow programmers down. And working well together with the QA department or not has nothing to do with the time you spend at work either. In the oppsosite. I would guess that a company relying on their employees doing serious overtime all the time cannot be that keen on quality anyway and therefore QA might find it harder getting heard. The longer programmers feel they have to work, the less time they will want to spare on tasks other than coding. Jm2c,
Thu 14 Mar | Matthew John Wills | M|0|25 >> Just wondering, those of you who have responses posted that follow the pattern more or less of 'I'm just doing my 40', 'it's just a job', 'I'd rather not burn out', 'I just get up and leave' etc. -- have you ever considered the possibility that your actions may be making somebody else on your team have to work harder than they otherwise would? FJ, Commonsense (and a multitude of literature - Peopleware) proves that overtime is worthless. If people hang back and work longer hours then they invariably: a) Introduce more problems than they solve b) Slack off anyway So there is no real reason to feel guilty (assuming you are working the hours you are paid to work). I work 37.5 hours a week and get as much done in that as I would in 60... Seeya
Thu 14 Mar | James Wann | STATUS|S KIDS|0 AGE|28 All the response formats on this message board *proves* the theory that user's don't read instructions :-P Long hours don't affect my personal life much. It's only when hours creep into my official 'play time' - (ie. any time friday night to sunday night) that it starts to become bothersome. It's too bad that long hours are the norm in the software industry. I'm hoping it will fully change in the next 10-20 years, when more Gen-X'ers who grew up and evolved with the computer industry will become 'management'. They'll lead the push for the essential processes that are necessary for a healthy software organization. In general, there's a shortage of good technical managers in the industry. It definitely rears its ugly head every time I see a job posting looking for a '.NET Architect with 10 years of .NET experience.' - oops, I'm digressing...(and not following instructions :-P)
Fri 15 Mar | William C | STATUS|S KIDS|0 AGE|30 Typical week: Monday, 12:30pm - 11:00pm in the office Tuesday, 12:30pm - 4am in the office Wednesday, sleep in, work 3-4 hours at home Thursday, 12:30pm - 4am in the office Friday, sleep in work 3-4 hours at home Saturday or Sunday - if girlfriend working, I will work some more hours from home (becaue I might have worked less during the week knowing that she was working that weekend). I work long hours (I love this stuff!) but that is so that I can spend more time with my girlfriend (and because I just don't want to stop sometimes -- did I tell you I love this stuff! :) I'm working at least 50 hours a week, but I spend so much more time with my girlfriend because the hours are flexible. Basically, I go into work 3 days a week. Work from home 2 days a week. If I know I'm going into the office the next day, I'll force myself to leave around 11pm. If I know I'm NOT going into the office the next day, I'll leave when I'm tired (4am, 5am, sometimes 6am). This is why ALL workplaces should have flex hours. They get more hours from me (at least 50), they are more productive hours (less context switches, it's real quiet at night), and I'm happy because I can see my girlfriend when she's not working (she's a nurse so her hours are all over the place -- and I adjust my work days accordingly). The philosophy at my workplace is 'work the hours you need to work to be productive'. Let me tell you, it does not get any better than that. Another guy I work with comes in at about 11am and leaves at 4pm (to pick up his little girl). He'll take care of her until she goes to bed. Then, he will work from 9pm-2am at home. So, he still puts in his hours. And gets to spend time with his daughter/wife. So his personal life doesn't suffer either. Again, all companies should let their programmers have flex hours. It's a win-win situation.
Fri 15 Mar | Mike Gunderloy | Came to contract on a chunk of another book today. So much for those looming spare hours!
Fri 15 Mar | Bella | What exactly do you do, Mike? Contract for a book? Are you a proofreader?
Sat 16 Mar | Mike Gunderloy | What do I do? A little of everything. In this case, the contract is to *write* part of a book -- something I do quite frequently. I also write software on a contract basis, edit some magazines, write articles, and poke at some projects that might some day ship as shareware. Used to do a lot of training, too, but that was too much travel.
Books | Wed 14 Nov | Joel Spolsky
Its about time that I updated my crufty old list of recommended books at http://www.joelonsoftware.com/navLinks/fog0000000262.html . What books should I have up there? Ground rules: to keep this conversation on track, everybody gets to vote for ONE book, and one book only. I really want to hear what people think is the SINGLE best book on painless software management.
Wed 13 Mar | William Harold Newman | The treatment of project management books seems good. But I think there should be more pointers to technical programming books as well. There should be a book on algorithms. I realize you're only treating things at the level of _The C Programming Language_. So maybe you can't say people should read the book cover to cover. But there should be an algorithm dictionary on a programmer's desk, running into rather advanced algorithms so that he has some perspective on how tricky things are done well. I love _Introduction to Algorithms_ by Cormen et al., but I don't know enough other books to say it's the best. And Russell and Norvig's _Artificial Intelligence: A Modern Approach_ arguably belongs on the list near _Goedel, Escher, Bach_. If you had to choose only one of the two, I'd probably choose _AIMA_. There should also be pointers to good books on other key subjects. A given programmer might never need to read any one of these books, but when he ventures into the appropriate field he should know where to look instead of making it up as he goes along. I know I'm not supposed to recommend a third (or second, for that matter:-) book but I'll cheat by giving one as an example of the principle: Schneier's _Applied Cryptography_. Great books on compilers, databases, multithreading, fault tolerance, numerical analysis, basic circuit design, and so forth belong here. Also, it'd be worth saying something about good general rules for finding books, e.g. idiosyncrasies and biases of different publishers. Joel probably has a few opinions of his own here (and better knowledge than I of what written opinions are legally actionable:-) so I'll just plug for 'say something about this' instead of giving an example of what to say.
Wed 13 Mar | S H H | Thinking in C++ get's my vote. It lead me to actual understanding of what it means to write effective, maintainable code and what real oo programming is about.
Thu 14 Mar | steve jenson | Anti-Patterns
Thu 14 Mar | steve jenson | 'Patterns of Software', a wonderful series of essays wandering through the world of software development with a healthy dose of personal experience thrown in the mix.
Thu 14 Mar | Mike Woodhouse | 'Refactoring - Improving the Design of Existing Code' by Martin Fowler (pub 2000, Addison Wesley, ISBN 0-201-48567-2) is probably the second most useful book on the practicalities of development (after 'Code Complete') that I've read. It puts a structured framework on much of the effort that I expend on other people's code and gave me a basis to explain to others how I wanted them to approach enhancements. Even though all the examples are Java-based and I'm mostly not Java-literate, it works for me.
Thu 14 Mar | anders pearson | i agree with your comments on K&R but i feel i should point out that it should never be considered an example of how to write solid, secure C. almost every example in the book is a buffer overflow waiting to happen. the fact that so many programmers out there learned C from this book goes a long way to explain why there is so much insecure, fragile software out there.
Thu 14 Mar | Arnaldo Riquelme | UNIX Network Programming http://www.amazon.com/exec/obidos/ASIN/013490012X/qid=1016150498/sr=2-2/ref=sr_2_2/102-0760874-0140967 Advanced Programming in the UNIX(R) Environment http://www.amazon.com/exec/obidos/ASIN/0201563177/qid=1016150550/sr=2-1/ref=sr_2_1/102-0760874-0140967 Although gear towards Unix , win an understanding of C both of this book should make you a great programmer.
Thu 14 Mar | Rich Ruh | Great book list. One of my standard interview questions to anyone who has been out in the field for awhile is 'You're working with a computer science intern who is about to graduate, and you want to give him/her a book as a graduation present-- a book to get them started in their career, to sit on our shelf for years and help them be a better software engineer. What do you get them?' The answer is, of course, in mostly in how they explain their answer, not the specific book. I get a few answers like 'Learn C++ in 21 Days'. These people haven't figured out that today's technology will be obsolete next Tuesday. A surprisingly large number of people can't name a book at all. I usually find an excuse to end those interviews quickly. For those that are left, most will answer with 'Code Complete', or 'Writing Solid Code', but there are a few others that come up from time to time. 'Design Patterns' gets a few votes, but I personally feel you have to code for a few years before you can appreciate that one. A few of the more daring name a non-computer book. My personal answer to this question is 'Zen and the Art of Motorcycle Maintenance'.
Sat 16 Mar | Bert Fernandez | I ask a similar question of software developers I interview: 'What books, maganzines, or websites have/do you read that shaped or impact the way you do your job and why?' There's no 'right' answer (okay, maybe 'Joel on Software' ), but I'm hoping for an answer that will provide me additional insight into the developer. As for my book recommendation, I'm suprised people haven't mention 'Object-oriented Software Construction' by Bertand Meyer. Some may find it a little dry in its textbook-style presentation, but I love its rigorous, systematic approach. If you've ever heard of Design-by-Contract, this book is the source. Another thing people may not like is that the book uses Eiffel for its examples (on one level, the book is describing the basis for Eiffel's design), so you'll have to apply the principles presented to your language of choice yourself. Nevertheless, the rationale is clear and the principles are solid. I read it early in my career and it really shaped how I write software. I should mention I read the 1st edition and I love my 1st edition hardback copy. The 2nd edition looks to be much expanded (which doesn't necessarily make it better) and comes with a copy of the book on CD, but I haven't seen it in hardback. http://www.eiffel.com/doc/oosc/
Sat 16 Mar | David Rubin | The Mythical Man-Month and The One Minute Manager. These two books should be the foundation of every software managers library!
Sat 16 Mar | David Rubin | Oops, I was only supposed to vote for one book. OK then, The Mythical Man-Month!
How to disable Flash in IE | Fri 15 Mar | Colin Davies
I hate Flash intros - is there any way to stop Internet Explorer from running them?
Fri 15 Mar | Mark W | If I'm not mistaken, IE considers flash an Active X and if you disable Active X it should disable flash....
Fri 15 Mar | Christopher Wells | I don't have Flash installed on my machine. Whenever IE asks me whether I want to download and install it, I press the 'no thank you very much' button.
Fri 15 Mar | Colin Davies | I finally tracked this down: http://www.macromedia.com/support/flash/ts/documents/remove_player.htm
Fri 15 Mar | Banana Fred | but if you unregister the Flash Player ActiveX control, you'll get an annoying 'Do you want you to download Flash?' message box on any web page that uses Flash. I think that's much worse than any Flash ads.. Just in case anyone here LIKES Flash, you can now download the new Flash Player 6 today: http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash
Managerial Acccounting | Fri 15 Mar | MatteyBoy
Yesterday, in search of some insight into software development management, I dusted off my Accounting Textbook from college. I found two very interesting things under Managerial Accounting. (Which is a form of Acct. designed specifically to provide guidance/information for decision makers.) It led me to this theory: Many Generally Accepted Accounting Principles (GAAP) are mired in the 1930s, and this is harming software development(*) (1) Accounting to Man. Acct. Theory, there are three kinds of departments: (A) Cost Centers. Manufacturing, HR, etc. (B) Revenue Centers. Sales Departments. (C) Investment Centers. Mortgage Departments or asset management firms, which both incur large costs now and (may) bring larger returns later. Under Man. Acct. Theory, Software Development Departments are COST CENTERS. Managers of Cost Centers are evaluated _solely_ on thier ability to stay below budget. This logic explains the slow machines and lack of cutting-edge tools in our industry - if the only measure of the department is cost ... we need to cut cust. Now, there is a solution: In manufacturing operations, you can come up with a standard cost for a unit. Then, if you make more units, you can spend more money - as long as you have demand and the cost of developing each unit is below standard cost So, if we had a unit for measuring costs (not KLOC, more like Function Points), we could prove our expenses we just. We could also set a standard, instead of having budgets that spiral downward in tough times, and we could come up with some measurable proof of ROI. (Did you notice that that extra $10,000 on HardWare and Training Last year netted us 200 more function points, and at $200 each standard, we made $30,000?) But, sadly, realistically, we just dont have this. So we live in GAAP. (2) My book surprised me by saying that every level of management should be involved in the budgeting process - but not ANY of hte people actually doing the work. The argument was that lower managment had a better idea of reality than upper management. What about the people doing the work? Then I remember that GAAP was written in the 1930s, when American business was much more entrenched in a caste mentality, and a technical middle class hadnt fully emerged. The Typical level 1 Supervisor back then MIGHT have MAYBE had a high school education. Involving labor in budgeting was simply unrealistic and not practical - they didnt have much to add. Today, a typical Software Department might have someone with a degree in accounting, business, a couplea CS guys, etc, etc. They probably each have years of professional business experience combined with a great deal of experience in create project plans and living with the consequences of budgets. They may have more time with thier current company than thier manager. Why not involve them (to a slight extent) in the planning process? My guess? Because the accounting books say not to. This leads me to my solutions: (1) Software Companies seem to be generally better at this than companies that do something else as a core function. Obviously, Wal-Mart sees its money in retail sales, not automation. Exceptions about for sales force automation, etc, etc, but, overall, Software is a cost Center for these companies - while technology companies may see Software departments as having direct effects on revenue. (2) SW Companies led by programmers, former programmers, or other folks who have a great deal of experience in technology are much for likely to get it. (IE Yahoos Semil might have problems with this.) (3) SW Management Programs and MBAs with an emphasis in E-Commerce(etc) should teach something like Joel Spolskys Article on Converting Capital into Code through programmers. (http://www.joelonsoftware.com/articles/fog0000000074.html) (IE - The idea is that when you invest in hardware and tools and morale budgets, you get more stuff done, which you can then sell for more money.) thoughts? (*) - GAAP was created in the 1930s as a response to the great depression.
Fri 15 Mar | Bella | Your technology budget should be based on one simple factor. If your software makes more money (or causes more savings) than it costs to create and maintain, then it is worthwhile. Otherwise, it is not.
Fri 15 Mar | mackinac | Interesting ideas here. I have, myself, been thinking that some of the problems we have with SW development is because management thinking is stuck back in the early part of the 20th century when the low level workers were doing production line work, not thinking type work. The basic goal of a mid-level manager is to advance their career and if lower costs is the way to do it, that's what they'll do. But this doesn't seem to explain the whole problem. Developers' salaries, office space, PCs, and software tools are all expenses. Why do so many companies seem willing to hire numerous developers and skimp on the support items which are a lot cheaper? My hypothesis: a manager's status and, thus, future career prospects, depends on the number of people managed, not on their output. Note on Bella's comment: It is not sufficient that benefits exceed costs. Benefits must exceed the benefits of any other use of the funds to make the expediture justifiable. (i.e., best ROI)
Fri 15 Mar | Doug Withau | Has anyone ever read any books by Goldratt? http://www.amazon.com/exec/obidos/ASIN/0884270610/qid=1016234486/sr=8-1/ref=sr_8_67_1/002-9398894-1701601 He hits on many of the same points. Basically he argues optimizing an accountant’s equation may not be the best thing for the business in the long run. His books are written as a novel, like Deathmarch. You have to work past the fabricated story, but he makes good points. I would recommend it even though it is directed at manufacturing managers more than software folks. Knowing about bean counters helps you understand why letting the VC’s into a startup can cause a quick and painful death. They impose cost accounting so they can understand the balance sheet. If you’re a manager and you’re sacrificing long-term profits for local accounting optimization, are you really advancing your career? You could probably go to the unemployment office and ask the people in line.
.NET, Visual Studio.NET, VB.NET, C# | Thu 14 Mar | matt
Its been about a month now since version 1.0 of Visual Studio.NET was officially released. So I was wondering if anyone started using .NET either full time or part time? If so what language are you coding in and what are your thoughts on the overall environment and framework?
Thu 14 Mar | Matthew John Wills | Matt, Might be worthwhile for you to check out: http://discuss.develop.com/ Seeya
Thu 14 Mar | Mike Gunderloy | I'm using .NET roughly 70% of the time now. Of course, most of what I do is writing, which is only vaguely related to the actual market for software. But I do have utility & web work that I've ported over. Working in VB .NET mostly, with a bit of C#, and a mix of Windows Forms and ASP.NET applications. Personally, I like the .NET Framework and the tools for working with it. For me, one of the key indicators of that is that VB6 now feels clunky and wrong when I need to work in it.
Thu 14 Mar | Jan Derk | Mike Gunderloy wrote: 'VB6 now feels clunky and wrong when I need to work in it.' We, the Delphi developers, have been telling you that for years ;)
Thu 14 Mar | B | I've used ASP.NET and C# in a couple of projects where I have control over the server and love it. I'm just using Homesite as my IDE with a color coding scheme, and it does the job. My ASP.NET code is much much cleaner than my ASP code.
Fri 15 Mar | DB | I'm using C# at home and converting an existing Delphi project to it. It's... interesting. Kinda clunky still in comparison to Delphi, but has a few niceties Delphi does not, and performance is better than I expected. What I'm really pissed at is that it forces IE6 on you. As IE6 caused random reboots on my PC, I uninstalled the lot, created a new Win2K VMware virtual machine and am using that for .NET development now. Unfortunately the uninstall of .NET on the 'real' machine hosed my Delphi 6 install, and after uninstalling D6, now *nothing* that uses the Windows Installer will install. God I hate MSI. For the first time ever it looks like a reinstall of Win2K is going to be required as I've exhausted every possible avenue of fixing this one.
Fri 15 Mar | Ged Byrne | DB, You say performance is good. How does it compare to Delphi?
Fri 15 Mar | Dave Rothgery | Ged> For what? I don't know Delphi, but I primarily work in VB.NET now (and used to primarily work in VB6 and VBScript). There are definitely areas where VB.NET is much faster, and areas where it's slower. Windows.Forms definitely have more overhead than VB6 Forms, but I don't think this is a big deal very often; most GUI activity involves waiting for the user, not the system. On the other hand, a lot of back-end stuff is significantly faster.
Big Pile of money. | Thu 14 Mar | Ged Byrne
In his review of Capitalism for Programmers joel says: If you spend enough time in this industry its almost impossible to avoid suddenly finding yourself with a big pile of money that you are going to have to manage somehow. http://www.joelonsoftware.com/navLinks/fog0000000262.html I wish, I wish. Am I alone in finding it not only quite possible, but very easy, to work in this industry year after year and not even find yourself with a tiny pile of money?
Thu 14 Mar | A.N. Mouse | I believe he was referring to the pile of money you are managing for you employer... certainly not our own... God knows mine would be more like a hole than a pile.
Thu 14 Mar | F.J. Weiland | IMO, probably not going to happen as much anymore as it did for a while. I would say that timing has had a good bit to do with it to date. Until the last couple of years or so, we had a pretty good run going. BTW - I'm excluding the instances of folks making piles of money from IPO's. I'm just referring to folks making a 'pile' from their fees or paychecks.
Thu 14 Mar | MatteyBoy | I would have to add the caveat 'If you're world class, and work for a world-class SOFTWARE company ...' You will find yourself in a big pile of money. In other words, if you are working in the IS department of a bank, you might not end up with $ one. If you work for eBay and move your way up the ranks - you're gonna get some. If you are working for a non-Software company, I'd say the only way to make a pile of dough in software is to work for that company when it's a small startup. Then, when and IF the company hits the big time, everyone is going to get some stock, not just the 'core' specialty folks. (Generally, the executives, managers and the people actually making the product - hence the reason to work for a Software Company, above.) Then again, Your Milage May Vary. When Prince Machine was bought by Johnson Controls a few years back, I understand that every employee got a bonus - the long-standing executives were the ones that got millions, but I understand that some of the hourly folks with 30 years of exeperience got in the high 6 figures. Or I could be totally wrong. That's the problem with rumors. :-) Still, the owner of a private company who sells to a public company might not have the same sense of .. um ... 'Social Justice.'
Thu 14 Mar | Bella | Joel's comment was in context of reccomending a book on personal investing. Ergo, he clearly was referring to managing your OWN pile of money. Though 'Big Pile' is a relative term, I agree, you almost had to go out of your way to not have a serious income surplus over the last few years. For those who are still poor, it's not how much you make, it's how much you keep, and it's how you make it work for you. There are plenty of mailmen with higher net worths than doctors.
Thu 14 Mar | Ged Byrne | To be honest I've only been at it for 4 years. I've been doing the job for 10 or so, but I've only just managed to get the Job Title. The last boom gave me the foot in, which is surprisingly difficult without a degree or Lucky Break. Hopefully my Big Pile of Money will come in time.
Thu 14 Mar | Mark W | I'm hoping to turn my steady trickle of money into 'enough to be comfortable in the long run without sacrificing too much now.' Mostly by socking it away and taking advantage of any and every payback program my employer gives me. Which reminds me, I have to update my employer match info for my 401k. See my posts on the 'Why are you programming' thread for my thoughts on pipe dreams of one big pile of money. As far as piles of money to manage for the company. Now that IS a pipe dream, especially in today's economy.
Thu 14 Mar | Malcolm | re mailmen, 'The Millionaire Next Door' give good coverage of folks that become millionaries through good old hard work, savings, and frugality. Nothing earth shattering in this book, but it does remind you that you don't need to latch onto a booming IPO to become rich.
Fri 15 Mar | Mark W | Charles 'Chuck' Schwab wrote a few good books in investing 'Be Your Own Stockbroker' for example, and the financial tools on his website (schwab.com) are good. Especially the retirement calculator. I re-test myself every few months to year or so with that thing. Andrew Tobias' 'The Only Guide to Investing You'll Ever Need' or something like that is also an excellent book. 'Millionaire Next Door' is also good, but the sequel 'Millionaire's Mind' is only so-so. I reccomend them all. None of them are get-rich-quick schemes, like Robert G. Allen. all of them are based on reality and are very practical.
Should programmers admin their workstations? | Wed 13 Mar | Doug Withau
In the Teaching Laziness thread http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=4579&ixReplies=22 I said that developers should not have permission to administrate their workstations. “a programmer” replied that he would quit if they did not have control over their machine. If he worked for me I would say goodbye and have a nice life. Letting someone change their computer whenever and however they want introduces random variables. I personally don’t need that headache. Any IT person would say that you couldn’t let users change or install anything they want. Are programmers special? Are we better or worse than the general computer user? Programmers, is control of your workstation worth quitting over? Managers, what is your stand? Has anyone ever actually quit over this? Please, give concrete examples and stories both good and bad. Im talking about a situation with more than 3-4 people working together.
Wed 13 Mar | Banana Fred | At the company where I work, one of the departments wanted to use something like Microsoft SMS to create standard workstation disk images, allowing admins to 'push' new apps or upgrade anti-virus software, for example. Needless to say, the programmers in that department were pissed. Rather than reducing the number of variables, the programmers' computer configurations would be changing beneath them, possibly creating app conflicts. Plus, the IT department would then need to support and maintain the highly evolving and overly complicated build tools and configurations. Each programmer has their their own favorites tools or settings, which improves their productivity. Why do you insist the programmers NOT have control over their computers? I can't think of any reasons that would improve individual programmer productivity.
Wed 13 Mar | Dario Vasconcelos | I really think that with all the things you have to keep at the top of your head and the tools you need to develop sophisticated applications, there is an actual need to install utilities, reference guides, etc. In my machine, I have winzip, a sniffer, two java decompilers (sometimes one will make the job when the other won't), a news reader, a graphical FTP, a custom telnet that will do ssh, a graphical utility (to measure, crop and view images), gnu diff, vim, a utility for global replace of strings over directories, etc, etc; I wouldn't live without most of these gadgets and not many of the other programmers here use them all. But when I used to do C++ Windows programming, the mixture was even worse. So, I would say that is a bad thing to forbid administration permissions to programmers. I still can't think of a situation where you'd find REAL troubles if you'd let your programmers configure their machines. I can only guess you mean denying authorization on them upgrading their programming tools: that can cause a real mess, but it is not a very likely situation if you have experienced programmers.
Wed 13 Mar | Jan Derk | Doug Withau wrote: 'Should programmers admin their workstations?' You don't thrust your programmers to admin their own computers. Yet, you do thrust them to design your applications and hack your source code? Strange... I've seen too many situations where programmers had to wait hours for the administrator to show up from lunch to make a trivial change. Or the guy went home early... It's inefficient. If your administrators are available 24x7x365 that's a little less inefficient, but still inefficient. The psychological part is worse: Not many programmer will be happy campers, knowing that you don't thrust them with something that most of them consider trivial. Having fun and feeling in control keeps the moral higher. And high moral is what gives you high productivity and quality code. Sure tell that you don't like them to mess up their computers. But I would say: any programmer that regularly causes trouble by messing up his computer, should not be a programmer at all.
Wed 13 Mar | Rich | I do believe that in general programmers are much better at computer admin/maintenance than other users. I would hope so. Sometimes showing a bit of trust can go a long way in relationships within a team. I'm assuming everyone on your team are adults. Treat them like it. If they can't handle the responsibility, then it's a problem.
Wed 13 Mar | Bill Carlson | Okay, this is an effective troll and I'll take the bait. I suppose the question is only meaningful if you know whether you're talking about 'programmers' or 'engineers'. A 'programmer' being a soulless automaton whos job it is to append source lines onto a 15 year old COBOL file or change fixed constants when business rules change. Okay, lock his workstation before he hurts himself. An engineer, on the other hand, has the job of creating art on the canvas on bytes. Dramatic? Sure, but accurate. This person may hurt themselves, but stands to benefit from an open computer. It's narrow minded and egotistical to assume that the manager can anticipate every utility and application that would be useful to a given person now and in the future. Or even evaluate whether a given program has value. This kind of thinking goes right along with 'you must wear a blue shirt and kacki pants', 'no personal effects on the desk', 'no more than 15 lines in a function', etc. This thinking works when you want 100 people to do the work of 10 (big company), not when you want 10 people to do the work of 100 (small company). It all comes down to cultural precident. You're correct to tightly control which libraries/DLLs get linked in, which APIs are called, and which technologies are used. But we're not laying brick here. A bucket of morter and a fancy spatula are going to cut it for some, but not others.
Wed 13 Mar | chunks | Is this a troll? I have never worked in a situation where developers did not have control over their own workstations.
Wed 13 Mar | mackinac | There can be so many variations in system installations that it is hard to respond to this. In most of my recent work environments I had a Windows NT workstation. As long as I could install some extra tools that I wanted, such as XEmacs, I didn't have any problem with sys admins working on the basic OS stuff. With my current PC I have the admin password and can do whatever I want to. On one assignment we had HP-UX workstations administered by an IT group. For the most part we had the tools we needed and just let IT worry about admin. However, the sys admin group wanted the workstation placed on the desk tops. From their POV it was a good idea because it kept the machines out of dust on the floor. The developers protested because it took up precious desk space and was noisy. Is it worth quitting over? Maybe in a better job market. As a developer I prefer to work in an environment that is supportive. If IT is hostile to users that is probably a symptom of a broader problem with the company culture. I'd want to be somewhere else.
Wed 13 Mar | Damian | The admin where I work and I have a good understanding. It goes like this 'You do what you like on your PC, but if it breaks, you fix it' That works fine by me. Part of my job is evaluating new tools. If I had to call the admin over every time I wanted to install something, I would go nuts. I wouldn't be able to do my job properly, and the admin wouldn't be able to do his, because he would always be over with me being hassled about some thing I wanted to install. In the end, everyone would be unhappy. And yeah, in a workplace like that, eventually I probably would quit. It's like Joel's example in one of the articles about an admin hassling him to stop coding and clean up some space on the server, it is a waste of valuable time. Damian
Wed 13 Mar | anon | It depends. My first job was at Nortel writing telecomms code on a mainframe (which was shared with everybody else, naturally ... it was *fast* after 17:30): there I had no super permissions, used their standard tools, glass terminal, no problem at all, very tidy and professional. Here we now use PCs, and everyone administers their own ... except for the 'test' machines, the version control software (VCS) server, and a few other servers, which are actually administered by someone or some few of us when needed but which aren't just randomly hacked up by any/everyone. IT doesn't support our machines, they wouldn't even if we wanted them to: they support some standard configuration with email installed on it and not much else, not developer tools. I will insist on a standard build environment, for anyone who builds non-prototype software (which includes all developers): a specific compiler version and standard libraries, for example. I also insist that anything be buildable on any machine that has the standard build/tools environment installed: what this means is that if you're using *.LIB and *.H and *.TLB and all of that, these must be in the VCS. Special things (device drivers) have explicit 'how to install the build environment' instructions. I doubt that I need to relate any war-stories that might illustrate why this policy seems sensible to me; people are reminded 'why' occasionally if someone temporarily breaks this rule. Some people are early adopters, and some late; e.g. some still use NT v4 on their workstations, and some use XP; and various Solaris versions. A benefit of this is early (pre-formal) testing of the product, another is just to keep some people happy, also people choose their own source browsers and what have you. I don't know disadvantages. Some people (especially but not only testers) use Ghost or VM to run multiple O/Ses on one machine. To save money, we don't use standardized hardware; e.g. we don't throw away all computers whenever we buy one newer machine. Machines are hand-me-downed (everyone tends to have two, a more and a less powerful one, for testing our client/server software). Some but not all machines are expensive (multi-CPU NT, and Solaris), with the most expensive ones being in the test room only and administered by the testers. We had a couple of 'let's stop and look for all of the installed IIS servers in here' when a virus got inside our corporate firewall ... on three occasions. Now our test machines which must run IIS constantly are usually on a disconnected LAN, and someone I think is in charge of knowing about the remaining IIS servers and keeping them patched. Oh, people tend to be administrators of their local machine only, not of the whole domain; and on Unix we all know the root password (except of the VCS server which is administered by corporate people off-site, for which I'm thankful) and use it occasionally when needed (e.g. to install stuff) but we tend to develope and run our software there as normal users. IT administer some stuff: the corporate firewall and VPNs, the LAN cabling, the phone system, the email (client and server), the VCS (client and server, but not the contents of the VCS), corporate intranet and internet stuff; but they don't know our product and aren't competent to administer how we develope it. I can conceive of other environments that might be simpler or stricter (mainframe, simple Web, national security). We're an autonomous group of 20-60 people in a company of 6000. If OTOH we were smaller (8) or larger (200) then someone might (I don't know) be able to fully administer all machines, on either a part-time or a full-time basis respectively. > The nice thing about open source projects is that you don't have to accept code from people you don't trust, and you get to select who has CVS access... I find exactly that to be a nice thing about a closed source project too. It's up to us who we hire (or fire, or find another job for, if we find that we can't work with them), we can do peer reviews of new design and code before 'accepting' it ...
Wed 13 Mar | Robert W. Anderson | I don't have root on my machine and frankly I can't think of any reason that I should have it. If I need to install a tool, I install it locally. Now, Windows NT is broken in this regard. Most things cannot be installed 'locally' in the sense that they can on a *nix box. Installation in general is an admin-only operation. If I was a Windows guy, I would insist on having admin. As a *nix guy, I don't need it and it's probably better that I dont' have it. Bob
Wed 13 Mar | anon | As a man who works for a company that never met a server it didn't like be dbms,app or web the solution is pretty simply: 1. TEACH YOUR PROGRAMMERS TO USE GHOST 2. Give them a nice large networked hard-drive to store their images END of Problem
Wed 13 Mar | Tony | If you asked somebody to dig a hole for you and you wanted it done quickly, would you tie one hand behind their back? Yes, the hole can still be dug. This is the same thing with admin rights for developers.
Wed 13 Mar | a. programmer | I reread my response, and maybe it seemed confrontational. Let me clarify. - Code developed on different kinds of machines can be more stable. These defects that don't repeat on other machines are more interesting. - Developers need a messy machine that allow them to test the quality of new libraries and experiment with apps. In addition, they need a clean machine that is reliable. - Few things have less quality than an ambitious new app your team is writing. A braindead little error may end up deleting your root directory. So anything else you run is likely to have more quality. - Developers working on multiple platforms induces the company to use the most stable technologies that work well on different machines. Some companies standardize on Outlook, and it takes forever to support simpler unix and web email interfaces.
Thu 14 Mar | Mark W | I think programmers should have admin rights (assuming a Win NT environment). One of our guys is a great CGI guy but knows little about Oracle. He learned Oracle enough to interface with it buy using Toad. He never would've discovered Toad if he couldn't install it on his computer. Programmers are constantly looking for tools to help. Programmers are constantly solving *new* problems and therefore constantly looking for new tools. my 2cents.
Thu 14 Mar | Boomhauer | The 'official' rule at my last project was, no loading of any unauthorized software on any company computers. But this interpreted as a way to prevent having one of the less-than-brilliant developers repeatedly screw up their desktops via unsupported installations, and wind up costing the company in support dollars to reopair. I maintained a full suite of 'unauthorized' applications on my workstation and was far more productive than the handful of coworkers who actually followed this rule and somtimes spent over a day waiting for desktop support to make their way over. My interpretation of the rule: if you are fired for instaling unauthorized apps, you probably needed to be fired anyway.
Thu 14 Mar | Roman Eremin | You know, if you want your developers to produce code - you have to avoid everything that prevents this. If developer want to be in control of their workstation - give it to them, If not - supply an IT person to manage. If your goal is not to produce a code - you can do whatever you want.
Thu 14 Mar | DB | If the job market were very buoyant and a 'do not touch' rule was applied to my PC, yes, I'd seriously consider quitting. That sort of attitude would imply a lot of other crap was in place. There are any number of day to day problems that are far far easier for me to deal with when I have admin rights on this machine, and can install the software I want when I want rather than waiting weeks for IT support to get off their arses and deal with it. If I found out such a policy was in place at an interview, the interview would end pretty quickly! Similarly I once interviewed with a company that stated they didn't allow staff to 'use the internet' except after work hours. Any company that so misunderstands developers that it disallows them access to their number one resource (Google Groups!), is clearly not worth working for.
Thu 14 Mar | Katie Lucas | Yeah, there's nothing like saying 'Hey, I could solve this problem in 30 seconds if I could install and then waiting 2 hours for tech support to arrive, only to find out that they're not authorised to install because is still making its long trek through 'approval committee' by a bunch of people that use computers for email and writing memos and nothing else. Because the same sort of company that usually has the 'no admin for developers' policy usually has 'no perl because it was written by hippies and communists' policies as well.
Thu 14 Mar | Patrik | At my former employer, we had a 'no admin for developers policy' done right. That was at a small company where we were some 30 developers. When I came to work there I got a machine which I installed whatever I needed, stuff you would never find on 'corporate installed machines'. This install was then ghosted, and stored on a CD on a per person basis, so if my machine got flaky, some tech-support guy ordered a new machine, and ghosted back 'my' machine config to the new machine. This is very timesaving. At my current place it is done wrong, as per the post above. So it is really a matter of how it is done, if it is timesaving or just an obstacle to get the job done.
Thu 14 Mar | Jan Derk | Boomhauer wrote: 'The 'official' rule at my last project was, no loading of any unauthorized software on any company computers. But this interpreted as a way to prevent having one of the less-than-brilliant developers repeatedly screw up their desktops via unsupported installations, and wind up costing the company in support dollars to repair.' Traditional case of management incompetence. Punish/restrict all, because one can't handle himself. I often asked myself why they do this. My conclusion was that bad managers follow the way of the least resistance. They find it scary to confront/fire incompetent employees. It's much easier to fire off a memo with restrictions for everyone.
Thu 14 Mar | MatteyBoy | Check out Joel's new book list ... the book on Despair, Desolation, and Depression. Hmm .... people get depressed when they feel they don't have control of thier environment ... hmm. 'nuff said.
Thu 14 Mar | Doug Withau | Great responses, thanks. I was trolling a little. I wrote the questions to try and get responses. We do not completely lock down workstations where I work. From the responses, I think we restrict things more than in most development shops. Let me respond and give some background reasons for why I think we are doing things right. First, I did not think the response to my original post on the Laziness thread was confrontational. I though this must be a hot button for people if someone is willing to quit, or even threaten. People have said that they know what tools they need better than management. Probably true. If your managers don’t have a good idea of what tools are required, maybe you should suggest hiring some technical managers. Everyone here has all the tools, editors, and gadgets they need. It is rare to have a request refused for some new tool. The tool must be justified. If it is just cool and advertised as the next best thing, I don’t want people installing it without some controls. If we believe a tool is useful, we test it on one computer. If it is worthwhile, we push it to everyone. The idea is to avoid having things passed around that are just the flavor of the month. This helps avoid mocking bird development (Laziness thread). It is also very nice to know who has changed something on their machine. When Joe’s code won’t build on Bob’s machine, is it a real bug, or has Bob installed thingy X? We do not have cubicle police patrolling. We do embedded development with about 25 engineers. This is a very nice, laidback environment. There are times you have to wait to get something fixed or installed. I bitch about it too. That is what programmers do. We also have a non-developer dedicated to keeping the PC’s running, doing backups and general system maintenance. If your main business is not software, I do not think your IT department will be able to handle our special needs. In the original post, Bill Carlson ask what should he do when starting a new, large project. I said take control of things that affect your project wherever you can. This is something that can be controlled, so do it. If I never have to waste a day while an engineer reinstalls the OS, I’m going to do it.
Thu 14 Mar | Steve Wheeler | Jan Derk wrote: 'Traditional case of management incompetence. Punish/restrict all, because one can't handle himself. I often asked myself why they do this. My conclusion was that bad managers follow the way of the least resistance. They find it scary to confront/fire incompetent employees. It's much easier to fire off a memo with restrictions for everyone. ' I consider it much more likely that it's a CYA move to forestall litigation ('They're _discriminating_ against me!'). In the US these days, you have to maintain such a long and detailed paper trail these days in order to defend wrongful-termination lawsuits that I don't think it's a matter of incompetence (although it could be). If they don't already have a significant paper trail (specific incidents, times, dates, other people involved, etc.) on that individual, or if they don't consider staff resentment caused by the policy to outweigh the costs of establishing such a paper trail, then a blanket policy is not only the path of least resistance, but also the sensible thing to do.
Thu 14 Mar | Jan Derk | Steve Wheeler wrote: 'I consider it much more likely that it's a CYA move to forestall litigation.' You got a valid point there. Drastic measures like firing a person should always be based on facts. And it's good that employees are protected against being fired just because the manager had an argument with his wife. However, restricting every developer because one individual can't handle the responsibility is IMHO incompetence. In this specific example I would probably lockup the computer of this individual, not of the others. This might get the message through. If it doesn't, fire I'd fire him. And yes having some black on white proof is probably a good thing. Letting the fear for paperwork control your actions is a recipe for disaster. Steve McConnell said it well in Code Complete: 'If you tolerate even one developer whom the other developers think is a problem, you'll hurt the morale of the good developers.' and 'Some managers say that they have never regretted firing anyone. They've only regretted not doing it sooner.'
Thu 14 Mar | Jan Derk | I wrote: 'Steve McConnell said it well in Code Complete:' Make that 'Steve McConnell said it well in Rapid Development:' I love the [cough] edit functionality in this forum.
Thu 14 Mar | F.J. Weiland | In general, I have found it works very well to have developers be local admins on their boxes (w2k environment currently), and to have the senior-most developer on a project (current company calls this person a 'TA' for 'Technical Architect') be the admin on any project-specific boxes, such as the db server, web server, etc. On some projects, I've been admin on the QA box, but when I'm not, I haven't had any problems going to the TA to get done what I needed to. Most of our developers are running w2k server on their local boxes. Oh - BTW, just to clarify - currently working in a project/services environment, instead of a product/shrinkwrap environment. So, each project normally gets its own dev and qa environments (at least) set up, then torn down and repurposed for the next effort. Anyway, much like several previous posters mentioned, our sysadmin has several types of ghost images for our boxes, and if anyone f**ks-up their box too badly, it's just a few minutes' work to suck the ghost image down and they have a fresh, clean box. Sometimes, being 'winders' boxes, we'll just ask the SA to lay down a new image for us anyway just to have a clean box. Most folks who want them here have at least two machines, with the second one being a *nix box. Nobody's said anything 'officially' but it's kind of like 'if you can't handle being root for yourself, then you shouldn't have it', so folks handle their own *nix boxes themselves. This is sort of informally enforced by the developers themselves, which is kind of nice. Personally (and politically, but that's grist for another discussion group), I believe in self-regulation as much as possible. Standardize where it's truly important (*operationally important* like compilers, libraries, version control tools and defect tracking tools, not 'religiously' important, such as which code editor to use). Our SA's a great guy -- one of the very best I've ever worked with (and NO, you cannot have him!! ;-). He's got a set of images, like I said - one for our PM, one for our sales folks, etc. I built one QA box the way I wanted, he ghosted it for me (he maintains the images for us), it's easy to re-image any of my boxes in the lab. This makes sure that I have our *important* standardized elements in place -- antivirus and network config. I'm local admin on my personal box, I'm root on my linux box in the lab, and I'm local admin on all the QA boxes. The SA is the domain admin, and there's a backup among our most senior tech folks who can get into everything in the server room if need be. Folks can pretty much install what they want, and within reason, the SA will help out where he can, but most folks handle what they need to without problems. This is not a strict shop in terms of such rules and procedures, but for this group of people at our current size, it's working very well. All we really have to watch out for is to make sure nobody screws up on any licensing issues. So far, we've stayed on the sunny side of that problem. We've got about a dozen developers of one flavor or another, just to give you an idea of the size for which this system is working. My testing environments are all done using VMWare, and without this turning into a commercial for VMWare, I cannot recommend it highly enough. It paid for itself the first project I had to reconfigure the lab for, and continues to do so each time. The nice thing is that it leaves the underlying box untouched (well very nearly - just looks like another app and a *big* data file to w2k). Of course, I admin all the virtual machines. I pretty much have to as the QA Manager. (BTW - feel free to email me if you have any questions about VMWare - I really am an advocate). It was very different at a previous job. We basically did shrinkwrap software, going out to global customers. I was the Director of Engineering Services and owned CM, QA, Lab Services, Documentation, Beta Testing and Deployment Engineering. The Director of Engineering owned the 60 or so developers. I had about 35 people. That environment required a much more carefully regulated environment, of course. I believe our NT developers were local admins, don't know about our AIX developers, though the skill level and responsiveness of the 'MIS' department that actually owned all the company boxes (except for those in my labs) was fairly poor, so I suspect that our AIX devlopers were also root on their boxes, else nothing would have ever gotten coded. Prime example - MIS 'owned' the box on which our VSS repository lived, they adminstered the accounts, permissions, etc. That all sat hidden away in the big, 'secret' MIS department. One day, our entire friggin' staff of 60 developers were basically idled because nobody could check any code in or out - MIS had let the VSS disk completely fill up without having taken any actions to head it off. We couldn't see the disks themselves, so we couldn't know. Hell, we didn't even know how big a disk it was. So with 60 developers sitting around reading books or playing with local copies of stuff, they were busy ripping apart a RAID set to get another disk online. Un-effing-believeable. The Director of Engineering and I both started our jobs there at about the same time, so we did a lot of house-cleaning. We were working very hard to try to get everyone onto a standard set of libraries, and we did discover that our developers were using three or four different versions of MS VC++, which we also tried to correct. This was something we considered to be an operationally important standard to enforce. Fortunately, my CM Manager had his act together and had done a good job of at least setting up pristine build environments for everything where at least there we knew what the hell everything was getting built with. To support this, we required that everything that went to QA got rebuilt by CM in the build environment first, specifically to flush out refs to people's home-brew versions of libraries located only on their boxes and other random noise. My bottom line for larger, more complicated, and more formal environment like that one is that there was still a pretty good amount of autonomy for developers locally, but we filtered out the bad effects of that with our CM process. There were a *lot* of problems in that organization, and there was a lot more work to do there, but this piece of the process was working pretty well when I left - we could reliably build our code, track our branches, and burn the gold disks repeatedly (for anyone who might not know the term, in our case the 'gold disks' had to go the folks who did the assembly of our hardware to be burned to all the drives before it went out, so these had to be clean copies of good builds). When I've first arrived in some smaller shops, or when I've been a consultant and first showed up at the client site, I've often not started with local admin rights, but quickly schmoozed the SA into giving them to me. In general, my experience has been that with big 'MIS' departments or whatever they might be called, they have simply not been responsive enough to effectively support the development process -- either for the developers or for QA. Guess part of that may have come from the seemingly inevitable turf battles that arose between the IT-support staff and the developers. Don't know - your mileage may vary.
Fri 15 Mar | Mark W | I'm just posting to vent. Our PC's were recently moved from one set of cubicles to another... About 50 feet. I turn on my computer in the morning and nothing. I get the Windows NT startup screen and it won't go any farther than that. The tech worked for literally 3 days to fix it. It turned out that they plugged the Zip Drive into the wrong port and that caused some sort of hardware conflict. This was around 2 weeks ago. Today I wanted to burn a CD with the latest version of CityDesk, and guess what. The computer isn't recognizing my cd-writer, and I don't have the rights to go in and see if there are any conflicts or change the drive letter. I went and spoke to another of the tech support guys, but the guy that worked on my computer was out, so I have to wait for someone to 'get around to' fixing it. I think you have to take into consideration the technical abilities of the person working on the machine day to day and the administrator. I would've figured out the zip drive problem within an hour. 'They just moved my computer, what could be wrong? Perhaps they plugged something in in the wrong place.' This CD-ROM thing I could probably fix just as easily if I had the rights to do so.
Fri 15 Mar | Robert Moir | Well I've seen a lot of posts from programmers on this subject, how about some thoughts from a network admin on the subject? The idea that programmers know how to admin their own machines better than most people is a falicy. Some do, some do not. If someone actually needs to hear my war stories to believe that, let me know. But making programmers dance to my schedule would be unproductive. You all know that, and if you didn't before you must do now you've read enough of this topic to come to this post! So what does work for me? Well a standard 'base' install image that i can return a broken machine to if it's completely hosed, and a stipulation that other than that, it's a case of 'u breakum u fixum'. If you wanted to take a second base install with your own programming tools and geegaws installed that would be cool with me too, i'd help with that. I know i couldn't run my network without my load of 'non standard' admin tools and geegaws, i think its unreasonable to give the programmers less leeway than the admins.
Fri 15 Mar | Mark W | I'm not saying programmers know how to admin their own machines, but if your programmers do... Our company is huge. Large enough for one branch to be able to charge another branch for service. Basically the policy is this: If you don't have admin rights and your machine breaks and you require a complete rebuild, it's free. If you have admin rights and you need a rebuild, it'll cost you $2,000. My case was different - they obviously 'broke' my machine during the move, so I didn't have to pay. The leeway to evaluate is a good thing.
Patterns never took off? | Wed 13 Mar | Charles Miller
On the book reviews page, Joel says about Alexanders A Pattern Language, I think the patterns movement in programming never quite took off because it was an attempt to copy the form of this book rather than the wisdom of this book. I find this pronouncement a bit strange, because where I work, design patterns are ubiquitous. I cant move from the elevator to my desk without running into patterns. A lot of the time, design patterns are misunderstood or misused (the idea is not to take a bunch of square pegs and shove them in round holes, its just to recognise when the hole is square in the first place, and pick the right peg), but its very difficult to avoid them. Or am I just working in a weird corner of the industry?
Wed 13 Mar | Katie Lucas | I'm working at the moment at a client that's keen on patterns to design things, partly because they get a lot of ups-and-downs in the workload. Hence they end up with contractors coming and going, and hence would like to feel that there's some chance of these contractors co-operating while seperated by time. Which I think is an important thing to consider: while UML and a couple of other methodologies would solve the problem as well, patterns are a bit lighter-weight, and more overviewey for getting people up to speed on systems. If it's been written with patterns, someone who can talk patterns should have less trouble reading it. Other places I've worked asked lots of interview questions about patterns, but when it came to the actual work, their code tended not to use 'complicated' things like inheritence, templates, patterns, designs, specifications or any noticeable methodology at all. A lot of them talk the talk and then seem to have trouble walking anything as advanced as const-correctness. I don't think patterns have taken off, to be honest. Neither has proper C++ or generative programming. Lots of people USE the STL, but don't use that level of leverage in their own code. More and more I see two schools of developers: a class who are patiently working through things like patterns and generative, and a group who gave C++ a couple of years, but that bullet wasn't magic enough so they ran off and now are currently bailing from Java (because it's not magic enough) and betting C# will be magic enough to solve their problem. Not that patterns don't work in those languages, but there's a thought pattern in the industry that software development isn't hard because we're not thinking enough about it, but because we're using the wrong languages or tools or environments or something. It takes years and years of work and a lot of experience to become a good writer in English, and only some people can do it. And you have to learn the forms of doing it - the patterns if you like: stories have shapes to them, that have been learned over centuries. A lot of people in the software industry seem to be working to some sort of thought that you can bypass all of that: all that personal experience, personal talent AND using the gathered experience of others in other centuries isn't necessary. If they try German or French or Italian... surely in SOME language you can tell stories without needing all that... That's what I think patterns represent; the gathered and bundled experience of others in an accessible format. Too many people in the software industry don't feel they have anything to learn from anyone else's experience and so they don't need to pay attention to them.
Wed 13 Mar | Alan Hecht | I tend to agree with Richard Gabriel's explanation as to why patterns never took off. His view was that design patterns were viewed by some as merely a way to address deficiencies in programming languages.
Wed 13 Mar | american programmer | I recall reading an architecture book that claimed that pattern languages turned out to be a failure at helping create great buildings. I think the argument is to the effect that writing beautiful sentences doth not a great novel make. I think design patterns' success depends on where you stand. If you've programmed in Java for a week, you couldn't have missed it. It infects the API like a virus. In the Microsoft world Joel inhabits, it's probably a curious fad that passed with no real legacy. Politically, design patterns probably had no strong influence at Microsoft. Speaking of politics, has anyone ever read The Decline and Fall of the American Programmer? The design patterns crew followed the politics of building a capital-M Methodology to the very details. Many books were released; evangelists raised high. Methodologies, like programming languages, is big business, and the XP crew followed the well-known patterns in delivering it to the masses. Decline & Fall now predicts (IIRC) that the XP movement is soon in the declining stages. People are on to new things, and proponents need not be missionaries in the wilderness. That's not a bad thing, since it often means it's been accepted into standard parlance like OOP.
Wed 13 Mar | Banana Fred | I have been slowly reading Alexander's 'A Pattern Language' and it is vastly overhyped. There are some good ideas, but Alexander wanders a vague path between city planning and pop psychology. He is long-winded and high on himself. His 'quality without a name' is pompous and self-congratulatory. On the otherhand, I think the 'Gang of Four' design patterns book is invaluable!! The most useful contribution of design patterns is that they provide a new vocabulary, to help software developers communicate more easily. These days, everyone uses phrases like 'bridge', 'singleton', and 'factory'.
Wed 13 Mar | PeterM | Patterns never took off?? This seems to be practially a contradiction in itself. Design patterns give us a language to describe commonly used class groups/relationships/combinations in OO programming. The very existance of design patterns is because these patterns were already in common use, therefore the actual patterns had already 'taken off'. Look at any decent sized OO framework or library and you will see a number of design patterns at work. Many people use patterns without even knowing it, they certainly did before the standard design pattern terminology was invented! As a method of communication, it seems to me the language of design patterns is pretty well known for the most common patterns. If I say, 'this class is a singleton' then most people in the OO world will know what I mean, simpler than saying 'It is only possible to instantiate one object of this class'. Where patterns have not taken off is direct language support. None of the mainstream languages have constructs which directly support patterns ie. there is no 'singleton' keyword in Java for example. But given that the design pattern language has only been around for a few years, this isn't surprising. Peter
Wed 13 Mar | Adam | Two books that definietly should be on the list: Design Patters (Gof4) Refactroing (Martin FOwler) THese have been done to death. But they are essential reads for programming.
Wed 13 Mar | Timothy Falconer | I agree about both. I'd also add 'UML Distilled' by Fowler. UML combined with patterns combined with refactoring is a powerful, powerful thing. IMO, no one should call themselves a software architect these days without a solid foundation in all three.
Thu 14 Mar | Mike Gunderloy | One way to think of patterns is as a step in the continuing chain of abstractions that started when we began writing code in assembler instead of machine language. I've had more to say about this at http://www.mcpmag.com/newsletter/article.asp?EditorialsID=68 .
Thu 14 Mar | F.J. Weiland | If I understand correctly, patterns are, whether we recognize them as such or not. 'Taking off' or not isn't really the issue. Sort of like the tree in the forest making a noise if nobody's there to hear it? (Or my favorite -- 'if a man's alone in the forest without a woman and he says something, is the man still wrong?' Based on 18 years of happy marriage, I can say that the answer -- at least my wife's answer -- would be 'of course he's still wrong!') ;-) Anyway, it seems to me that the key issue is whether we can: 1) identify the patterns around us 2) identify their areas of applicability 3) identify, create, collect and package all the necessary supporting artifacts to enable us to take advantage of the patterns in real situations. By this I mean identify or create the list of specific, implementable and testable behaviors associated with the pattern, by context in which it applies, any artifacts required to persist our understanding of the pattern, and any tests we need to verify that any implementation of the pattern has been done successfully. Like I said, though, *If I understand this correctly*, which I may not.
Fri 15 Mar | skautsch | I no longer know if we're discussing whether 'patterns' are good (I'll weigh in on the 'yes' side) or whether they took off (I'm not sure they did), or *why* they did not. I loved the original Gamma et al book, and wish I had read it earlier so I would not have had to find some of these via the school of hard knocks. If they did *not* take off, it's because there are still too many shops where managers want to see one thing from developers: hands on the keyboard, banging out code. No thinking allowed, although there's heck to pay when the code breaks down. This is frequently the case in MIS shops where the managers are accustomed to running the mail room or something like that and have no idea how knowledge workers operate. Fortunately, I've worked in shops that had an open mind about productivity issues. Not coincidentally, these are frequently managed by people who *have* been knowledge workers.
Writing Specs in the middle of the life cycle | Mon 11 Mar | Ray
Functional Specs are very important part of the software life cycle, however, many people dont do it, including the company I work for. Because they never have any specs, I dont believe they should never have one. My question is : Would it make sense to begin producing the specs in the middle of the life cycle? How can it work ? while new functionalities and bug fixes are being done each week. Suspend everything for awhile?
Mon 11 Mar | Daniel Shchyokin | If you are planning to do more releases, Yes!!!!!! Worked with two products where this was not done (despite peoples suggestions) observations are: Testing is much easier if you know how a product should work. Maintenance is much easier if all the developers know how some of the more intricate API work. It does not have to be a full functional spec document all at once. consider starting with the more intricate API, The API that will be changed in the next release, and the more intricate parts of the UI
Tue 12 Mar | Roman Eremin | Yes. You definitely have to write specs. But for existing functionality I would not wite them as a document. I would write them as an automated functional test set. If you think this is impossible - you are wrong. We following this practice and it saves a lot of time.
Tue 12 Mar | Bob Crosley | I'd start writing specs for any new functionality. Then write test cases and such for the existing app. Been there, done that. It's not pretty, but it works and is better than not doing specs at all. Bob
Tue 12 Mar | Paul B. | 'Would it make sense to begin producing the specs in the middle of the life cycle?' Yes do so!!! You can have the current new functionality documented even after it has been just built. Then at least the testing group will know how a new feature is implemented instead of trying to guess what it does. 'How can it work ? while new functionalities and bug fixes are being done each week. Suspend everything for a while?' Well, you might need to revise the schedule to add time to create the functional spec. Any, new non-built functionality needs to be documented such that a user or a tester can determine what the impact of the change is. Everyone can critique the functionality, thus prividing a better final product. I would not do functional specs on already established /tested functionality, unless it is difficult to know how it should work. This can be captured from the already exixting manual (ye hope)...
Wed 13 Mar | James Wann | Hi Ray, I've been through this type of project before. All I can say is: 1. It's never too late to write specs 2. The specs will actually help you control the feature creep, and get a better handle-hold on the project. Your next step would be to institute a 'change control board' :-P 3. Don't forget - if this is a user product - to get lots of screen shots! 4. Have fun (read joel's stuff on specs) When you are working with specs, what you will have to do is incrementally introduce the specs to the project. So you are going to have to figure out a way to partition the project into visibly manageable sections. (btw, I know no specifics about your project, so I can be totally off here - especially if you're working on an embedded system or some esoteric back-end library). When you're done with each piece of the spec, it's time for some subversive software management. This is where you can get some software process into place. You should now sneak in the 'change request' system and break up the difference between 'feature creep' and 'bug fixing', since organizations often use one interchangeably with the other. Supposing that you can get this far, your project would likely be in much better shape. -j
Fri 15 Mar | andrew | While writing specs in the middle of a project is probably better than having none at all, I wouldn't think of them so much as 'specifications', rather they are 'justifications.' That's not all bad: the document can still act as a 'contract': you can get people to sign off on your written justifications and have something to refer back to when people start changing their minds or forget old decisions. When that happens, if it's all internal work, then you might just end up with pissed-off co-workers. If it's for clients, you'll end up eating time and money, since it's hard to convince clients that *your* memory of some decision four weeks ago is better than *their* memory of it. If new functions and fixes are happening constantly, you're probably running into communication problems--when did we add xyz? Two weeks ago? Will it work with my new function abc? It's not a bad first step to real specs if you start writing careful and complete test script documents. Testing without a plan is as dangerous as building without one.
Fri 15 Mar | andrew | Forgot to suggest in my last post: 'How can it work while new functionalities and bug fixes are being done each week? Suspend everything for a while?' If you're pulling programmers off coding work to write specs, you'll likely get hastily written and bad specs. The smartest thing you can do is to hire someone who's good at writing specs (and test scripts) and give them this task full-time. I promise you that the addition of a good spec writer will improve your schedule and budget planning, as well as your project quality.
When to retire... | Wed 06 Mar | James Ladd
Where I am working we have a product in C++/Win32. We are possibly moving to Java, for a lot of reasons. The argument that is coming up most is, what about the old version. 1. Who will support it ? 2. When will we migrate the users over to the new product ? 3. We dont want to add feature X to the old product and the new. 4. If we have two product teams, then what will the old team do when there is no support/ehancement requests ? Personally, I find some of these cencerns a mute point. Especially #4, because with one product, you still have the same problem of keeping developers busy. I am voting that we keep the old product and support and enhance it on a user pays basis and, that we develop a new product. I dont see the need to migrate the users of the old product to the new one, as they are happy with the old. I just see new users using the new product. Have any of you faced this same challenge ? What did you do about it ? Did you position win in the end and, how ?
Wed 13 Mar | Timothy Falconer | Hmm... here's a fantasy of mine. Imagine if all openly pro-Java and anti-Java folks spent an hour trying to disprove their respective positions. People saying Swing is slow & looks bad, go find an app that disproves this. People saying Java's good for cross-platform, find counter-examples. I've got experience on both sides of the fence. All I'll say is: don't believe a damned word anyone says, including me. 1. Find out for yourself 2. Don't form opinions too quickly 3. Stay open-minded & neutral Why people get so worked up over languages & architectures has always been a mystery to me. True professionals are always interested in the best tool for job. We should all *want* Java and .NET to get better and better, because it gives us more choice.
Fri 15 Mar | James Ladd | Hear hear Tim. Well said.
Pattern language | Wed 13 Mar | Tim Culver
Joel takes credit for independently discovering that Alexanders Pattern Language can be applied to system design: I bought it because Im interested in architecture. Then I noticed something: almost everything in the book can be applied to the work we do as software designers. I am skeptical.
Wed 13 Mar | Mark W | I can believe it. I also 'discovered' that book because of it's underlying philosphical ideology and my interest in architecture. I later learned that it was influential in the world of programming through a well read colleague. I also thought the book was largely padded and overly poetic. The author kept telling us that he had to perpare us for the message because we wouldn't be ready for it otherwise. I can only be told that so many times before I begin to hate the author. My review is on Amazon.com if you're interested.
Wed 13 Mar | forgotten gentleman | If you think about it, the measure of a good book is in how much you desire to apply it to the rest of your life. Plus, Joel doesn't use it in the sense of Design Patterns. His sense is more vague and user-oriented. You should take a look at all three pattern language books, if you haven't. It's more entertaining than Design Patterns. OT: Mark W, that must explain why I have a subconscious dislike of CJ Date, as well as enormous admiration. People have to stop telling us to be prepared for the journey. I have nine lives, I'm willing to starve once.
Wed 13 Mar | Mark W | Methinks your use of the term 'good' is too vague to use in argumentation. What about a good page turner that you read simply for pleasure? Or a good book that gives you insights, but doesn't make you 'desire to apply it to the rest of your life.' Or one that quietly influences without you being consciously aware of it. I enjoyed Roger Zelazny's Amber series, but don't desire to apply it to my life. Does that mean it's not a good book? You're right, it wasn't pattern language it was 'The Timeless Way of Building' that turned me off. Timeless Way is the first in the series, so I picked it up first. Pattern Language looked to be just a giant list of patterns, so I never read it because, well, it wasn't a narrative, it was a laundry list. A rather gigantic one at that. The result of 10 year's work, I believe. Perhaps the substance to match the fluff. OT: 'Unfortunately, nobody can be told what the Matrix is.' Uh, yeah right.
Wed 13 Mar | forgotten gentleman | I'll stand by what I said, even if it is offtopic. Any book can be 'good' if it has over 0 goodness. So a nice pageturner is probably .1 good. I have less lifespan after reading it, which definitely affects the rest of my life, but it was worth it. Some books I am really engrossed with, like Interview with the Vampire. While they may be merely pageturners, I am different after reading them. So I give them more goodness than other good books. Some books I assign complex units...
Wed 13 Mar | Dan Sickles | While the book has made the rounds in the design pattern community for some time, it is reasonable that many people independently made the connection. I haven't read the book - yet. I did make the connection bewteen musical talent and programming talent before I read about it elsewhere; as did most of my musician/programmer friends. Our pattern-recognition modules are very attuned to design patterns in all things.
Thu 14 Mar | Tim Culver | I guess I assumed it was common knowledge that Alexander spoke to system designers. After all, it was listed on the syllabus of a CS class at my school. This shows how quickly something can be promoted to 'classic' in our field!
Thu 14 Mar | Mark W | I agree, it is 'common knowledge' but how each of us acquires that common knowledge is a story in and of itself.
Teaching Lazyness | Tue 12 Mar | Bill Carlson
Hello all. I am the de-facto project manager for a .NET project were scheduled to start shortly. Our small team is divided roughly 50/50 between crusty old warhorses and young, energetic developers. The latter are a cause for some concern. I am having trouble imparting the lesson just because you can do something, doesnt mean its a good idea. The world is full of articles and techniques that are cutting-edge, but really serve to make simple concepts more complicated than they need to be. Im sure many here have run into the lets make everything a COM object, lets make all our classes STL generics camps. Our culture here is usually fairly hands-off. Developers get substantial leeway to make mistakes, but we maintain our own modules, so theres a healthy negative-feedback loop there. This will be a mammoth project, lasting at least three years in development, and its crucial to keep the underlying initial code clean and simple. Without being a beaurocrat and crushing creativity, how should I push this project in the proper direction? Anyone with anything to add, or who just wants to complain about similar coding attitudes, feel free to chime in. My name is Bill Carlson, and I am the CrustyCoder.
Tue 12 Mar | randy | Right off the bat, I have questions your project timeline of three years. More context would be appreciated here. As for your attitudes about leeway for developers, I think its a necessary evil. Strict enforcement of the use of certain design patterns, techniques, etc. can stifle the development process. On the other hand, there are some efficiencies to be gained. As long as all of the developers do their own design work for their components, and have a good understanding of the constraints of the project as a whole, it should work.
Tue 12 Mar | Michael Chernin | I have to run in a couple minutes, but two things strike me as inputs to solve this problem: * specification This mammoth project -- is the first phase spec-writing? Will the entire team be working on the spec, or just a subset which will set the tone for later development? * code reviews Are you planning on doing this? I suppose this is a specific case of quick feedback loops, like mentoring.
Tue 12 Mar | n/a | You need to set the tone of the approach. That is your job. Specs should take months on end. The rules, data model, prototypes, etc... The youngsters may never even done this, as they may never have worked on a complex project. On that topic, is there a commonly accepted methodology for app dev these days? You know,.... anaysis phase: cost/benefit research, project overview, scope.... design phase: prototypes, calculations, data model, etc constrction: testing: etc
Tue 12 Mar | Bill Carlson | Thanks to all who responded. Our market is vertical market accounting apps. This is a fairly slow moving market and we will be developing a product to handle project cost management for construction, billing, AR, AP, GL, etc. A 3 year development cycle is feasable for us. I agree with Randy, that leeway is important. That's always been my position and I've never been 'stifled' at this job or been the 'stifler'. The main skill our team needs to develop is 'cost-benefit analysis'. Unfortunately, this is usually hard for younger technical people. Often, they will see a new API come out with 25 classes and feel they need to use each one somehow. Our product will sell for a small amount of money (under $10K), so we can't absorb technical support or deployment issues incurred by using 'the kitchen sink'. This needs to be a technically simple, reliable, and boring product. Our clients neither need nor appreciate 'cool'. We can solve some of this through detailed specs and code reviews. That level of formality is somewhat foreign to our organization, but might be overdue. Our company has experience maintaing an existing product, but no experience (other than my own) undertaking a large new effort. Right now, I'm the technical guru here, but may need to expand my role to include mentoring (as Michael C. mentioned) and some project management. I don't want to bite off more than I can chew, being only 28. We have quality management, but they are somewhat naive to the development process. It scares them, which is a good start, I guess! Has anyone else had to get the younger guns to 'tone it down' with their code? Anyway, thanks for listening to my rant. Feedback is appreciated!
Tue 12 Mar | Ged Byrne | Just turning 30, I am just getting over my 'Young Gun' stage. The only way to get them over it is for them to get burnt - the negative feedback loop. The problem you have is that its 3 years to delivery, so you can't rely on them getting that useful experience. I think you need some smaller projects to 'break them in.' At the moment its like Christmas morning, and they want to play with their new toys. Let them get it out of their system and they will all be gathering dust by New Years Day. Perhaps you can create some minuture projects, creating support tools for development? Something with on a small scope so they can start to understand the whole cycle and the payoffs involved.
Tue 12 Mar | B | If the inexperienced hot shot programmer comes up to you and says you should use, for example, bleeding edge XML and Web Services (oops, isn't that what .NET is all about), and you think that good old proven technology will work just fine, your job is to convince him you're right. For example: - Discuss with him how specifically using XML and Web Services is going to improve (or not) readability, stability, performance, reduce line count and other agreed on values related to your requirements. - Ask him to provide a detailed estimate of development time and a risk analysis using this cutting-edge technology as opposed to using proven technology. Hopefully, you can convince him, using real arguments, that cutting edge may not be so hot after all.
Tue 12 Mar | Doug Withau | I manage a small group and have the same problems. New stuff is interesting, the same old is dull. You have to fight that at every turn. First, you said this was a new undertaking at your company. If you want to be successful, learn about project management. You may be the guru now, but plan on coding less and less and managing more. Second, I do not for a minute believe that you write a spec and turn the coders loose. Learn the Socratic method. Talk your people through the detailed design. You don’t have time to code it, but you should understand it. Ask “Why?” like a four year old. You employees should know there is no hand waving at the boss and he will leave you alone. Everything must be justified, every trade off explained, every interface understood. Never let a programmer put something in just because it is cool or new. If they can’t give you three reasons why it is good and three why it is bad, they don’t know enough to use it. If one of your programmers does add anything you have not discussed, make them remover it. Third, your part of this is to keep and communicate the big picture. The coders will have their heads down, typing away. You need to keep them informed. You must control what gets added for the greater good. One programmer who has had a class in blah cannot use blah because no one else will understand. This works because you work out the detailed design with the programmer. You get to be the overall architect, but code less. The programmers still have a major role in the design. Everyone is happy.
Tue 12 Mar | Steve Wheeler | B said: If the inexperienced hot shot programmer comes up to you and says you should use, for example, bleeding edge XML and Web Services (oops, isn't that what .NET is all about), and you think that good old proven technology will work just fine, your job is to convince him you're right. No, it's his job to convince you that he's right. As you say, there must be a cost/benefits/risk analysis done, but if I'm in charge, _they_ must convince _me_ that they know what they're talking about, and that their proposal is worthwhile, because _I'm_ the one who has to justify it further up the line. At my previous job, I saw a new-development project die that half the engineering department had been working on for three years. This was in the early 80's, and the company had split off the 'hot-shot/fast-track' managers for the project from the rest of engineering, then staffed the project with new college graduates because 'they know Unix already.' Some of these kids were hired in at half again the salaries of those of us with several years experience, and effectively none of them had ever delivered any significant project before. At my current job, we had a project go somewhat sour when an employee (no longer with us) decided that his MS degree was more significant than the cumulative decades of experience in the market that his supervisors had, therefore he didn't need to pay attention to what they wanted. When you have a development team split between experienced people and inexperienced people, the experienced people _must_ set the direction. The suggestion that Ged made about providing smaller 'tools'projects to let them get cutting-edge development out of their systems is a good one.
Tue 12 Mar | B | Steve - I think I meant to say that his job was to convince himself that he's wrong. Anyway - the whole convincing back and forth deal has more to do with having a healthy technical discussion about the choice of technology as opposed to telling him that 'this is how we'll do it because I'm more experienced than you - and besides, I'm your boss.' Doug - I loved your '3 reasons why it's bad' - will have to remember that!
Tue 12 Mar | Bill Carlson | Some great ideas here. I'm realizing that sales and marketing skills are vitally importing to project management. Not to the outside world, but to your own team. I went to SD-Live last year and attended some of the advanced C++ sessions. There were mainly sharp, experienced C++ developers in there basically to see 'something new' in C++. I found these topics facinating, but of little use. One of the things that works against all of us are the endless streams of articles on advanced COM techniques, esoteric design patterns, etc. These are out there, because people need something to talk about and the magazines need to write about interesting stuff. Usually no harm done, but when a developer (or worse, a manager) gets a hold of this stuff, it can be dangerous, because you're in the position of having to argue against an 'expert'. It's the whole 'Simplify your user interface with XSLT' syndrome. Anyone run into this?
Tue 12 Mar | James Montebello | From another crusty old coder... With a timeline like three years, I expect you'll end up doing one of two things: a) get a working framework up in a few weeks, and spend the next three years refining it b) debate, using paper and design tools for 2.75 years, then spend the last few weeks hacking together something that can be sold. In my experience, no software that was written by more than five people in more than six months was worth bothering with. There are doubtless a few exceptions to this, but I'd be willing to bet that every counter-example, once sufficiently examined, will show a working prototype was produced in the first six months by a small core of developers. Nothing is more useful than working code. Nothing will better showcase good design, or glaring errors. Nothing will do a better job of allowing experimentation with UI, or outside components, or tools. Any by the time those three years are over, many of those 'bleeding edge' technologies will either be well-entrenched or moribund, so there's little point in worrying about that with such a timeline. Make the damn thing work, then make it work better, then make it better still.
Tue 12 Mar | Adam | Focus on Interface designing. Whether that interface turns out to be a C header file or a COM interface depends on the subsystem, calling system etc. There is nothing wrong with specifying eveyrhting in an IDL fo MS programming, even if you decide that you don't want to create COM compnenets for them. At least It keeps you interface deinition in a single place. Of Course with .NET, you may end up focusing moreon the XML DTDs used to describe the interface between two web services, but the net effect is the same. Use the nergy of the Young Bucks to your advantage. If you are doning a .NET project, no one understands C# yet. Let someone that doesn't have lots of valuable C++ etc experince go and learn the new language. I also recommend pair programming. Pair a Crufty geezer with a wet behind the ears young buck and you will be surprised...they both will learn something.
Tue 12 Mar | Bella | > we will be developing a product to handle project cost management for construction, billing, AR, AP, GL, Are you reinventing the wheel? Don't apps like Lawson, SAP, Peoplesoft do these. (And probably 100x better and more robust than whatever you'll implement, since it's their speciailty, and have done a dozen iterations and fine tuning)
Tue 12 Mar | Ori Berger | I find it somewhat disturbing that a 3 year project is based on technology which is (in part) publicly available in beta form for less than a year, and (in part) not yet available at all. Despite common belief, not everything that Microsoft does is automatically successful (Anyone remember how Liquid Motion killed Flash? No? It didn't? But it was SUPPOSED to). .NET may turn out an entirely different beast than what you're thinking of now. In your place, I'd make sure that I'm not dependent on how well .net does in the market, or whatever path it takes. A necessary condition for a predictable and controllable development process is maturity of the tools and the team's acquaintance with their working tools. I've seen too many projects delayed because of bleeding-edge tools to trust anything without 2-3 years of SOLID market experience behind it.
Wed 13 Mar | Timothy Falconer | Yes, I agree completely. I'd never base a project of this scope on such a young architecture. You're just asking for trouble, particularly with young programmers on board. Two years of your three will be spent trawling MSDN, doing Microsoft's work for them. Ask yourself this: would you rather read easy answers on USENET or pull your hair out on a weekly basis, not believing that you're the first to each issue as they arrive. Gotta love early adopters. Somebody's gotta do it :)
Wed 13 Mar | DB | Magpie programmers ('Oooooh - shiny thing!') have been a serious problem where I work. We had one contractor here who has caused a fantastic amount of damage, and nobody in management believes or realises it yet. When I demonstrated one of his shiny COM objects was talking 45 minutes to carry out a task that took less than a second in boring old Delphi code, I got blasted with a rant about my inexperience in multi tier development etc. etc. When I showed him how to improve the performance to near the levels of the old code, he told me off for 'hacking' his code. It got to the point where I actually had to refuse to work with him to get management to take any notice of what was happening. His contract wasn't extended. But it did a lot of damage to the working relationship with the other contractors (his buddies) plus some of his code is still in use despite a huge number of flaws (because the others still think it is cool). We have a simple suite of client-server apps that now have XML, XSLT, COM, MTS and other acronyms thrown into the mix. Deployment is trickier. Bugs are harder to track down. Maintenance is far more difficult. Debugging is harder. Where we once had simple function calls that wouldn't compile if you got a parameter wrong, we now have XML everywhere and you can compile any old rubbish because every function just takes an XML fragment (and therefore checking for validity is only possible at runtime). It's utter madness. I could go on and on, believe me. Just one of many reasons why I've been trying to find somewhere better than this!
Wed 13 Mar | Christopher Wells | > We had one contractor ... A contractor's motives aren't exactly the same as yours, e.g. magpie experience ehances their resume for their next contract. For that and other reasons I'd be wary of letting a contractor make unsupervised architectural decisions.
Wed 13 Mar | Doug Withau | This discussion struck a chord with me. I wish I had asked a similar questions when I faced my first big project. People have been talking about NET being too new, what is the right tools and so on. I don’t feel the technology matters all that much. How you manage the development environment is what really matters. I strongly believe that developers should not have root or admin access on their workstation. If a programmer finds a neat widget on the web, they should not be able to download and try it out. That sounds harsh, but when a workstation just crashes, nobody knows why, you’ll thank me. This includes the latest service pack. Pick the tools you will use carefully, and then stick to them. Make the install close to the same for everyone. The ideal situation is when one developer has a tool problem; everyone should have the same problem. Take the Joel Test. Setup source control, backups, and all that. Take control of these things and be sure it is done and done right. James made a good point as well. Look carefully at why you have a three-year time frame. The project is in the preliminary stage, everyone is excited, the sky is the limit, no body is asking how much money is gone and how much will be spent to finish. The whole project is new and shiny. Everyone wants to touch it. Think about life in a year, maybe two. You’re bogged in details of design, bugs, one developer is off in the weeds and has broken a major interface, the boss wants weekly status reports, and you would like to go home before 8:00 PM today. The shine has worn off. Two developers have left and the new guy has the great new idea he is evangelizing to the group. I am trying to scare the hell out of you. A healthy dose of fear brings out common sense. Here is my list of four pieces of advice to remember from this little rant: Take the initiative and take control of what affects the project. Keep the big picture in your head. If you can’t, you are not in control. Talk to the people doing the work, do some if you can. You should know the state of every developer in your care. Always think ahead to the next step. What is the least amount of work with the greatest benefit? How will this bite me in the ass next week? Next month? “I went to the University of life, school of hard knocks, and kindergarten of having the shit kicked out of me” – Black Adder
Wed 13 Mar | american programmer | I'm not very experienced; I've had about 3 years under my belt. But I've been able to stay away from this whole magpie problem by programming with pen and paper. Things like XML only confuse the issue. I mean, SQL is also brain-dead, but at least it's not far removed from relational databases. Maybe this can help somehow. The most effective thing I've seen to curb magpie development is having severe size/performance constraints. Then the interesting things become algorithms and data structures. No one uses dumb libraries when all of them are carefully watched. Having these constraints should satisfy the need to have craftsmanship in software dev. I think targetting .NET can actually be a boon. It's a hostile platform, for being so new. Speed is no doubt atrocious, documentation probably isn't up to Java's standards, and the defects are staggering. That'll keep them from their most magpieish fantasies.
Wed 13 Mar | a. programmer | Doug Withau, I'd quit in a heartbeat if I have no control over my dev machine. I have a mind of my own, you know. If you made sure that everyone had a play machine, maybe I wouldn't mind being treated with this disrespect. I believe you're overcompensating for not having had control over the people in your project. Probably they were assigned to you. But you can trust smart people to get the hint. The nice thing about open source projects is that you don't have to accept code from people you don't trust, and you get to select who has CVS access...
Wed 13 Mar | Philippe Back | Get some VMWare copies and have them run either on your machine or on a shared server. This way you can have all kinds of environments you want. If I had used this in one of the previous projects I ran, I would have finished the job much quicker (and would have a copy of the *complete* environment on CD to bring it up in minutes).
Wed 13 Mar | James Montebello | Developers should, indeed, have total control over their own environment (i.e., the box on their desk). However, there also needs to be a 'clean' (or 'cleanable') test environment, which the developers can't muck with arbitrarily. Developers should also be strongly encouraged to play with shiny new things. However, introducing new things into a revenue-generating product needs to be dealt with cautiously. There's a strong distinction there. Any development effort that doesn't have a reliable, repeatable testing environment is following the time-honoured tradition of having their user base be their testing environment.
Thu 14 Mar | Vincent Marquez | I have a few things to say on some of the topics that were brought up: I'm definatly a 'young programmer', but i'm not always jumping on the newest buzzword, not all of us are like that ;-). I like to stick with my perl and vb. Recently I decided i'd pick up a language with a little more power and flexibility, and I decided to try out C#. Despite microsoft not having the entire .NET architecture fully functioning, C# seems like a really useful tool for certain things. Within a week I was bustin out apps that should have taken me 3 times as long to do, and they ran much faster then I expected (MUCH faster then java). Also, 3 years??? I don't have too much experience under my belt, but I've been part of a team (usually a couple (2-4) young guys like myself and one experienced coder/project manager) that have come out with HUGE apps in less than 3 months. I understand that sometimes there are really large projects that are very complex, but--in three years .NET might be old news ;-).
What makes you a programmer - part 2 | Tue 12 Mar | Tim Boucher
Yeah, so I got lots of awesome feedback on my original question yesterday, so I wanted to clarify on it, and see what else people had to say. I wasnt really asking about pointers at all really, even though people had some interesting stuff to say about it. I just thought it was an interesting example, because i havent ever heard anybody else try to pinpoint exactly and specifically what separates some people from being able to program. Any thoughts on that? My company finds people from underemployed communities or who have had trouble getting jobs, and basically trains them from scratch (for free) and places them in low level programming jobs. Ive gotten my part fo the curriculum in place, where I basically teach them XML (without telling them) on the first day, and from there, I see who can understand and use complex data structures in their head and who cant. Im trying to figure out some conceptual bridge between this and fundamental programming logic though, and I feel like im overlooking some key element about what makes a programmer. I feel like there must be something beyond problem solving, desire, and IQ tests that I can concretely identify and use to see who can and cant make it as a programmer. What do you guys think?
Tue 12 Mar | razib khan | The three things you named seem to what you need to check. They need to be smart (IQ), motivated (desire) and quick on their feet mentally (problem solving).
Tue 12 Mar | mackinac | You're not likely to find what you're looking for. Life is complex; people are complex. Finding one key factor that will determine success or failure at being a programmer is not going to happen. Looking at your web site I get some idea of why you want to find that key factor. Made to order employees, guaranteed. An interesting concept. Sort of like buying a car, just specify the options, take it home and park it in a cubicle.
Wed 13 Mar | Tim Boucher | yeah i mean, pretty much. its not my idea, you know. i just am one of the ones who has to make it happen. im not saying its a GREAT idea. but i do think its worth investigating from an intellectual standpoint, or else i wouldnt be involved in it at all.
Wed 13 Mar | Mark W | I would think a logical/mathematical mind. While I know plenty of non-logical people in the business, they seem to stumble through rather than get it. Perhaps you can teach basic logical ideas on the first day and see who gets it: If P is true then Q will also be true P is true Therefore Q is true P is not true Therefore ?
Wed 13 Mar | Mark W | The posts on the original thread seemed to be of two basic flavors: People need to understand abstract mathematical ideas. People need to have the 'Emotional Intelligence' to persevere when they come upon a problem that they don't immediately know the solution to. I don't know that 'flow' is necessarily a component of it, I'll put a band together because I know we can reach the point of one day being in 'flow' but I can't expect it in the beginning. More important is the tenacity to stick to it and work hard *when it doesn't flow*. Then the flow will come. Perhaps Joel should add Daniel Goleman's book to his list of required reading 'If you want to be a programmer.' It's a nice overview of the current theories on 'how the brain works.'
Wed 13 Mar | Tim Boucher | shoot! ive never heard of that book. thanks a zillion. ill check it out.
Wed 13 Mar | Tim Boucher | hey, is that the title and author of that book? i looked up both and didnt find either. would you be so kind as to post a link to it for me? thanks a bunch.
Wed 13 Mar | Mark W | Errrr. This may have been poor communication on my part. I put one thought into two paragraphs and two paragraphs into one thought. Here are my two thoughts: ONE Emotional Intelligence: Why it matters more than IQ by Daniel Goleman It's got nothing to do with programming, but a little to do with everything. TWO Perhaps Joel should add it to his list in the 'If you want to be a programmer' section. Sorry for the confusion, I knew what I was saying was awkward, but I didn't realize it was *that* awkward.
Thu 14 Mar | Andrzej Kocon | The so-called emotional intelligence is what helps if you don't want to become an ethernal programmer.
Thu 14 Mar | Tim Boucher | cool, well ill check that book out then. thanks a lot.
Languages to learn? | Thu 07 Mar | razib khan
I know this topic has been done before. But I want to go over it again. How languages should someone learn? Im asking because of this reason. I work mostly in Perl and Java. I dabble/do a little work in others such as VBA, Python, PHP and C. I still feel I havent totally mastered Perl or Java-but sometimes I wonder if Im limiting myself by doing all my work (90%+) in these two languages. For the job market right now-you have to have a lot of skills because of the loose labor market. How many languages do you think its good to be highly proficient at vs. familiar with??? One thing Ive though of course-its a lot different switching from Perl to PHP than Perl to Python or VB. So obviously the difference and complexity of the language matters (I gave up trying to work in Lisp too much because it seemed kind impractical at this point).
Mon 11 Mar | Jutta Jordans | > All your C code can be complied thru your C++ complier. This is not really true any longer, the new C Standard (99) has some new features in it which are currently not supported by C++, even though the C++ Standard might adopt them soon. Of course, many C compilers are older than the standard and will not support the new features anyway, but if your C code is really up to date, it will not be compatible to an up to date C++ compiler. Also, whatever you do, do not try to learn C and C++ at the same time or even C first to learn C++ later. This will probably lead to very ugly C/C++ mix code. Both languages have their own concepts and if you mix them, it gets pretty confusing. Stay away from those 'Become a C/C++ programmer' books, because you do not want to become one :-) Have fun,
Mon 11 Mar | Patrik | Excuse the off-topic-ness; >HAHA, yea, but it's DATABASE dependent. And that's 100x >worse! Are you for real?? Yes. It is database dependant. You may call it 100x worse than platform dependance. I really dont care. The DB apps I have come across that supports multiple DBs always suffer from the least common denominator problems. Run this on Oralce, MS SQL Server, MySQL and what have you, and you will get a solution that barely runs on any one of the DBs. So database dependency is really not a big problem, imho. >The guy wanted to get a job. Part of saying NOT to >bother with C++ is that he *probably* won't get himself a >job doing it. I didnt say 'Dont bother with C++', reread my post. I said C++ is OK for client development. I also said I have not used it extensively, simply because there was no need.
Mon 11 Mar | Petr Prikryl | Just to add my opinion... ;-) Any good application should do what it is expected to do. It should not be more complex than neccessary, nor less complex (i.e. limiting the user). The end user is always the target. The view of what is complex or not may differ a lot. Users like when the application runs fast. Your software-house boss thinks that you should be able to deliver (i.e. to develop) the wanted application fast. The person responsible for maintenance of such application (if it is going to survive for longer time) wants the design to be as clean as possible. Someone else may wish something else. What of the views are more important than the others? Technically speaking, writing a program means transformation of your ideas into some very formal prescription what actions must be done in some situations. Writing the application, you are transforming your mental picture of what should be done into a working application. In other words, you should design the application using the abstractions that are easily available in your programming language, or you should choose the programming language that offers the abstractions that you need. If your mental picture of the being solved problem is not clear enough, you may prefer languages or tools that support building of prototypes. Apparently, the languages that are specialized for some area (i.e. easy to use in that area) are usually not so good in other areas. The languages that are good for almost everything are usually complex and more difficult to learn. The languages that are easy to learn usually hide the complexity of some aspects and they are not so good for programming in large. Try to point out applications that you think you should be able to write and then ask what was the programming language they are written in. Finally, (my personal opinion). Use whatever for rarely used or very specialized or simple applications. Learn C++ if you plan to write something more complex one day. P.S. Google for Bruce Eckel's 'Thinking in C++' on-line book. Read the http://www.sgi.com/tech/stl/drdobbs-interview.html 'Al Stevens Interviews Alex Stepanov'.
Thu 14 Mar | Karl T | Hi Folks. Here is the unofficial score thus far (every mention of a coding modality gets one point): Perl 9 Java 25 VBA 1 Python 7 PHP 2 C 54 C++ 68 VB 11 Lisp 5 SQL 11 ATL 2 Assembler 3 prolog 5 C# 5 Smalltalk 2 ML 1 Delphi 1 PL/SQL 4 Postscript 1 My Comment: Participants tend towards procedural rather than functional programming techniques (Lisp is the only functional language I recognize here) and there is a tendency to be stand-offish about admitting Microsoft VB into the pantheon (only 12 votes?). Perhaps that is related to C envy - I don't know. My additions: XSLT - a quasi-functional programming language that is indispensable for elegant handling of XML; and ECMAScript, equally indispensable for talking to your client's browser. There, now we can add: XSLT 1 ECMAScript 1
Why are you writing code? | Thu 21 Feb | Doug Withau
Some fellow developers and I were discussing Norrick’s post. http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=3790&ixReplies=37 There was a similar post on slashdot today: http://slashdot.org/askslashdot/02/02/20/2343218.shtml?tid=98 We know there are some death march, dark ages companies out there. Bad practices, poor quality and unenlightened management are easier to find than goodness and light. Even the worst companies hire someone. If you have a good enough reason, you’ll put up with a lot of shit. There must be a rewards to this job other than the paycheck. I am asking a simple question. What is your “why”? Why do you get up every morning and go back to the project you stayed up late working on last night? Why work on open source after working on code all day? Is it creativity, the zone, H1B status, what? There have to be some pretty good reasons. I have mine, I want to know what others think. P.S. If you say money, I don’t believe you. There are easier ways to make more money than software, even with stock options.
Tue 12 Mar | Malachi Brown | Simple. Experienced people cost more money. It is easy to show a cost savings by replacing and old, experienced resource with a young, cheap one. Hurts in the long run.
Wed 13 Mar | Dan Sickles | 'The reason is that I am a creative person in a literal sense. I have a need to create. But I am far from an artist. ' Bob..whether you can write code at guru level or hobbyist level, art has nothing to do with it. I build software for a living and make music for enjoyment. I am not an artisit. Neither is anyone else. I don't know what art is. Neither does anyone else. That's because art doesn't exist. It's an amorphous meme that thrives on perceived exclusivity. If you remove art from your vocabulary and thoughts, you will forever be free from it's grip. Guru coders are guru coders. Prodiguosly talented musicians are prodigously talented musicians. Great painting or sculpture is just that. It only has to be art for the minority who feels a need to exclude the majority. Sorry for the off-topic rant. I write code because I have to. My only other choice is music, and I don't like the odds or the culture of the entertainment industry..
Thu 14 Mar | Bella | Next to successful gambling, coding is the best guaranteed money I've ever seen. Zero risk. Show up, and get paid a damn good amount. I love it...Glad I found it. Glad I exploited it. Glad I got real good at it? Maybe. Glad I didn't get dependent on the money? Yes. YES!
Functional specification examples | Mon 11 Mar | Rikard Linde
Reading Painless Functional Specifications http://www.joelonsoftware.com/articles/fog0000000036.html makes me curious. What does a real specification look like? How many details does it present? Ive tried to search for specifications but always end up with W3C specs and APIs and stuff. Anyone know of good examples that can be found online?
Mon 11 Mar | Banana Fred | W3C specs definitely do NOT count as 'painless' specifications.. <:-)
Tue 12 Mar | Gerry Shaw | Not quite the same as Joel's standards but still a non-nonsense approach and a complete real-world example. http://www.ravenbrook.com/project/p4dti/req/
Tue 12 Mar | B | No, the perforce requirements specification is a requirements specification, not a functional specification. I wonder why Joel doesn't talk much about requirements documents. Requirements describe the problems that the system must solve. At a glance, I think the perforce requirements look good. For example, I noticed a sentence beginning with 'It must be easy to [do this or that with the application]' This is the essence of a requirement - WHAT we need but not HOW it's done. Sometimes, you'll say how - e.g. if your system must interface with another system in a particular way. A functional specification is a different document. Based on the requirements, it details the design of the system. Like, what screens will we have, what will they look like, how do you perform the tasks outlined in the requirements document. A main point of this document is to keep it on a technical level where the customer understands it, yet detailed enough to minimize ambiguity. It should completely describe all features, and also specify when happens when important things go wrong.
Tue 12 Mar | Adam | I worked at a company that wanted to be Anderson COnsulting in the Worst way (Before they became accenture). This company had a very detailed process for specifications that seemed to work well. Step one was a meeting where we brainstormed and got together requirements as much as possible. This lead to the Application development plan. The ADP specified originally just Page flows, but by the time I left there it went down to the grey screen level. We definied Greyscreens as HTML mochup (usually donw in something like Visio) That Had the Functional HTML elements described (edit boxes, links, images) Once we got this signed off, we started working with the graphics design firm and the coders went to work getting the detailed design document written. Personally, I think we could have started coding a little sooner. The DDD was overkill. A great tool from the UML is use case analysis. Identifying the users of your system and the ways they are going to use it is probably the key element of a functional design spec. I subscribe to the XP model in this regard: Keep a release as small as possible to still provide value. Release early and often.
Tue 12 Mar | Adam | THis might help : http://www.mojofat.com/tutorial/
Wed 13 Mar | Rikard Linde | Thanks all for your valuable comments. I'll be writing a requirements spec the next month and will put it online for peer review and copying:-)
What makes you a programmer | Mon 11 Mar | Tim Boucher
In http://www.joelonsoftware.com/articles/fog0000000006.html , Joel talks about his computer science class, where suddenly almost everybody dropped out when they started talking about pointers. For some reason, some people just do not seem to be able to write code with pointers in it. They were born without the part of the brain that does indirection, I guess. So, I work as an instructor for a web-training company, and wanted to know if anybody else knows what hes getting at here. Its something I see a lot. We get students who are really smart and organized, and then all of a sudden, something mysteriously doesnt connect for them, and they are unable to advance in our program. What do you think programmers have in their brains that regular people dont have or cant access?
Mon 11 Mar | Darren Collins | I think good programmers are able to suspend belief and/or judgement temporarily. They might not 'get' pointers at first, but they're willing to play along, listen to the instructor, see what he's using them for, and then revisit the original concept with a bit more context. Pointers are not hard to understand, but I think most people are scared and intimidated when they're first introduced. It's usually the first abstract concept they come across in a programming course, and there isn't always a clear need for them presented. Their brain just shuts down and they can't get beyond that point.
Mon 11 Mar | wyoming johnson | Good question. I've found that even the simplest tasks are beyond me, however I consider myself to be an above average programmer. For example, my girlfriend has to sort our clothes on laundry day because I find the seven different classifications of clothing to be too difficult to remember, but I am able to hand write JNI header files from memory. Go figure.
Mon 11 Mar | mackinac | I can think of a couple of possibilities. It may be that most people have trouble with logical abstractions. I recall from various math classes that even fairly advanced students would get confused on the idea of 'necessary and sufficient' in doing proofs. Another possibility, which I consider more likely, is the size of the conceptual increment. Anyone who has had algebra has learned the concept of a named variable having a value. There is some initial confusion learning that x = 0 is an assignment, not an equation. But it's not a big jump. Now say you tell your students about pointers: int *px = &x; Now they not only need the concept that x has some value, but they need computer architecture and the idea that x exists somewhere in the machine. Whether that is easy or hard would depend on how much the student learned in computer architecture class or whether they even took it. When I went from programming in FORTRAN to C it was an easy step because I also programmed assembler and had a reasonable idea about computer architecture. Making the transition from C to C++ was a bigger step and I had to spend a bit of time studying the concept of object oriented programming before getting it.
Mon 11 Mar | Mike Swieton | The difference is how they respond when intimidated. The great programmers keep at it. They are willing to kick at a problem for 14 hours a day, go to sleep, and come back the next day. They see pointers and go 'wtf? lemme read some more!' (and then do so). Then you get the people you talk about: 'It hurts to think about so many asterisks....!?'. Needless to say, it's obvious that they don't get stuff. An example: in many CS classes, you ask one person how to do X, and he'll talk through it out loud. That's the programmer. The other person you may ask, says 'I have no idea whatsoever'. Except, that's not so: he has an idea, almost always: Maybe you need a loop? Well there's half your code, you sure know a lot for 'no idea'! The difference is that programmers don't give up. We're a stubborn breed of bastards that will consult a book or the web when we don't know. Or write what we DO know and work off of that. The gurus don't magically know more: they just never give up when they DON'T know something. That's the difference.
Mon 11 Mar | Peter WA Wood | I think that one of the necessary qualities to be a good programmer is to be ability to think through an idea in a specific mental context and to be able to freely switch contexts. Take pointers for instance. I suspect that one of the reasons that many people have initial problems coming to grips with pointers is that they first encounter the concept within the context of the solution to an programming problem. For example, they are thinking about how to swap characters in a string - there mind being full of which position to swop with which. In this context, it is hard to make sense of pointers. However, once you start thinking in the context of how a computer works, ie a cpu and addressable memory, and remember (or learn) that a variable is just an address to a piece of memory, it is much easier to understand pointers. A (gross over) simplification of the mental process involved in writing a program is : Grasp an idea in the context of the problem Switch context to that of the solution Translate the idea to the terms of the solution Switch back to the problem context Check the problem is properly solved I think that the ability to switch mental contexts whilst holding an idea is needed by a programmer.
Mon 11 Mar | razib khan | On pointers-I'm self-taught-and the general concept of pointers weren't that difficult, it was implementation in code that generally stumped for a while. One thing people have to remember is that modern humans have been around for 40,000-100,000 years. We have a suite of features-but they're mostly evolved in the context of being hunter-gatherers. We've retrofitted a lot of our capabilities to our modern lifestyle-but sometimes the fit isn't so good. Think of things we take for granted. Literacy is a strange development. Humans are verbal animals. For most of history no one was literate, and then for some of it, a small minority were literate. Today-we simply take literacy for granted and assume that everyone should have a 'basic' level. And yet-we all know some people are better at reading & writing than others. Some people never get beyond a basic stage of literacy-and yet things people are great things like fixing a car or what not. They aren't dunces-they make do. But we see them as somewhat sad because they're mental capabilities are percieved as not be up to snuff. But the fact is a lot of the higher-level abstract thinking we humans do today is pretty strange. Think of 'civilizations' that never implemented the wheel or the use of zero. Think of the disciplines people find 'easy' and the ones they find 'hard.' Many people enjoy reading and learning about history (the less academic forms) because it's not that different than storytelling-narratives are part and parcel of humanity. On the other hand, very few people are into reading long texts on mathematical proofs. I took math up to matrix algebra in college. I recieved A's in Calculus & Differential Equations. B's & A's in the multivariate calculus courses. And squeaked by the last term of Matrix Algebra with a C+. I obviously reached some sort of natural limit. Others hit the 'ceiling' in calculus, and I actually know a guy that went to grad school in Math and couldn't pass his comps-he hit is ceiling in the 2nd year seminars. As far as specifically programmers-I think it's persistance. Computers are pretty logical-we're jsut too stupid to see it for the rational machine it is :) And compared to chemistry experiments, the error messages that computers give back are very transparent....
Tue 12 Mar | Ged Byrne | I think Mike hits the nail on the head with the stubbornness problem. How do marathon runners become marathon runners? By getting up as 6am and running a few miles before work month in and month out. Same with programmers. The brain is a muscle that needs to be exercised. That said, there will always be superstar programmers the same way there are top atheletes. What makes them a breed apart I don't know.
Tue 12 Mar | Nick | I don't think that persistence alone sums it up very well. I know plenty of persistent people who I'm absolutely positive could never understand programming. On the same note, I know plenty of very smart people who are capable of advanced abstract thoughts. Many of them wouldn't be good programmers either. The thing that often differentiates programming is that the programmer needs to be capable of seeing both the trees and the forest. The trees, of course, represent the details that are required to create the classes, the methods, the forms, etc, and the forest represents the vision to understand how all the pieces should fit together. These are two different skills - detailed and abstract thinking. Back to the original post, though, about why some smart and organized students hit a wall and don't progress. I've hit walls several times in classes I've taken, and it's usually for 3 reasons - over confidence, cumulative mental overload, and anxiety. Over confidence can especially happen in courses where the subject is easy. Even worse - in classes where the first half is easy and the second is more difficult. When you get something, it's very difficult to force yourself to sit down and memorize it. You might read Chapter 1: Got it! Next. Chapter 2: Piece of cake. Next. Chapter 3: Right-o. Next. On so on until Chapter 7: Oops! I needed to not only 'get' Chapters 1-6, but I also needed to remember them. They all seemed so clear in my head at the time, but it’s all so fuzzy now. Wish I hadn’t glossed over that homework. Cumulative mental overload is similar. At some point in the course work, you're learning so much, so fast that it's hard to keep it straight in your head. One day it's clear, the next day it's spaghetti. In high school, we learned many things by rote. For example, in high school I took the AP calculus - taking a full year to cover the equivalent of the 1st two terms in college, and the teacher would assign dozens of problems per chapter. Taking the 3rd term as a college freshman, the professor would assign a fraction of what the high school teacher assigned. So the value of learning by rote gets set aside by the constraints of accelerated schedules and class sizes. It gets you past just understanding the concepts – you own them. In the case of pointers, the concepts aren't that difficult, but when you cover pointers, arrays, pointer arrays, pointers to pointers, pointers to functions, etc. all in one chapter, there’s suddenly a lot to digest. Usually the best way to dealt with this is to learn by rote - sit down and write simple sample scripts until it’s drilled into their heads. Good programmers take the time to write sample code as they're learning. The last on my list is anxiety. In this case, you’ve just covered pointers, arrays, pointer arrays, pointers to pointers, pointers to functions, etc. And, the assignment is due tomorrow. And, there’s a quiz this Friday. No time to sit down and write sample scripts. I’ve got to dive into this assignment. This book sucks – what does he mean ‘it can obviously be shown that …’ – that’s not obvious at all! Pompous PhD bastard! What’s this ‘const’ sh*t? Why do they pass a reference here but a pointer there? I’ll show you where you can stick that pointer, pal. Ah, screw it! I’m switching my major to Speech and going into Sales! So, now you know not only why students hit a wall, but also why Sales keeps quoting ridiculous lead times. Revenge.
Tue 12 Mar | Jutta Jordans | Well, this intelligence thing surely helps. I mean this funny set of abilities you can measure with an IQ test. I really do not think, intelligence is as important in everyday life as some people want to make us think (in Germany we have a big IQ hype at the moment), but with programming it is essential. This does not mean everyone who is smart will be a good programmer (or a programmer at all), but I don't think you will find good programmers without an above average IQ. What else? Stubborness and eagerness to learn were pointed out already. I agree that they are really important. Another thing I saw in fellow students a lot which would drop out of CS was reluctancy to just try things out. Ok, I agree, there might be people out there, who can grasp all the concepts involved in programming just by reading about it or taking lectures or whatever. I would never have learned to programm that way! It was as if those kids were afraid to type anything into their editor and compile it if they were not absolutely sure that it would work. Every compiler error was like failing a test for them, I think. I sometimes tutor beginning students in CS who have trouble with programming and sometimes I would like to make them write a sentence on the blackboard over and over again (you know, Bart Simpson like), something like: I shall not be embarrassed in front of my compiler. I think you have to be eager to learn by experience (spelling b-y m-i-s-t-a-k-e) to become a programmer. At least that is true for myself. My apologies to all the geniuses out there who are able to do everything right the first time. Creativity is very helpful too. I could come up with my favourite LEGO bricks theorem again. Children playing a lot with LEGO will make great programmers in the future :-) And most programmers are very talented LEGO engineers. Many programmers I know like to play (PC-games, board games, RPGs, whatever). Maybe good players make also good programmers or vice versa. Have fun,
Tue 12 Mar | Ged Byrne | I can back up the Lego theory. I loved the stuff as a kid, and the appeal of programming is very similar to the appeal of Lego. My kid is just getting old enough to play with Lego, but he gets annoyed with me because I get to selfish with it.
Tue 12 Mar | Richard Jenkins | In other jobs, I've noticed that there are people who don't grasp certain concepts. Analogous to pointers and recursion. I've been programming too long to remember examples, but I had the distinct memory that there were people you didn't trust with certain tasks and had to add that to your workload. Ever know people who didn't understand certain truths about relationships? Do some people have problems with garbage-collection in daily life, leading to overflow problems? I don't think programming is special. Especially since corporate programming has to do with communication. It's just that it can be intimidating; most people don't have parents and generations in the programming biz. Eventually, these concepts should filter into our group consciousness.
Tue 12 Mar | Christopher Wells | > What do you think programmers have in their brains that regular people dont have or cant access? Some linguistic ability, for example being able to distinguish the *word* 'dog' for a real-life actual dog (a.k.a. maths). Mostly it's practice IMO, 10s of 1000s of hours of practice. To practice that much, emotions have to be in gear with what you're doing. Chapter 6 of the book _Emotional Intelligence_ which I'm studying describes prerequisites for 'flow': you must be neither too anxious, nor too bored; mildly challenging is about optimum, step by step, acquires each technique. But later integrating the knowledge, having the right detail coming to mind at the right time: partly that's a result of having an actual problem that you're trying to solve, and partly it's just magic, what the brain does, intuition ... but again, intuition comes more easily in a certain circumstance or brain state.
Tue 12 Mar | Jeff Darcy | I think the primary distinguishing trait for all engineers, including programmers, is a basic drive to improve or create things through the application of one's mental abilities. The largest part of this is a continual quest to find, understand and invent tools (including processes). There's another element of uncovering and exploring cause-effect chains, there's a third element of reductionism ('divide and conquer') but it all comes down to a belief that invention and problem-solving can create a better world. This might seem to many here like a basic *human* trait, but it's not so. Many people have no desire to create or improve anything but their own situation in what they perceive as a zero-sum game. Others believe that improvement comes about through some means other than problem-solving or inventive forms of thought (e.g. philosophy or spirituality). Many scientists, even, believe that improvement is a matter of understanding rather than building. It's only among engineers and programmers that this belief in the power and importance of building things (or improving things that have already been built) seems to be universal.
Wed 13 Mar | Masterlode | Might consider the way in which pointers are explained. Nobody I knew in any computer class I ever took understood until it was explained that like on a hard drive, the files you see are not physically there, they are just being given a representation for the computer user/hard drive to manipulate. And a pointer is like that. No book or teacher ever said it in those terms or attempted too. That was just how I tutored the students. It seemed to work as long as a student could grasp the idea of abstract representation of information (variables and variable names). If a person could grasp that idea, pointers were easy. Some people do not understand what a variable is. Therein lies the problem. If a person does not learn what a variable is (a reference to the memory space that contains information) and that the name is not the variable itself, they cannot program pointers with understanding. Hope it helps.
Wed 13 Mar | Christopher Wells | > If a person does not learn what a variable is ... I might try to teach pointers by explaining e.g. the MOV and ADD opcodes from Intel assembler; and then, showing how a corresponding small C program ('int a = 3; int b = a + 4; int* c = &b; int d = *c + 5;') compiles to map to those opcodes (because that's the natural sequence in which to learn them IMO) ... and then, demonstrate the *usefulness* of pointers by talking about some data structure such as a linked list instead of a fixed-length array, and/or by talking about heap as opposed to stack.
"The Way Good Software Gets Designed" | Sun 10 Mar | chris
http://story.news.yahoo.com/news?tmpl=story&cid=581&u=/nm/20020305/tc_nm/microsoft_depositions_dc_3 I cant believe someone here hasnt already mentioned this news story. According to the article Steve Ballmer is quoted as saying: Thats the way good software gets designed. So if you pull out a piece it wont run Am I the only one who disagrees with this statement?
Mon 11 Mar | chris | >hmm, let's see, remove the Discussion board and the >articles from joelonsoftware.com and this website >wouldn't be worth much. So yes, in a way Steve Ballmer >is right. Roger, that whooshing noise you just heard was the sound of the point flying completely over your head. The issue is that Microsoft has a practice of bundling apps with their OS. Opponents of this practice claim Microsoft can, and should, be forced to 'unbolt' these apps. Steve Ballmer's comments were intended to refute the allegations of their opponents by 'explaining' why this cannot be done. You, on the other hand, are talking about complete removal of content.
Mon 11 Mar | DB | So according to Steve Balmer, if Microsoft built bridges, you could remove a single bolt and the whole thing would come crashing down. An MS car would halt if the speedo ceased working. An MS airliner would crash if the lock on the toilet door was broken. Nice attitude.
Mon 11 Mar | A. | Programmers: He is at court arguing for his product. He is using a specific strategy in his argument. He is _not_ interested in the slightest whether what he is saying is technically true or not.
Mon 11 Mar | DB | LOL. So the first casualty of law is truth :)
Mon 11 Mar | Katie Lucas | The speedo went on my car as I was accelerating down the slip road onto the M6 one evening. Oh. Not really a problem, I know what revs correspond roughly to which speed in which gears, it'll be fine... Powered it up to 70, pulled out into the outside lane, was passing a truck and changed up into 5th. That was the point the engine management system noticed it had no speed input but a load on the engine and turned the engine off in confusion... Transpires the EMU's speed input is tapped off from the dash speedo. Nice.
Mon 11 Mar | Herbert Sitz | 'Programmers: He is at court arguing for his product. He is using a specific strategy in his argument. He is _not_ interested in the slightest whether what he is saying is technically true or not.' Not true. The lawyers do the arguing, all Ballmer could be doing is testifying as to the facts. To a degree, he can try to avoid answering questions in a way that reveals facts hurtful to Microsoft, But if pressed with the right questions, he has to answer all questions to the best of his knowledge. So if he's asked a question about how Windows holds together technically, he's bound to give a answer regarding that technical issue. Since he's sworn to tell the truth, he has to care about whether what he's saying is technically true. If it's not, then he's either lying or he doesn't know what he's talking about.
Mon 11 Mar | DB | Katie - what car was this? (So I can avoid buying one!)
Mon 11 Mar | Mike Gunderloy | Herbert, Ballmer has undoubtedly been through many hours of coaching before each deposition. Any answer he gives has already been carefully checked and crafted by Microsoft's lawyers. If they're ethical, they didn't say 'you should say x'; they said 'would it be reasonable to say x?' Try being an expert witness some time and you'll see how it works. Only the naive believe that this is simply a matter of giving truthful answers to the best of your ability.
Mon 11 Mar | Herbert Sitz | Mike -- I'm a former lawyer (worked at Perkins Coie here in Seattle for a while) and was mostly just trying to point out that Ballmer cannot 'argue' for anything; all he's able to do is testify regarding the facts. Although lawyers like to avoid calling it 'coaching', that effectively is what they do. And the difference you try to bring out is close to the difference between what lawyers consider acceptable 'witness preparation' and what would be considered unethical 'coaching'. Regardless, though, any witness has a duty to testify truthfully. A witness may try to get around questions he or she doesn't like by not being completely forthcoming, but that's acceptable only to a point. Everyone recalls the incredible balls Bill Clinton had in avoiding questions and in creatively re-interpreting them to mean what he wanted them to mean (without telling anyone else what he was doing). That was perjury, even though he'll never be convicted of it. Microsoft has a history of dubious testimony that doesn't go as far as Clinton's, but which is still highly questionable. Perhaps the most blatant example was the video James Allchin purportedly created that was supposed to demonstrate (I think) that Windows would break when IE was 'uninstalled' from Windows. Upon cross-examination, Allchin was forced to admit that he had not personally made the video, and that in fact it wasn't a video of a running instance of Windows at all, and instead was a cobbled together video of screen images (a 'prototype' of sorts) that was designed to illustrate what Microsoft maintained would happen when IE was removed. Then there were the infamous Bill Gates depositions where Gates went so far as (in one instance if I recall correctly) to ask his interlocutor if he could please 'define what you mean by the word 'is' in that question?' MS lawyers were afraid to have Gates testify at the antitrust trial, but Justice attorneys made good use of the videotaped depositions in making Gates look like an evasive (if not lying) idiot. Those sorts of gaffes by Microsoft may not be perjury, but they aren't far off, and in any case they're the sort of thing that make Microsoft look really stupid, make a judge really mad, and damage Microsoft's credibility. I'm amazed at the ineptitude of MS lawyers in allowing that sort of testimony to occur. It played a large part, I think, in MS losing the case in front of Judge Jackson, at least to the extent that they did. I have no idea what question Ballmer's recent statement was in answer to. But it's possible that it's yet another piece in what's becoming quite a mass of questionable testimony by Microsoft. Of course, it's naive to think that witnesses are always forthcoming and never deceptive. And in fact, some degree of reticence is expected, and is no doubt a good thing. But in my experience of following MS over the last few years, they really carry it over the top.
Mon 11 Mar | Banana Fred | Are you sure Gates said 'define what you mean by the word 'is' in that question'? I thought that was Bill Clinton during the Monica Lewinsky hearings.
Mon 11 Mar | Herbert Sitz | Banana Fred -- I don't think so, but it's possible you're right. In any case, the point is the same. In his deposition Gates was continually asking for clarifications and definitions of all sorts of minor terms. While there's nothing necessarily wrong with that, it creates the impression that there's something you're doing wrong that you're desperately trying to hide. You may even succeed in hiding it. But it still weakens your credibility. After checking an article on it ( http://seattletimes.nwsource.com/news/technology/html98/gate_19990316.html ) I don't see anything about the definition of 'is'. I see something about the definition of 'define', which is probably what I was thinking of: 'The semantic sparring reached an almost absurd level when, during questioning about a newspaper article in which Gates is quoted, Gates began debating with Boies over the meaning of the word 'define.'
Mon 11 Mar | Mike Gunderloy | Thanks for that clarification, Herbert. Remind me not to teach my grandmother to go suck eggs in the future! In any case, you've said what I was trying to get at in a much clearer fashion.
Wed 13 Mar | Mark W | I love the URL to that article. 'gate' like his last name isn't 'Gates'. 'The Bill Gate.' I don't think that obscure and obfuscated testimony necessarily weakens you, especially if enough laywers & spin doctors around - it accomplishes a purpose, and frustrating someone else may very well be that purpose. Another one may be convincing you that the upper management at Microsoft is inept. 'If they're that stupid, they can't be doing these things on purpose.'
VC++ envy | Wed 06 Mar | TP
For some time I have had an ambition to write an application. An .exe that someone can run and it does stuff. In my mind, this is real programming! Coming from a server side background I never had a need for VB ,VC++ or Delphi. Ive learned Perl, ASP, PHP and even some JSP. But then I read an article on the IBM DeveloperWorks site (http://www-106.ibm.com/developerworks/library/j-native.html) and I had an idea. It seems that one can write an application in Java and then compile it for the target platform. Ok, so now one looses the write once run anywhere thing, but frankly I dont care! If it turns out that I can use my Java knowledge gained through JSPs and the like, and turn it into an app that anyone can download and run on their machine, then WOW! Ive always felt that I needed to learn VC++ (or Borland etc.) to actually realise this ambition, but maybe now this isnt the case. Id love to know if anyone on this learned list has any experience of using Java native compilers. For me, at the end of the day it boils down to not having to learn yet another language. Eagerly anticipating your responses ...
Wed 13 Mar | Timothy Falconer | >Anyone telling you to write an app in Swing for >distribution over the internet probably has not written >code that anyone actually uses. This is completely untrue. I can think of more than a dozen well known examples of shipping Swing apps, along with a few we've developed ourselves. The JRE adds 7 megs to the install. After it's been installed, deployment is much easier, particularly with Java Web Start. As for Swing behavior & performance, have you tried JDK 1.4? My apps load faster than most Windows programs. Everything's snappier. Best of all, the architecture of Swing is leaps and bounds above most other frameworks, primarly because it uses design patterns effectively. I know my words here will have little effect on those already biased, but for those of you on the fence, find out for yourself before listening to the nay-saying.
Wed 13 Mar | Michael Buttrey | I, too, would avoid using GCJ or other Java -> native compilers. Just write to a particular JRE and see what happens. Optimizing Java code is not completely futile; you can get high performance out of it. Slow Java performance is sometimes more dependent on your algorithms and program design than on your compiler, just as it is in other languages. Re: Swing performance. I regularly see three common Swing problems: 1. Excess class loading. A partial solution is to avoid hard linking in your program: use encapsulation and Java's reflection system to load class as they are needed, not before. 2. Excess event listener code. Obviously, the code behind every ActionListener or other listener should be as small and as fast as possible. If it could take more than a few hundred milliseconds, split off a thread and inform the user of the thread's progress. If the task can be done in the background, invisible to the user, do so. 3. Slow redraw speed. This is usually the fault of over-ambitious UI programming, with an excessive number of layers, layout managers, components and images. In my experience, Java 1.3 is quite fast at pumping pixels to the screen; I regularly see >60 fps in my Swing games. If, however, a Java coder does not investigate all the complexities of buffering, overdraw, and layout like they would have to on other platforms, they will get slow performance. --Michael [N.B. If you are thinking of Forte/NetBeans, ignore everything I just said.]
Categories of developers | Wed 06 Mar | Cedric
The way I see it, there are two classes of developers out there: - Class B (average) - Class A (good) The class A can be further divided into roughly three categories: 3) Good hackers 2) Good hackers with a CS education 1) Good developers These three categories include each other: 2) includes 3) with something added, and 1) includes 2) with something added. A good developer is a good hacker with the big picture. Its someone who can not only crank out code but - has education and CS classes under their belt - has higher knowledge than bit fiddling,O(n) algorithms and NP-complete problems - knows about deadlines and making compromises to deliver quality running code (which is different from quality static code, also known as academic code :-)) Also, a category 1 developer: - knows several programming languages (different paradigms a plus, like Java and Lisp) - has a solid grasp of OO concepts (not just overriding and interfaces. I used to ask for example if candidates can describe multiple inheritance of implementation and suggest a way to implement it like C++ compilers typically do). Typically, the questions I ask cover OO notions that exist only on other languages than Java, such as C++, Eiffel, Objective C, Beta, etc... Constrained genericity, covariance, etc... There is a lot to choose from. - knows about the contraints of working in a team, which includes abiding by coding conventions, communicating by email or verbally, treating everyone as equals: managers, docs, QA, etc... (something that is usually not seen in categories 2 and 3) - has an extended culture beyond the stricly engineering one. This can be very broad and ideally include some bleeding edge notions. For example, it can include (but is not limited to): design patterns, aspect-oriented/functional/declarative/... programming, knowing both Windows and UNIX, or both X Window and Windows, knowing how a compiler works or having worked in assembly, reading a lot (I always ask candidates what their latest technical readings were and what they thought of it), knowing COM when your area of expertise is J2EE (or the reverse), etc... Does this breakdown match your experience?
Wed 13 Mar | Tony | I have a degree in mathematics and 10 years development experience. I have a string of successful projects behind me, in several languages. I really hate it when some manager asks me really hard questions about something they read last week and has decided that it suddenly matters. Constrained genericity, covariance, and other examples quoted in this thread fall into this category. Compiler questions are irritating to. I, and many other successful software developers already have a demonstrated ability to understand, to solve and to adapt. What better way of seeing what I can do than by looking at what I have done? Naturally problem solving type questions should be asked and also some technical exploration is good too, but please, no compiler questions, if I ever needed to know the answer I would, but I probably never did. Understandably its different for recent graduates etc, but I suppose slightly more academic questions could be asked of those who have just exited the hallowed halls of education.
King of Patterns = MVC ? | Tue 05 Mar | James Ladd
I am asking this question from discussions on Aspect-Oriented Programming.... I have read a little about Aspect-Oriented-Programming and have certainly found it interesting. I think that it will eventually have more and more of a precense in software design and development. However, another part of me sees it as a method of implementing the MVC (Model View Controller) pattern using external tools or language constructs. Please have a look at the MVC pattern, which I think is the understated king of patterns. Yes, it is typically associated with GUI development, but it is far more reaching than that. Have you used the MVC pattern ? What patterns have you used and which was most usefull ?
Wed 13 Mar | Timothy Falconer | Maybe it's splitting hairs, but I'd say that MVC is an architecture, not a pattern.
Visual Modelling Tools - UML, OPEN and others | Sun 03 Mar | Ori Berger
Its been about two years now that Im constantly bombarded with advice that I should use visual modelling tools for developing software, or I would stand no chance in being able to develop or understand the complex relationships in todays software. Being a practitioner of the if it aint broke, dont fix it school, and not having anything broken with my ability to develop software, I was in no rush - but after a while, I decided to play a little with some modelling tools. I havent spent enough time to be an expert witness on this subject, but to me it seems like pure overhead. I reverse-engineered a project I was not familiar with, and tried to gain elightenment through the generated diagrams. Granted, Im not very proficient at reading them, but they seem to give very little of the REAL semantic info - I got much more insight much faster by reading the source; And eventually, the source is all there is - the semantic mapping between any of the UML concepts and what actually happens is so shaky if at all existent that I find the additional value hardly worth the trouble. I have yet to start a project from scratch and try to apply this methodology - I hope to do that sometime soon, but I havent seen anything to hint my experience will be different. Im not saying the concepts are wrong - far from it. Use cases and such are absolutely essential. But I really dont see how a sequence diagram helps you any more than the code that implements it, ESPECIALLY since the semantic correspondence is virtually non-existent so the diagram and the code arent guaranteed to represent each other. If its complex enough to require nontrivial documentation, UML isnt much help (A free form text file will probably be required), and if its simple enough than the code is enough. Back in 83 when I first studied how to program, most beginner books insisted that if you dont draw a flow-chart before writing code, youre doomed to a miserable future of being unable to understand your own code. People actually believed it at some poing in time, but eventually sense (IMHO) won, and most of us DONT flowchart. Most of the UML propaganda I hear is along the same lines, which gives me that feeling of deja vu -- except this time, theres lots of money involved. Either I am just not getting it (like Im sure at least some of the responses will say), or I AM getting it, but theres too much money in it for the industry to admit. Id like to hear others experience and thoughts on the subject (Especially you Joel, if you can find the time). I was able to trace all success stories I could find regarding visual modelling tools back to the press releases of the company whose tool was used - are there any independent success stories or case studies we can discuss?
Tue 12 Mar | Martin L. Shoemaker | << It's designed for education and it's probably a bit simplistic. As I understand it, something like Visio can't take code and generate a UML diagram which updates while you work (or am I wrong?). Are there any more professional tools or IDEs which let you do this? >> Together's tools do this, or at least its Java version does. Rational claims that their new XDE product does something like this; but I _just_ got XDE running and have a backlog of work to do with it, so I haven't checked into this yet. If Visio does this, it's news to me. While this seems like a neat feature, I know all sorts of cases where it will be worse than no drawings at all, unless you can go in and tweak the diagrams to show only the details you need for a particular discussion. Never forget: in many cases, comprehensive != comprehensible. Too much detail can sometimes obscure a point.
Tue 12 Mar | Mike Gunderloy | Visio Enterprise Architect (the version included in the high-end Visual Studio .NET package) can do forward and reverse engineering of ORM models to databases, and UML models to applications in VB, C#, or C++, but doesn't automatically synchronize. Rational XDE does do continuous synchronization and allows you to create multiple diagrams in a single solution, so you can hide information as you like. But the .NET version only supports C# at the moment, and it is a memory hog; they say 512 MB required and they mean it (I tried it on a 256 MB box, and various portions definitely do not work in that environment).
Wed 13 Mar | Paul Reidy | So can the UMLers of the world point to some examples of successful and well known software where UML has been applied successfully ? Is it used at Microsoft ? What products ? Is it used at Oracle ? Is it used in GNU ? Is it used any Linux development/FreeBSD ? SUN ? BEA ? Lotus ? Adobe ? Fogcreek ? Are are these companies going to be overcome once some UML powered skunkworks comes out with a Solution to world hunger and captures Osama Bin Laden ? Regs Paul
Developers over 35? | Thu 28 Feb | Christopher Wells
> Anyway, had a wake-up call yesterday applying for a new job. Speaking to a recruiter, he said the client wants to know your date of birth. I told him, but said that under EU law, a company isnt allowed to ask. Recruiter replied with well, companys policy is not to recruit developers over 35. 35!!! So, it looks like 7 years left in the industry. That would be illegal in Canada too. It may be tough to prevent people from discriminating if they want to though (for example, if they see you were at university in 1980, or have more than 15 years of experience). Other types of [illegal] discrimination sometimes happen too, for example an employer might prefer to employ married people (theyre more stable, less likely to change jobs). Is there a[ny] sensible reason for the not over 35 policy? Is it a widespread practice? If its a real problem, are there work-arounds (apart from staying healthy)? I have been hearing the myth of programmers burn out early since my earliest teens. Anecdotal coincidence: yesterday I met a man, visibly older than myself, who works as a flagman (works on a construction site, carries a flag, helps trucks/lorries to back up) who said he used to be an AS/400 programmer.
Mon 11 Mar | Tim Boucher | Oh yeah, a friend of mine who used to work at Microsoft on Powerpoint, claims that its a well known fact that high-level abstract math and logic skills begin breaking down in the brain around 35. He claims it to be a FACT and swears by it. He is also a bit of an oddball though, and maybe HIS brain has started to deteriorate.
Tue 12 Mar | Christopher Wells | > Oh yeah, a friend of mine who used to work at Microsoft on Powerpoint, claims that its a well known fact that high-level abstract math and logic skills begin breaking down in the brain around 35. That may be testable, by looking at the output of high-level abstract mathematicians, e.g. the number and quality of their published papers. That's the theory which I heard in my early teens, that was extrapolated to programmers. Also it's said that people take longer to remember things as they grow older ... which may be counterbalanced by their having stored more that's worth remembering.
How to reduce the Iceburg.... | Thu 07 Mar | Albert D. Kallal
Here is a great link to how the process of gathering customer requirements can be improved. The main key here is to ask for the outcome, and not let the customer explain *how* to get the outcome. http://hbsworkingknowledge.hbs.edu/pubitem.jhtml?id=2815&sid=0&pid=0&t=customer
Mon 11 Mar | Mark W | The sidebar almost directly addresses some of the issues Joel brings up (and some of the issues brought up here) much more than the article does. 'Generally speaking, customers can say what they want if they are asked to make selections within a familiar product category.... But when customers are asked to make new product recommendations or to venture into territory about which they have limited or no knowledge, they tend to run into at least two kinds of blocks.' etc. (read the article for the rest)
To design or not to design | Wed 06 Mar | Jutta Jordans
I just read Joels new article http://www.joelonsoftware.com/articles/NothingIsSimple.html and started on reflecting how (and if) I design. I must admit that I have very little expereince using UML or other graphical ways of modelling like ER-diagrams. When I had to use them, for university, say, or because some manager wanted us to do so, I found them clumsy and artificial and they never really let me put down the things I found most important about my design. My reluctancy to design before I started coding came mostly from that fact. When I read about Xtreme Programming, one of the things I liked best was the idea to design via sourcecode. The idea is NOT to code without thinking first. The idea is rather, to put your thoughts down in a language that is easy to use and comprehensive to you as a programmer. As a C++ programmer, to me that is: design your classes by writing the public class definition, the interface if you want. Design your functions by writing the function header and the brackets and then fill the body with TODO comments. If you have to talk about the design to non-programmers, they will need a little help understanding what you are doing, but it is my impression that they will need the same help understanding UML diagrams. With a little explanation everyone can understand class headers and comments written in plain English (or what ever is your commenting language). To make it easier to understand interaction between classes, print out your headers and arrange them on a whiteboars, draw arrows from one to the other. The other thing that makes design very hard to do (at least for me) is, that you often do not know what is actually needed until you built something and the user complains that this is not the right thing. All the design in the world cannot really remedy that, because in most cases the designer/programmer is not the user and has never done the same tasks the user will be doing with the software. Xtreme Programming tries to tackle that problem via prototyping and having a customer on the team. As soon as you agree to the point that you might not know what is really wanted when you start, you have to admit that you cannot design all the way though and then implement all the way through. Therefore you will design and then code and then design again and then code and so on. And then you will have to change code that is already there. Even if you thought you had a solid design all thought through on the start, you will later end up changing things in it. So be honest from the start and try to code in a way that embraces change (this is beginning to sound like a book summary of Xtreme Programming explained here). I just felt like I had to back up Kent Beck and his fellows here a little bit, because Joel made it sound as if Xtreme Programming meant no design at one point. To me, if there is really one thing reading Xtreme Programming Explained changed about my way of working it is the way I design my work. Design just means: Please, think before you do. And this thinking can be done in any language you are comfortable with: Diagrams, paper notes, cards, sourcecode, plain text... How do you design? How do you put down your design and communicate it to others? How fixed is your design during the development process? Have fun,
Mon 11 Mar | Jeff Hultquist | Joel's example about the File-Open Wizard reminded me of the problem of over-specified requirements, not the problem of an under-designed implementation. In many companies, the decision to have a wizard for the file-open would have been made in some product marketing group, and this individual 'requirement' would eventually land on the desk of a programmer. This programmer would then typically grumble a bit about the difficulty of the task, but would slog through it anyway 'because that what the spec says'. So the moral to the story, when I first read it, was to define the problem, and to suggest the solution. But not to force a particular solution into the spec. Design then leads to a choice of whether a wizard is worth doing, or if some other approach would be better.
Resume Selection | Thu 28 Feb | Mark W
For reasons I cant figure out my resume/interview diatribe isnt making it to the appropriate thread. I apologize if this is the third time youre seeing this: Ive done some resume sifting and interviewing on a very small scale, and here are my basic impressions of the process. The resume should convey information on many different levels. First, it should let you know on an intellectual/fact based level that whoever youre hiring can do the job. For techical jobs this means putting in the right programming languages, etc. Second, it should let you know on an emotional/opinion based level that they can do the job. Hmmm, did JavaScript for two years on small unknown websites, theyre probably not as good as the person who did it for 6 months at a Fortune 500 and graduated with a degree in Computer Science. Third, it should let you know that they can communicate effectively and cleary. Spelling and grammatical mistakes are obvious problems. I think this is where experience in the field really shines. The more experience you have, the more you usually have to say about what youve done. More professional resumes will have fuller sentances describing their job, conveying more of a real picture of what was done than bullet points. I know people put a lot of mystique into resumes, as if there were some magic formula, some template to follow, but its usually not that way. Yes there are certain basic formats (skills based, chronological, etc.) but tremendous variation within that. I would look more closely at the guy who writes Worked on the network and infrastructure for a medium sized corporation, including configuring the proxy and ns servers over the guy who writes worked on network. configured proxy servers. configured ns servers. Why? Because he removes some of my doubt, and removes some of the questions I have so the interview can focus on other things. Fourth, I look for the validity and verifiability of the information. A lot of lies are told through vagarities. A lot of times consulting means unemployed and attending university, graduating, and graduating with honors are three different things. Level of detail is important, but so is scope. If, in interview, I ask about your experience with, say, JavaScript, and you jump in with some specific examples I coded rollover scripts for one site, and a drop down navigation for another I know that those are the only two things you did. Fifth, I look for a cultural match, which is really hard to do on a resume, but not impossible. I avoid resumes that look like they were written with this: http://www.dack.com/web/bullshit.html The cover letter too is important. I think too many career and college counserlors stress the cover letter. A well placed thank you note can often show someones eagerness, which is a sign that they arent in demand. If you have to sift through 2,000 resumes, perhaps some sort of statistical model needs to be created. (someone mentioned this much earlier) If youre the HR person you should have everyones resume on file. Come up with a weighted listing of attributes that makes someone a good employee - things you can glean from the resume, and start inputting their numbers into an excel spreadsheet or something. In Simple Heuristics that Make Us Smart by Gerd Gigerenzer and the ABC Research Group ( http://www-abc.mpib-berlin.mpg.de/ ) they propose that Fast and Frugal Heuristics can be as good as Multiple Linear Regression and Bayesian statistics. Basically, the #1 Fast and Frugal Heuristic was take the best. Come up with various criteria (age, college education, years experience, experience at a fortune 500, experience at a startup, managerial experience, etc.). and run some sample data through it (such as your existing employees and an equal number of resumes of people who didnt get hired). Figure out which is the single most important indicator as to whether or not you should hire someone (lets say its 3 years coding experience) and now you can simply toss (err, keep on file) every resume that doesnt have that on it. Is it bullet proof? No, no method is. On the other hand, is it as reliable or nearly as reliable as more complex methods? Maybe (for more info read the book, a lot depends on circumstances, number of variables, etc.). Most importantly, is it fast? yes. My 2 cents.
Mon 11 Mar | Mark W | Thanks for pointing that out. I'm not suggesting any of them, and not being in HR or Law, I wouldn't expect to come up with a good set of criteria. In fact, I was trying to make the list sound humorous. Hopefully anyone in the business of hiring people understood that I didn't mean that you should discriminate, simply that when sifting through 2,000 resumes, *some* process of elimination must be followed. Perhaps a good one is to examine the qualities of the people who work for your company (i.e. were already through the hiring process), and filter/sort by those qualities.