Sunday, May 21, 2006
You should be automatically forwarded to my new URL in a couple seconds, but in case you happen to read my blog using an RSS Reader, my blog has moved. You can now find me at http://www.thecodingmonkey.net
Wednesday, May 17, 2006
On Being An Anti-Technology Technologist
Scott Hanselman (recently added to my Blogroll by the way) points to this absolutely fantastic post:
For my part, my life looks nothing like this, and it took a lot of work to keep it that way. I recognized the pattern early on when I was working for a small consulting company while going to MSOE. They gave me a pager... and my life changed. I started calling it my mood changer, because every time it would vibrate, now matter where I was or what I was doing, I'd get a scowl, and everyone knew I got paged. Did you know that nobody ever pages you with good news? When I interviewed for my next job, and they gave me a chance to ask questions of them about the position, my very first one was, "Will I be required to be on call or carry a pager?"
For a couple years after that experience I even refused to own a cell phone. I didn't want to risk being that available. I liked the fact that people had to send me an email, or leave a... *gasp* ...message on an answering machine. It's frankly quite liberating. Even today, now that I have a cell phone, I'm fairly protective of the number. I don't use SMS, don't own a Crackberry... hell... I don't even carry a PDA around anymore (though I did experiment with one for a while).
At the various companies where I work, they tend to have mass email lists for every project that flood you with useless crap every five minutes. Instead of sending a very directed message, peole love sending it on the list, even though only 1% of the list members really care. I make it a habit to have myself removed from that list as soon as I'm off a project. If I can't swing that, then I always set up a Rule Wizard to file the message off into a folder I never read. I'm religious about it.
Someone I used to work with never was that good about getting off those email lists. If he was out of the office for a week, he'd end up with hundreds of messages in his Inbox. When he got back into the office, he would delete all his Inbox messages, and then send one mass email to everyone saying that he'd "lost all his email" while he was out, and that he'd "appreciate it if everyone would forward any important messages". He'd end up with about five. I vowed to never let my Inbox get to that point, and so far it's worked.
My sister Sarah is a great example of someone who bucks this trend. She has two cell phones, a Crackberry, and who knows how many other little gadgets. When she commented to me about how surprised she was to see I didn't have these things, since I work in the technology field (I even still file my taxes on paper), I laughed and told her "I'm the last anti-technology technologist". I use technology to improve my life, and not let technology determine my life. Sometimes I wonder whether she brings this flood of information onto herself because she has the technology, as opposed to using the technology to manage the flood.
I will concede one point. I love my RSS Reader. But the nice part about RSS is that it uses a pull, as opposed to a push method. I subscribe to things I'm interested in (like a good dessert), as opposed to having emails forced down my throat because others think it's good for me (like broccoli). Even if not every item in the feed is worthwhile, the fact that I chose to get it makes it more palatable to me.
With the amount of crap being vomited up by his Ethernet connection -- all day, every day -- it's tough to walk away from the spigot for fear that he'll return to waist-deep water. Ethan reads his mail in real-time to avoid being greeted by a hundred-message pile-up when he gets back from lunch. Bringing the computer with you is the only way to keep up.
...
Years ago, someone phoned you and you weren't home, you missed the call and they had to try back -- now, the messages queue up in voice-mail. TV shows used to slip unwatched by unless you were there to suck them up them in real-time -- today, my TiVo has hours of mindless crap that it's faithfully holding for me. The Web originally required me to actually go out and do something as quaint as visit sites to read them -- these days, my feed reader pulls down megabytes of data -- a large portion of it, of course, cat pictures -- and piles it up, forever. Each of these swollen reservoirs of data silently mocks me with my inadequacy.
For my part, my life looks nothing like this, and it took a lot of work to keep it that way. I recognized the pattern early on when I was working for a small consulting company while going to MSOE. They gave me a pager... and my life changed. I started calling it my mood changer, because every time it would vibrate, now matter where I was or what I was doing, I'd get a scowl, and everyone knew I got paged. Did you know that nobody ever pages you with good news? When I interviewed for my next job, and they gave me a chance to ask questions of them about the position, my very first one was, "Will I be required to be on call or carry a pager?"
For a couple years after that experience I even refused to own a cell phone. I didn't want to risk being that available. I liked the fact that people had to send me an email, or leave a... *gasp* ...message on an answering machine. It's frankly quite liberating. Even today, now that I have a cell phone, I'm fairly protective of the number. I don't use SMS, don't own a Crackberry... hell... I don't even carry a PDA around anymore (though I did experiment with one for a while).
At the various companies where I work, they tend to have mass email lists for every project that flood you with useless crap every five minutes. Instead of sending a very directed message, peole love sending it on the list, even though only 1% of the list members really care. I make it a habit to have myself removed from that list as soon as I'm off a project. If I can't swing that, then I always set up a Rule Wizard to file the message off into a folder I never read. I'm religious about it.
Someone I used to work with never was that good about getting off those email lists. If he was out of the office for a week, he'd end up with hundreds of messages in his Inbox. When he got back into the office, he would delete all his Inbox messages, and then send one mass email to everyone saying that he'd "lost all his email" while he was out, and that he'd "appreciate it if everyone would forward any important messages". He'd end up with about five. I vowed to never let my Inbox get to that point, and so far it's worked.
My sister Sarah is a great example of someone who bucks this trend. She has two cell phones, a Crackberry, and who knows how many other little gadgets. When she commented to me about how surprised she was to see I didn't have these things, since I work in the technology field (I even still file my taxes on paper), I laughed and told her "I'm the last anti-technology technologist". I use technology to improve my life, and not let technology determine my life. Sometimes I wonder whether she brings this flood of information onto herself because she has the technology, as opposed to using the technology to manage the flood.
I will concede one point. I love my RSS Reader. But the nice part about RSS is that it uses a pull, as opposed to a push method. I subscribe to things I'm interested in (like a good dessert), as opposed to having emails forced down my throat because others think it's good for me (like broccoli). Even if not every item in the feed is worthwhile, the fact that I chose to get it makes it more palatable to me.
Tuesday, May 16, 2006
What Motivates You?
My boss at the consulting company sent me a questionnaire asking me to place 10 things in order of importance as far as what motivates me. There was a list of 10 things like base salary, time off, interesting work, etc. with fancy little combo boxes next to each one so I could put a number next to them. Someone in HR I'm sure put in a good amount of time figuring out how forms in Word works.
This is probably the one major problem with working for a company you never go to. I'm always on the client site, so I rarely see my actual boss. That means that my boss has to rely on silly questionnaires to get a sense of what is important to me, along with the occasional lunch.
Worse yet, I'm not sure what I sent is accurate. First of all, I didn't put a lot of thought into it, since I forgot about it until the day it was due. Secondly, I'm not sure I can rate those items from 1 to 10. Usually I have an idea of what I want from each category, and then view the sum total in aggregate. Rarely if ever do I say to myself, "Well the pay isn't that great, but the PTO is fantastic. However, since I rate base pay as more important, I can't take the job."
That's just not how I think.
This is probably the one major problem with working for a company you never go to. I'm always on the client site, so I rarely see my actual boss. That means that my boss has to rely on silly questionnaires to get a sense of what is important to me, along with the occasional lunch.
Worse yet, I'm not sure what I sent is accurate. First of all, I didn't put a lot of thought into it, since I forgot about it until the day it was due. Secondly, I'm not sure I can rate those items from 1 to 10. Usually I have an idea of what I want from each category, and then view the sum total in aggregate. Rarely if ever do I say to myself, "Well the pay isn't that great, but the PTO is fantastic. However, since I rate base pay as more important, I can't take the job."
That's just not how I think.
Sunday, May 14, 2006
Wednesday, April 26, 2006
Tuesday, April 25, 2006
Pet Peeve
I absolutely hate, with a vengeance, any website that emails your password to you after you sign up for services with them. Email is not secure you jerk wads! And if I happen to be using Gmail, then that email you sent me, even if I delete it, will probably sit in their cache forever to be subpoenaed by who knows what agency somewhere.
Here's a clue. I just had to type my password twice. I know what it is. You don't have to send it to me.
Here's a clue. I just had to type my password twice. I know what it is. You don't have to send it to me.
Talk About a Blown Weekend
I felt like last weekend was cut short. Saturday was definitely the most gorgeous day out of the two, and I spent the entire thing indoors at the WI-INETA Deeper in .NET conference. I suppose I shouldn't complain, since it was free, and 4 out of the 5 speakers were pretty good. I even got a free book out of the deal (even though I'm getting a ton through BlogCritics these days). So why am I complaining? Well, why don't' I just give you a review of the speakers that were there.
Michèle Leroux Bustamante: She spoke first thing in the morning about WCF (formerly Indigo, not the World Curling Federation, Matt). It was a pretty good talk, and she was definitely knowledgeable and well prepared. The problem is... well... she didn't explain what problems this would solve for us. WCF is supposed to finally bring together web services and .NET remoting under one unified architecture, but to be honest, I don't have many problems with the current architecture. I think talking about what problems exist that will be solved is crucial, since WCF is still in early development stages. Really, the code samples I saw looked an awful lot like current Web Services and .NET Remoting. So what's really changed? The hosting environment? Big whoop.
Scott Hanselman: Scott was next, and had I left after his talk, I would have been a very happy camper. His talk was supposed to be about a "Successful ASP.NET architecture using dasBlog as an example", but he really didn't talk to much about dasBlog. What he did talk about were internals in ASP.NET, serialization, debugging tips and tricks, and all sorts of other really random cool goodies. I came out of there with about 2 pages worth of notes. He went off on so many tangents, that he might as well have thrown away his slides, but that was OK. His tangents were incredibly good. He was also incredibly funny.
Julie Lerman: This was the only talk that I considered bad. It wasn't that she wasn't enthusiastic, but she just presented her material (ADO.NET and SQL Server 2005) very poorly. She's a self confessed "data geek", which few people are. Most of us (me included) view databases as a means to an end, while she views them as an end unto themselves. Most of her examples didn't actually serve any purpose other than to say "look, this works", without showing why you'd want to use this new feature. Everyone in the audience was staring at their watches waiting for her talk to be over.
Bill Hatfield: Bill gave an interesting talk on AJAX, and the new .NET components for developing AJAX applications called Atlas. It was a decent talk, with good real world examples. I think he mislead people several times when he claimed that there would be "no round trip to the server", which is completely false. The point of AJAX isn't to eliminate round trips to the server. Rather, you only go the server to replace a small portion of the current DOM, instead of making a round trip to the server to replace the entire page. He didn't explain this well at all. He also leaned on the "I don't know because this is beta" crutch too much when answering questions. If your talk is on a beta product, then you should know the ins and outs more than he did. A few times during his talk, people from the audience were telling him how it worked.
Jason Beres: This was the last talk, and was interesting if nothing else. Though I have to say... turn down the volume! His talk was on WPF (formerly known as Avalon). Being a thick client programmer, and having worked on SVG previously, this was an intriguing topic. What I found most disturbing was the fact that he confessed to having no real knowledge on the topic except what he picked up from someone else's slides and examples, which he learned in two days. With that said, he did a very good job presenting everything had learned, but it still seemed strange.
So if the majority of the talks were good, then why was it a waste of my time? Because most of these technologies are still quite a ways off, and will be changing quite a lot between now, and when they are officially released. Frankly, very few companies are willing to take the risk into bleeding edge technologies. Had they had more talks like Scott's, and had Julie's been better (both were on current technologies), I would have felt better.
As it was, I would have rather been out enjoying the sun.
Michèle Leroux Bustamante: She spoke first thing in the morning about WCF (formerly Indigo, not the World Curling Federation, Matt). It was a pretty good talk, and she was definitely knowledgeable and well prepared. The problem is... well... she didn't explain what problems this would solve for us. WCF is supposed to finally bring together web services and .NET remoting under one unified architecture, but to be honest, I don't have many problems with the current architecture. I think talking about what problems exist that will be solved is crucial, since WCF is still in early development stages. Really, the code samples I saw looked an awful lot like current Web Services and .NET Remoting. So what's really changed? The hosting environment? Big whoop.
Scott Hanselman: Scott was next, and had I left after his talk, I would have been a very happy camper. His talk was supposed to be about a "Successful ASP.NET architecture using dasBlog as an example", but he really didn't talk to much about dasBlog. What he did talk about were internals in ASP.NET, serialization, debugging tips and tricks, and all sorts of other really random cool goodies. I came out of there with about 2 pages worth of notes. He went off on so many tangents, that he might as well have thrown away his slides, but that was OK. His tangents were incredibly good. He was also incredibly funny.
Julie Lerman: This was the only talk that I considered bad. It wasn't that she wasn't enthusiastic, but she just presented her material (ADO.NET and SQL Server 2005) very poorly. She's a self confessed "data geek", which few people are. Most of us (me included) view databases as a means to an end, while she views them as an end unto themselves. Most of her examples didn't actually serve any purpose other than to say "look, this works", without showing why you'd want to use this new feature. Everyone in the audience was staring at their watches waiting for her talk to be over.
Bill Hatfield: Bill gave an interesting talk on AJAX, and the new .NET components for developing AJAX applications called Atlas. It was a decent talk, with good real world examples. I think he mislead people several times when he claimed that there would be "no round trip to the server", which is completely false. The point of AJAX isn't to eliminate round trips to the server. Rather, you only go the server to replace a small portion of the current DOM, instead of making a round trip to the server to replace the entire page. He didn't explain this well at all. He also leaned on the "I don't know because this is beta" crutch too much when answering questions. If your talk is on a beta product, then you should know the ins and outs more than he did. A few times during his talk, people from the audience were telling him how it worked.
Jason Beres: This was the last talk, and was interesting if nothing else. Though I have to say... turn down the volume! His talk was on WPF (formerly known as Avalon). Being a thick client programmer, and having worked on SVG previously, this was an intriguing topic. What I found most disturbing was the fact that he confessed to having no real knowledge on the topic except what he picked up from someone else's slides and examples, which he learned in two days. With that said, he did a very good job presenting everything had learned, but it still seemed strange.
So if the majority of the talks were good, then why was it a waste of my time? Because most of these technologies are still quite a ways off, and will be changing quite a lot between now, and when they are officially released. Frankly, very few companies are willing to take the risk into bleeding edge technologies. Had they had more talks like Scott's, and had Julie's been better (both were on current technologies), I would have felt better.
As it was, I would have rather been out enjoying the sun.
Thursday, April 13, 2006
Any Fool Can Criticize...
"... condemn and complain... and most fools do."
- Dale Carnegie
I have another review up at BlogCritics.org, on The Visual Basic 2005 Jumpstart from O'Reilly.
- Dale Carnegie
I have another review up at BlogCritics.org, on The Visual Basic 2005 Jumpstart from O'Reilly.
Saturday, April 08, 2006
I Have Another Review Up
As Mel Brooks once said, "Critics can't even make music by rubbing their back legs together." But we can certainly write. Check out my latest review on BlogCritics.org of the "C# Cookbook, 2nd Edition".
Friday, April 07, 2006
You Code Like a Girl!
Thanks to Virginia Postrel for pointing out this rather interesting post about the aesthetics of code:
Frankly, I don't know if gender really has anything to do with it, but I do firmly believe that there are people in general who code in this fashion, and that certain programming languages cater to this desire. A number of years ago, I saw this post on who a typical C# programmer is:
So what some interpret as a "girly coder"... just might mean you're code focused.
What prompted this post--and it's whimsical title--is a post by Jamis Buck titled Beautiful code, test first, which includes the following:
"He was telling me how he feels like he has to sit and tweak his code over and over until it not only acts right, but looks right. It cannot be merely functional, it must be beautiful, as well."
But the best part was a comment by "Morten" that included the line:
"As for spending too much time on making the code look right down to the last indentation - my code has been called "girl code" for the same reason..."
Frankly, I don't know if gender really has anything to do with it, but I do firmly believe that there are people in general who code in this fashion, and that certain programming languages cater to this desire. A number of years ago, I saw this post on who a typical C# programmer is:
When we talk about “code focused” this meant a couple of things to us. First, the users we watched were very persnickety about their code. For example, they would spend a lot of time formatting their code the way they wanted. They would write a block of code, and then go back and indent it the way they wanted. They would copy code from somewhere, and then format it in their editor before they even read it. There just seems to be a sense that the code itself can be beautiful, and code that was ugly, and here I mean was formatted in the wrong way, was fixed up.
The other part of being code focused has to do with the way they see the designers and other parts of the Visual Studio tools that were not code editors. For instance, the Windows Form designer. Many developers look at programming as designing a form, and then writing “code behind” that makes the form work. The form itself is the program, and the code is annotations that make the program do what they want. The Visual C# developers, however, tend to think of the Windows Form designer as a code generator. For example, we saw one developer use the form design and the sever explorer to bind to data. Then he went in and cut out all the generated data code and put it into it’s own class. He didn’t mind using the generated code, but the code was his, not the form’s. Furthermore, he couldn’t live with having the data code embedded in the UI code, he just had to factor it out or he wouldn’t have slept well that night.
So what some interpret as a "girly coder"... just might mean you're code focused.
Thursday, April 06, 2006
When TLA's Strike
One of my favorite quick jokes is to talk about TLA's. Usually when I say something like, "Great, another TLA", someone will furrow their brow a little and look at me kind of strange. That's my clue that they don't know what TLA stands for. I'll then look at them with a smile and say, "That's a Three Letter Acronym". Usually there will be a pause, and then they'll laugh.
TLA's abound in the software industry. My resume is chalk full of them. Almost every worthwhile technology I've ever learned could be described with a TLA. Of course, my current client does a lot of mainframe work. And every day, if I'm not interacting with the mainframe somehow, I have to at least interact with mainframe programmers, or ex mainframe programmers who are now trying to be .NET programmers. The problem is that their TLA's, and my TLA's are completely different.
Several months back I ended up going into a meeting with a bunch of people, some of which were mainframers to talk about a new project coming down the line. They were discussing how it was like "COM", and brought up "COM" a lot. My current client is mostly a .NET house, though we do a little C++, and some VB6. So I was a little surprised when they kept talking about "COM", until it dawned on me that they didn't mean "Component Object Model", and instead meant something else which is unique to my client (which I won't mention because I don't want to divulge anything I shouldn't).
It goes without saying that when this finally struck me, I audibly went "Ohhhhhh... ok. I'm with you now". The mainframers all looked at me like I was nuts, and then I had to explain how I thought they were talking about a different "COM". Of course, because they don't know Windows programming, after I was done explaining, they still I thought I was nuts.
I used to do a lot of C++. I was schooled in C++. It was the first language that I really loved, and I still compare everything I work with now to C++. I also used to write a lot of COM components, especially using ATL. I also did a lot with MFC and STL, but that has nothing to do with COM really. I just thought I'd throw those out to show how many TLA's can pop up really quickly.
Even now, when an email appears in my inbox at my client talking about a problem with "COM", my mind still automatically clicks to "Component Object Model" even though the never mean that COM.
TLA's abound in the software industry. My resume is chalk full of them. Almost every worthwhile technology I've ever learned could be described with a TLA. Of course, my current client does a lot of mainframe work. And every day, if I'm not interacting with the mainframe somehow, I have to at least interact with mainframe programmers, or ex mainframe programmers who are now trying to be .NET programmers. The problem is that their TLA's, and my TLA's are completely different.
Several months back I ended up going into a meeting with a bunch of people, some of which were mainframers to talk about a new project coming down the line. They were discussing how it was like "COM", and brought up "COM" a lot. My current client is mostly a .NET house, though we do a little C++, and some VB6. So I was a little surprised when they kept talking about "COM", until it dawned on me that they didn't mean "Component Object Model", and instead meant something else which is unique to my client (which I won't mention because I don't want to divulge anything I shouldn't).
It goes without saying that when this finally struck me, I audibly went "Ohhhhhh... ok. I'm with you now". The mainframers all looked at me like I was nuts, and then I had to explain how I thought they were talking about a different "COM". Of course, because they don't know Windows programming, after I was done explaining, they still I thought I was nuts.
I used to do a lot of C++. I was schooled in C++. It was the first language that I really loved, and I still compare everything I work with now to C++. I also used to write a lot of COM components, especially using ATL. I also did a lot with MFC and STL, but that has nothing to do with COM really. I just thought I'd throw those out to show how many TLA's can pop up really quickly.
Even now, when an email appears in my inbox at my client talking about a problem with "COM", my mind still automatically clicks to "Component Object Model" even though the never mean that COM.
Monday, April 03, 2006
69 Dude!
So this weekend, my client had a major software deploy to production. After all the months of development, and all the interim builds for testing, the final build number for the software that went to production was Build 69. Our build numbers start at 1, and increment automatically for each official build.
Apparently, when the team business manager saw this, she asked the development team lead (also a woman) to have it changed. She refused, and 69 is what went to production. I wonder if people who use our software (which is only for internal use) could file a sexual harassment suit because of it? When I saw the final build number this morning, I couldn't help but laugh.
Apparently, when the team business manager saw this, she asked the development team lead (also a woman) to have it changed. She refused, and 69 is what went to production. I wonder if people who use our software (which is only for internal use) could file a sexual harassment suit because of it? When I saw the final build number this morning, I couldn't help but laugh.
Wednesday, March 29, 2006
The Hidden Perils of Drag and Drop
Have you ever been in Windows Explorer, and while clicking here and there, you accidentally click and drag a folder into another folder? Pretty common right? No real harm... all you have to do is go in and move it back.
Now imagine coming in to work one morning, logging in, opening Visual Studio, and finding out that your Visual Source Safe repository for your project is missing. After placing the appropriate calls to the "Help Desk", they tell you that its accidentally been deleted, but they're not sure by who are why. Then they tell you that they're not sure they have a backup.
Fast forward a day to find out that they have a backup, but it's off site in another state and will take a while to get here.
Fast forward one more day to find out that they didn't actually delete the repository, but someone accidentally moved it (most likely via Drag and Drop given where it was moved to), and didn't realize what they did. Moreover, they're still not sure who did it.
How could they not be sure you ask? Well, as it turns out, this particular server has a global share on it that pretty much everyone has access to. And as it turns out, pretty much everyone here has access to the C$ drive on everyone else's machine too... by design. So if I want to, I can easily delete all the files off of a coworkers computer if I'm upset at him.
Finally today we got our repository back, after two days of down time. I won't say what client I work for... but I will tell you that this is no mom and pop shop. They should know better.
Now imagine coming in to work one morning, logging in, opening Visual Studio, and finding out that your Visual Source Safe repository for your project is missing. After placing the appropriate calls to the "Help Desk", they tell you that its accidentally been deleted, but they're not sure by who are why. Then they tell you that they're not sure they have a backup.
Fast forward a day to find out that they have a backup, but it's off site in another state and will take a while to get here.
Fast forward one more day to find out that they didn't actually delete the repository, but someone accidentally moved it (most likely via Drag and Drop given where it was moved to), and didn't realize what they did. Moreover, they're still not sure who did it.
How could they not be sure you ask? Well, as it turns out, this particular server has a global share on it that pretty much everyone has access to. And as it turns out, pretty much everyone here has access to the C$ drive on everyone else's machine too... by design. So if I want to, I can easily delete all the files off of a coworkers computer if I'm upset at him.
Finally today we got our repository back, after two days of down time. I won't say what client I work for... but I will tell you that this is no mom and pop shop. They should know better.
Tuesday, March 28, 2006
How Many Companies Use Apple?
There is a reason why companies prefer Microsoft over Apple. The NY Times tries to bill legacy support as bad:
Microsoft has understood this from the very beginning... dating back to its first dealings with IBM. Microsoft recognized that software was just as crucial as hardware, if not more so. It also recognized that software was an investment. Not only does software cost money, but so does deploying it across a large corporation. From the deployment itself, to testing and training, and backwards compatibility concerns with legacy documents. Companies make an investment in software.
Apple over the years has ignored that fundamental business reality to its own detriment. They unveil new hardware that won't run old code. They create new operating systems that require new versions of other software to use. As a result, companies are unwilling to buy Apple computers and operating systems because they realize that an upgrade to the OS would not only require paying for the new operating system, but also investing in new versions of other software to work on that operating system.
While Windows may be slower, you can still run old versions of Office on Windows XP for instance. That allows companies to delay, or even completely avoid upgrading peripheral software that may currently fit its needs. This decision is key when companies scale up in size. Because new hardware won't run old operating systems, it is not uncommon for large corporations to run mixed hardware and operating systems across the enterprise. However, because Microsoft handles legacy applications so well, they can still run the same version of Office, or any other application. Companies can then invest in new hardware for new employees, and not worry that it will create inconsistencies elsewhere.
So while handling legacy code may have disadvantages to pure performance in the operating system, it has far more advantages in the enterprise. Apple's sales numbers, and market penetration over the years more than prove that. Hopefully Microsoft won't forget it.
As a result, each new version of Windows carries the baggage of its past. As Windows has grown, the technical challenge has become increasingly daunting. Several thousand engineers have labored to build and test Windows Vista, a sprawling, complex software construction project with 50 million lines of code, or more than 40 percent larger than Windows XP.
"Windows is now so big and onerous because of the size of its code base, the size of its ecosystem and its insistence on compatibility with the legacy hardware and software, that it just slows everything down," observed David B. Yoffie, a professor at the Harvard Business School. "That's why a company like Apple has such an easier time of innovation."
Microsoft certainly understands the problem, the need to change and the potential long-term threat to its business from rivals like Apple, the free Linux operating system, and from companies like Google that distribute software as a service over the Internet.
Microsoft has understood this from the very beginning... dating back to its first dealings with IBM. Microsoft recognized that software was just as crucial as hardware, if not more so. It also recognized that software was an investment. Not only does software cost money, but so does deploying it across a large corporation. From the deployment itself, to testing and training, and backwards compatibility concerns with legacy documents. Companies make an investment in software.
Apple over the years has ignored that fundamental business reality to its own detriment. They unveil new hardware that won't run old code. They create new operating systems that require new versions of other software to use. As a result, companies are unwilling to buy Apple computers and operating systems because they realize that an upgrade to the OS would not only require paying for the new operating system, but also investing in new versions of other software to work on that operating system.
While Windows may be slower, you can still run old versions of Office on Windows XP for instance. That allows companies to delay, or even completely avoid upgrading peripheral software that may currently fit its needs. This decision is key when companies scale up in size. Because new hardware won't run old operating systems, it is not uncommon for large corporations to run mixed hardware and operating systems across the enterprise. However, because Microsoft handles legacy applications so well, they can still run the same version of Office, or any other application. Companies can then invest in new hardware for new employees, and not worry that it will create inconsistencies elsewhere.
So while handling legacy code may have disadvantages to pure performance in the operating system, it has far more advantages in the enterprise. Apple's sales numbers, and market penetration over the years more than prove that. Hopefully Microsoft won't forget it.
Sunday, March 26, 2006
You Can Find Me Other Places Too
As Joseph Addison once said, "There is no defense against criticism except obscurity." And with that said, you can find my latest review up at BlogCritics.org. It's a review of the new O'Reilly book, Information Dashboard Design by Stephen Few.
Friday, March 24, 2006
You Have to Understand The History
One of my favorite quotes about software is from Michael Sinz:
If you've programed in Visual Basic.NET for any length of time, you soon realize that this is a language that has to make a lot of child support payments. Yesterday I had to answer a question from a colleague about yet another bastard child feature in VB.NET... Array Declarations. She kept having issues because there was one extra item in the array than she was expecting. Previously she'd really only dealt with collection classes like ArrayList. So she was very confused when this statement created an array of 7 elements:
After all, this statement initializes an ArrayList with a Capacity of 6 elements:
In the majority of languages like C, C++, C#, Java, and who knows how many others, you declare an array with the size of the array. The array is then indexed from 0 to Size - 1. In Visual Basic, you declare an array with the largest index. Therefore you get an array that is indexed from 0 to Index. But why on Earth would you make that decision? It's all due to the long and storied history of Visual Basic.
Visual Basic isn't like most programming languages, in that it was designed to be used by people without general computer science backgrounds. One of the "User Friendly Features" they created was arrays that were indexed starting at 1, instead of 0, and ended at Size, instead of Size - 1. While programmers are used to counting starting at 0, most non-programmers start counting at 1. While most C++ programmers would walk through an array list this:
A VB 6 programmer would have walked through an array this way:
In this context, the To keyword is inclusive, so it's equivalent to <= in the C++ for loop. Unfortunately, this lead to a lot of issues. While arrays in Visual Basic worked this way, and so did some of the internal collections, may other types of lists and collections had to be 0 based because they interacted with the Windows API which is C based. So Visual Basic code was filled with mixed base arrays that confused the hell out of a lot people. You could, if you knew about it, actually change the base of an array either by using the Option Base directive, or by changing your array declarations:
But many people either didn't know of this feature, or just didn't bother with it. That meant that when Visual Basic.NET came along, there was a lot of old code that had to be supported for conversion from VB6 to .NET.
In .NET, no matter what language you use, arrays are indexed from 0 to Size - 1. This allows for interoperability between all the .NET languages, the Windows API, and COM controls as well. Even Visual Basic array are indexed this way. However, by changing the array declaration syntax to continue to support the old way, they supported all the old code. This way, old VB6 code would still work, there would just be one extra element in the array at index 0, which would never be used. But, the advantage is you don't get all sorts of index out of range exceptions when you convert and run your old code.
Had they changed the array declarations to come in line with the C family of languages, then you'd have to go in and modify a lot of old code if you were converting a VB6 project, because the last element wouldn't exist if you started counting at 1. Was this a good idea? Should they have forced people to modify their old code? That's up for debate. But that's all water under the bridge at this point. The decision has already been made, and now you have to support it.
Programming is like sex, one mistake and you have to support it for the rest of your life.
If you've programed in Visual Basic.NET for any length of time, you soon realize that this is a language that has to make a lot of child support payments. Yesterday I had to answer a question from a colleague about yet another bastard child feature in VB.NET... Array Declarations. She kept having issues because there was one extra item in the array than she was expecting. Previously she'd really only dealt with collection classes like ArrayList. So she was very confused when this statement created an array of 7 elements:
Dim pkTableCol(6) As DataColumn
After all, this statement initializes an ArrayList with a Capacity of 6 elements:
Dim pkTableCol As New ArrayList(6)
In the majority of languages like C, C++, C#, Java, and who knows how many others, you declare an array with the size of the array. The array is then indexed from 0 to Size - 1. In Visual Basic, you declare an array with the largest index. Therefore you get an array that is indexed from 0 to Index. But why on Earth would you make that decision? It's all due to the long and storied history of Visual Basic.
Visual Basic isn't like most programming languages, in that it was designed to be used by people without general computer science backgrounds. One of the "User Friendly Features" they created was arrays that were indexed starting at 1, instead of 0, and ended at Size, instead of Size - 1. While programmers are used to counting starting at 0, most non-programmers start counting at 1. While most C++ programmers would walk through an array list this:
const int ARRAY_SIZE = 6;
int array[ARRAY_SIZE];
for ( int i = 0; i < ARRAY_SIZE; i++ )
{
array[i] = i * 1000;
}
A VB 6 programmer would have walked through an array this way:
Const ARRAY_SIZE As Integer = 6
Dim array(ARRAY_SIZE) As Integer
Dim i As Integer
For i = 1 To ARRAY_SIZE
array(i) = i*1000
Next i
In this context, the To keyword is inclusive, so it's equivalent to <= in the C++ for loop. Unfortunately, this lead to a lot of issues. While arrays in Visual Basic worked this way, and so did some of the internal collections, may other types of lists and collections had to be 0 based because they interacted with the Windows API which is C based. So Visual Basic code was filled with mixed base arrays that confused the hell out of a lot people. You could, if you knew about it, actually change the base of an array either by using the Option Base directive, or by changing your array declarations:
Dim array(0 To ARRAY_SIZE-1) As Integer
But many people either didn't know of this feature, or just didn't bother with it. That meant that when Visual Basic.NET came along, there was a lot of old code that had to be supported for conversion from VB6 to .NET.
In .NET, no matter what language you use, arrays are indexed from 0 to Size - 1. This allows for interoperability between all the .NET languages, the Windows API, and COM controls as well. Even Visual Basic array are indexed this way. However, by changing the array declaration syntax to continue to support the old way, they supported all the old code. This way, old VB6 code would still work, there would just be one extra element in the array at index 0, which would never be used. But, the advantage is you don't get all sorts of index out of range exceptions when you convert and run your old code.
Had they changed the array declarations to come in line with the C family of languages, then you'd have to go in and modify a lot of old code if you were converting a VB6 project, because the last element wouldn't exist if you started counting at 1. Was this a good idea? Should they have forced people to modify their old code? That's up for debate. But that's all water under the bridge at this point. The decision has already been made, and now you have to support it.
Wednesday, March 22, 2006
If It Ain't Broke, Don't Fix It
One of the projects that I sometimes still get dragged back into now and then is about a week and a half from going to production. This is a fun time when the last of the defects are quickly being fixed, and testers scramble around to run the last of their scripts. Then you see a defect that is in code that you know has been working for a long time. After investigating the defect for a bit, you run into the buggy line of code.
That's when I usually say out loud, "How did that get in there?"
The very first thing I do in this case is search through the file history in Source Safe. Sure enough, something was just checked in prior to today's build. So I look at the check-in details. "Fixed Defect #xxxxx and changed a couple other things".
"Great. I wonder what 'other things' got changed."
I've run into this problem at the end of more releases than I care to remember. There is usually at least one developer in any group who loves to tinker. They usually say to themselves, "Well as long as I'm working in this file anyway, I might as well clean a few others things up too." And that's when the new defects come in.
While it can be all well and good to change around some ugly code during development, you should always let ugly code lie at the end of a release. There simply isn't enough time to test your changes. And your changes should be tested. What's worse, is that these "minor changes" are rarely ever called to anyone's attention when checked in. They're simply snuck in, so people don't know that they need to test them. As the old saying goes, "If it ain't broke, don't fix it."
That's when I usually say out loud, "How did that get in there?"
The very first thing I do in this case is search through the file history in Source Safe. Sure enough, something was just checked in prior to today's build. So I look at the check-in details. "Fixed Defect #xxxxx and changed a couple other things".
"Great. I wonder what 'other things' got changed."
I've run into this problem at the end of more releases than I care to remember. There is usually at least one developer in any group who loves to tinker. They usually say to themselves, "Well as long as I'm working in this file anyway, I might as well clean a few others things up too." And that's when the new defects come in.
While it can be all well and good to change around some ugly code during development, you should always let ugly code lie at the end of a release. There simply isn't enough time to test your changes. And your changes should be tested. What's worse, is that these "minor changes" are rarely ever called to anyone's attention when checked in. They're simply snuck in, so people don't know that they need to test them. As the old saying goes, "If it ain't broke, don't fix it."
Friday, March 17, 2006
You Know You're a Geek When...
Have you ever written a really bad joke or pun into an email, and not realize how awful it was until after you hit send? Yesterday, I happened to put this in an email response:
If that person didn't know I was a geek before... he does now.
Just wanted to make sure I didn't get lost in the void... or
the void* for that matter.
If that person didn't know I was a geek before... he does now.
Friday, March 10, 2006
How Many Designs Have You Regretted?
With out this guy, Dilbert would have never been popular:
Of course we all have some decisions that we've regretted... but how many can you say have made the lives of millions of people miserable? Now that's an accomplishment.
Robert Oppenheimer agonized over building the A-bomb. Alfred Nobel got queasy about creating dynamite. Robert Propst invented nothing so destructive. Yet before he died in 2000, he lamented his unwitting contribution to what he called 'monolithic insanity.'
Propst is the father of the cubicle. More than 30 years after he unleashed it on the world, we are still trying to get out of the box. The cubicle has been called many things in its long and terrible reign. But what it has lacked in beauty and amenity, it has made up for in crabgrass-like persistence.
Of course we all have some decisions that we've regretted... but how many can you say have made the lives of millions of people miserable? Now that's an accomplishment.
Friday, March 03, 2006
Pimp My Cube?
This seems like a good idea, except for what's included in the kit:
Adding some flair to your cube is always fun... but I think most people who dwell in cubes aren't looking for gold studded bling. This is the sort of stuff we put in our cubes. Know your market!
For only $14.95, you can turn your own drab office space into 'dazzling digs.' That's the promise of a soon-to-be-released kit, Pimp My Cubicle. With a title spun off the popular MTV show 'Pimp My Ride,' the kit will be released March 14, providing office workers with gold pushpins, a mini disco ball, a dollar-sign paperweight, leopard-print fringe and an adhesive gold keyboard key—'to give you a little start on your bling.'
Adding some flair to your cube is always fun... but I think most people who dwell in cubes aren't looking for gold studded bling. This is the sort of stuff we put in our cubes. Know your market!
Tuesday, February 28, 2006
Wednesday, February 22, 2006
Compiler Error of the Day
Here is a compiler error I got while quickly throwing together a custom collection:
Overridable NotOverridable?! Huh?! Yet another reason why Visual Basic really chaps my hide.
Public Overrides Sub RemoveAt(index As Integer)' cannot override 'Public Overridable NotOverridable Sub RemoveAt(index As Integer)' because it is declared 'NotOverridable'
Overridable NotOverridable?! Huh?! Yet another reason why Visual Basic really chaps my hide.
Thursday, February 16, 2006
Pet Peeve
Why do people insist on touching your monitor when they're showing you something on your computer? Use the mouse, or a closed pen... but for God's sake don't touch the screen! You think I want your finger prints all over my monitor while I'm trying to work? Someone was just over by my desk and insisted on touching my monitor about 20 times (not an exaggeration), and now every other word I'm typing on the screen is covered with a smudgy fingerprint. Excuse me while I go get some Windex.
Friday, February 03, 2006
Another Del.icio.us Wish
I made a wish a while ago looking for tag compliments. Now I've got a few more, now that I'm using del.icio.us more and more.
First, I'd like them to improve their Tagroll feature so that I can limit the tags list only to show those that are included in a specific bundle. They already do something similar with Linkrolls, which allows me to only show links that have specific tags associated with them, now I want similar functionality with Tagrolls please.
Secondly, I'd like them to add more functionality to JSON (javascript object). Specifically, I'd like to query with a specific URL, and get back a list of the tags associated with that URL.
Finally, I'd like some mechanism so that I can mark a link as private, and only visible if I'm logged into del.icio.us. Yes... sometimes I want to hide my porn. So sue me. ;) At least I'm brave enough to admit it.
First, I'd like them to improve their Tagroll feature so that I can limit the tags list only to show those that are included in a specific bundle. They already do something similar with Linkrolls, which allows me to only show links that have specific tags associated with them, now I want similar functionality with Tagrolls please.
Secondly, I'd like them to add more functionality to JSON (javascript object). Specifically, I'd like to query with a specific URL, and get back a list of the tags associated with that URL.
Finally, I'd like some mechanism so that I can mark a link as private, and only visible if I'm logged into del.icio.us. Yes... sometimes I want to hide my porn. So sue me. ;) At least I'm brave enough to admit it.
Monday, January 23, 2006
Interviewing Tips
A friend of mine recently sent me an email (along with his resume), saying that he was going to be out of work in a couple weeks. The company he was contracting with was not going continue his contract, because apparently the project he was working with wasn't going forward. My consulting company is pretty good, and they offer a good referral bonus to consultants, so I'm usually pretty good about recommending my company, and asking my friends how happy my friends are where they're working.
Anyway, I forwarded his resume on to my resource manager, and my friend was interviewed. He went through the gauntlet pretty well, and eventually was made an offer. My manager sent me an email thanking me, and forwarded a comment from one of the people who interviewed him. One of the things that impressed him the most (and very well could have lead to his offer) was the fact that he sent a thank you note after the interview. He said it was the only thank you note he can remember receiving in dozens of interviews.
I remember that little bit of advice from our career counselors in college, when they were prepping us for interviewing when we graduated. They were right. It doesn't have to be much. Hell, it doesn't even have to be a hand written note. Send an email. Be sincere. It works.
Anyway, I forwarded his resume on to my resource manager, and my friend was interviewed. He went through the gauntlet pretty well, and eventually was made an offer. My manager sent me an email thanking me, and forwarded a comment from one of the people who interviewed him. One of the things that impressed him the most (and very well could have lead to his offer) was the fact that he sent a thank you note after the interview. He said it was the only thank you note he can remember receiving in dozens of interviews.
I remember that little bit of advice from our career counselors in college, when they were prepping us for interviewing when we graduated. They were right. It doesn't have to be much. Hell, it doesn't even have to be a hand written note. Send an email. Be sincere. It works.