So you want to be a software developer? Well, take heed. There’s more to it than you think.
For instance, building computer software is…
- New. Most other sciences have had hundreds of years of development. Construction, for instance, has been going on since the early days of the Romans, when they built acqueducts, colosseums, roads and palaces. To contrast with, the very first computer was built in the 1940′s, and has since then multiplied exponentially in processing power. We’re continually building bigger and faster computer systems, and no one has ever done this before. We’re all trying to invent better ways of doing it. Sometimes we fail.
- A science. There are definite ways of doing this. All computers build on logic; and logic is a form of math. Math needs to be taught, learned, worked with and expanded. “Best practices” are formed; patterns of reusable ideas and materials have been compiled. There are many ditches along the road in which your code can be destroyed.
- An art. Some parts of software development can not be taught. A person intent on doing everything by the book will miss his goal: It will either be too complex, too rigid, too weak, too expensive… The art of computer software is finding that Zen-like balance of perfection, where costs are balanced against structure, functionality against complexity. Someone said about project management in software: “Good, fast, cheap – pick two.” Somewhere in there is that elusive goal where you actually can pick three … but it takes skill, intuition, experience, and a sense of artistic balance which no science in the world can teach you.
- Changing. Someone said, “Building a program is like building a bridge.” The reply is, “Building software is only like building a bridge, if you’re building it on Jupiter, using new and unresearched tools, and with materials that didn’t exist five years ago.” The computer world is constantly changing: New ideas come forth, new metholodogies are designed. New platforms to build software on appear, the tools are changing, old technologies fade away and new show up. Moving too fast, or too slow, can get you into problems. Maybe you take a path no one else took. Maybe you moved too slowly and now your platform is no longer available. To build software, you need to move ahead, in the right direction, and possess sufficient adaptability to embrace new technologies as they become reliable.
- Complex. Because, probably, you’re not the only guy working on it. Chances are, you’re a team of people each building his own part. This means that you need management; you need to communicate your ideas; decide on important principles; not run into each other or building the same thing twice. You need to keep track of how things are going. You need to coordinate so the software can be observed and tested along the way, so you can see how it develops and functions. It’s an iterative, distributed process; and as any such process, it’s hard, because human beings don’t naturally communicate and coordinate. It’s an attitude that needs to be fostered into culture over a long amount of time. And sometimes you fail, and that means your project can fail.
- Dangerous. A lot of projects fail. By failing we mean, it goes over budget, it takes longer than it should, or sometimes it never even completes but bogs down in a morass of unfinished parts. Some projects even drive businesses into bankruptcy. And that means you can lose your job – even if it’s not your fault, but someone elses.
- Gut-wrenching. Most software performs an important activity in the Real World. Maybe the software runs hotel booking systems, or telephone switches, or ATM machines. Whatever it does, if it doesn’t work correctly – or, worst of all, crashes suddenly – you are going to know it. And you have to fix it – fast! It’s a special feeling to see the code you built suddenly handle hundreds of thousands of transactions per day. And if you made an error somewhere, people are going to get annoyed, angry, or furious. In some cases, such as if you’re building mission-critical systems – people may die.
- Difficult. Some times, you have to be out on new ground and do things you never did before. That happens a lot of the time if you’re building new stuff. You’re deciding between different solutions, different tools; whether to go this way or that way. And both of them cost money, and you need to make the right decision because eight months down the line, you may not be able to go back and change it. This means you need to read books, study technologies, learn new subjects, catch up on your database skills, investigate new fields, and read complicated, technical manuals. Most of this you’ll have to do in your spare time.
- Boring. Because there’s a lot of mind-numbing activities you need to do, too. Like writing documentation, thus making sure that other people will understand what you’ve done; or translating between different languages, because suddenly you’ve got customers in Japan, or Finland, or Mexico – and they need to understand you. Merging branches, estimating development time, implementing dull features in difficult programs are all things you need to do but rather wouldn’t. But all of those beat the most boring activity: Sitting down at the end of the month and trying to figure out what you’ve done, so you can fill out the time sheet. Or you won’t get paid.
- Stressful. There’s no such thing as a lot of time on a project. Most projects in the business world need to be done yesterday. Sometimes projects take longer than expected, and this means new projects may start up before the old ones are done. Sometimes customers interrupt, sometimes your boss interrupts, sometimes things go drastically wrong when they shouldn’t; and sometimes, for no apparent reason at all, your tools give up and die. You need to be able to speed things up in a hurry, work evenings and weekends, and code fast, should that be required of you.
- Incredibly fun. The joy of sitting down and building a new component with tools you like, perfecting a solution, designing a new system that you just know will work beautifully, can not be underestimated. For software developers, the tangible rewards in the form of money, luxury or similar is usually not the motivating factor. The reward is more in the form of being able to sit back, look at your Michaelangelo of art that you just built, and be immensely proud of that little labor of love.
Such is the life of a software developer.
You’ve been digged: http://digg.com/programming/So_You_Wanna_Be_A_Software_Developer
:)
^ haha