I always thought that being an Engineer assumes you have knowledge of mathematics. The way this word is being used in Software ist kind of strange. "I built a blog in php, I'm a Software Engineer" - this feels kind of awkward to me.
Most of us (engineers of any kind) learn quite lot of maths during uni, and most of us forget 90% of that as it's not needed in most jobs, which is a shame.
The thing I have needed all the time is statistics and prob. theory, that keeps coming up literally everywhere. Calculus - not so much. If you need something, you can always re-learn it quickly. (For example, I learned quite a lot of linear algebra, but haven't used it for ~10 years, so when I had to write some 3D gfx/shader code, I had to spend like two days on quaternions, etc.)
I find my self surprised just how often Linear Algebra pops up. A few years ago I was doing some work with Splines, trying to smooth some noisy plant data and I had to relearn matrix decomposition (LU factorisation). Every year or so since I've been ambushed by some other "stealth" aplication of linear algebra in something you'd otherwise think would not be applicable. Nowadays my old beat up linear algebra text book from uni sits right beside "C in a nutshell" and the printed GDB manual on my shelf at work.
And that assumption is wrong. You don't need any knowledge in advanced mathematics to engineer many types of software, that doesn't make the creator less of a Software Engineer.
Being an engineer means using technology, science, mathematics to solve problems. Well in many cases you don't need math to solve these problems. The word itself as no root in math either, it's based on latin for devise/contrive, sure it was used for builders at first, where math was important, but context changes.
Also Software Engineer is wide and reaching, a 3D GFX Software Engineer will need some heavy mathematics to do his job and do it well, a Web Software Engineer not much, but he'll need to know a wide range of other knowledge GFX guy doesn't know (HTTP, network protocols, various languages, server technology, database technology, browser knowledge,...).
It's not about being good at mathematics, it's about knowing as much as possible about the domain of knowledge your role entails, and surprise, not every one of these requires deep math knowledge and understanding.
>Being an engineer means using technology, science, mathematics to solve problems.
That's called practicing engineering. An engineer is a professional practitioner of engineer. You can practice engineering all you want, but if you're not a professional (having received an engineering degree from a certified university), it's dishonest to call yourself one. Honestly, it is elitist. But those of us who obtained our degrees worked our asses off. And I personally hate when people abuse the term to mean anything that took skill. "Candy cane engineer". "Beats engineer". "Drink mixing engineer". It's linguistic prescription to make yourself sound more important/skilled.
Plus, do you really want to drive across a bridge every day that was designed by someone you don't know, someone who was self-taught in the ways of technology, science, and mathematics?
I love this answer. I find technologists can often be complete snobs about their particular niche of expertise. Math, computer science, computer engineering and software engineering are each way too big for anyone to be a true expert in any of them. I find once you've spent some time learning multiple disciplines you tend to realize how little you really know and become a bit humble about your own abilities.
I'm employed as a Software Engineer now but my degree is in ECE. The engineering curriculum at my university (Rutgers) was extremely math intensive. I didn't take a whole lot of software classes but I'm glad I did take all that math. I think it's dishonest to call yourself a Software Engineer and not have an engineering degree. Semantics, but I earned the title.
I understand where this feeling comes from. You worked hard to earn what is (or what should be) a title with prestige: engineer. I too worked hard to earn degrees in engineering. I try to live up to that title every day, and I'm sure you do, too.
But my years of engineering experience have shown me that the title "Engineer" is really more about how you approach problems and what you do to solve them and less about degree credentials. Now, the following example is in the context of electrical engineering on airplanes, not computer programming, but I think it holds true.
One of the best people I work with does not have a college degree. But over years of self-study and real world experience, he has taught himself electronics, some computer programming, and enough mathematics to get by. And when there is a technical problem to be solved on one of our airplanes, he will chase after it relentlessly, and smartly, until it is solved. His system designs are clean and well thought through. He has taught me much about designing for real world implementation. Is he not an engineer? He does more than many of my coworkers who are degree holding EEs. I am not afraid to call him an engineer, because he has earned the title in a different way.
Right, I understand your point. I said in an earlier post that an engineer is one who obtains an engineering degree from a certified university. I realize that it's pedantic and elitist, and there's definitely a part of me who thinks it's idiotic. Because it is. It's a title, who cares right? It doesn't lessen the worth of my degree. I've been trying to come up with valid reasons for why it's important for only people who fit my definition to be called an engineer but I can't think of any. So you're right.
However, I still think it's wrong for people who don't exhibit these qualities to call themselves an engineer. If you make sick beats on your macbook, that's great. But don't call yourself a beat mix engineer.
Edit: Thought of some reasons
It's similar to the "doctor" title. You can be the worlds greatest doctor. Self-taught, you can do everything from intubation to surgery. However, you're still not a doctor. You practice medicine. Why? There's things that you can only learn from someone who is more skilled than you, and who is skilled at teaching. That's what a professor is (simple definition). They are an authority on their topic and are the best place to learn from. They teach things that books don't cover. They have experience. They can tell you when you're wrong, and unlike a book can teach you the most current standards and techniques.
Another point is the completeness of education. Your coworker, does he know vector calculus? Linear algebra? The forward-active voltage for a BJT? Maybe. But there's no guarantee he does. A degree from a certified university guarantees that you know the salient points of your field (not always true, but for my argument it is). If you don't have a degree, there's no guarantee. And this knowledge is important.
To say that a professor is the best person to learn from isn't 100% true. I had a linear algebra professor who simply lectured by reading straight from the book and then occasionally drew the diagrams. Alas, he apparently was a valuable research professor and had tenure, so there's little that could be done. In this case, the professor was hardly the best approach towards learning the subject.
And as for experience, well, in the case of a CS student wishing to enter industry there's a good chance that the majority of your professors never even worked in industry. So if you're looking for people with experience to learn from, well, then you're in quite an unfortunate situation.
This led me to conclude that a degree offers no such guarantee that someone knows something. It offers a guarantee that someone was introduced to a number of concepts and demonstrated an understanding (or knack for cheating, cramming, what have you) good enough to pass and move forward. This is why I shudder at the thought of hiring old classmates who had to be hand-held through their 4 (or more) years of university, I know better despite what their degree might say.
Which is why that people who earned a degree...earned a degree, that's it. As far as I can tell they have no right to call themselves an engineer until they begin to practice engineering and practice it well enough to demonstrate the value of their thinking.
The ideal professor is (a) a world-recognized expert in the appropriate field, and (b) a really good teacher. Frequently, you'll find one or the other, but not both. Far too frequently, you find neither.
But the best professors I've had (and I've had a bunch) were the ones that really did combine both. (And frankly, I can forgive a lot of poor teaching in return for a "well, this is technically true, but no one really does it that way; they use this shortcut...."
As for a university education not providing immediately applicable industrial experience, well, that's kinda not the point of it. Sort of the difference between passing the FE exam and being a PE.
My coworker knows some calculus. I doubt he knows linear algebra. The forward-active voltage for a BJT? Maybe one other person I work with knows that, I doubt he does. I did not when I graduated, but then I am not a EE. My degrees are in Engineering Physics and Fluid Mechanics. Almost by accident I have become a flight test instrumentation engineer with the official job title of "Senior Electronics Engineer". I have tried hard to remedy my EE related shortcomings through self-study, and will continue to do so. I would never call myself an EE -- just an engineer.
I agree with you, for the purposes of your argument, that degree should serve as a guarantee. It is an important signifier of mastered domain knowledge, and more importantly, a signifier of the ability to master new domains.
There's more to it than that. In most places, the title 'Engineer' is a legal entity. In Australia, signing off on a design as an engineer makes you legally responsible for guaranteeing that it has been correctly designed, and is safe for public use. This includes personal liability in the case that it fails (bridge, software, whatever), and can be shown that it was not designed according to appropriate standards, or what should 'reasonably' have been done.
So basically, don't call yourself an engineer unless you're willing to sign off on something, and be legally bound by it. This implies a strong background in problem solving and structured design processes, to remove as much risk (both personal and to the public) as possible, which is also vital to engineering.
In the US we have the title PE, Professional Engineer, which requires some additional qualifications (exams, supervised apprenticeship, etc), and of course a state license. Most people don't bother any more, which has lead to a much smaller number of PE-Engineers many of whom are relegated to being mere license-holders who sign drawings for others, who do the actual engineering.
>So basically, don't call yourself an engineer unless you're willing to sign off on something, and be legally bound by it.
I'm sorry to say it (not really); but for a number of reasons, some good and some bad, the title has been co-opted, and there is no going back.
>This implies a strong background in problem solving and structured design processes
As far as that goes, I've met a number of pedigreed folks who can't engineer their way out of a wet paper bag.
> Most people don't bother any more, which has lead to a much smaller number of PE-Engineers many of whom are relegated to being mere license-holders who sign drawings for others, who do the actual engineering.
To some extent this happens in Australia as well, although there is a movement both to require things to be signed off by a PE (or CPEng here), and to have those engineers provide documented supervision of the work they sign off on.
> As far as that goes, I've met a number of pedigreed folks who can't engineer their way out of a wet paper bag.
No argument there, certification is never proof positive of competence. I've met very good engineers who aren't Engineers with a capital E, and very bad Engineers who knew enough to fool a test board, but not much more.
The existence of these licensing schemes is far from perfect, but better than nothing IMO. Applying the concept to general purpose software is another discussion entirely!
Being an engineer is about more than just technical skills, though. Engineers get it beaten into them that their first duty is to protect the public; their employer comes second. That means having the backbone to say "No" to unsafe demands, even if it costs them their job.
If he's as good, and as experienced as you say, he should be able to just do the legal/ethics stuff and get a license. Unfortunately, the professional associations are streamlined for people who take the usual path through university. At least in my jurisdiction, it is technically possible to have the experience counted, rather than the degree, but it's much harder.
The system is clearly not perfect, but when you ask the average engineer whether it's ok to do things like lie about their experience, you will get very different answers than if you asked the general public. The gatekeeper is doing a real job, even if they don't do it perfectly.
I have found real world experience and self-study vastly underused on a lot of engineering projects. I'm not taliking
about Programming, or CS. You guys can succeed without a degree. I'm talking about the mechanical, and electical engineering projects. I have tried to decipher too many blue
prints form licenced Electricial Engineers--whom I can guarantee didn't spend one day on a construction site. Getting your hand dirty counts for something. Know the theory--essential, but know how to put it together too. I have met mechanical engineers who can't work on their own automobiles--which I
found baffling, because these guys didn't have a lot of extra
money to spend--at least when I knew them. I do still kind
of cringe when people throw around the title of engineer though, if they don't have the math backround and license to
back it up.
In some countries it's illegal to call yourself an engineer without having an engineering degree. The degree is "protected" by the government and can only be acquired from certified organizations (like universities).
Can't stress this enough- in Canada (Ontario specifically) it is a serious fine for anyone caught using the term without being certified by a professional organization.
All provinces have a comparable professional organization, all of which are members of Engineers Canada. We have the notion of "self-regulated professions", where the government gives a charter to the professional organization to regulate use of their name, their members, etc. For Americans: it's not comparable to the IEEE, it's comparable to the College of Physicians and Surgeons (also a Canada/UK thing the US doesn't really have). So they're given the same power to penalize people "impersonating engineers" as the royal college can penalize people impersonating doctors.
This is a perfect example of why the term is protected by PEO. I used to think the PEO overreaching in its attempts to protect the term/designation, but I can see why they have taken issue with the term "Software Engineer" being genericized.
I applaud the effort to learn the topics of "statistics, probability, and linear algebra", but these would have been relatively fundamental courses in most software/computer/electrical engineering curricula that I've known about, and most definitely a prerequisite to calling oneself an engineer.
In some states, which regulate such things. I don't know about fines, but if a gang from the IEEE or the ASME catch you wandering around wearing their colors without being a member,....
>I think it's dishonest to call yourself a Software Engineer and not have an engineering degree.
Definitely semantics. For example, I have a BS/MS in applied math from a good engineering school university. I am a software engineer mainly working with ECEs, physics, and other math guys, who are all "software engineers".
I see where you're coming from about being a SW eng without knowing a lot of math - but there are other majors - math/physics/stats etc that will be very math heavy and not "engineering degrees".
Right, an engineering degree is a guarantee that you know the important points of what it means to be an engineer. Ethics, engineering process, math, etc. When you get an engineering degree from a certified university, you are an engineer. It's a guarantee that (at one point, at least), you possessed the set of skills and knowledge determined by a board of professionals to be necessary for a career of engineering. Other degrees may overlap, but they're not held to the same standards.
I think one thing that's understated is the amount of time we spend in ethics classes. I felt that there was always a semester where I was in some form of ethics or engineering history class.
>When you get an engineering degree from a certified university, you are an engineer.
That's not true. When you get a degree you have an engineering degree. When you get hired and employed as an engineer, you are an engineer. You have an engineering degree and I have a mathematics degree. Our employers hire people for engineer positions and call them such. If I were a professor of math, i could call myself a professor. If I were a mathematician at the NSA, a Mathematician. But my employer calls me an Engineer. The degree does not do that.
Since we're getting pedantic, once you are employed straight out of uni, you are still not an engineer. You are a graduate, or cadet engineer. Typically its not until you've have several years of experience in an engineering capacity, and have passed your government's regulatory body's requirements, that you are actually an engineer. Usually this involves submitting a number of essays on your work, and then passing an oral review board.
@dsuth - that depends on country. Some employers in the US will take a new hire and call them an engineering intern if they require time and testing to reach PE status. That is not required and other employers will grant an Engineer title immediately.
And I'm not merely referring to software. The above is true for my companies 20+ different engineering positions across all disciplines they hire for (Aerospace, mechanical, electrical, materials, software, etc).
I obtained my degree in Software Engineering at a university where engineering grade mathematics and physics were mandatory subjects.
It really annoys me that I spent 4 years studying this to find that other people who scrape together snippets of JavaScript & PHP feel entitled to call themselves an "engineer".
A great many real, live engineers that I know would object to anyone calling themselves an engineer without a lot of study of the big three: statics, dynamics, and thermodynamics; not just general mathematics. It's one of the reasons I don't call myself an engineer. (But I do get to harsh on them a bit about not being professional programmers---their code isn't pretty.)
The other reason, of course, is that the "software engineer" term comes from a group of people who really wanted the respect that comes with "engineer" but realized that the big three don't get very far, software-wise. (And coincidentally didn't want to do all that icky math stuff. Not to mention much of the icky programming stuff.)
Ironically, EE had by far the most maths and maths-related courses of the other degrees, at my Uni. But we were still required to study those ones, along with the civil and chemical engineers.
Originally engineering meant something like applied science for maximal profit, or something like "the accountants of the science world", which requires little if any higher math.
A filter / weedout system was required because of too many students, so its turned into something else entirely and now a engineering degree often means nothing other than having passed the weedout math classes. It really shows in some new grads that don't have any actual engineering skills but are really good at calc problems.
Feel exactly the same way. Why not just call yourself a software developer? Because software engineer sounds better. Because people expect a better math foundation.
Lived and breathed math for 5 years in college before I could look myself in the mirror and call myself an software engineer.
I always thought that being an Engineer assumes you have knowledge of mathematics.
Not really. Mostly just algorithms and procedures of some math concepts(Calculus and Linear Algebra) which roughly corresponds to the first year of North American math major.
My engineering physics curriculum required three semesters of Calculus, a differential equations course, and a numerical methods course. Notably lacking? A course in Linear Algebra, which was not required (and most in that program did not have time to take it, as the program was more like a double major with additional technical electives).
This could not be further from the truth. I doubt my CS professors would be able to solve a PDE (or algebraic geometry etc etc). Likewise, few math professors would be able to write a parser generator (or code worth a damn).
In contrast, I know engineers who live and breathe PDEs and tweak compilers to solve them faster.
PDE's are not discrete math. CompSci majors are more interested in topics like Combinatorics, Graph Theory etc. PDE's are more interesting to applied mathematicians and physicists.
I doubt my CS professors would be able to solve a PDE..
Beyond the basics, not even many math professors can do that. Math is too vast and people specialize. Strong algebraic geometers are not necessarily strong analysts or algebraists or logicians.
1) No such thing as universal mathematician in this day and age.
2) Engineer's PDEs(algorithms) are not the same as mathematician's PDEs(theory). Same as comparing a student in China who learned English to communicate with English speakers to English majors from English speaking countries.
It wasn't that long ago that most schools did not have a separate CS degree, but rather it was a math degree w/ a concentration in computer science (or some other verbiage to describe the same thing)
Depends on your school. UW CSE (a top 10 program) would be called rigorous but is not as theoretical (there is math, but nowhere near enough for a math minor).
I went and checked the undergrad curricula back at UMass Amherst where I went. I was incorrect: a generic Comp Sci program there stops three courses short of a math minor. The more theoretical concentrations - such as Theory of Computing, Machine Learning, or Programming Languages - teach enough theoretical content to come within one course of a math/stats minor, or even cross the line.
So yes, if you take a Computer Science major with a focus on Software Engineering, you will not learn enough math to minor in math "for free". If you pick a more mathematical subfield to focus on, you should probably declare a math minor for the one or two additional courses it will take you.
I made a truly stupid choice: I graduated in 7 semesters with a Comp Sci degree concentrated on PL theory without picking up the additional courses for a math minor. As a result, I'm "condemned" to learn that material independently later on. "Luckily", the Technion required me to do extra coursework for my MSc, so I've had to buck up and learn more theory.
Now get off my lawn until I'm done with my highly theoretical machine learning exam ;-)!
Minors are mostly meaningless on your degree; but the knowledge you get from the classes is worthwhile. I took some advanced math classes but kind of burned out on it towards the end of my degree (ironic since I went to grad school immediately after). What I did notice: CS classes are easy compared to advanced math classes...man, I struggled to eek out B's in the courses when CS classes were just easy A's.
If you want to do good at machine learning...electrical engineering is probably a better choice; the maths learned in EE overlap fairly well with what is needed to do ML. PL theory is quite niche, even for PL researchers.
I was actually being cautious. American colleges like to make sure you pay for as many BS courses as possible. Calculus 1, Calculus 2, Calculus 3...
Besides, I never heard of math majors taking cryptography that early. Usually, Intro to Real Analysis, Abstract Algebra and Abstract Linear Algebra come first.