Stop trying to compare it to engineering and fine art.
Could you elaborate on how programming is different from engineering? I feel like if programming seems that different from an engineering discipline, you're probably doing it wrong.
Engineering is actually getting more like programming, with CAD and simulation testing taking the place of coding and testing. And some types of engineering (circuit design in VHDL/Verilog) is programming.
I've never engineered, but from what I've gathered, the main difference is that in engineering, you have to be really careful about writing down a design, because once you design a car or an airplane or even a shoe, it takes a lot of human effort to build the actual car/airplane/shoe, and you really want to make sure it won't crash before you test it. It's costly to reiterate a design before release, if that iteration involves a full design-manufacture-test cycle. Whereas in programming, we can build the actual program whenever we want (compilers are fast and cheap) so we usually start from an initial design that's completely broken and incrementally refine it. Even the largest scale programming, done right, has a "nightly build", the engineering equivalent of changing your airplane design in the afternoon, manufacturing it at night, having a test pilot fly it in the morning, and discovering that afternoon why the test pilot and your new airplane are now in hundreds of pieces spattered across the Nevada desert.
I hear you, but to me that's a difference of scale, albeit one that allows you a greater tolerance for risk during the engineering process.
I wouldn't argue that chip design is not an engineering process because because the risk/build profile differs from that of a bridge, nor would I make a similar argument for bridges versus cars or dams or spaceships. To me, engineering is a really broad term that encompasses software just as easily as it does physical components.
It's a massive difference though. A single software project might go through a few thousand iterations of a complete build, test, development cycle. Some projects probably go through that a week. That's completely different to the average engineering project.
I hate being called a 'software engineer', as it's pretty much nothing like what I do.
The only similarity is that we both "Build stuff".
I hate being called a 'software engineer', as it's pretty much nothing like what I do.
Ironically, having studied several engineering disciplines, I feel precisely opposite of this. I want people to understand that building reliable software is an engineering effort.
In my work, I try to balance competing forces and constraints to design reliable, elegant, modular, well-tested components at low cost. Just like practically every other kind of engineering I've ever seen.
And that's one way of doing it that resembles engineering.
Just as engineering can resemble programming, programming can resemble engineering. But trying to imitate what engineers do limits what you can do as a programmer. Programmers also work on multiple levels of abstraction in a way that I imagine to be somewhat different from engineers.
Abstract concepts are imperfect. Chip design isn't exactly programming because the final product requires fabrication, no matter how well you can fake it with simulators or FPGA's. (In situations where FPGA's are useful in deployment, I guess "chip design" would become "programming an FPGA" and you would get the benefits of quick building that programming gives you.) Likewise, we can design an airplane in CAD and put it through a computer simulator, which might allow a more programming-like design experience. But "engineering" implies that it's a separate step from manufacturing or assembly, whereas a programmer goes from idea to built parts within hours (not the whole system but definitely a subset of it).
Could you elaborate on how programming is different from engineering? I feel like if programming seems that different from an engineering discipline, you're probably doing it wrong.