5 ms·
There is no one Java culture. It's impossible in a community of that size and it is indicative of maturity and success. If you spend your time in Cambridge, MA
by pron 7y ago
There is no one Java culture. It's impossible in a community of that size and it is indicative of maturity and success. If you spend your time in Cambridge, MA you get a very different view of "American culture" than you would if you spent your time in, say, Tampa, FL, and there are many more people in environments similar to the latter. It just doesn't make any sense to talk of a particular culture when the ecosystem is so big. There are small, perhaps hidden, niches of Java with their own culture that are ten times bigger than the entire Haskell community. Of course, if you pick a place at random you're more likely to hit a Tampa than a Cambridge.
As someone who occasionally attends Haskell meetups I also very much disagree with your characterization of that community. I've seen people so bored out of their minds with the actual software they're writing that they spend their "interest" on language arcana and their time on re-writing bubble-sort using Free. Not to mention that it's hard to say anything about long term code practices in Haskell, because the number of large-scale projects, maintained over years by a changing group of people is vanishingly small, certainly too small to say anything about. For all we know, the practices employed by the average Haskeller are worse than those employed by the average Java programmer for long-lived software. The cries of anguish from companies with "legacy" Scala software (i.e. >7y.o.) that they struggle to maintain tell us that this is almost certainly the case when it comes to Scala developers. There are worse things, apparently, than useless getters and three-argument methods.
- BlargMcLarg 7y agoYou say it doesn't make sense. I raise to you, enterprise software. To be a little more pedantic, yes, you are correct. There is no "the" culture. There are a variety of cultures. My hypothesis is there is a predominant culture within Java itself, closely tied to the premise of making software developers as cheap and risk-free as possible. Java made it incredibly easy to at least have a net gain on productivity compared to its competitors at the time, along with the other benefits it has always touted ("free", write once). This attracted tons of people who would at best be average programmers, settling in said enterprise companies, and slowly got promoted all the way to the top. Those people all spent years on the basic OOP/design-patterns/noun-based methods-style programming, which produced the atrocities of AbstractFactoryFactory patterns people dread to hear, and are now actively fighting changes. Partially because, justifiably, they are afraid the code requires a higher skill level to understand than the average guy on the local market has. Partially because they are so far from the nitty-bitty code process, they only do code review, make architecture designs or have technical discussions and analysis taking up the majority of their time. Partially, because that's the way they learned it, and people are stubborn and set in their ways. In turn, the next generation may be tutored to be just the same, the big money is still being paid, and nothing changes because "this is the way we did it, this is the way we guarantee money, so this is the way we will continue to do it", or progress goes at a snail's pace. Not only is there a lack of financial incentive, you're fighting the existing, pre-dominant culture and still trying to make things easy to understand for certain types of people. At the very least, I see this attitude a lot in Europe. Emphasis on memorizing / knowing concepts that, in reality, aren't that hard (e.g. design patterns, micro services, dependency injection), to the point where we even have internal recruiters reject you for not citing keywords from the dictionary or knowing itty-bitty details about Java which you'll never see in practice. Loads of people with zero programming affinity coming into an enterprise job, often Java, after a short bootcamp. Most of these guys wouldn't begin to imagine the idea of a function being treated like a variable, or the concept of lambda functions. And frankly, I just can't get myself to care for differentiating between Java sub-cultures at that point. If I spent time in them outside work, I'd just get annoyed not being able to use those cool, productive features at work, spend weeks searching for a job I'm unlikely to get just to go back to writing ancient Java code again for Bob to understand because he can't grasp var. If I don't, my only exposure is the Java culture at enterprises, which is likely to be the same given the statement of the parent of my first comment (your comment). Damned if you do, damned if you don't.
- pron 7y agoThen I don't understand your point. You think less of a language that has managed to scale software both in size and in time than languages that have not? On what metrics and based on what data would you think they are better? Also, I've been in this business for about 25 years now, and I have never seen a correlation between obsessing about code concepts and success. Those who tend to be more successful care about requirements, design, algorithm, and observability more than about lambdas or verbs vs. nouns. It is difficult to understate the importance of those things compared to most other software concerns. I'll take a programmer who is eager to understand what the customer actually needs or how to make a system observable or performant over one that can grasp higher-order subroutines any day.
- BlargMcLarg 7y agoIf you don't understand, please don't make assumptions. Java itself is fine. The progress Java is making, is also fine. I'm sure you could give Java, Python, Ruby, C#, Javascript to a group of newbie programmers each, and satisfaction would be similar. The problem comes from a mental perspective combined with the problems of enterprise. If I use Java at home, I'll learn all these cool features that I have to push through 3, maybe 4 layers of management before I can use it at work. It'd just agitate me not being able to do it in the language I'm using at that point. I had the same issue with Unity, where I couldn't use half the features of modern C# because Unity Engine was still on C# 2.0 or something, but at least there I personally opted to use Unity. Besides that, I'm just not a fan of Java on a personal level. >I have never seen a correlation between obsessing about code concepts and success. Those who tend to be more successful care about requirements, design, algorithm, and observability more than about lambdas or verbs vs. nouns. It is difficult to understate the importance of those things compared to most other software concerns. These aren't mutual exclusive and frankly, dragging this into the discussion is a bit of a low blow. Yes, ultimately, what matters is the product and its future maintainability. What isn't trivial is deciding whether to introduce a system where a bug may be hidden in 3 layers of reflection, 5 layers of abstraction and requires you to read hundreds of lines only to understand what is going on, much less why, because everything is written 2-3 times (in code, in comments and sometimes even something else). Spending hours because Bob's great plan was to introduce another if-else statement, now nested 3-deep, inside a try-catch block, and you have no clue where the value was assigned anymore. That same thing happened at the place I work at now. They focused on immediate results more than long term code maintenance. They got amazing success. Now they have a massive technical debt, and people have trouble understanding what the code was supposed to do. No fancy tricks, no interesting algorithms or one-liners. Just old, verbose, imperative / OO Java code to power forms. The simplest of data manipulation. In the end, these things still end up at the skilled seniors anyway, because the juniors don't understand, the mediors don't have the required domain knowledge and everyone else doesn't have the skill to comprehend what is going on. And frankly, I have managers and deadlines to keep me from spending too much time. So far, those guys haven't complained, despite thinking about ways that the codebase could be improved.
- whateveracct 7y agoAnother FP post, another pron comment passive-aggressively delegitimizing Haskell due to lack of empirical evidence :eyeroll:
- pron 7y agoThis is Java post, and by no means am I delegitimizing Haskell. It is a perfectly fine programming language that is suitable for use in production, but unfortunately, it suffers from a problematic culture.
- tome 7y ago> [Haskell] suffers from a problematic culture Perhaps, as you claim above for Java, there is no one Haskell culture. https://news.ycombinator.com/item?id=22847925 https://news.ycombinator.com/item?id=22847925
- whateveracct 7y ago100% this. Saying "Haskell suffers from a problematic culture" is a silly generalization on the face of it. Idk what Haskellers this person met who rubbed them the wrong way, yeesh!
- pron 7y agoOh, of course there isn't. But being roughly 0.1% the size of Java's user population, you really can't escape any of the Haskell's community cultures.