
Is it bad if I don't want to work at a C++/Java startup? - gregwebs
I have an opportunity to work at a company coming in as employee# &#60; 10.  They are doing so well that they are already profitable after a year and trying to keep up with the demand.  I think I would really like working there, except that they use C++/Java.  I want to accomplish as much as possible in my life, and coding memory management in C++ or otherwise being limited to unexpressive languages just seems to prevent that goal.
======
cwilbur
If you think you'll be unhappy doing the actual work that you'll be doing when
you take the job, the job isn't worth it. There's no difference between being
employee #9 or being employee #99999 in that regard.

Also, if they're successful enough with their current languages, you _will_
_not_ change them. Taking a job saying "I know they use X, but I'll talk them
into using Y instead, and _then_ I'll be happy!" is like entering a
relationship saying "I know she does X that drives me nuts, but I know if I
pester her enough, she'll stop it, and _then_ I'll be happy!" Doesn't work
that way.

------
jsjenkins168
I've noticed there is a negative bias towards the "enterprise" languages by
many on this forum. Not calling out gregwebs in particular, just speaking
generally.

I think much of the negativism stems from the hacker mentality that big
companies are evil and that breaking the rules is cool. Therefore anything
that big companies do or use is automatically uncool.

Nothing wrong with this mindset, but I think it often goes too far with some.
Java and C++ are not bad languages. Yes, most large software companies use
them but there are some reasons why they might be a desirable choice. One is
that these languages work well in a collaborative work environment. There are
many proven debugging tools, established QA practices, very good IDEs with
integrated revision synchronization tools, etc. While these may not matter for
the hacker or small group of hackers creating something cool, they are very
important considerations for a growing software company who has plans to
scale.

So with this understanding in mind I wouldn't automatically rule out a company
based on the fact they code in C++/Java. Ask them why do and you might
discover that there's more there than what meets the eye.

~~~
gregwebs
There is definitely something wrong with the mindset that big companies being
evil. However, the bias towards "enterprise" languages does not come from
this. It stems from experience in working in big companies that are
unproductive. It also comes from personal use of the languages, and reading
about, exploring, and programming in different languages.

------
smg
If you are really good at C++ (gork template metaprogramming, Alexandrescu's
Modern C++ design) you will be as or more productive than most average people
programming in Ruby or Python. Instead of focusing on the language think about
the kind of people you are working with. Today you will find a lot of kool aid
drinking kids coding in lightweight languages and quoting from Hackers and
Painters at every opportunity. That does not mean they produce high quality
software

~~~
euccastro
That's not saying much in favor of C++ is it? If you are really _really_ good
at assembly you will be more productive than most average people programming
in any language. That's because most average people aren't very productive at
all.

But this wasn't his question. If he has what it takes to get really good at
C++, he will probably get really good at Ruby or Python in that time.

I happen to work in a place where we use Python and C++, and I claim that for
any problem domain for which higher level (lightweight?) languages are
suitable, they are a clear productivity win over C++, for people of similar
experience.

I agree that people are more important than language, but the choice of
language also tells you something about the people. I suppose the poster has
more relevant information about the people, though.

------
brlewis
There are many more factors to accomplishing as much as possible than coding
efficiently. Go join them and find out what they're doing right. Later you can
do your own project and add the advantage of a superior language to the
advantage of knowing what a successful startup looks like.

~~~
nostrademons
A caution: if they're doing everything else right except the language choice,
then chances are they will end profitable and successful by at least some
definition of success, but will not be as successful as they _could_ be. It's
very tempting in this situation to sit back and enjoy being an employee at a
successful company. That will not get you any of the big payoffs or excitement
of a startup.

If you're going to settle on programming language choice so you can learn all
the other stuff, you have to be willing to cut said successful startup loose
and strike out on your own once you've learned all the other stuff. This will
look increasingly irrational the better you do at your job.

------
mynameishere
C++. Pshaw.

Only crap companies like ID Software use that. What has Quake got on the
awesome expressiveness of Flickr, or Facebook or Google Suggest? I mean, just
in terms of sheer output, consider that _BOTH_ Flickr and Facebook are able
to...display text on a screen! And put jpegs in neat columns in div tags!

Pshaw. What has C++ got on that?

Seriously. Do away with the tunnel vision. When you're talking consumer
software, all of the output of all of the languages of the world combined
absolutely pale compared with that of C/C++.

~~~
euccastro
Nope. Hand optimized assembly pwns C/C++. And still, ID uses almost none of
that. Do they have tunnel vision too?

Flickr and Facebook don't display text on a screen. The web browser does that.
What Flickr and Facebook do is serve content to huge amounts of people. In
order to scale to these extents, your choice of language is not nearly the
most relevant decision.

Also, speed of execution is critical for web companies, while one of id's
mottos is "it's done when it's done".

------
edgeztv
I hear you. Right after grad school, I turned down an offer to work in a small
(and very profitable) CAD company with good people mainly because I didn't
want to code in C++ (and wanted to work with the web). A year later I chose a
smaller web company over Microsoft partially for the same reason.

Java, one the other hand, works pretty well if you have a lot of experience
with it and use the right tools (IntelliJ IDE). I feel like I am more
productive with Java+IntelliJ than with Python.

Good luck with your decision.

------
uuilly
I think there is nothing more miserable than working with tools that you don't
like. Part of the allure of starting a startup was not compromising an inch on
the exact tools you want. Follow your bliss, not your stock options.

That said, I suspect most people that pan C++ have never extensively used or
understood the STL or Boost Libraries. Undergrad C++ is nothing more than a
basic introduction to the language.

------
willarson
I think the important question is "why are they using C++/Java?"

If they are using them for efficiency reasons, then this may be a case
prematurely optimization, and they may not like the tools either, but feel
trapped into using them.

On the other hand they may be using them because they are most comfortable and
experienced using them. This is a pretty good reason to use a language, but
eventually leads to stagnation.

~~~
gregwebs
From what I gather, it would always be better for their product to run faster,
so they probably felt they had to use C++. I believe they are using Java for
the front end because they found good libraries for what they wanted to do. It
is possible they are being productive with their Java code by using pre-
exising libraries, but their C++ is from scratch. It does also seems that they
are comfortable and experienced using both languages. I don't think it crossed
their mind to use other fast languages in place of C++ such as D, O'Caml, or
Haskell.

------
mdakin
Personally I'd take a great team of smart, flexible people over my choice of
programming language any day. I think it all comes down to the specifics of
your nature, the team, and its environment.

------
mattculbreth
Going to dissent with the other respondents. If you think you'll be unhappy
(and therefore probably unproductive) using C++ then don't do it. There are
other startups, and of course you could always do your own thing and pick your
tools.

This isn't to say that C++ is necessarily bad, but I wouldn't want to work in
it (again) either.

~~~
gregwebs
I don't think I would be unhappy and uproductive, just not as happy and
productive as I could be.

------
nostrademons
I am in almost the exact same situation, except with 2 years of hindsight. I
joined a startup straight out of college as employee #13 (at the time, it had
about 8 employees in the office at any given time). It was profitable, I liked
the people, and they were doing some pretty cool stuff.

Overall, I would do it over again but probably will not remain with them for
much longer, if that makes any sense. Some observations:

The language choice _will_ grate on you after a while. I dunno what the
background of posters saying "Be professional. Suck it up." is, but I actually
_liked_ Java coding when I started, and have since learned to hate it. If
you're going in with a strong aversion to Java & C++ already, it'll probably
only get worse.

Flip side is that you _do_ get better at these languages after you work with
them a while, as long as you keep an open mind. There are tricks and tools in
C++ to help you manage memory - you shouldn't be tracing pointers from new to
delete. And Java's verbosity isn't as bad once you get used it and consider
"for(int i = 0; i < array.length; ++i)...." to be a single map function that
just has a really long name. ;-)

One question to ask that'll help you determine if the language will end up
becoming a total drag: are they using it because the problem fits the
language's strengths, or are they using it because they don't know any better
and aren't comfortable with multi-language solutions? _Every_ mainstream
language is good for something. In my case, I was perfectly happy as long as I
was writing IDE plugins and server software in Java, and then became very
unhappy once I had to write a webapp. (IMNSHO, Java is irredeemably broken for
webapps; the only sane way to do them is to strip out all the JavaEE bullshit
and program on bare servlets, but then you get something that's nowhere near
as nice as Python/PHP/Perl.)

There are plenty of things beyond programming that you learn from working in a
successful (profitable) startup. OTOH, it's not rocket science. Basically, you
can boil it all down to: 1.) Make something people want, 2.) Charge more for
it than it costs you, and 3.) Fix problems now rather than later. Every failed
startup I've been involved with has neglected at least one of these: every
successful startup has done all three.

I dunno what you expect financially out of this, but be aware that founders
get rich, late-stage employees get paid, and early-stage employees get
screwed. At least in proportion to the amount of effort they put in. One
startup I worked in went bust, taking my 0.1% of stock options with it. One
that I interviewed at offered me about 0.01% of the company; I did the math,
and calculated that at their expected $40M exit, I would get a whole $4000. I
have no equity at my current employer. My cubemate was an early employee at
CCBN, which was sold to Thomson for about $40M. He got $3K or so. I have
another friend who was employee #35 at Stratus and later a VP; she was rich
for a while when they ended up with a billion-$ market cap, but ended up poor
again after the stock crashed. If you plan on being an early employee at a
startup, you should do it for learning or for the experience rather than any
perceived financial rewards.

~~~
pg
I think your experience as an early employee may have been unusual. A startup
getting a series A round is typically made to set aside about 20% of the stock
for new hires. So .01% is a preposterously low offer, unless the company was
huge.

~~~
nostrademons
I would've been employee #22 at the company. I also worked at another startup
- 0.1% for employee #13. That may have been low-balled a bit because I was
straight out of high school.

I've heard that the options pool is usually about 20% of the company, the
first hire gets about 2.5%, and then it decreases exponentially from there. So
the second hire might get 1.5%, the third 1%, the tenth about 0.2%, the 20th
0.01% (perhaps a bit higher; it seemed low to me too, which is why I didn't
take the job), and on down. If you gave 2% to each of the first 10 employees,
the options pool would be exhausted right there.

Of course, the company is hopefully growing all this time. But if you're
employee #20 or even #10 and the company is profitable, they may be heading
for a liquidity event soon, in which case there's not much time for growth.

My current situation - no equity at all - is atypical, because it's a
bootstrapped startup and the founder really wants to maintain control. IMHO
it's probably a mistake - I know I'd work a whole lot harder if I had equity.
But I get a decent salary, and it's really the founder's call...

~~~
mattculbreth
I downmodded you by mistake because of my fat fingers on this iPhone. I guess
either I need to zoom in next time or Paul needs bigger buttons. :)

~~~
euccastro
I upmodded to compensate :).

[pg: Anyway, why is it that you can't correct your mistakes/change your mind
when voting? I think reddit's way of marking your current vote with colored
arrows, which you can click again if you change your mind, is better (you may
prefer to use shades of grey, or the YComb orange color for the 'chosen'
arrow.)]

------
reeses
There's a broad line with "C++/Java". You can use C++ as a safer C, and yes,
that's generally unpleasant. But if you're leveraging STL, Boost, and some GC
like Boehm, among other extensions, it's a great deal better. Same with Java
-- if you're leveraging Java 5/6 functionality, using Groovy for scripting,
etc., you're going to be stretching your brain with something other than
memory management.

Ask them how they use the languages, and you might find they wrote their own
compilers for DSLs or other things you'll enjoy working on.

All that said, the market is ripe right now, and it's a good time to be a
prima donna about what you'll work on.

------
PindaxDotCom
If you really want to accomplish as much as possible in your life, you could
start by throwing out your prejudices. Computer languages aren't religions,
they're tools, get over it.

~~~
gregwebs
Throwing out predjudices is always good advice. However, Paul Graham and
others have argued (convincingly) that a language is not a tool. A compiler is
a tool. A language is the actual medium that a programmer works in. It will
effect every aspect of a software project, including the way in which the
programmers think.

~~~
mdakin
Sucks to your Sapir-Whorf hypothesis! That said higher-level languages do have
real, non-mythical advantages over lower-level ones if one is trying to work
quickly and with minimal effort. Good luck with your decision.

~~~
euccastro
What is the tradeoff you imply here?

I don't suppose you think there are situations where you want to be slower or
spend more effort just for the sake of it?

~~~
mdakin
My point is that there are many really good, legitimate and numerically
quantifiable reasons for using a high-level language that have nothing to do
with the mythical, unprovable Sapir-Whorf justification.

As for the "tradeoff" I mean that high-level languages are particularly useful
if one is primarily interested in minimizing development time possibly at the
expense of other variables. Examples of "other variables" include processing
time, memory usage, ease of hiring cog-like but adequate developers to
maintain the system, company politics, etc. Such other factors are used
everyday to justify the higher-effort solutions.

Does that make more sense? Sorry for any confusion.

~~~
euccastro
Saying that the programming language conditions how you think is not
equivalent to Sapir-Whorf. Think of it this way: an expert Lisp programmer
using C++ will be very aware of the shortcuts, simplifications,
generalizations, ... that he could be implementing with higher order
functions, closures, macros, etc. He _can_ have these thoughts even though he
is using C++, so no Sapir-Whorf here. But many of these thoughts will only
serve to cause him pain, since the required techniques are impossible or not
worth it in the less expressive language.

Processing time is a real tradeoff, but you can go a long way if you get good
at identifying the bottlenecks and translating the critical code to a faster
language. I work in a massively multiplayer online game, which is a very
performance sensitive application both client and server side, and most of our
code is Python (and I think a good part of our C/C++ code could be ported to
Python without significantly hurting performance).

Theoretically, high level languages should eventually perform better, not
worse, than low level languages, as compiler technology improves, because the
compiler has more information and freedom to perform optimizations. OCaml is a
high level language which claims performance on the order of C.

Re: memory usage, I'm not convinced the overhead of higher level languages is
a big deal, except for apps in very restricted hardware. Unless you mean cache
coherency, which goes back to speed.

Re: easy of hiring, in my company we had some graphics guys picking up Python
and contributing useful code in a very short time. We also had C++ programmers
picking up Python easily, although I must admit C++ habits and idioms die
hard.

That said, ease of hiring cog-like developers and company politics is not what
I'd look for in a startup.

I admit I cheated by mentioning Lisp, OCaml, and Python to reply different
points. Lisp and OCaml are less mainstream and not as trivial to pick as
Python, which in turn is not as powerful or as efficient as these.

So yes, there are tradeoffs, but I wouldn't pick C++ as the pragmatic
compromise, not even for big business. IMHO, Python + C (via ctypes) for close
to the metal stuff would be it. For personal/startup work, I'd go for Scheme,
and be happy to limit my hiring choices to people willing to learn that.

~~~
mdakin
If you read my replies carefully you will realize that we are likely in
agreement on many points and that you are putting words into my mouth.

As for the Sapir-Whorf argument the relevant case is not what the Lisp
programmer thinks while programming C++ but what the only-C++ programmer
thinks while programming C++. Are there thoughts he is not capable of thinking
because he has not been exposed to Lisp (or any other non-C++ language)? I do
not believe this is the case. How would Lisp have been invented if only Lisp
programmers are capable of thinking at that level of abstraction?

~~~
euccastro
Sorry if I gave that impression. I realise some of the things I said in my
latest reply may come across as trying to refute arguments which you of course
didn't make. My intention was to go deeper into what you said about the
tradeoffs involved. I admit my arguing for high level languages was a bit out
of place in that context; I guess I got carried away by the tone in the rest
of the thread. In particular, in my last paragraph I didn't mean to imply that
you were proposing C++ as a pragmatic solution, esp. for startups. So please
accept my apologies.

With the Lisper-coding-C++ example I was trying to convey that even if you
could think such thoughts, it wouldn't help you much for practical purposes
unless you can express them in a convenient way. So, even if we discard the
Sapir-Whorf argument in the literal sense, for practical purposes you may just
as well pretend it's applicable.

That said, I find different languages _do_ shape how you think about
programming.

The people that invented Lisp were mathematicians, which of course were used
to thinking at a pretty high level of abstraction. It's not strictly
_impossible_ to come upon the same ideas on your own, just as it's not
strictly impossible to come upon ideas that are not expressible in your
natural language, even if you accept Sapir-Whorf. After all, somebody had to
invent the words of natural languages too.

But there is a huge leap between learning a concept(+) and inventing it.
Natural languages evolved over thousands (millions?) of years; modern
mathematics took a couple thousand years to discover. Yet most children learn
their native languages effortlessly, and a high school kid learns centuries
worth of mathematical advances in a few years.

So yes, you _could_ think of the thoughts that higher level programming
languages afford without having ever been exposed to those languages, but that
would be an exercise of lucidity comparable to finding a bunch of significant
new mathematical theorems, or to inventing new words for concepts that can't
be readily expressed in English, without having learned about those concepts
in French or Japanese before.

(+) edit: idea->concept

~~~
mdakin
I completely agree about learning rather than reinventing.

And I think learning different languages in particular is valuable because it
helps to intimately introduce one to various useful concepts.

But in general the most valuable of those concepts are both simple and
language independent. Typically you can map such concepts used in one domain
onto another domain and leverage them there as well.

I don't see the "languages" as being as important or as absolutely dominant
over thought as the Sapir-Whorf style arguments imply. Plus I don't believe
the arguments in an absolute, philosophical sense. And I've seen the argument
made too many times in a way that tends to insult some of our fellow
programmers for no good reason.

Anyway, I think we're probably in agreement about a lot of things but perhaps
the Internet is getting in the way of our communication. Interesting talk,
take care and good luck!

------
tx
Yet another thought! :-) Since company is so small, you can actually get them
to migrate from C++ to D! That would have been awesome...

------
budu3
I think you're being petty. If you like the vibe of the startup and you think
they have a future then go ahead.

------
geebee
I know I'm chiming in very late here. The original post asked if it is "bad if
I don't want to work at a C++/Java startup."

Of course not. This thread has turned it around a bit - phrasing the question
as if you wanted to work for a C++/Java startup (or at least if you felt
neutral about it).

I'm not surprised that's what's being discussed, because those are the more
interesting questions. But if you feel in your gut that you don't want to work
in C++ or Java, then for god's sake man, don't do it. You'll be really
unhappy, and I'm sure you'll have other opportunities.

------
cmars232
All languages suck, they're all Blub. Get over it. It seems kind of silly to
be a language snob if the team and opportunity are right.

Who knows, you might be able to embed scripting in their product. Maybe
automate a test suite with dynamic bindings to their libraries. Or maybe be
the voice of reason when someone on the team discovers design patterns or IoC
and gets delusions of grandeur.

------
tx
Nobody in their right mind has been coding "memory management" in C++ for the
last 10 years. This is not early 90s anymore.

Also, if your ability to "accomplish as much as possible" in your life is so
severely limited by the programming language s(i.e. tool) you use, then you
should probably rethink your approach to engineering.

------
sabhishek
It depends, If you don't like doing C++/Java don't go for that. imo don't
force yourself to do anything you don't like for that matter. True that C++ is
losing its sheen and Java is being called a new age Cobol , but they still
dominate the scene, its a matter of personal preference.

------
tx
Another thought. Just very recently someone posted "Ask Reddit: what is the
most beautiful code you've ever seen?"...

Knowing how much reddit dudes love LISP, Haskell, Ruby and Python, I was
_very_ surprised to see that almost exclusively everyone's favorite piece of
code was written... you guessed it - in C.

------
davidz
Why place so much emphasis on the language rather than the outlook of the
startup? If the startup looks promising and you believe in it. It shouldn't
matter if you need to work in _____(Write language here), I'd certainly go for
it.

------
maxklein
Don't be fulled by selective perception. C++ and Java are the backbone of
software.

------
herdrick
Your instincts are good - I'd guess that you'd slowly come to despise your job

So, what're your languages/tools of choice?

~~~
gregwebs
I am still working on the language of choice- I am learning Haskell and
Scheme.

~~~
herdrick
Great. I don't know much about Haskell, but Scheme is a great language for
startups. Start your own and apply to YC!

What are you using for learning Scheme? I recommend this one:
[http://herdrick.blogspot.com/2006/03/what-all-books-ought-
to...](http://herdrick.blogspot.com/2006/03/what-all-books-ought-to-be.html)

After that, take a look at the Scheme Cookbook for specific tasks.
<http://schemecookbook.org/Cookbook/>

~~~
gregwebs
I am going through SICP. I planned to look at the Little Schemer afterwards.
The cookbook link will be very helpful- thanks.

~~~
euccastro
I followed the same route and I kinda regret it. The Little Schemer is best
read with a Lisp-virgin mind. If you intend to read it at all, do it _before_
SICP.

Then again, if you don't want to wait for SICP I fully understand you too.

~~~
gregwebs
OK, I am buying the Little Schemer today

~~~
herdrick
I forgot to say above that the sequel, The Seasoned Schemer, is really great,
too. It's got some challenging parts though.

------
aston
This is some hardcore language hate. C++ is _the_ production coding language.
Java is _the_ enterprise coding language. You should want to join these guys
just to get your head around why all the companies who make a truckloads of
money doing software use these languages.

~~~
pg
What is "production?" Whatever it is, few web apps I admire do it, if it means
writing code in C++.

~~~
aston
Point taken, but mine still stands. Basically all of the software companies
with market cap north of a billion dollars have web-facing apps written in C++
and Java.

Whether you admire them or not is another issue entirely.

~~~
pg
It takes a while to get a billion dollar market cap. So if you use that test
you're looking at old technology decisions.

A better test, for someone starting a startup now, would be to look at what's
used by the companies started in the last year that seem most likely to one
day have billion dollar market caps.

~~~
aston
I don't know if you're entirely correct on the old school/new school
comparison. It's not as if Google decided way back in the late 90's that
they'd (re-)implement Writely in Java just because it was en vogue. That's a
newer technology decision than implementing reddit in python...

Ultimately, the question of what to code in is not nearly as crucial to
success as we're making it out to be. And answering that question "correctly"
has a lot to do with who's coding, how the code's used now, how you think
it'll be used later, and many other questions.

I think it's at least worthwhile to know _why_ other people use boring
languages. Then feel free to use cool ones instead, not because you're
impressed with how well Basecamp runs, but because you know you don't need
Google-sized scalability right out of the box.

~~~
pg
I suspect Google decided long ago to create a server infrastructure for
programs written in certain languages, which in turn dictated how they rewrote
Writely years later.

