What programming concepts are applicable to general life issues—business success, relationships, etc.—and how would you apply them in those situations?
That language is everything. It modifies our way of thinking and interacting with each other.
That every problem can be solved by breaking it down into logical steps.
If you can't abstract things to create a summary or overview (or superclass or interface) you don't really understand them and need to keep asking questions.
Keeping Things Simple.
Breaking concepts into subparts, recursively, until they are small enough to tackle.
Just saying 'no' to things which seem way too complicated. :)
Am I the only one that unit-tests their breakfast each morning?
Keep relations between objects in a good health by not trying to know more than an object wants to tell.
It's much better to synchronize through message passing communication than using shared resources.
Clean well defined interfaces keep the organization healthy and scallable.
I'm saddened that version control isn't in wider use in the "real world". I know a workgroup of people who write reports. They need to keep track of changes, they need to know who made which change, they need to have multiple people editing different sections of the same report.
They stumble through using MS Word's track changes, complain that "so-and-so is in the file, so I can't edit it", and spend lots of time arguing about which language is the most current. They've created a file naming system that's supposed to incorporate a datestamp and version numbers. Of course, they're humans, so they forget, make mistakes, etc.
If they knew how to use version control, many of their problems would simply disappear.
Thinking about the problem even just a little bit rather than just diving in will help you reach a better solution.
None. The world around me doesn't work in the same way a computer does.
Optimist, the glass is half full Pessimist, the glass is half empty engineer, the glass is too big programmer, why doesn't the glass resize?
If only the world was more applicable to programming methods. but then after a few billions years how many times would the system have crashed?
You usually get things done a lot quicker if you read the manual/documentation first.
I think it would be kind of hard to apply Test Driven Development concept in your life.
Say, if you wanted to paint an apartment. What test would be applicable first?
It would be even worse when it comes to buying things. Becuase, you would have to buy random stuff and then verify if this stuff turned up to be what you really wanted.
I've used predictive execution for data entry before. We had to enter some information about every part in our inventory and most times it was faster to predict information about the next part to be able to move on sooner, it more than made up for the slight backtrack that would happen once in a while.
More of a hardware-level strategy, but still, it was effective.
Where to parallelise: Asking my wife to go and get a pizza from the place at the end of the road rather than helping me unload the car - if we unloaded the car twice as fast, we would have finished in 15 min then had to wait half an hour for the pizza; instead I unloaded the car in 30min and she turned up with the pizza as I took the last of the stuff in. (it wasalso an excuse to stop her helping, as she had pulled a muscle in her back earlier in the week)
Queuing theory: useful at festivals whether or not we're likely to get into a packed venue before the act we're wanting to see is scheduled, though it assumes the rate of exit will be constant.
Experience and theory in solving programming problems can help in everyday life and especially with abstract and complex life problems.
For instance, in a new and unstable life situation, instead of stressing and consequently procrastinating compounding the problem, I sometimes pretend I am approaching a complex and uncertain programming task; I take a deep breath, admit to myself that there is probably a reasonably good solution to the problem, then take a high-level view of the situation, get my bearings several times and make a tentative first attempt that I can be confident will probably not work but will reveal what might work. From there I can make informed decisions and ward off the dreaded procrastination - having confidence in small revealing steps.
Instead of stressing and allowing myself to make mistakes I come to a "good enough" solution to many everyday problems.
Nothing Comes For Free: Practice makes perfect.
Don't Recreate the Wheel: When presented with a new problem space, learn from those that came before...Research (Read/Ask questions).
One Man's Junk: There is no such thing as a prototype, just an example of one possible solution which could be the basis of the final product.
Glitz Can Be Dangerous: Graphics make customers/managers/teammates happy and feel there is progress when the heavy lifting is behind the scenes.
Any good "programming" concepts you can apply to real life, isn't a programming only concept and could also be learned naturally or learned through most other activites that involve problem solving, thinking things out on an abstract level, planning before doing and methodically tackling difficult tasks.
tl;dr It's not so much what programming concepts you apply to real life as to what good habits have you learned from programming. /humble opinion
In real world, there are many things you can't solve from logic theory perspective, unlike in programming.
- Simpler life causes fewer breakdowns, just like simpler code produces fewer errors. If life feels too complicated, it probably is. Reduce, refactor, reuse.
- Time management is a skill that is useful everywhere.
- Very rarely is life WYSIWYG.
- Planning is essential. You'll never get anywhere without goals and it helps when those goals are simple, clearly stated, easily measured, and attainable.
- There is no substitute for clear communication.
- Execution will usually beat innovation, but it's best to have both.
- Feature creep can be exciting until you learn how much work you have left. It slows projects down and delays deadlines...not being able to say no is life's equivalent.
- Shortcuts aren't worth it.
- Learn from the right sources and check for best practices. Be wary of buzzwords.
- Too little information can be asphyxiating and too much can be paralyzing. Get what you need to finish the job.
- Iterate. Improve.
- Bloat happens when you try to fit too much in.
- Abstracting problems into their component parts is a good way to solve them.
- Validate and filter your speech before outputting.
Words we speak are like keywords or identifiers in any programming language. If you can manage to use them in the right order, you can simply get successful results from life.
You usually get things done a lot quicker if you read the manual/documentation first.
On the other hand, regarding some topics (such as relationships and social skills), the documentation is sorely lacking :D
There are few applicable to day to day life (some of them already mentioned):
- KISS
- You ain't gonna need it
- Garbage In, garbage Out
Probably more.
You don't want to terminate unexpectedly due to occurrences of errors, you only want to terminate under conditions that you control.
Oops.