Hacker News new | ask | show | jobs
by TheCapn 5348 days ago
The biggest quarrel I have with this whole debacle is how it all started out. A group of wise asses decided they should fancy their title up and now everyone has to "to stay relevant".

The fact is I AM a Software Engineer. I have a degree in Applied Science and I have my Iron Ring. I am registered with my provincial Professional Body. Saying that, I am not just a "Programmer" (I do not mean to sound derogatory) but there is a difference in the fields that I think is getting blurred.

I turned down many jobs that wanted "programmers" because I am an "engineer" and don't want to fall behind in my primary field to take a job that is loosely related. I code at home in my own time releasing small projects only recently digging into bigger ventures that are potentially able to turn profit but that's beside the point. Where I am now is an engineer's job. I do programming yes, but my job requires more than an understanding of computer architecture and design pattern competency to succeed.

I feel like I'm sounding like an ass. I am much more humble I swear! The point is that Software Engg != Programmer we need to stop fooling ourselves and allow the segregation to occur so that programmers are properly recognized and respected for their work!

2 comments

As a computer engineer, with an iron ring and a bachelor's of applied science, I feel your pain. In Canada, there seems to be some respect given to the title, although it seems to be waning. In the UK, an engineer is someone who fixes your car or appliances. In the USA, an engineer is someone who writes PHP.
Outside software, I'd say "engineers" are pretty well respected in the U.S., but I don't think it actually has any strong substantive connotation. An "engineering" job can range from some sort of strong meaning of the term, to something closer to "technician", which maybe is the non-computing analog of "programmer". There are plenty of, say, aerospace engineers, especially at the lower seniority levels, whose job mainly involves "running the numbers" in a fairly straightforward way, and not a lot of independent decision-making or problem-solving.

(Some places do distinguish "engineer" and "technician", but I don't think it's a strong boundary, and where it does exist, has more to do with formal credentials and pay grades than the actual job contents.)

Where I'm from the real difference between Engineer and Technician is the amount of responsibility that is placed upon the professional's shoulders. I have lots of technician friends who complain about the work they do being the same as engineers but aren't paid in the same grade as we are.

I'm not sure whether or not I agree with them in this case but the reality that I keep seeing is the idea of "responsibility". The work that the technician does is passed through the engineer who puts his approval/stamp/whatever on it and puts it through production.

If something a technician did came through my desk and I approved it only to have it cost my client massive financial loss for a preventable reason it is MY ass that is on the line and not the technician. I could be a technician and not have that on me but that wasn't my decision and if an employer wants to retain competent engineers they need to pay them at an appropriate grade so that they're prepared to take that responsibility.

EDIT: I guess another thing is the academics that each goes through. Technicians mostly go through courses that teach reconstruction and following the spec while engineers are given a broad problem and time to solve it.

I'm not saying technicians are incapable of design, I'm just saying the schools my friends went through didn't teach it so it isn't really expected of them.

Ah yes, that's an institutional difference in how engineering sign-off works. In the U.S., you do usually need engineers with P.E. certifications to sign off on a project, and in small firms it works like you describe. But in large corporations, there are typically very few people who do official sign-offs, often only the VP of Engineering or head of a project, who signs the final designs, and anything legally deposited with a government. And they usually don't do it purely on their own professional judgment, but only after consultation with the legal department.

As a result, very few engineers actually have jobs with sign-off authority/responsibility. Even if you do have a P.E. certification, unless you're very senior you'll probably never be officially signing off on anything as a regular employee. Below the top levels, almost all engineering jobs are structured as someone doing internal technical work for the corporation that gets passed upwards for eventual sign-off. That's part of what makes the engineering/technician boundary fuzzy, because nearly everyone is a technician by the classification you describe, in the sense of someone who doesn't independently sign off on engineering work (I do agree that engineering involving more design work is a common differentiator, though).

In the US, Professional Engineers are licensed through the state and are legally responsible for their work. If you engineer a bridge and it falls down because of a design problem, you are the one at fault.

Until software engineers become legally responsible for crashes/data loss/etc. of their software and can be sued out of existence or go to prison because negligence, they will not demand the same respect that other engineers do.

Apparently Texas, like Canada, considers software engineering a proper discipline of engineering, subject to the same regulations as other engineering disciplines: http://sce.uhcl.edu/helm/SWEBOK_IEEE/papers/10%20reprint%205...
Frankly, I dispute the existence of a "Software Engineer."

The UK and parts of Canada may recognize and regulate people with this title, but I don't believe that the same rigor _can_ be applied to building software.

You would have to work with formally verified (and I mean that in the mathematical sense) hardware and software all the way up and down the stack (that would include the language and compiler you utilize). You would then have to formally verify your own software on the stack you are deploying to. Only then would you be approaching the rigor that other Engineering professions are held to.

I've worked on avionics flight management systems. We had reams of system requirements, multi-person code reviews for every line of code in the product, formal verification runs, system integration testing, field testing... The compilers used were qualified for our use. All libraries used were qualified. All operating system components used in the product were qualified. Internal tools that automated any part of the process were qualified.

I'm not sure what your criteria is for "mathematical" verification, but I see this sort of work as software engineering.

The aerospace and medical fields have done quite a bit to increase the rigor in building software, however there doesn't seem to be any push from them to codify their processes and establish some sort of push for the industry as a whole. The establishment of a true Software Engineering discipline would require some consensus on the use of formal methods in specification design, and then program verification.

The other hurdle is that you need the same rigor from your hardware designers. Just as structural engineers must rely on the rigor of steel manufacturers, we are held hostage by hardware manufacturers. Frankly the entire industry needs a wake up call.

As for formal verification, it is the mathematical proof (in the pure sense) that a program behaves exactly as speced -- the specification must also be formally verified for consistency. Currently this is only possible on relatively small programs, with the largest being several compiler back-ends being verified.

Here's a paper on what it took to formally verify the seL4 micro-kernel: http://www.sigops.org/sosp/sosp09/papers/klein-sosp09.pdf

Codify their processes?

http://en.wikipedia.org/wiki/DO-178B

On the avionics software I worked on, we (another group of people) designed and manufactured the hardware. I'm not as familiar with the process there, but I have no reason to believe that it wasn't done with similar rigor. [See http://en.wikipedia.org/wiki/DO-254]

I understand mathematical proof, but I wasn't sure that was what you meant. I did not realize that physical engineering projects are mathematically proven to that extent?

I'm sorry, I wasn't very precise in my language, I meant the industries working together to generate a more generic process that isn't tied to a specific industry. This would be done with the intention of building a Professional Software Engineer program.

Anything relying on the physical world obviously cannot be mathematically verified, however the mathematical rigor is still there in the modelling and testing.

Ah, I think I follow then. Mathematical proof of very large software systems may presently be impractical; the verification procedures currently in place for avionics systems are pretty daunting as they stand.

I'm not sure what we would gain from an overall software engineering professional qualification. While I am quick to point to avionics development as (in my opinion) being true software engineering, I also acknowledge that a great deal of software is not built using any methods even remotely as rigorous. But then, it also probably doesn't need to be.

You put a lot more rigor into building a house for people than you do a house for dogs, and you put a lot more rigor into building a skyscraper office building than you do a house. And rightly so. Each needs to withstand different levels of pressure. I see no reason to apply rigorous engineering processes to iPhone games; it would be a waste of time and resources.

As it is, the industries that require rigorous software development have produced their own standards. I suppose if you could ascertain the similarities across industries and codify that into general software engineering practices, that could be a good thing, but you'd probably still need industry-specific regulations to make sure nothing was missed.

I dunno. Maybe if more software needed extensive rigor it would be more obvious what needs to be done across industries.

I guess I lied in part... I'm a Systems Engineer with a Software specialization. My work is about the integration of software components into a much larger architecture of devices... in my case I keep the internet backbone alive for my province that includes alarm monitoring, fault detection/correction and upkeep to systems for prevention. AI, formal methods and other broad categories are extremely relevant in my industry and I personally believe only a fool would discredit this as an Engineer's job.
You're an Engineer who writes software, nothing wrong with that. Lots of Chemical and Electrical Engineers write software, I'm still not going to call them Software Engineers.

This isn't about discrediting anyone's life work. The fact is if you're developing software that gets deployed on anything but purpose-built hardware you're already not engaging in proper engineering practices. It would be like building a bridge with materials whose properties you didn't know.

> I don't believe that the same rigor _can_ be applied to building software.

Check out aerospace software development processes.

edit: also embedded automotive software

There was an article posted (I believe here) a while back about aerospace software development. They talked about the processes used to develop the software and it was definitely in line with engineering rigor. However, it went on to say the people doing the work were not professional engineers. So, at least in some countries, you still could not call it software engineering.
I'd guess that a professional engineer is still required to sign off on the software before a plane gets certification. The same happens when non-licensed-engineers work on other engineering projects. Perhaps the software part does have less engineers working on it percentage wise.