Keeping up to date

108 views
Skip to first unread message

Rakesh

unread,
Dec 29, 2011, 6:22:50 AM12/29/11
to javaposse
Hi folks,

I've posted something similar in the past but more orientated towards personal productivity using tools and techniques like GTD, etc.

This time I want to get your thoughts on my current (completely unrealistic) plan to become a better developer!!

So, I need to learn new things and make sure I know stuff I should already know. I've divided up these areas into the following:

Existing Java

  • Go through the JCP book, plan to take the exam. Useful for interviews more than day-to-day development.

New Java

  • Fully review and learn Apache Commons, JODA, Google stuff (like collections, guice), concurreny libraries, etc.

Frameworks

  • Learn Spring 3, Hibernate 4, Cucumber-jvm

Non Java

  • Oracle, MySQL, Ubuntu

Languages

  • Groovy, Scala, Clojure, Javascript/CoffeeScript.et al, Ruby

Books

  • Agile books, Clean coder (loads of others sitting on my Kindle).

Videos

  • Go through interesting talks on InfoQ, Parleys, TED

My idea for doing this was to dedicate a day of the week to each and maybe 1-2 hours in a session. If I can fit stuff in during my commute (tough as its chock full already with podcasts) or at work (maybe 20 mins during lunch or stay behind an extra 30 mins) then thats a bonus.

However, I would really like to hear your views, not so much on the content of each, but more of how to manage so many things and deciding whats important and how you guys stay up to date.

Cheers

R



Thomas Jung

unread,
Dec 29, 2011, 8:02:12 AM12/29/11
to The Java Posse
Hi Rakesh,

what a list! Learning stuff is important, but I don't think learning
in a vacuum makes that much sense. Better think of things you cannot
accomplish right now. Where you think you should improve.

Some reading should be in the mix, but not more than half of the total
time. Good books come with exercises that will take at least as much
time as the actual reading.

Do something rather than read about doing something. Start a project
or work for a project. Spectacular failure here is better than perfect
learning in theory.

Thomas

On Dec 29, 12:22 pm, Rakesh <rakesh.mailgro...@gmail.com> wrote:
> Hi folks,
>
> I've posted something similar in the past but more orientated towards
> personal productivity using tools and techniques like GTD, etc.
>
> This time I want to get your thoughts on my current (completely
> unrealistic) plan to become a better developer!!
>
> So, I need to learn new things and make sure I know stuff I should already
> know. I've divided up these areas into the following:
>
> *Existing Java*
>
>    - Go through the JCP book, plan to take the exam. Useful for interviews
>    more than day-to-day development.
>
> *New Java*
>
>    - Fully review and learn Apache Commons, JODA, Google stuff (like
>    collections, guice), concurreny libraries, etc.
>
> *Frameworks*
>
>    - Learn Spring 3, Hibernate 4, Cucumber-jvm
>
> *Non Java*
>
>    - Oracle, MySQL, Ubuntu
>
> *Languages*
>
>    - Groovy, Scala, Clojure, Javascript/CoffeeScript.et al, Ruby
>
> *Books*
>
>    - Agile books, Clean coder (loads of others sitting on my Kindle).
>
> *Videos*
>
>    - Go through interesting talks on InfoQ, Parleys, TED

Ricky Clarkson

unread,
Dec 29, 2011, 8:34:31 AM12/29/11
to java...@googlegroups.com
And/or try to apply some of what you learn in your job, obviously
being sure to involve your teammates/client as necessary. That
doesn't necessarily mean using a different language, or switching
databases, but if you see a problem and you've met a possible solution
recently see if you can explore that.

> --
> You received this message because you are subscribed to the Google Groups "The Java Posse" group.
> To post to this group, send email to java...@googlegroups.com.
> To unsubscribe from this group, send email to javaposse+...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/javaposse?hl=en.
>

Kirk Pepperdine

unread,
Dec 29, 2011, 11:23:17 AM12/29/11
to java...@googlegroups.com
it's a big list but I think this year will be about how make Java play better with the CPU…. which implies, we'll need to learn more about how CPUs really work. it's a trend that has been emerging for a while but really only at a high fluffy handwaving level. I find that people are starting to ask the deeper questions, how is this really working? How can we tell? What adjustments can we make to increase cooperation between app and CPU?

Happy New Year,
Kirk

Kevin Wright

unread,
Dec 29, 2011, 11:40:59 AM12/29/11
to java...@googlegroups.com
Not just the CPU!  It really helps to be aware of how cores interact, caching, the memory controller, and how your operating system manages paging and virtual memory.

For an idea of this level of systems thinking, I still stand in awe of the Varnish architecture notes as one of the best examples of its kind: https://www.varnish-cache.org/trac/wiki/ArchitectNotes

Sure, there's value in knowing about pipelining, branch prediction, Compare and Swap vs Load Link/Store conditional, etc, etc.  But you'll still gain more from familiarity with memory management and the garbage collector first.
Kevin Wright
mail: kevin....@scalatechnology.com
gtalk / msn : kev.lee...@gmail.com
vibe / skype: kev.lee.wright
steam: kev_lee_wright

"My point today is that, if we wish to count lines of code, we should not regard them as "lines produced" but as "lines spent": the current conventional wisdom is so foolish as to book that count on the wrong side of the ledger" ~ Dijkstra

Robert Casto

unread,
Dec 29, 2011, 11:56:24 AM12/29/11
to java...@googlegroups.com
Going the project approach is my usual path. That way I have something I'm interested in accomplishing and that in turn motivates me to learn the technology more. I'm looking at some mobile technologies and will try a couple to see what I like best. I've done Android but I want to look at PhoneGap and see how that plays on iOS and Android.

Reviewing libraries is always good. I recently had a problem with some SQL and found a better way to handle dates and modified a couple indexes. The great thing about SQL is it hasn't changed much over the years. But I'm always learning something new with it whenever I try to do performance improvements on my queries.

--
You received this message because you are subscribed to the Google Groups "The Java Posse" group.
To post to this group, send email to java...@googlegroups.com.
To unsubscribe from this group, send email to javaposse+...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/javaposse?hl=en.

Kirk

unread,
Dec 29, 2011, 1:00:23 PM12/29/11
to Ray Hindman
On Dec 29, 2011, at 5:40 PM, Kevin Wright wrote:

Not just the CPU!  It really helps to be aware of how cores interact, caching, the memory controller, and how your operating system manages paging and virtual memory.

Yeah, I should have been more specific....


For an idea of this level of systems thinking, I still stand in awe of the Varnish architecture notes as one of the best examples of its kind: https://www.varnish-cache.org/trac/wiki/ArchitectNotes

Sure, there's value in knowing about pipelining, branch prediction, Compare and Swap vs Load Link/Store conditional, etc, etc.  But you'll still gain more from familiarity with memory management and the garbage collector first.

Well, most of the people now interested in the CPU are already reasonably well versed in GC/memory management. And there is certainly a lot more that can be done there in terms of tooling... education. Anytime I put GC in a title I find the room easily fills... but people understand generational spaces, they are looking for practical information. I don't see many out there offering that type of here's a condition, here's how you got here, and here are some things you can do about it.

That said, I'm speaking about this leading edge that is pushing out.. that's what I'm really addressing. How do we make this @hi# really rock. How can we see if our code is cooperating or fighting against the hardware. Banking's been doing it for a while but not every where. And to be quite honest, I've got a personal bias in that I've just started a new open source project, jPCM with and eye on exposing cpu counter values on a variety of modern intel chips. For example, would your app benefit from large pages? Well, unless you can get a look at the tlab miss rate.. it's a stab in the dark (performance tuning anti-pattern). I want to be able to see that value in a production system, Do you suffer from false sharing? Are there other conditions resulting in frequent thread stalls? Each of these problems has Java code/JVM Hotspot code solutions.. but you can't improve what you can't see.. ;-)

Happy New Year
Kirk

Kevin Wright

unread,
Dec 29, 2011, 3:21:05 PM12/29/11
to java...@googlegroups.com


On 29 December 2011 19:59, Ricky Clarkson <ricky.c...@gmail.com> wrote:
Those ArchitectNotes are very interesting, but it seems difficult to
apply that on the JVM, where the maximum heap you can have seems to
depend more on physical than on virtual memory.

If I was writing a Java program that would otherwise be shifting
things between memory and disk how could I use his ideas?
Memory-mapped files?

Indeed, it can be a good approach and I've done similar myself (especially when native interop is required).  It can also cause excessive and inappropriate thrashing of the GC; so let a profiler guide you, as always.  You'll find the same basic principles used in EHCache's BigMemory - push the cache off of the Java heap & allow the OS to manage paging for you.  The wiki page also mentions some very important points about optimising to make the best use of your processors' cache.

Instead of writing my own synopsis, I'll point you in the direction of someone who's already written a *very* thorough evaluation of the pros/cons of ByteBuffers and FileChannels, it's a nice bit of holiday reading :)

Ricky Clarkson

unread,
Dec 29, 2011, 2:59:32 PM12/29/11
to java...@googlegroups.com
Those ArchitectNotes are very interesting, but it seems difficult to
apply that on the JVM, where the maximum heap you can have seems to
depend more on physical than on virtual memory.

If I was writing a Java program that would otherwise be shifting
things between memory and disk how could I use his ideas?
Memory-mapped files?

Cédric Beust ♔

unread,
Dec 29, 2011, 6:10:06 PM12/29/11
to java...@googlegroups.com

On Thu, Dec 29, 2011 at 8:23 AM, Kirk Pepperdine <kirk.pe...@gmail.com> wrote:
it's a big list but I think this year will be about how make Java play better with the CPU…. which implies, we'll need to learn more about how CPUs really work. it's a trend that has been emerging for a while but really only at a high fluffy handwaving level. I find that people are starting to ask the deeper questions, how is this really working? How can we tell? What adjustments can we make to increase cooperation between app and CPU?

I think your observations might be coming from some selection bias. I really don't see this trend at all.

If anything, the trend in CS has been to climb higher and higher in abstraction, away from the lower levels. Don't get me wrong, I think it's absolutely crucial for a certain population of the CS community to understand these concepts inside and out, because without them, nothing would get done, but by and large, the vast majority of developers can get their job done without knowing much about garbage collection, assembly language, CPU or page faults.

I am very glad that we have remarkable experts such as yourself on the front line making sure that the engine we are using is not just continuously well oiled but keeps performing better and better every year, but I don't think most drivers need to know how an engine runs in order to drive their car.

-- 
Cédric

Kirk Pepperdine

unread,
Dec 30, 2011, 1:40:33 AM12/30/11
to java...@googlegroups.com

>
> I am very glad that we have remarkable experts such as yourself on the front line making sure that the engine we are using is not just continuously well oiled but keeps performing better and better every year, but I don't think most drivers need to know how an engine runs in order to drive their car.

yes indeed… we are being abstracted further and further away from the hardware and that generally has been a good thing. That said, many of us are not simply drivers of a car, we want/need to know these things so we can get more out of the car. So, you will see more people bounce between high level abstractions, which I love and understanding the implications of using those abstractions where the rubber meets the pavement. Anyways, my comment comes from observation, what interesting people are talking about. Last year cloud dominated.. and that's not going away… but this year I hear more interest in hardware….

People just learning more about the tools of our trade…

Happy New Year!
-Kirk

Artie Peshimam

unread,
Dec 31, 2011, 3:31:29 AM12/31/11
to The Java Posse
Rakesh,

Great great list. One major thing I would suggest is going to
hackathons. I had the chance to go to Scalathon this past year and
learned a ton. A suggestion would be to focus in a little bit. For
example, my lang of the year in 2011 was scala and in 2012 it's
Haskell with the larger intent of deepening my expertise of functional
programming. And you absolutely must go beyond just reading the
books.

Good luck and happy new year to the whole posse :)



On Dec 29, 3:22 am, Rakesh <rakesh.mailgro...@gmail.com> wrote:
> Hi folks,
>
> I've posted something similar in the past but more orientated towards
> personal productivity using tools and techniques like GTD, etc.
>
> This time I want to get your thoughts on my current (completely
> unrealistic) plan to become a better developer!!
>
> So, I need to learn new things and make sure I know stuff I should already
> know. I've divided up these areas into the following:
>
> *Existing Java*
>
>    - Go through the JCP book, plan to take the exam. Useful for interviews
>    more than day-to-day development.
>
> *New Java*
>
>    - Fully review and learn Apache Commons, JODA, Google stuff (like
>    collections, guice), concurreny libraries, etc.
>
> *Frameworks*
>
>    - Learn Spring 3, Hibernate 4, Cucumber-jvm
>
> *Non Java*
>
>    - Oracle, MySQL, Ubuntu
>
> *Languages*
>
>    - Groovy, Scala, Clojure, Javascript/CoffeeScript.et al, Ruby
>
> *Books*
>
>    - Agile books, Clean coder (loads of others sitting on my Kindle).
>
> *Videos*
>
>    - Go through interesting talks on InfoQ, Parleys, TED

Joe Sondow

unread,
Jan 2, 2012, 4:49:23 AM1/2/12
to The Java Posse
+1 for using new and interesting stuff in your current project at
work. Put some Groovy into your Ant build or into a few of your unit
tests. Put Joda, Guava, and Apache Commons into your project and start
using them as you do your normal development.

Also, browse the javaranch.com forums for the latest collective wisdom
about which books and mock tests are best for the certification exam.
I don't even really think the exam helps a resume all that much but
you'll become an expert in language edge cases if you master the exam.
It's helpful to be able to know at a glance whether a section of code
will compile or not.

Russel Winder

unread,
Jan 2, 2012, 5:09:52 AM1/2/12
to java...@googlegroups.com
On Mon, 2012-01-02 at 01:49 -0800, Joe Sondow wrote:
> +1 for using new and interesting stuff in your current project at
> work. Put some Groovy into your Ant build or into a few of your unit
> tests. Put Joda, Guava, and Apache Commons into your project and start
> using them as you do your normal development.

Or replace the Ant build with a Gradle build -- for which the control
file will likely be hugely smaller.

Surely adding dependencies should only be done if it means lumps of code
can be removed due to use of the dependency?

[JodaTime/JSR310 cf. https://github.com/ThreeTen/threeten is a special
case because the stuff in the JDK is know to not be adequate to the
task.]

> Also, browse the javaranch.com forums for the latest collective wisdom
> about which books and mock tests are best for the certification exam.
> I don't even really think the exam helps a resume all that much but
> you'll become an expert in language edge cases if you master the exam.
> It's helpful to be able to know at a glance whether a section of code
> will compile or not.

Is certification really a good idea? If SCJP (*) is going to be offered
as an example, then the only answer is "total waste of time".


(*) Not now Sun Certified Java Programmer of course, but Oracle
Certified Professional Java SE Programmer, which begs the question of
whether you can be an Unprofessional Programmer, and of course that
JavaME, JavaSE and JavaEE are so different, they needs separate exams.
Hummm... I think I spot Oracle milking the certification gravy train.
--
Russel.
=============================================================================
Dr Russel Winder t: +44 20 7585 2200 voip: sip:russel...@ekiga.net
41 Buckmaster Road m: +44 7770 465 077 xmpp: rus...@russel.org.uk
London SW11 1EN, UK w: www.russel.org.uk skype: russel_winder

signature.asc

Joe Sondow

unread,
Jan 3, 2012, 12:33:13 AM1/3/12
to The Java Posse
Guava and Apache Commons fix holes in the core Java libraries much as
Joda fixes holes in the date API. I agree that dependencies should
only be added if they vastly simplify application code. That's why
these are the only three I recommend for most Java projects.

morten hattesen

unread,
Jan 3, 2012, 2:09:27 AM1/3/12
to The Java Posse
Out of interest: Which parts of Apache Commons do you find useful?
I've found that the vast majority of the "basic" Apache Commons
projects have gone stale (e.g. Commons Collections not even supporting
Java 5 Generics). Google Guava, on the other hand is actively being
developed and is by far the most suitable "Swiss Army Knife" library
that fills the gaps of the Java API.

My recommendation would thus be: Have Google Guava on your classpath
ALWAYS, and use the basic facilities such as Preconditions throughout
your code, and Function/Predicate etc when appropriate for your
implementation, and resort to Apache Commons for the niche libraries
such as Commons Email and HTTP Components (no longer an Apache commons
component), wheneverthey are required.

Joe Sondow

unread,
Jan 4, 2012, 1:47:44 AM1/4/12
to The Java Posse


On Jan 3, 2:09 am, morten hattesen <morten.hatte...@gmail.com> wrote:
> Out of interest: Which parts of Apache Commons do you find useful?
> I've found that the vast majority of the "basic" Apache Commons
> projects have gone stale (e.g. Commons Collections not even supporting
> Java 5 Generics). Google Guava, on the other hand is actively being
> developed and is by far the most suitable "Swiss Army Knife" library
> that fills the gaps of the Java API.
>
> My recommendation would thus be: Have Google Guava on your classpath
> ALWAYS, and use the basic facilities such as Preconditions throughout
> your code, and Function/Predicate etc when appropriate for your
> implementation, and resort to Apache Commons for the niche libraries
> such as Commons Email and HTTP Components (no longer an Apache commons
> component), wheneverthey are required.

That's fair. Guava is certainly more modern. Multiset with generics is
better than Bag without generics. I still lean on Apache's
StringUtils, StringEscapeUtils, WordUtils, ClassUtils,
ToStringBuilder, CompareToBuilder, EqualsBuilder, HashCodeBuilder,
IOUtils. Perhaps Guava has all those same methods and I just haven't
found the Guava equivalents for each case yet.

morten hattesen

unread,
Jan 4, 2012, 2:30:34 PM1/4/12
to The Java Posse
Here are Guava's alternatives to Apache Commons.
Not a one-to-one match, and not all bases are covered:

StringUtils, WordUtils, StringEscapeUtils: com.google.common.base:
Strings, Joiner, Splitter, CharMatcher, CaseFormat

ClassUtils: Package com.google.common.primitives,

ToStringBuilder: com.google.common.base.Objects.toStringHelper()

CompareToBuilder, EqualsBuilder:
com.google.common.collect.ComparisonChain, com.google.common.base:
Objects.equal(), Equivalence

HashCodeBuilder: Package com.google.common.hash,
com.google.common.base.Objects.hashCode()

IOUtils: Package com.google.common.io


See http://docs.guava-libraries.googlecode.com/git-history/v11.0/javadoc/index.html
for details

ebresie

unread,
Jan 18, 2012, 5:08:41 PM1/18/12
to java...@googlegroups.com
Independent of the politics of it, I was wondering if anyone ever suggests some of these features of Commons or Guava for inclusion via project coin? 

Eric

Reinier Zwitserloot

unread,
Jan 18, 2012, 9:15:50 PM1/18/12
to java...@googlegroups.com
Project Coin is no more. By design. It was a project with a time limit. There is NO coin for 1.8 (the working title for the hypothetical java8 coin is "Coin - The Flip Side". It has been confirmed as 'will never be' by Joe Darcy who is responsible for it, because java 1.8 already has a full docket between jigsaw and lambda.

There IS a project coin mailing list which, with rare frequency, sees a feature request. These are basically squashed because they are rarely something that befits a coin request (coin is NOT just for 'hey, wouldn't this half-assed paragraph of an idea be fantastic?!?' - coin is: "This is good. See research here, here, and here. Here's a patch for javac. Here's a patch for the JLS. Here's conclusive proof that it won't affect backwards compatibility. Here's a 15 page diatribe on why its a good idea".

There's an alternative to coin as well, and as it seems to be very close to what coin is trying to do I'm guessing there will never be another coin ever again. The thing is, I can't remember the name and some casual googling isn't helping me out here. It doesn't help that Mark Reinhold's blog is down right now. This alternative I'm talking about is a little more upfront about the idea that the submitter should be willing to hoist the trouble of writing the compiler patch and JLS update at the very least.

Joseph Darcy

unread,
Jan 18, 2012, 9:55:43 PM1/18/12
to java...@googlegroups.com
On Wed, Jan 18, 2012 at 6:15 PM, Reinier Zwitserloot <rein...@gmail.com> wrote:
Project Coin is no more. By design. It was a project with a time limit. There is NO coin for 1.8 (the working title for the hypothetical java8 coin is "Coin - The Flip Side". It has been confirmed as 'will never be' by Joe Darcy who is responsible for it, because java 1.8 already has a full docket between jigsaw and lambda.

Yes; no "Coin - the Flip Side" in JDK 8; future uncertain for subsequent releases.
 

There IS a project coin mailing list which, with rare frequency, sees a feature request. These are basically squashed because they are rarely something that befits a coin request (coin is NOT just for 'hey, wouldn't this half-assed paragraph of an idea be fantastic?!?' - coin is: "This is good. See research here, here, and here. Here's a patch for javac. Here's a patch for the JLS. Here's conclusive proof that it won't affect backwards compatibility. Here's a 15 page diatribe on why its a good idea".

There's an alternative to coin as well, and as it seems to be very close to what coin is trying to do I'm guessing there will never be another coin ever again. The thing is, I can't remember the name and some casual googling isn't helping me out here. It doesn't help that Mark Reinhold's blog is down right now. This alternative I'm talking about is a little more upfront about the idea that the submitter should be willing to hoist the trouble of writing the compiler patch and JLS update at the very least.

The official way to make a "JDK Enhancement Proposal" is through the JEP process over at OpenJDK:
http://openjdk.java.net/jeps/1

The language changes planned for JDK 8, such as Lambda, have one or more JEPs as do API enhancements, etc.  The JEP process includes a "Funded" state where someone has to sign up to do the work of the request.

While the invitation extended by Project Coin in JDK 7 was to send in your detailed proposal form, preferably with a patch to the compiler, many of the proposals that were received did not attempt to meet that standard.

Any future insertions of Coin would need to interact with the JEP process.
Reply all
Reply to author
Forward
0 new messages