
Catfish Programmers - dizzystar
https://www.butternotes.com/blog/catfish-programmers
======
katzgrau
I spent a few years as a full time contractor and kind of had a chuckle at
this.

I worked on a truly awful mess of a codebase. It was the kind of codebase
through which many devs had passed, and many generations of best practices.
One part was straight JavaScript. Another had some jquery. Another had
backbone.js - the perpetrators were all former full time employees. The
product had never launched.

I generally worked 8 hours and signed off promptly to work on my own projects.
I did quality work. I viewed myself as a hired gun who was paid to do a job.
In the end I was at the company longer than any of their actual full time
employees (who left because they didn't like working on the crappy code or
were stressed because of company politics) and was the only developer left to
take the product to launch.

Employees and employers often think that contractors are vampires, and many
are, but you'll find the good ones are practically immune to whatever
skeletons you've got in the closet and will get the job done.

~~~
zeta0134
In rewriting projects, I often find that as I rewrite them, I can knock out
requested features along the way. I've taken this approach when fixing up some
of my old personal codebases. It's a two birds one stone approach; it takes me
just as long to fix code in the old framework as it does to rewrite the code
in the new framework without the buggy behavior, so where possible I do that.

We had a similar practice in the restaurant world before I found work as a
programmer, and we called it "clean as you go." I think it's quite
appropriate. The bug reports will always be there, the feature requests
mountainous, and yet the messes don't clean themselves. There must be balance.

Do what needs to be done, but make a point to improve your codebase with every
new change. Prefer consistency over new hotness, and ease of maintenance over
unreadable micro-optimizations. Be a positive force in your codebase, and
future developers, especially including yourself, will appreciate your
efforts.

~~~
richdougherty
I agree with "clean as you go", but I'm very cautious. Rewrites are scary and
risky in legacy code. Usually I'll add a few unit tests to increase coverage
and de-risk the change I just made.

~~~
BurningFrog
I think this epic rant against rewrites still is mostly valid 17 years later:

[https://www.joelonsoftware.com/2000/04/06/things-you-
should-...](https://www.joelonsoftware.com/2000/04/06/things-you-should-never-
do-part-i/)

~~~
btilly
It was wrong then and it is still wrong.

First of all Netscape had the problem of incorporating opaque blobs from other
sources. When they went open source, they couldn't keep those so ripped them
out. Then the code didn't even compile.

Secondly that Netscape release that he mocked? That was the start of Mozilla,
Firefox, and so on.

Third, how did Netscape survive? My impression from the sidelines is that it
was a negotiation ploy from AOL. When their IE contract was up, they needed a
viable alternative. In the end Microsoft let them continue using IE, PAID THEM
MONEY, and had them shut down Netscape. They were laughing about this all of
the way to the bank. And then Mozilla ate IE's lunch.

There have been a lot of rewrites. Some succeed, some fail. But it isn't
always a bad idea to do one. And Netscape was a necessary one that succeeded
in every measure that it was supposed to.

~~~
EdSharkey
You are being charitable to Mozilla (the application suite). That was a
bloated, buggy mess for years. I recall 2001-2003 was a really bleak time to
be a Mozilla user. Firefox launched as a response to Mozilla and was more
lean, but it wasn't until 2007 or 2008 that HTML5 features started trickling
in and Firefox started to gain marketshare and developer mindshare for the
advanced features it could offer.

And that was when Chrome showed up. So from 1998-2008, Mozilla had an open
season to gain ground on IE, and their marketshare only ever got as high as
30%. It was 2011 or 2012 that Chrome was stable enough and Google started
their upgrade-to-Chrome adverts on google.com. And then Firefox faded back
into it's 10% niche. I'm a developer, and my peers look at me like I'm a
weirdo because I favor Firefox and do my primary development on it. That
shouldn't have happened, Firefox should not be niche given the time they had
to work.

It is inspiring to me that the Mozilla project didn't fail and got so much
love, but starting with that original Netscape codebase and the Gecko and
XPCOM designs really hindered them. Mozilla missed out on offering a competing
engine for Node.JS because their JS engine is so tightly coupled with the rest
of the browser(?) - that's just one huge opportunity missed. Offering a
competitive mobile OS at the advent of smartphones in the vein of WebOS is
another, albeit less egregious, miss. The codebase just wasn't clean nor
adaptable enough to break free of the desktop.

~~~
subway
It wasn't until 2007 that HTML5 features began trickling in _anywhere_...

~~~
EdSharkey
Right, and what I was alluding to in that point was, why should any user
switch from IE if it has feature parity with Firefox or any other browser?

Firefox had developer tools in Firebug, so it was already getting a geek user
base, but when Firefox got some legitimate new features like Canvas that other
advanced browsers like Safari had, regular users began to dabble. With the
occasional news report that honestly reported the security nightmare that IE
was, I found that between 2006-2009, Firefox was an easy sell to regular
users.

The way I see history, Mozilla floundered between 1998 and 2005 and had almost
no marketshare. All the Netscape rewrites that came before were a shitshow and
the AOL thing must have been a huge (but necessary for funding) distraction.
Probably the only fair interpretation of history is that, of course, the
codebase was a mess given the development practices back in the day.

That said, I recall the Gecko rewrite was a long and painful one. Was it
unnecessarily so? I believe it had a lot of dumb component architecture
concepts and I would love to understand what the drivers were there. Did they
believe that components were the best way to organize a huge open source
project? Woulda, coulda, shoulda thinking about Mozilla makes me really sad
sometimes.

------
TallGuyShort
I expected this to be using "catfish" in the same sense as the online dating
world; i.e. the "catfish programmer" is one who puts all sorts of programming
languages on their resume but can't actually answer any questions about what
they've done in that language.

------
scotty79
I tend to land on that position. But when I'm at the very bottom of the mud
and I found the spot, I rarely rewrite a piece to make it in-your-face-clear.
Sometimes I do, but more often than not I just edit few characters that are
wrong.

I can remember at least one case (probably had few more, just don't remember
them) when, to fix a bug, I changed just one character, after few hours of
reading and understanding all the bad ideas people before me implemented
there, first seeing them as complete nonsense and gradually realizing, that
what they wrote does what was intended, almost.

It kind of feels good for me. I hate building though, because I'm painfully
aware, how stuff looks once it's built. It's never good.

~~~
majewsky
I had a similar case a year ago where about two days of work resulted in a
pull request that changed only one word:
[https://github.com/docker/distribution/pull/1578](https://github.com/docker/distribution/pull/1578)

------
nunez
I don't know if I'm a catfish programmer, but lately I've been completely
disinterested in offices with the sorts of perks that I used to go crazy for
years ago. I don't care much about free lunches or extremely nice desks or
chairs or ping pong tables or whatever. That stuff is distracting. I care much
more about buying my own lunch and fun.

~~~
libertymcateer
In my experience as someone who has been in-house counsel and now outside
counsel for a variety of tech startups and software development shops, and has
watched this happen in the careers of a lot of people around me (usually while
being the sole 'suit' in the room), the transition you are describing usually
happens in the late twenties or early thirties.

It is basically the transition away from the last vestiges of a "school-like"
mindset to a "career" mindset.

In the "school" mindset, your primary form of social rewards are from the
people you spend your _day_ with - when you are a kid, your friends are all at
school, and even though you go to school to do schoolwork, it is still where
you see your friends. In the "career" mindset, your primary social rewards are
the people you spend your _nights_ with - which are friends who you do not
work with, and, importantly, your family.

In other words, as a young 20something, it is easy to still be in the mindset
that the 'fun' time is when you go to the place you spend all day at and do so
with a bunch of cool people. A lot of jobs, as a result, try to recreate that
'school' experience with a gym, scheduled fun activities, playtime, etc. Howev
er, when you are in your late 20s, even if you don't necessarily have a family
or are an introvert, the appeal of this lessens dramatically, as you naturally
spend more effort trying to carve out time for your own interests - whether
they be your family, your hobbies, or even just solitude and meditative peace.
Accordingly, it is really just far less important that work have a bunch of
perks that require that you actually _be there_ , than for work be a
professional environment that respects your time and is financially and
intellectually rewarding enough to be "worth it."

~~~
nunez
damn that is exactly my situation! it happened a little earlier for me though;
i'd say around 27-28. it accelerated after working for google that short bit I
did

------
rurban
Note that the "Catfish" urban legend originally meant something else. In the
movie the catfish term is introduced like this: "They used to tank cod from
Alaska all the way to China. They'd keep them in vats in the ship. By the time
the codfish reached China, the flesh was mush and tasteless. So this guy came
up with the idea that if you put these cods in these big vats, put some
catfish in with them and the catfish will keep the cod agile. And there are
those people who are catfish in life. And they keep you on your toes. They
keep you guessing, they keep you thinking, they keep you fresh. And I thank
god for the catfish because we would be droll, boring and dull if we didn't
have somebody nipping at our fin."

So it's indeed a bottom grundler, but with an important impact on the fish in
the sunlight. Without the catfish the sunny fish would all die. The catfish
keeps them agile.

------
Nursie
Some of this rings true. OK a lot of it.

Metaprogramming is often witchcraft. As is so much futureproofing. Layers upon
layers of indirection because one day it might be useful.

Mighty fine framework you have there, someday you do have to write the actual
code...

~~~
TeMPOraL
> _Metaprogramming is often witchcraft._

This is an advice I frequently see, and I disagree with it strongly. For some
reason, people are irrationally afraid of metaprogramming, as if it was a
_different_ kind of programming. It isn't. It's regular programming, following
the very same rules, except that you're automating your own work now.

I don't know; maybe it's because mainstream languages _absolutely suck_ at
metaprogramming (if they allow it at all), so people are not used to it?

I mean, it's like someone calling algebra "witchcraft". It's not witchcraft,
they just never bothered to learn it.

(Related, I see this approach of lowest-common-denominator programming being
popular, and I believe it's very hurtful to everyone. Programming is a
profession. If you don't understand some piece of code because it uses weird
language features, suck it up and _learn stuff_ , like a real professional.)

~~~
ThrustVectoring
The problem isn't with writing or reading metaprogramming. It's in debugging
issues in the program that the metaprogram writes. You have to then figure out
what both the meta-code and the code does and how they interact to have a good
understanding of the problem.

There's also some very powerful advantages to avoiding metaprogramming. Like,
"grepping for the name of a token shows all instances where said token is
relevant". This is an _incredibly_ powerful tool, and you _really_ miss it
when poking around in new codebases with lots of magic.

------
mighty_bander
This speaks to me. I learned how to program in a professional environment by
doing exactly this. I can play the design patterns game and I can write pretty
beautiful code, but what I can really do is cut through the bullshit and all
the lessons that people have learned without understanding the reasoning
behind them, and get shit done fast. I love it.

------
avenoir
Oddly enough this doesn't really resonate with me. I've done contracting for 5
years and 90% of the work was focused on new development with the opportunity
to get hired after the contract was up. Now this was a few years ago and my
experience was strictly in the Midwest but I never saw myself as the bottom-
feeder. If anything it was a good way to work at a company you liked where you
didn't know anyone on the inside to recommend you. The experience was actually
rather interesting and enjoyable.

~~~
linkregister
I don't think the author of the article claims that all contractors are bottom
feeders.

Some of us have done this kind of work where we were intended to fix a set of
bugs on a foreign code base. Whether or not the programmer is a contractor of
FTE is not relevant, the experience of being a catfish programmer is.

------
xupybd
"In the catfish world, code speaks, money changes hands, and friendships are
evanescent"

:( friendships are important to everyone, this sounds like a really unhappy
way to live.

~~~
lhnz
By the time you reach this point you have long steady relationships and are
less fascinated by the churn of strivers looking for that one 'connection'
that will make them rich.

~~~
jackgolding
haha i wonder to what extent people in this forum are looking for that 'one
connection' (i know i feel like i am a lot)

------
richardknop
I think I might be a catfish programmer. Have been contracting for several
years and on daily basis have to sift through legacy spaghetti codebases
originally created by full time employees or outsourced to some digital
agency, fix bugs / add features in very short time (on average I stay 6 months
on a contract).

------
andirk
If we don't change the culture in Silicon Valley soon, these "invasive
catfish" are going to hold the rest of us back, like Who Killed the Electric
Car
[https://www.youtube.com/watch?v=vRnUY6V2Knk](https://www.youtube.com/watch?v=vRnUY6V2Knk)
. They were good at first, but then they realized big changes threatened their
stagnant skillset. Rather than learn more, they utilize their power to keep
things the same.

~~~
ShabbosGoy
I think the automation of middle management positions will eliminate these
archaic modes of thinking.

------
chuck32
Having been a contractor for a short while (~1 year) and having worked with
many different contractors over the years I've never seen a situation where
management has been like "this part of the codebase is too much of a mess for
us to handle, we need to hire a contractor to sort it out". Does that ever
happen? Surely a contractor would be even less prepared than a permie to
handle such a situation because they won't be familiar with the codebase?

In my experience contractors are mainly hired for development of new projects
or features when they'd like to get some more hands on deck to speed up
development. Or because the company would like to hire a permie but can't for
whatever reason (not sure they will have enough work in the long run, can't
find the right person etc.).

Also I've never seen a contractor that who's day-to-day functions were any
different from that of a permanent employee. Where are these companies that
let permies play ping pong for hours but have the contractors chained to their
desk churning out features and reducing technical debt?

~~~
1234321
In my 6 years experience I've never seen this either. Here in Germany maybe
it's a little different - contractors are very common at large companies,
because it can be very hard to fire people once they've passed their trial
period (3-6 months). So companies can be more reluctant to make permanent
hires. Another reason is that a department might have a strict limit on their
head-count (of internals), but not their budget, so they can still increase
their workforce by hiring contractors (don't ask me why, just big company
politics).

At the two large companies I worked for, around half the team members were
external. In both cases there were 3 types of worker:

1\. Internal

2\. External contractor & a permanent employee of a contracting ("body-
leasing") company

3\. External contractor & a freelancer / self-employed

In terms of the tasks and technical responsibilities you have in these roles,
I didn't notice much difference. The main difference in case 3 is that you get
significantly more money (like 1.5-2x more), in exchange for worse job
security. Given how easy jobs are to find in the current climate, I don't
understand why more people don't opt for this. In case 2 in particular, the
contracting company is taking up to a 50% cut of the hourly-rate, it's kinda
crazy.

~~~
pjmlp
Doing 2 in Germany.

Because when one gets sick for long periods, needs to take care of kids or
close family, only gets offers in the other side of Germany for a given tech,
life is way easier with 2 than 3.

------
pteredactyl
As as contractor I take pride in my code and work to leave it better than when
I got there. Some good points, in the essay, for sure. But overall pretty
cynical.

~~~
le-mark
> leave it better than when I got there

This can be a frightening statement depending on what 'better' means to anyone
in particular. If 'better' means Enterprise Fizzbuzz, then no thanks, if
'better' means simplify and untangle spaghetti, or unwinding Enterprise
Fizzbuzz then great!

~~~
pteredactyl
Good point. The (your) latter.

------
halfnibble
I'm a catfish. And I love it. The messier the code, the more rewarding the
challenge.

~~~
laythea
Not sure I understand this motivation.

If I smashed up a lego tower, would you have more fun patching up _my_ tower,
or instead you can create a "better" new one all by yourself?

~~~
mattmanser
Building a new thing from scratch means there's no guarantee anyone will ever
use your code. The idea could be crap, the need not there, etc.

There's satisfaction in taking a page that was taking 10secs to load and
making it load in 43ms. You know you've had a big impact on the thousands, 10s
of thousands, etc. people who are using it.

And building a new system tends to go to the crap programmers because people
are price sensitive. It's not until they start seeing the problems that
expensive programmers turn up.

I met this game Dev contractor once in his 40s, he was complaining how he
never gets allowed to make a game, they get the inexpensive graduates to make
the game, then parachute him in at the 11th hour to "optimize" it, which is
basically tidying up the pile of shit the inexperienced Devs made.

~~~
laythea
Yes but I would have more fun coming up with it in 43ms in the first place. No
need to artificially benchmark yourself against an old version of code. The
market is the real benchmark - without the baggage of recode.

re crap programmers - I don't doubt that this kind of behavior exists, and
certainly with the success of the games industry and the extremely low
barriers to entry (unity/unreal/steam/app store etc), this behavior may even
be commonplace.

If I was you I would have advised the senior dev to find another job. A
company that operates like that is looking for code monkeys, not professional
software engineers, and any such professional software engineers won't hang
around for long.

------
AceJohnny2
> _but the summoning of the demons from the 7th layer of hell and release a
> Stephen_

> _King blood-fest on the planet._

I was expecting it to be Wolfram on that second line :|

------
madiathomas
I am currently a catfish programmer and not enjoying it. I now feel like a
garbageman because I see lots of garbage and rarely given new code to write. I
now spend more time reading garbage code and trying to figure out how it works
in a matter of hours. It all started last year October when I took a
contracting job.

------
paultopia
_Why is my system slow?_

 _$ grep -R "map" _*

 _reduce(filter even? (apply (_ 3) (map inc (i for i in (filter even?
collection)))))*

What's with the dissing on map? Awkward code like that can be written in lots
of ways... (rewrite it with transducers, friend catfish, rewrite it with
transducers!)

~~~
dizzystar
<3

Searching "map" was an entry into the larger joke, but not sure if it came
across on the psuedocode.

~~~
mhax
Was it a 'functional programmers know the value of everything and the cost of
nothing' kind of joke?

~~~
dizzystar
It filters for even.

Increments each element to odd.

Multiplies each number by 3 (each number is still odd)

Filters for evens then sums them.

Always returns zero.

~~~
mhax
but not one side effect!

------
kbenson
Oh, this hits close to home. _Warning: Venting through wall of text follows._

My first professional programming experience was in the early 2000's fixing
and maintaining a Perl code from the mid-1990's. I wasn't a contractor, but
the original author was no longer available, and there was little-to-no
comprehensive knowledge about the code base in the company. We had plenty of
people that could dive in and learn and fix, but as often as not, the answer
to "how does that go about doing that" was "I guess we'll find out".

Later, I went to work for a local IT consultancy, and occasionally did short
term and long term contractual software engineering. The majority of the
horror stories I have are from this period.

I worked on a Payday loan company's code base where the original author was
one of the owners, but was largely absent by the time I was working on it, due
to personality and substance abuse issues. Once when making a change to the
portion of the system that generated the ACH deposit file that was submitted
to deliver money to customers, I noticed a commented out line that added
another row, all statically defined, to put a couple thousand in a specific
account. The comment above it said something to the effect "XXX's vacation
allowance", where XXX was the absent owner and original author.

I worked on extending open source call center software which was essentially a
bunch of multi-thousand line Perl scripts run through Aseterisk.
Unfortunately, the original authors either didn't know about use strict,
didn't know what scope was, and didn't know how to pass arguments to
functions, or it was all an elaborate way to generate consulting feels for the
original authors. Every function call was preceded by setting global variables
which were then used within the function. If multiple SQL queries were needed,
it was always "$stmtA = .." then "$stmtB = ". Prepared statements and variable
binding? You wish. Generally, about 20%-80% of the code of any particular
script (of well over 30) was generally shared with 2-5 other scripts, with no
abstraction to a shared module, making the possiblity of changing one spot but
not others likely, and corruption of the SQL data controlling the state of the
system _likely_. The SQL schema itself wasn't exactly a dream to work with
either...

I worked on fixing an implementation of a financial services company's rating
algorithm implemented purely in SQL. The original IT employee responsible had
disappeared one Thursday, and I'm not sure if they ever figured out what
happened to him. The general vibe I got from them was that he probably took
off on a vacation and decided not to come back. The code wasn't horrible, but
making fixes to page-length dense SQL statements based on vague directions
that certain stocks don't _quite_ match the output for the Excel formula the
owner developed years before is nerve wracking, when the entire business is
generating reports based off this formula and selling access, and they need
changes to this formula yesterday, and have little in the way of formal
verification of the output.

Finally, a story to somewhat temper the WTF stories above. When returning a
decade later to the company of first job, I ended up doing most the heavy work
on the ancient mid-1990's code that ran their custom CRM, having had
experience with it when working on it in the early 2000's. This software was
always baffling, because the original author, who while to my understanding
was somewhat of a Perl novice when he began the project had made the
_extremely odd_ decision to forego functions for a large set of twenty or so
chained GOTO statements for each "route" (action param, in this case), instead
of a simple cascaded if statement to function calls for each route, which is
not only easier but much more likely to be the first choice for a novice
(IMO). I finally determined the reason for this when making a larger
structural change to fix this. The code was meant to (and did) run through
mod_perl. Mod_perl speeds up Perl by taking the script, and essentially
wrapping the content in a function, and persisting it. Unfortunately, if you
have a bunch of functions defined in another function and they happen to use
even just a couple "global" variables (not so global now, since they are
defined in the outer function), you get closures, and data persisting between
HTTP requests that should not. Using GOTO statements was a somewhat crazy, but
definitely functional, way around this. Sometimes the WTF you've just
encountered has justification, and it takes a deep dive to understand the code
enough to know why.

Oh, that feels better. It's nice to vent every once in a while.

~~~
nerflad
> Sometimes the WTF you've just encountered has justification, and it takes a
> deep dive to understand the code enough to know why.

God forbid some documentation. At a previous employer I was consistently
baffled at how nearly all information about the mission critical application
(and the business) was distributed through random verbal conversation, with
the remainder coming from those deep dives into the code (at least until I
could no longer hold my breath). There was literally zero documentation for an
application with 1 million lines in the source tree and another million in SQL
stored procedures (!!!). The size of the project alone was shocking
considering it was a fairly standard line of business app, albeit with
inventory, HR and customer interaction all rolled into one, but the experience
was just about as bad as it gets for development and organizational practices.

------
crusso
I'd imagine that the real catfish aren't posting to HN. They're coding.

------
benhardy
And here I was thinking that this was going to devolve into a series of Betcha
I Can / Hold My Beer anecdotes.

------
FLUX-YOU
>The code that makes it into The Daily WTF[1] has no peer to many things a
catfish programmer sees on an hourly basis.

Hah. Although as someone who did contribute to Daily WTF from my recent job, a
lot of the code was much better than the piece I found.

God help you if you don't have a really smart IDE though.

------
kelvin0
I understand the analogy and I like how the reality of the job is described.
But I prefer the term 'mercenary' to 'catfish'... much less depressing!

------
paulcole
Large catfish are actually very active predators. In most of the United
States, blue and flathead catfish get up to around 100 pounds. Gotta hunt to
do that.

~~~
krylon
Tell that to a manatee! ;-)

------
ltwdm
I did not get the bit about "invasive species"

~~~
paulcole
Blue and Flathead catfish despite being native to a good portion of the United
States are considered invasive in some places (parts of Florida as well as
further north in the Chesapeake Bay) where they have been illegally
introduced.

There are also some tropical catfish that made it into Southern Florida that
are also considered invasive.

That said, I really don't get what the author meant either.

~~~
sqeaky
I think he was talking about hypothetical slackers that work as FTEs. If not
for their fuck ups, The spaghetti code wouldn't exist and neither would the
job of cleaning it up.

------
tutufan
Plot twist: We're all catfish programmers...

~~~
hackersean
Thank you! It's like everyone has missed the point of the story here...

------
jimmeyotoole
Yup. Me to a tee. Really glad I read this.

------
danjoc
I've found contract work tends to increase technical debt rather than decrease
it. Contractors never say no. It's not their fault. They're not paid to say
no. It doesn't matter if the work is "remove this emissions counter when x
occurs," they just do what they're told. No push back. Push back means no
contract.

If my PM asks me to hard code something, I understand the business well enough
to know when it's a bad idea and when it's okay. Sometimes I say no, that's a
3 month project. They run out, get a contractor, who says yes, 1 week. Now I'm
stuck with a 12 month repair job instead, because it has to be fixed in
production.

I don't play ping pong or chat around the coffee maker either. I'm too busy
cleaning up messes and trying to set things right so the server doesn't catch
fire and force me to come in on my weekend.

Some days, I hate programming full time. I wish I was a contractor who would
say "Sure, 1 week." I'd get all the glory. "Wow, that was fast. What a
brilliant programmer." I'd hate myself for what I did to other programmers
though. Bottom feeders, indeed.

~~~
jeff_petersen
> Contractors never say no. It's not their fault. They're not paid to say no.

I'm a contractor, working for a consulting firm, and we say no all the time.
Sometimes it's not a hard no, but more of a gentle nudge in a better
direction. But we often advise our clients away from certain requests because
that's what we're paid for. We're the experts and they value our expertise,
that's why they hired us.

I know for a fact that what you describe exists, because about a quarter of
our jobs involve cleaning up after someone like that, but I wouldn't say it's
a feature of contractors in general but of cheap contractors.

~~~
lostcolony
You said a key word here. "Consultant". I would say you, too, are a
consultant, by dint of working for a consulting firm.

A consulting firm, at least, a good one, cares about reputation. There's also
a huge level of buy in from the business. You said it, -you're the expert-.
That's a fact the business hiring you recognizes, and is why they're paying
consulting fees. So yes, you're empowered to say no.

A standalone contractor, however, was not hired for his/her expertise, but to
instead be slotted in to an existing project to churn out features, or fix
things. The company hiring them has invested far less, sought out far less,
stands to both gain and lose far less if things sour, and will have no qualms
terminating them if so inclined.

I've seen it firsthand, over and over again. Contractors are second class
citizens to employees. But employees are second class citizens to consultants.

------
draw_down
I love this. The catfish moniker is weird but I have definitely learned these
lessons. I write very simple code because I've seen the hotshot stuff go bad,
not because I don't understand the hotshot stuff.

But, this way of working involves little glory or reward besides the money.
You'll never be the genius that created the beautiful new thing, you'll always
be the janitor who's stuck with fixing all the mistakes of the "genius". So
just know that.

One time a coworker said to me, you know, your stuff always just works and I
never run into problems with it. That's about the extent of praise you'll get
when you work like this. So know that too.

~~~
pteredactyl
As a contractor, that's fine. Because I do not seek glory in the office. I
seek glory 2 miles up on a Tuesday morning hike while all the zombies are at
the office. Also, there's no traffic so, :).

EDIT: 'miles up'

~~~
laythea
I think that is depressing. I'm not saying don't go for a bike ride, but why
not seek glory in something you spend 1/3 (+) of your life doing?

~~~
Sean1708
Why not seek glory in what you want to seek glory in and stop judging others
based on what they want to seek glory in?

~~~
laythea
Jeeze... To call what I said a judgement is a bit over the top. It is an
opinion, not a criticism, as there is nothing personal in my statement. Don't
be too precious.

~~~
Sean1708
Fair maybe "judge" was too harsh a word, but you reply like this and you're
calling me precious?

------
xyzzy4
_> Taking breaks to play games, chat around coffee, or taking a few minutes to
walk around the office is a non-existent element of life. An 8 hour work day
is exactly that: 8 hours of pure work. _

I don't understand how some programmers can supposedly work for 8 hours
straight. I often have to take breaks to think about how I want to best
implement the next thing, or what exactly I should be working on.

~~~
PeterisP
Writing code is different than reading code, it suits different work patterns.
One is dealing with software architecture and the other is doing software
archaeology.

In the described catfish role, you don't get to spend any meaningful amount of
time thinking about how to best implement the next thing; sure, you do some of
that, but almost all the time gets spent trying to understand how the heck
that thing was implemented (and why) (and why??????), and that means that (a)
you don't really get progress unless you're looking at or touching that
artifact, and (b) you _really_ want to avoid context switching; if you've
spent three hours building up a vague picture in your mind about what
something large and weird is supposed to mean, then you'll have to repeat half
of that if you take a lunch break and talk about other matters. When you _do_
figure that out, though, the fix or rewrite generally is quick, easy and
routine.

~~~
douche
This is maybe one of the greatest advantages I have gained in my years of
experience at one company. When I started, I was inheriting the code of other
people, with all the baggage of trying to understand it and keep the mental
model intact when I needed to make changes. Over time, I've largely rewritten
all of the products that are still current, as requirements and dependencies
have changed. I'm reminded of the probably apocryphal story of Nikola Tesla
and Henry Ford[1]

[1]
[http://www.snopes.com/business/genius/where.asp](http://www.snopes.com/business/genius/where.asp)

------
logicallee
This is incredibly confusing choice of terminology, because "catfish" means to
pretend to be something better, online, (or an entirely different person) than
you are in person. [1]

(I bet 80%+ of American readers understand this to be the definition.)

So I thought the article would be about somehow crafting a linkedin and github
profile that makes you seem like you're worth $250K, whereas in fact you are
an actual imposter -- a junior programmer, for example, with less than 2 years
of coding experience and in only one or two languages. Or someone who's just
not a good coder and gets fired from everywhere due to not being a good coder.

I found the article interesting, but I don't like the fact that it chose a
term that pretty much means the opposite of what it intended.

Really confusing.

[1]
[http://www.urbandictionary.com/define.php?term=catfish](http://www.urbandictionary.com/define.php?term=catfish)

~~~
dizzystar
I wasn't aware of that term until about a year ago. Never saw the TV show, and
using that terminology didn't benefit the article.

As pointed out in other posts, the article is a tad cynical, but I draw the
line at outright bashing people or making assumptions about their character
(every statement would have a caveat with "some, not all").

I think with that terminology, it would be an obvious angle that would force
the article into an "everyone knows this" rant, which would take away from the
attempted humor and alternative viewpoint. I left a lot unsaid, but it was an
antidote to saccharine posts while hopefully not coming across overly bitter
(because I'm not at all).

~~~
logicallee
I liked the rest of the article :)

