Software as Art and Representations – from stepya.com

Original post at stepya.com.

Learning to program gave me a new understanding and appreciation for the world. When trying to capture, describe, and emulate aspects of the world (whether it’s simulating a piece of cloth blowing in the wind or simulating interactions between particles), you gain an appreciation for what you are trying to model. Programming becomes its own type of an art form.  We have our model, the world, which we are trying to represent. We try to understand and leverage user’s mental models so, make metaphors for our applications to provide users with a sense of familiarity, or try to simulate people and their understanding (through machine learning, neural networks, artificial intelligence, etc) to predict outcomes or promote learning. We try to implement the physical world and its constraints in games .

While trying to represent our world through the tools we have available is a form of appreciation and awe, we understand our boundaries and limits.Just as Van Gough did in Starry Night, we are limited by our medium. Van Gough’s quick and thick brush strokes and fast paced strokes remind an observer of how this is only one quick snap shot representation which is fleeting and limited by the medium. When looking at Starry Night in person, an observer’s attention is always reminded that this is a painting because of the thick strokes of paint on the canvas. Impressionists saw and represented the world through their eyes, fleeting as well. We also are limited by our ability to understand all the aspects of the world or just by our computational power.

However,  recently it seems we may be going beyond representations of our world. Communities like facebook not only allow a way for people to connect to each other – but really create a virtual space that users spend hours and hours living in and perceiving changes and states between them and their friends (even down to intimate details such as relationships or what they are doing every few minutes).  Instead of complementing and showing amazement and awe to our own world,  people may find replacements for our real every day world in these virtual worlds and communities. While it’s amazing to be able to have all the knowledge in the world at our finger tips , we must not forget the amazing world we’re always in and always apart of.

40 Useful and Creative Infographics – from stepya.com

Original Post – from stepya.com

Here’s a really varied and great collection of interesting info graphics.  The graphics range from coffee to beer, cars to drugs, the financial crisis and New York City street vendors:

40 Useful and Creative Infographics

How to survive life as a programmer : Combine programming with something else you love! – from Stepya.com

Original Post from stepya.com

Don’t forget – software development isn’t just what you do at work – you can do so much more!
Here are some ideas of ways software engineers have combined another area which may be different than what software you develop on a daily basis:

Networking and Communication tips for geeks – from Stepya.com

Original post – from stepya.com

After attending my first MIT Alumni networking event last week, I found that there were two very distinct groups, the course 6 people (programmers) and the course 15 (management) people. While we all were there to meet and mingle (or find out about future career opportunities by the sponsoring company Microsoft), after a few iterations I noticed there was a basic trend that most of my conversations followed. By understanding a possible conversation flow or thinking a little bit a head of time, programmers and geeks like me could possibly have an easier and more pleasant experience .

  • Think about who you are – what you do, what makes you unique, your job and what you feel about it. Usually talking about your work are some of first questions that comes up after you introduce yourself (keep in mind if you have a trickier name, say it a little bit slower to give people a little more of a chance to remember it).
  • How would you explain that to people? People in your field? People outside of your field? What makes your company different?

Conversations can also follow several different paths (the branching factor depends on the diversity of the people and their backgrounds at the event). However, before you dive deep into a decision tree of all the possible conversation paths, here are some very high level things to consider.

  • Does the conversation get personal ? Think about some hobbies you like to do (but don’t go into specific details about your last 3 relationships and why they ended so poorly ). What dorm did you stay in? What did you think? People will often ask how you liked it etc.
  • Does the conversation stay professional? Do you talk about past experiences? Moving around? What was your path to your current job? Internships? Previous jobs? friends? Etc.

Keep in mind conversations are a TWO way flow. Gauge interest in the other person – GENUINE interest.

  • If they talk about something that is something you can relate to – talk about your experience with that (even if it’s slightly tangential), BUT without devaluing/degrading the other person.
  • If they talk about something that’s completely new to them – ask them a question, show interest, be genuine and try to understand. Think of it as learning by some form of collaborative induction on their part.

I hope these tips help you out in your next event and enjoy yourself. Let me know what other ideas you find useful.

How to Survive Life as a Programmer – Make a list – from Stepya.com

Original Post – from Stepya.com

A lot of times when working on a big feature things can be overwhelming. Here’s one quick trick to help things more manageable and to do more “thinking before you code”: Make a TODO list.

For example, let’s say you had to make a custom JDialog box that grabs some user input (name, start and end date) for your application. One way to break this down is to think about the steps necessary to do accomplish this task.

* Layout JDialog box
* Fields: name, start date, end date
* Field types: name – String, start date – JSpinner, end date – JSpinner
* Initialize Fields
* Layout fields on box (think about layout managers and sizes … setSize(), setMinimumSize(), setPreferreredSize(), setMaximumSize() are all really useful dependent on which layout manager you chose)
* validate fields (if neccessary)
* Action buttons – JButton for canceling and closing the window and “Add” Button for grabing the users information

….etc . You can go as much in depth or abstract away all of the details that are trivial AND leave out extraneous comments. At the very least this is a short quick method for organizing your thoughts before you code. At the very least, it feels soooo good when you cross something off the list to feel like you’ve accomplished something for the day. CONGRATULATIONS!

Food – How to Survive Life as a Programmer – from stepya.com

Usability : Metaphors (from stepya.com)

Metaphors are sprinkled throughout the technology that we use every day. When you purchase something online, you add it to your shopping cart. On a lot of operating systems, you have adesktop metaphor with – a “Desktop” , “folders”, and even a trash can to throw files away. Cmail has an “Inbox”, as it would in an office. With Gmail, you have the metaphor of conversations. Microsoft’s Word, or Open Office’s Writer, emultate a word processor. While metaphors can be useful and increase the learnability of a system, they can also have some negative side effects as well.

In using a metaphor, you draw on a user’s previous experience in the real world. A user can draw conclusions about the way to interact with the system based on these experiences. A metaphor can convey a lot of information at one time.

However,metaphors can be deceptive. If a user is expecting their text editor to act as a type writer, they may expect the need to press enter when they get near the side of the page to signify a new line. However, this action is unncessary because of many text editors word wrapping functionality. However, this new functionality can be hidden in the metaphor. Often your system is aproviding something additional that this metaphor couldn’t do in the first place, so you have to break the metaphor in some place.

Metaphors can also be too constraining (pr too literal) . In a desktop system, you can keep embedding the folders inside each other on the desktop – where as on a physical desktop there is a limit .

Metaphors aren’t always consistent between people. Different people have different user experiences – so you have to use a general metaphor which is common to most people. Metaphors also may not translate between different cultures.

So in conclusion metaphors are useful to help the user gain familiarity with a system, however don’t stretch a metaphor to fit your system.

*** MOVED TO A NEW DOMAIN ****

This blog has been moved to : www.stepya.com

Thanks for your patience!

Google: Not just results but solutions

Doing a quick glance at the rankings of search engines over the past 5 years,  it’s easy to see that Google’s search engine is a clear winner.  There are many reasons why Google search seems to be leading the pack in search engines.  One reason why Google pulls so far ahead, is it’s ability to provide more than results to users,  Google provides solutions.

A few years ago, I remember struggling with my father at a computer, working with him to try to understand how to create his own search terms for the search engine. Knowing how to describe and quantify your question in a specific set of words and translate that problem into a language that a search engine can understand is a difficult problem. However, Google has gone beyond that.  Instead of relying on the user to correctly format what they want to know, they help the user format their request. One example of this is by Googles suggestions.  For example, when a user incorrectly types in a keyword,  such as Massachusets as seen below, Google goes the extra mile by trying to correct and suggest another possible keyword to the user and help them fix the problem , instead of simply returning results for the incorrectly typed keyword.

Google suggesting an alternative to the user's misspelled keyword

Google suggesting an alternative to the user's misspelled keyword

Another way Google presentions “solutions” to the user is by actually providing results. When a user types in ” convert 45 degrees fahrenheit to celsius” , Google provides not just results of websites that fit these keywords, but also the answer to the question,  7.2 degrees Celsius.

Another clear example of this is Google’s search results for “weather 02139.” Google provides not just results of websites where the user can find the information – but the actual information the user is looking for.

Instead of simply providing websites where the user can find the information they need, Google removes one step for the user and displays the information, in this case the weather forecast, that the user is looking for.

Instead of simply providing websites where the user can find the information they need, Google removes one step for the user and displays the information, in this case the weather forecast, that the user is looking for.

By providing solutions to the user, Google’s search engine moves beyond a good lookup service in the directory of webpages, and into a service where users can find answers .

Usability – Description Errors

A description error is when the intended action is done on the wrong object. This can occur when two actions are very similar. The classic example of a description error is pouring orange juice in a bowl of  cereal in the morning. The user has performed all of the correct actions. They opened the fridge, removed the container from the fridge, and pour the liquid into their bowl. However, all of these actions have been performed on the wrong object, the orange juice in this case.

How to help users avoid description errors:

  • If icons are used, make sure the icons are easily distinguished from each other.
  • Use location to help distinguish right and wrong choices - Don’t put these choices right next to each other.
  • Give the user lots of feedback.
  • Provide an undo feature for when this error occurs