
Do call yourself a programmer, and other career advice (2013) - luu
http://yosefk.com/blog/do-call-yourself-a-programmer-and-other-career-advice.html
======
swatow
First, I want to acknowledge that neither article was actually about who gets
to call themselves a software engineer. That said, clearly that's all the HN
comments are going to be about , so I'm diving in.

I call myself a software engineer because it makes me feel smart and
important. To me, that's the only difference between an engineer and similar
jobs. I don't want to heap scorn on people who make sandwiches at subway, like
many will use this discussion as an excuse for. Nonetheless, the reason the
term engineer doesn't apply to them is that their job is neither important,
nor requires a lot of intelligence.

Things like following a specific process, taking ethics courses, or being
certified, are just things that some engineers happen to do. If you're smart
and capable, you will do what is necessary to do the job well. Sometimes, this
involves following a specific process, and sometimes regulation is necessary
to ensure that everyone does this. But other times, individual judgement is
the only solution. I believe this is the case for software engineering.

I don't really care about the word that much (although I really like calling
myself and engineer), but what I do care is the implication that our industry
needs to be regulated like professional engineers are. In fact, I'm opposed to
all forms of organization, either unions or professional organizations,
because they have nothing to offer the industry, and can do a lot of harm
through rent seeking behavior.

I'm not opposed to regulation that forces businesses to protect user
information better, or provide better privacy safeguards. But these are
regulations of the business practices. I don't want to have to get a
certificate for something I can read online, even if someone else worked
_really really hard_ to get their certificate.

~~~
kd5bjo
I agree with most of what you say, but there has to be more to the definition
of engineering than "important stuff smart people do". The best working
definition I have comes by way of several of my college professors:

An engineering problem is one in which you are given a set of requirements and
asked to minimize cost; anyone who solves such problems is an engineer.

Most subdisciplines of engineering have developed their own language and
standards for how to specify the requirements, develop potential solutions,
and analyze the cost of those solutions. In young subdisciplines, like
software engineering, these can appear more like folk wisdom than rigorous
processes sometimes; that doesn't mean they're not engineering, just that we
still have a lot to discover about them.

~~~
seabee
Lest we forget, the first engineers relied on folk wisdom and empirical
knowledge before rigorous processes and accurate physical models existed.

That also means we have a few millenia of catching up to do!

------
eigenvector
I don't work in the software industry. But I'm often frustrated by nitpicking
over who is or isn't A Real Engineer.

Implicit in these discussions is the concept that engineers are superior to
mere technicians or operators. As an engineer I have worked with technicians
who want to go back to school to become an engineer, because of the perceived
prestige and earning power that would come along with it. Often, they don't
even realize that they make more money than I do [1].

In my industry the chief divide between engineers and technicians is that
engineers design systems whereas technicians construct and operate them. These
are fundamentally different jobs, each with its own challenges and benefits,
although they often overlap. Pay is roughly the same, though engineers tend to
have more generalized knowledge that can help them shift into a different
sector more easily during a downturn. Both roles are essential, and I like to
joke that if all the engineers disappeared, the technicians could keep things
running for at least a decade, but if all the technicians disappeared, the
lights would be out within 24 hours.

Good engineers can't function without good technicians. Both have a good deal
of specific knowledge that the other does not. And somebody who is good at one
role is rarely good at the other.

Be an engineer because that's what you want to do, because you genuinely feel
that designing systems using the application of engineering theory is better
situated to your skills and personality, not because you think it might be
more prestigious or respectable that what you're currently doing.

[1] I work in the power industry where a skilled technician commands a similar
or higher hourly rate to an engineer, more overtime and usually does a hell of
a lot more work, like fixing overhead power lines at 2am during a winter
storm.

~~~
mattmanser
Great, but not sure what this has to do with the article though. It's like you
read the title and replied without reading the actual article.

Then again, so are most of the other comments too.

~~~
eigenvector
I'm responding to the numerous comment threads below on this topic, rather
than the article.

------
morgante
In general, this article seems pretty weak. It's light on actual arguments
(including any real arguments for its titular conclusion) and instead is
basically saying "I'm successful and happy despite calling myself a
programmer, so you should too."

> The impact of these choices on relationships could thus be weighted as more
> important than the impact on career advancement because it's more
> predictable.

That's an extremely lazy argument. Something can easily be both very hard to
predict and also crucially important.

For a business example, it's _much_ easier to predict the cost of your rent
than it is to predict the success of your employees but the latter is much
more important to success.

------
mattnewport
It strikes me that much of the advice in "Don't Call Yourself A Programmer" is
more actionable than the counterpoints in "Do call yourself a programmer".
While there may well be advantages to working for 10+ years in one company, it
can be difficult to engineer your (programming) career to achieve that these
days. Companies go bust, get acquired, go through re-orgs and cost-cutting
rounds of layoffs and it's not easy to select a company at the outset of your
career that will be unusually safe from such events.

Over the course of my career I've seen many good engineers laid off for
reasons having little to do with their engineering ability. I've also seen
companies go bust with very little warning for the employees, people who were
happy with their jobs re-org'd into positions that made them miserable and
engineers who weren't laid off but did make friends with their co-workers see
many of their close friends laid off and often as a result move away to
another city/country.

I think even if your ideal outcome is a long career at the same company
working with many of the same co-workers you'd be well advised to plan for not
having that option and to be prepared for finding other work at any time if
your circumstances change due to external events.

~~~
enraged_camel
A big disadvantage to working for the same company for a long period of time
is that you will almost certainly get paid less than you would if you changed
jobs regularly. The biggest raises these days come during job hops, rather
than annual performance reviews.

------
dinkumthinkum
Dijkstra was a humble programmer. [1] Is he good enough for you? :)

I do call myself a programmer. Some people prefer software engineer,
architect, etc. I think it is very contextual.

1\.
[https://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340...](https://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.html)

~~~
sillysaurus3
The strange thing about the real world is that your salary is almost
completely divorced from your actual skill. Take a skilled person who never
negotiates and the result is that they're paid less than someone many times
less skilled but who negotiates.

So it's not necessarily about "are you good enough?" but rather "how much do
you want to get paid?" And once you focus on the latter question, you realize
that skill is a tiny portion of it. Your salary is mainly dominated by how
much time you have to shop yourself around, how quickly you can get several
offers from different companies, and how long you can afford to say "no." The
last one is very important, because if you get through an interview stage and
are unable to say "no" if you need rent for example, then you'll end up with a
low non-negotiable offer. You can bluff, which is always worth attempting
since I'm not aware of anyone who lost out on a job offer for bluffing, but if
their initial offer is $X, and you say "no, $X + $Y please" and then they say
"$X + $5k is our final offer," then your options are to accept or to shop. And
if you have no time left to shop around, then you're forced to settle. That's
how you end up with a low salary.

All of this is obvious when someone explains it like that, but the trouble is,
few people talk about stuff like this. You can spend your time from college to
career without even really examining any of this, to your personal detriment,
and you won't even realize it. As Patrick said, you can easily get +$5k at
your next job with a minimum of effort. If you have time to shop around for
several months, then you can get +$40k or more in the right circumstances.

Sorry for the ramble. These are just some unintuitive things which were
surprising to me.

~~~
rational-future
This is far from the true most of the time. In my experience the only places
where pay doesn't mostly depend on skills/smarts/effort are government and to
a lesser degree the big monopolies/oligopolies like Comcast.

~~~
sillysaurus3
What I'm saying is, if you're pretty sure you're more skilled than some of
your coworkers based on whatever heuristics you choose to use, there's an
excellent chance those less-skilled people are making more money than you if
you haven't been aggressively negotiating your salary.

The cool thing is that negotiation skills are a hundred times easier to learn
than programming skills. A few weeks of effort will net you thousands or tens
of thousands. The effects are cumulative over your life, so the sooner you
start, the better.

------
mikerichards
I call myself programmer, but we generally refer to ourselves as developers
now. At the previous place, we were Programmer/Analysts and then right before
I left they had changed it to Software Engineers. I find it all pretty
amusing.

~~~
jay_kyburz
I like the term Developer because I do a lot of things all day that I believe
are more important that the actual "programming".

Working out what the product should be and how users interact with it for
example.

------
dylandempsey
Calling yourself a Software Engineer when you're not is like calling yourself
a Surgeon when you're a Nurse. A Software Engineering degree is way more
difficult than a Computer Science degree, they are not the same. A 3rd of
students drop down to Computer Science or something else after they fail in
the first 2 years. This is at least the case in Canada.

~~~
dylandempsey
I like how this will get down voted because people don't like it. This is a
fact, you will not be recognized in Canada as a Professional Engineer and if
you claim you are one in your practice there are legal consequences, the same
if you practice as a doctor without the acknowledged certification. I am just
stating facts...

~~~
nrmitchi
The fact that you cannot claim to be an engineer in Canada without the
appropriate credentials is a fact. Your statement that "[a] Software
Engineering degree is way more difficult than a Computer Science degree" is
not a fact. I have seen this whole 'CS vs SE' debate in the past, typically in
a joking manner. Your manner however is downright insulting.

~~~
dylandempsey
Apparently only in Canada but it is a longer degree with many more courses and
is considered (here) to be more difficult to obtain. This doesn't seem to be
the case in the US though. Cheers.

------
Alupis
You can only call yourself an Engineer under specific circumstances:

1) You follow a well defined and repeatable process

2) You are able to measure progress

3) You have predictable results

4) You are capable of adapting to requirements change

5) You follow a standard of some sorts (coding style, organization, etc)

6) You provide thorough documentation

People who don't adhere to these principals are just developers/programmers.
If you just set out and hack on some project, then you are not engineering
something. A lot of engineers hack/develop/program on their free time, but as
a professional on a professional project they adhere to these principals (and
therefore are engineering).

There are a lot of people in this world who call themselves engineers without
actually being an engineer. "Customer Service Engineer"... what are you
actually engineering? In software in particular, there's a lot of people who
just don this title because it sounds more impressive ("Systems Engineer"
instead of just calling themselves an Admin)... but if you speak with them
about their process, etc... it becomes clear they just hack on something until
is works (sort of). That's not engineering; that's not a well defined and
repeatable process that one can follow every time and produce predicable
results. They aren't able to measure their progress other than a best-guess.

~~~
diminoten
None of this is true. You can call yourself an engineer for any/no reason
whatsoever.

What you're getting at is some kind of industry certification, like the PE,
that would only allow those who qualify to call themselves engineers.

But software engineering doesn't have that. Therefore, anyone can call
themselves an engineer if they want to, and don't have to pass your little
criteria here.

~~~
brudgers
Just to clarify, in the US a PE (Professional Engineer) is not certified:
Professional Engineers are licensed at the State Level to practice
independently. Licensure comes with direct personal liability that cannot be
assigned to a corporate person and a legal obligation to protect the public
even if doing so is contrary to a client's wish or interest.

There's no equivalent in software, and the term "software engineer" has little
of the rigor envisioned when Margaret Hamilton coined it.

~~~
lifeisstillgood
That is interesting - the idea of direct personal responsibility for flaws or
bugs is one which would soon make NASA's development processes look
lacksidaisical.

I do wonder how we will manage to actually become a profession.

~~~
brudgers
The idea of direct personal responsibility goes back 3500 years in
construction. Basically people have to die from errors.

