Much better experience than I've had with the supposedly enlightened lisp community.
Also, Markus programs in straight java, not scala or clojure.
Much better experience than I've had with the supposedly enlightened lisp community.
Also, Markus programs in straight java, not scala or clojure.
Let me restate the problem another way: there are many more programmers who only know Java, than programmers who only know [other language X]. Single-language programmers usually aren't familiar with very much theory, and don't know any design-pattern-like abstractions, borrowed from intrinsic features of other languages, that they can put in place instead of just writing tedious, repetitive, dorky (er, I mean, "enterprise") code. 90% of Java's libraries are very, erm, "enterprise."
Are they? Apache's Commons collection of libraries such as ArrayUtils, StringUtils, IO, and the like, along with JSON-Simple/jvYAML, the servlet API, any database driver, Log4J, and just about every other library I use on a daily basis has a clean, focused, well-designed, and impeccably well-documented API.
I'm sure there are no shortage of "enterprise-y" libraries and APIs, but could you offer a few examples of common, popular libraries used in a large portion of J2SE (not EE) projects whose APIs are poor on a level beyond that which may offend your aesthetic sensibilities? Some that come to mind for me might be Swing (I don't write GUI apps), but am curious to hear what you've encountered.
Let me restate the problem another way: there
are many more programmers who only know Java,
than programmers who only know [other
language X].
Is this little bit of personal opinion by any way confirmed by evidence?I know many more programmers who only know php, actionscript, or perl than programmers who only know java.
I know you're not one of the cool kids around here if you don't build compilers in haskell, erlang or some dialect of lisp but this unsubstantiated anti-java sentiment is ridiculous.
I've programmed in a dozen+ languages (including scheme and python, which seem to be considered acceptable with the cool language crowd) and consider myself proficient with 4 of them (as in - I would have no problem starting a new project in those languages and will not often need to look up language docs) and for many uses I still prefer Java.
I suspect I am not the only one who shares that sentiment.
If your first language is PHP, or ActionScript, or Perl, it is very likely that you picked it up on your own—and thus are interested in the topic of programming in general, and will continue to learn from there, picking up bits of programming theory and new languages as you go. However, if your first language is Java, you learned it in school, because that's what they taught—you didn't yearn for anything more—and then there was a big bubble of EE employers ready and waiting to insulate you from the rest of the programming universe. Straight out of school, you start work for one Java company, and then transition to another, and pretty soon you're 32 and don't know what a combinator is or how you could possibly implement something like the JVM.
Having attended one of these Java schools for a semester, I can guarantee you that no one who graduated from there will ever learn another language. They know what they know, and they're happy with that. That what they know is Java is immaterial, except that that means that only knowing Java, by Bayes' law, becomes a positively-weighted-feature in the detection of these work-a-day programmers who need to be avoided at all costs if one wants to hire in a startup.
By coincidence—not by any flaw of Java or the generalist programmers who happen to know it and like it—the language that will most frequently appear on the resume of a single-language programmer is Java. This means—in the same way that given races of people get tested for given congenital diseases because they are statistically more likely to be afflicted by them—that if you're interviewing a programmer and all the previous projects listed on their resume are Java projects, it becomes more important to ascertain whether they know any other languages, because they are statistically less likely to.
This point is just a combination of the famous and well-received "programmer vs [language X] programmer" rant, and a bit of Bayesian analysis to determine which people applying for "programmer" jobs (i.e. generalist jobs, of the kind needed in startups) are most likely to actually be "[language X] programmers" instead. If you trained a spam filter on generalist-y-ness, it would flag Java as having a high correlation[1] with non-generalist-y-ness—that's all I've been trying to say.
[1] ...which is very explicitly not causation, I think I have to remind everyone at this point.
That's language prudishness, right there.
I also find your assertion that if someone learns PHP as a first language they're likely to end up a "better" programmer than someone who learns Java as a first language absurd. There are good schools teaching Java, and smart, inquisitive people studying it. Many of the best programmers I know still use Java for pretty much everything since it allows them to get their jobs done. Some know other languages, some don't. It's a purely pragmatic choice, but to say that those people would not be valuable to a startup is crazy.
Maybe the process you use when interviewing is good enough to separate these people from others who really don't know how to program, but it seems like they're going to be starting at a significant disadvantage if you're interviewing them.
Couple days ago I decided to shut my eyes off articles that compares programming languages and decided to stick with Java and Ruby. I don't plan to learn 10 different programming languages for the rest of my life unless I happen to get an offer in a company where they would want to train me in their technology. I have no plan to be a software developer for the rest of my life because that is a bottom-line job. It's useless really. Especially when there are too many effing opinions in our industry such as:
- We prefer young people (remember, y'all going to get old at some point, you'll be out of the game soon)
- We prefer TDD, Scrum, and Agile (those of you who dislike TDD will be crossed out from this list)
- We only do games (those web developers are out)
- We only do web-development (don't know HTML/CSS/JS? get out)
- We only do internal IT (you're a software product guy, you won't last long here)
- We do "Digital Social Media Marketing Branding SEO" (you're just a PHP developer, go make something)
- We do SAP, PeopleSoft, and Oracle Financial (you're not qualified even though you know .NET)
- We do embedded (web developer and enterprise developer, the door is right there)
- We only use Apple (not an Apple fanboy? doesn't worship Jobs? out please)
I'd rather spend my time learning the business domain, leadership, management, networking and how to live a life and achieve happiness than learning LISP, C, C++, HTML, CSS, Python (I know a few things about Python but by no means I can be qualified to work in a startup that uses Django).
I don't want to be 50 years old hacker unemployed (due to age) and have no social skill to convince people that I'm still worth. Besides, I want to have a retirement that doesn't bother my kids's financial situation.
Do you have any idea how long it takes to learn and master a programming language and the ecosystem (libraries, tools, the community, etc)?
It's a life choice that I decided and I don't think you should look down at other people choices.