REVIEW: Exercism.io

Me, JS and SEMjs

I have been recently working to improve my Javascript skills and learning more about Javascript. One of the ways I have been doing that is by attending a local meetup called SEMjs, or South East Michigan Javascript meetup. If you are in the southeastern Michigan area, I highly recommend it! They have presentations once a month for various topics, ranging from JS libraries and frameworks, to how REST services work, to lightning talks of various topics, and even had some talks on the Internet of Things. Lately, they have also started having JS study groups, and I just attended once of those. It is a very informal meetup where we all get together and discuss various JS issues. We can bring in our computers and show each other the code we have been working on or code problems we are having, helping and learning from each other.

Enter Exercism.io

Before the last study group, we were talking on gitter (http://gitter.im), and it was mentioned that we should try using exercism.io for working on JS problems, and discussing code. I checked it out, and I have to say, I loved the idea! I have since tried out some of the JS exercises, and have learned a lot in a small amount of time. I would say my JS skills are probably intermediate at this point in my career, and I haven’t done much with TDD (test driven development.) The problems in the JS exercism.io exercises use the jasmine engine (http://jasmine.github.io) for testing, so this was a good introduction to TDD for me.

Also, before I go any further, I have to give out the official warning, the exercism.io site IS still in beta! I have not had any problems so far, but I wanted to give you fair warning!

Some high-level details about exercism.io:

  • Url: http://exercism.io
  • Platform: windows/mac/linux
  • Total number of programming languages covered (at the time of this writing): 24
  • Total number of js exercises (at the time of this writing): at least 37 (there are some REALLY enthusiastic people in our study group, which is where I got the number from!)
  • Testing framework for js: jasmine-node (this is a module port of jasmine for use with node.js)
  • Exercism.io help url: http://help.exercism.io
  • Exercism.io getting started url: http://exercism.io/getting-started
  • Github for exercism.io: https://github.com/exercism/exercism.io/
The Details

So, to start, this is NOT like a version control system, although you do FETCH code (like a pull) and you do SUBMIT exercises (like a commit.) But you are not choosing the files you are fetching or submitting, you are just fetching or submitting the exercise. When you submit or fetch, you just get/submit what is contained in that exercise. Sometimes that is a base file, test file and readme file, sometimes it is just the test file and the readme file. I have only gone through a few of the exercises, so I’m not sure how the file structures might be in the later exercises.

To get started, follow the directions at the getting started link I posted above. You have to get a few things set up first, like node, jasmine-node, and the CLI client (command line interface.)

Exercism.io has two parts:

  • The exercises and tests for each programming language (accessed through the command line interface)
  • A social system of reviewing other people’s exercise submissions (accessed through the website)
The Process

The basic exercise process is as follows:

  • Fetch an exercise (use the command line, and you can only fetch one at a time; to get a new one, you have to finish the previous one)
  • Work on the exercise locally (for the js exercises, use whatever text editor you want)
  • Work on having a successful run through all the jasmine tests (Running the exercise with node and jasmine-node is usually done at the command prompt)
  • Submit that exercise (command line)
  • See the exercise on the exercism.io website (and you can comment on your own submission too)
  • Fetch the next exercise (command line)
  • Rinse and repeat

On the website, you can:

  • Look at your exercise submissions
  • Make comments on your code submissions
    look at the exercises that others have submitted (but only the ones you have completed, so there is no cheating!)
  • You can make comments on their code (there are some tips right on the page for ideas, and a link to more, make sure the comments are constructive!)
  • They can also answer you back, or make comments on their own code

The comments are called nits, and when you make a nit, it is called nitpicking (although I don’t know that I like this terminology…) If you have nitpicks on your code, and you want to make updates to your code (there is ALWAYS a way to improve your code), you can make a new submission of your exercise. You use the same command (SUBMIT) to submit an iteration as you do the exercise submit the first time. When it shows up on the site, it is called an iteration.

In summary

I think this gives you a good rundown of the basic features on the site, but I highly recommend you go check it out for yourself! I personally think that the benefits far outweigh the discomfort of ‘putting yourself out there’, in terms of you reviewing others’ code, and having your code reviewed and commented on by others.

Some of the benefits of this site (and code reviews in general):

  • You will improve your coding skills much more quickly than coding in a vacuum by yourself
  • You can see other ways of coding the same exercises (comparing apples to apples)
  • You get over the discomfort of talking about your code in a less than stellar way (remember I said above, your code, and everyone else’s code, can ALWAYS be improved)
  • You get more comfortable with talking about coding and coding practices with other developers, in a low key/low pressure environment
Rating

HIGHLY RECOMMENDED