More editing
authorCraig Maloney <craig@decafbad.net>
Sun, 5 Aug 2018 13:42:29 +0000 (09:42 -0400)
committerCraig Maloney <craig@decafbad.net>
Sun, 5 Aug 2018 13:42:29 +0000 (09:42 -0400)
chapter01.md

index 12c99a58fd3b5b28ed6c42698cde50a1090de24b..19964e3c46f597ec9535ff2af4d63b114ab172eb 100644 (file)
@@ -23,15 +23,15 @@ Change can also come from within our community. Our community of developers and
 
 Change can lead to stress. Stress is prevalent in programmer circles because things are often changing. What worked on Friday afternoon can be broken on Monday morning because of a change to a library that we were using. Our development environment could break because of an upgrade that didn't apply properly. Production might need security fixes and those fixes mean we have to redo a major piece of our software because it no longer works. There are plenty of ways in which we are kept in a cycle of change.
 
-Not all change is because of bad events happening. The software that we use could have very good reasons for changing. New features can be introduced that require new ways of thinking about your code. Security fixes may mean that our systems are more resilient to outside attacks, but require different ways of using that system. New optimizations may lead to our code running faster but need a few tweaks to take advantage of those speed benefits.
+Not all change is because of bad events happening. The software that we use could have very good reasons for changing. New features can be introduced that require new ways of thinking about your code. Security fixes may mean that our systems are more resilient to outside attacks, but require different ways of using that system. New and better optimizations may lead to our code running faster but need a few tweaks to take advantage of those speed benefits. A refactor of an API can lead to cleaner and more concise ways of interacting with another system, but those changes are not backward-compatible with current code. Change can be positive.
 
-But change requires time and effort in order to adapt to it. The gap can only be closed if we have the resources and time to work on it.
+But change requires time and effort in order to adapt to it. The gap can only be closed if we have the resources and time to work on it. If we're struggling with our current workload and someone changes how something works we now have to budget our time to adapt to that change. If our mental-muscle-memory knows how something works and that has significant change it requires us to re-train our mental model of how that thing works. And if you're already feeling like you don't understand the systems and environment that you're working on then adding additional change can leave you feeling stranded among the newly-formed gaps in your knowledge.
 
 ## Closing The Gap
 
-I'd love to tell you that there's a way to close the gap; a way to say you've learned it all and can feel confident that you have mastered programming.
+I'd love to tell you that there's a way to close the gap; a way to say you've learned it all and can feel confident that you have mastered the totality of programming.
 
-Sadly I haven't found a way to close that gap.
+Sadly I haven't found a way to close all of the gaps.
 
 You can keep learning everything there is to know about whatever topic you've chosen to learn. You can take every course available. You can attend every talk and colloquium, read papers about the subject, and even do your own research and you can still feel like you haven't closed the gap.
 
@@ -39,19 +39,21 @@ So if there's no way to completely close the gap what can you do?
 
 There's three options available to you:
 
-The first option is to not try. Realizing that there will always be more to learn can be disheartening so it's easier to just tell yourself that you'll never be able to close the gaps in your knowledge so why even bother with it.
+The first option is to not try. Realize there will always be more to learn. Why bother? It's easier to tell yourself you'll never be able to close the gaps in your knowledge. The best option, you tell yourself, is to stick with what you know and ride that out as long as you can. 
 
-The second option is to try and become frustrated when you realize how much further you have to go. You'll grab every book, blog post, paper, video, or what-have-you to try to learn the topic and then realize that even with all of that you have a finite amount of time to learn the topic. You'll get frustrated that you didn't figure out that you needed to close this gap sooner and you'll look over your progress and see how much further you need to go.
+The second option is to try and become frustrated when you realize how much further you have to go. You grab every book, blog post, paper, video, or what-have-you to try to learn the topic. Then you realize that even with all of that you have a finite amount of time to learn the topic. Next comes the frustration that you didn't figure out that you needed to close this gap sooner and as you look over your progress you despair at how much further you need to go.
 
-The third option is the more measured approach. You'll start small with small tasks and work your way toward the goal. Rather than look at the gap as something to be closed you'll realize that you can't know the totality of whatever topic you're learning and instead enjoy the knowledge that you receive in its pursuit. You'll keep a steady pace toward learning as much as you can but instead of lamenting that you didn't start sooner you'll be glad that you started at all.
+The third option is the more measured approach. You start small with small tasks and work your way toward the goal. Rather than look at the gap as something to be closed you realize that you can't know the totality of whatever topic you're learning and instead enjoy the knowledge that you receive in its pursuit. You keep a steady pace toward learning as much as you can. Instead of lamenting that you didn't start sooner you're glad that you started at all.
 
 Of these three options the first and third are the ones where you'll find the most contentment. The first option (not trying) allows you to sit with the knowledge you have. But there's a downside to just staying in place. Our industry is constantly changing and technology continues to move. What used to be the norm becomes legacy and what was just around the corner becomes the thing that is in demand.
 
-One of the most useful skills of a developer is the ability to adapt to new technology. As our technological environment changes our ability to adapt to those changes allows us to continue on as developers. Faster machines, different technologies, different devices, different requirements; each of these things brings us exciting challenges if we recognize them. But they also take time to learn and create gaps in our knowledge. So relying on our previous knowledge to carry us through these changes isn't going to be enough. We're challenged to adapt to the new surroundings.
+One of the most useful skills of a developer is the ability to adapt to new technology. As our technological environment changes our ability to adapt to those changes allows us to continue on as developers. Faster machines, different technologies, different devices, different requirements; each of these things brings us exciting challenges if we recognize them. But they also take time to learn and create gaps in our knowledge. Relying on our previous knowledge to carry us through these changes isn't going to be enough. We're challenged to adapt to the new surroundings.
 
-The second option (becoming frustrated) is the least optimal path forward. Trying to learn quickly by grabbing every available resource and jamming it into our brains is a way to frustration, fatigue, and burnout. Many developers try to do this because they see they need to adapt to the new environment but it's difficult to make sweeping changes all at once. And measuring your progress by how much further you feel you need to go means you discount the progress you've made.
+The second option (trying to cram and becoming frustrated) is the least optimal path forward. Trying to learn quickly by grabbing every available resource and jamming it into our brains is a way to frustration, fatigue, and burnout. Many developers try this because they see they need to adapt to the new environment but it's difficult to make sweeping changes all at once. This also leads to measuring your progress by how much further you feel you need to go. It discounts the progress you've made, and creates an endless cycle of running toward a moving finish line.
 
-Of those three options it's the third option that makes the most sense. Taking a more measured approach to closing the gaps in our knowledge allows us more joy in our learning process. By breaking down each of the steps on our journey we give ourselves little wins along the way. Instead of expecting a grand transformation we allow ourselves gradual changes and mutations to adapt to our environment.
+### FIXME
+
+Of the three options it's the third option that makes the most sense. Taking a more measured approach to closing the gaps in our knowledge allows us more joy in our learning process. By breaking down each of the steps on our journey we give ourselves little wins along the way. Instead of expecting a grand transformation we allow ourselves gradual changes and mutations to adapt to our environment.
 
 With this measured and gradual approach we also gain the wisdom that gaps don't have to be closed. We can allow ourselves to keep learning in the areas that we need to and gradually build up our skills. We can realize that closing the gap is an illusion. We can only become more expert in whatever topic we chose to learn.