Following this question, what real life good habits has programming given you?
Solving problems in small steps and not in one maybe overwhelming attempt which never gets finished.
Well to be a successful developer, you have to think about the problem before you try to solve it. I've taken this approach to projects around the house, and have found that doing the proper research, you can learn how to do many tasks, that might have previously seemed daunting. I applied this lesson to carpentry, and have done some room additions, I wouldn't have thought possible. Programming also requires attention to detail, and that is also a good trait to carry over into other aspects of your life.
Introduced me to useful steps in solving any problem, using divide and conquer, abstraction, etc. They work in real life too!
Being a hero doesn't mean you succeed in saving the day. It just means you tried.
I use merge sort whenever I got a big pile of stuff that needs to be sorted.
Breaking tasks into smaller, more manageable steps, scheduling those steps with possible concurrency in mind ("honey, can't you change the diapers while I'm preparing meal?").
Also, I've learned that all information storage and retrieval must be handy when needed, so there are notebooks in various parts of the house for all practical purposes (kitchen: "I should buy that", phone: "write down that number" etc), and the written pages are all gathered in a specific place where they can be found.
Learning about and having to write algorithms make me think about ways to do things more efficiently even in a non-programming context.
This is not a habit, however it's a real life example of practical implementation of computer theory (thanks, Don K, for the great books you've written :)
Army service (there are countries where it is obligatory, you know), and I and a mate are faced with ~1200 soldier cards that must be sorted by yesterday by captain's orders. Thankfully, the key was a 6-digit number. The mate was worried how long it would take, but I had Vol.2 fresh in my mind :)
So I made ten stacks for digits 0-9, and I divided the cards based on the last digit. Packed them, repeated for the second-to-last digit. And so on.
The procedure took about 30 minutes with a steady pace, and then we sat and had a relaxed, calm time. Obviously (for everyone who's been in an army), when the captain dropped by about 4 hours later ready to start shouting, we said, "oh, we just finished."
(Community wiki because even if you like it, I wouldn't deserve the rep)
I no longer equate thinking I'm right about something with actually being right about it.
It's now very easy for me to entertain the thought that I may be wrong even when I feel pretty strongly that I'm right. Even if I've been quite forceful about something I believe, I'm able to back down very quickly in the face of contradicting evidence. I have no embarrassment about admitting that I was wrong about something.
That all came from decades of working in a discipline that mercilessly proves you to be mistaken a dozen times a day, but that also requires you to believe you're right if you're going to make any progress at all.
[bignose] This discipline is much more native to the scientific method, of course: coming up with a solution is easy, it's not until there is solid evidence, demonstrating the solution in the face of attempts to disprove it, that it's of any value. I see this convergence as a sign that programming is finally becoming enough of a science that blind faith is beginning to be seen for the nonsensical position that it is.
[Robert Rossney] I disagree in several respects, not least in that it doesn't really have much to do with what I was describing.
The practice of open-mindedness that I'm talking about is orthogonal to understanding the universe through controlled repetition. There are people to whom the experience of feeling wrong, and the action of openly admitting error, are unpleasant, even intolerable. Remaining open to that experience, even embracing it, is a practice that is more spiritual than scientific.
Sure, the best scientists have to cultivate this ability too in order to withstand the emotional process of investigation. But plenty of scientists don't (which is why we know who Thomas Kuhn was), and plenty of people who aren't scientists do.
And I vigorously reject the idea that we're somehow suddenly seeing that blind faith is nonsensical. Find me a software developer who's willing to stand up for blind faith. What we're not willing to say is that what we are doing is often engaging in faith, and that it this faith is sometimes blind.
I think the 2 biggest life skills I've developed are
1 - Problem solving
When faced with a situaition/problem i analyze my options and the pros/cons that go along with each. In the end I select the options which work best for all parties involved in "The Plan"
2 - flexibility.
The ability to change "The Plan" on the fly and without a fuss when a certain aspect of it fails.
Tackle life's challenges in iterations. In other words, tackle problems one step at a time; doing something is always better than doing nothing.
The ability to give instructions or present ideas in a clear, precise manner. It's pretty rare nowadays that I can't explain almost exactly what I mean.
I'd have to say that I think more carefully than I did before, it actually encourages me to see how things work in real life, whether it be programming, nature or sports! It opened my mind to these things and I think it is really paying off; in short programming has made me more curious, without a doubt.
There is one habit that programming teaches a person that many fields struggle to carry across.
Friendliness!
I am a useless programmer, still being fairly new to the whole thing. If it were not for the help of people on this website and all across the Internet I would struggle deeply with many of the scripts and programs I have written in my time.
This is why I hate the latest trend on StackOverflow of users leaving rude and impolite comments for those looking for help on simple problems or for their homework. It is of no concern what their work is for, only that they need help and that if I were in their position I would really appreciate some guidance
Problem analysis has been a big one- breaking the big problem into smaller ones, eliminate variables wherever possible- I use all of this the whole time in my horsemanship and in pretty much every other facet of my life.
Also I've become much more aware of the value of creating tools to support a project rather than just focussing on the project itself and the value of maybe paying for something that will make the work I need to do a lot easier.
Logical and calm approach to real live problems. Also I tend to optimize things I do like shopping or even how I park my bike. Also I like to keep things in order so I don't waste time later on.
No more "almost" in my life and no more troubles with my girlfriend is just try catch ñ_ñ
Prioritising problems. Programming can be an exercise in creating solutions to non-existent problems, but as I’m not much of a programmer I think I’ve got pretty good at spotting the problems that are worth solving.
Unfortunately, they don’t always match up with the things that clients ask for :)
- think before start doing anything
- optimization
- start to do multiple tasks in parallel
- attention to detail
- google/research before solve a problem
I now tend to think of everything as objects so now when my wife throws an exception I simply catch it and deal with it and move on.
Sometimes though it's an exception I wasn't expecting which is the nature of exceptions after all. Life simply stops working until I go over the same ground again and again looking for the previous erroneous statement which the debugger (in this case my wife) is unable to accurately express. The replies I receieve often leads me up the garden path and around the trees until I spot my mistake and correct it and try again.
For me the opposite of this is true. Programming has brought very few good habits to my everyday life. But my every day life is constantly bringing good (and sometimes bad) habits to my programming. For example, I used to be the worst programmer in the world when it came to comments. I found it was largely because I tend to be a very unorganized person, but as soon as I forced myself to be more organized in my every day life (taking better care of the bills, keeping the house, especially my desk, clean) the benefits to my code were noticeable immediately.
I'm not sure it affects my daily life in this way, but it gives me a vocabulary. I look at the way my boss uses his computer. He seems to be an event consumer. He watches the screen until it enters a state where it is waiting for him to respond, then he provides the requested data. His work gets done deterministically in the order it is started (He uses a priority queue.) He's got one big mutex, and if its locked, well, you can try again later.
I am an event producer. I fill the computers buffers with requests to process as quickly as i think of them. If one consumer becomes full, I'll asynchronously continue to add requests to other consumers. Work gets completed, but not in any particular order. My interrupt handling routines are a bit buggy, so sometimes, when work gets added, the current process segfaults.
This gives rise to one of our most frequent conversations "How are you working with so many programs open?" (him) and "How do you get anything done with just one program open?" (me)
Using the correct terminology when talking about a technical field, or at least to someone who's specialized in a certain area. eg. it's not a "suspension shock absorber thing", it's a "beam axle".
long Think
(Iam not, sure me) {
if ((*it->makesADifference)(2, me)) {
butIOftenThink();
HAVING_AN_ALTERNATE_WAY_OF(Looking_At_Things);
H_elps(me);
}
for (LOTS_OF_TASKS);
}
It has turned me into Sherlock Holmes. I have an elevated sense of analyzing and problem-solving.
I allways try to see problems and difficulties in life from different angles, and break down big problems to small solvable ones if its possible.
Working with a wide range of clients and know how to follow up to get most information out of what clients think they want, and what they really want and so on, have made me much better to listen to and understand people, to see their point of view and understand why they have that point of view.
And in the kitchen I use allmost exactly the points usman shaheen wrote: http://stackoverflow.com/questions/168805/what-real-life-good-habits-has-programming-given-you/337118#337118
Test-driven development, specifically, has gotten me in the habit of thinking about the desired end before I start, and focusing on outcomes rather than processes. This has helped me tremendously in many areas.
General project management has helped me with prioritization and tackling large problems.
Programming has helped me think more clearly about things, and less vaguely, while still giving me the ability to think about appropriate abstractions.
Never trust the machines.
(because machines/software is built by humans, and humans make mistakes)
boolean all;
if(all){
}
else{
fails();
try{
try{
again();
} catch(InterruptedException e){
}
}catch(Exception e){
}
}
I was a group leader on a rather large school project lately. Memory management certainly helps in real life as well. :)
It's helped my in my cooking...from gathering requirements from the family for meals, designing recipes, cooking, unit taste testing, and acceptance taste testing.
By using agile methodology in the kitchen, I can better adapt to requirement changes from my picky kids.
Extreme Cooking even comes to play when my wife does recipe reviews, does pair cooking with me or helps with the unit taste testing.
Daily releases keep the family happy and keeps the leftovers to a minimum.
If only I could figure out how to implement automatic builds!
Over optimize almost everything, try to be perfectionist and give attention to details.
Tenacity. I don't give up on anything anymore.
This probably comes from the nightmare of maintaining a legacy system written by bad developers chock full of almost-never-repeatable bugs. If I'm having problems with something IRL I just continue to try and find the cause.
I now use zero-based indexing when counting objects in the real world. It's great because when talking to an attractive female it turns out I have precisely zero girlfriends.
Programming in combination with stackoverflow (and other forums) taught me to try and word my problem in a way that somebody else can understand it. It happens often enough that I go to stackoverflow, a forum or even start typing a message on MSN to a friend, and halfway through my question I suddenly realize the answer.
Thinking back I definitely have used this method in real life in the past, maybe not always by writing it down but by asking myself how I would explain the situation to (say) my girlfriend. It helps.
Without a step by step approach to solving real life problems, u a certainly going to miss out on something that can have greater consequences than the initial problem