|
I never refer to myself as an "engineer." I got to "Senior Programmer/Analyst" in my 20s and I've just continued to call myself a programmer. I've found that titles don't mean much in the software industry. I meet people just out of school a few years going by Senior Software Engineer. Either you can solve problems and add value to the businesses you work for, or you can't. Either way the title you use makes no difference. I know that many companies have internal designations tied to pay grades, like SWE II and so on. Other than the implied higher pay and more responsibility I don't think those titles mean much either, because they vary too much across companies. If you mean can we credibly call programming an engineering discipline, personally I don't think so, but I have friends who argue the other side. I think of engineering as a trade that has established standards and practices so every new batch of juniors doesn't have to start from scratch and make the same mistakes. Those practices should allow engineers to reliably, predictably, and repeatedly make something from a plan or specification. I'm sure I could find exceptions, but most of what gets called software engineering has none of those attributes. We can't predict or estimate software projects accurately, not even close. We can't promise a reliable result, or even that the result will meet requirements. Even if the project succeeds we can't confidently repeat the performance, or show another team how to succeed. I did some work in the automotive industry. The engineers who design cars and the processes to manufacture and test the cars work from very detailed specifications, and they can refer to a long history of what worked, what didn't, and why. Cars got incrementally better during my lifetime along multiple axes: safety, efficiency, performance, features, comfort. And the engineers who design and build cars can predict costs, schedule, and promise a working vehicle. It doesn't always go right, of course, but real engineering processes like that are a couple of orders of magnitude better at delivering as promised than software engineering. Literally decades of study have gone into making programming a more engineering-like craft. A lot of good ideas got written about and tried, but then forgotten and rediscovered and renamed, repeated over and over. When companies stopped mentoring and expected junior programmers to hit the ground running, trained at university or a boot camp or on their own, they discarded the apprenticeship part of the training actual engineers and people who work in the skilled trades still get. It doesn't help that juniors start calling themselves senior when they get their third or fourth tutorial project to run, but I think the failure to cultivate and grow talented programmers goes beyond a few eager young people wanting more pay. I feel lucky that I got into programming at a time when employers had to put some effort into training and mentoring, and growing their people into more responsible roles, because I don't see that at all today. That really was better in the past than it is now. And I think that's what separates real engineering from just calling something engineering: a shared body of history and understanding of the fundamentals of the craft, what has worked and what hasn't, and some provably correct principles that lead to predictable and repeatable software development. If you want to learn about how people get training in a difficult and competitive trade, learn their craft through apprenticeship and mentoring, read how Anthony Bourdain or Gordon Ramsey worked their way up as chefs. They didn't just get out of culinary school and call themselves masters the first time they didn't burn scallops. Mastering any complex skill takes time, practice, and the opportunity to learn from experts, and to learn from your own mistakes and the mistakes other people made. |