Monthly Archives: May 2010

New Book Idea – Market Research Something…

I am looking into a new book about market research. I have been doing so much over the past few years I thought it might be a good idea for an organized brain dump on the subject.

Basically as entrepreneurs we are always coming up with ideas for new businesses. There is always though a big leap from that initial idea to a successful business. Some of the ideas include:

  • Using Amazon PageRank to narrow your business idea.
  • Using Google Keyword tools to refine and ultimately pick your niche
  • Using Google Adwords to test your product and demographics

If you are interested in such a book, please leave a comment below, I’d love to hear more about your thoughts on the subject.

Three Programmer Archetypes – What’s yours?

I was at the Columbus Ruby Brigade Meeting last night and having forgot my laptop, I started to take traditional notes on the first lightning talk. It occurred to me at some point during the talk that there’s really 3 kinds of programmers and the kind of programmer really has to do with what they love and where they play. Usually I’ve seen programmers major in one and minor in the other, or sometimes there’s no minor, just a major. First, here’s the 3 types:

  1. Language Fundamentalist – These are the types that love the ins and outs of a language, compiler optimization, how memory is managed, they can explain why a certain language is great or sucks.
  2. Language Craftsman – These are the types that love a certain language, they can tell you the ins and outs of that language’s core API but they are resistant to changing an language once they’ve become adept and skilled at it.
  3. Language Minimalist – These are the types that do as little with a language as possible, they might work with a defined content management system like Joomla or WordPress or if they built a system it might consist of an open source system with 5-10 frameworks or other scripts used to get the job done.

Now based on what type you are you usually dabble/play in some of the following areas:

The Language Fundamentalist

  • Different Languages
  • Abstraction Patterns
  • Algorithms
  • Compilers

The Language Craftsman

  • Language X APIs
  • Frameworks of Language X (they can tell you just about everyone pros/cons of each)
  • Next versions of language X
  • How language X is better than all the rest.

The Language Minimalist

  • Ins-Outs of how to customize a few different systems
  • Learning newer better or next versions of similar or same systems
  • How to integrate these systems with other ones

Whether or not these three are all inclusive or accurate, I’m not sure since I am neither a psychologist or a sociologist, but I am a programmer and have seen these kinds of programmers.

Personally I’ve majored in Craftsmanship with a minor in Fundamentalism, I don’t usually care about compilers unless they are preventing me from doing something, I also don’t care for most frameworks as they are someone elses often poor attempt at abstraction or simplification.

Starting a business is not about home runs!

I was talking to my wife the other day and I realized without thinking about it, that starting a business is a lot like learning how to hit a baseball.

I remember back when my father was teaching me how to hit, I wanted to really really impress him and every time I tried to hit a home run. I did not hit the ball, it was strike, strike, strike and I was on the verge of quitting when he sat down and said “Scott, you’re trying too hard, do this for me, just try to touch the ball with your bat, but don’t swing.”

Sure enough as long as I was just trying to touch the ball, and not trying to hit a home run, I could do it every time. Then next thing he had me do was just take a swing at the ball, and of course, I was encouraged and I tried once again to hit a home run, and of course, swing and a miss. He said to me, “you’re still trying too hard , don’t try to knock it out of the park, just slow down your swing.” So this time he told me he wanted me to just use one hand to hold the bat and hit the ball. Success.

The next thing he said to me changed my game forever, he said, I want you to go about 80% in your hits. So before you were giving it 100% and with one hand it was about 40%, so I want you to go about 80% on everything and never go above it. Success.

Later that year I was selected to go to the all-star game for 2nd base, I was a lock to get on base, though I didn’t hit many home runs, I could always get on base.

Starting A Business is not about hitting home runs, which is what I’ve been trying to do, it’s about taking it down a notch, getting some success, taking it up a notch or two getting more success, and so on.

— Update —

I still like the quote: “Think big because it takes the same energy as thinking small.” But to become the home-run king, you first need to connect with a bat.

Chrome vs. Firefox

I decided top stop using Firefox for my Gmail and other Google Apps yesterday. I’ve instead started using Chrome for those apps. I’ve already noticed a huge difference in memory utilization by Firefox, it’s ran the entire day and is still under 200MB. Chrome’s instance of Gmail is only about 100MB. Usually by this time, I would have had to restart Firefox because it’s memory is over 1.2GB.

Who’s fault, Google or Firefox?

I think this is Google’s way of increasing market share on it’s browser, Chrome. I think that they’ve taken advantage by coding a leak that Chrome ignores, or has a way to circumvent. Personally I don’t care which browser I use, but it makes you wonder that if Facebook creates it’s own browser…

Don't use MVC

MVC (Model View Controller) design patterns all the rage, in fact, the MVC pattern is pretty much standard with every web framework.

The idea is to keep code separate, the assumption is that with this separation comes ease of maintenance, and allows for developers of different skill sets to work in different areas. Here’s a short description of each:

  • The Model – This represents the data that the application operates.
  • The View – This represents the web pages that render the model in a form that makes it easy for users.
  • The Controller – This takes input from the view, calls associated model classes, and manipulates that data and input with business logic to direct the user to another view.

The reason this was created was because of Model-1 Web Design. Here you had business logic, model logic, and display all on the same dynamic web page usually a JSP (Java Server Page) or ASP (Active Server Page). This was ugly and certain parts of maintainability were hard, but was efficient in certain aspects.

The problem comes in with MVC is an over engineering and overly abstracted mechanism for just pushing data into and out of a database, which is essentially what a web application usually is. So how can you avoid the problems of model 1, with the over engineering of model 2? You use a Model 1.5 architecture.

Model 1.5 – An Introduction

What is Model 1.5? Well first it will help to describe Model 1 and Model 2.

Model 1 – This is a web application design pattern for web scripting languages like JSP, ASP, or PHP, that take all the elements of a web application, business logic, data abstraction and connetions, and presentation/layout then puts them into a single page, or script.

Model 2 – This is a web application design pattern that separates the elements into an MVC design pattern, MVC standing for Model View and Controller.

Introducing the Model 1.5 Design Pattern.

This pattern takes the efficiency of model 1, and component of model 2 and combines them into something that is both efficient and maintainable.

What does it look like?

First, the application consist of web pages (scripts) that talk to other web pages and use a set of objects to communicate with the database or encapsulate the business logic.

Second, the application employs functional programming techniques, to share business logic across different web pages or areas of your application.

Third, the database layer is generated and employs a inheritance model that allows for overrides of certain CRUD operations, while at the same time providing application specific functionality and very easy level of maintainability.

The Single Task Programmer

The demands of a programmer today are high. Multiple projects, multiple things to do like meetings, unit testing, code review, coding, learning, etc. While you think you might be very productive by being busy with many things, in fact it’s just the opposite.

I have seen that while you might be doing many things, your very in-efficient at each of those things. What if you could just give one thing your whole attention, your whole focus? When you combine this (working on one thing at at time) with Limiting Distractions, your going to me more productive and less stressed.

So while your computer might be good at multi-tasking, the brain isn’t, so slow down, do things well, one at a time, and you will find that your quality improves, and you’ll get more done.

Created New Blog – Progtivity.Com

I just created a new blog, ProgTivity.com. The blog is mix of economic theory, zen, and programming. It’s about the art of programming productively.

Most people today don’t realize the art of being productive, everything is so rushed and fast, it actually takes time to be meaningful and productive.

I hope you enjoy the blog! Now go visit!

Eliminating Time Wasters

The key to becoming more efficient when you are at your computer is to eliminate low value activities and replacing them with high value activities. To do this I recommend you take the following three steps:

Step 1) Identify

One thing I did a few months back is install ManicTime. This software allows you to monitor what programs you are using and for how long. It even tracks what sites you visit and how long you are on certain URLs.

Step 2) Collect Data

After a few weeks, I started to notice a few patterns, of how much time I spent on sites or in programs that added no value. Leisure surfing is OK, but I would much rather be building a robot or playing with my daughter, than surfing FaceBook.

Step 3) Eliminate

Stop going to sites or using software that does not add value.

Limiting Distractions

How many times do you crave just an hour of being in the zone? By the zone, that moment of time where you and the code are one, you know what you want to do and it seems like your thoughts just flow and your productivity is at an all time high. How many times when you are in this state do you get one of the following:

  • An email with a red exclamation point
  • A Twitter or FaceBook notification
  • A phone call or a text
  • Someone walking over to your desk/cube

These are just some of the distractions you will face and they will keep you from your most productive period of the day. Often times, it takes about 20-30 minutes to get back in the zone from a 5 minute interuption. You have a few of these during your 2-3 hour burst of work, you will get very little done. Here’s a few tips to help you stay in your coding zone:

  1. Turn Off Your Email, TweetDeck, FaceBook, Instant Messenger and Cell Phone
  2. If you can’t get away from your cube or close your office door, try putting a sign outside your cube, that say’s something like: “Very Busy, Email Me or Talk To Boss”
  3. Put in your ear-buds and listen to music or your iPod, sometimes just having them there when your listening or not gives people time to read your sign.
  4. Work from home, or book a conference room for just yourself.
  5. Pick what you want to focus on before you start and what your stopping point is, i.e. get this component unit-tested.

I hope you find these tips useful, while the sign idea could create some controversy, it will send a message to those that interrupt you the most and teach them to be more aware of how distracting they are to you and your productivity.