More editing
[themediocreprogrammer.git] / chapter07.md
index 998ec4bb3038959998cddaa7f182a3b862da9967..6c63ef17886f62a239a98b9ace9dda9b0360f465 100644 (file)
@@ -60,65 +60,69 @@ This will take practice. We're accustomed to letting our stories drive our day.
 
 ## Awareness in action
 
-### FIXME
-
-Say that in this moment we're feeling anxious. We've just received a bug report and it's related to something we've been working on. The bug report states that code that we committed earlier isn't working and probably has never worked the way we thought it worked. As we read the bug report our anxiety levels increase. Our inner monologue kicks in and we start telling ourselves that we aren't nearly as good as we thought. We're not perfect. We suck. We didn't get enough sleep the night before so our emotions are in a state of heightened awareness. Our mind races and flashes images of the other times when we've failed. As we keep reading our sense of dread kicks in. What will they think of me? What do they think of me now? Am I going to lose my job over this?
+Say that in this moment we're feeling anxious. We've just received a bug report and it's related to something we've been working on. The bug report states that code that we committed earlier isn't working and probably has never worked the way we thought it worked. As we read the bug report our anxiety levels increase. Our inner monologue kicks in and we start telling ourselves that we aren't nearly as good as we thought. We're not perfect. We suck. We didn't get enough sleep the night before so our emotions are in a state of heightened awareness. Our mind races and flashes images of the other times when we've failed. As we keep reading our sense of dread kicks in. Our internal monologue kicks in: "What will they think of me? What do they think of me now? Am I going to lose my job over this?"
 
 Before we've even finished reading the bug report we've created a story. The story begins with a montage of our past failures and adds this latest bug report to that montage. Our story then ratchets up the pressure by raising the stakes of the importance of this bug report: not only do we have to fix whatever broke but now we have to fix our reputation and start a job search. As the story progresses in our minds we're wondering if we'll ever work as a programmer again, and feel that our career as a programmer is over.
 
 The story we've created isn't a pleasant story, but I'm sure you can relate to the factors that generate it. You've probably had similar stories play out in your head. It's a story that draws from the rich lakes of our insecurities and feelings of inadequacy. It's fueled by fear: fear that you'll ruin your reputation, fear they won't trust you, and fear that you'll fail.
 
-Fear is one of the most powerful emotions we have but it's not the only one. Reading that bug report may also elicit other emotions like grief (we thought that code was good and now that thought is gone), uncertainty (how will we fix the problem?), and anger (how could we have deluded ourselves into thinking this worked?). We may also feel sadness and loneliness. We could feel disconnected and adrift.
+Fear is one of the most powerful emotions we have but it's not the only one. Reading that bug report may also elicit other emotions like grief (we thought that code was good and now that thought is gone.), uncertainty (how will we fix the problem?), and anger (how could we have deluded ourselves into thinking this worked?). We may also feel other feelings: sadness, loneliness, and abandonment. Our sense of self worth may also be affected, and we could feel disconnected from those whom we serve and the folks we work with.
 
-Being aware of the feelings we have can help us diagnose the story we told ourselves and how it didn't match reality. They can give us feedback on how we are perceiving our world and the work we're doing. Pausing for a moment to acknowledge our feelings and understand where they are coming from give us an understanding of what our emotions are trying to tell us.
+Being aware of these feelings can help us diagnose the story we told ourselves and how it didn't match reality. These feelings and the story we told ourselves can give us feedback on how we are perceiving our world and the work we're doing. Pausing for a moment to acknowledge our feelings and understand where they are coming from give us an understanding of what our emotions are trying to tell us.
 
 ## Finding our feelings
 
-Our feelings manifest themselves in our bodies in some shape or form. Fear can be a knot in our stomach or tension in our chest. Anger can feel like our head is getting hot and our jaw clenching. We can pause for a moment and just sit with our feelings and notice them. Think of like you are scanning your body looking for the feelings you have. Notice where your mind is drawn: tightness of your chest, tightness in your stomach, a clenched jaw, or whatever you may feel. Notice the sensation of that feeling. You can dig deeper and try to find the underlying causes of the feeling but for now just notice that it exists. Sit for a few moments more and be curious about how it feels. Let the feeling exist - be kind and gentle with it. Give it space. Above all don't try to fight the feeling or wish that it would end; just notice it. Eventually the feeling may subside but for now just acknowledge that you have this feeling and you're going to be curious about it.
+Our feelings manifest themselves in our bodies in many different ways. Fear can be a knot in our stomach or tension in our chest. Anger can make our head feel hotter, or we can feel our jaw clenching. When we notice these feelings we can pause for a moment and just sit with our feelings and keep noticing them. Think of this exercise as though you are scanning your body looking for the source of the feelings you have. Notice where your mind is drawn: tightness of your chest, tightness in your stomach, a clenched jaw, or whatever you may feel. Notice the sensation of that feeling. You can dig deeper and try to find the underlying causes of the feeling but for now just notice that it exists. Sit for a few moments more and be curious about how it feels. Let the feeling exist --- be kind and gentle with it. Give it space. Above all don't try to fight the feeling or wish that it would end; just notice it. Eventually the feeling may subside but for now just acknowledge that you have this feeling and you're going to be curious about it.
 
-Some feelings and emotions may be more painful than others. Give them space and be curious about them as long as you can. If you notice yourself starting to panic or feel overwhelmed by the feeling then you may stop before they overtake you. Remind yourself that these are emotions and are a part of you. You and your emotions work together. You're on the same team.
+Some feelings and emotions may be more painful or traumatic than others. Give them space and be curious about them for as long as you are able to. If you notice yourself starting to panic or feeling overwhelmed by these feelings then you may stop before they overtake you. Remind yourself that these are emotions and are a part of you. You and your emotions work together. You're on the same team.
+
+This exercise isn't about dwelling in or punishing yourself with your feelings. If the act of noticing these feelings is causing you pain and anguish then you may need some help from a professional or a support group to help guide you in understanding these feelings and where they come from. There is no shame in finding others to help you along your journey.
 
 ## Emotional Triage
 
 There's a tendency to want to run away from our feelings, or try to suppress them. Our feelings aren't always pleasant and we want to avoid things that make us unhappy or uncomfortable. And we want our internal narrative to be one of someone who is smart and capable of doing anything we put our mind to doing. But when we feel negative emotions or fail to live up to our stories we start to feel crappy about ourselves. We wonder if this is worth it and wonder if we will ever be happy working with computers.
 
-Think of this practice as emotional triage. Hopefully you've never had to go to a hospital emergency room, but if you have you'll see a whole string of doctors and nurses who are trained to diagnose what just walked through the door and determine the severity of the problem. When we recognize that we're having an emotion we too are diagnosing what emotion we're having and the severity of the emotion. We take these moments when we're having these emotions to see what the emotion is. As we review our emotions we are gentle with them and see them for what they are. A good doctor or nurse doesn't impose their desires on the patient; the simply accept the patient for who they are and act accordingly. When we recognize our emotions for what they are and see where they are coming from we can better understand what we're facing. 
+Think of this practice as emotional triage. Hopefully you've never had to go to a hospital emergency room, but if you have you'll see a whole string of doctors and nurses who are trained to diagnose what just walked through the door and determine the severity of the problem. When we recognize that we're having an emotion we too are diagnosing what emotion we're having and the severity of the emotion. We take these moments when we're having these emotions to see what the emotion is. As we review our emotions we are gentle with them and see them for what they are. A good doctor or nurse doesn't impose their own desires on the patient; they simply accept the patient for who they are, diagnose what brought the patient in to see them, and act accordingly. When we recognize our emotions for what they are and determine where they are coming from we can better understand what we're facing. 
 
 The more we do this practice the better we'll become at recognizing our emotions and why we're having them. We'll be better able to see what we're feeling and understand why we're feeling them. When we feel anxious we can recognize that we might be in an area of development where we don't fully know what we're doing. We can then feel the anxiety for a bit (don't try to chase it away just yet) and then think about what we're currently working on and the areas that might be new to us. We can then mentally note them, or (better still) write them down or journal them so when we complete what we're doing we can review the areas that caused us anxiety.
 
-With this practice we can turn our emotions from something that drives us into something that guides us. We can use our emotions as a tool to better calibrate our internal stories. Instead of thinking that we're going to be amazing programmers generating bug-free code (which is amazing fiction, no doubt) we can instead say that we're going to spend the next 10 minutes exploring this area of our work and see where the gaps are in there. As we explore our emotions and anxiety can let us know where we feel we need to improve and adapt. We can then change our plans as needed to address those areas we feel are lacking or need improvement.
+With this practice we can turn our emotions from something that drives us into something that guides us. We can use our emotions as a tool to better calibrate our internal stories. We can stop telling ourselves stories that we're going to be  amazing programmers who generate enormous amounts of production-ready, bug-free, readable code (which is not only fiction, but borders on the realms of legend and myth). We can instead tell ourselves that we're going to spend the next 10 minutes exploring this area of our work and see where the gaps are. We can be curious about where this next 10 minutes will lead us. As we continue to explore we can notice our emotions and anxiety. We can then use our emotions and anxiety to let us know where we feel we need to improve and adapt. This will allow us to change our plans as needed and address those areas we feel are lacking or need improvement. This cycle continues with each practice container, with our emotions acting as a barometer for our comfort level with this topic, and a road-map for how best to proceed. We turn our discomfort and anxiety into indicators of where we feel we need to focus our attention.
 
 ## Burnout
 
-One thing that our emotional triage can help us diagnose is feeling burned out. Burnout is a collection of emotions coupled with emotional and physical exhaustion. 
-
-Burnout can manifest itself in different ways. For some it may be the feeling of dread for working on a project. They feel like they are ineffectual in making any changes. For others burnout can be feelings of exhaustion. They feel as though they're on a treadmill that just will not stop and they wanted to stop a long time ago. Burnout can also manifest in feeling creatively drained, where imagining a different future is difficult and nothing that you do is interesting.
+One thing that our emotional triage can help us diagnose is feeling burned out. Burnout is a collection of emotions coupled with emotional and physical exhaustion. Burnout can be something as simple as being bored or overworked but it can also be the sign of something more serious. Burnout can lead to physical or mental complications if we're not careful. We can work ourselves into serious levels of exhaustion and delude ourselves into thinking it's part of the price we have to pay as programmers.
 
-Burnout can be something as simple as boredom or being overworked but it can also be the sign of something more serious. Burnout can lead to physical complications if we're not careful. We can work ourselves to exhaustion and think that's just part of the price we have to pay as programmers.
+Burnout manifests itself in different ways. For some it may be the feeling of dread while working on a project. They feel like they are ineffectual in making any changes. For others burnout can be feeling exhausted. They feel as though they're on a treadmill that just will not stop. Worse, they wanted that treadmill to stop a long time ago. Burnout can also manifest in feeling creatively drained, where imagining a different future is difficult and things you used to find inspiring or interesting no longer generate that spark.
 
-Burnout is tricky to self-diagnose because it is a collection of seemingly unrelated emotions. Our feelings of boredom, fear, exhaustion, and anxiety can all have different root causes, but when we couple them together with unrelenting working schedules we amplify them. Left unchecked and unexamined we can lead ourselves into places where we don't want to program anymore. We can cause ourselves more undue suffering by just "powering through it" which can lead us to compound our emotional state.
+Burnout is tricky to self-diagnose because it is a collection of seemingly unrelated emotions. Our feelings of boredom, fear, exhaustion, and anxiety can all have different root causes, but when we combine them with an unrelenting working schedule and loss of control we amplify those feelings. Left unchecked we can lead ourselves into trying to numb out those feelings. We find ourselves not wanting to program anymore, and resent ourselves for ever getting into programming in the first place. We can cause ourselves more undue suffering by just "powering through it" which can lead us to compound and complicate our emotional state.
 
 There are some things we can do to understand and help alleviate burnout:
 
-1. Realize that we're burned out, or about to burn out. Acknowledging that we're about to burn out is key to not experiencing the burnout. That seems simple enough but we tend to realize it when we're in it. If we can recognize that we're about to burn out then we can take measures to avoid it. And if we realize that we've burned out we can take measures to be kind to ourselves and help ourselves out of this burned-out state.
+1. Realize that we're burned out, or about to burn out. Acknowledging that we're about to burn out is key to not experiencing the burnout. That seems simple enough but we tend to ignore the symptoms when we're nearing the throes of burnout. If we can recognize that we're about to burn out then we can take measures to avoid it. And if we realize that we're burned out we can take measures to be kind to ourselves and help ourselves out of this burned-out state.
 1. Examine our emotions. Sit for a while and see what emotions come into view. Are we feeling stress, fear, anxiety, nervousness, or anger? See what feelings emerge and recognize these feelings. Examine where these feelings are coming from and what might be triggering these emotions.
-1. Re-negotiate our commitments. Many times burnout is the result of overcommitment, whether to others or ourselves. We have too much to do and despite our best efforts we can't meet the obligations. Perhaps they were too aggressive, or something caused the world to change when the plan was made. Whatever the reason we may need to re-evaluate what is expected of us and what we are capable of doing. And if we see that we've created an intractable situation for ourselves then we need to figure out how to cut away some of these obligations.
-1. Give our drive a rest. Unlike our mechanical counterparts we need downtime and rest. We can't work a straight 8 hours without at least some moments where we aren't working. Programming demands a lot of mental bandwidth and pushing ourselves to exhaustion can lead to emotional instability, stress, and burnout.
-1. Examine if this is truly how we want to live our lives. We need to be aware if what we're doing is really what we want to be doing. If we're not happy doing this then every moment we do this can compound our feelings of unhappiness. If we look deep in ourselves and feel nothing but dread for our current situation then we may need to renegotiate our commitments. That can be something as simple as agreeing not to learn something right now, or can be as complex as taking on different work or changing careers.
+1. Re-negotiate our commitments. Many times burnout is the result of over commitment, whether to ourselves or others. We always have too much to do and despite our best efforts we always meet all of our obligations. Perhaps the plans we made were too aggressive, or something changed in the world that disrupted our plans. Whatever the reasons we may need to re-evaluate what is expected of us and what we are capable of doing. If we see that we've created an intractable situation for ourselves we need to figure out how to cut away some of these obligations or re-negotiate them.
+1. Give our "drive" a rest. Unlike our mechanical counterparts we need downtime and rest. We can't work a straight 8 or more hours without at least some moments where we aren't working. Programming demands a lot of mental bandwidth and pushing ourselves to exhaustion can lead to emotional instability, stress, and burnout.
+1. Examine if this is truly how we want to live our lives. We need to be aware if what we're doing is really what we want to be doing. If we're not happy doing this then every moment we continue doing this can compound our feelings of unhappiness. If we look deep in ourselves and feel nothing but dread in our current situation then we may need to renegotiate our commitments. That can be something as simple as agreeing not to learn something right now, or can be as complex as taking on different work or changing careers.
 
 By understanding that we're headed toward burnout (or are burned-out already) we can take measures to course-correct so we can approach our programming practice with joy and enthusiasm. Sometimes taking a step back and re-evaluating what we're doing can help us not sit in the constant loops of frustration, anger, and guilt. Changing our story to better fit reality can keep us from trying to match an impossible dream. 
 
-You will experience burnout in your programming career. Things will come at you that will overwhelm your ability to cope with them. You will find yourself stuck in loops wondering if this is really what you should be doing. Understanding what you're feeling and acknowledging your feelings as valid is the first step to changing the course from one of burnout and stress. Programming shouldn't be drudgery (no work should be drudgery). There should be something in your programming day that keeps you motivated, and helps you grow your skills. Adding bits of learning, joy and wonder (along with periods of downtime) will help sustain you through the emotional turbulence that awaits.
+I mentioned above about re-negotiating commitments. Often we'll get ourselves into situations where we have way more to do than is physically possible, even under the best of circumstances. This may be in part because we've said "yes" to too many things, or may be because we're being swamped with outside work commitments (a large high priority project, or several smaller projects that need urgent attention). The best way to renegotiate your work load is to review your work load and notice which ones feel more urgent and which ones feel important. Note which ones fall into those two categories. Next mark the due date (as best you can) of each of these tasks. If you have more than three urgent and important items and they're due later this week then it's likely you're being overworked and will want to renegotiate those commitments. You may think that you should be able to do all of these things but if you're already feeling stressed, tired, and burned out then you'll only compound those feeling by trying to meet these deadlines. If you can see if you can move some of these deadlines to next week, or check with your customers if these are really as urgent and important as you think they are. If they are then see if your management can assist you with other resources, or intervene to renegotiate these deadlines and priorities. If you're truly stuck (management won't budge and the customers are firm with this commitment) then you have some decisions to make about how important their priorities are versus your own capabilities. There's the temptation to say that your management and your customer's priorities are more important but your own health and well-being should have more weight in your decision than their priorities and deadlines. Perhaps you can negotiate some down-time after this period so you can rest, relax, and regain your strength and mental acuity before being plunged into a similar situation.
+
+It's also cliche to say "learn to say no", but this is an important skill as a programmer. Too often we think of ourselves as super-beings that can do anything because the computer can do anything. But we have finite physical and emotional resources, so learning to pick and choose the projects that are most important to us (depending on our own internal criteria) will help sustain us as we progress in our programming career. If we say "yes" to everything that is pitched to us then we'll have less time to work on the things that really matter to us. We'll be at the whims of external folks whose priorities and desires may not match our own. The most effective way to burn-out on programming is to spend all of your energy working on projects that don't match your own desires and priorities. 
+
+You will experience periods of burnout in your programming career. Things will come at you that will overwhelm your ability to cope with them. You will find yourself stuck in loops wondering if this is really what you should be doing. Understanding what you're feeling and acknowledging your feelings as valid is the first step to changing the course from one of burnout and stress. Programming shouldn't be drudgery (no work should be drudgery). There should be something in your programming day that keeps you motivated, and helps you grow your skills. Adding bits of learning, joy, and wonder (along with periods of downtime) will help sustain you through the emotional turbulence that awaits. And recognizing when you're burning out and renegotiating your agreements with yourself and others can help reinvigorate your desires to keep programming.
 
 ## Giving up
 
-Programmers don't like to think about giving up. We work on machines that have so many possibilities that we feel we should be able to make things work. But sometimes we can't see those possibilities. Sometimes we look at the list of things we should be learning and wonder if it's all worth it. We look at lists of job prospects and see nothing but meaningless work. Students ask us what it's like to be a programmer and we wonder if it's OK to crush their dreams this early in their careers. The joy that sustained us into learning the craft disappears and we're left wondering if we will ever cultivate that feeling again.
+Programmers don't like to think about giving up. We work on machines that have so many possibilities that we feel we should be able to make anything work on them. But sometimes we don't want to see those possibilities. Sometimes we look at the list of things we should be learning and wonder if it's all worth the effort. We look at lists of job prospects for our set of skills and see that the only fit for those skills is nothing but work that we find meaningless. People who are learning to program ask us what it's like to be a programmer and we wonder if it's OK to crush their dreams this early in their careers. The joy that sustained us into learning the craft disappears and we're left wondering if we will ever cultivate that feeling again.
 
-Programming isn't for everyone. There are times when I've wondered if I should be working as a programmer. I feel as though I can't learn everything that I need to know, and wonder if what I'm learning will not matter because in 10 seconds everything out there will have completely changed. I struggle looking at job positions that seem like they won't matter in 3 years, let alone 100. I feel like the computing future I was promised never happened and we're stuck in a world where computers are little more than levers for companies to pry open the wallets of their customers.
+Programming isn't for everyone. There are times when I've wondered if I should be working as a programmer. I feel as though I can't learn everything that I need to know, and wonder if what I'm learning will still be relevant by the time I'm finished. Will I be able to compete in a job market where I feel like everyone has a head start? I struggle looking at job positions that offer work that I don't think will matter six months from now, let alone 10 to 100 years. I feel like the computing future I was promised was corrupted and we're stuck in a world where computers are little more than levers for companies to pry open the wallets of their customers.
 
-It's easy to become fatalistic about the practice of programming but I've realized that there's more to computing and programming than what I see in the job market. 
+It's easy to become fatalistic about the practice of programming but I've realized that there's more to computing and programming than what the job market has to offer.
+
+### FIXME
 
-Part of the joy of programming is the curiosity. If we can continually tap into that curiosity then we have so many avenues to explore.  From game programming to some of the more esoteric languages there are always topics and ideas to discover. What the job market uses is but a fraction of what is out there. There's also a whole host of emulators and retro-computers available with good documentation. One of the things that I'm curious about is how older computers work. But there are also newer, lower-powered machines out there in the embedded space that are fascinating to look at and understand.
+Part of the joy of programming is the curiosity. If we can continually tap into that curiosity then we have so many avenues to explore.  There are always topics and ideas to discover, whether that is game development, esoteric languages, or other programming paradigms. What the job market uses is but a fraction of what is out there waiting to be explored. There's also a whole host of emulators and retro-computers available with good documentation and vibrant communities. One of the things that has intrigued me is how older computers work. Older computers are simple and can learned rather easily with the right mindset. They are well-understood and older programs were generally put together by one programmer. There are also newer, lower-powered machines out there in the embedded space that are fascinating to look at and understand, and can be simple enough to be understood by one person.
 
 But there can also be the realization that there's no joy left in programming. The thought of programming no longer excites us and even the thought of trying something new fills us with dread. We no longer want to even try. What then?