Search This Blog

Sharpen Your Programming Tools

Programming is like any other craft, whether that be engineering or woodworking or auto repair. Every craft has its tools that must be learned and maintained in order to do beautiful work and make wonderful things. In the craft of programming, one of the main tools we work with is programming languages. The more languages we know and the better we know them, the more versatile and valuable we can be as programmers and the better our solutions become. Fortunately, it's extremely easy to find websites to help you practice with programming problems and build up your skills with the languages you already know or bring you up to speed on languages you're trying to learn. They're so easy to find that it may be a bit overwhelming to pick one and settle in to actually work on some problems. Here are some of my favorite (free) sites—and why I like them—to help simplify that decision.

Tech Books I Will Read Again

I have read a crap-ton of technical books, mostly on software, but some either more general or hardware related so I felt the need to generalize the genre to "technical" books. If you've been following my blog for the last year, you'll agree that especially recently, my reading rate has been arguably excessive. I'm reaching a point where I'd like to slow down and focus on some other things in my free time, but I'm also reflecting on all of the great and not-so-great tech books I've read. One of the defining factors in whether I think a tech book is excellent versus merely good is if I have the urge to read it again. (For anyone wondering, there is no distinction needed for the bad tech books.) This feeling might happen right after I finish it, or even while I'm reading it the first time. It also might take a while to percolate and rise back to the surface as a book I want to go back to. The bottom line is, a mark of a great tech book is that it's worth revisiting, so what follows is a list of tech books I've read that I thought were so great that I'm going to read them again.

Tech Book Face Off: Game Engine Black Book [Wolfenstein 3D Vs. Doom]

After all of the heavier reading I've been doing lately—machine learning, CUDA programming, fundamental Lisp programming, etc.—I wanted to kick back and read something a bit more relaxing and entertaining. Luckily, at just the right time a friend lent me a couple of books that promised to fit the bill perfectly: the Game Engine Black Books for Wolfenstein 3D and Doom, both by Fabien Sanglard. I grew up with these games, with them being my first and second PC FPS games. I played countless hours of these and other id Software games and other games that used id Software engines like Rise of the Triad, Heretic, and Hexen. I couldn't wait to dig into these books and see what was underneath the games that pleasantly wasted away the night hours of my youth.

Game Engine Black Book: Wolfenstein 3D front coverVS.Game Engine Black Book: Doom front cover

Tech Book Face Off: How to Design Programs Vs. Structure and Interpretation of Computer Programs

After reading and reviewing dozens of books on programming, software development, and computer science, I've finally come to a couple of books that I should have read a long time ago. I'm not quite sure why I didn't read these two books earlier. Distractions abound, and I always had something else I wanted to read first. I still wanted to see what they had to offer, so here I am reading How to Design Programs by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurthi and Structure and Interpretation of Computer Programs by Harold Abelson, Gerald Jay Sussman, and Julie Sussman. As I understand it, these books are meant to introduce new students to programming so not reading them until now will probably make it difficult to accurately critique them from the perspective of the target audience. I'm still going to give it a try.

How to Design Programs front coverVS.Structure and Interpretation of Computer Programs front cover

Tech Book Face Off: Facts and Fallacies of Software Engineering Vs. Programming Pearls 2

Since I've been hitting the tech books pretty hard for a while now, for this Tech Book Face Off I wanted to take a bit of a breather and do a couple of relatively easy reads. These books have been on my to-read list for some time, so I decided to finally check them out. The first one, Facts and Fallacies of Software Engineering by Robert L. Glass is a book in a similar vein as The Pragmatic Programmer in that it relates various tidbits of advice on the craft of software engineering. As for Programming Pearls 2 by Jon Bentley, this book surprised me. I thought it would be somewhat similar to Facts and Fallacies, just more directly related to instructive programming examples than to the software engineering field at large, but it turned out to be quite a bit different, as we'll see in this review.

Facts and Fallacies of Software Engineering front coverVS.Programming Pearls front cover

Tech Book Face Off: Don't Make Me Think Revisited Vs. The Non-Designer's Design Book

I read a lot of technical books about programming languages, development methods, and coding techniques. Those books help enhance my skills in what I do most of the time, which is embedded firmware development, and what I'm interested in, which is learning new programming languages and new ways of solving problems with software. Every once in a while I feel like I should dip my toes into the design side of the pond so I can get a better sense of how to design features that will make the stuff I build easier to use, and so I can better understand the reasons behind what makes a particular design good or bad. For this dip in the pond, I chose Don't Make Me Think Revisited by Steve Krug, a safe book considering that I've already read and loved the previous version of the book. I also picked up a book I've been meaning to read for a while: The Non-Designer's Design Book by Robin Williams, off of a reading list from Joel Spolsky's blog. These books were both quick, enjoyable reads, but let's break it down a little more.

Don't Make Me Think Revisited front coverVS.The Non-Designer's Design Book front cover

Tech Book Face Off: Programming Elixir ≥ 1.6 Vs. Metaprogramming Elixir

Since I wasn't quite satisfied with the first Elixir book I read, and I wanted to learn more about this rich, complex programming language, I selected a couple more books to help me explore the more advanced aspects of Elixir. The first selection, Programming Elixir ≥ 1.6 by Dave Thomas, promises to cover all of the major parts of Elixir with a clean, well-written book from the coauthor of the excellent The Pragmatic Programmer. The second selection, Metaprogramming Elixir by Chris McCord, focuses on the ways that a programmer can write code to write code in Elixir, always a fascinating endeavor. Both of these books are again by The Pragmatic Programmers publishing company, since I've been mostly pleased with the books they put out. I might just have another of their books waiting in the wings for a review later this year, but let's take a look at how these two Elixir books stack up.

Programming Elixir ≥ 1.6 front coverVS.Metaprogramming Elixir front cover

Tech Book Face Off: Getting Clojure Vs. Learn Functional Programming With Elixir

Ever since I read Seven Languages in Seven Weeks and Seven More Languages in Seven Weeks, I've been wanting to dig into some of the languages covered by those books a bit more, and so I've selected a couple of books on two interesting functional languages: Clojure and Elixir. For Clojure I narrowed the options down to Getting Clojure by Russ Olsen, and for Elixir I went with Learn Functional Programming with Elixir by Ulisses Almeida. You may notice that, like the Seven in Seven books, both of these books are from The Pragmatic Programmers. They seem to pretty consistently publish solid, engaging programming books, and I was hoping to have more good luck with these two books. We'll see how they turned out.

Getting Clojure front coverVS.Learn Functional Programming With Elixir front cover

Tech Book Face Off: Programming Massively Parallel Processors Vs. Professional CUDA C Programming

After getting an introduction to GPU programming with CUDA by Example, I wanted to dig in deeper and get to know the real ins and outs of CUDA programming. That desire quickly lead to the selection of books for this Tech Book Face Off. The first book is definitely geared to be a college textbook, and as I spent years learning from books like this, I felt comfortable taking a look at Programming Massively Parallel Processors: A Hands-on Approach by David B. Kirk and Wen-mei W. Hwu. The second book is targeted more at the working professional, as the title suggests: Professional CUDA C Programming by John Cheng, Max Grossman, and Ty McKercher. I was surprised by both books, and not in the same way. Let's see how they do at teaching CUDA programming.

Programming Massively Parallel Multiprocessors front coverVS.Professional CUDA C Programming front cover

Tech Book Face Off: Data Smart Vs. Python Machine Learning

After reading a few books on data science and a little bit about machine learning, I felt it was time to round out my studies in these subjects with a couple more books. I was hoping to get some more exposure to implementing different machine learning algorithms as well as diving deeper into how to effectively use the different Python tools for machine learning, and these two books seemed to fit the bill. The first book with the upside-down face, Data Smart: Using Data Science to Transform Data Into Insight by John W. Foreman, looked like it would fulfill the former goal and do it all in Excel, oddly enough. The second book with the right side-up face, Python Machine Learning: Machine Learning and Deep Learning with Python, scikit-learn, and TensorFlow by Sebastian Raschka and Vahid Mirjalili, promised to address the second goal. Let's see how these two books complement each other and move the reader toward a better understanding of machine learning.

Data Smart front coverVS.Python Machine Learning front cover

Tech Book Face Off: Seven Concurrency Models in Seven Weeks Vs. CUDA by Example

Concurrency and parallelism are becoming more important by the day, as processor cores are becoming more numerous per CPU and more widespread in every type of computing device, while single core performance is stagnating. Something that used to be barely accessible to the average programmer is now becoming ubiquitous, which makes it even more pertinent to learn how to utilize all of these supercomputers effectively. Besides, parallel processing is a fascinating topic, and I think it's great that it is now so easy to experiment at home with things that used to be reserved for huge companies and university research departments. In order to become more proficient at programming in this way, I started with the book Seven Concurrency Models in Seven Weeks: When Threads Unravel by Paul Butcher for an overview of the current state of affairs in concurrent and parallel programming. Then I went for an introduction to CUDA programming for GPUs with CUDA by Example by Jason Sanders and Edward Kandrot. I've been looking forward to digging into these fascinating books for a while now, so let's see how they stack up.

Seven Concurrency Models in Seven Weeks front coverVS.CUDA By Example front cover

Tech Book Face Off: Effective Python Vs. Data Science from Scratch

I must confess, I've used Python for quite some time without really learning most of the language. It's my go-to language for modeling embedded systems problems and doing data analysis, but I've picked up the language mostly through googling what I need and reading the abbreviated introductions of Python data science books. It was time to remedy that situation with the first book in this face-off: Effective Python: 59 Specific Ways to Write Better Python by Brett Slatkin. I didn't want a straight learn-a-programming-language book for this exercise because I already knew the basics and just wanted more depth. For the second book, I wanted to explore how machine learning libraries are actually implemented, so I picked up Data Science from Scratch: First Principles with Python by Joel Grus. These books don't seem directly related other than that they both use Python, but they are both books that look into how to use Python to write programs in an idiomatic way. Effective Python focuses more on the idiomatic part, and Data Science from Scratch focuses more on the writing programs part.

Effective Python front coverVS.Data Science from Scratch front cover

Physics Book Face Off: The Hidden Reality Vs. Parallel Worlds

It has been an awfully long time since my last Physics Book Face Off, and that's mostly because it seems that I read pop physics books very slowly. I haven't even gotten into the real physics books that I eventually plan to read on relativity, string theory, and the like, but that's okay because I'm still enjoying these gentle forays into the technical details of the universe. For this pair of physics books, I dug into the idea of multiple universes with The Hidden Reality: Parallel Universes and the Deep Laws of the Cosmos by Brian Greene and Parallel Worlds: A Journey Through Creation, Higher Dimensions, and the Future of the Cosmos by Michio Kaku. Physicists have a bunch of different ideas about the possibility of other universes lying outside our own, and both of these books, by authors I've read before, set out to explore those wide-ranging ideas.

The Hidden Reality front coverVS.Parallel Worlds front cover

Tech Book Face Off: Rails AntiPatterns Vs. The Rails 5 Way

It's been a while since I've cracked open a Ruby on Rails book, and there were still a couple of these books that I've been meaning to read. So far the Rails books I've read have been beginner's books and tutorials. With this latest pair of books, I wanted to go deeper into Rails and learn how to program fluently in the framework. The first book, Rails AntiPatterns: Best Practice Ruby on Rails Refactoring by Chad Pytel and Tammer Saleh, was published way back in 2010 when Rails 2.3 was cutting edge. I took a chance that the book would focus more on timeless advice than version-specific tips and tricks. The opposing book, The Rails 5 Way by Obie Fernandez, was published much more recently at the end of 2017 and should be at less risk of being out-of-date. Although, it looks like Rails 6 will be out soon. One thing's for sure: technology doesn't stand still, but that shouldn't matter too much if the books take that into account. Let's see how they fare.

Rails AntiPatterns front coverVS.The Rails 5 Way front cover

Tech Book Face Off: Python for Data Analysis Vs. Python Data Science Handbook

I'm starting to dabble in machine learning. (You know it's all the rage now.) As with anything new, I find it most effective to pick out a couple of books on the subject and start learning the landscape and the details straight away. Online resources are good for an introduction, or to find answers to specific questions on how to get a particular task done, but they don't hold a candle to the depth and focus that you can find from reading about a subject in a well-written book. Since I'd already had some general exposure to machine learning in college, I wanted to work through a couple of books that focused on how to do data analysis and machine learning in a practical sense with a real language and modern tools. Python with Pandas and Scikit-Learn has a huge community and plenty of active development right now, so that's the route I went with for this pair of books. I selected Python for Data Analysis: Data Wrangling with Pandas, NumPy, and IPython by Wes McKinney to get the details of using the Pandas data analysis package from the author of the package himself. Then I chose Python Data Science Handbook: Essential Tools for Working with Data by Jake VanderPlas to get more coverage of Pandas from another perspective and expand into some of the Scikit-Learn tools available for machine learning. Let's see how these two books stack up for learning to make sense of large amounts of data.

Python for Data Analysis front coverVS.Python Data Science Handbook front cover

Tech Book Face Off: CoffeeScript Vs. Simplifying JavaScript

I really like this setup for a Tech Book Face Off because it's implicitly asking the question of what can be done to improve the quagmire that is the JavaScript language. Should we try to simplify things and pare down what we use in the language to make it more manageable, or should we ditch it and switch to a language with better syntax that transpiles into JavaScript? For the latter option, I picked one of the few books on the CoffeeScript language, aptly named CoffeeScript: Accelerated JavaScript Development by Trevor Burnham. Then, for sticking with JavaScript, I went with a recently published book by Joe Morgan titled Simplifying JavaScript: Writing Modern JavaScript with ES5, ES6, and Beyond. It should be interesting to see what can be done to make JavaScript more palatable.

CoffeeScript front coverVS.Simplifying JavaScript front cover

What I Got Done in a Year With My Leisure Time

Yes, this is a selfish post that will probably help me more than anyone else that reads it, but it's worthwhile to reflect every so often on what you've accomplished. The beginning of a new year is as good a time as any to do this reflection and look ahead at the coming year to see what you want to change, improve, or add to what you did before. So that's what I'll be doing in this post, looking back at what I've done, and using that to inform how I want to approach the year ahead. I'm going to limit this introspection to what I do in my personal leisure time because it's the easiest part of my life to tally up like this, and, well, reasons.