I have thought a lot about why I want to be a software developer over the past six months, partially because the application and interview process at Ada necessitated that I do this, but also because I wanted to be very thoughtful about taking this step toward a new career. Since I announced that I will be changing careers and starting at Ada in August, friends, family and coworkers have been unbelievably supportive and excited for me, and in their curiosity about my new path, they have asked me questions like, “Why software development?” or “Does school psychology relate in any way to what you will be doing next?”. These questions and others have led to me realize that the general public doesn’t really know much about software development and what it is, let alone how it might compare to my current career. There are surprisingly many parallels between school psychology/education and software development/technology, from the way problems are approached and solved to the way that collaboration is encouraged. There are also some key differences that I want to talk about, that might illuminate further why I made this career change – I decided to cover these in a future post.
As a school psychologist, one of the basic tenets of my practice is the use of a problem-solving model. This is basically day one of grad school (and almost every day after that…) and it has been the foundation of my work in this field – whether is with students, teachers or bigger multi-tiered systems of support like Response to Intervention or Positive Behavioral Interventions and Supports. It has also filtered into my daily life through goal-setting and evaluation, Bullet Journaling, and habit tracking (check out my CHERPAS system). It has basically been my whole life for the past 8 years. Here is a technical definition that I think explains it pretty well – the problem-solving model is a data-driven feedback loop that uses a systematic approach to assist in making decisions about the quality and effectiveness of interventions for children who are struggling in school. Although the exact nature of the model varies according to the practitioner’s orientation and values, there are four basic questions that serve to guide us: “What is the problem?”, “Why is the problem occurring?”, “What should be done about it?” and finally, “Did it work?” So far, this is so very similar to writing code. To complete my program for the Phase 3 application process for Ada, I found I followed a process of researching and learning, trying a piece of code, testing it, and then making refinements until I got close to what I wanted to accomplish. Then I did this over and over again for every small “problem” I encountered when writing my program. I love this way of approaching problems at home and at work, which is probably why I have so quickly become enamored with programming.
Second, from everything I have seen so far, the tech world strongly favors collaboration. Through my work as a school psychologist, the primary part of my job is collaboration with others – with teams, teacher, administrators, families. I do this through all kinds of team meetings, trainings, collaboration sessions, and consultative relationships. My meetings often involve sensitive, highly charged topics like making a child eligible for a disability category or figuring out how to make a plan work for a family and school when everyone has limited resources. Through this experience, I have learned that so much can be gained through collaboration and sharing of ideas with others, and also that it can sometimes be really difficult, exhausting work. I’ve also learned that listening and really hearing someone else is the core to any sort of meaningful collaboration. I love the fact that I will be able to continue to collaborate with others in meaningful ways about important problems as I transition into the tech field. Pair programming, or writing code collaboratively with others, is a huge part of many jobs in the tech field, and since this is a field that never stops changing and growing, staying updated requires getting constant feedback and information from others. This ongoing learning takes the form of in-person meet-ups, conferences, and online information-sharing (GitHub and StackOverflow), to name a few. The problems that the field of technology is solving are complex, and there no way they can be figured out by people working in isolation.
I’ve been interested in human behavior and have been curious about why people behave the way they do for as long as I can remember. That is why I initially pursued the field of psychology. Both my undergraduate and graduate programs heavily favored Applied Behavior Analysis (ABA) as a way of viewing the world and those operating within it. In my work (and in my life as a dog owner, partner, friend…), I have seen the power of this and have generally adopted it as the way I view the world. ABA is a learning theory that has demonstrated that we can change behavior by assessing the functional relationship between a behavior and its environment. For example, I am more likely to eat at home if I prep all of my food for the week. However, even if I prep all my food, if a friend asks me to go out with them, I am pretty likely to say “yes!”. Then this behavior of doing out is reinforced by the social stimulation and the delicious food I am eating, so I am more likely to do it again in the future. This is such a cool concept, and it permeates every area of our lives. Once you start to see the ways in which you and others around you are triggered or reinforced by certain environmental stimuli, your whole world opens up. I love this stuff, so I am getting a little off-track here…back to the similarities! One of the most basic concepts in Computer Science is algorithmic thinking. An algorithm is basically a step-by-step process that solves a problem. Since computers need everything to be very explicit, algorithms are very specific and detailed. One of our early practice assignments for understanding an algorithm required us to write out every single step it would take to make a peanut butter and jelly sandwich, so a robot could do it if they picked up the directions. I actually did something really similar in one of my ABA classes as a way to understand the importance of behavioral chaining, which is, guess what…pretty much the exact same thing as creating an algorithm! Specifically, it is a way to teach someone all of the individual behaviors that are a part of a complex behavior. The only difference is that after carefully designing each step required to solve a problem or engage in a behavior, the person teaching the behavior reinforces the individual responses. This may seem like a minor similarity, but again, these foundations were the basis of my work as a school psychologist, and it appears they also will be in computer science.
I hope this illuminated some of the similarities between school psychology and software development. In my next blog post, I am going to talk about some of the key differences, based on what I know thus far!