One of the most beautiful things about software (I guess it´s the reason why i love it) is the diferent level of abstraction that you can apply to solve different problems, The model that you build to represent the core of the problem to solve determines what is relevant or not in that context. I think that this is a very important aproach, even in life, there are things that may not seem so relevant to you, so they aren’t in your life abstraction model, for example, for me, there are many fashion related things that are so irrelevant, they don’t ever seem to exists… each person does his own model of life .
For example, in a Poker game, there are many factors that help you determine your contender´s hand, the playing patterns an frequency, the betting pattern, it´s body language (eyes, mouth, hands, posture, speech etc.) in a real game, all of this becomes relevant for your representation of the game and influences the decissions you make for the sake of your winnings; by the other hand, In a computer poker game, the only things that you can perceive include the betting and hand playing patterns, because all of the rest is not available for you, so you have a different abstraction from the same game in different contexts.
In software, the levels of abstraction are very relevant, sometimes, too deep is not so good in the same way that too shallow does, the art and craft of software modeling is to get to the right level of detail that helps you to solve the problem at hands. This is just done with experience, many developers, and analysts, work a lot of time in just one project, a big one, a troubled one, a constantly evolving one… I think this is the worst situation where a developer can get… monotony, single domain, single technology or reduced set of them. The variety of experiences in diferent contexts is what gives a developer (and in many other professions too) the real experience, not just the time working with one technology or domain..
Ricardo Gonzalez Vargas
Software Development Consultant