Books

Current Reading List

13 commentsWritten on January 16th, 2011 by
Categories: Books

As i mentioned recently, i'm going to catch up with the rest of the world and learn about real web development. My preferred approach to learning something new is to read a couple of books about the subject(s) and just start exploring and experimenting. I just finished Dino Esposito's Programming ASP.NET MVC (haven't written a review about it because i really can't recommend it to anyone with the possible exception of people who are dealing with a sleeping disorder) so now it's time to actually get into the whole client-side stuff. So i've bought the following books which i hope to read in the coming weeks:

I haven't bought the following books yet, but probably will once i've gone through the books listed above:

If anyone has any other good books on web-development they can recommend, please let me know :)

Highly Recommended Book: The Passionate Programmer

4 commentsWritten on December 19th, 2010 by
Categories: Books

I always felt that, for all the great books about developing software that we have, there weren't enough on how to approach your career as a software developer. Thankfully, Chad Fowler's The Passionate Programmer (subtitle: Creating a Remarkable Career in Software Development) covers exactly that. It's a quick read at only 200 pages, but it's filled to the brim with very wise advice. The book consists of the following 5 parts:

  1. Choosing Your Market
  2. Investing In Your Product
  3. Executing
  4. Marketing... Not Just For Suits
  5. Maintaining Your Edge

In these 5 parts, Chad offers a truckload of solid advice on things like figuring out which technologies to focus on, expanding your skill-set to more than just coding, improving yourself continuously, being as effective as you can be, getting the word out on how good you are, and making sure you keep improving as your career progresses.

Each part consists of multiple short chapters, each of which is kinda blog-post like in focus and length. Again, it's a very quick and easy read. And the electronic version is only $15. The advice you get from this book is a lot more valuable than the time and money you'll put into it :)

Recommended Book: NHibernate 3.0 Cookbook

No Comments »Written on October 24th, 2010 by
Categories: Books, NHibernate

The people from Packt Publishing asked me to review one of their new books, the NHibernate 3.0 Cookbook. I was a little hesitant at first to do yet another book review (don't worry, i'm gonna cut back on the reviews) but the NHibernate community needs a good, up to date NHibernate book and i was curious to see if this one could fill that void.

As the title says, it's a cookbook. It consists of a bunch of recipes for a very large variety of NHibernate-related tasks. These kind of books are usually pretty low on theory, but this one does a good job of backing up most of the recipes' practical steps with just enough of the background theory that you do need to use NHibernate effectively. I still prefer the approach used in NHibernate In Action, which is more heavy on theory, but that book unfortunately targets NHibernate 1.2. This one covers a lot of the new things that have been introduced in NHibernate 2, 2.1 and the upcoming 3.0 version and as such, is the most suitable NHibernate book available right now.

I'm not gonna go over each chapter like i usually do, so if you want to get a a glimpse of what the book covers, just click here. And as you can see, it covers quite a lot. As usual with NHibernate books, i'd like to see a bit more pages being spent on querying, but this task only becomes harder as NHibernate keeps adding more querying API's. Yes, both QueryOver and the LINQ Provider are covered. Unfortunately, the whole chapter that deals with querying covers HQL, Criteria, QueryOver and LINQ in a mere 44 pages. And while there are some examples of each, none of them are really covered in depth. That's probably not the goal of this book, and it would indeed be hard for any book to cover all of those querying API's in depth while not boring the hell out of your readers, but it is something that a lot of readers are going to need to look into a bit more if they're going to use NHibernate in real applications.

But don't let my nitpicking on the querying chapter fool you. This book is very useful to people who are new to NHibernate, and a lot of people who already have experience with it will learn a few new useful tricks or learn some things they didn't know yet. And while it contains a lot of useful information, it also manages to be a pretty quick read. And if you need any more convincing, just take a look at the price of the electronic version of this book ;)

Highly Recommended Book: ReWork

3 commentsWritten on October 17th, 2010 by
Categories: Books

I don't own a business (yet), but i was very interested in reading this book from 2 people who managed to achieve huge results with a very small company. In this book, Jason Fried and David Heinemeier Hansson (aka DHH) share their insightful opinions on a variety of topics related to starting and running a successful business. Considering the fact that this is mostly a technical blog, the question that you're probably asking yourself right now is: is this book only useful to (aspiring) entrepreneurs, or is it useful for those of us who're perfectly happy with just being employees of a company? I'll get back to that later on.

The book consists of 10 chapters, each of which deals with a coarse-grained topic like progress, productivity, competitors, hiring, evolution, culture, etc. Each chapter consists of a set of 'posts' (think 'blog posts') about the topic at hand. Most of them are pretty short, yet they all contain a lot of wisdom. You might be very surprised by some of the advice they offer, or you might find yourself nodding in agreement from time to time. Or even often, depending from person to person obviously. They don't have all the answers, and in some cases they will tell you to avoid certain things while not telling you how you should do it instead. But as they make clear in the beginning: it's actually a good thing to just go with the flow, see how things play out and deal with problems as they present themselves, and not before that. Read their advice, stick to it, and you just might be able to prevent the otherwise inevitable slope to mediocrity that looms for pretty much every other company which sticks to mostly conventional ways of doing things.

So, is this book useful for you? If you're an entrepreneurial type, and you still don't know the answer to this question, then you really shouldn't be running your own business. I'd also recommend this book to anyone who is working as an employee for the following two reasons: it'll either improve the way you do parts of your job depending on what your responsibilities are, or you'll figure out whether or not your current employers are worth working for in the long term :) . That's a win-win situation if you ask me. The only people who won't really get any value out of this are people who are already 'institutionalized'... those who have been working in big companies for a while now and wouldn't be able to adapt to life without them.

I can imagine that quite a few people who read this review will still be skeptical (hi Ben!). That is of course your prerogative but keep in mind that these guys do have a proven track record that few can match. Read the book, and you'll understand why. If you're still skeptical after reading the book, go out and prove them wrong. These guys would love it if you did.

Recommended Book: DSLs In Action

2 commentsWritten on October 9th, 2010 by
Categories: Books

I was recently asked by Manning to review their upcoming book on DSLs, called DSLs In Action. Obviously, i agreed to the review because not only does that mean i get a free book, it's also on a topic that i happen to be very interested in right now because we're writing a DSL at work. Let's go over the contents of the book, shall we?

The first chapter is an introduction to the importance of everyone involved with a project speaking the same language and DSLs in general, including a good listing of the benefits and drawbacks of implementing a DSL. If you've already done any kind of DSL implementation, there's nothing new for you in this chapter, though it is a very good introduction to people who are new at it and want to learn more about it.

Chapter 2 wastes no time in showing you how you can start building your own DSL. The first example is done in Java, but is quickly superseded by a Groovy implementation which is far more expressive than its Java counterpart. The author then covers some DSL implementation patterns for both internal and external DSLs, and then discusses some of the factors you need to keep in mind when deciding to go with an internal DSL (running within the context of a host language) or an external DSL (stands on its own without having to run inside a host language). Chapter 3 covers some of the topics that you'll definitely need to be aware of when implementing a DSL, such as patterns for integration of your DSL with the actual application that you're building (both in the context of internal as well as external DSLs), dealing with errors and exceptions, and finally, some performance related factors worth keeping in mind.

The next 3 chapters cover internal DSLs exclusively. Chapter 4 discusses a set of implementation patterns for internal DSLs, such as leaning on meta-programming techniques, taking advantage of typed-abstractions, runtime generation, and macros for compile time code generation. Obviously, the applicability of these techniques depends on which language you're using, and are nicely illustrated with examples in Ruby, Groovy and Scala. Chapter 5 covers the implementation of a DSL in each of the following languages: Ruby, Groovy and Clojure. Again, the examples do a nice job of highlighting each language's strong points and what kind of results you can get from them. To conclude the chapter, a nice list of common pitfalls that you need to avoid is discussed. The next chapter covers the implementation of a DSL in Scala. It's very heavy on the Scala usage (obviously) and was IMO, one of the two most difficult chapters of the book. If you're familiar with Scala, it'll probably be much easier to get through though but a lot of interesting stuff is covered, even if you don't quite understand all of the syntax. And the resulting examples of the implemented DSLs are the most expressive ones in the entire book, at least as far as internal DSLs are concerned.

After this extensive look at implementing internal DSLs, the next 2 chapters shift their focus to the implementation of external DSLs. I was very curious to see how this would turn out because up until now, i'd never bothered to look into the creation of external DSLs because i thought it would be far too complex. After reading those 2 chaptes, i'm glad to say that while it's no trivial task, it's not exactly rocket science either. You'll see examples of how to define the grammar of your language using EBNF notation, and how you can leverage the power of libraries like ANTLR to make the whole task of parsing your DSL much easier. You'll also see some interesting examples using XText which is more of a DSL workbench. Chapter 8 takes you back to the Scala world to show you can use Parser Combinators in Scala to write an external DSL. This chapter is once again very complex, but very interesting at the same time. The book then concludes with a short final chapter where the author looks forward to the future of DSL based development.

All in all, there is a lot of very interesting and useful information in this book. You'll learn a lot of the things that you'll need to know about to make an informed decision as to which approaches you should following when implementing a DSL. You'll also learn a lot of cool tricks to make your DSLs as expressive as they can be. I can't think of a better book to get you started with DSL development. The only thing that prevents me from labeling this as a Highly Recommended book is that it doesn't cover some of the topics you need to learn about to make sure your success with a DSL is sustainable in the long term. Things like testing your DSL, backwards compatibility, versioning, etc are not covered and it is somewhat missed.