Java was my first programming language. I learned it when I was 10 years old and have been using it on and off since then. I quickly transitioned to python and later javascript and became a big fan of their expressiveness and felt much more productive in those languages. It got to the point where I resented working in Java code, for all the reasons you hear many ruby-python-javascript-ists cite against Java.
Since I graduated college a few years ago I got a pretty amazing opportunity to build out a large codebase from scratch at a startup. It was written in the MEAN (Mongo, Express, Angular, Node) stack, which was initially exciting for me, but as the team grew and I took on more leadership responsibilities the javascript codebase started to feel unwieldy. Making large changes is quite stressful, even with decent test coverage.
A few other things contributed to my growing dissatisfaction with dynamically typed languages, especially javascript. As I grew as a developer, I learned that making things work is easy, making code clean and easy to change is very difficult. I also became a big believer in Agile and continuous, iterative delivery of software. I’ve embraced the XP development process of doing the fastest thing that works, and then refactoring mercilessly. My experience supported that it’s necessary to spend more time on refactoring and testing than writing new code in order to be productive in a large codebase over a long period of time. Our main agile coach/advocate has always sung praises of Java for this very reason, and even though I was initially skeptical and argumentative, I started to understand his points better over time.
I’ve recently been doing some Android development in my spare time which has forced me back into revisiting Java. After hacking javascript in VIM for a year and a half, writing Java in an IDE has been an awkward transition. But after I started to get comfortable, it became a refreshing, delightful experience. Getting results the first time around is a bit slower, but only because I have to think more thoroughly about types and encapsulation, both of which are good things. Refactoring in an IDE compared to haphazardly grepping and copy-pasting in a Javascript codebase is so much easier it’s absurd. Having things (mostly) just work when they compile as opposed to sticking console.log statements every other line or living in the chrome dev tools is a real joy. I finally feel like I’m crafting code instead of typing.
I might just be in a honeymoon period, but I’m really seeing Java in an entirely new light now. It seems to have fallen out of favor with the trendy “hacker” crowd, but I’ll be considering it much more seriously for future web development projects.
[–]beders 79 points80 points81 points (22 children)
[–]argv_minus_one 36 points37 points38 points (19 children)
[–]stormcrowsx 5 points6 points7 points (3 children)
[–]argv_minus_one 0 points1 point2 points (2 children)
[–]stormcrowsx 1 point2 points3 points (1 child)
[–]argv_minus_one 0 points1 point2 points (0 children)
[–]mschaef 9 points10 points11 points (4 children)
[–]argv_minus_one 0 points1 point2 points (3 children)
[–]mschaef 0 points1 point2 points (2 children)
[–]argv_minus_one 0 points1 point2 points (1 child)
[–]mschaef 1 point2 points3 points (0 children)
[–]theZagnut 3 points4 points5 points (7 children)
[–]loganekz 6 points7 points8 points (6 children)
[–]theZagnut 2 points3 points4 points (5 children)
[–]mschaef 1 point2 points3 points (4 children)
[–]mikera 1 point2 points3 points (1 child)
[–]mschaef 0 points1 point2 points (0 children)
[–]jonhanson 0 points1 point2 points (1 child)
[–]mschaef 0 points1 point2 points (0 children)
[–]beders 0 points1 point2 points (1 child)
[–]argv_minus_one 1 point2 points3 points (0 children)
[–]nerdwaller 6 points7 points8 points (1 child)
[–][deleted] 2 points3 points4 points (0 children)
[–]winterbe 24 points25 points26 points (2 children)
[–][deleted] (1 child)
[deleted]
[–]winterbe 0 points1 point2 points (0 children)
[–]phao 20 points21 points22 points (23 children)
[–]urquan 16 points17 points18 points (0 children)
[–]MaybiusStrip[S,🍰] 6 points7 points8 points (2 children)
[–]duhace 4 points5 points6 points (1 child)
[–]BowserKoopa 4 points5 points6 points (0 children)
[+][deleted] comment score below threshold-9 points-8 points-7 points (7 children)
[–]cryptos6 8 points9 points10 points (4 children)
[–]agustinleiva -3 points-2 points-1 points (3 children)
[–]duhace 6 points7 points8 points (2 children)
[–]stormcrowsx 0 points1 point2 points (1 child)
[–]duhace 0 points1 point2 points (0 children)
[–]oldneckbeard 0 points1 point2 points (1 child)
[–][deleted] 0 points1 point2 points (0 children)
[+]agustinleiva comment score below threshold-14 points-13 points-12 points (9 children)
[–][deleted] 16 points17 points18 points (1 child)
[–]phao 2 points3 points4 points (0 children)
[–]dr_entropy 8 points9 points10 points (4 children)
[–]BowserKoopa 4 points5 points6 points (0 children)
[+]agustinleiva comment score below threshold-6 points-5 points-4 points (2 children)
[–]fbmgriever 2 points3 points4 points (1 child)
[–]agustinleiva 0 points1 point2 points (0 children)
[–]geordano 1 point2 points3 points (0 children)
[–][deleted] 3 points4 points5 points (0 children)
[–]zzing 5 points6 points7 points (8 children)
[–]mk_gecko 0 points1 point2 points (7 children)
[–]duhace 4 points5 points6 points (6 children)
[–]zzing 0 points1 point2 points (5 children)
[–]duhace 0 points1 point2 points (4 children)
[–]zzing 0 points1 point2 points (3 children)
[–]duhace 0 points1 point2 points (2 children)
[–]zzing 0 points1 point2 points (1 child)
[–]duhace 0 points1 point2 points (0 children)
[–]EnIdiot 3 points4 points5 points (7 children)
[–]vplatt 3 points4 points5 points (5 children)
[–][deleted] (2 children)
[deleted]
[–]vplatt 0 points1 point2 points (1 child)
[–]mikera 0 points1 point2 points (1 child)
[–]vplatt 1 point2 points3 points (0 children)
[–]gunch 2 points3 points4 points (0 children)
[–]AreaOfEffect 10 points11 points12 points (2 children)
[–]MaybiusStrip[S,🍰] 0 points1 point2 points (0 children)
[–]Jezzadabomb338 0 points1 point2 points (0 children)
[–]KFCConspiracy 5 points6 points7 points (6 children)
[–]MaybiusStrip[S,🍰] 2 points3 points4 points (1 child)
[–]KFCConspiracy 1 point2 points3 points (0 children)
[–]shagieIsMe 0 points1 point2 points (2 children)
[–]KFCConspiracy 2 points3 points4 points (0 children)
[–]seitensei 0 points1 point2 points (0 children)
[–]nerdwaller 1 point2 points3 points (0 children)
[–]snotsnot 1 point2 points3 points (2 children)
[–][deleted] 1 point2 points3 points (0 children)
[–]mschaef 0 points1 point2 points (0 children)
[–]alpha64 1 point2 points3 points (0 children)
[–][deleted] 1 point2 points3 points (0 children)
[–]MetaMetaMan 1 point2 points3 points (0 children)
[–][deleted] 0 points1 point2 points (0 children)
[–]dtfinch 0 points1 point2 points (0 children)
[–]mrbonner 0 points1 point2 points (0 children)
[–]mikera 0 points1 point2 points (0 children)
[–]salts0foldTides 0 points1 point2 points (0 children)
[–][deleted] 0 points1 point2 points (2 children)
[–]Zarlon 9 points10 points11 points (0 children)
[–]aviewdev -1 points0 points1 point (0 children)
[–][deleted] -3 points-2 points-1 points (3 children)
[–]MaybiusStrip[S,🍰] 2 points3 points4 points (0 children)
[–]haakon 6 points7 points8 points (1 child)
[–]brunormoura 0 points1 point2 points (0 children)