Learning To Program Sucks

I bumped into an article that reads like an article that I would have written back in the late nineties when I was learning to program. Heck, to this day I’m still learning how to program. In software, the day you stop learning is the day you become obsolete.
It was late 1998 and I was in the same boat as the author. The feeling was one of inferiority when compared to the accolades of accomplishments that the tech folks who were my age were already sporting. Programming homework assignments took me 6-12 hours, it took them 20 minutes. I think I even failed my first programming course if I remember correctly. Well, maybe not failed, but I got a “W” for withdrawing so it did now show up on my academic report as a fail.
Here’s something most people in the industry don’t know about me … I did not touch a computer until I was nearly 21. The internet was already in full swing. To put some perspective on it – A year later Mark Cuban sold Broadcast.com for $5.7 Billion. It was the tech bubble. I had not even learned how to type yet. I was a keyboard pecking chicken hawk who was way out of his league. I saw others (though did not know them personally) that seemed “gifted” in the area of computers and I wanted to try like them. I tried to emulate them. Hah. I failed, hard. Unfortunately (and fortunately for them) they started much earlier than I. I could not keep up. You see, I was raised in a small town in northern California (Shingletown, CA to be exact). The population was only around 1000 people. In Shingletown our days consisted of  playing outdoors, building forts, climbing waterfalls, camping etc. I eventually got into racing motocross and that got me out of the hills and into different cities to experience more of the state of California. I got to see people, I got to taste what life was like outside of the hills. I liked it. The funny thing is that I actually encountered computers because of Motorcycles. I moved to Phoenix in 97’ to go to to MMI (Motorcycle Mechanics Institute) after hanging up my boots in pursuit of a motocross career (I just didn’t have it). I stumbled upon the internet one day while waiting for a girlfriend to get ready to go out. She said “Here, sit down, search for something while I get ready.” She showed me how to use Alta Vista and a few minutes later I got hooked. The first search I ever did on the internet? A search for AFI, the band, in 1998  – I was REALLY into music and motorcycles back then. Two weeks later I bought my first computer. To be 100% honest, I didn’t have much money. Heck, I didn’t have the money at all. I was providing for myself at that age with no parental support. Buying a computer was a humongous expenditure. Therefore, it put me in the poor house for awhile. So, I didn’t buy real food, I bought Ramen (not joking here, not at all). I ate it for 3 weeks straight and got sick as a dog (lesson learned), but I did have a computer. It was one of the best investments I ever did now that I look back on it.
I finally had a computer and I was stoked. I had a problem though … a very big problem … no one I knew had a computer. I was alone in this venture. Remember, I was going to a Motorcycle Mechanic school. I had to figure it out all by myself. I can’t tell you how many times I re-formated my computer. I reformatted because I got my computer into a state in which I had no idea how to recover from. Safe mode scared the crap out of me. A year or so after getting a computer I installed an early version of Java over 8 times which resulted in numerous evenings spent reformatting my computer. The only thing I knew how to do was put in the re-format disc that came with my computer and reset it. Even learning to do that took many hours if not a day or two, it’s hard to remember. That took me back to step one. After that, I’d try again. Later I’d learn that what I was doing was called “Debugging”. It wasn’t the code’s problem – it was me. I was debugging myself and how I understood computers. That took hours, days, months of time. Each time I reformatted and tried something new, I got farther, but by god was I frustrated. There were many times I’d get pissed as hell and walk away for a day and say “Forget it, I’m not smart enough for this”. Fortunately I’ve always been one to never give up. I came back. I always came back.
I eventually stopped doing that Java stuff in school (I hated it … funny now that I’m an accomplished Android *cough*Java*cough* author and consultant).
I originally started doing web dev because I thought the internet was amazing. So much info, so much at my fingertips that I never had access to. I had no idea how to do build a web page though. So I went and bought the first version of this book in 1998 at Barnes in Nobel at the Metrocenter Mall location in Phoenix. This was my first computer/tech book that I had ever bought. I spent hours in the computer section at various stores from that point forward. Learning more and more on my days and nights off. I may have learned a lot,  but I ran into a lot of problems. Crashes. Borking my machine. MANY Reformatting sessions. Etc. I’d screw up,  and then have to reformat my computer. I’d then start over again and with each new accomplishment came a hit of dopamine. The excitement was unreal. I was figuring it out! Each new script I wrote (alert(“In here”); Seriously, who remembers that! I still bump int that all over the web. Ha!) Anyway, I felt like I was part of the machine. I knew I was getting a step further. I felt like I was walking on the edge of the universe at times. Barely being able to cling onto the safety net of a working computer only to end in another reformat was frustrating as hell. It as like a demented video game where re-spawning took 2-3 hours. It sucked. I hated it at times, but I kept coming back because I loved it and I knew I didn’t want to do what I was doing the rest of my life – working on motorcycles or being a rep at a call center. I knew that this computer stuff was something special. But still, all these problems made it difficult to learn and progress and I realized one thing early on during this process …
Learning to program sucks. 
Your machine has to be set up perfectly, your environment has to be set up correctly and you have to be using the right tools. Otherwise … it won’t work. I spent days trying to figure out a system configuration issue just so I could get back to programming (we still all run into that on occasion). So yeah… learning to program sucks.
It does.
The thing is … I wish I had a solution to that problem, but I don’t have one. However, upon further review and after a few edits to this article I’m beginning to think that the answer hidden in plain sight. It is the advice I always give everyone. The best advice I can give is is the same advice I give to my kids when they’re working on a difficult math problem or doing programming exercises with me – “Don’t give up. Keep going. Don’t EVER give up. It will get easier.
Furthermore I’d have to say that in order to truly learn how to program and get things done you need to stop reading books and start building something. Keep the books, you may need them. But what you need to do is build something, build anything! Then add to it and get people to use it, even if its only for your friends. Yes, what you build  will break and then you’ll learn more fixing it. You will learn a ton. Then do it again. Make something new and publish it/ship it again. You’ll learn so much in the process its ridiculous. Eventually your confidence will grow (albeit sometimes a bit too much) and when you get good enough you can apply for a junior developer role.
When I finally got a DevOps position (back then it was just called “Tech Support” for the servers) at Target Financial Services (Target’s credit card) in 2000 I was beyond grateful. I didn’t care if it was networking or programming or whatever. It was in tech! I was stoked. It was my first tech job I had. I went to work and I loved it. I felt alive. I was not in a mundane job anymore. I still feel this way. I’m very grateful for what I’m able to do. Prior to that I did tech stuff, but it was for small businesses and friends and such – aka: learning. I was making websites and helping friends (and a couple small businesses) set up networks. Getting a job at Target Financial was a huge win and a great confidence booster. However, I did bring down the server on my very first day and cost the company 30K in under 2 hours, oops. That’s a story for another time. I’m just glad I didn’t get fired. Thanks Jason! :)
Just know this … whatever you’re doing, trust in yourself. Trust in what you can do. Even if you suck at it now. If a nobody (such as myself) can come from small town america and write a best selling programming book and become relatively well known in the industry all while knowing nothing when I started … well … guess what – you can too.
Keep going and don’t give up because the one sure fire way to fail is to give up. Remind yourself daily if you have to: Don’t EVER give up. Keep going. Persevere. Try again. Keep going. It WILL get easier.

Announcing Fragmented – A Podcast for Android Developers

Fragmented Podcast Cover

I’d like to formally announce the launch of a new podcast – Fragmented. The Fragmented Podcast is hosted by myself and Kaushik Gopal. Kaushik reached out to me earlier this year to discuss the possibility of starting a podcast around Android Development. We discussed it and we found that we had a lot of the same ideals in regards to Android Development. We clicked and we also found that our goals around the podcast and what we wanted to share with the public were very much in line. Therefore, we decided to go for it.

In Fragmented we’ll talk about Android Development, best practices, patterns, practices and we’ll have occasional Android developer on the show.

Please subscribe and let us know what you think.

 

Is Google I/O Worth It?

This is the question I asked myself last year before I went to Google I/O 2014. I’m an independent consultant who has to foot the bill for all of these types of trips. So not only does the ticket price get you in the wallet but so does the flight, hotel, meals and time off of client work. After weighing the options, I spoke to previous attendees and figured out what they got out of the conf and I figured it was a no-brainer. Totally worth it based upon their personal feedback.

I still decided to calculate the costs. When all said and done, this conference can easily cost any consulting firm around $7,500 per person.

You might be shocked, but let’s break it down.

  • Google I/O Ticket: $900
  • Flight: ~$300
  • Hotel in SF near Conf: ~$1200 (if you’re lucky)
  • Meals/Etc: $300
  • Lost Billing Time: $4800

Billing time is calculated at a very common rate of $150/hr for most consulting shops that perform quality work. Again this is a rough estimate.

With these numbers, you can ask yourself “Is going to Google I/O worth $7,500? It’s ultimately up to you to decide, but here’s what I determined …

I Came, I Saw, I Left Depressed

I know that may sound harsh, but it was exactly how I felt when I left Google I/O 2014. You may be wondering “its nearly 8 months since the conference happened, why is he bringing this up?”. Simply put – I was not sure what the network effect would be of Google I/O. The network effect does not happen overnight, it takes some time and that’s what I wanted to give it – more time.

I’ve probably written this post a few times now, each time I’ve deleted it. Yup, typed it into the editor, reviewed it, edited it, then deleted it. Today, it feels right, so I’m writing it and posting it.

On my way to Google I/O I was pumped. The only other conference I’ve been to of this magnitude was TechEd in Orlando in 2008 (I think /build is the new big one in place of TechEd, I think). When I went to TechEd I was blown away. Seeing that Google was the new hotness in the industry, I figured this con would blow TechEd out of the water. Unfortunately, that was not the case. I showed up with some teammates from MyFitnessPal  and we walked to the Moscone center where the conference was. I was dumbfounded. There was a line wrapped one and half times around the building. This was the line to get into the Keynote. INTO THE KEYNOTE. It was 4-6 people wide and looked like a gigantic snake of people around the building. We got in line and waited. If it’s this popular, it’s got to be good, right?

After about 35-40 minutes of truffle shuffling around the building we got in. There were barely any seats left and the line still went around the building. Crazy. Seat nabbed, time for action to begin.

The keynote was nothing spectacular. A new OS which looked cool, Android Auto, Android TV, and Android Wear all came out of their shell in a big way, but I’ve been skeptical of all of these technologies for a bit. Not because I don’t believe in them, but because I don’t think they’ll work right now. I feel that these technologies that we have (wear, auto, tv) are all stepping stones to something bigger and better. We have to go through this phase of technology to get to the better stuff. People hate vendor lock-in and that’s exactly what Wear, Auto and TV are: Android Vendor lock-in. Don’t get me wrong, I love Android – I can’t stand using iPhones. What the developer side of me saw was cool new tech, but the realistic business side of me saw vendor lock-in and a fight for a portion of the market. I saw three new products that needed to have some major push behind them to work and I didn’t feel any of them were going to get the public relations and developer relations attention they need to succeed. In my eyes, I was looking at something that was not a huge starter for me. The one exception to that was Android TV with the ADT-1. Mixed with Chromecast I think there are a lot of opportunities to take existing tech to the next level (in some areas).

The keynote being a bust wasn’t really a concern of mine. To me, keynotes are usually huge marketing webinars, but with $1000 ticket price to watch in person. Honestly, think about that next time you’re in a big keynote (Apple, Google, Microsoft, etc) … Does this feel like a webinar? Probably. You’ll be surprised. Next up was the sessions.

I went to numerous sessions throughout the days. Covering Wear, Material Design, Async Design Patterns and so forth. All from Google employees. If I had to rate them, most of them would be 4-5 stars out of 10. Not because the presenter stunk (though there were a few of those) but because the content was so shallow that I felt like I was being shown the magic and nothing behind the curtain. I felt like some of them were mini-keynotes for niche areas of Googles product teams.

All Is Not Lost

While the sessions were a big let down I did find some amazing other areas of the conference. Usually these were on the floor. I wouldn’t call these sessions but more watch and learn labs where the presenter is talking to 10-30 people around an open podium. I got to witness how to use Dart and some advanced features of Android. How to write Go and so forth.

Another area that myself and a couple employees from MyFitnessPal took advantage of were the hands-on labs. You could pull up a chair and try out some code. I was able to learn polymer quite quickly and then if I remember correctly I did a bunch of AngularJS because it was something I had already been playing with and wanted to dive into more. The Android topics were all very shallow and didn’t go too crazy. It was all stuff that I had done before. I think those courses would have been great for a beginner though.

The most interesting area of the conference to me was the open discussion/presentations that were around entrepreneurship. Two of the best talks I heard were very short, but packed with insightful tips for those interested in building apps/companies. These two talks were my sanity savers at Google I/O. Those two talks were by Aaron Harris of YCombinator and Adora Cheung of Homejoy. These talks should have been much longer and more open. Both were packed.

Google Goodies

As with every Google I/O goodies were to be had. I was able to make it out with the following:

I was also lucky enough to speak to one of the Google TV folks and asked him if I might be able to get my hands on an ADT-1. He said they were all gone but he’d take my info just in case, but he re-assurred me that I would most likely never get one. 3-4 months later a magic box shows up at my door – it’s an ADT-1. I don’t remember your name good sir, but thank you very much. I’ve been playing/testing/etc for a bit. :) From my research online it looks like ADT-1’s are being sold for around $350 through various channels (EBay, Craigslist, etc).

Extraciricular Events

Though the Google I/O sessions were lack luster one great thing was the Google I/O party. They had great food, great drinks (lots of micro brews) and great entertainment. It was good to be with friends, meet new ones and have a good time.

The other events that made this trip better were the other parties going on in the area. Twitter’s being the first one. This was a great place to go. Lots of great people and such a cool vibe. Bit thanks to Hemal for getting us in there. We also went to the first Big Android BBQ in SF. Met some cool folks there and I’m still rocking the Phandroid pint glass that I got there to this day. There were many parties, too many to get to. That’s where it seemed like the real networking came into play.

Was It Worth $7500?

No. Not really. You can take all my goodies away and I’d still stay the same thing and I would not be upset. I feel that this conference at one time may have been a great event. Unfortunately in 2014 Google I/O turned into a marketing conference and the content was rather shallow. I hope that changes, because I love Google’s products and I like the Android platform alot. However due to what I experienced in 2014 I have no interest in attending in 2015.  I look at it objectively – do I feel that am I going to get $7,500 in value out of it? Combine the learning, the networking, the goodies and the mental vacation from being away from the office and I have a quotient for me that says: Nope, doesnt work. Again, this may not be the case for you, but this is the case for me.

 

3 Things You Can Do To Improve Your Quality of Life On Social Media

Over the last few years, I’ve improved my quality of life by following a  few heuristics when it comes to social media and they are …

1. Kill The Negative

If what you’re about to post is negative, don’t post it. It’s that simple. I was very guilty of this for a long time. Before you hit the post/send/etc button on your social media page, ask yourself “is this post/tweet/etc negative” If there is any inkling that leans towards “yes”, don’t post it.

Posting negative content spurs the negative bull inside of you. The more you get it going, the more you think negative. Kill it immediately and you’ll notice your mood improving. Remember, negative breeds negative.

A weird side effect will occur within a week or two of following this protocol. You’ll notice how many friends/followers/etc post negative content and then you’ll notice how much that brings you down. That leads me to #2 …

 

2. Remove The People That Drag You Down

Have you ever read a tweet/FB post/etc and immediately you get super annoyed and irritated? I’m sure you have and I assume that we all have. It happens every single day.

From now on if I find someone who posts nothing but negative content, or acts like a troll, or simply annoys me for one reason or another I unfriend/unfollow/etc them. I don’t want to see their content as it brings me down. Life is too short to be brought down by others. I’d rather live a life where I can have a good, yet realistic outlook on life that isn’t filled with useless negativity.

Plain and simple – if they annoy you or irritate you remove them from your friends/follow list/etc. This applies to your family and close friends too. I have many close friends who I’m “friends” with on Facebook yet I unfollow all of their content in Facebook.

Tip: When you ‘unfollow’ someone on Facebook they don’t know. They still remain your friend, but you don’t get their content in your news feed. More info.

 

3. Don’t Feed The Trolls

While I can make sure I don’t post negative comments or have negative people in my feeds/followers list I can’t control the internet trolls. The trolls are the ones who just stir up problems for no real reason other than to get under someone’s skin. You’ll run into those folks in news site comments, social news sites, in blog comments and in articles you see posted other social networks.

Long story short – ignore them, dont reply to them. You’ll be happier if you just let it go.

The Challenge

I know it’s not realistic to remove all negativity from one’s life. It’s part of a cycle. For example, how can we be happy if we don’t know what sadness feels like (and vice versa). Through the last couple of years of experimentation with this practice, I have found that being able to control what I consume and what I react to helps me maintain a much happier outlook on life, in general. These simple three heuristics have improved my quality of life more than I could have imagined, I hope they do the same for you. 

I challenge you to try this for one month, I’d be surprised if you didn’t feel the same way.

It Ships. It’s Profitable. It’s Important.

Like it or not, we all have favorites and this rings true even in technology. Some people love JavaScript, Node and AngularJS and some people love Ruby on Rails and some people love to use Java with Spring and some people love .NET with ASP.NET MVC … etc … etc … etc … you get the point. Furthermore, some people love the hot new distributed architecture pattern, some people love the MVC pattern and some people love the spaghetti code pattern (if we can even call it that) again, … you get the point. People use what they like and/or know how to use and they get to decide what they like, and that’s OK. We can use anything to get the job done, and if it solves the problem then we can usually move onto the next issue at hand, regardless of the technology, practice or pattern.

Unfortunately, I’ve noticed a lot of people spewing nonsense about certain technology stacks/platforms/frameworks/etc. Using a given technology or stack or language or framework/etc is up to you, but hating on any given technology (and its adopters) gets you nowhere.

Furthermore, if the ridiculed technology is in production and is making money then it’s far better than whatever is sitting in your private project repo that has not even shipped yet. That’s a fact. Even if you wrote something and it is profitable and it’s in a different language, who cares? It works, it shipped and now you’re onto the next thing. No need to ridicule anyone about how your technology is better. I tell you what – higher level CEO’s rarely care that their system is written in Rails or Python or .NET. You know what they care about? Being profitable. Keeping people employed, motivated and happy. Growing the business. That’s what they are about. Technology is a tool.

Time for a story …

About 7 years ago I was working at a small insurance company in Minnesota. The client had a large application that helped managed specialty insurance policies/claims/etc for a large non-tech industry. Long story short – the app was a disaster and was written in a language I did not care for, but I did know how to work with. In my opinion, the application was poorly architected but it worked. The first glimmer of “WTFness” I encountered was when I had to add a single item to a drop down list. This took two full days. This is unacceptable in any technology. After about a month on the project, I was ready to give up due to frustration. I could not take it anymore I provided some unsolicited advice to one of the architects on the project. I said that the system needs to be put on life support and needs to be re-written because they’re throwing money out the window on small improvements and the project will literally drag on FOREVER. A rewrite of the system or its subcomponents might be a better option. What I didn’t see coming is what hit me the hardest. When he replied, he changed my career, and in turn he also changed my life because it altered the way I approached technology problems from that day forward.

He said something very similar to this …

“Donn, this app generates over 6 million dollars a month for the company. Without this app and us improving it, none of us in these buildings would have a job. The reason we are updating this app is because it is what keeps us employed and it is what keeps the company moving forward. We don’t have time to re-write it. Without this app, we have nothing. With it, we have 6M a month. Sure it was sub-optimally designed at first, but that’s all we could do at the time given our limited resources. Now, we have money to spend on fixing it and improving it incrementally. We have money to hire smart consultants and that is the reason we can afford to have you here. We have to fix it, we have to improve it, because now, we have the money to do so. It is what it is. It may not be fun, but it has to be done.”

That conversation was very humbling and to this day it’s something that resonates with me with every technology conversation that crosses my path.

It did not matter that the app was written in a  language I did not like, used patterns that were bad in practice and was difficult to update. It was profitable.

The app was written in the best way possible at the time with the best tools available to those who were knowledgeable at the time. Sure, they may have made some mistakes and did things wrong or skimped in certain areas, but at that time it didn’t matter. They were trying to make a profitable product. Now they have one and it’s making enough money to bring in the proper talent to fix these pain points.

I’ve seen this same scenario replay itself over a dozen times in the last many years (and this happens a lot at startups in the Silicon Valley), but now when I recognize it I don’t carry any sort of spite for a given technology/language/pattern/practice/etc. I realize that this product was written with a particular goal in mind with a particular budget and time frame and most likely they had limited or no budget, a very short time frame and a very small staff when the app started. I’ve also seen this same story replay itself at the enterprise scale. Just because there are 5000 people at a company doesn’t mean that areas of the company do not work in silos. When it happens we have to look at it objectively and say: “It is what it is, but now how do we improve it.”

The thing is … Times change, languages change, frameworks change, best practices change and overall – technology as a whole … changes. This is a good thing, but as professionals we have to recognize when the right time to evaluate and implement a new technology is. We should not come in and bad mouth a particular technology because we don’t like it or approve of it.

We’ve all run into it as well … for example – Perhaps a client’s system is simply too slow with PHP and MySQL and we need more scale to grow the business. Perhaps the app is written in a way we cannot horizontally scale (this happens a lot). Maybe the app is slow because there are no indexes on the MySQL database. Already implemented those indexes and the app is still slow? Already fixed all the areas you can? Then at that time it might be time to evaluate NodeJS or Go or something else. So be it. There is nothing wrong with that. Just don’t throw the baby out with the bathwater simply because the bath water is murky. Realize what you and your client have and evolve. Use the right tool for the right job.

Regardless what it is, regardless how it’s written, regardless how it’s architected, regardless how it’s built, regardless how it’s deployed …

We’re professionals and we have to objectively look at each project with a fresh perspective in order to help move the client forward in the right direction regardless of the technology at hand.

It’s hard to determine when something is worth fixing, improving and redesigning vs starting afresh. It’s hard because sometimes in language X or technology Y solving this same problem would be 10x easier. This is when most of us get easily frustrated. This is the time when we need to sit back and evaluate the situation. When I get in the weeds and start over-analyzing a project I have to remind myself of this simple principle:

If its ships and it’s profitable – then it’s important.

While this may not solve your problem, it will help reset your expectations on said technology and align your current goals to that of the business you’re helping.