I recently went through some involved discussions with a client who has traditionally not used open-source software when a library package licensed under the GNU Lesser General Public License (LGPL) seemed to be the best choice for our needs. I kept a number of notes during these conversations and felt it was probably something that should be shared since, no matter how comfortable you are working with open-source licensed software, you probably work with (or for) someone who doesn’t share that comfort. How do you talk to them about using open source software, particularly as part of some product that you are releasing?
While you are reading this, keep in mind some things:
Put your credit card back in your wallet — I’ve found some really good software development books that are available for free, and will keep you busy until the end of the year, at least.
Image via http://natureofcode.com/book/
The Nature of Code by Daniel Shiffman
Daniel Shiffman is a professor at NYU’s ITP program, where he teaches “a course entitled Introduction to Computational Media. In this course, the students learn the basics of programming (variables, conditionals, loops, objects, arrays) as well as a survey of applications related to making interactive projects (images, pixels, computer vision, networking, data, 3D).”
So, on the one hand, this is a book targeting beginners (or near beginners..) but quickly dives into topics like working with particle systems, physics libraries, and neural networks. I’ve been writing code for a living for a long time now, and I learned a ton from reading this book. It’s available for purchase in either PDF, or print formats, but it’s far more useful in its online form.
Online version (and links to paid versions) available here.
The Mature Optimization Handbook by Carlos Bueno
Carlos Bueno is an engineer at Facebook, and has written a book that came out of an internal training class he taught there. Thorough, and brings an interesting spin on the idea of when it’s even worth your time to optimize heavily:
“Unlike testing or bug-fixing, performance work can often be deferred until just before or even after the program has shipped. In my experience, it makes most sense on mature systems whose architectures have settled down. New code is almost by definition slow code, but it’s also likely to be ripped out and replaced as a young program slouches towards beta-test. Unless your optimizations are going to stick around long enough to pay for the time you spend making them, plus the opportunity cost of not doing something else, it’s a net loss.”
Mathematics for Computer Science, by Lehman, Leighton, and Meyer
876 page text from the 6.042 class at MIT’s Computer Science and Artificial Intelligence Lab. Even if you already know all of what’s in this book (hint: you probably don’t), it’s an amazing reference. If you’re going to learn something from the book, a little poking around on the CSAIL website will lead you to the problem sets that are used in that class.