Updating Copyright Law for the Digital Age
Posted on December 2, 2007 | Filed Under Intellectual Property, Software Development
There’s been lots of talk recently about Canada’s soon-to-be-proposed copyright law, and like many people, I’m annoyed. Of course, I’m not really worried. This sort of law has been proposed in Canada in the past, and has been quickly shot down. I agree that we need to fix our copyright laws, but nobody in their right mind thinks the DMCA is the right direction to be heading.
Don’t get me wrong. I’m not one of the “intellectual property is evil” zealots. Intellectual property laws exist for a very good reason. These laws help society by providing an incentive for content production, by giving producers a temporary license to exploit it for profit. As somebody who enjoys content, I think this is a wonderful idea.
Unfortunately, current IP laws are broken in many different ways. I’m not going to bother listing them here, because it’s already been explained many times. I’m more interested in the underlying causes of these problems, one of which is that none of this legislation was created with any understanding for digital media or the computer industry. For example, without any requirement to eventually release source code, software companies are free to exploit most of their intellectual property indefinitely.
In an attempt to fix this, clever people came up with the idea of free software, and decided to wage war on the commercial software industry. The problem is that no matter who wins this war, society loses. If commercial software wins, we’re stuck with perpetual exploitation of intellectual property, and if free software wins, content producers lose much of their incentive to innovate.
Both sides will try to tell you that their solution is less harmful for society. I don’t know which side is right, and frankly, I don’t care. This is a false dichotomy. The right way to solve this problem is to fix intellectual property laws, not fight over which way of exploiting existing laws is better. Unfortunately, this is a problem that can’t be fixed until politicians start to understand the digital age. Lobbying doesn’t seem to be cutting it, which means that people from our industry are going to have to go into politics.
I know none of us want to do this, but let’s face it. It has to be done.
We’ll all appreciate your sacrifice for the greater good.
About this Post
Permalink | Trackback |
|
Print This Article | 1 Comment
Impressions of Microsoft
Posted on May 27, 2007 | Filed Under Microsoft, Software Development, Work
My internship at Microsoft as a Software Design Engineer ended about a month ago, and now that I’ve had a chance to let my thoughts and impressions settle, I’d like to share some of them with you. In many ways, working at Microsoft was exactly what I’d expected, but in many other ways it was completely different.
Probably the most unexpected thing I experienced was the high degree of autonomy I had during my internship. At the start of the internship, my team gave me a high level description of what I’d be developing, and introduced the the tools, frameworks and technologies I’d need to use. Then they had me propose a feature set and general design for the project, and let me loose to work on it. I’m not sure how similar this experience is to what other interns typically experience, but I really enjoyed it.
Another thing about Microsoft that surprised me was how vertical their management structure was. In hindsight it makes perfect sense. Microsoft is such a big company that they need to have lots of layers of management, or nobody will be able to keep track of their direct reports. Not to mention that with thousands of software developers employed, you have to provide a variety of career paths or you won’t keep your employees for an extended period of time. This has a side effect of insulating developers from upper management and other developers, to a degree. In many ways, this is a great thing to have, because it helps to minimize sources of potential distraction. The unfortunate consequence of this is that it’s very hard to get a feeling for the corporate culture in other areas of the company, areas where your chosen career path might eventually lead.
I expected Microsoft to be a monoculture, and it was, if not to the degree I had anticipated. I think this is probably one of Microsoft’s biggest weaknesses. In my experience, making difficult or innovative design choices gets easier if you’re familiar with different solution approaches in the problem domain, particularly ones that haven’t caught on widely yet and ones that have failed in the past. Personally, I think it’s far more important for employers to consider a potential employee’s exposure to a variety of development methodologies, user interface styles and programming paradigms than it is to require proficiency in the latest language of the month. It’s hard enough to be innovative if you’re already familiar with the bleeding edge of technology.
Finally, I was surprised by how much design effort was focused on avoiding the future need to break backwards compatibility. Personally, I’m of the opinion that breaking backwards compatibility isn’t something you should try to avoid; rather, you should try to avoid introducing any bugs into your code at all stages of the software development lifecycle. I can understand why software developers worry about it so much, because breaking backwards compatibility can annoy your users and maybe even open you up to litigation. The way I look at it, trying to avoid breaking backwards compatibility discourages and slows innovation and improvement. It’s like taking a sprinter, and making him wear a lead vest. Sure, he’s less likely to be shot, but if people are shooting at him it’s probably better to address that underlying problem directly.
I still think Microsoft has a long way to go in improving their software, but they’re surprisingly aware of their problem areas and are continuing to make progress. As far as I’m concerned, that’s fine; they certainly aren’t alone in having room for improvement. The field of software development is still in its infancy, so it’s not at all surprising that there’s lots of room left for improvement.
About this Post
Permalink | Trackback |
|
Print This Article | 1 Comment
Software Specifications
Posted on March 2, 2007 | Filed Under Project Management, Software Development
My classmate Wan just wrote up an insightful piece about software specifications from a project management perspective, making some great points about software development in general.
I couldn’t agree more with him that it’s vital for software developers to be collocated with product managers, testers, and everyone else they need to communicate with on a regular basis. Fundamentally, developing software is all about managing information at varying levels of abstraction. As developers, it can be all too easy to forget about the importance of good communication with our teammates.
But software specifications are more than just a form of communication between people. They also serve as a form of documentation, which in my experience, is the kind of information that software developers are worst at managing. One of the most dangerous things you can do with any form of documentation is to forget that it’s really an evolving document. During the development of any piece of software, its behaviour is in a constant state of change. If your documentation doesn’t change as well, you’ll be left with something that’s worthless, broken or both. To quote Norm Schryer:
When the code and the comments disagree, both are probably wrong.
It’s hard enough to keep documentation consistent with your software when it’s inline with your source code. Keeping software specifications up to date is even harder, especially if the only copy you’ve got access to is on paper. That’s why most agile methodologies recommend using unit tests in place of specifications, to force developers to keep things consistent.
I’m not advocating that all specifications should be scrapped and replaced by tests. Documentation is a vital form of communication with the future developers, product managers, testers and users of your software; not to mention with yourself in a year. The problem isn’t that we have to write it, it’s that we let it become inconsistent with the code.
Taking Wan’s ideas a step further, I think it’s important to do more than just collocate your team. You need to collocate your information as well, and keep your specifications as close to your source code as possible. Like a group of people, information is harder to manage if it’s scattered all over the place.
About this Post
Permalink | Trackback |
|
Print This Article | Leave a Comment
