Quote:
|
Originally Posted by Astronouth7303
If I were an employer, I would hire the guy with a degree. But how much of it can be self-taught and/or mentored? I have 0 formal schooling in what I do, but as a software engineer I am capable and becoming more so every day. I may not measure up to the guy with a PhD in Computer Science, but I'm doing pretty well, I think.
|
Well, it looks like you've taken some heat for this quote. Whether or not you agree with the other responses, many of us mentors on these forums who have earned degrees in engineering (me: BSE, Computer Engineering, University of Michigan) do get offended when we see students call themselves engineers. I thought I'd give you my personal reasons for why I feel that high school students are not engineers, with a heavy emphasis on the software engineering perspective.
Software engineering is an interesting field because almost anyone with a PC at home can learn some of the skills required by it. Students interested in software engineering can sit at home, learn programming languages, write code, and perhaps even release products to others, with little more than a $1000 computer that most people probably already have anyway. Contrast this to mechanical engineering where you can probably design a part at home on your PC but it's much more difficult (and expensive) to actually produce that part or sell it to others. I noticed this theme in college quite a bit: even in our freshman computer engineering courses we were writing real programs, compiling, and testing them. Most other disciplines were primarily working with equations and story problems for the first year or two. This is both a good thing and a bad thing at the same time. What this means is that the world of software is
very tinkerer and hobbiest friendly, because the cost of entry is so low. This causes a lot of people who know how to tinker with computers and how to program to think they are software engineers, but they're not.
I know this is getting long already, but I have a little more to say, so bear with me. There is a distinct difference between a
software engineer and a
programmer. I've seen people in many places (even on ChiefDelphi) claim that people who write software for a living are not engineers because programming is really not an engineering discipline. At first, I'm offended. When I think about it for a second, though, I realize I mostly agree. Programming is not
necessarily an engineering discipline, but it can be.
The reason that I do not hesitate to call myself a software engineer is simple: our software development process is just like any other engineering discipline. When we are ready to create a new software product, we do not just start hacking on code (like many programming hobbiests do). We start by gathering customer requirements. We break these customer requriements down into various product requirements. We break those requirements down into software subsystem requirements. And we keep going until we have requirements that tell us exactly what each piece of software needs to do. Once that's done, we move into an architecture phase. Architecture is where you determine which functions or classes will be used and what they will do (or, "How do I effectively organize my code to implement the stated requirements?"). Next is design, where you add more detail to the architecture. Arguments for each function & method are determined, class attributes are determined, etc. Only after all that is any code written. Many software engineering projects run for months or even years before anyone even begins to write any code. Then, after the code is written, there's lots of testing. We do unit tests (which is just testing the piece of software we wrote), integration tests (verify that your stuff still works when combined with other people's stuff), box test (verifying that the entire product does what it's supposed to do), and system test (verifying that every product in the system works correctly with all the other products).
This software development process is (I believe) very similar to the processes used in other forms of engineering. And, even in college they didn't really do a great job of teaching us all of that. It was only after I started my job that I really learned what "software engineering" (versus programming) was all about. I probably only spend 10% of my time as a software engineer actually writing code. The majority of my time is all the other stuff I mentioned, which is also the stuff that 99% of the hobbiest and moonlight programmers usually don't know anything about. If you do happen to follow all those steps when you develop your projects, then great: you're definitely ahead of the game, and it will benefit you. But I can tell you that most companies like Motorola are not going to hire someone to write software without a formal degree, because it's pretty difficult to verify someone's abilities like that. At least when they hire someone with a degree the odds are better (though still not 100%) that they will know what they are doing.
Bottom line: hobbiests, hackers, and tinkerers can fiddle with something and make it work. Engineers are people who
engineer solutions to problems.