Why software development is fun?I discovered something from a book written Frederick Brooks. What delights may its practitioner expect as his reward? Something is terribly wrong with the way that we try to make large pieces of software. For several years now, I have had the nagging suspicion that we are trying to imitate entirely the wrong crowd of people. We keep trying to act like engineers. We, software developers, are simply not engineers at all. This is different, because building software is not at all like building bridges, thousands of which have been built before, in every conceivable situation, for a huge variety of purposes, using innumerable kinds of materials. For us, every creative act is one which explores a new medium, new materials, new dimensions. Perhaps, a few hundred years from now, software building will become repeatable, predictable, and therefore "engineerable".
First is the sheer joy of making things. As the child delights in his mud pie, so the adult enjoys building things, especially things of his own design. I think this delight must be an image of God's delight in making things, a delight shown in the distinctness and newness of each leaf and each snowflake.
Second is the pleasure of making things that are useful to other people. Deep within, we want others to use our work and to find it helpful. In this respect the programming system is not essentially different from the child's first clay pencil holder "for Daddy's office."
Third is the fascination of fashioning complex puzzle-like objects of interlocking moving parts and watching them work in subtle cycles, playing out the consequences of principles built in from the beginning. The programmed computer has all the fascination of the pinball machine or the jukebox mechanism, carried to the ultimate.
Fourth is the joy of always learning, which springs from the nonrepeating nature of the task. In one way or another problem is ever new, and its solver learns something: sometimes practical, sometimes theoretical, and sometimes both. Finally, there is the delight of working in such a tractable medium. The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures. (As we shall see later, this very tractability has its own problems.) Yet the program construct, unlike the poet's words, is real in the sense that it moves and works, producing visible outputs separate from the construct itself.
Software development is fun because it gratifies creative longings built deep within us and delights sensibilities we have in common with all men. The Woes of the Craft Not all is delight, however, and knowing the inherent woes makes it easier to bear them when they appear. The next woe is that designing grand concepts is fun; finding nitty little bugs is just work. The challenge and the mission are to find real solutions to real problems on actual schedules with available resources. This then is programming, both a tar pit in which many efforts have floundered and a creative activity with joys. Optimism All programmers are optimists. Perhaps this modern sorcery especially attracts those who believe in happy endings and fairy godmothers. Perhaps the hundreds of nitty frustrations drive away all but those who habitually focus on the end goal. Perhaps it is merely that computers are young, programmers are younger, and the young are always optimists.This then is programming, both a tar pit in which many efforts have floundered and a creative activity with joys and woes all its own. For many, the joys far outweigh the woes, and for them the remainder of this book will attempt to lay some boardwalks across the tar. Extracted from "The Mythical Man Month" by Fred Brooks.
"Why is programming fun? What delights may its practitioner expect as his reward? First is the sheer joy of making things. As the child delights in his mud pie, so the adult enjoys building things, especially things of his own design. I think this delight must be an image of God's delight in making things, a delight shown in the distinctness and newness of each leaf and each snowflake."
-- Frederick P. Brooks, Jr. from MythicalManMonth While some people write programs to solve important problems, or just to get a paycheck, many programmers actually enjoy the activity. Many mere mortals can't understand why. Here are some of the things that programmers enjoy about programming:
Creativity Programming is, in a way, like writing poetry or music. It is an intellectual activity where one creates structure out of nothing. And the things one creates can have significant value to others. See also SoftwareIsArt
Model Building One of the things a programmer does is to create elaborate logical models of the world (or other domains). A programmer constructs a bunch of things in an imaginary universe, and then sets them all in motion. And the programmer gets to set and to change the laws of these universes. This is fun in the same way that playing with model trains is fun.
Learning How Stuff Works Some people enjoy taking things apart and figuring out how they work. Programming takes this to another level--not only do you figure out how things work, but you can also figure out how to write code to make them do things differently. Programmers get to learn how networks work, how telephones and modems work, and learn a lot about the domains for which they are writing applications. Knowing more than other people do is a rush.
Learning New Things Programmers are constantly using new operating systems, new programming languages, new database management systems, new libraries, etc.
Power One of the things programmers do that makes them and their associates say "Wow, that's cool" is when a small amount of effort results in a huge change in a system's behavior. (Of course, the danger is that these widespread changes will have undesired effects.) Programmers, even the most junior ones, make decisions every minute that impact the users of their programs.
Puzzle-Solving Programmers solve lots of complicated problems. The more complicated, the more enjoyable they are to solve. Some people solve those problems such as from InternationalCollegiateProgrammingContest "just for fun".
Adulation of One's Peers Programmers love it when other programmers look at their work and say "Cool! How did you do that?"
Seeing One's Creations Live On There's something special about walking into a shop or bank or whatever and seeing one's work living in the world with its own independent existence. Knowing that code one has written is executed thousands of times every day is quite a thrill.
Getting From It What You Put Into It The counter-point to ProgrammingIsNotFun's "Most Programs are Boring" item: If you are bored, you can always inject new life into a problem by trying to automate it, abstract it, or otherwise solve a larger problem simultaneously. For example: Creating, displaying, and updating database records. Moving data from one place to another, possibly making some trivial change to its representation. Writing "glue" between other modules/components. Printing tabular reports.
Deep Concentration Programming often involves going into a deep form of concentration, somewhat like meditation (see MentalStateCalledFlow). This feeling is enjoyable.
Getting stuff done It's a craft, a trade. In the evening, you hopefully see the results of your doing, very much unlike some consulting or management jobs. I really connect with this idea. This probably seems silly, but I always think of the part at the end of Pretty Woman where Richard Gere gets into a Newport-News-like defense contracting business after having made all his money not really producing anything. His new business partner says "we're going to build greaat big ships together." I think that's a good analogy that describes the difference between what I do and what a lot of other people above and around me do.
Why software development is fun?
"A favorite programming moment is when I get to fix a bug in code that already has a good unit test. Such work is often akin to putting golf balls into a neutron star's gravity well; I get this can't-go-wrong feeling."—from Kristofer Skaug.
"If it isn't fun and profitable, what the hell are you doing in the business?" by Robert Townsend, Up the Organization— from Jim Roberts.
"The knowledge of the best algorithms is the science, and the imaging of the structure is the art. The details of algorithms, writing efficient lines of code to implement transformations on those structures, is the trade aspect of programming. Technically, this is called maintaining the invariances in the structures. Writing the code to maintain invariance’s is a relatively simple progression of craftsmanship, but it requires a lot of care and discipline." -- MichaelLeach
From my point of view and my current choice of that people. Everybody can find something and enjoy it, for example: writing a code, testing, project management in information technologies. - Agafonov Slava