Comment by choeger
4 years ago
Counter argument: If the experienced programmers stay where they are, software development will forever remain craftsmanship. A single developer can only tutor so many juniors.
In fact, I think that teaching and encouraging to learn is the most important thing in SE. And that has to begin with leadership figures that don't believe their own knowledge gets obsolete after one year just because the latest framework got released.
SE should not be an art form. It should be founded in solid science and abstraction should allow us to keep our knowledge applicable. You're not a bad engineer because you never touched the latest hypetech or programming language. You are a bad engineer if you only consider yourself a "frontend developer with react on chrome".
All IMO, of course.
> SE should not be an art form. It should be founded in solid science and abstraction should allow us to keep our knowledge applicable.
Software engineering can never be anything but an art form!
A lot of fields of endeavor have both mechanical "science-based" components and creative "art form" ones. An inexperienced chef can get some productive cooking done by mechanically following the steps of a recipe someone else wrote--cutting up vegetables, operating the stove, and so on--without making culinary decisions of their own. Experienced chefs, though, come up with ideas for things to cook, which you can't effectively do just by following some procedure. You need to have some creative je-ne-sais-quoi.
In software engineering, we have no long-term need for the first category of people. Any programming task that doesn't require human creativity can be automated. (When's the last time you decided which CPU registers corresponded to which variable names in your program?) An effective programmer uses abstraction for precisely this purpose. They spend all day, every day on making the hard decisions, and they let the computer handle the rest.
This is why Enterprise Software Architecture techniques have always been and will always be doomed to fail. You can't have senior engineers come up with rules that junior engineers can just mechanically follow to write good code. If you could, you wouldn't need the junior engineers, since you could just tell a compiler or code generator or something to follow the rules instead. Everyone who works on a codebase needs to be capable of making good decisions about code, in a way you can't boil down to science and checklists, or the best they can ever do is waste their own time producing repetitive boilerplate.
If you look closer everybody who create something on work, like every craftsman, is a kind of an artist. But it pays very badly, so even for people who like the job, are forced to step up into the office, because of the better pay. That is part if the reason, why you almost can't find a good plumber or electrician. If you can count to 2, you are forced out of the job. As you long, as you write software by yourself, you are not much different than a plumber .. you work with your hands.
> As you long, as you write software by yourself, you are not much different than a plumber .. you work with your hands.
There is one small difference - a plumber needs to design some piping and then execute it which takes more time than designing. After writing code, programmer just presses a button and results are made by computer. Otherwise, there is some overlap. There are many programmers, who are not more skilled than a skilled plumber or whose job is not more crative than that of a plumber, but we call them "juniors".
1 reply →
I get this sentiment often, but I think it is incorrect. Software developers should not consider themselves artists - they should consider themselves designers. Yes, a designer has some freedom to express themselves, but mostly they should satisfy the customer. Think of someone designing a lamp for IKEA. The functional and nonfunctional constraints outweigh the artistic freedom by far. Software developers have one advantage over the poor soul that has to come up with that lamp, though: For us there is serious, hard, science that tells us what can and what cannot work. The IKEA designer must rely on market research.
I think you've got heuristics and art form mixed up
Good software development can't be anything but craftsmanship, or art if you think of "art" as in "artisan".
Think of what a developer is, and what a computer is. A computer is a dumb machine, it lacks creativity, it is only good at executing orders, but that, it does it very well, and very fast. A programmer is a human, creative and able to see the big picture, his task is to inject his human qualities into the dumb machine, so that the machine can do things that are useful for humans.
So, programming is the opposite of applying recipes, if there is a well defined recipe, that's for the machine, not for the human. If programming is not an at least a little bit of an art form, it means the programmer is doing the job of the computer, which is a waste of valuable human time on something the machine can do better.
I'm somewhere in the middle. I see software development as an art form, however it's not disconnected from its solid scientific roots.
Sometimes, the art part is for fun (i.e.: your weekend project), sometimes it's for pushing systems to the limit (i.e.: scientific programming, demoscene, or where performance is really needed).
In my case, the art is exploiting the hardware or the theory in a way that it works smoothly and very performant for the cases you have.
This doesn't mean the deadlines doesn't matter, and explicit, slow, but very robust code doesn't have its place. On the contrary, it has many places. We need to make the correct trade-offs to get our job done the best way possible.
On the mentoring side, training people is hard, because of both parties. Low ego, open mindedness and being open to being wrong is very important. I try to mentor some people around me, and I encourage them to go further than I did. Lastly, I find passing the "old way" to new generations very valuable. While these old ways are inevitably lower level and less hip, they're tried, stood the test of the time, and generally performant enough (or very performant in some cases).
Just a side note, your idea of art is a bit naive. Take for example the work done by Christo and Jeanne-Claude, citing wikipedia:
> Their work was typically large, visually impressive, and controversial, often taking years and sometimes decades of careful preparation – including technical solutions, political negotiation, permitting and environmental approval, hearings and public persuasion.