4 ms·
Great write-up on that subject is in the first chapter of "Mythical Man-Month". Here is small excerpt. Why is programming fun? What delights may its practition
by matesz 7y ago
Great write-up on that subject is in the first chapter of "Mythical Man-Month". Here is small excerpt.
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.
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 the 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 re- moved 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.)
- OskarS 7y agoSuch a great quote. I think the thing is that people weight these "joys" differently. I know that for me the learning part is probably the most important: I love the feeling of becoming better and getting a deeper understanding of unfamiliar systems. Doing the same kind of coding for decades in the same language seems very dreary to me. On the other hand, the "making things that are useful to other people" is not that important to me. I mean, it's nice when the stuff I make is useful to other people, but it's not the primary thing that makes me love programming. So, I think the thing is that you need to figure out why you loved it in the first place? Is it "joy of learning"? In that case: go find a weird new programming language and dive deep into it (become one of those weirdos that think everything should be made in Haskell or Prolog!). If on the other hand you like making things that other people find useful, go look for open source projects you can contribute to. Think deeply about what it was that made you love programming in the first place, and what parts are missing now that existed back then.
- ekrebs 7y agoI find this fascinating. For me, the lifelong learning is a chore, completed in order to do what I love: creating things. And watching people use my creations to do things they couldn’t before is a reward on its own. I imagine it’s like a teacher watching their students apply their lessons in daily life.
- boris 7y agoAnd the rest of the book deals with why it is more often than not painful. In summary, it's complexity. Brooks argues that software, being a pure thought-stuff, is also the most complex thing we attempt to build. And it's even worse now than in his time with any concern for quality taking a back seat in the face of competitive pressures. So it's not really surprising that slapping together ever more complex systems out of ill-fitting, purely-designed components is not fun.
- jeffreyrogers 7y agoAfter taking a break from software side-projects to work on more physical things (woodworking, metal-working, welding). I have to agree that software is one of the most complex things we work on. Even something quite complicated that's evolved over decades, like a car, is largely comprehensible to a single person without an enormous amount of effort (i.e. many people understand how every single subsystem of a car works), while understanding everything in say linux or postgres takes a much higher level of effort (it can be done too, but there is a lot more complexity to keep track of).
- _bxg1 7y agoIt's so weird to me that software's complexity is such a force of nature. My instinct is that no implementation of a piece of software should ever need to be more complex than the idea of it is (fully and precisely articulated, of course). Yet the code is usually orders of magnitude more complex than that. I don't understand why we can't solve this problem.
- 9diov 7y agoThe paper "Out of the tar pit" (https://github.com/papers-we-love/papers-we-love/blob/master/design/out-of-the-tar-pit.pdf https://github.com/papers-we-love/papers-we-love/blob/master...) discusses this in more details. Basically it argues that one needs to separate the complexity into essential complexity (complexity inherent to the problem) and accidental complexity (complexity due to the way the solution is designed). The idea is to reduce accidental complexity as much as possible while making the essential complexity more managegable. The paper also discusses that you can separate a program into 1. state (data that changes over time) 2. behavior (computational logic) In order to reduce the accidental complexity, you can use functional programming (which is purely behavior, devoid of complexity due to state mutation) for the behavior part. For the state part, you can use a relational database to manage it in a more systematic manner. They call it functional-relational approach to software design. If you do game development, you likely heard of ECS (entity-component-system) and data oriented programming which in a way promotes this approach to software design.
- lnenad 7y agoI completely agree on everything said. I think we all need some personal projects to give us creative freedom and let us do things the way we feel they should be done without inhibition. When I was making https://mockadillo.com https://mockadillo.com, I made all of the choices I wanted to make, vanilla JS, simple interface, no unnecessary bloat, and I loved every moment of making it.
- konart 7y ago>Here is small excerpt. ...that has nothing to do with the problem in my opinion. Yes, programming is fun in general but then you come in touch with the reality of the job only to find out once again that 1. you are not making things, most of the time you maintain some old crap because nobody wants to spend time and money on building a new better version etc 2. The thing you are working on is useful but you can't really tell how. The damn thing is so big that all your input after years of work is almost invisible to anyone, even on your team 3. Library here, framework there and most of your own code is just a clever way of putting them together. Fascinating at the beginning, a boring routine a few years later 4. okay, sure, that's enjoyable, sometimes too much. 5. Again - works in theory, breaks after the next meeting. "No time to rework and polish. It works somehow and generates money, so go help those guys finish their work. Bad architecture? Hard to maintain? No matter, management sees only frontend anyway"
- avgDev 7y agoI feel like this sums it up pretty good for me. Even today when I get challenged and have to come up with a clever solution, I'm enjoying it but 90% of work is fetch data, show on front end, user edits, save in database. I have been working on a large project for over 6 months now, 30k lines of code.....it still feels like I have not done much.
- vbezhenar 7y agoWork on small projects. I'm writing all projects myself and it's still fun, when you decide everything. I can write my own HTTP server implementation if I feel like it.
- avgDev 7y agoI do plan some side projects to do in vanilla JS, which should be more fun. However, at work I'm working on a significant project, and it can become a real drag.
- vlasev 7y agoIf 90% of the work is this repetitive, perhaps you could create methods and tools to make the process quicker?