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!

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.

Angular is Awesome

Over the last six months, I have started doing a lot of Angular development. Initially, I was less than enthusiastic about the experience, but today it is probably my favorite technology. So, what makes Angular so great?

Angular provides a clean breakup of code, HTML, and CSS. Like MVC models for desktop or web applications, the Angular model ensures a clean separation of concerns allowing web designers to write HTML code while programmers handle the underlying logic.

Angular components are modular. I love this aspect of Angular development. I can create a cool widget in one application and easily use it in another application. This kind of modular approach reduces development times and allows for plug-and-play development of applications.

Angular applications run on the client side. As servers get more and more traffic, dealing with all the page requests can become burdensome for a web server. Running as much as possible on the client side not only improves user experience by improving speed, but also reduces load on your servers.

Angular applications use AJAX. This prevents full page reloads and just changes portions of the webpage based on user interaction. It looks slicker, feels better, and allows for all kinds of cool web experiences such as filtering and sorting data in a way that feels like a desktop application.

Angular applications easily consume REST services. This makes it easy to interact with countless services – whether homegrown or provided by a third party. Typically, REST services provide data in the form of JSON objects which need no manipulation to use in an Angular app. No parsing – just consume the data. It’s easy and convenient. Likewise, when sending data to JSON-based REST services, no translation is needed – just send the native JavaScript object to the server.

Angular can be used to create mobile applications. Ionic is a commonly used framework for creating hybrid mobile applications for both iOS and Android. Ionic provides an Angular framework as well as components to create awesome mobile applications.

Angular can use countless CSS frameworks. While not specific to Angular, I feel I would be negligent to not mention the amazing variety of CSS frameworks out there that can be used by Angular to create visually appealing web apps. Materialize CSS and Bootstrap are two of my favorites, but countless other libraries can be used allowing developers to create a beautiful experience for users.

If you’re not using Angular, you’re definitely missing out!

Successful Software Projects

Throughout my career as a software engineer, I have seen projects succeed while other projects failed. Some projects are delivered on time and under-budget, others are delivered late with costs substantially more than anticipated. What determines the success or failure of a project? Two simple things make all the difference in the world: requirements gathering and feedback.

During the early phase of a project, the requirements gathered will be used to determine a project’s timeline and the corresponding budget. However, rarely are initial requirements adequate to determine much more than a high-level understanding of the application. Often, things like user management requirements, reporting requirements, security requirements, and similar tasks are glossed over even though they are essential elements. Likewise, core pieces of functionality may not be well thought out by project management. A lack of consideration for all the permutations of options that may be present and how they impact each other or the application in general serve as an example of this. In an eagerness to get the project moving forward, holes are left that must be filled in later. Unfortunately, with such incomplete data it’s impossible to determine a budget or a timeline. Nonetheless, timelines are provided based on guesses that turn out later to be way off. As the deadline approaches, developers are forced to take shortcuts that create long-term problems. This can be resolved by spending a little extra time gathering requirements early so that the true scope of an application can be determined and more accurate timeframes can be provided.

The second key to a successful project is frequent feedback.  As a project progresses, it is imperative for managers, users, and other stakeholders to have visibility into the application so that they can verify functionality, critique the user experience, and provide other necessary feedback to ensure that development teams aren’t headed in the wrong direction. While requirements gathering goes a long way to ensuring that developers go down the right path, feedback throughout the process enable problems to be addressed quickly before substantial development effort is wasted. This kind of visibility has the added benefit of allowing management to see where a project is and to begin developing advertising material or documentation.

If you want your projects to be successful, put in a little extra effort upfront to provide adequate documentation and ensure that you provide feedback to development teams throughout the process. Not only will you appreciate the effort, but your developers will too!

 

I Need an App!

Increasingly, organizations desire an app of their own. For many businesses, this can be a source of increased visibility for their organization or even a channel to generate more revenue. A great example is apps by large and small businesses alike allowing users to order and pay for food and then stop by to pick it up. The business gains increased visibility with their corporate logo on the user’s phone, while the user gains an improved user experience… everyone wins.

Conversely, many organizations create an app just so they can advertise that they have one. They want the increased visibility for their brand, and they imagine a benefit for the user that causes them to create the app. However, does the user truly benefit, or does the business instead create a failed attempt at trying to seem relevant? I’ve seen some apps for businesses that aren’t worth downloading as they provide no tangible benefit. Rather than enhancing the company’s relevance, the app creates a cheap or cheesy brand image. Sadly, organizations can also appear lacking in technical know-how and damage their brand.

We’re here to help! If your organization is looking to create an app, be sure to identify a tangible benefit to the user. Give the user a compelling reason to keep the app installed on their phone. Convince them not to uninstall the app or give a poor recommendation to their friends. Be careful not to create an app just to say you have one. Instead, determine – first and foremost –  how it adds tangible value for the user. After all, the end-user doesn’t care how the app improves your brand or your revenue. They simply installed it on their phone so it could benefit them!

Technologies for Kids

I am often asked by parents what tools they can put in their children’s hands to get them learning technology. Here are some of my favorites:

Scratch: Scratch is a programming tool from MIT. It’s intended to teach young people the basics of programming. Everything is done by dragging and dropping code blocks into place to create games. Scratch is so easy that I’ve even used it to teach 4-6th graders how to make simple games. One of my favorite features of Scratch is that you can see the code behind others’ games and even ‘remix’ the game to make your own variant. You can find Scratch online at scratch.mit.edu.

Raspberry Pi: The Raspberry Pi is an amazing tool. A small computer roughly the size of a credit card, it’s cheap and fun to play with. More advanced tech students can learn Linux, Python, or interact with their own custom electronics hardware. A Raspberry Pi can be purchased from Amazon or countless other vendors. Excellent kits exist for less than $100 that include the Pi, a case, a beginners guide, power supply, and electronic parts to tinker with. This is an excellent kit for a tech nerd or electronics enthusiast.

Micro:Bit: The Micro:Bit is an amazing sub-$20 hardware board that is easy to program and fun to tinker with. This platform is one of my favorites because it’s easy to work with – including a simple graphical interface to program the chip.  Not only that, it’s the only platform I’ve worked with that didn’t require any special software or drivers to get up and running. The Micro:Bit includes lights, buttons, various sensors, and even a bluetooth radio. This is a must-have for young makers.

Arduino: The Arduino board has been around for some time now. Widely used in robotics and maker projects, it is quickly becoming ubiquitous. While it’s not as easy to work with as the Micro:Bit, it’s a more appropriate for bigger projects. Arduino boards are programmed with C++, which is heavily used in lower-level hardware projects. Not only are there a variety of different Arduino boards available, but there are also Arduino clones that add additional features. One such example is the Make:Block which aims to make things simpler by creating various components that integrate with a Make:Block board through a typical phone cable.

Learning any of the above will enable your child (or you) to both have fun and learn technology!

Technology and Community

Over the last two decades, technological advances have brought along with them unimaginable change to the way people interact with each other around the world. The advent of the internet and smart devices has created countless opportunities for creativity and innovation to flourish. From a global perspective, companies like Google, Alibaba, and Amazon have pushed the limits of how technology can simplify tasks and serve businesses and consumers alike, enabling people to accomplish more with less and saving people time and money. We can learn a great deal from analyzing why they have succeeded where others have failed.

In the same vein, immense opportunity exists when considering the potential of technological integration and innovation within our local businesses, organizations, and community. Nothing prevents me from coming up with ideas to help others and improve the world around me. Likewise, nothing prevents small businesses from grabbing on to these same ideas to grow and make a difference. After all, why should anyone work if not to positively impact those within their reach? We ought not go through the trouble of learning without the drive to put what we learn to use, because knowledge without application holds little value. The time has come for our community to capitalize on these advances and enable each other to succeed.

As you go about your work week, think about some of the areas that you are spending considerable time and/or money, sometimes with little or no return.  These are often the areas with the most potential to increase productivity and profitability.  How might technology be able to benefit your endeavors?  Asking the right questions is the first step towards a better tomorrow for our local businesses, organizations, and community.

App Developer Woes

I started my company about 5 years ago by writing Android applications. It started out pretty simple by converting a simple website I wrote long ago into an application for ham radio calculations. That app went on to become one of the most popular ham radio applications on the Google Play store. Seeing how popular the app had become, I decided it would be smart to determine how I would monetize the application. And this is where things get difficult for app developers. As an Android user, I like to find free apps. And, like just about everyone else, I don’t particularly like ads. Ultimately, I made the choice to have a paid (ad free) version as well as an ad supported version. Let me be the first to say that I’m not getting rich from my apps. In fact, I make very little even with over 250,000 downloads across all my apps.

As an app developer, it’s very hard to find the time to make high-quality apps that you know you’ll never really see anything out of. If I spend 40 hours on an app, even if I only say my time is worth $10 / hour, it would take $400 just to break even. That can take literally years to generate in ad revenue. (I’m going to assume that – like the overwhelming majority of apps out there that mine isn’t going to all of a sudden become the most popular app in the play store.)  What’s even more challenging is when you have negative reviews attacking your free app or when users email you expecting you to provide hours of support for an app that – if you’re lucky – they may pay you $1 for.

I love writing apps, and I have a few more planned for later this year. However, I would encourage users to deliver feedback or requests with a constructive tone and appreciation, especially considering the circumstances surrounding many app developers. Remember, the majority of apps out there are developed by indie developers whose time is tied up with another job to provide income, so they are often unable to implement new features on the fly. Requests rooted in appreciation and a positive attitude make the world a better place for users and developers!

Ads on the Moon?

Moon

When I was a child, I had the same dream as every other child in my generation – the dream of being an astronaut! Indeed, since the dawn of time man has been fascinated with space. The calendar month is based on the moon’s time to circle the earth; ancient religions included the moon, sun, and planets as gods; and even modern radio enthusiasts use the moon as a natural satellite for communicating with people on the opposite side of the planet. Among the earliest of movies ever made was A Trip to the Moon (1902) by Georges MélièsThroughout the centuries, man has been captivated by the beauty of the moon, the stars, and of everything else visible in the night sky.  The night sky has been an inspiration for art, music, poetry, folklore, religion, and just about every other realm of the human experience.

Yesterday, as I was reading the current issue of MIT Technology Review, I came across an article that mentioned putting ads on the moon. Now, I must start by saying that the article didn’t provide any details, but I was disgusted to see such a thing suggested. Imagine a future where lasers are used to project the Nike swoosh onto the moon or the Amazon logo is proudly displayed. Is the moon really nothing but a billboard for corporate use?

Of course, the problem of technology and nature is nothing new. For years there have been battles between people wanting wind farms and nearby landowners who don’t want their view polluted by turbines. Roads, water turbines, railroad tracks, oil pipelines, and countless other technologies threaten the natural beauty of the world we live in. Questions of who owns the land, waterways, and underground resources such as oil and coal are a big deal in the legal realm of land management. Is the moon the next frontier for such legal battles?

Who has the right to deprive mankind of our brightest muse? Are we really willing to destroy the beauty of the moon for a few dollars? I’m a capitalist, but some things are priceless and shouldn’t be destroyed for a quick buck. For me, the moon is one such object. Looking at the night sky to see the moon displaying the Pepsi logo seems like a hellish future I hope we can avoid.

For the record, I may be able to support using the moon to display the bat signal, but don’t tell my daughter – she’s a Marvel fangirl.