May's Code Share: The Bytecode Behind The Curtain
The Wizard of Oz appeared terrible and
frightening, but when the curtain was pulled away he was revealed to be a
little old man with a bald head and a wrinkled face.
fell with a crash they looked that way, and the next moment all of them
were filled with wonder. For they saw, standing in just the spot the
screen had hidden, a little old man, with a bald head and a wrinkled
face, who seemed to be as much surprised as they were. The Tin Woodman,
raising his axe, rushed toward the little man and cried out, "Who are
"I am Oz, the Great and Terrible,"
For the experienced Java programmer we
may seem to live in frightening times. Functional programmers tell us
that the world has become too complicated for us to understand. Our
careers might survive, if only we had lambdas, currying, higher-order
functions, comprehensions and monads.
Functional programming has been
described as an arcane, magicians art. Take, for example, the opening
of The Structure and Interpretation of Computer Programs:
In effect, we conjure the spirits of the computer with our spells.
computational process is indeed much like a sorcerer's idea of a spirit.
It cannot be seen or touched. It is not composed of matter at all.
However, it is very real. It can perform intellectual work. It can
answer questions. It can affect the world by disbursing money at a bank
or by controlling a robot arm in a factory. The programs we use to
conjure processes are like a sorcerer's spells.
For an example of arcane spells as incomprehensible as anything uttered by Albus Dumbledore you don't have to go far. Consider Monads, for example. Haskell has Monads, as does Scala. So what is a monad? Helpfully the Haskell Wiki explains everything:
in Haskell can be thought of as composable computation descriptions.
The essence of monad is thus separation of composition timeline from the
composed computation's execution timeline, as well as the ability of
computation to implicitly carry extra data, as pertaining to the
computation itself, in addition to its one (hence the name) output, that
it will produce when run (or queried, or called upon). This lends
monads to supplementing pure calculations with features like I/O, common
environment or state, and to preprocessing of computations
(simplification, optimization etc.).
Understanding Monads isn't just a
simple case of learning or training. It is a magical, spiritual
experience. This is why everybody who has every managed to understand
them has written their own Monad tutorial.
[I]t seems like every programmer who gets monads
posts a tutorial about them. (And each post begins with: There’s
already a lot of monad tutorials on the Internet, but...) The reason is
that getting monads it’s like a spiritual experience that you want to share with others. (Bartosz Milewski)
At the Code Shares we like to keep
things simple and practical. It doesn't matter how intimidating or
confusing the words are, in the end it all has to be executed by a JVM.
A little JVM starting to show its age with a limited vocabulary of bytecodes.
The goal of May's Code Share is to
ignore the big long explanations and take a look at how some of the
functional features of languages like Scala or Clojure actually work.
May's Coding Challenge: Revealing the Magicians Secrets
The challenge for this month is to find an impressive one liner in a clever language and decompile it using a tool like JD, or Mocha.
What is actually going on?
What would the corresponding Java version look like?
Are these one liners just as efficient after compilation?
WANT TO LEARN MORE? THEN CHECK OUT OUR EXPERT WORKSHOPS!
Progressive Java Tutorials (May 3-4)
Skills Matter is pleased to announce the First Progressive Java Tutorials, the annual Java conference offering a unique blend of product and experience mixed, and tempered with theory and practice. Sign up here
Scala Days 2012 - Watch the videos!
Scala Days is the premier event for Scala enthusiasts, researchers,
and practitioners. Scala Days 2012 was a fantastic and unique occasion to
meet with Scala-using professionals and companies, to exchange ideas and
form business relations, as well as to discover the latest practical and
theoretical development concerning the Scala language. Watch the videos here: book
Typesafe's Fast Track to Scala
This two-day Fast Track to Scala course, designed by Martin Odersky,
the creator of the Scala programming language, and Heiko Seeberger, a
recognized Scala expert, will give you an excellent grounding in Scala.
LEARN HOW TO:
- be a competent user of Scala constructs in application code
- know and be able to apply the functional programming style in
- know how to use the fundamental Scala tools
- be confident to start using Scala in production applications
Find out more here
Typesafe's Advanced Scala
If you already have some programming experience with Scala and need
to understand it's advanced features, Typesafe's Advanced Scala will
show you how to unleash the full power of this scalable language.
It is intended to enable developers, who have at least 3 months
programming experience with Scala and feel comfortable to use it in
their applications, to fully understand various advanced features of
this programming language and how to apply these to create well designed
libraries or DSLs using proven practices. Find out more here
Ian Robinson and Jim Webber's Neo4J Tutorial
"Graph databases like Neo4j are an esoteric and powerful member of the NOSQL family. For highly connected data, graph databases can be thousands of times faster than relational databases, making Neo4j popular for managing complex data across many domains from finance to social, and telecoms to geospatial. This intensive two-day tutorial provides a mixture of theory and hands-on practical sessions to demonstrate the capabilities of graph data and the Neo4j database. Find out more here
Howard Lewis Ship's Web Application Development with Tapestry
This four day Core Tapestry: Web Application Development with
Tapestry course is taught as an interactive workshop consisting of seven
labs. You will learn a different aspect of Tapestry in each lab; a
particular component or set of components, or a particular challenge you
are likely to face. Howard Lewis Ship's tapestry workshop gently leads
you into the way of Tapestry, and helps you understand exactly what it
is that Tapestry does and even how it operates internally. Find out more
Kito Mann's JSF2 in Action
Build highly interactive Ajax-enabled applications with JavaServer
Faces (JSF) 2, the standard web application framework for Java EE. JSF 2
incorporates time-saving features, such as
convention-over-configuration, built-in Ajax, templating, simple custom
UI component development, and several powerful third-party Ajax
component suites. JSF applications can be integrated seamlessly with
Spring and/or Java EE. This course covers the key features of JavaServer
Faces and walks you through building different aspects of a JSF
application. You will also learn how to take advantage of rich JSF
component suites such as ICEfaces and RichFaces.. Find out more
ABOUT THE LONDON JAVA COMMUNITY
The LJC is the Java User Group in London. It has over 3000 members and was founded in 2007 by Barry Cranford of RecWorks Ltd. The LJC is organised by a committee of passionate Java Enthusiasts.
More about the London Java Community