Herding Code 119: On The Writing Technical Books (with Jesse Liberty, Phil Haack, and Brad Wilson)

This episode of Herding Code the guys talk to Jesse Liberty, Phil Haack, and Brad Wilson about writing technical books. Jesse has written dozens of technical books, and both Brad and Phil worked with Jon and K. Scott on the recently released ASP.NET Professional MVC 3 book. What’s it like to write a book? Why do it at all? How does the process work? How is it changing? Is Angry Birds your favorite story? Join us for a very literary version of Herding Code to find out.

  • We start with a listener question from @tpdorsey (Terrence Dorsey): “*Printed* books? If so, why bother? I ask this as a print writer and editor for 17 of last 20 years.”
  • There’s a discussion of the value that the editorial process adds to books as compared to blog posts.
  • Twitter question from @schwarty: “Best way to work a first time deal? Submit queries? Try to team up with co-writers?” Phil, Brad, Jon, K. Scott, and Jesse tell stories about how they got their first book deals.
  • Phil notes that most authors get a start in other mediums – blogs, magazines, possibly StackOverflow in the future.
  • Jesse talks about his investigation of self-publishing. In the end, he decided that the editorial process tipped the scales towards working with a publishing company.
  • Jon references Twitter questions from @devhammer and @jglozano on dealing with procrastination, making time to write, etc. He points to positive pressure of working for a publisher under a schedule and a contract to get the book out the door. Brad talks about how peer pressure from other authors to keep up is also helpful.
  • There’s discussion about the challenge writing up an outline before starting the book. Phil talks about how the publishing industry in general is pretty stuck on older technologies like FTP, and in general the process feels like waterfall software development.
  • Jesse says that if you’re reasonably on schedule, publishers are pretty flexible about changes to the outline.
  • Brad answers listener questions from @stevenproctor “Have you found e-readers coming into their own to influence how you think about book?” and “has it changed how you think about layout/presentation for cross format reading” saying that it was difficult to write without seeing what the end result would look like, but he was very happy when he saw the end result, both in print and the e-book format.
  • Jon talks about how working with book templates from various publishers has taught him to appreciate the use of styles in Word, explaining a case where he was able to search for code snippets based on the styles that were used.
  • Kevin asks some interesting questions about whether working on the book puts pressures on when to ship the product, and whether writing a book about a product points out features that should be changed. Brad explains that the king of product changes due to writing (blogging in this case) is Scott Guthrie.
  • Phil talks about how Eilon (the technical reviewer) was good at keeping him from digging too far into minute details that nobody would care about. Jon explains that Eilon pointed out that the Controllers chapter was going way into the weeds before actually showing the most common use case, and Brad says that he’s in good company with an example from Charles Petzold’s book on Windows programming.
  • Jon talks about the tricky chicken-and-egg situation with trying to explain the MVC pattern in depth, since an in-depth explanation of the Model, View, and Controller requires an in-depth understanding of the other components. Jon asks Jesse about how he handles that, and Jesse talks about the importance of having a model user and getting volunteer readers as you’re writing.
  • Jon talks about the benefit of working with other authors. Brad talks about the this is more important with products with quick release cycles, and Phil compares book writing with software development techniques.
  • There’s a discussion on ensuring a consistent voice in a book with more than one author.
  • Phil, Jon, and Brad discuss the conflict between beginner and advanced content. Are the experts who are asking for advanced content representative of most readers? Phil points out that writing advanced content is a lot more fun, but limits the audience. Can a book please everyone? Is there a way to include beginner and advanced content? Jesse describes some ways he handles this, and says that it’s important to set expectations.
  • Jon talks about the decision to remove NerdDinner, referring instead to the MVC Music Store tutorial.
  • Jesse says that it’s remarkable that books are still selling well, since they’re competing with blogs, tutorials, videos, etc. He speculates that the main selling point for books now is in context: telling a story. Jon asks how he manages to do that.
  • Phil talks about the decision to put all the book’s code samples in NuGet (triggering the Haacked NuGet Drinking Game clause).
  • Jesse talks about the mismatch between the publisher’s requirements for a flow of completed chapters and the software developer’s desire to refactor.
  • Jon asks K. Scott how writing magazine articles compares to writing for a book.
  • That’s pretty much it.

Show Links:

Download / Listen:

Herding Code 118: On The Writing Technical Books (with Jesse Liberty, Phil Haack, and Brad Wilson)

[audio://herdingcode.com/wp-content/uploads/HerdingCode-0119-On-The-Writing-Of-Technical-Books.mp3]

Herding Code 118: Paul Betts on SassAndCoffee

This episode of Herding Code the guys talk to Paul Betts about SassAndCoffee, a NuGet package that adds runtime Sass and CoffeeScript compilation to ASP.NET.

  • Jon asks Paul about his role on the Office Labs team [Spoiler alert! Since this podcast, Paul has started a new job at GitHub!]
  • Jon asks Paul about why he got interested in Sass and Coffee for web development.
  • Jon asks Paul how an Office dev gets away with liking Ruby and Python.
  • Paul describes Sass (Syntactically Awesome Stylesheets), a meta-language for CSS that adds in variables, nested rules, inheritance, mixins, etc.
  • Paul explains how SassAndCoffee is designed to eliminate fiddling, so he’s gone to great lengths to make the NuGet package just work without any setup.
  • Kevin points out that this is at run-time rather than at build. Paul talks about the advantages of run-time compilation (especially interactive CSS edit / refresh) as well as potential downsides (performance, potential for compilation errors). Scott K also mentions that it might be useful for CDN deployment and continuous integration.
  • Jon asks about the new package definition file the 1.0 release, and Paul explains how it tells Visual Studio that the .coffee files are to be included with the project build.
  • Paul explains how the CoffeeScript compiler works using an HttpHandler, Jurrassic, and V8. Jon asks if he’d looked at IronJS, and Paul describes why that didn’t work for him.
  • Paul explains the hurdles he went through to get V8 running under an ASP.NET HttpHandler, since V8 assumes that it will always be accessed from a single threaded process.
  • Jon asks Paul about his use of uglify.js for Javascript optimization and compression.
  • Scott K asks about the ability to swap out other compilers, e.g. the Google Closure Compiler.
  • Paul talks about some of the commits he’s had recently, including support for Nancy, better cache configuration and some useful refactoring. Jon and Paul discuss how some refactoring patches – especially blind Resharpering – are less than helpful.
  • The discussion shifts to how Paul got Sass working without requiring the user to have a local Ruby installation, including some crazy tricks with the DLR’s platform resource library to embed a portion of the Ruby standard library as an embedded resource in the NuGet package via a virtual R: drive.
  • Jon asks if it’s possible for others to reuse Paul’s Ruby embedding technique in other applications.
  • Jon, K. Scott, and Paul discuss commenting policy, and Paul explains why he liberally commented certain sections of the code.
  • Paul mentions how the V8 integration falls back to Jurassic in case it can’t run for some reason.
  • Kevin asks if Paul looked into creating native ports of Sass or CoffeeScript, and Paul explains why he decided to set up compilers for the original versions rather than port them.
  • Jon talks about how he’d looked at Zen Coding and mused about how to implement it in Visual Studio, deciding as Paul had that it’s better
  • Twitter question from @elijahmanor about IDE support for Sass and CoffeeScript. Note: since the podcast, the Mindscape Web Workbench has made this available.
  • Scott K points out that the MVC 4 roadmap includes support for recipes, which should help with extending the IDE via NuGet.
  • Paul wraps up the nerdy internals of SassAndCoffee by explaining how he’s handling loading the 32 and 64 bit versions of the V8 C++ CLI DLL depending on the user’s CPU architecture.
  • Jon asks about what server-side hosting requirements are needed to run SassAndCoffee.
  • Kevin asks whether the V8 API was easy to work with, and Paul says no.
  • Jon mentions that he appreciated all the thanks that Paul had in the readme, and Paul talks about how great it feels to thank people.
  • Jon asks what’s next for SassAndCoffee, and Paul says he wants to add Compass.
  • Jon (jokingly) mentions that he’s a fan of BrainScript and asks for support.
  • Paul and Jon discuss some of the nuttier esoteric languages they’ve seen.
  • Jon asks what else Paul’s up to; Paul talks about the Reactive Extensions book he’s working on with Jesse Liberty. Jon asks Paul a bit about what’s new and interesting with Reactive Extensions.
  • Jon asks Paul about the interaction between Reactive Extensions and Interactive Extensions, and Paul explains by way of a Reactive Extensions history lesson.
  • There’s a discussion on the (intentional) lack of a ForEach operator in LINQ
  • K Scott tells his terrifying story from NDC in which Eric Lippert was sitting in his talk.
  • Scott K asks about Reactive UI, another of Paul’s projects, an MVVM framework which leverages Reactive Extensions.

Show Links:

Download / Listen:

Herding Code 118: Paul Betts on SassAndCoffee

[audio://herdingcode.com/wp-content/uploads/HerdingCode-0118-Paul-Betts-on-SassAndCoffee.mp3]