This is a bad name--it brings up visions of late nights washing down stale pizza with caffeinated beverages while trying to find that one last bug, but...
I would like to explore not so much programming itself, as much as its effect on the programmer.
A subgoal is to enumerate how being involved in the creation of software changes the way one perceives the world. The ramification of the crossover between life experience and software architecture, methodology, mentality, process, etc.
The final goal is to expand the collection of patterns, processes, etc., by stripping the anthropomorphic elements from the metaphors discovered in this process.
I know this sounds a little bit like someone trying to complement a Vogon on his poetry, but I'm serious.
Perhaps you can start with an example?
- You start to see physical objects as data structures (e.g., cities and roads as nodes and edges of a directed graph) -- DougKing This is interesting, I live in Utah, where most towns originally used a cartesian grid system of streets numbered by 100's out from the center of town. You give an address as 115 East 200 South (115 being the house number, 200 begin the street) and all the natives know exactly where that is and how to get to it, can compute the exact distance bewteen their home and yours (8 blocks is a mile), etc. -- Bob Bockholt I used to live in Indiana, where they did much the same thing for entire counties. The Cartesian grid system breaks down in "interesting" terrain, where there are lakes / mountains / etc. to route around, or where people made roads without planning. -- dk
- I've actually, and conciously, applied YouAintGonnaNeedIt to organizing my BigBoxOfPapersToFileRealSoonNow. That is, I realized I really didn't have to make tons of subcategories until the parent folder got unmanageable. -- JoeWeaver
- You receive an insight (any kind), and soon after you visualize a computer monitor - your next ten conscious thoughts are how to get the earlier into the latter. Yeah, been there! (big grin) -- Bob Bockholt --ChristopherGaltenberg
- You believe that if politicians, mothers, and managers were technically savvy, they would by default become smarter people, and the world would be a better place. --ChristopherGaltenberg Huh? I don't believe that at all. . . . nevermind. . . I guess I do. . . Actually, programmers are generally above average intelligence. Increasing the average inteligence (if that can be done, mathematically) couldn't hurt!
- You start wanting to apply your programming tools to every day life - Things like version control, automatic daily builds/tests, debugging, etc - Instinctively wanting tools to deal with the immense complexity of the body and mind. You can't grep dead trees. ;-)
- When you hear "class hierarchy", you think of politics. . . and want to refactor it. You start to realize that abstracted models of reality used in programming are used elsewhere, and the you see the flaws in those systems often as a result of AllAbstractionsLie. You may wonder if P2P is implicitly political. You may start to think television is the view in someone's ModelViewController architecture.
- The powers of two become so engrained people marvel at how you can "keep doubling a number" up to 6 digits and beyond. Yes, sometimes I'm asked why I pick 64 or 128 instead of a nice number.
- You aren't disappointed when you wake after dreaming in code - you know you will refactor it while typing it in to a computer.
- Note that it's just assumed one dreams in code. Nope, never have. I have dreamed solutions to coding problems, though.
- You use ShuntPattern as an insult. that is, anti-patterns are understood well enough to apply them as insults
- Neither MC nor VC knows your CV lists using MSVC and CVS with CM to make a MVC CRM on a VM - Your repertoire of computer related acronyms may begin to collide. CM may mean customer management, or configuration management, or something else.
- You think foo^H^H^Hbar is more sarcastic than s/foo/bar. You begin to grasp the subtleties of meta-humor. The context of the expressions you use are often operating system or software based. Unix meta-humor generally being funnier, and Windows meta-humor generally being sarcastic. I prefer foobar to the original fubar. Does that count?
[See also PrologFitsOurMentalAbilities
Especially if you do things like database programming you naturally have to model everything as classes, structures, schemas and tables so it creeps into daily life and you tend to want to write programs to manage everything. I find I don't trust off the shelf programs such as contact managers as you know you could do better (why has Outlook formerly MS Schedule still only have 3-5 levels of priority?). Paradoxically such programs are difficult to write properly so things like PersonalWiki
s come in handy. Alternatively you want to get a break from computers for managing daily life many gravitate towards things like PersonalAnalogDevice
s, but at the MentalModel
level you are still thinking in design mode. You do it even uncounciously - InstinctAsIntelligence
. If you've done ArtificialIntelligence
it is even worse you start with SemanticNet
s and SymbolicLogic
. For me because my personal goal is to be able to program any kind of application if needed, I like to practise modelling everyday domains and activities - budgeting, contacts, bookshelfs, shortest routes to drive, movies-to-see etc. I like XpAndUml
even if it does not end up as code it could if I wanted. Also to look at examples from on all manner of fields such as Biology, Economics, Physics, Chemistry and do ClassDiagram
s for them though my day to day programs are more business oriented (at this point in my LifeVectors
). Even politics the leaders speak but what went into composing a speech by their writers, the whole dynamics of power, military decisions and world affairs - there are mathematical models for these (EigenValue
s anyone?) which if you are familiar with them are easily translated to programming contructs.
Very early in a new project I like to ask myself, and others, questions like, "How many people with pencil and paper would it take to do this kind of job? In what ways will end user experience with this product be better or worse for not having a real person to talk to?" This often helps the team see the futility of putting in lots of convenience features that end up being inconvenient and frustrating. It puts the work in a human (humane?) framework. -- Bob Bockholt
. Over several years I have found that I use thinking that's very similar to programming in solving life problems. Little things like extra attention to exception handling, proper sequencing, veracity of assumed data, and modeling the problem as much as is feasible before committing resources (like time and money).
When I was much younger, I tended to use chess and other games as a meta-thinking model. The problems that this created were less about things you have to solve to live, and more about GamesConditions?
kind) with people. Not all of life is adversarial, and using OppositionOriented?
gaming as a foundation eventually loses.
Chess doesn't prepare you for situations where you have to deal with dynamics larger than competing.
Programming allows planning in broader contexts, provided you allow yourself to get beyond simple mechanics.
I had some friends who became obsesive GoGame? players for a while. When they began to notice that when standing around talking they took up positions with respect to one another and their environment that were 'defensive' or 'offensive' in terms of game positions according to their role in the conversation. Moral: Don't get too obsessive. -- Bob Bockholt
Gee, thanks everyone. I'll see if I can begin to distill some of this stuff into what I think I'm looking for. As for you others, please don't hesitate to contribute! -- Bob Bockholt
See also WeirdDeveloperDreams