Saturday, December 7, 2013

A Successful Programmer: Reading

I’ve been thinking a long while about some of the things that have made me a successful programmer. One in particular is reading. I have read and continue to read many books. The books I read vary in topic and not all are technical. I will just to focus on technical books for now.

Even though I work professionally as an iOS developer. I keep my eyes open for useful or emerging technologies. There is something to learn from every field, technology, or language. When I find a useful technique, I adopt it into my current practices. Recently I’ve been incorporating more functional programming techniques. The idea of limiting mutable state greatly simplifies debugging later.

One of my favorite publishers is The Pragmatic Bookshelf. They publish books for programmers authored by programmers. They have books on almost any topic and at varying levels of expertise. Additionally their publications are easily affordable. They offer physical books, ebooks, and screencasts. Updated digital publications can be automatically synced with Dropbox. When I want to pick up a new technology and be assured I’m learning best practice, this is my first source. At the time of this writing, I own 31 of their books.

I also read many older books. There is much to learn from the past. One book I often reference is Design Patterns: Elements of Reusable Object-Oriented Software. Knowing good code design is fundamental to writing maintainable code. I love Don Norman’s Design of Everyday Things to better understand building usable apps. Fred Brook’s The Mythical Man Month is great for avoiding common pitfalls in managing technical projects. There are countless other classics I could mention, but these books are among my favorites.

I’ve often heard as a rule of thumb that every programmer should learn a new language every year. This is certainly not enough time to master the language. It is, however, sufficiently long to learn the unique features of the language. I personally try to read several books per year, both related and unrelated to my current work. Lately I have been studying distributed computing and Erlang/Elixir. I love parallel processing, and big data is one of the next big problems that needs to be solved. Though these studies are not directly related to iOS development, it helps me in building scalable web backends to service iOS apps.

Everyone has different learning patterns. If reading books doesn’t suit you, find other ways to learn new technologies and techniques.

As a disclaimer, I am not receiving any compensation from any publishers or authors. I have found the mentioned books useful and believe that they will benefit others.

Saturday, July 27, 2013

Update

For many months my blog has been left idle. Ever since I started working full-time, I have been unable to blog about many of the projects I work on. When I get off work for the day, I have little desire to work on Apple-related technologies. However, I have been working on other personal projects. These projects don’t fit the mold of what I usually blog about here. Here are a few of those projects.

I have been involved with robotics for years. It’s a field that has always fascinated and is what got me into programming. While attending Brigham Young University, I didn’t have the time nor the financial means to support my hobby in robotics. In the last year I have built a couple robots. The first is a hexapod. For the most part, I used a kit from Trossen Robotics. The default code is open source. I found the inverse kinematics engine most fascinating to study. I reprogrammed the hexapod with simple autonomous navigation using a sonar sensor. I also built a dashboard and control system for running and controlling the hexapod from my laptop.

The second robot I built is a quadcopter which I have named Tetra. I designed the frame using Inventor Fusion and printed each of the pieces using my 3D printer. The electronics are from ArduPilot. After many flights, both successful and unsuccessful, I learned a great deal about multi-copter flight and structural integrity.

I already have a third robot lined up. This one is a hexcopter made of carbon fiber. The main idea behind this one is to have a greater ratio of flight time to repair time.

As I previously mentioned I have been working with 3D printing. Not only have I printed Tetra, but I have also printed many trinkets. 3D printing is a young and exciting field. It’s especially great for robotics since I can quickly and easily make any parts I need. I have a few larger ideas lined up, which I may post later.

Outside robotics, I have been working on other projects. I have been teaching myself Erlang and Elixir. I am fascinated with parallel processing. Quite some time ago, I reached the peak of all I could learn about parallel processing from Grand Central Dispatch. Now I am expanding into more advanced techniques. In order to learn these languages, I started work on a simple wrapper around Forecast.io. I have also been using Elixir to solve problems in Project Euler. Elixir makes many of the problems trivial relative to other languages. It’s great for heavy computation, and makes it easy to take full advantage of all my laptop’s cores. As cloud computing continues to expand, I expect that Erlang, Elixir, and similar languages will play a great role.

Hopefully in the coming months my blog won’t be as silent. Though, the topics may be different from those I have done in the past.