Is programming more in the category of writing than engineering?

Started by
15 comments, last by ambershee 10 years, 5 months ago

Most people would say that computer programming is an engineering job - they lump it in the same category as people who design engines and bridges. We even have job titles like "software engineer." If you want to study computer science, you have to take classes like calculus and physics.

But I have always thought of programming as being very different from other types of engineering. If you want to be a structural engineer, you need to be able to do things like calculating how thick a concrete pillar has to be in order to hold 1,000 lbs of weight. You use that calculus and physics knowledge directly. In programming, you may never use that stuff at all. Sure, I've used some dot/cross product, plane equation, etc. in my game development, but in my professional experience (business apps) I've never used more than basic arithmetic.

And recently I suddenly realized that programming is not engineering at all - it's writing. It's a very specialized form of technical writing. A computer program is nothing more than an instruction manual. The only difference is that when you write instructions for a human, you don't have to be as explicit because humans can think for themselves - you don't have to handle the corner cases.

When you're writing a difficult piece of code, and you can't get it correct right away, it's the exact same thing as writing an email or a paper and being unable to put your thoughts into words. When you're thinking "How do I phrase this?" it's the same thought process as "How do I write this code?"

So, perhaps there are tons of great programmers out there who have never tried programming. We recruit programmers from students who are good at math and science. Perhaps we should be looking for good writers instead.

Thoughts?

Advertisement

I'm a software developer, yet I'm teaching myself electrical engineering atm. Programming certainly comes closer to art IMO but not by much. Comparing it too much to writing ignores the logical thinking required with programming, I think.

But yes, it's possible to write "apps" being completely oblivious to maths and logic, in certain cases.

I suspect, in concept, it is closer to engineering, but likely, in terms of the actual experience and similar, is probably more similar to writing.

actually, I think it is more like reading or writing, but more directly tied into visual processing and thinking, rather than natural language which more often is tangled up with and has to take a route through auditory thinking processes.

I think it may actually be a little easier, as I have more "mental bandwidth" in the visual space than in the auditory space, which can often only really manipulate information about as fast as it can be heard or played back.

but, at least for me, the auditory route is more directly linked to semantics and "meaning", leading more often to code being handled in terms of visual manipulations, with some overlap with my sense of tactile experience (almost like if a person had extra arms which were able to quickly manipulate the thoughts within ones' head). sort of like where any thinking and associated mental and physical actions all sort of end up tangled together.

so, it gets confusing how it is best classified...

and, "the experience of endlessly manipulating bits of text in an editor and similarly manipulating bits of text in editors with ones' mind, often at several times the speed they can manipulate the text IRL, and typing out the bits of code which form within ones' mind" would be a woefully inadequate description...

nevermind if one claims that representations of data-structures seem to have a size/shape/feel almost like they were physically existent objects, where working with code and data-structures is an experience almost like messing with something like legos or similar (like, where the programmer can actually "feel" the code, which in some ways isn't just like flat text, but is in some ways almost like its own independent entity, which almost seems to quietly speak about what it wants to be and what it wants to be able to do, ...).

yeah, weird and meta I know.

so, I don't really know how it fits, if closer to writing or engineering, or how exactly writers and engineers seem to experience things.

I am aware though that when trying to write fiction, it is often an experience more like I am sitting around watching something happen on TV, and then describing what it is I am seeing, with some ability to "imagine" things which happen or are pulled into the scene (or to try to steer the action), which then influence what starts to happen (how the characters respond, etc...), then I basically pause/unpause or cause it to advance at a slower rate to give more of a chance to write about and describe what I am seeing (and don't often know how things will start to turn out before I start writing about them). but, at the same time, one also can sort of know the thoughts and feelings of all the characters in the scene, which in turn determine how they respond to the various events and actions by other characters, ...

but, I guess it is sort of similar.

I have sometimes found that I am slightly limited by what sorts of things I can imagine, like if I can't visualize an object or thing in space, I can't really describe or reason about it.

like, logic and math becomes like a physical mechanism, with the "shape" of the mechanism, interconnections of various parts, basically influencing how things "fall through" the device, ...

this gets to be a problem with more advanced math though, as things seem to go into areas which are harder to visualize or reason about as objects.

but, with a machine, one can imagine the device and its parts doing their things, and have a pretty good idea how it will behave, or just imagine the device from the known parts and "poke at it" and see what happens and similar.

or, you can pull a person (or big robot or whatever else) into the scene and they can poke at the device, or throw a stream or rocks at something, or whatever else.

(yet I still fail to make good game contents or think up much interesting to make happen in it...).

or such...

I engineer my code as though I'm writing to an audience of one. I have to translate what I want to communicate to the computer so it can understand what I'm saying. It makes no effort to try to understand me or care what I feel. I have to spoon feed it line by line until finally it seems to do what it took so long to coax it into doing. Sometimes the final version differs vastly from the original goal because the medium helps to shape the message.

Writing is not really equal to technical writing. I did programming, writing BS (on forums), writing user manuals and customer reports, designing very simple machines and designing Lego Technic.

According to my experience, the only two similar things in the line is machine and Lego Technic model design. I suck at writing (putting my thoughts into text) but I seem to be talented in technical writing and editing technical documents, user manuals etc.

All professions have similar traits but have very various depths in the different aspects, like complexity, maths and natural science involved, forgiveness about hacky and temporary solutions, number of aspects and conditions to be matched, the possible danger of usage, the range of users, the required durability, the life-spam, legal stuff etc etc.

Just an example: programming is much more forgiveable about hacky and temporary solutions than machine design, because it affects less areas, mostly maintainability.

I personally think it's exactly in-between.

The engineering part are the algorithms, the good practices, the logic, etc... It's there to make it work, be correct, robust and tested. However, merging all that elegantly into code is a form of art, like writing ...since we write the code for humans after all, not the machine. And how good you master the skill of writing code intuitive for others is the difference between an amateur and ...an "artist".

You are acting as if there is no component of artistry in other engineering fields, but this is simply not true (though I admit it may not be readily apparent to the casual observer).

There are obvious fields such as architecture and industrial design, which are plainly a fusion of engineering and art. But even the more-sciency fields (electrical engineering, etc) are not devoid or art. The overriding principle in engineering solutions tends to be "elegance", and elegance is a thoroughly aesthetic principle.

Tristam MacDonald. Ex-BigTech Software Engineer. Future farmer. [https://trist.am]

Yeah building a bridge or an office or a combustion engine or a toaster all require creativity, insight, innovation, artistic thinking, etc... just like building structures in code does.

For me, "software engineering" is largely thinking about how to write code on a larger scale. Most coders are not software engineers.

Anyone can make a model house out of popsicle sticks, but an architect worries about how to make a full-scale house that will actually stand up to real loads.

There's lots of bedroom coders who can make cool things in isolation, but a software engineer worries about how to modify coding practices so that 20 staff can all be coding on the same project, and what kind of constraints to put on the way those people write code such that the resulting product will be bug-free, easily maintained, and will perform under real loads.

A structure engineer can look at a pillar and tell you that it won't be able to hold up the floor above. They can tell you that if built this way, you won't be able to add a roof-top garden later without renovation at the foundational levels.

A (games) software engineer can look at a loop and tell you that it's going to saturate the L2 cache and bottleneck the CPU, blowing out your frame budgets. They can tell you that if coded this way, then later extensions to this module are going to require large-scale refactoring, rather than elegant connections.

Programing isn't just typing in text, just like writing for people isn't just typing in text. Both fields have "engineering" - when you're writing for other people, you have to consider how your audience will interpret your message. Do they have the existing knowledge necessary to understand what you're saying? Will they interpret your meaning in the way you want them to? How will they react to your message?

The higher abstraction layers of human communication include Social Engineering - engineering your interactions with people in a particular way in order to get the desired response from them. Patterns arise in social engineering similar to how patterns arise in software engineering - you have a particular goal or problem, and there are some ways to achieve those goals that have higher probabilities of success than others.


In short, I would argue the other way around: Writing is more in the category of engineering.

This topic is closed to new replies.

Advertisement