Using Statistics to Understand Language – from stepya.com

Original Post from stepya.com.

When learning a new language students often spend many hours trying to learn and decipher meanings of sentences by understanding grammar and the structure of the sentence. What is the subject of the sentence? What is the verb? What objects is the sentence talking about? However, Stanford’s Natural Language Processing Group is using statistics and probability to help computers understand sentences and human language. After getting enough sentences and breaking them down manually, a probabilistic parser will try to use that knowledge to produce a “most likely analysis” of the new sentence.
Try it out Stanford’s statistical parser yourself here!

Probabilistic parsers use knowledge of language gained from hand-parsed sentences to try to produce the most likely analysis of new sentences. These statistical parsers still make some mistakes, but commonly work rather well.

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!

Visualizing Randomness – from Stepya.com

Recently I’ve been interested in randomness. Here are some quick visualizations I made of squares (black if 0 and white if 1) the random number generator used by Java. … And…in color (where each RGB value is randomly generated) – so “cumulative” randomness:….Source code will be posted shortly. Let me know what you think!

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!