
Rent-a-coder hilarity (2008) - cramforce
http://blog.willbenton.com/2008/11/rent-a-coder-hilarity/
======
xyzzy123
Actually one of my colleagues had the opposite (yet in my opinion equally
hilarious) problem with rent-a-coder - the code was much better than he
wanted.

He wanted sample vulnerable Java code to use for secure development training.
None of us enjoyed writing Java web apps, so this seemed like a cunning plan
to get sample (yet custom) code with minimal effort. Hopefully, full of bugs.

He asked for a "task tracker" (IIRC, might have been phone book), and
specified Java with "no framework" as the implementation language. He chose
the dodgiest bidder he could who looked like they might finish the job. I
think he put a few gotchas in the specifications.

Actually, as delivered, the app was solid, and based on JSF2 ;)

What I learned about rent-a-coder:

* There are corporate refugees who do this on the side to make extra money.

* CRUD apps appear to be a sweet spot for rent-a-codering.

* Code quality is hit-and-miss if you're looking for disasters ;)

~~~
raverbashing
That's funny, how come this person was the dodgiest bid of all?

Well, maybe he should have specified he wanted an insecure application (or an
"extra secure" application - expected result is having several layers of snake
oil and "proprietary solutions" applied)

~~~
xyzzy123
Bidding was decided based on communication style, low bid, low GDP country and
"has feedback on just 1 or 2 projects" (minimal, but not extensive history of
delivering).

Didn't ask for "extra buggy" or "extra secure" because the ideal was the
combination of honest mistakes and laziness that turn up in real code all
time. I like the idea though ;)

I mean, you'd think that for $100 or whatever all up, they would have half-
assed it a bit ;)

Probably the mistake was to stop at n=2 and not choosing a harder problem
domain.

~~~
pekk
The mistake was for your friend to think that he was a good judge of ability
based on the features at hand. It might be useful to reflect on whether the
people your friend normally prefers to hire might just be the people who are
best at managing presentation?

------
asveikau
I don't know about all the rest of you, but I find it really depressing to
read these rent-a-coder sites.

The first thing that strikes me is that people posting projects don't really
understand the value of software engineering. They want someone to do crazy
ambitious projects for pretty much no money. As if to say, "I have this idea
which is really awesome and valuable, now I just need some monkey to do all
the work." $500 should be enough for that, right? Then I'll cash in on my
awesome idea...

Maybe some projects honestly work out like that. But a lot of the projects I
see on these sites fall outside that scope. For big ambitious projects, we all
know programmers are not fungible resources, and competent execution matters.

But the worst part is that people humor these projects, or more likely take
advantage of the gullibility of the people asking for them... "Yes sir, I can
solve that impossible problem promptly and under your budget of $500." It's
really sad.

~~~
jiggy2011
It's easy enough for us to say that people don't appreciate the value of what
we do but really market value is set by supply and demand.

Not everyone lives in San Francisco or New York where they feel they must bill
$100 p/h just to make rent. A smart person in an emerging economy where $500
per month puts them on a higher part of the local income curve could certainly
realize that they can compete in a global marketplace on price. This does not
necessarily make them incompetent, in fact it's not a bad way to "hack"
oneself out of poverty.

Besides, many software applications are alternatives to excel spreadsheets or
to handwritten HTML websites and don't necessarily require the hippest
programmers who are well studied on the latest technologies. A customized
rails scaffold can go a long way to solve a lot of real business problems, and
doesn't HN often talk about the value of producing an "MVP"?

~~~
asveikau
There's truth in the idea that a first world salary might go further elsewhere
in the world, and that lots of people get by on less ... But I suggest you
look at getacoder.com et al. and see what I was really talking about, because
it can't be explained only that way with no other explanation. I once saw a
project similar to something that took a former employer 10 years to iterate
on and finally get right, with a long tail of bug fixes and crazy corner cases
because it is a difficult problem. The rentacoder "cost" was 2 weeks and less
than $1000. I did not follow up with that particular guy's project but I'm
going to guess that they did not have success with those expectations and that
budget.

~~~
VLM
Its interesting that those sites are flooded with "create" but never "update".
Version 0.00001 of "a copy of ebay with facebook integration" (true example
from getacoder) will only cost $5K... What is the site for "OMG we need
version 0.00002"? Oh we already have those, they are the established $500/hr
contracting sites.

There's a Hollywood movie trope rolled out every 2.8433 years where a rich guy
goes back to university and tries to buy his way past projects and tests. I
always kind of imagine some rich kid in "Web Programing 317 section 7"
contracting out his final project. Now that tuition is so expensive, $5K for a
final project sounds more or less reasonable for a kid who just wants the
credential and not the education/training. There should be some kind of
ethical filter where if you're obviously trying to contract for a
stereotypical final project around the end of the school year...

~~~
twistedpair
Once I was looking through rent-a-coder and the pdf spec attached was a
homework assignment with the class and professor's name on it. Emailed it to
the prof as my good deed for the day.

~~~
pi18n
I once read of a prof that was on a rent-a-coder site, did a student's
assignment, and then failed him.

------
kens
If you click through to the screendump of the bids there are some pretty
obscure jokes besides the obvious KurtG and GeorgeCantor. BusyBeaver is
another computability joke, solving "in the most productive manner possible".
chn's bid is in infinite-radix numbers. The HaltLib.NET library is claimed to
work in PNG and BNF among other languages. J. S. Carberry is a mythical Brown
professor started as a practical joke in 1929; the backstory is interesting:
<http://students.brown.edu/College_Hill_Independent/?p=2127>

------
Luyt
I liked this reaction, from KurtG:

Dear Mr T.,

Your problem is very much like I have been considering. Assume that we have a
consistent and complete axiomatization of all true first-order logic
statements about natural numbers. Then we can build an algorithm that
enumerates all these statements. This means that there is an algorithm N(n)
that, given a natural number n, computes a true first-order logic statement
about natural numbers such that, for all the true statements, there is at
least one n such that N(n) yields that statement. Now suppose we want to
decide if the algorithm with representation a halts on input i. We know that
this statement can be expressed with a first-order logic statement, say H(a,
i). Since the axiomatization is complete it follows that either there is an n
such that N(n) = H(a, i) or there is an n' such that N(n') = ¬ H(a, i). So if
we iterate over all n until we either find H(a, i) or its negation, we will
always halt. This means that this gives us an algorithm to decide the halting
problem. Since we know that there cannot be such an algorithm, it follows that
the assumption that there is a consistent and complete axiomatization of all
true first-order logic statements about natural numbers must be false. There
is no way your application can be built, and for this advice I am willing to
waive any fee. Sincerely, K. Gödel.

~~~
raverbashing
"But the other guy says he can build this in Java in 50 days, I think you're
not as smart as he is"

~~~
pekk
The boss is always right

------
comex
Although anyone worth their salt should recognize the halting problem, I'll
point out that the vast majority of programs can be proven to terminate or
not, and although testing for halting in particular isn't especially useful
for real-life programs, it could be used as a benchmark for a more general
theorem-proving tool of the sort that would be very useful for avoiding bugs.

Of course, a tool that could automatically prove useful properties about
programs with no guidance, which would be significantly superior than all
existing practical program analysis tools which require quite a lot of
guidance, might be beyond the capabilities of the people that post bids for
$300. Unless it used Mechanical Turk. :)

~~~
cynicalkane
There exist research programming languages that support 'total functions',
that can be proven to always halt. Usually you divide the world into functions
and cofunctions, and data and codata, the latter of which may be infinite
(such as I/O).

I wish this were a more popular thing. When I write a function, I can probably
enumerate in my head all the things I want it to do, and not halting usually
isn't one of those things. But the instinctive reaction is to worry about
Turing-completeness, which is puzzling. When's the last time you wanted a
program with fundementally unprovable behavior?

~~~
Ezku
Programming with such functions is called total functional programming. Here's
a nice little introduction to the subject[1], and if you're a fan of code and
math you should probably check out the other blog entries as well.

[1]: <http://blog.sigfpe.com/2007/07/data-and-codata.html>

------
belovedeagle
Frankly, I think this shows that the "jokers" don't know what they're talking
about either. Yes, the problem is undecidable _in general_ , but one could
certainly develop an interesting program that solves the problem sometimes,
and can definitively report when it cannot decide the problem [in a given
number of steps, for some value of "step"]. The halting problem is not some
black hole such that when you dare venture into it, your program will be lost
never to "return;".

~~~
belovedeagle
In fact, come to think of it, for _any_ program which 1) uses a bounded amount
of memory and 2) has a bounded input (taking "input" as broadly as possible),
the halting problem is always decidable in 2^[bits of state] "steps". There
are a lot of programs which satisfy (1) so long as (2) is satisfied, and if
(2) is not satisfied then the halting problem is not an interesting problem at
all.

~~~
just2n
The approach would be to fix an upper bound on memory and to enumerate all
possible state, running the program each time and determining if all cases
terminate or if any runs forever?

I think the real crux of the problem is that you can't determine in any of
those cases whether the program is going to terminate. Consider bogosort or a
brute-force algorithm for solving travelling salesman. These can take millions
of years to complete even for small input sizes. Do we consider that an
"infinite" runtime?

~~~
belovedeagle
No, the algorithm is to run the program and see if any state is repeated; if
it is, the program is in an infinite loop (where "state" means, roughly, all
memory and remaining length of input). Of course, this requires 2^[bits of
state] bits of memory, and a similar amount of time. Obviously an interesting
(read: approximate) solver would use tighter heuristics.

------
tzaman
We had exactly the same frustrations with online outsourcing (being on both
sides of the table), and now we have built <https://codeable.io> (focused only
on WordPress for the time being) - 4 months after launch, we have more than
900 jobs posted, half of them completed, excellent reviews, more than $45k in
revenue.

I'm very proud of what we achieved so far, because we eliminated the biggest
"pains" of online outsourcing; There is no bidding, our (invited and reviewed)
contractors form a single estimate which is then presented to the client. And
we focus on sub-$500 tasks, because the margin for error is significantly
smaller, so if a client comes in with a huge job, we help him break it down
into smaller pieces. We also maintain client/contractor ratio, so there is no
need for contractors to compete with one another, anyone who wants to work,
can work.

~~~
jpdoctor
> _so there is no need for contractors to compete with one another_

Why would buyers desire this?

~~~
pi18n
One benefit may be that contractors won't be in a race to the bottom, so they
won't feel like they should half-ass it.

On one of the other websites, they seem to want to install a spyware on your
computer so the employers can see what you are doing at any given moment. I
doubt a great coder would put up with that (I'm merely good and I wouldn't)
and the odds of finding one there are lower. On the other hand, I think a
great coder would be more likely to freelance on a site that has consistent
work which they don't need to fight over.

So that's my speculation.

~~~
jpdoctor
> _One benefit may be that contractors won't be in a race to the bottom_

It's obviously of benefit to the contractors, I meant the other side of the
transaction.

~~~
pi18n
I explained it further, if you had bothered to read the rest of the comment;
that sort of thing may attract higher-quality developers.

------
lnanek2
What's funny is that math people know this is impossible and will never
attempt it, but it's quite easy to write something practically useful that
does the job most of the way. It's possible for static analysis tools to
identify many loops that will never end. E.g. in Java if there's no break or
return and the guard is a boolean that is never written to and no runtime
class loading is used.

It can be very valuable to have static analysis tools in an organization, I
know my own company has them, and we don't share them. IBM as well puts tons
of work into it. Motorola has shared one of their tools. Every bug and issue
your tool can find is one much more cheaply solved.

Similarly, the client may be doing coding education, or interview, or other
software where just a few limited lines and limited operations need to be
checked, or it is OK to say if you hit n^4 loops you lose, etc..

~~~
skateinmars
John Carmack also has a lot of praise for static analysis:
[http://www.altdevblogaday.com/2011/12/24/static-code-
analysi...](http://www.altdevblogaday.com/2011/12/24/static-code-analysis/)

------
Lukeas14
Here's another asking to solve P vs NP. Hilarity ensues:

[http://www.getacoder.com/projects/solve%20p%20vs%20np_132036...](http://www.getacoder.com/projects/solve%20p%20vs%20np_132036.html)

~~~
wrt54g
Ok, so lots of people bid on projects without fully understanding the
requirements, some people understand but want to solve it as an engineering
rather than a math problem, and others get it. Where's the hilarity in this or
OP? HN Sunday night, aiyiyi...

~~~
kabdib
It's the cautionary tale that you cannot believe the words coming out of a
salesman's mouth.

I used to work in a startup where the cubicals had sequential phone numbers.
From time to time I'd get a call from one of the sales reps in the field.

"I'm talking to a customer," the rep would say, "Can our product do X?" Where
'X' was something like, oh I don't know, 'Computational Sushi' or 'License
plate recognition,' or anything unrelated to what our real-time messaging
middleware did.

"No," I would tell them (but using more words).

Then I would move to the next cube and instruct the engineer sitting there
that the phone was about to ring, and that they should pick it up, listen and
say "No" quite firmly. Repeat for the remaining cubicals.

Salesmen will say anything to make a sale. It's what they _do_.

~~~
chiph
We used to have customers who would do that. They'd call every number in the
company until they found someone who'd say "That sounds do-able." Upon which
they'd demand a price reduction because "Your product doesn't do what you said
it does."

------
stcredzero
Hmm, the last time I commented on HN on this rent-a-coder hilarity, someone
proposed "writing a new scripting language" within a week. I suggested that
this was actually doable within a week. One could just concoct some simple
language with curly braces that maps 1-to-1 with a procedural subset of
Python, then output Python to run it.

The result? I was downvoted by some less than informed individuals who
_thought there was some deep fundamental difference_ between curly braces
languages and whitespace significant ones. _What The!?... On HN!?_ This was
before Coffeescript was a widely known thing as it is today. Think what you'd
like about Zed Shaw, but his "DB Invasion" idea has some merit.

~~~
nijk
Heh. JavaScript was famously invented in a week.

------
noptic
_client: I need a software tht can find information about my mp3 files online
and it must work 100% correct_

me: What information do you have and what do you want to look up?

 _client: I have the folder and file names and there are 5 webpages like
google where you can search for music. I want the programm to get the right
song info from this. BUT IT MUST WORK 100% right no error ever! I had 6 other
programmers try it but no one can make it right!_

(the real clients english was even worse)

------
absherwin
Writing a program to determine if another program will complete, error, or run
indefinitely is quite doable given reasonable constraints: Run the program!

One need only specify some reasonable length either equivalent to infinity for
such a program, use a heuristic of checking whether the program is in the same
loop and if so, whether any of the variables involved in determining loop
termination are changing. Of course, proper security precautions are required.

~~~
X-Istence
You forgot about the butterfly. Even if it looks like nothing could change,
something could due to a bit flipping in memory, which would allow the program
to halt.

~~~
absherwin
Right. Any statement that the program is in an infinite loop will usually be
subject to error.

Of course, the real question anyone asked to develop such a program would be
what runtime is equivalent to an infinite loop. Any real-world program must
have a runtime bound that is predictable on invocation or it's useless.

------
ak39
Isn't the joke on the guy posting the (impossible) job?

I see some have commented on the economic desperation or the salesman attitude
of the coders bidding for this impossible job, but when someone asks a large
population of salesmen that they have a serious intention to procure a bridge
... well ... there will be a few who'd definitely show up wanting to sell one.

Don't see the point of this whole thing really.

~~~
prakashk
> _Isn't the joke on the guy posting the (impossible) job?_

No, considering the poster's name is "AlanT"!

------
CurtMonash
Dear Sir,

I kindly propose a two-phase project based on Test-Driven Development
methodology, of which we are expert.

1\. Specify and develop test harness.

2\. Develop program that satisfy tests.

~~~
eliben
(1) is actually perfectly doable w.r.t. to this project, so I must be missing
your point.

~~~
CurtMonash
Any set of tests that fully exercised the desired functionality would be
infinite.

Any finite approximation would modify the task from an impossibly infinite one
to something possible.

~~~
eliben
Note that for a huge amount of software functionality, the amount of tests
required to "exercise full functionality" is infinite, and very rarely can we
mathematically prove that a finite set suffices. When code is multi-threaded,
for instance, this tends to happen a lot.

~~~
CurtMonash
Yes.

But I stand by adaption of the old sales technique "What does ____ mean to
YOU? ... Oh, that won't be a problem."

------
cognivore
The part of rent-a-coder that bothers me is I'm sure it goes like this more
than we'd like:

\- Party A contracts with Party B on a big software contract. \- Party B sub-
contracts on some of it to Party C, D, & E. \- Party E is a bit dodgy and does
a bunch of rent-a-coder. \- Hey it compiles! It gets passed up the line. \-
Party B is late and just passes it on. \- Party A is late and, "Hey, it
works!" and delivers. \- Hilarity does not ensue.

My personal experience with this kind of thing is that the further away from
the actual concerned party you are (in other words, the people who are going
to use the software), the more likely it is that the software is going to be
wrong.

------
Evgeny
That looks like another 'FizzBuzz' filter to me, just more elaborate - in this
case, KurtG appears to be the one to pass the screen, right?

~~~
jimbokun
I am SO tempted now to add this to our standard interviewing questions list.
At least for anyone claiming a CS education.

~~~
endersshadow
Why? This is a miscommunication issue, not a CS issue. Determining whether or
not something runs "infinitely" is typically just, "Does it run longer than an
acceptable amount of time?" It may not _actually_ run infinitely, but it may
run _practically_ infinitely (which is to say, just very long).

You have people responding that are assuming that they're going to test if a
process takes too long and bail if it does. Pretty simple, actually, since for
all practical purposes, when somebody describes a program as "taking forever,"
they rarely mean "forever" literally.

If you want to ask it, go ahead, but understanding practical limitations and
engineering to those is a perfectly acceptable answer for the context of the
rent-a-coder site (and an interview for a coding job). The only time it's not
is if you're interviewing for some sort of academic position.

------
DanBC
So, what's best current practice for naive clients when trying to hire
designers or programmers?

Is that advice online anywhere?

------
adamrneary
To me, the disappointing thing about this spoof is that it treats the
engineers on this platform like "code monkies."

One of the biggest gripes from top tier engineers is that they hate being
treated like animals by jerky business guys, and here we have a group of
people mocking these engineers and the platform. It all seems disrespectful to
me.

describe 'My experience, -> _.map ['amazing','awful'], (quality) -> _.map
['engineers','business guys'], (role) -> _.map ['Brooklyn','online
platforms'], (place) -> assert "There are #{quality} #{role} in #{place}."

------
lifeformed
What would happen if you went through with it? I bet it wouldn't be too hard
to write a program that does it for 90% of cases. Is there a simple case that
would be impossible to determine?

~~~
nadam
Yes, there is a small program, for which you could be one of the most famous
mathematicians if you could tell whether it terminates or not:

i = 4; while(there exists such p and q that prime(p) and prime(q) and p+q ==
i)) i+=2;

keyword: Goldbach conjecture. The Goldbach conjecture states that this program
will never halt. No one could prove this yet; seems to be really hard.

~~~
StavrosK
I find your code hilarious in that, if it ever terminates, it doesn't print
the two primes.

~~~
pi18n
A true mathematician; nadam only cares that a solution exists.

------
zura
It looks like a recruiter, but the other way around :)

------
rmrfrmrf
I don't think it's all that hilarious to waste people's time, especially when
the goal is to point out the naïveté of others.

------
th0br0
How come that there's a new getacoder project that invites all those users who
gave those fabulous comments?

[http://www.getacoder.com/projects/simple_meteorjs_app_157993...](http://www.getacoder.com/projects/simple_meteorjs_app_157993.html)

------
niggler
Unfortunately, the situation has only gotten worse in 2013

------
Eva_Peron
I have an uncle who is a deposed King of Nigeria who will solve this problem
for you for a small deposit and your bank account information. :-)

------
barking
Is it money up front or c.o.d on those sites? Trying to get my head around why
people bid without having a clue what`s entailed

~~~
Evgeny
I believe that if the developer's bid is accepted, the money goes into the
'escrow', which is the main purpose of the site: make sure that the developer
does not go unpaid if he did the work.

If the customer is not happy, there are some sorts of resolution processes
that I don't know much about.

What surprises me is that the clueless developers also had high 'reputation'
(positive customer feedback), which should be at least some indication about
their competence.

~~~
noptic
They do not really read what the customers want until the bid is accepted.

    
    
        foreach(newProject as project){
            new Bid( projeckt.averagePrice * 0.8 ), "We are the best nd have done this many times");
        }
    

In the most cases they can really solve the problems and get good ratings.

Some clients include a "password" in the project description and ignore all
messages without the password.

------
tlrobinson
_Project Creator: AlanT_

Perfect.

------
dmead
what if that program finds bugs in itself? wheres your god now?

