You Need a Foundation Before You Can Be Awesome

There have been a lot of posts recently where people are trying to help others “be awesome” or “kick ass”. There are whole industries supporting this idea as well. Many of the personal productivity systems try to help you be awesome every day. The problem is that it does not work. Awesomeness is not something that you magically get, it takes time and effort. To be awesome, you first need to start somewhere. Typically, that start is fairly close to sucking.

In order to make this process a little more concrete, I will use the software development discipline, and Java specifically, as my example. Let’s start with you just graduating from college. At that time, especially in software development, you have very little knowledge. You know enough to get a job, but most companies realize that they will spend two years giving you on-the-job training.

Step 1: Learning To Crawl

In software development, one of the first things you learn are data structures. These are things like arrays, lists, trees and assorted other things. Many modern languages have these structures built into the language, like Java and its Collections classes. You will also learn some basic ideas on how to collect input from the user and how to generate output to a file or the screen. To make a comparison to another industry, in accounting you will learn about debits and credits and maybe learn a little bit about the different types of accounts, like liabilities.

Step 2: Learning To Walk

After the basics have settled in, you can start doing some real work. You may look at developing your first application and realize that you need to know about data storage. Files as data stores are OK at first, but eventually you want to throw data into a database. Once the data storage is complete, you see the lameness of the console-based input and start working with web pages and servlets or CGI. Going back to the accounting comparison, you might learn about the various types of reports that companies need, like Income Statements, as well as how typical expenses and sales are entered into your accounts.

Step 3: Learning To Run

Now, you have all of this code that works as your Java web application. However, you start to see duplication in your efforts and you need some more advanced functionality. So, you look at frameworks like Spring to handle some of the more basic things and you can now focus on some harder problems. You want to start pulling data from other sources, so you start implementing some web services that need to parse JSON formatted data and RSS formatted data. Because you are pulling this data from multiple sources, you also want each of these sources to run at the same time, so you start looking at Threads and other concurrency related technologies. In accounting, you may not have concurrency issues, but you do have cash flow issues. So, all of your accounting data goes into some expensive system, or even something like QuickBooks for a small business. That takes care of the basic framework, but now you need to look at budgets, revenue and expense forecasting and maybe you even need to cut some costs to improve your profit margins.

Step 4: Learning To Juggle While Running a 3-Legged Race and Carrying 80 Pounds of Camping Gear

Yeah, this is a bit of a jump and it is where the real challenges arrive. Your little application may be morphing into a small startup. You have performance issues and your database is not scaling very well. You start looking at cloud computing, Hadoop and various other distributed technologies. You also realize that you cannot do this alone, so you also search for partners that might know the complexities of distributed computing. By the way, you need to get a mobile phone application developed soon, because your competitors just released theirs. Your accountant just realized that if you want to get venture funding you need to make some changes. Do you use cost accounting or encumbrance accounting? Do you really want to depreciate your computers? Are you planning on running your business like a services organization and charge for data access? Or do you plan to go the product route and charge for the application directly?

As you can see, there is a lot to learn no matter what your industry is. Do you need to master each of these steps to really be awesome? Absolutely not. You might be awesome and only have completed the first 3 steps. I am sure that people will also complain that I missed several steps. The point is not these specific steps, but that it is a journey to learn enough to master your discipline. The key to remember is that it takes time to become awesome. There is no magic button or switch you can turn on.

5 thoughts on “You Need a Foundation Before You Can Be Awesome

  1. I think you just succinctly explained the programmer’s learning path to all the unknowing outsiders.

    Now they can understand how truly smart we are! 😉

    –Kyle

    Like

  2. Kyle

    I was never known for succinctness, and this definitely is not short. Those developers that get to step 4 really are smart.

    Like

  3. Otto

    That leap between 3 and 4 was meant to be large 🙂 I could have written another 6 steps and 1000 words to get to that last step, but it would lose its effect. Showing that obvious gap in skills also seems appropriate when talking about the difference between a foundation and awesomeness.

    Like

Comments are closed.