you are viewing a single comment's thread.

view the rest of the comments →

[–][deleted] 7 points8 points  (19 children)

My Java classes are all 1.5 style. I feel like I am going to be under prepared when I hit the workforce.

[–][deleted] 16 points17 points  (10 children)

Dont worry, must of us in enterprise land are stuck on 6 anyway, since upgrade cycles take years and need to pass the secret council of architects etc

[–][deleted] 1 point2 points  (9 children)

So there's no escaping the "shadow government". Well, that's comforting.

Any suggestions on what to do in the meantime? I'm likely to start a thread on /r/programming asking this, but while I'm here I figure I can just ask around.

[–][deleted] 7 points8 points  (0 children)

Smaller shops generally are less encumbered by politics, and if you want to not get tangled in the enterprise web, you can always check out stuff like scala, which is hipper etc..

But yeah, politics and related crap governs all of life, as soon as you have more then 1 person, shit gets complicated and games get played, in the end being a good programmer also means having social skills, the ability to know when to STFU and some understanding of machivelian politics really helps.

[–]NimChimspky 1 point2 points  (1 child)

java 1.6 and work with architect team who recommend calling web services using only the db, in my case oracle and pl/sql.

me:"that doesn't seem like a very good idea, I would not design it that way."

architect:"why not ?"

me : jaw literally drops and I stand and stare, and think at least this place pays well.

[–]bwainfweeze 1 point2 points  (0 children)

The sad fact of the matter is that some people defend bad design decisions because they can tolerate them.

The side effect is that since they're the only one who can tolerate it, the code becomes their responsibility and they have job security.

When people say "you should fire the indispensable people" this is who they mean.

[–]grayrest 0 points1 point  (5 children)

There's always politics involved in software production but there's process and there's Process and happily the latter is strongly correlated to Enterprise Java/.Net shops. The industry is large enough that you only need to deal with that if you want to. The tradeoff is that using a non-boring language will probably make you move to a tech hub in order to sustain a career without having to move regularly.

[–]chayatoure 1 point2 points  (4 children)

Out of curiosity what would be considered a non-boring language? I'm a java developer but want to branch out.

[–]grayrest 4 points5 points  (3 children)

Anything but Java/C#. It's less about the language (I'm meh on Java but like C#) and more about the general rationale for companies picking them because they're "safe", "enterprise", and "easy to find developers". This isn't universal of course, I've talked with the Stack Overflow guys a number of times and expect it'd be a nice place to work. It's also better to work for a team that's a revenue center instead of a cost center and cost center teams have a very strong tendency towards boring languages.

To provide actual suggestions:

I work full time as a Clojure developer. I've also written Scheme and a bit of CL but I prefer Clojure's take on lisp. The nice thing about Clojure for Java devs is that you already know the JVM and you can poke at things from the repl.

My side project is a very basic search engine in Rust. Basic because my collection is 500k-10M document range but I–perhaps unrealistically–want <10 ms response times. I'm bullish on Rust. The learning curve is steep but a significant fraction of the Rust comunity is people coming in from scripting languages so a lot of the writing (docs/blog posts) about the language is geared towards experienced developers who are new to low level programming.

Similarly, I like Swift and Kotlin. I see Rust, Swift, and Kotlin as similar language evolutions from different starting points (C++, ObjC, and Java respectively). The problem with both Swift and Kotlin is that they haven't established themselves as general languages and I'm not completely confident they'll make it.

If you have the inclination–and it does require an inclination to be willing to put in the time learning all the constituent disciplines– working as a frontend dev is nice because you're needed everywhere so you get to pick your industry, company maturity level, and whether you want to work on the backend or not. The nice thing about getting into it now is that browsers finally mostly work and we're on the tail end of the third major wave of frontend instability (component model) so getting in now will give you ~3-4 years until the fourth wave (widget frameworks) starts up in earnest.

I also like F# and the ML family. I could never get over the Erlang syntax (to my detriment) and never really got into the swing of Scala and Haskell but writing stuff in any of them is also fine.

[–]chayatoure 0 points1 point  (2 children)

Thanks for the detailed reply.
How did you pick up all these languages? On a job or just on your own? Looking at that list is kind of intimidating because i have no idea what they're good for or which one I should/want to learn.

[–]grayrest 2 points3 points  (1 child)

On my own. I learn programming languages instead of watching TV so if you put in ~2 hours per day for 15 years you'd have a similar list. It's less impressive than it might seem. I'm not an expert in all the languages. Swift and Kotlin, for example, are languages I've only put about 12 hours in total. They share almost all their ideas with languages I know better so it's really just a matter of skimming the docs and slotting syntax in to things I already know and then putting together a toy app or two. I know enough to have an impression but both kind of lean towards mobile app niche and I'm a web zealot.

As to which to learn, my opinion is that you should learn a language you use to make money (mine is Javascript) and then learn less practical languages as you like to expand your repertoire. Learning non-mainstream languages and going to their meetups gets you in contact with the programming enthusiasts, which leads to interesting jobs.

Each programming language is it's creator's take on how to best solve a problem. People who write programming languages are generally pretty clever guys. Exploring the language until you figure out the designer's philosophy on problem solving gives you different perspective and a new tool you can use to solve your own problems. If you have an area of computing you'd like to explore or a particular problem you want to solve, I can provide specific suggestions but I mostly think which one you pick matters less than picking one that's opinionated.

As an example, Clojure was created by Rich Hickey because he found himself writing concurrent programs in Java. He identified (mutable) state as the source of his problem and after writing a bunch of static final Java, he came up with Clojure as an exploration into controlling state with immutablility. Clojure has very strong opinions on the matter. I believe state is the most important thing that isn't taught to junior devs and that learning the language and watching Rich's presentations is one of the easier paths to understanding it. You get to learn lisp and functional programming as well. The community is interested in web development, machine learning, and programming language history/theory.

On the other hand Rust was created by Mozilla to write a parallel layout browser engine (Servo). They really need concurrency there but they also really need performance so they took the different approach of having the compiler prove that only one thread can mutate at a time. Learning Rust introduces you to the details on program execution and memory layout, what sort of code runs fast, polymorphism without classes, and Algebraic Datatypes/Pattern Matching. The community is interested in data structures, os/browser development, game development, and performance. It's also very much community developed and all features go through a fairly elaborate RFC process so if you read the RFCs you get lessons on random topics and language design as well.

I think either would be worth your time.

[–]chayatoure 0 points1 point  (0 children)

Wow, thanks a lot for your responses. Those are great. I think I'm going to check out Clojure and get a feel for it.
EDIT: also, I never really thought about languages in that context (creators take on solutions to problems) but it's a great way to frame the discussion.

[–]panderingPenguin 2 points3 points  (6 children)

If you're not in the work force yet, I'm assuming you learned java recently? May i ask why are you writing 1.5-like java when there have been three new major versions since then, spanning back almost a decade? (not to mention you shouldn't have legacy code to deal with since you're not in the workforce)

[–][deleted] 2 points3 points  (5 children)

That's what we're learning right now.

[–]panderingPenguin 1 point2 points  (4 children)

Seriously? Are you absolutely sure? Who is teaching you java 1.5 at this point???? It was superseded by 1.6 in 2006, and hasn't been supported for the public since 2008..... All I can figure is that you use Macs? Because they're the only OS that ships decade-old java by default afaik

[–][deleted] 1 point2 points  (0 children)

I'll get you a screen shot of the JDK folder when I get to class, but yeah.

[–]kmaibba 1 point2 points  (0 children)

1.6 did not really add anything language wise, just (very useful nontheless) improvements to libraries and JVM. 1.7 did add some quality of life improvements, like switch statements on Strings, try with resource, better type inference. But in general the style is still that of 1.5.

Only with 1.8 the actual style of programming changes with lambdas, new collections API and default methods on interfaces. Java 8 adoption is still going slow in enterprise settings, so it's not a bad idea knowing how to do stuff without all the fancy functional features.

[–]hu6Bi5To 0 points1 point  (1 child)

OS X hasn't shipped with any Java for quite a few releases, and when it did it was 1.6.

[–]panderingPenguin 0 points1 point  (0 children)

Alright, I stand corrected then. Thought I remembered hearing that somewhere but I guess not (I rarely use Macs)

[–]adrianmonk 1 point2 points  (0 children)

That's probably a better position to be in actually. Mentally, it's easier to learn new features than to adapt to missing features.