Nature of Software Development
- How to prepare for a career in software development: There’s no substitute for learning on the battlefield (Alistair Cockburn)
For a fast-moving field like computer science, the work you’re doing is far more relevant than any classes you’re taking. If you must choose between formal schooling and work experience, always choose work. If you’re in school, aggressively pursue real-world experience that compliments your schoolwork.
Fortunately, this is a battle you can fight on multiple fronts:
- If you’re a student, seek out internships like your life depends on it. Some of the best programmers I’ve ever met have been college interns. Intern somewhere that you can absorb and learn as much as possible. You won’t make much money, but the experience will be priceless.
- Participate in local user groups. User groups are an unbeatable resource for people just starting out in their careers; they’re an excellent source of advice and mentorship.
- Contribute to an open-source project.There are thousands, so pick whatever strikes your fancy. But pick one and really dig in, become an active contributor. Absolutely nothing is more practical than working collaboratively with software developers all over the globe, from all walks of life.
- Publish articles. The cleverest code in the world won’t help you if you can’t clearly communicate how that code works, or what it’s for. Try your hand at writing. CodeProjectis an excellent sandbox to practice in. Publish an article and the large, active CodeProject community will let you know how you’re doing with ratings and comments.
- Start a blog. Pick a writing schedule and stick with it; I recommend once a week at minimum. Select a general theme for your blog and write on topics related (at least tangentially) to that theme. And don’t be an echo chamber.
From the same Cockburn’s post, software development is…
- anything goes (courtesy of Paul Feyerabend)
- not a zero-sum game
- people communicate best interactively face-to-face
- cooperative, finite, goal-seeking, group game
What is software development, really – and does it matter? The answer to the second question is Yes, it matters to you a great deal. If software development is really a science, you could apply the scientific method to it. If it is really engineering, then you could apply known engineering techniques. If software development is a matter of producing models, then you should spend your money developing models.
However, it is none of those. It is a “game”, a game of speed and cooperation within your team, in competition against other teams. A game against time, and a game for mind-share. You should spend your money to win that game.
Viewing software development as a game gives you better ideas on where to spend your money, how to structure your teams, and how they should allocate their efforts.
My two cents:
If you view software development as a business, then you should be making money out of it. There are two ways: Either you go proprietary or open source. With open source, you make money around services, not the software itself.