Posted tagged ‘Musings’

One of my largest problems at my job is finding interesting work or making my work interesting. Without having the physical exertion associated with an outdoors job, having something that keeps you actively engaged not only increases productivity, but also personal enjoyment and quality of life. Basically, if you don’t find your work interesting, you’re not going to want to do it.

My cat sometimes attacks the chair in her more crazy moments. She is always interesting, but I don't work with her.

Finding interesting work, or ways to make your work interesting, is not a very easy thing to do. But I find that sometimes those things that are boring are excellent opportunities to find ways to automate and therefor make a computer do instead. This serves two main purposes. The first is that you’re no longer doing boring work, a computer is. The second is that you just created some interesting work in creating a way to automate the boring stuff. Typically the stuff that’s boring is something that has no uniqueness to it and you have to repeat over and over again, which is the perfect target for automation anyway.

For example, testing is boring. Going through and finding all of the areas where your program can break and trying to make it happen can be a drag, especially when you have to do it for every release. However, creating automated tests is more interesting. This is especially true if you add extra flair such as making lava lamps turn on when a build breaks, or integrating it with an sms service that sends you texts every 5 minutes that the build is broken, causing you to drive back to work at 11pm to fix something wrong with the continuous integration system itself since the ops people decided to shut down one of your auxiliary systems. Ok, that’s less fun.

Having a passion for what you do and having your work be interesting is critical to your success in life. Hating what you do for a living and finding your work boring will just cause you to be bad at your job and unhappy in general. If you’re unable to discover a way to make your work more interesting for you, maybe you should consider changing career paths.

I don’t have any great suggestions for making any boring work fun. I know from experience that I personally enjoy taking any project and attempting to find the most elegant way to solve it with the best performance possible. Making sure that everything has documentation and that the unit tests cover over 90% of the code gives a wonderful sense of satisfaction. But any sort of goal that yields a high rate of satisfaction should be targeted as something to strive for in your day to day working life.

I don’t think that good developers are good because they’re overly smart and well suited for the work. Being smart is definitely a plus as it helps get to the heart of problems faster, but even the blade of the keenest intellect will be rendered blunt by the muffling sheathe of ignorance.

Waxing poetic aside, you can’t do a good job if you don’t know what you’re doing. No matter how good you think you might be, you can be better by research, study, and experimentation. I feel that this sentiment applies not only to programming, but to all matters of life. The driving force behind this reckless abandon in the pursuit of knowledge and research is passion. You might not have a passion for your job, but hopefully you have a passion for programming (assuming your a programmer… insert other career as it will work well enough in substitute). If you don’t, consider finding a different career, one you have a drive and desire to succeed in. You’ll go farther in an area you have a passion for than one you don’t. It’s better to be an expert at a “lesser” career than a bad or mediocre at a “higher” career. No one wants a rocket surgen that doesn’t really have a passion for rocket surgery.

“But how?” you may ask, thinking that just saying to ‘research’ without any idea of what goal to pursue isn’t very helpful advice at all. Well that might be true, but everyone’s passions, interests, and job requirements will differ so saying ‘learn about parallel processing’ or ‘research distributed computing’ or ‘learn Ruby, it’s awesome’ isn’t very helpful either. But there are a few methods you can use to start your exploration.

The main idea is to explore areas around your current job, but perhaps not directly related. Try learning a different language that you could, theoretically, implement your same work project in if you knew the ins and outs of it. Maybe start a personal project at home that uses that language to discover the differences between it and something else you already use. Sometimes the features of one language can give you ideas how to better use the one you’re stuck with. If you’ve ever used closures in Ruby (or another language that has them), you’ll start thinking about your Java or C code quite a bit differently.

Another excellent thing to do is learn a new framework or way of doing things that is not the norm for your day to day job. Let’s say you’re writing web apps that deal with a lot of relational database transactions and data manipulation. Try learning about non-relational databases such as object databases or NoSQL. There are many open sourced, non-sql dependent databases that you can try out to learn how you can store and retrieve semi-structured data in a non-relational way. Try to figure out the benefits you gain with your current methods, and compare them to the benefits you’d gain if you switched to a different one. You probably won’t switch your work project over, most people don’t have the authority to do such a thing, but it’s still useful because you’ll open your eyes to different ways of doing things which will end up translating to useful knowledge in your daily job.

Learn a new language every year. Do personal projects in that language. If it’s scripting, maybe make some scripts to help your day to day life out a little. Knowing how to utilize more langages will help you appreciate the differences of them and allow you to be better able to pick the best tool for a given job. It also doesn’t hurt when someone at the office starts asking for someone with experience in some new language and you’re the one who knows anything about it. Embrace change, and don’t get stuck in a rut.

Learn something new every day. Be it a use for a framework, a new language feature, or just something about your own code. Continually learning is critical in the high tech field, as you’re knowledge goes out of date way faster than a lot of other professions. Letting yourself get out of date is like letting a knife rust. It won’t be very useful to its user for long, and will be replaced if it gets too far worn.

Test your code before you write it. Test Driven Development really works. You’ll end up writing way more test code than you ever did before, which is a good thing. You might also notice that you structure your code differently if you write your tests first. The main idea is to allow each piece of code to be tested individually from any other piece of code. If you have a class that you want to test a method of, you should be able to fully test that method without implementing any other class. Any reliance on another classes behavior should be implemented through mock objects. Keep your code decoupled and program based on interfaces. It might not be a bad idea to look into a dependency injection framework, or to get familiar with the finer points of the factory design pattern.

Learning and knowledge is the key to success in our world. I would much rather have someone who’s passionate and willing to put in some work to learn how things work and how to do things better than the average day to day code monkey on my team rather than a good code monkey. The second can implement things that I ask for, but the first can invent new implementations and design reusable code that is worth 3x the code monkey.

I was recently approached by a friend of mine to join forces and create a DIY 3D printer. For those who don’t know, a 3D printer is a machine that can fabricate 3D objects that are rendered in a computer using a medium such as plastic, rubber, or sugar. Much of the design is similar to a regular desktop printer, except that instead of using ink it uses a building material, and instead of just printing in 2 directions, it has a moving platform that lowers to allow for the 3rd dimension. It really just prints the material in several 2D layers that build up to slowly create a physical object. Useful in prototyping and art.

My main desire for having a 3D printer is to build housing and components for an arduino. It would be much easier to custom create components from a 3D model for me than to hand make them out of wood or metal, especially since I lack in a decent work shop with power tools. Commercial 3D printers run from $15k up, but DIY kits can be had for under a grand. I’m not sure when my resources will allow me that indulgence, but it’s something to look forward to in the future.

However, my recent fascination in the Arduino, physical computing, and robotics in general have made me wonder if I shouldn’t have also gotten a degree in Electrical Engineering. The college I graduated from did not offer that degree, however the field has begun to interest me increasingly so. I might try to look up some electronics courses at a local community college to expand my horizons.

In the meantime, one of the best ways of learning is not through an institution but through research and experimentation. For experimentation I have to wait for my arduino to arrive (it should be here on friday), but as for research, there are more possibilities in that area. I’m looking at some books on the subject, but I’m not quite sure where is the best place to start. I could focus on some of the physics and basic text books on the subject, or focus more on the experimentation and practical usages. If anyone out there has a good learning road map to a non-colligate learning curriculum on hobbyest electrical engineering, let me know. 🙂

In a slightly different ramble, I’m discovering that my leanings seem to be towards the lower level and possibly abstract areas of programming and engineering. I’ve been focusing my code on creating libraries rather than single use programs. Code reuse has always been an interesting topic in computer science I feel. It’s greatly expounded upon as one of the benefits of object oriented and modular code, the ability for reuse. However I’ve noticed that many developers, and entire teams of developers, rarely write any code that is reused in another project. They will use code from existing libraries such as the Java Standard Library, but will not often create them. However, I feel drawn to making base items that can be reused in multiple projects and by other people.

I think this is why electronic engineering fascinates me so much right now. It’s one of those areas where lower level library code is very much in need. If I can design and create a device that can interface with a microcontroller to perform some interesting action, I would then need to write a driver or library to make that interaction more abstract and easier for a basic user. I haven’t done much C/C++/Assembly programming so I’ve never written a driver, and that’s where my knowledge of theory and experience deviate.

Gaining some practical experience for basic theory is that area of excitement that I feel I can achieve by wiring up components to a microcontroller and building devices that have not yet been built. An exciting prospect that, in the end, I feel will help to improve myself as a developer.

This is a late post because I ran out of time yesterday. It’s also not on any of the subjects that I usually cover. Instead my current iPhone troubles led me to thinking about the state of smartphones and some of the general trends that the industry seems to be leaning towards.

My iPhone randomly turned off last night and hasn’t turned back on yet. I’ve tried charging it, letting it drain, all to no effect. It’s still under warranty so I’ll go and have it checked out at the Apple store tonight. However, being without the handy little device does make me appreciate it more. I also realize just how far these pieces of technology have changed my behaviors in the last few years.

The iPhone was the second cell phone I’ve ever had. My first was a Motorola Razr, which had an extremely slow data connection with a very poor web browser. It could make calls and text just fine, and for a while I figured that was the main purpose of a cell phone so it suited me well enough. I had an iPod for music playing (just a color photo one) and a PSP for playing videos on the go. The number of devices has never really been a problem since I always carried my bag around with me.

The iPhone came out and I jumped on a few months after it was released. There was no app store or any apps other than what came with the phone and web apps, however just having the ability to utilize a real web browser in a phone was pretty useful. Maps also came in handy a number of times when trying to find the nearest store or atm when I was out wandering. After native apps came around and the 3GS was released the phone became even more useful. I can use it to play music, watch video (both on youtube and just copied over), play games, run utilities, and yes, even make phone calls and text messages (now with MMS!). Often when I’m home I will not even bother to take out the laptop and turn it on because I can just as easily reach for my phone and use my home wireless to quickly view web pages or check my email.

I did not miss not having an iPhone before I had one, but now that I have one and it’s broken it drives me crazy. I have to modify my behaviors to get information from other sources instead of that small, easy to use device. I feel the same way about my Kindle. The ability to carry around new books, sync bookmarks with my handy little phone, and read any of my library anywhere is something that makes regular books seem just bland in comparison. I still love regular books, but I’m nearing the point now where if I had the option between reading a physical paper copy or the same book on the Kindle, I’d prefer the Kindle. Having dictionary and wikipedia lookup is just too useful, and so is automatic bookmarks so that I don’t have to keep scraps of paper or worry about losing my place if I need to drop the book quickly.

It is rumored that Apple will be announcing a tablet sometime later this month for availability in March or so. I can’t help but ponder and speculate what they might come up with. I’ve always known that modifications of the computer (which in all honesty is what both the iPhone and Kindle are) would be able to replace many aspects of our current lives as far as information consumption. I have to wonder if there will be a device that will replace my Kindle, Laptop, and perhaps my iPhone just like the iPhone replaced my razr, iPod, and PSP. Granted the form factor will be the most difficult aspect of replacing something like the phone, since if it’s too large to fit in your pocket you won’t want to carry it everywhere like you do with the iPhone. If the screen is too small you won’t want to read on it like you do the kindle, or do any serious writing or more involved apps like you can on a laptop.

Still, many companies have tried pushing the tablet idea and customers haven’t been biting. Apple seems to be good at customer fishing however with the most tasty of bait around. Maybe it’s the fruit origins.

The cell phone industry, especially in the area of touch smart phones, is in an incredible boom right now. Everyone is trying to outdo each other with the newest and greatest little gadget that is faster and with better battery life than their competition. Granted in the US we still have the problem of carrier lock-in and lock-downs (I’m looking at you Verizon). However even some of that is shifting as the carriers lose power to the manufacturers like Apple or Google who are beginning to dictate more and more how their phone can be used rather than the other way around. I imagine someday it will be more common to see less contract-tied plans and slightly more expensive phones that have the flexibility to move between networks. It’s already started a little bit, but the carriers are still too interested in 2-year contracts and don’t seem to be ready to give that up just yet.

So even though my iPhone is currently acting as a very expensive, and lightweight, brick, it does make me reflect that the lose of such an interesting piece of technology and the effect it can have on ones day to day life speaks volumes of where we are today and where we are going in the future of technology.

The new year has come and gone like so much glitter on the sidewalk. Looking at the first big technology event of 2010, CES, I realize that I tend to measure the years by what technology focus is more apparent.

For the past 3 years, ever since the original iPhone was released, there was a very strong focus on smart phones. The first year not as much because other manufacturers were scrambling to put up a competing product, but certainly in 2008 and 2009 everyone was in a rush to create a better knock-off of the iPhone than the original. Google developed Android and many vendors used it along with new buttonless or at least mostly screen phones to capture those users who migrated.

In 2008 the Kindle was pushed out and suddenly eBooks seemed like a viable idea. I know that Sony had a reader for a while and probably a few other companies, but the content wasn’t there and the usability just didn’t feel right. When amazon made a store large enough to rival physical bookstores (if not quite its own physical catalog) and made accessing it a part of the reader itself, that’s when I feel ‘normal’ people too notice. I remember looking at eBook readers back in the late 90’s and wishing that they would become mainstream. I knew that it would happen eventually, I just had to wait. Looking at CES this year, 2010 is most likely going to push eBooks and eBook readers into the mainstream, just like in 2000 the DVD took up adoption.

It seems like roughly 1/3rd of the products being talked about are eBook readers. Some using eInk, some using lower power displays that can do things like color and video (at an expense of battery life and probably readability). Ones with touch screens, ones that are low feature and hopefully low price. The plethora of devices makes me believe that more publishers are going to get on board with releasing their content in digital form. Hopefully they won’t make the same mistake the music industry originally made with high DRM, though they will. In the end they will probably learn just like the MPAA is starting to that releasing non-drm versions will still be bought, won’t effect piracy (people will always pirate), and customers will be happier, we just have to wait until they relearn the lesson of those that came before them.

Also, almost as interesting as the surge of ebook readers is the sudden push for tablet computers. Tablets are not a new idea at all. They’ve been made in various forms for a while now, and I remember that Bill Gates always pushed them as one of his favorite form of computer. Unfortunately the masses weren’t very impressed and no one really bought them. To be fair there weren’t many choices, and the ones that existed weren’t very good. Now with the rumored announcement of a possible Apple tablet, manufacturers are rushing to beat Apple to the punch by releasing their own versions before Apple can once again dominate a market like they did with digital music players and user friendly smart phones.

This is of course great news. The iPhone, Kindle, and non-existant iSlate (or whatever it might be called) has been spurring competition this year for companies to create new and innovated devices at lower prices to fight over the consumer. That is exactly what we need in these industries as the customer can only benefit from those efforts.

The last technology that I’ve noticed are being pushed, but that I don’t think will pick up as mainstream this year, is 3D movies in the home. For the last few years movie theaters have been pushing 3D movies using polarized or shutter glasses. Some of the movies have been pretty gimmicky in that regard (Journey to the Center of the Earth), but some supposedly have enhanced the experience (I’ve been told Avatar was good in 3D). Now there is a push to make 3D TVs and 3D blu-rays that you can wear home glasses to watch. There will most likely be a limited content selection as I think only 2 movies are announced to be released in 3D blu-ray this year. Also the price on those blu-ray players and 3D TVs will probably be prohibitively expensive, so I don’t see this as being a mainstream thing. Maybe in 3-5 years we’ll start seeing some of them pop up in middle-class households, but even then it depends on how well it is received.

The concept of 3D displays at home isn’t really all that new, it’s just been in a different area. Nvidia has had the ability to turn video games into 3D using special monitors and nvidia glasses to do basically the same thing. Again it’s an expensive setup and not many people have installed such a thing. However I think nvidia has an advantage in that currently existing games can be put into 3D without any code changes. The graphics hardware can just convert the 3D images generated by the game into images that can be viewed with the glasses. This increases the content to, well, your current game library assuming you’re willing to spend the money on the monitor and glasses (and that you have an nvidia card).

Overall I think this year will be quite interesting as far as gadgets and technology goes. Microsoft will be releasing Natal for the xbox 360 for home motion capture. Sony will be releasing their wand thing. Ebooks will get a bump in popularity as it becomes more mainstream.

The thing I’m really waiting for however is a la cart TV. Netflix streaming is already showing the potential, and some cable companies have some form of On Demand (that usually isn’t that great). However I know that sometime in the future there will be something like Netflix that covers everything, or at least most, of what’s shown on TV that can be viewed at any time without commercials for a flat monthly fee.

Subscribe

Aspirations of a Software Developer syndicates its weblog posts
and Comments using a technology called
RSS (Real Simple Syndication). You can use a service like Bloglines to get
notified when there are new posts to this weblog.