is a wildly popular game among elementary and middle
schoolers. The game allows players to build constructions of
textured cubes in a 3D world.
My son has been playing the game for about a year, lets say addicted
to it. Last Fall he told me that the game is corrupted because the
JAR file snapshot has messed up the configuration. And that right
away rang a bell in me as a Java Evangelist at Oracle.
I learned from him that the game is written in Java, has a trial
version that runs as an applet in the browser, and downloaded as a
JAR file for desktop. The game is modular where the players travel
through a world and chunks are loaded and unloaded to keep the
memory footprint small. Something unique about the game is the
ability to modify the game from what it was originally designed for.
In Minecraft language, this is called as a "
href="http://www.minecraftwiki.net/wiki/Mods">mod" - short for
modifications. For example, a mod can add new characters to the
game, change look-and-feel of the play field, or make it easy to
build new structures.
The game has a server and a client component. This allows the game
to be played in a single player mode where a player connects to a
server using a client and plays the game. Alternatively multiple
players, using different clients across platforms, can connect to a
server and play with each other collaboratively. Its very common to
have a server run with multiple mods. There are almost an infinite
number of mods someone could do to make Minecraft a more amusing
game to play. There is no official API to create these mods but
there are several third-party vendors that provide that capability;Bukkit
is one such API. The ability
to write mods and alter the game play gives players more control
over the game and gets them more excited.
My son expressed his desire to write a mod and so we started
exploring further. Then onwards, he started teaching me Minecraft
vocabulary and I taught him the Java programming concepts. Our
discussions in the car, on the dinner table, during the breakfast
preparation, and elsewhere changed to reflect that as well. He
already played with Scratch
Summer and that was extremely helpful during this learning curve. We
set up a goal to build a mod during Christmas break. After
understanding the basic concepts and building a few mods, we decided
to share the knowledge with a broader set of Minecrafters. And
that's where the concept of doing a Minecraft Workshop was born.
My son came up with a list of his minecraft buddies and we announced
a date for the workshop. Everybody invited for the workshop
confirmed their presence right away. I found out that both the
invited kids and their parents were equally excited. One friend
could not attend because of a prior commitment and was extremely
disappointed. On the day of the workshop, some kids were eager to
come even before the formal start of the workshop.
The workshop was attended by 10 kids with age ranging from 10-14
years. Most of the kids had no programming experience, let alone
Java. However there was high Minecraft experience in the group with
some kids playing for about 2 years and up to 2 hours every day.
When given the topic of Minecraft, the small group would talk
excitedly about different aspects of the game, constantly using
hundreds of game-specific terms and phrases as if speaking a
different language. My goal was to leverage their passion and
introduce them to Java programming.
The challenge for me was to introduce programming to these kids
using analogies from the daily life. Using a car, features,
capabilities, types, and car dealers and correlating with class,
properties, methods, instances, and packages seem to work. Fruits
and different methods of peeling, eating, and planting was used to
introduce the concept of Interface in Java. I asked, “What can you
do with a watermelon?” the first answer was obvious, “you can eat
it.” The second one was a little less so, “You can chuck in a trash
can.” The response was greeted with scattered laughter. I used that
to explain the concept of Exceptions in Java.
|Short anecdotes and side-conversations kept|
the livelihood of the group going throughout the five hour
programming session. There are almost an infinite number of
mods someone could do to make Minecraft a more amusing game
to play. But all these mods hold the same basic framework
that we set up for any future work on making game-specific
mods. By the end of the session, we had worked out an entire
framework for making a mod. A href="https://maven.java.net/content/groups/public/name/arungupta/bukkit/bukkit-plugin-archetype/">Maven
archetype to create a template href="http://plugins.bukkit.org/">Bukkit plugin
allowed the attendees to avoid writing boilerplate code. A
lower bar to get started and simplicity was the key for this
audience. The mod built in the workshop added a new
server-side command and printed a trivial message.
Although the goal of the workshop was to get an introduction
on programming and make a Minecraft mod, I believe the
attendees learned much more than that. I think the informal
set up helped them discover that programming can be fun and
useful to add to gaming experience. Programming is a vast
field and we barely scratched the surface. But most
importantly, the attendees had a good time and learned their
first lesson of Java programming to start off an interest in
"Fun", "Easy", "Quick", "Awesome", "Short", and "Intuitive"
described attendees' one word summary of building and running their
first Hello World application using NetBeans.
All the instructions followed in the workshop, including a lot more
pictures, are available at
For me, it was quite a humbling and learning experience. I've
delivered multiple workshops all around the world but mostly to
professional developers. I realized how the instructions need to be
completely spelled out in order for the attendees of this age to
make progress. Something as simple as "Hit Enter after entering the
command", yes, that is required. Anyway I plan this to be the first
of many more workshops aimed to introduce the world of Java
programming to school students.
One of the lessons learned during the workshop was to simplify the
installation experience. All the kids had JDK and NetBeans set up
already, pretty straight forward. However I wonder why Maven insists
on JAVA_HOME variable instead of figuring it out. I need to
investigate how to seamlessly install JDK, NetBeans, and Maven in a
platform independent way. This will allow to focus more on building
the actual mod rather than the multi-step installations.
This workshop was not possible without mentoring support from Allen
Dutra and other parents. A huge shout out to my family who helped
validate and calibrate my strategy for the audience. My nephews
feedback from the lab is incorporated into this blog. Thanks to
Oracle for sponsoring the snacks!
Thank you @notch
Java to build the game! You've provided a great platform for young
kids to learn Java and truly enabled Make The Future Java ...