Earlier quoted context omitted.
Yeah, software engineering is a craft, and generally the only way to learn those fast is to learn from others.
It's not a craft, in its purest form it's an engineering discipline with specific rules, procedures and standards. The crucial point is that most of us a doing programming, and not software engineering. Learning from others is hit or miss. One can certainly learn to program from others, but that's not enough to be able to do software engineering.
Sorry, but I have to strongly disagree. In it's purest form the core of software engineering - i.e. programming is a craft. The other parts are mostly about creating processes so that craftsmen can create something together without stumbling into eachother.
The difference between a craft and engineering are numerous.
- engineers generally need a license
- engineering is about repeatability and creating dependable cost estimates
- engineers are required to study for years for a very good reason. You can be a rockstar programmer out of highschool.
Just having a bunch of cargo cult gibberish bound into a book does not make a craft into an engineering discipline.
It's harmfull to call programming engineering. Engineers have curriculums that can teach them pretty well what is expected of them once employed.
Not for programmers - or, well, software engineers. If there was even one curriculum that could churn out good programmers dependably, don't you think this model wouldn't be copied instantly elsewhere? If such a curruculum existed, do you think think software interviews would be filled with whiteboarding just to check out that the candidates understand even the basics?
I think this incapability to create a curriculum for actually creating good programmers is the best evidence that programming is a craft. It's such a complex topic that you can't create a mass curriculum that would serve all equally. Not with our current understanding, anyway. Maybe if we could teach everyone assembly, and Haskell , and have them implement compilers and languages as a standard things would be different.
The second best way to learn programming without being born a programmer savant is to learn from others while doing. Apprenticeship is the traditional way to train craftsmen.
Programming is so much more like a craft than engineering that it's best to call it a craft.
Craft is not a deragatory term. It just means we don't understand it theoretically well enough to teach it properly.