Posts Tagged ‘computers’

iPad Observations from an Android/Windows User

iPad on the Desk
No Gravatar

Happy New Year, everyone! This Christmas, my family gave me an iPad. I did not expect it at all, and it was a wonderful surprise. I realize that I’ve said a few things here and there that suggested I would enjoy having one, but I didn’t expect that I would get the opportunity until it became a necessity for development purposes for my job (which will happen sometime in 2011). Getting familiar with the tablet has been a fun and interesting experience.

My Computing History

I have always used PCs from my earliest days—starting when I was seven with a 286 that my dad owned, learning the ins and outs of DOS, and expanding my skillset as technology improved. I started learning my first programming language using QBASIC and a great instructional book when I was eight (Goki Blaster, anyone?), and I built my first desktop PC when I was ten. It was a Pentium 75 MHz, and boy was I happy with it. Its *cough* blindingly fast processor helped me when I moved from interpreted to compiled languages, and I spent the next couple of years learning C, still in a DOS environment. I did learn some CA Realizer and later some Visual Basic in a Windows environment, even attempting to tackle Microsoft Foundation Classes in Visual C++ 4.0. That didn’t last very long.

In the late 90s, I built a Linux server and played around with Red Hat 5, Mandrake, and Gentoo, and experimented with the console (obviously), plain old X, KDE, and Gnome. Most of my daily computer usage stayed in a Windows environment though. I bought a Mac mini—the only Apple hardware I owned prior to the iPad—around 2007 in order to have something to perform more complete cross-browser testing on, since by that point I was firmly established in my web application development job. However, before I got to make any real use of that machine, Safari became available on Windows, and browsers continued to move towards a unified rendering behavior. I probably only ever even powered on the Mac mini three times: once when I got it, once for fun, and once to reset the user information before I sold it.

My first smartphone was an HTC Wizard (the Cingular 8125), a Windows Mobile 5 phone with a hardware keyboard and resistive touch screen. I was happy with that for quite a while, and it served my needs well. I upgraded later to an HTC Kaiser (the AT&T Tilt), still Windows Mobile with a hardware keyboard, but newer and faster hardware and software. That also served me well.

The iPhone became available while I owned the Kaiser, but I didn’t own any other Apple hardware, and I appreciated the very clean sync with the Windows/Outlook/Exchange system I was using at the time. I was also long past my 2-year cell phone service agreement (I still am), and very much appreciated not being locked into a contract, and I had (still have!) a grandfathered data plan. So, I didn’t want to buy a subsidized iPhone, extend my contract for two years, and double my data costs. At the same time, I didn’t want to pay full price for an iPhone either, when I wasn’t particularly drawn to the phone over what I had.

My brother bought an HTC Dream (the T-mobile G1), the very first Android phone that came out, and I got a few chances to play with that while I still had my Kaiser. Being a programmer familiar with Java and partial to open source, I was drawn to that phone over the iPhone because of its broad customizability and the potential for the Android OS in general. The UI was also much, much nicer than Windows Mobile 6. I decided I would probably buy an Android-based device next, rather than an iOS-based one, mainly for the development environment. This pseudo-decision was encouraged by the fact that I had recently moved my entire email system (with half a dozen accounts) to Gmail, and I was in the process of moving my calendar system from Outlook/Exchange to Google Calendar.

And that’s exactly what I did—I bought a G1 of my own, used it for a few months, then upgraded to a Motorola Milestone from Telus (the GSM version of the ever-popular Droid on Verizon), compatible with AT&T’s 3G frequencies. That is the phone I have now.

Now, honestly, I don’t remember ever being antagonistic towards Apple, either the company or the hardware or software. I used to think it was really weird when I was younger, mainly because it was unfamiliar to me. I started paying more attention when OS X came out, since it was built on Unix and that meant I had at least a little applicable knowledge. I was perfectly happy with Windows and Linux for everything I needed to do though, and so I never had a reason to pay a premium for hardware and software that was both unfamiliar and unnecessary for my needs.

Current Computing Habits

With the rise of tablet computing, and particularly with the iPad as the first real contender, I began to wonder how I might use such a device myself. I am not an artist in the classic sense, and virtually all of my computer usage is done from using the keyboard. I don’t play many games, and the ones I do play are not usually immersive 3D first-person type games, so I don’t use the mouse much beyond web browsing and basic operating system UI control. I work from home, so most of my computer usage is done in my home office on my desktop, or occasionally on my laptop on the couch in the living room.

Before Christmas, I had three distinct “computing devices” that I used regularly. A high-performance desktop with three monitors, a Thinkpad T61 laptop, and my smartphone. I also have a rather small finite set of activities that I do 99% of the time I’m using any of them. Here is a breakdown of the types of activities I do and which devices I use to do them:

  Desktop Laptop Smartphone
Programming Usually Occasionally Never
Research Usually Occasionally Never
Email Usually Occasionally Occasionally
Facebook Never Usually Occasionally
Twitter Never Occasionally Usually
Time management Usually Never Occasionally
Read ebooks Never Never Always
Read news Never Usually Occasionally
Read blogs Never Usually Never
Write blogs Usually Never Never
Games Occasionally Never Occasionally
Music Always Never Never

That pretty much describes all my computing habits. I’m not saying they are optimal for everyone, but they fit my needs. I work from home, so using my desktop for music makes sense. If I were still going to college or driving a lot, I might switch to my phone or buy an iPod or something. I used to do all of my programming on my laptop because I’d take it to and from the company office, but since I started telecommuting full-time, it made more sense to switch to a desktop. Plus, having three big TFT displays is invaluable for simultaneous development, testing, and research.

Just a few clarifications here: “games” in a desktop context are things like Portal, Cogs, Puzzle Dimension, Chaos Theory, and Obulis (I do like puzzle games). “Games” in a smartphone context are things like Sudoku, Yahtzee, Papijump, and Angry Birds. Also, when I say “time management,” I mean things that help me manage what I have to do and when I have to do it: Google Calendar and Tasks, for example, or Outlook. Lately, I’ve been using Remember the Milk for personal tasks, and GoPlan for work tasks.

Enter the iPad

So, what should I do with a brand-new and wholly unexpected iPad?

That’s what I’ve been discovering in the last week. Which of those tasks shown above will naturally migrate to the iPad? Which should I try to move there, even if they don’t naturally shift? What new activities will I begin doing because I have a new kind of device? The primary detractors of tablets in general, and the iPad in particular, seem to make the argument that it’s just an extra device crowding a functionally saturated space—that if you have a smartphone, a netbook, a laptop, and a desktop, it’s hard to justify a tablet except for very specific market sectors, like the medical industry.

In one sense, saying that I need a tablet is not true at all. I’ve done just fine without one, and even having used it for the last week, I could certainly survive without it, especially for my most important tasks. Then again, I haven’t had a chance to fully integrate it into my routine or explore everything I can do with it yet, so I might just be ignorant of some things that I will soon learn and classify as a need. One thing that I believe will eventually fall into this category, even though it isn’t legitimately there yet, is iOS development. I can’t do it without Apple hardware, at least not simply or legally. I don’t need to do it yet, but I will one of these days.

So what do I as a long-time Windows/Linux/Android user think so far, having played with an iPad for a week?

First Impressions

After the initial shock of realizing the white box with the Apple logo on it was appropriately sized to hold an iPad, I began the discovery process. They gave me the 16GB wifi version of the device, which is more than fine with me. I’d only need more storage capacity for storing music and/or movies on it (which doesn’t fit my usage pattern), and I don’t need 3G because my phone can easily act as a wifi hotspot anywhere other wifi is unavailable.

It’s slightly heavier than I imagined. However, it’s not so heavy as to be inconvenient. I can hold it with one hand and use it with the other hand without my arm getting too tired. I have mostly been using it for the last week either on the desk or in my lap, but I have used it some while standing, and it’s not bad. I think my initial surprise at the weight was only due to the fact that I’m used to my phone, which is obviously much lighter since it’s so much smaller.

The display is beautiful, and the touch sensitivity is spectacular. Apple seems to be able to consistently beat the competition in this regard, at least in terms of sensitivity. I’d only used resistive touch screens (bleh!) before the G1, and the shift from those to capacitive screens was like night and day. The comparison between what I’m used to on my Milestone and the iPad is much less noticeable, but it’s still enough to recognize. Props to Apple for this one. Also, the mere size of the display (10″ instead of 3.7″) makes the iPad easier and more versatile than a smartphone when it comes to visual presentation. The Milestone has a great high-res display as well, but some things are just harder to do with a small screen. The iPad’s 10″ display running at 1024×768 resolution is a good combination of pixel density and screen size. Everything is very easy to read.

The on-screen keyboard is wonderful. At least, it’s about as good as a non-tactile on-screen keyboard can be. I can use it almost as easily as a regular keyboard, though I have to be more careful and I definitely make more mistakes. Compared as-is to the hardware QWERTY keyboard on my phone, I prefer the iPad typing experience. However, I still prefer the hardware keyboard on my phone to the software one, as good as it is with predictive entry, simply because an on-screen keyboard on a 3.7″ display is still not fast or easy by comparison.

The UI look and feel, speed, and eye candy are really nice. Everything seems to be very smooth and responsive. Android has some of the same visual features, but quite honestly it isn’t as polished in my opinion. I don’t think it’s lacking—certainly not in functionality, anyway—but iOS is just prettier than Android 2.2 (Froyo). Later versions of Android will address this, I’m sure. I don’t expect Android to try to mimic iOS, but I predict it will be just as polished and pretty in its own way, eventually. Don’t get me wrong; I really like Android for lots of reasons, including the UI since my only prior experience was Windows Mobile 5/6. The iPad wins this one though for the moment.

The App Store seems more expensive on average than the Android Marketplace. After I did the initial setup and account sync, I started playing with the installed apps and browsing around the App Store. Having used the Android Marketplace for nearly a year, I have learned to control the urge to download anything and everything that looks remotely cool, since that inevitably means I’ll have to uninstall a bunch of apps later after discovering that “cool” does not in anyway automatically imply “useful.” So, I’ve looked at each eye-catching app very critically, especially the paid ones. Most apps are cheap, but if you find 25 “cheap” apps, you can easily spend $50 to $100 without realizing it.

On my Android phone, I have bought perhaps three apps total, and spent less than $10. (Yes, my phone is rooted, and no, none of my apps are pirated.) The apps that I use 99% of the time are all free. Sometimes they are ad-supported, and sometimes they are simply free. The quality of those apps is excellent as well. I don’t feel like I’ve had to sacrifice any functionality to avoid paying, either.

In the iPad’s App Store, many of the most popular apps are not free. Where the Android Marketplace has an ad-supported version and a paid version, the App Store instead has a limited demo version and a paid version. Obviously this is not true across the board, but it seems to be very common. It’s not wrong or evil, or even particularly worse, but it is a shift from what I’m used to. I really don’t mind paying for good tools or well-done games. I also (usually) don’t mind putting up with ads, but that option is much less available on the iPad.

Comparing to Other Devices

How does the iPad compare to the other computing devices that I’ve been using? Obviously, the opinions here are only mine, and others can legitimately make different points based on their own usage and goals. The points listed here are not meant to be comprehensive, but rather based only on the things I’ve noticed during my usage.

Compared to my desktop:

  • The screen is smaller. This one is obvious, but it is an important point. Things that require a lot of screen space to do well (such as programming) may not be suitable for the iPad, even if there’s an app for it.
  • The keyboard is not as nice. For speed and efficiency, the full-size keyboard wins. The iPad on-screen keyboard is remarkably good, but for extended text input, I definitely prefer the physical keyboard. For example, I’d still much rather write a blog post on my desktop or laptop than on the iPad.
  • It’s portable. Another obvious one, but if all you have is a desktop, then an iPad is a major change indeed in this regard. It’s great to be able to carry it around, and the battery life is excellent. I’ve put it on the charger every other day or so, and usually when I do it isn’t anywhere near dead. A full day of regular use might take it down below 50%, if that. (I haven’t tried extended video playback though, to be fair.)
  • Browsing is not quite as good. For some reason, the iPad browsers that I have tried have all been noticeably slower to download and render than Chrome, which I use on my desktop and laptop. The network is the same, and I believe the rendering engines are at least very similar. For a device that seems to be remarkably fast in all other areas, this has been a surprise to me. It isn’t a problem, since it’s still pretty fast, but it is a bit of a puzzle.

Compared to my laptop:

  • The screen is smaller. The same thing applies here as well as the desktop. My laptop display is 15.4″ and runs at 1680×1050 native resolution. The iPad’s 1024×768 is a step down. This isn’t a bad thing, because most well-designed apps present content in a way that doesn’t feel cramped.
  • It’s more portable. If I had my own netbook (my wife has one, so this is a fair statement), I’d still say the same thing. The iPad is designed to be used with one hand most of the time. Although netbooks are very small, their form factor is different. The “clamshell” design inherent to laptops with hardware keyboards makes them more cumbersome to use while walking, for example. Of course, the trade-off between functionality and portability means that neither is inherently better than the other, but it’s important to think about what you need.

Compared to my smartphone:

  • The screen is bigger. This is the first obvious comparison. The Milestone’s display is incredibly sharp (3.7″ at 840×480), but that’s a little over half the pixel area of the iPad’s display at about 40% of the physical size. You can just do more with the iPad’s display.
  • The on-screen keyboard is phenomenal. I’m reasonably happy with my phone’s on-screen keyboard. For the amount of text input I have to do, it’s almost good enough to convince me that I don’t need a physical keyboard. But the iPad’s keyboard is far, far better. Most of this is because it’s so much larger, and therefore less prone to fat-finger errors. Honestly, the predictive input and autocorrect on Android is quite good, even better than what I’ve seen on the iPad; but the fact that you don’t usually need any autocorrect on the iPad makes it a clear functional winner.
  • The App Store is not as wallet-friendly as the Android Market. As I mentioned earlier, it’s harder to find great apps for free in the App Store than it is in the Android Marketplace. The option to choose a free but ad-supported version of many apps is simply not there nearly as much. Limited demo versions often take the place of ad-supported versions so common on Android. This encourages you to be more selective, which isn’t a bad thing. Just be prepared for this difference if you’re used to Android. (This may be a result of my own app needs more than anything else; it could be easy to find great free apps that do things I’m not personally interested in.)
  • It isn’t as portable. Of course, it is still very portable. Good luck getting it to fit in your pocket though. You have to carry it around like a small notebook, and for goodness sake make sure you get a case for it. You can’t hold it and use it with the same hand like you can with most phones. On the other hand, if you could, then by definition it would lose much of its unique functionality because of its necessarily smaller size.

Changed Computing Habits

The question I posed earlier addressed how my habits might change in light of this new device. What will I use the iPad for because of an overall better experience than any other device?

Reading news and blogs. The experience on the desktop or laptop is fine, but the iPad’s presentation and eye candy are much more pleasant. I use Google Reader in Chrome most of the time, and while I don’t have any complaints about that, it’s nice to have the magazine-like interface of Flipboard instead. This is definitely more about style than function, but it’s enough to make me shift from a browser on a laptop to the iPad.

Taking notes. Using Evernote on this thing is great. It’s easier, faster, and prettier than using it on my phone, which is what I’d been doing previously (and because of the difficulty, I haven’t been taking notes very often). Being able to have the larger display area for notes is definitely superior to the smaller phone interface, and it’s also preferable to both the desktop and the laptop for portability and convenience.

Free-form artistic design. I’ve never really considered myself to be an artist. But Adobe Ideas, a great free app, is an amazing tool for anyone who wants to try their hand (or fingers, to be precise) at art. It’s even better than many drawing tablets you can get for regular computers, since those don’t usually let you see what you’re drawing right on the tablet unless you pay a high premium for that feature. Adobe Ideas is a great casual tool for precisely that purpose. This “touch art” principle applies to any well-designed tablet computer as well; for tactile creativity, directly interacting with your hands is far more intuitive than using a mouse and keyboard.

Time management. Many years ago, my parents both used Franklin Day Planners for managing their time. I can’t imagine using a physical product for that now, but the concept was excellent. I used an Outlook/Exchange system all through college, and that worked really well. But since I graduated and moved to Virginia, my days and tasks have become far less complicated. I work from home, and my schedule is very predictable. Outlook was overkill, especially since I started using Gmail for all of my email. I do still have tasks and appointments here and there, however. The iPad is a natural tool for time management of any level of complexity. You can use a very involved tool like Omnifocus, or something slightly simpler (and cheaper) like 2Do, or any of the very basic free task list apps. Personally, I’m using 2Do because it satisfies my needs, and because it syncs tasks with an online service. If my life were more complex, I’d pay the $40 for Omnifocus. The form factor and capability of the iPad makes it the perfect tool for time management.

Casual gaming. Angry Birds on the iPad is quite literally a joy to play. It also does very well with board games, logic games, and the popular genre of “hidden object” games. It’s also great for developmental games for small children because the interface is completely intuitive. Once the screen protectors I ordered arrive, I’ll be happy to let my 2-year-old nephew try some simple puzzle games.

Reading ebooks. I’ve mostly used my phone for this so far, and it does okay with it. The display on my phone is not bad for that purpose; it’s just smaller, so I have to flip pages a more often that I do on the iPad. I will probably continue to read on my phone some of the time because it’s portable and I always have it with me. However, as long as I keep my library synchronized across all my devices, I’ll prefer using the iPad whenever it is available because it’s more “book-like” and pleasant for that task.

Final Thoughts

I really, really like this thing. I thoroughly enjoy using it, and I’d recommend it to others (though waiting for the iPad 2 might not be a bad idea, if you can hold off for a few months). Other tablets like the Samsung Galaxy Tab could also be excellent, and I’d certainly be willing to give one of those a try for comparison. In general, tablets can certainly hold their own among other devices, though not everyone needs one or would find as many useful applications for them as I have.

The most exciting prospect to me with this device is that I now have an iOS device that I can write code for and test with. Sadly, I need a Mac in order to do that, and I don’t have one of those yet, but I’ll get one sooner or later—probably sooner, since the iPad is most definitely acting as a catalyst. I know that Mac development tools include iPad and iPhone emulators, but having a real device to test with is definitely preferable to me. I can hardly wait to get started and compare it to my limited Android development experiences.

Thanks to everyone who pitched in to give me this awesome new tool/toy! And once again, happy new year!

P.S. Good heavens, I just googled “goki blaster” and NOTHING CAME UP. I may have to enlighten the world with the beauty of that wondrous 80×25 console-based top-down alien blasting game in a future post.

Solving Mastermind Logically

Mastermind Game
No Gravatar

Many of you know that I love logic puzzles, and that artificial intelligence fascinates me. These two interests go hand-in-hand, and both are complemented by my passion for programming. I have at various times tried to write programs to either generate or solve different kinds of logic puzzles, including tic-tac-toe, Sudoku, Lights Out, and Mastermind. I even wrote some notes about the expected value of a Yahtzee game (while taking a statistics class) as part of an effort to pit two “smart” computer players against each other in Yahtzee—though that had more to do at the time with statistics than artificial intelligence, so I digress.

Sadly, many of my efforts never generated full working solutions, but I sure did have fun trying. The interesting thing about implementing any kind of artificial intelligence, even very simple machines, is that it is usually far easier to explain how it should work to another person than it is to make the computer behave correctly. This is a testament to the incredible computing power our brains actually possess, but it also poses a challenge that I love trying to overcome, even just for the sake of it. So today, I’ve decided to write out my simple explanation for solving Mastermind, which will hopefully prompt me to finish writing my solution.

Mastermind is a relatively simple logic game. (Side note: wow, that Wikipedia link just gave me a bunch of ideas, particularly because of Knuth’s five-guess algorithm. That dude is a genius.) The game seems intimidating to some people, but it is really far easier than almost any game I can think of. This is because there are no time limits and only two rules:

1. A black peg means you have a correct color in the right place.
2. A white peg means you have a correct color in the wrong place.

That’s all there is to it. All you need to do is choose pegs that do not violate any of those rules for any of your guesses so far. Everything else is random (ignoring the optimizations possible with Knuth’s five-guess algorithm, or the six-guess one also from the article). In order to play the game, you need to follow only two steps:

1. Choose random colors for pegs that you assume to be wrong.
2. Arrange your current guess in a way that doesn’t violate either of the rules above.

As long as you don’t have any guesses that don’t fit with the “grade” pegs you get from any previous guesses, then you will solve the puzzle in a perfectly logical fashion. It may not be the optimal solution, but it is certainly logical. Try a quick online version here if you want to try it out.

The problem with writing a program to actually solve a puzzle is making the program intelligently follow those two steps above, particularly #2 (step #1, choosing new random colors, is usually really easy). Depending on which language you choose to write your solver in, it could be more or less complicated. The logic is the same, but some languages really lend themselves to that kind of coding. The absolute best language I know of is Prolog, because it has a built-in logic engine. I can’t imagine how it works behind the scenes, but it’s incredibly capable. There is an elegant Prolog Mastermind solver here if you want to check it out.

I had a Prolog class in college, which was fascinating bun sadly not enough to make me confident enough to try writing a program of that complexity, even though it’s probably not that complex as Prolog programs go. I’d love to learn more about the language, and Mastermind would be a great exercise, but I want to use a language I’m familiar with. For me, that means C/C++ or PHP. I’ll probably go with PHP, because I don’t care for speed (yet) and I have to deal with multidimensional arrays, which are way easier with PHP.

Programmatically, to make sure any guess doesn’t disagree with any previous set of grade pegs, you need to track the information given by each grade. Each grade gives you two categories of information:

1. Which color/position arrangements are possible
2. Which color sets are impossible

These two types of information are recorded and used very differently. Each graded guess will give you a different set of information for each category, and the quantity of information available depends on how many black and white grade pegs you get. For example, say you have a puzzle whose solution is:

…and your guess is:

The red is the right color in the right place, and the blue is the right color in the wrong place, and the last two are simply wrong colors. Therefore, that guess would receive a grade of 1 black and 1 white peg. What exactly does this tell you? Well, in simple terms, it tells you part of what we already know: you have one right color in the right place, and another right color in the wrong place. However, since you hypothetically don’t know the solution yet, that grade doesn’t tell you which of your guess positions the grade pegs apply to. So, from the computer’s perspective, that grade tells you exactly this:

  1. Possible color combinations: (based on 1 black, 1 white)
    1. #1=Red, #3=Blue
    2. #1=Red, #4=Blue
    3. #2=Blue, #3=Red
    4. #2=Blue, #4=Blue
  2. Impossible color sets: (based on 2 grade pegs)
    1. Red, Blue, Black
    2. Red, Blue, Orange
    3. Blue, Black, Orange
    4. Red, Blue, Black, Orange

This is not that difficult to determine automatically. If you work out the possibilities manually though, it can definitely be a pain. You might also discover that a grade of exactly two white pegs is the least helpful grade you can possibly get, since all you know is that two of the four colors are in the wrong place. This is less helpful than exactly one white peg (which tells you that three pegs aren’t in the solution at all), and exactly three white pegs (which tells you that three of the pegs are in the solution).

The key is to take each of these sets of information and run new guesses through them like filters. Each potential new guess must fit with all previously gathered information, or it must be tossed out. If it fits, then it’s logical, and you can proceed to get a new grade.

A program to solve a Mastermind puzzle has to repeat this process over and over until it finds the solution. It doesn’t seem so bad explained like this, but all (both) of my previous attempts at an implementation failed. One of them came really close, but something about it wasn’t quite right. Maybe the publication of this post and my renewed interest will encourage me enough to fix it and finish, so I can post something more concrete for you all, like an actual solver that you can run online.

On a separate note, those of you paying any attention at all probably noticed that my blog layout changed again. I really like the old one (a very dark theme with light text), but as nice as it looked, it was kind of hard to read because of the contrast. I may try to fix it and maintain much of the old theme, but for now, I like this new one enough to keep it.

The Evolution of a Programmer

No Gravatar

I think I am a pretty good programmer. I only feel free to say this because I have had many other people (including other programmers) tell me so over the last many years. I know that there are many programmers out there who are better than I am, and not just hypothetically—I’ve met them in college classes and online. However, it really doesn’t matter how good I am for the sake of this argument. What matters is that I think I am good. And even more importantly, a year ago, I felt exactly the same way about myself. Looking back, I know that I was comparatively lacking in many areas.

This can be a discouraging revelation. Every time I have to work with code that I wrote a year or more ago, it’s all I can do not to bang my head against my keyboard. I always find myself wanting to rewrite the whole function (or class, or website) because I know I could just do so much better now than what I did before. I want to use some new coding model, a new CSS convention, a more efficient database structure, or any other simpler/better/faster technique to make an old convoluted mess into a thing of beauty. Making mere modifications to such blatantly awful code is painful. I feel almost ashamed, even if just a little bit, even if only for a moment inside, to have written code that is sub-par at best.

Recently though, I’ve come to interpret that revelation as an encouragement.

Computer technology is one of the fastest-changing fields around. And I don’t just mean the hardware, which is typically the subject of that sort of statement. The same thing applies to software applications and, by implication, the programming languages used to write them. This is most severely felt in the web application market, where new languages and frameworks seem to come into existence weekly. If you are in the mood to learn something new, there are endless opportunities, many of which could probably benefit your specific job directly in some way.

This is even true if you stay mainly within one language. I’ve been programming almost exclusively in PHP since about 2003, but during the last six years, PHP has undergone many revisions and updates (most notably, a true object-oriented implementation instead of a hack-job imitation). I am constantly learning new tricks, and occasionally learning totally new ideas that change the way I use the language. I wrote my own MVC framework about a year ago, and I learned so much new stuff about PHP during the process that my whole programming paradigm changed. I couldn’t believe that I’d gone so long before learning what seemed so fundamental. That kind of thing doesn’t happen all the time to me, but I do learn how to do my job better on a regular basis.

It’s this learning process that enables me to recognize how bad my old code was, and this is what is so encouraging. If I never realized my old code was bad, it would mean that I hadn’t learned anything new, and that would be a truly disheartening outcome. I would much rather be constantly reminded of how much farther I have progressed than be unknowingly stagnant in a rapidly changing field.

Of course, it is possible that you’re just totally awesome at what you do, and your code is impossible to improve. If that’s the case, please email me so we can set up a brainstorming session. Or perhaps you’re using an ancient language (COBOL or FORTRAN, anyone?) because your job requires it, and you can’t really learn new things because the last language revision was decades ago. But for most web developers, neither of those things are true.

So, even if you don’t need to delve into your old code to fix or modify anything, take a moment sometime and compare what you’ve done in the past to what you do now. Bash your head on the keyboard if necessary; but if you do, realize you’re only inclined to do so because of how much farther you’ve come.

Do You Enjoy Using Your Computer?

No Gravatar

Virtually everything I do for work and a good portion of what I do for fun, I do with a computer. It occurred to me a couple of days ago that whether I’m working or playing, aside from the occasional stressful bug-fix situation I get into while programming, I really, truly enjoy using my computer. From a lot of things I’ve personally heard other people say, as well as the apparently common idea that people really hate their computers for one reason or another, it seems I may be in the minority. Or, if I’m not in the minority, there are at least a lot of people who feel differently.

That’s a shame. Really.

Computers are incredible tools, and they are certainly capable of making a lot of things easier, faster, and even more fun for us. I know that not everyone is in the same situation with respect to technology, and lots of people don’t depend on their computers nearly as much as I do on a daily basis. I work from home as a web application developer, so my PC is an integral part of my job (and hobby, which happens to be a personalized version of my job). If I have sub-par hardware or software, I am measurably losing efficiency, which isn’t just an inconvenience–it’s lost income for me or my employers.

Using unreliable hardware or poorly-written software is like trying to use a slotted screwdriver in a really shallow screw head. Even though you know very clearly how it’s supposed to work, you have to try really hard to get anywhere, you end up with a ratted-out screw half the time, and the other half the time just makes you want to grab a hammer and beat it into submission.

Also, I know that not everyone is quite as “at home” with computers as I have become. When you start tinkering with software when you’re eight and hardware when you’re ten, lots of things seem more intuitive by the time you’re 25 than they would otherwise. Learning how to use the hardware and software you have at your fingertips is certainly its own challenge, and I won’t discount the importance of that learning process. If you feel technologically challenged, take some classes, or read a book, or even just type or click randomly and see what happens. Most systems have an “oops, fix that” feature of some kind if you need it, and it’s a lot more likely that you’ll learn by making educated guesses than that you’ll accidentally start a nuclear holocaust by clicking the wrong button.

If you’re stuck using a poorly written piece of software for work or something like that, you might be out of luck trying to improve it if it’s mandated by your superiors. But more often than not, if you feel like the programs you’re using don’t work right, there is at least one alternative that will work better for you, and thus make things easier, faster, and more enjoyable. I’m not saying that using your computer will become one of your favorite activities of the day (though it might), but every little bit helps, right? Also, some of my suggestions below aren’t suitable for certain users because of hardware or software limitations (like a university computer lab) or your current proficiency levels in certain programs. If you’re a wizard with Microsoft Word, switching to Google Docs probably isn’t an efficient change. There is no one-size-fits-all set of tools that will work for everyone.

That being said, here’s a list of stuff that I use that enables me to actually enjoy using my computer.

  1. A clean desk.
    I love a clean desk. This is incredibly important to me. It isn’t as critical to some people, I know, but I think the general consensus is that working around mess increases your stress at least on a subconscious level. When things are clean, it’s much easier to focus on only what’s important. Would you rather work at this desk or this one? That’s what I thought. Whenever I let my desk get anything on it beyond the bare essentials, it distracts me until I clean it off. Maintaining a clean desk isn’t really that hard, if you clean it off once and then make a point to keep it that way.

  2. A good chair.
    I enjoy sitting in my chair. It’s comfortable. This is one of those things that’s easiest to ignore if you’ve never had a good chair in the first place. You know those weird-looking ergonomic chairs that cost $500? There’s a reason people actually buy them. If you’re going to spend all day sitting in a chair, you better make sure it’s not going to make you sore by the end (or the middle!) of the day. Think about it: if you work 40 hours a week at a computer, you spend about 2,000 hours in your chair every year. It’s worth getting a good chair. It’s even worth $500 if that’s what you have to pay to find something that you’re really comfortable in. I got my chair for $130 from Best Buy. There are better chairs out there, sure, but I don’t ever feel sore at the end of the day. The bottom line is that it’s worth spending a lot of money to get a good tool, if you’re going to use it all the time.

  3. Multiple monitors.
    I love having a lot of screen real estate. It seems like everybody at least heard this one by now. Flat panel displays are cheap, even big ones. I got two 24″ Asus displays for $175 each from Newegg a while back when they were on sale. Those things are monsters: huge, crisp, bright, full HD (1920×1080), and big enough that regular-size fonts don’t seem tiny. I eventually added a 3rd 19″ display for even more usable area. I can’t imagine going back to a single display for my primary workstation. I use all the available space on all my displays all the time. If I had the desk space, I could probably even make use of a 4th…but we wouldn’t want to overdue it, now would we? Now, this point in particular doesn’t make sense if you only use one program at a time (which many people do, and that’s fine). But if you find yourself constantly switching back and forth, you would probably benefit from at least one more display. You can find a 19″ or 22″ display for under $200 any time, and sometimes even under $150 if you go small enough. I wouldn’t get anything less than 19″ though; it’s not really worth it on the price curve.

  4. Bias lighting.
    I enjoy my bias lighting. If you don’t know, bias lighting is where you have a source of light behind your display. Some new TVs have this feature built in. The basic idea is to avoid the stark contrast you would otherwise have between the edge of your bright back-lit display and the deep darkness that surrounds it. This is less visible if you have a very well-lit desk, but quite obvious if you don’t, or if you like to work in the dark. My bias lighting is two $7 fluorescent lights from Home Depot stuck to the back of my TFTs with a $2 strip of velcro cut to fit. It looks awesome and relieves some eye stress. Instructables.com has some info here if you are interested.

  5. Wireless mouse and keyboard.
    I love having no cables on my desk. I didn’t realize this until I actually got a set of wireless peripherals. They work wonderfully and I haven’t had to replace the batteries once since I bought them more than six months ago. I’m a sucker for the old IBM-style layout (very particularly placed backslash key), so I got this set from Newegg. Lots of others will work just as well. In a situation where cables are often many and messy, switching to wireless is a simple improvement that can have a nice visual impact. This goes along with having a clean desk.

  6. Lots of RAM.
    I like running lots of stuff at the same time. This is only really important if you do that. But if you do, it makes a huge difference. If you don’t have enough RAM, your operating system has to use the hard disk to store information that it needs quick access to. This is a problem because a typical hard disk is about 1,000 times slower than typical RAM. Having enough RAM has an obvious effect. I have 8GB of RAM (in a 64-bit OS, which is also a requirement if you want to utilize more than about 3.5GB of RAM), and I frequently use over 80% of it at any given time. The ability to have 15 things going on without a noticeable performance loss is really great.

  7. Easy software.
    I really love the software that I use for everything I need to do. Every time a find a great new software package to accomplish something I need to do, I get excited about it. I just discovered Balsamiq for web application mockups. It’s amazing. I use Gmail for all of my email. I use Google Docs for almost all of my documents. I use Google Reader for RSS feeds. I use Picasa for photo organization. I use Evernote for note-taking (it integrates with my Android phone, which I also love). I use PhpED for development. I use Goplan for project management. I use Chrome for regular browsing and FireFox for web development and debugging. All of these tools are a joy to use because they do exactly what they are designed to do, and they are simple and intuitive. These are, of course, only some of the tools that I use, but you get the idea. Also, I realize that “easy software” is a very arbitrary term, and it doesn’t mean the same thing for everyone. But the idea is simple. If you find yourself struggling to accomplish something, it often doesn’t matter whether that’s out of ignorance or because the program isn’t made well; you can usually find some alternative that is easier for you.

The short version is that you should find a set of tools to use that won’t turn your computer into something you hate using. At worst, you should say “I wish I didn’t have to do this” instead of “I wish I didn’t have to use my computer to do this.” At best, you might actually enjoy some things you didn’t previously like. It will be more like using a perfect-fit socket wrench on a bolt instead of that slotted screwdriver on the shallow screw head. WAY less stressful.