Book report: Getting Started with Julia Programming
Summary:
A good overview of the abilities and rationale of Julia, as well as good suggestions on how to write effective code. However, the material may be a bit dated for a fast-evolving language, the book overall is rather terse, and the quality of the printing could be better. Also not for people who haven't already had experience with programming.
Pros:
I'd taken an online class before on Julia, so I was already familiar with some of the language basics. Still, I was looking for some more detailed information about the language, and in searching on Amazon I came across this book. The ratings seemed high and it looked to be the start of a series, so I ordered myself a copy. Besides some bruising from shipping the book looked good and a small blurb on the last page said it had been printed February 24th 2017, which would be pretty much the day I ordered it. Nothing that important to have, but neat nonetheless.
I liked the breadth of topics covered and many of the chapters covered things I hadn't come across in the Coursera class. This would be data types like dictionaries and sets, language features like macros/metaprogramming, as well as file I/O, networking, parallel computing, shell commands, and calling C and Fortran. Most topics had example code to help explain the concepts, which I found pretty helpful. While not a lot of time is spent on individual topics, there's still a good overview of the important things to remember about the nuances of the language and what to keep in mind to avoid common pitfalls. There's also a subchapter about how to optimize Julia code for performance that's really helpful, although I wish some of it was a bit better explained. For instance, the book recommends devectorizing code for performance, which is odd to anyone who's ever coded in Matlab, R, or Python. After doing some of my own research, it turns out that vectorized Julia is still faster than vectorized R, and the suggestion here is more to make Julia more competitive with C.
The Packt site for the book also has all the examples in the book available for download, so it's very easy to get their examples running on your own computer. I haven't tried everything, but what I've experimented with so far has worked as advertised.
Cons:
The tag line for Packt Publishing has me a bit torn; "Community experience distilled". On one hand, open source and other community efforts have produced great things, like much of Julia itself. However, while I liked the book, something about it seemed amateur. Clearly the author has expertise in Julia, but the book seems a bit rushed at times and the teaching style is a bit typical of programming intro books. The graphics are also of mediocre quality, mostly consisting of desktop screenshots at a pretty low resolution. And while not a con per se, you should be aware that this book is intended for people who already have some programming experience, as the basic tenants of programming are only covered super briefly.
But perhaps most distressing is that the book was written right at the introduction of Julia 0.4. The book also covers some of 0.3, but the current release at the time of this writing is 0.5. It doesn't seem like there have been major changes to the material covered, and this is the danger of buying books on a language that hasn't hit its 1.0 release yet, but considering my book was seemingly printed to order, I don't feel like revising the book on major language releases is unreasonable. I can't help but wonder if, as much as I enjoy the tactile experience of thumbing through a physical book, it wouldn't be more effective just to read the Julia documentation.
Also, something about $30 for a book that is less than 200 pages of material and all these other issues seems a bit steep. I may order the next book in the series if only to talk about it on here, but I'm a bit on the fence about it. It might also have been nice to have example problems to work through to give the reader a chance to try things for themselves instead of just running the site example code.