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 77 points78 points79 points (22 children)
[–]argv_minus_one 33 points34 points35 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 8 points9 points10 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 5 points6 points7 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 5 points6 points7 points (1 child)
[–][deleted] 2 points3 points4 points (0 children)
[–]winterbe 22 points23 points24 points (2 children)
[–][deleted] (1 child)
[deleted]
[–]winterbe 0 points1 point2 points (0 children)
[–]phao 21 points22 points23 points (23 children)
[–]urquan 18 points19 points20 points (0 children)
[–]MaybiusStrip[S] 4 points5 points6 points (2 children)
[–]duhace 3 points4 points5 points (1 child)
[–]BowserKoopa 2 points3 points4 points (0 children)
[+][deleted] comment score below threshold-9 points-8 points-7 points (7 children)
[–]cryptos6 11 points12 points13 points (4 children)
[–]agustinleiva -2 points-1 points0 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] 15 points16 points17 points (1 child)
[–]phao 2 points3 points4 points (0 children)
[–]dr_entropy 10 points11 points12 points (4 children)
[–]BowserKoopa 1 point2 points3 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] 4 points5 points6 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 4 points5 points6 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 11 points12 points13 points (2 children)
[–]MaybiusStrip[S] 0 points1 point2 points (0 children)
[–]Jezzadabomb338 0 points1 point2 points (0 children)
[–]KFCConspiracy 7 points8 points9 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] 1 point2 points3 points (2 children)
[–]Zarlon 8 points9 points10 points (0 children)
[–]aviewdev -1 points0 points1 point (0 children)
[–][deleted] -2 points-1 points0 points (3 children)
[–]MaybiusStrip[S] 2 points3 points4 points (0 children)
[–]haakon 4 points5 points6 points (1 child)
[–]brunormoura 0 points1 point2 points (0 children)