Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Ask HN: How many have learned a language they hated just to get a job?
14 points by mlLK on April 1, 2010 | hide | past | favorite | 51 comments
I'm an undergrad about to graduate here in December and I can't express how frustrated I am 'weeding through' all the .NET, C#, ColdFusion, J2EE, ASP jobs within 25 miles, not only on the obvious job boards, but on my School's Engineering job board as well.

I could very well be looking in all the wrong places (openings within my commute), but if I can't find an opportunity I can properly invest my talents with while working along side other developers/designers than going to sink my time learning a language I'll probably end up hating.



Learning a language you hate takes you very close to hating the entire job, which is no way to work. Never settle for that, life is too short.

Keep working on side projects that do interest you, and make them public, so that it's always easy to show prospective employers what you can really do. Spend your time boosting your skills and having fun, even if your first actual income comes from something completely different, like mowing lawns.

One thing about programming is that it can be done from anywhere; try applying for a job that's outside your local area, and see if there are any that allow remote work. Some companies won't offer this unless you have years of experience, but some might do it anyway; it all depends on how good they think you are.


I just wanted to tell you that what you've learn in other languages are usually usable in many languages, even if it's not standard procedure. For instance, with C++, you can use Boost and use foreach with a (kind-of) lambda. It's not a real closure, but still, my point is that don't dismiss things of your favorite language when you need to use other ones.

I remember implementing a genetic algorithm in C++.. I used a functional way of doing it and it turned out to be a real pleasure. I even made it multi-threaded using a STL-like threading library which encouraged a functionnal style.

And also, don't forget, by learning new language, it will make you a better programmer, period. There are also way more than "programming" in a software job.

Communication between developpers, Communication with the client, designing a robust system, etc. Implementing in your not-so-favorite language might only be a small pourcent of the real job.

That was my 5 cents on the subject :p


Okay, this comment will sound trollish, but that's not my intent. I am not an C++ advocate by any stretch of imagination and I presently program in Java for living (and certainly like my job). Note, however, I am also speaking of in the context of professional programming, not open source projects/communities.

I tend to find that C++ jobs and the C++ developer community is usually (key word being usually, not always or even "almost always") more pleasant than the Java and even dynamic language jobs and communities.

I'd guess first reason is that C++ isn't very useful when you're doing simple work (such as data base driven websites, although it's certainly possible e.g., okcupid). The sort of projects where only C or C++ make sense tend to just be more interesting (embedded, systems programming, high performance/low latency computing).

As it isn't an easy language, it takes more motivation than just money to learn it when there are other choices on the market. It's difficult for all the wrong reasons: not because it introduces powerful concepts like Lisp and ML-family languages do (which take time and effort to learn and understand), but because of complexities of manual memory management (especially if your dev organization doesn't like boost::shared_ptr and boost::scoped_ptr), inadequate standard libraries (stl and boost are nice -- again, if your dev organization allows you to use them -- but you almost always have to go beyond them and build your own data structures), etc... However as a result of the difficulty barrier, people who program in it tend to be smart and passionate and are more likely to write tools in Python and Perl and learn Haskell in their free time.

Additionally, when the PHB mandates C++, he can appeal to the developers' favourite (and most dangerous) indulgence: premature optimization instead of telling the truth ("I don't want to get fired if I screw up, so I am going with Industry Best Practices"). I've seen organizations go Perl to C++ and OCaml+Scheme to C++. There would be discontent, but there usually wouldn't be an exodus. I've never seen companies go Perl to Java or C++ to Java without an exodus of developers (either before the switch, allowing the switch to happen, or after, caused by the switch).


Maybe a bit late, but here is my experience.

At the end of the job search I had to choose among two companies. One was developing in python, the other in php. At first I felt inclined towards the python-based one, mainly because of my taste in programming languages. I had sweared to myself I wouldn't do java, asp or php, and like you I was disappointed at the fact that the vast majority of job offers required those languages.

After getting to know both, however, I ended up going to the php-based company.

I realised that what I actually dislike of java & co., more than the languages themselves, is the mindset that the people pushing them _often_ have. Mind you, often, not always. And that was the key.

The people at my company started this project about 10 years ago, and at the time php was the natural choice. They're not the old-aged, process oriented, boring, enterprise-y. They're agile, quick, creative, curious. We use git, introduced and extremely cool release management strategy, started a new project in python, moved a lot of the functionality on the client (on the browser), and so far even the work on the php backend has been a lot of fun (~1 year into this job).

I'd say the key factor is: do they have a hacking mindset or a process-enterprise mindset? With the right people php can be fun too :-)


and of course: Do they play UT2004? And how much being made fun of would you have to endure for having to retype that obscure command in your ubuntu terminal just to get the Alt-modifier key to work again.

And don't get me started about averages...

Glad to have you with us :-)

<? if ('1foobar' == 1) echo "sigh"; ?>


If you don't like the idea of uprooting yourself to find a job, you'd better move to a big tech area now. Don't put down roots in a place where your every career decision will be compromised by the lack of opportunities. Eventually some local downturn will force you to uproot yourself anyway, and all your career sacrifices will be for nothing. Just move to a huge tech hub right away, and then you can feel (relatively) comfortable putting down roots.


On my CV I have "Languages used: C, sh, perl, awk, Maple, x86 assembly" immediately followed by "Languages NOT used: C++, Java, Erlang, Haskell, Python, Ruby, PHP, C#". I'm sure it has resulted in me not being offered some jobs, but I'm not sure if it has cost me any jobs which I might have considered accepting.

Don't ask what languages are being widely used. Ask first what jobs/companies you're interested in; then find out what languages they require.


Please don't take this question the wrong way, but what kind of programming jobs do you usually take?


My expertise is in computational algorithms, cryptography, and security; I sometimes wander into numerical analysis or data compression. I don't do programming per se; but it's a tool at my disposal when a research or design problem requires it.

I'm not looking for a full-time job right now (I'm working on Tarsnap) but I do occasional consulting in the areas which interest me.


Do you actually hate the languages listed under "Not Used", or do you just find them useless for the kind of work you do?


I dislike those languages, in part because I find them unnecessary for my purposes, and in part because I hate their fanatical adherents.


Thesis- hating a language is a mark of a good but not great developer.

Hating the sort of work a language is usually used for is something different, however.

Perl is the one exception, of course. All right-thinking humans hate perl.


> Hating the sort of work a language is usually used for is something different, however.

Right on the mark. My day job involves working on a very interesting Java project (which actually doesn't hurt much by being in Java; C++ is the typically used languages for these sorts of projects). All else being equal, however, I'd stay away from job listings that only require Java (or that mention J2EE), as they typically imply "write web applications". Now a job listing that asks for domain specific knowledge (e.g., search algorithms) and asks for "Java, C# or C++ knowledge" (i.e., whoever wrote it is clued enough to know to that learn one of these, you know the other two) is different matter. That being said, I'd rather these listings say "Knowledge of C and any OO language" instead: Java and C# programmers who don't know C#, don't know those languages are doing behind the scenes (and would be out of clues as to why their application leaks memory despite running in a VM with a GC, or why the GC is causing their app to stop for whole seconds).

> Perl is the one exception, of course. All right-thinking humans hate perl.

For an alternative opinion on Perl, I'd suggest looking at "Non-Lisp languages to learn" Chapter in Doug Hoyte's "Let Over Lambda". He makes a very compelling point of Perl being a "beautiful blub": UNIX ideology taken to the logical extreme, but giving a developer lot of freedom as a result (see Class::Mop or Moose for example).

That being said, I completely understand you. There's some languages I can't stand. In my case that would be ASP, PHP and Visual Basic. These languages (and the code bases written in them) tend to reduce one's power to that of a fourteen year old with no computer science background. They took 90s/early 2000s Java/.NET anti-pattern of "re-usable commodity developer component" model () to the logical extreme: these languages don't offer any* tools that enable one skilled developer to compete with many (cheaper) unskilled coders. Whereas Java suffers from typically being used for very uninteresting tasks, these languages can only be used for very uninteresting tasks.

(*) Of course, since it's Java it would be "IReusableCommodityDeveloperComponent developer = ReusableCommodityDeveloperComponentFactory.getReusableCommodityDeveloperComponentInstance()", with bunch of XML files binding that factory to a university or even a trade school.


> UNIX ideology taken to the logical extreme

I thought "UNIX ideology" was "streams in motion; streams at rest." (Everything reads streams and produces streams; you create complex programs by piping a stream through smaller programs.) Shell scripting is really the pinnacle of UNIXism.


I was thinking "there's more than one way to do it". Perl can also handle streams very efficiently and do lots more. Having worked in the operations world, I also find shell scripting to be an anti-pattern. Automation/tools built as shell scripts are much more brittle and harder to make _production_ ready (i.e., running 24/7 in a datacenter with no human intervention, but being held up to a strict SLA).

Perl (as well as Ruby and to a lesser extent Python) lets you scale from simple scripts to full-on tools. It's easy to write pipes, filters, one-liners and simple scripts in Perl. You can then add logging to them (using the excellent log4perl package), let them make socket calls to a monitoring system (or embed a server in them to let a monitoring system connect to them), debug them with a real debugger, extend them to call C libraries (xs is easy) and package them into classes and packages, allowing others to re-use them as components of other systems.


I've liked all languages I've learnt but the first language that I loved was perl.


point : in your enterprisey java/.NET shop, you can play with clojure, scala, F#, groovy, j/iron Ruby/python, axum. Fun stuff. Write tests, build tools, analytics. if you get called on it, you can argue it takes less time to write support structure code in __, and you're a busy guy.


I'd love to see Perl6 released. By incorporating first order content free grammers, it could the same for CFGS that Perl did for regexes. That would be world changing.

As for PHP: structured, clean PHP (written by people with an education and development experience in other languages) looks like Java. So why not just use Java: you get better performance (without having to compile it to C++) and access to great libraries. Of course, now that you're on the JVM you might as well start using better languages (Scala, Clojure, JRuby), which to operations look like just another jar/war file.


oh, yeah, the canonical lecture about you may not especially enjoy java and C# the languages but the JVM and .NET platforms are pretty evolved platforms, nice IDE plugins, gazillions of well-tested libs for any common needs.

Don't forget VS2010 out in 12 days, woohoo! And i'm not sure what it means to combine Hotspot, OpenJDK and JRockit but it'll be excitin'


Think about moving after graduation.

If you hate your job it will seep into other aspects of your life. Life is too short for that.

Go out and find your adventure.


I feel your pain. For my first "big corporate" programming job, I had to do PowerBuilder development. Coming from Java/C++ background, it was like hell on Earth.

I stuck around though, did PB for a while, and 2 months later a Java position opened up, which turned out to be great.

So - I wouldn't get too caught up in that, but YMMV


I wouldn't worry about the language bits (as long as it isn't something entirely brain rotting like ColdFusion, ASP, PHP or COBOL), as much as by the fact they all seem like the usual enterprisey "read text from a database display it on a screen" jobs. A CRUD app in Ruby or Python is certainly a lot more fun to build than in Java (and most importantly, easier to maintain and modify), but it's still a CRUD app.

I'd suggest looking into a different geographic area, joining a technology company (which produces a software product; serious Internet companies fall under that umbrella).

I'd recommend high-traction, well funded start-ups that have been around the block (with serious technical identities); big tech companies like Amazon, Google, Microsoft or Yahoo are a good bet too: they solve very interesting problems and are willing to mentor you. Yes, they typically use various forms of blub for production code. However, no one will object to you writing a prototype in Python (or an IDL->code translator in OCaml), and you'll be able to pick up skills that are rare and meet serious hackers.

The reason I don't recommend smaller start-ups is that their goals aren't always aligned with yours: your goal is to build up the skills needed to solve big, interesting problems; depending on the founders, investors and the market the goal of a start-up might be to make any product, even if there isn't much technical skill (for you) to be gained by building that product.

Knowing something others don't know (it could be machine learning, search, compiler construction, systems programming, numerical analysis, etc...) means you're not a commodity. If you're not a commodity, you're much more likely to be allowed to use non-commodity tools (e.g., start a pilot project in Python, Erlang or Haskell instead of Java or C++, or start adding Scala modules to an existing Java application). It also means better pay in the long term, but you should not use pay as a yard-stick when deciding on your first job: an MBA-type "founder" might be really desperate for you to a web app for him, but a software company is making an investment in you.

Edit: see the comment from cperciva -- if you have skills (in his case security and mathematics, from his FreeBSD and academic work) that others don't, you can find ways to use tools that you enjoy using: either by finding a workplace which uses these tools or having enough "clout" to introduce those tools to other companies.


I very nearly learned C# just so I get could a job in my geographical area. Turns out, if I was a bit flexible there were a lot of jobs out there doing the PHP development that I really enjoy.

Don't make too many compromises though. Learning a language that you don't like is going a bit too far to get a job I think.


You're looking on the wrong job boards most likely. I almost never see any of those languages where I end up seeing jobs.

Try looking at meetups (which allow job posts), job postings advertisements on programming sites, etc instead.


I've learned a bunch of languages while working at justin.tv, and have disliked each of them to some degree. Think of it as the price of admission to being able to do interesting things.


By not broadening your skill set and opening yourself up to opportunities using the languages you've listed, you are seriously limiting the scope of your job search anywhere. Don't let the "big buzz" on the web fool you, the majority of developers are holding jobs in shops that use Java, C, and C++.

That said, take the advice of people here and don't constrain yourself locally. You're at a perfect time in your life to be free and go wherever to find the work you really want. Take advantage of that freedom!


my advice would be to simply apply to any job that you think you might be interested in, regardless of the language. most entry level positions have an expectation of a learning curve.

submit a cover letter that states how quick you are at learning new things and how you're willing to put time into learning their chosen language before you arrive.

for most companies, entry level hires are about picking up the talent, not the experience. demonstrate your talent and drive and you'll have a decent chance.

thats how i got my job, at least.


The only thing to avoid are companies that don't care about developer talent. Their goal isn't to grow talent, they want to find someone who will jump right in and meet their business needs (no more, but also no less) -- and when they leave, can be easily be replaced. That's why they're using these technologies: they can just look for somebody who knows Struts 1.4, Oracle and Spring (or w/e) (and these people are plentiful).

That's not to say they don't care about any talent: it's just software development is neither their core competency nor a competitive advantage. They may have great pay and hours (and may be doing something great for the world), but if you're a programmer because you love programming, you should go (at least for your first job) to an employer that will invest in you.


best to avoid, perhaps, but even if you do throw them a resume, they won't interview you because you don't have the skill set. so, doesn't matter too much in the end.


ColdFusion was the big one, I hate the language with a white hot passion now, no job is ever worth the abomination of learning that steaming pile of garbage.

To a lesser extent, C# I ended up learning only because a side project was in desperate need of more coders. I didn't like it much but nowhere near as bad as CF.

And lesser still, Java proper the language rather than the environment. I don't much like it but I totally forgive it because of the JVM and all the excellent other languages that run on top of it.


I generally despise development. I can "program" (make small tools, scripts, etc) but I don't have the "developer mindset"

I learned PHP and MySQL to get a promotion when my boss was considering hiring from outside the company. I generally don't hate PHP -- in fact, these days, I rather like it -- but I did have to do something I was averse to in order to land a job.


Programmers these days.

In my day we programmed in Java and liked it. ASP was the GOOD web programming language. We had to code up hill in both directions...

But seriously, there are good and bad points to every language. Sometimes I think the willingness to just love the good and work around the bad is half of being a really good developer.


My first programming job was in VB 3.0. It was a horrible and awful experience at a churn and burn consultancy, but it was a job and gave me a chance to make connections, learn Perl, and get a better job that I liked much more.

If you don't have any experience you should accept that your first job is going to suck in some ways. I would suggest not worrying about the quality of the company or environment so much as the presence of opportunities to do different things, grow, and move on. Which you will do at some point.

And in this market, being picky is particularly unadviseable. :-(


I'd actually suggest being picky about the first job. Reason for that is that once you're younger, companies are investing in you. Once you're older, they expect a return on that investment.

However, I'd suggest being picky not about the language used, but about the difficulty/challenge/"hard-core" feeling of the position. Pick the company that had the toughest interview questions (don't even consider one that doesn't ask you to write code on the whiteboard!), uses technology that is the most challenging (rather than simply complex), solves the most difficult problems and is willing to let you work on a team solving those problems (rather than assigning you to e.g., QA).

It's always harder to go "easy->tough" than "tough->easy". I'd hire a systems programmer to write web applications (if that's indeed what he wanted to do), but I'd be hard pressed to hire a web developer to do systems programming (unless he had open source work to show for it).

Additionally, right or wrong certain large companies prefer work this way: they hire new grads from the outside for junior positions and then hire internally (i.e., promote) for core senior positions. They will, occasionally hire someone with experience from a comparable large company for a senior position (after a difficult interview), but they won't hire someone coming from a start-up for a senior and core (i.e., software engineer vs. QA) position. The argument is that large companies have certain processes and challenges which are unique to them and don't occur in start-ups.

They also won't hire an experienced person for a junior position, knowing they (statistically speaking) won't be motivated enough while earning lower pay to advance through the ranks to fill a senior role.

So if you'd like to work in certain places (e.g., you want to be at IBM Research) it's much easier to get your foot in the door as a new graduate.

I would say, there's may be a period of 2-4 years from "get your last degree" to "seen as damaged goods by big corp". In practice this means, you can try a particularly interesting start-up right out of college or (if you feel your career is going nowhere), go back for a Masters and make yourself a "college hire" again.

It's not fair and there are exceptions (I'd imagine Google generally ignores various big-company anti-patterns in hiring, although they're still seen as "favouring new grads" by ignoring experience), but it's a possible consequence of choices one makes.


Interesting. Everything you say runs directly counter to my experience. However I've also never worked at the kind of large company that you're talking about.

With one exception. My first job involved consulting at Bristol-Myers Squibb. The result of that was that for some time I was unable to enjoy Dilbert cartoons because the wounds were too raw. They were true.

Based on that experience I wouldn't want to work for that kind of large corporation. Luckily tech tends to be filled with young companies that grew up with very different cultures, so I've never again had to suffer through that kind of dysfunctional culture.


I've never learned a language I've hated to get a job, but I've learned to hate many languages (or at least aspects thereof).

Learned being the operative word.

At this point in your career you'd be well served to learn idiomatic blub a few times over, in the same way you'll be well served to work with a variety of personality types.

When the time comes for your next venture, be it in 6 months, or 6 years, you'll make a better decision i.e. grounded in understanding, about each.

Rinse; repeat.

Edit:

I'm not suggesting you take just any old job, however. Be discerning.


I learned "corporate" to get a job. It's comes with a huge collection of bizarre operators with baffling precedence rules and a template library that spews out errors to rival C++ STL circa 1999. It also changes, my most recent job introduced me to the "cloud" type which got everyone excited but then we learned it causes segfaults whenever it interacts with the standard "security" classes, and suddenly I'm managing two separate platforms.


I've learnt Java (J2SE). I have an embedded systems background. Hated it at first (lack of possibilities vs C/C++), but in the long run there are benefits. Frustrations are still there and the fun is limited (no risk, no fun), but you can work your way out. Brainwashing yourself is option #1.

I still enjoy working on side projects too, with the tools I like (web dev, PHP MVC...).


I would suggest that the correct thing to do at that point is to move somewhere with a better tech community in the languages you do like.

I moved(without having and commercial experience behind me) to a more technical city just as I was finishing Uni and managed to find a much better job with much better coworkers than I could have had in my starting city quite quickly.


I never "hated" Perl, but I only learned how to use it because I heard it was pretty useful. It grew on me and I now love it.


Perl was my first language, and my progress suffered as a result. Don't get me wrong, I love Perl and use it for things, and while there are many ways to do things, most of the ways are fairly awful, and I had to go through many iterations of writing the same code to now at least be somewhat confident. Probably as a first language it would've been nice to be forced to be clean initially! Perl allowed me to get away with so much..


Humans have a perverse faculty for learning to love nearly anything, given enough time.

You think we're built to drink beer?


So you don't want to work with .NET or Java or ColdFusion or ASP (classic ASP 3.0?). What do you want to work with?


How can you hate any language until you have spent the time to learn and understand it?


> How can you hate any language until you have spent the time to learn and understand it?

There's also a risk that if you don't know a popular, but bad languages (or at least take time to understand why people call it bad, rather than just read what other people have said), you won't know to avoid other languages built along the same lines.

Also, while a language overall might be unpleasant, it can still teach you new concepts. I had to be dragged screaming and kicking away from Perl and C++ into Java. However, Java has got me thinking "if only there was a garbage collected statically typed language with a good concurrency/threading story that wasn't as verbose, had first class functions and (optionally) did some form of MI/mixins". That thought lead me onto Scala, OCaml and (once I have some free cycles) Haskell.


Get a job somewhere with cooler jobs? Like the SF Bay? Seems like the obvious fix.


Or Seattle, WA or Boston, MA. Additionally Austin, TX and Portland, OR.

Honestly, Bay Area (and especially San Francisco proper, rather than Silicon Valley) do suffer from too many "widget" start-ups, which should be viewed as media companies, solving social problems -- not technology companies. New York and LA start-ups tend to be even worse in that respect.

When I visited Boston, I noticed the start-up scene had a more of a "hard-core tech" feel to it. I saw purely technology start-ups. The people calling themselves entrepreneurs were _engineers_, not marketers and project/product managers (as is often the case in Bay Area; note: that's not to say PMs and markets aren't important!). There was more "ZFS vs. btrfs" talk and less "agile lean customer development start-up" talk.


There's plenty of real tech in the SF Bay -- you just have to have enough sense to look for it since, yes, the signal-to-noise ratio in SF is a lot worse than other tech areas.


Not implying there isn't. Quantitatively, there is likely still more real tech in Bay Area than anywhere else. I am in Bay Area and likely not going anywhere :-) It's the signal-to-noise ratio can be distracting and upsetting for somebody new. I've seen lots of smart young technologists waste away implementing a "business guy's" vision and (after three-four years of nothing but web development) end up unhappy, but with few other career options.


JavaScript is my hated-needed


Where do you live?




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: