What real life good habits has programming given you? (2008)
stackprinter.com
stackprinter.com
Whenver someone shows/tells me something I instantly start to search for holes in it. I don't actually think about it. It just happens, my wife complains a lot about it.
- For an existing system (of any kind - mechanical, legal, social...), I automatically look for things that can be improved.
- When discussing a new idea, I'm always mentally jumping ahead to the implementation phase, where potential problems quickly jump out at me.
I've considered it to be just part of my personality rather than specific to programming, but since I first learned to program at age 7 it's difficult for me to distinguish the two.
I can totally relate to this and I have to constantly remind myself to just agree with people instead of challenging them when there is really nothing to gain. It's not always easy to do :)
For the too-bright-monitor– I highly recommend http://justgetflux.com!
> "Everything is vague to a degree you do not realize till you have tried to make it precise, and everything precise is so remote from everything that we normally think, that you cannot for a moment suppose that is what we really mean when we say what we think." — Bertrand Russell
Practicing something repeatedly, preferably every day, is the best way to get better at something. I started programming every day after being inspired by a blog post by John Resig that got posted to HN [1]. I started a game that I've been working on for 245 days straight. I started with almost no knowledge of game programming and now have, I dare say, a playable game. Github really helped with this because you get a nice display of your commit history over the past year that gives an incentive to not break the chain [2].
I've been able to apply this to other skills I've wanted to get better at: relearning how to play the piano, making music, working out, etc. and have seen great results.
1. [http://ejohn.org/blog/write-code-every-day/] 2. [http://i.imgur.com/6zq1IbJ.png]
For context, the systems I work in are typically nowhere near perfection. This leaves me with a continual list of things to be done that ranges around 5-10 person years of effort to complete. Because of this fact, I have had to learn to be tolerant of the imperfections, organized enough to keep a long-term plan in focus, and tactical enough to fix things in a sensible order. It's also been useful to develop an understanding of when costs are sunk and when ideas aren't worth further development.
I'd say that all of this has been useful in my day-to-day life.
Something that's come to me more slowly is the human aspect of software development. My earliest programs were all one person affairs: I'd be the only author, reader, and user of the software I wrote. The older I've gotten, the more interesting it is to write software that other people can contribute to, understand and use to better their life. Learning how to build systems that do that is teaching me a lot about design, empathy, and how to think outside my own head. This is still a work in progress, but it's been very rewarding.
One bad habit that could be attributed to programming is that I don't remember much anymore. I just jump into SO or wikipedia etc to get the information, and I also keep a bunch of notes in my pocket for "all the things I need to remember".
How are you attaching the debugger to your wife?
Learning by doing > learning by reading (although it cannot replace the latter).
Not getting emotionally attached to my solution only because it's mine.
When others say something will take longer than I would expect, I trust them more. They're the ones who are doing it; they know the details that I don't. And it would take too long to make them explain all the details to me. And as they work on it and realize it will take even longer, I have sympathy because boy have I've been there myself.
- Take a little extra time to be thorough
- Nullius In Verba (On the word of no-one) i.e. See for yourself
I can't view the stackoverflow link right now, but the top answer basically claimed "I feel strongly about my reasoning, but nevertheless, I could be wrong". How could that be unless you made a mistake? The system is logical!
- thinking in graphs and dependencies
- intuitive understanding of 3d vectors and matrices operations
- a few really useful tricks when troubleshooting anything (this thanks to debugging a lot)
- reading and writing in English
Bad things:
- laziness (I already know how to do this, what do you mean I actually have to do it, too?)
In other words, invest some time in learning the most efficient manner to do seemingly mundane things. It pays off in the long run.
Every choice is a decision tree and every action is an algorithm.
Programmer logic mind interpret
if(fridge.contains(Consumable.milk) &&
legs.walkTo(location.getMarketNearest(this.location))
{
store.buy(Consumable.Milk);
}
Well since we didn't have any milk I'll just go back to idling.