Being a developer or just a good Googler

Scott Hanselman posted a quick blog post about a question he got from a young developer asking “am I a developer or just a good Googler?”  I thought it would be fitting to post it here in my neglected blog.

It’s true that we find ourselves trying to Google an answer often.  In fact, my Google history is up to about 60,000 searches over a few years.  I think Scott has a couple of great points in how to better yourself as a developer.  I try to do project Euler on occasion and I also read as much as time will allow.

I would like to add one more suggestion though:  learn test driven development. I started to do this a couple of weeks ago, and it has really changed how I program.  Test driven development forces development to be more focused on specific problems and solutions to those problems by starting with a failed test. You then program until the test is successful.  Then you rinse and repeat.

It helps you become a better programmer because once you’ve learned how the tests work, there’s really nothing to Google; it’s just you and the specifics of the test.

The internet is a fantastic tool for helping developers do their job faster, but it does allow us to become more complacent. Learning how to actually develop instead of just “Googling” is the difference between good and great developers.

Clients and Sandwiches

When I was a kid, I had a weird habit when I ate a sandwich.  I used to disassemble the ingredients and eat each ingredient separately.  My reasoning?  It felt like more food, and I could enjoy the components I liked most, separately.  I’m sure I wasn’t the only child (maybe even adult) that deconstructed their sandwich on a regular basis.  Was this unconventional consumption of a sandwich incorrect?  Perhaps, but I still reached the same goal: consume the sandwich and remove the hunger I was feeling. It’s hard to argue with little Matthew Doyle.

What does a quirky behavior like eating a sandwich have to do with clients, or anything for that matter?  Clients and users use devices and websites in unintended ways.  We as technical professionals may analyze a user’s behavior and conclude “wow that’s not right” and try to correct them.  The user may be grateful for your help but also feel confused, frustrated and left with an attitude of “why did they feel the need to show me this?  The way I am using my device works for me!”

Your professional opinion is correct.  The user IS using the product in an unintended fashion.  You have a better way, but you don’t want to alienate your customer.  What to do?

First things first, make sure those unintended uses do not cause unintended consequences.
You’ve personally tested your application billions of times, and there is NO way someone will break it.  The first user comes along, does a few right clicks, a left click, several enter key strokes and he has managed to mess up your caching mechanism you tested.  Always be on the lookout when you design and implement your project for potential pitfalls the user may encounter.  Does your website work when a user opens into a new window?  A new browser instance?  When they bookmark?  Unchecked paths can lead to a frustrating user experience, invalid data flow or breached security.

Next, make a decision on how to handle the unintended usage:
1. Do nothing for the customer or client, and follow your standards.  The user has to conform.
This isn’t always a bad answer.  There are times when it’s better to ask the user to conform.  It’s the cheapest approach and the one where you have the most control.   You need to tread lightly when using this approach however, and you need to have solid reasons for your decision.   Apple’s locked down approval process for apps on their mobile devices is sometimes portrayed unreasonable and a little “big business” focused, they have voiced reasons for their decision and may be the answer to their great success.

Just remember this is generally a consumer unfriendly approach and expect some users to be disgruntled and not use your products.

2. Customer is always right.  YOU have to conform.
Suppose you design cutting-edge websites with beautiful professional graphics, AJAX, interactive flash, the works.  If you take a client in the non-profit industry, you have to understand most non-profits (not all) are a little behind the technology curve.  They may be using older browsers and computers.  Asking them to install the latest software may push their 6 year old computer to a grinding halt.  Cutting-edge will simply not… well, cut it.

It’s times like these which separates good professionals from great professionals.  You need to figure out how to give the best product and service for your client with the tools necessary.  If that means going easy on the glitter and really challenging yourself to work with what you have, then so be it.

As a side note, “The customer is always right” is an old and played out message.  We need to update it.

“The customer/client always want to be treated with respect in getting to their goal.”  I like the sound of this better.   The customer may not be right, but that’s okay, as long as they get to their goal with the minimal stress and frustration.  Work on helping your customers achieve their goals, and you should be successful.

3. Everything in between.
It’s very hard to design a fully functional website that is flawless on every browser, device and resolution.   In most cases, you need to do your homework.  What are most of YOUR USERS going to use?  Suppose 75% of your users use IE and have resolutions of 1024×768, your web site should probably work best in IE and at 1024×768.  However, it should still be very usable in other major browsers, and look presentable in other resolutions –800×600 is not dead yet.  If your user doesn’t support javascript and your site requires it, it should at least politely tell the user to use a javascript-compatible browser.  Even Gmail works without javascript and most big time websites which require it generally display a nice message.

In conclusion
You can guarantee one thing about users and clients:  They will always be different from each other, and they will always surprise you. You need to have a keen sense of your users, and make sure their needs are met. If it’s impractical or impossible to meet their needs, make sure your application at least lets them know of the alternative, and doesn’t completely break when they use it.

Now, where is that slice of cheese from my sandwich?

Keep It Simple!

It’s getting closer to move date. My fiancée and I have created a large list of things we need to do before going. Change addresses, cancel utilities, and notify people we care about of our move.

While there’s a lot of excitement, I cannot help but be a little overwhelmed. Every time I try to fix what should be a simple “hey, this is our new address” or “we need to cancel service x”, we seem to be met with another task! I just want to cancel my service! I don’t want to do homework! We tried getting a PO Box for to forward mail to two weeks ago, and we STILL do not have a resolution!

Then comes Time Warner Cable. I gave them a call, and ask them the process. “All you have to do is come in, drop your box, modem, remote and plugs off, give us a forwarding address and we will prorate your account and cancel it.”

Wow. So you are telling me is my expectation is the reality? In amidst of all the hard work I have to do, Time Warner decided to help me out with a very simple, easy to understand process, AND give me back money for the time I don’t use the service.

Simplicity is key in a world filled with complex problems and processes. By just keeping it simple, you can hold onto a customer, draw one in, or have one leave on good terms.

Programmers learning something new: a simple guide

I struggle a lot to learn new programming languages on my own.  It’s not that I’m not smart (I want to believe I am VERY smart) but it’s the combination of lack of time, lack of desire and having no answer to the question: “Great, I’ve learned X… now what?”

I’ve started to learn about Django, and I believe it will be DIFFERENT this time.  Why?  Because I have created a simple guide to learning something new from a programming perspective:

STEP 1: Accept that you may burn out and ask “why bother” and figure out the answer to it before starting

I had stated before:  It’s hard for me to learn something new when I expect to do precisely nothing with it.  This is what happened with me and Ruby on Rails.  Ruby is a cool language and Ruby on Rails was really awesome to build scaffolding with.  However, I didn’t really know what else I wanted to do with it.  I suppose I could have learned it’s cool AJAX capabilities that go with it, but really, it just didn’t appeal to me.  Therefore, it went on the infinite back-burner

Back when LINQ was new, I struggled to learn it as well, because even though I do .NET professionally, I was so knee-deep into what I was doing that it would have been almost a waste of time to really sufficiently learn it.  I finally got a project in which allowed me to utilize LINQ to SQL effectively and easily and since then I wouldn’t know what I’d do without it. Again, once purpose settled in, I was ready and very willing to learn.

Your ‘why bother’ may be different.  Your success may be dependent on how you handle it.

STEP 2: Do the tutorials

These days, it’s pretty hard to find popular frameworks which have no or incomplete tutorials (I’m sure anyone could find examples where this isn’t true, but in general, it’s true).  Also, framework creators know that a quick and simple tutorial is the best chance for a developer to get on board, especially in the framework’s early stages.  Django has a wonderful tutorial, split up into four parts building a poll system (I feel like poll systems are the hello world of the web development world).

Here are reasons why I don’t like to just “dive into the code”:

  • You cannot be guaranteed what you are looking at is the correct way to do it
  • Most of us are lazy, and there may be certain things hidden by shortcuts which obfuscate key basic techniques used by the framework/programming language
  • There is more impact in doing it yourself, seeing what works and what doesn’t, rather than just reading through it and trusting it works
  • It’s less fun!

Tutorials are the best way to get yourself acclimated, set up your environment, and ultimately help you decide “why bother?”

STEP 3: Research technology on StackOverflow

I am a HUGE fan of StackOverflow.  I’ve never met a bigger group of developers, all willing to write great questions and thorough yet quick responses.  The reputation system is awesome.  Any developer not utilizing StackOverflow is SERIOUSLY missing out.

StackOverflow is a great way to see what difficulties most users have, as well as to see how these user’s issues are resolved.  While it’s not immediately helpful, you will drill back into your head, and all of a sudden, you’ll come up to a problem where you say “wow, I remember this on StackOverflow!”

StackOverflow is a great place to see how a technology stacks (get it) up.  For example, a quick search of Django immediately show questions about scalability, whether a user should use Django or X and configuration questions. A few quick searches and research will give you a sense of what type of framework Django is.

STEP 4: Think Small

I picked Django because I had an idea for a website and needed a specific framework.  I discussed the idea with a buddy of mine, a developer who uses Django, and he sold me the benefits of using Django.  I owned hosting which could support Django but not .NET, so it looked like a good choice.  Also, I was in the ‘market’ to learn something new.

Unfortunately, I couldn’t just dive in because I needed to learn Python as well as the basics of the framework.  Therefore, I decided to table the original idea for now and decided to build a personal website for myself entirely in Django.  It took hours to do, I had to read up on a lot of how Django and Pyhton works, but the idea was simple enough to wrap my head around so I was successful.  You should see a site hopefully by the end of next week.  Because it’s my own personal website (and not a large, professional site), it’s okay if it has a few problems with it or if I did it incorrectly;  it’s all part of the learning process.

STEP 5: Have a buddy help you learn

It’s nice to be able to send code to someone, even if it is just a file or two, for them to kindly message you back and say “get out of your .NET world, here’s a better way to handle what you are trying to do.”  Having a human allows you to do a sanity check as well as to see if you’ve missed any nuances.  It’s also nice to have someone to ask for help on really simple yet bothersome problems.  It’s a lot harder to do this using the Internet.

STEP 6: Have fun!

Every blog post with steps needs a cop-out answer.  Here is mine.  Most of us are learning new languages because ultimately we want to.  You should have fun with your learning experience!

College Education: Why we Go

Penelope Trunk is the author of “The Brazen Careerist” and in my opinion has one of the most well written blogs out on the Internet.  I also find myself not agreeing with a lot of her posts.  She is what I like to call a great blogger:  One that you can really get into her writing, even disagree with, and yet still go back and read more.  She has an interesting life and perspective.

I caught one of her recent blog posts: How to manage a college education.  It is an interesting read, which discusses how obtaining a traditional liberal arts degree is elitist and overpriced.  She mentions how the Internet already has places for learning and discussion, and all that needs to be supplemented is experience.  She tells us that career centers are generally terrible, and concludes that prospective students should pick a college based on a good track record for getting student jobs.

I didn’t graduate with a Liberal Arts degree, so I cannot speak to this this mentality directly.  My gut tells me it’s missing two important advantages college offer which work experience right out of high school doesn’t: trying new things in a safe environment and it’s difficult to find a first job in a field you desire when the employer generally requires a degree, such as application development.

I graduated with a degree in Information Technology from RIT three years ago.  When I was 18, I was convinced I wanted to build circuits and design computer chips.  I was accepted into the Computer Engineering program.  After 18 months however, I decided engineering was not what I wanted to do.  I then was convinced I wanted to be in network administration where I would help set up routers, learn the OSI model, help decipher IP address and sniff packets.  I joined the IT department at RIT in hopes of doing this.  What do I do now?  I am a lead web developer, developing and maintaining a platform for Brand Integrity — far from networking, and I am STILL searching for my career path!

I’ve changed my career path 3 times in the 5 years I was at RIT.  I could have gotten all the information for my current path online.  There are millions of resources out there that teach and discuss web design and database architecture.  But being part of the student body, seeing my peers go through exactly what I was going through was invaluable.  Making mistakes in class planning would at worst make for an uncomfortable 10 weeks (at least at RIT).  Having access to teachers to reach out to was also a perk, one I don’t think a majority of the student body really appreciates as much as they should.  Guidance from those teachers really helped me figure out where I was going.

So the question to ask is, “Which is more useful– four years of education, or four years of experience?”  In my field, the former is true.  Sure, we can all come up with the raising stars– those who have not gotten formal education.  Steve Jobs and Bill Gates are always good examples… but how many of us are a Steve Jobs or a Bill Gates?  It’s a great goal to strive for, but we ALL cannot be Steve Jobs!

Penelope does bring up a great point in her post however… schools need to learn how to get their students great jobs. The relationship shouldn’t end with education.  Schools need to become more aggressive in alumni affairs, teach how to effectively network, and provide networking events.

So in conclusion, why do we go to college?  Because, at least for us in IT, it’s required by most desirable entry level job postings, and it’s a safe environment to experiment on what you THINK you want to do with your life.

Apple and the app store: Are they doing it wrong?

Rotten AppleRecently I read an essay from Paul Graham titled “Apple’s Mistake” (if you’ve never read any of Paul Graham’s essays, I strongly suggest you check his web page out, http://www.paulgraham.com) which describes why the app store is not designed with the developer in mind, and that Apple is selling the apps a lot like how they sell their music and movies.   Paul indicates that if this problem isn’t fixed, developers will flock to other devices and companies once the market for them becomes bigger.

I’ve personally never submitted an app to the App store.  I have, however been involved in an App project which was rejected by Apple.  We submitted the app somewhere in the middle of October and did not get the app on the store until November 19th.  As far as I have been told, Apple rejected the app because it was sending too much data through the network, and wouldn’t disclose how much an app was allowed.

I am interested in mobile development because it’s becoming a major player in the communication and technology world.  If it were to take me a month to get an app released, it would make me think twice about developing it.

Apple claims that they have a review process for security purposes.  If done well, it benefits us, the developers, because if our apps are given the ‘seal of approval’ we will not have to sell security to our clients.

Here are four changes Apple needs to do in order to fix their process:

1. Provide a way to test the app against the approval process to the developers. Generating automated test cases and unit tests for applications should be done for ANY application you plan on releasing, but Apple should provide an ability to test your application based on their approval guidelines.  This way, a developer can be more confident in their submission

2. Rules and guidelines need to be more visible to the developer world. Giving developer’s access to all of the guidelines Apple uses to determine whether or not an app is accepted may result in them designing their apps just to avoid the apple hammer.  This aside, visibility enables developers to design with 100% compliance to what Apple’s needs are.

3. Developers should have more information about why their app was rejected and be able to challenge the decision. There needs to be a better process with facilitating rejections.  In the case of the app I was involved with, simply stating that we are sending too much data and not disclosing how much you are allowed to send is a terrible experience.  This means that our developers had to go back, find what was taking up most of the bandwidth, design it so it wouldn’t use as much, and hope it is enough.  This… is simply ridiculous.  Imagine it took an hour each time you compiled, found a bug and fixed it?  You’d quit your job in less than a week!

I also believe a developer should be allowed to contest a decision to reject an app. Suppose in our case, we had good reasons for sending so much data?  What if it truly enhanced the usability of the iPhone?  What if the data was being sent for a good cause?  It should at least be up for discussion.

4. Allow a private store area where you can release apps to a subset of users (perhaps by company) and loosen (or get rid of altogether) the approval process. It’s going to become more and more important for companies to come up with custom applications that only they will use in their own business.  Suppose a company had a large team of technicians and wanted to provide a logging program for their iPhone.  How would they be able to do that easily?  I know you can provision separate phones for an application, but that seems clumsy.

I love Apple, and I am hugely impressed with the amount of professional looking apps are being released in the store these days.  However, other phones are going to become real competitors.  If Apple doesn’t want to lose their user-base, they need to keep the app store thriving.  In order to keep the app store thriving, they need to make their developers happy.

Xbox 360 modding- should you be banned from Live?

xboxcontrollerAs you may know, Microsoft banned between six hundred thousand and one million Xbox 360s. Microsoft claims “All consumers should know that piracy is illegal and modifying their Xbox 360 console violates the Xbox Live terms of use, will void their warranty and result in a ban from Xbox Live.” (from AFP).  Users with modded banned Xboxes are claiming they should be allowed to mod their Xboxes because not everyone is using them to play pirated games.  Other users feel that the bans came conveniently after the two major releases:  Modern Warfare 2 and Halo 3: ODST, which were after boosts in the number of subscriptions. There is even a website dedicated to a class action investigation.

Before I give an opinion, I’d like to look at what can be done with a modded Xbox.  The mod will give control over the DVD player, which allows you to reduce the speed of the drive and bypass checks that makes sure a game is legit.  As far as I can tell, you can play pirated games, back ups, and slow the drive down so the device is quieter.   I’ve also seen reports that it allows you to replace the hard drives with normal hard drives, but they are still limited to the 20 GB and 120 GB constraints.  An original modded Xbox made an older generation machine into a media center powerhouse.  This mod for the 360 looks to be for one thing:  piracy.

So… Should mod users be banned?  Yes, for three reasons:

It promotes piracy. Piracy is illegal, and for someone in my line of work, it’s also unethical and is completely against my principles.  I am a developer, and the thought of someone copying and distributing my work for free without my permission turns my stomach.  I guess it can be argued some pirated software is less crippled than the legit software (I hate it when the software constantly “phones-home” to make sure I’m legit) but it is simply not the case in this situation.

Allowing modded software can lead to exploits for multiplayer games. I see nothing wrong– especially on a console — to disallow the user from installing non-approved applications on the console.  It makes security much easier to maintain, and it gives all users a consistent experience when playing online.Apple closely monitors the app store.  They require approval before accepting any app into the store so they can make sure there aren’t any virus-type apps being uploaded.  In fact, the most recent exploit of the iPhone had to do with those iPhones which are jail-broken.

Xbox 360 is not open source. Microsoft never invited you to hack and mod their system.  In fact, doing so voids the warranty.  They have decided to do this, and as a purchaser of their product, you’ve made the decision to comply.

I’m sure there are a lot of opinions about this.  Let me know what you think!