Carpe Diem!

Today, my daughter and I ran the first of three 5K runs this summer. We decided to participate in the Disney Virtual 5K this spring, and have spent the last few months training. Today’s race wasn’t great. We didn’t break any records, but we accomplished our goal for this month. Next month, and again in August, my daughter and I will run another virtual race.

As I was running today, I remembered something I read this spring. “Today I will do what others will not so that tomorrow I can do what others cannot.” This simple idea applies to just about everything in life. Today, I will show my wife that I love her so that tomorrow I have a marriage others look to as an example. Today, I will study Spanish for 30 minutes so that when I travel to Mexico later this year I can get around. Today, I will learn a new technology so that tomorrow I will be more marketable.

To achieve any goal in life, effort must be exerted day after day. I see people everyday who want to own their own business, or write a book, or run a marathon. Yet, rarely do these same people have any plan to get there nor are they exerting any energy toward their goals today. They are hoping that, by some miracle, they will wake up one day and it will have happened. But it never will. My business, my profession, my 5K run today, and everything else I have ever accomplished have taken untold amounts of effort and energy. But never once have I looked back on those efforts and regretted my decisions. Can you say the same about the things you have put effort into?

A leadership conference I attended this spring talked about the importance of self-leadership. About how we can never lead others if we can’t lead ourself. How do we lead ourself? By setting goals and working toward them. The leaders we wish to follow are those who have a record of achievement. They are people we aspire to be like. Are you putting in the effort today to be the leader that others will look to tomorrow? If not, are you willing to put in the effort today so that tomorrow you can do what others can’t?

Sieze the day! Make something awesome happen!

Gaming Addiction Disorder?

I read a recent article indicating that the World Health Organization had recognized gaming addiction as a disorder. Decisions like this should bring fear  to all tech organizations. As we strive to create compelling content, we run the risk that someone may become ‘addicted’ to our content in a way that negatively impacts their life. Websites like Facebook, Pinterest, Thingiverse, and others can easily become a time blackhole with an afternoon gone before you even realize it. Isn’t that what we want though? We want to attract users and keep their interest. But what happens when courts rule that the addiction that we caused created a negative financial impact on the user? Will content providers like Netflix be sued in class action lawsuits because people couldn’t stop binge watching the newest TV show? How far will this go? Will we have a future where employees who watch TV all day can’t be fired because they suffer a recognized disorder? Must we, as employers, provide reasonable accommodations for their disorder? How about social programs – will we be required to provide welfare because someone has become so ‘disabled’ that they can’t work?

When I was younger, I played a lot of games too. Hours spent playing The Legend of Zelda, Super Mario Brothers, and other Nintendo games; and even today I enjoy playing classic NES games. But gaming is only one part of my life. I enjoy reading, learning foreign languages, studying astronomy, playing board games, and so many other things. Gaming has never become an all consuming obsession in my life.

I am concerned to see how this will play out and what the ramifications may be, but I do know this – the future will be filled with people suffering from carpal tunnel and vision problems looking back on their life filled with the regret of having sold their dreams for a digital fantasy world that left them empty in the end. And we, as taxpayers and businesses will be left with the financial burden.

The Value of Open Standards

One of the most frustrating aspects of working in the tech world is dealing with proprietary systems, protocols, standards, and languages . Countless technologies do things their own way, even when standards exist for the technology. Some vendors like to avoid open standards simply so they can hold a segment of the tech population hostage. Unfortunately, many of the biggest offenders are also among the largest tech companies out there. Because of their influence, they ignore standards and create their own. These vendors may argue that they created their own way of doing things because the standard isn’t robust enough to do what they want. While this may occasionally be true, it’s often an excuse. A shining example of this problem is the Swift language created by Apple. Did we really need a new language for iOS? Certainly it was time to retire Objective-C (another Apple only language), but did Apple really need to create a new language? Were there no other languages that would have worked to achieve your objective? I doubt Swift was really necessary. Microsoft has done the same thing with their C# language. While I personally like the language, did they really need to create their own clone of Java?  How about Microsoft’s Active Directory? If you’ve ever tried to integrate a non-Windows machine, you quickly see how painful it is. These are just a few examples, but I am sure everyone reading this has experienced issues where things weren’t compatible that should have been if the vendors simply followed existing standards.

Why does this really matter? Because incompatibility negatively impacts consumers. When vendors create proprietary protocols, the consumer often loses. Time is wasted trying to connect a Mac to a Windows network. Programmers spend time learning another language that is useless outside of a specific niche. Money is wasted for additional software to convert between file standards. Users waste time fixing an OpenOffice document that doesn’t import nicely into Microsoft Office.

As new technologies continue to come out, this problem is only going to get worse unless we start working today to create open standards and to follow existing standards.

Lifelong Learning

I’m a nerd – it’s hardly a secret. My favorite hobby is learning. From math to foreign languages to astronomy to theology – I read and learn all the time. That’s one of the things that makes being a programmer such an amazing job. For most people, work is the same today, tomorrow, next week, next year. Over and over again, the same tasks, the same problems. Software engineering is completely different. Rarely are the problems the same from project to project. Every single day, a new problem appears for development teams to tackle. A new user experience to create. A new bug to find. But it doesn’t stop there. Technology never stands still. Technologies that appear cutting edge today will seem antiquated in a year. The libraries that make everything seem so easy this week will be cumbersome this time next year. For twenty years, I have watched new languages spawn, new paradigms of programming become popular, new technology stacks gain prominence, and new tools take the limelight. As I was writing some JavaScript code today, I learned a new way to solve a problem that repeatedly comes up in my projects. Next week, I’ll learn another novel way to solve another problem. That’s the life of a programmer – an inexorable march forward toward the ever elusive notion of being an expert. Indeed, what makes programming so fun is that, no matter how much you learn, it’s an intractable problem that beckons you back for more every single day!

Enthusiastic Indies

Several times each month, someone gives me an idea for an app. Usually, it’s an app they would love to have, and so they assume there must be a market for it. These apps typically fall in niche markets. For example, I have been asked to write apps to help firefighters identify symbols on chemical trucks, to aid frequent travelers in finding radio stations matching their musical taste, or apps to help off-roaders find their way and map new trails. Each of these ideas are great, but none of them would ever generate enough money to pay for development. The problem is that developing good mobile applications typically requires a fair amount of time for any non-trivial problem. And, since most users will look for free apps instead of paying for them, there’s little income generated from an app. Of course, there are some apps that make a substantial sum of money. Well known games, for instance, can generate massive amounts of revenue for their developers – but this is an incredibly small percentage of the apps out there.

So how do all the niche market apps get out there? Often, they are done by a devoted indie developer who is passionate about solving some problem. So, they develop an app. They may spend months learning how to write an app, or they may be a programmer writing an app for one of their own hobbies. Either way, they spend countless hours writing software that will likely never generate enough money to even pay for the electricity they used to write the app.  These developers are really an unsung hero of the tech age. Developers writing code for hobby projects create not only apps we use on our phones, but also countless free applications we use online, or on our desktop machines.

It’s amazing to me the amount of free software and applications that we have available to us because of passionate indie developers out there writing code for free. Few other professions give so much back to the community!

The Cryptocurrency Elephant

For the last 6+ months, cryptocurrencies have been the news over and over again. Ranging from the highs of Bitcoin at the end of last year through hacking of cryptocurrencies during the last week; cryptocurrency news has been everywhere. But with all the buzz about cryptocurrencies, the elephant in the room seems to be completely ignored: the huge waste of energy.

During the last several decades, there have been growing concerns about climate change, global warming, green technologies, etc. Al Gore insisted that we lower our green house gasses (ironically while traveling around the world in a private jet creating more green house gasses in a year than many of us will in our lifetime). Car companies want us to use electric cars to lesson our usage of fossil fuels. Wind and solar farms are showing up all over the place to decrease the nation’s carbon footprint. We’re asked to heat our houses to 66 at night and cool them to 75 or 80 in the summer. Turn lights off when not in use, ride a bike to work, shut off your computer when not in use, don’t idle your car in the winter to warm it up, on and on the list goes. But that’s not enough – the environmentalists say – we need to stop using all the earth’s natural resources on cell phone components, batteries, etc. Use rechargeable batteries, recycle your cell phones, don’t throw computers in the trash because they contain hazardous parts.

Then, cryptocurrency hits the market. No longer do we care about energy consumption. Cryptocurrency is intentionally designed to use as much power as possible – increase the difficulty of a block and the power consumption goes up. Mining generates huge amounts of heat, and then air handling systems need to be installed to keep machines cool. Cryptocurrency is both directly and indirectly causing global warming! To make matters worse, miners spend huge sums of money buying special chips (whether video chips or specialized ASIC chips) which require more mining to retrieve the necessary minerals. From an environmental perspective, cryptocurrency may be one of the biggest disasters of the 21st century. Yet, nobody wants to talk about it. A few years ago, it was suggested that I get rid of my Dodge Ram truck because it used too much gas. Now, the world is on fire for crypto mining.

Let me be clear, I think blockchain is an amazing technology. The potential is mind boggling. However, if it continues to grow like it currently is, how will we handle the energy requirements? How will we reduce green house gasses? How will we achieve any goals that involve using less energy when cryptocurrency is based on wasting energy? I think this is a problem the cryptocurrency community needs to resolve. The technology is great, but I doubt the global community is willing to sell out the entire planet for a few bitcoin.

I’d really love to hear thoughts from the blockchain community on how this can be resolved!

GameMaker Studio 2

For the last decade, I’ve been tinkering with game development. I’ve played around with DirectX and OpenGL, and written games for Android, as well as desktop games using Java and Unity. I’ve taught students to use Scratch and to write scripts in C# for Unity. Through the years, I’ve come to really like Unity. Unity is free, can create awesome 3D games, and has a wide variety of resources available through their resource store. However, I’ve found that there are some things that Unity just doesn’t work as well for. For instance, while Unity does have 2D support, it seems like a hack to their 3D world. Platformers can be especially painful since floating platforms, for example, violate the rules of physics. And while their animation tools work very well, they can be overwhelming for the novice to use. Overall, Unity has a steep learning curve and, too many times, things that would seem simple become painfully difficult. I remember the attempts I made at creating a simple 3D racing game – wow, dealing with their car controller was a lesson in frustration. This isn’t to say that Unity isn’t a great tool, it most certainly is. It just isn’t the best fit for all games. If I wanted to create a first-person, explorable, realistic, 3D world to explore – Unity would be my first choice. But for many other games, Unity just isn’t your optimal choice.

Enter GameMaker Studio 2. I was recently contacted by a non-programmer who had been tinkering with GameMaker Studio and wanted to know if I would help him make a game. Having worked so much with Unity, I was initially hesitant to switch platforms. To make matters worse, GameMaker Studio isn’t free. So, I reluctantly downloaded the demo version and played around. Wow! What an amazing development platform! I quickly upgraded to the full version ($100) and have been loving what I can do! One of my favorite aspects of GMS2 is the ability to create and edit sprites inside the app. This may seem trivial, but I don’t always want to use Photoshop or Illustrator to create simple pieces of graphics content. Another great feature is how the project resources are automatically broken down into types – objects, sprites, audio, etc. For many junior developers, project organization is never considered. Long term, that means projects become unmanageable. The simple aspect of automatically organizing resources by type helps to keep the project clean. The GMS scripting language is based on C++, but all the ‘hard stuff’ is hidden from the programmer. No need to worry about imports, constructors, or any of the stuff that would make programming daunting to the junior developer. Individual micro-scripts are created for startup, step (each new frame of the game), or events such as button or keyboard actions. These small scripts keep code small and more easily understood. (I would image that as a project gets larger, this could be problematic. But for smaller projects, this is nice.) GMS has built-in functions to change the angle of an object, play a sound, or create labels on the screen. Built-in variables exist for an object x/y position as well as the screen dimensions. Everywhere I look, I see that the makers of GMS worked to create a platform for non-developers to create games with as little technical knowhow as possible. For me, this is particularly exciting. Why? Because many of the people who want to work on a game don’t have the technical expertise to use a more complicated development environment. But with GMS, the bar has been lowered to allow everyone the fun of developing games!

If you’re interested in trying game development, I would highly recommend Game Maker Studio 2.