This is a post in our Your Django Story series where we highlight awesome ladies who work with Django. Read more about it here.
Jess Hamrick is a graduate student in the Psychology department at the University of California, Berkeley. Her research involves writing programs to mimic human behavior in order to understand how people reason about the world. She’s been an avid Pythonista since 2008, and uses it in nearly every aspect of her research.

Before I was born, my parents were both programmers, and although they changed professions when I was very young, we still always had computers in the house. For whatever reason, I was always drawn to our computers, and one of my earlier memories is sitting on my mom’s lap and playing with a vector graphics program called Corel Draw. I was fascinated that you could draw shapes and fill them with so many different patterns!
A few years later, I discovered video games. In particular, I had my heart set on a Game Boy, so that I would be able to play the new Pokemon video game. My parents disapproved of video games and refused to let me have a Game Boy, but they did tell me that if I created my own game, I could play it as much as I wanted. That was certainly motivator enough for me!
I never actually created the video game I wanted, but that challenge set the wheels in motion. In middle school, I learned HTML and CSS and created all sorts of websites for me and my friends. In high school, I started taking programming classes, and I eventually went on to major in Computer Science in college.
You could arguably say I’ve been a programmer for most of my life, so not very much! I did go through a period of time as a kid when I was certain I would grow up to be an ant scientist.
I love figuring out how to break a problem down into its constituent parts, implementing those pieces and then finding the right way to put them back together. To me, coding is a bit of an art form: there are many ways to build something, but some of those ways are more beautiful and elegant than others. Many times when I solve a problem, I’m left with the feeling of, “there really ought to be a better way to to do this…”. But then at other times, I manage to solve something in a way such that when I look at my solution, it just feels right*. Like, “of course that’s the way to solve it, why did I think there could ever be a different way?” Figuring out how to get from the first type of solution to the second is incredibly challenging, but also incredibly rewarding for me when I manage to finally get there!
*Side note: I don’t actually think code can ever truly be “right”, and usually when I come back to code that feels “right” after a few months or years, I no longer feel that way about it. But, to me, it’s the feeling at the moment that matters, rather than the objective truth of “rightness”.
While I was an undergraduate, I lived in a coop, and every semester we’d have a “work week” or “work weekend” where everybody pitched in to keep the house functional. During one of these work weekends, I was tasked with organizing the hundreds of books scattered about the house. We started cataloguing them, but I realized that it wouldn’t do us any good to catalogue them if we then couldn’t easily search that catalogue. So, I started building a Django app to make it easy to add new books and search for existing ones. Django seemed like the clear choice because (1) Python was (and still is!) my language of choice and (2) I knew I was going to need something building on top of a relational database. I didn’t actually know very much about databases at the time, though, so it was a great learning experience for me!
Since starting graduate school, I’ve become increasingly involved with the scientific Python community. In particular, I’m heavily involved in the IPython and Jupyter projects. The Jupyter notebook is a coding environment that runs in your browser and mixes together code, text, and images, making it perfect for anything requiring interactive code or data exploration. In particular, it’s great for class assignments, because you can alternate between text giving instructions and coding exercises within the same document. For the past year I’ve been working on a project called nbgrader which is a tool for grading assignments in the Jupyter notebook. It’s been used in only a few classes so far (mine included), but I’m excited to see other people starting to pick it up as well!
This past spring, I was a teaching assistant for a class on computational cognitive science. We created assignments in the Jupyter notebook, and to give our 200+ students access to the notebook, I set up a cluster of servers for the class. This enabled students to just go to a website, login, and use the notebook, without having to install anything themselves. This was a massive undertaking, requiring me to learn all about tools like Docker and Ansible which I’d barely heard of before. Somehow, though, I managed to pull it off, and it worked remarkably well! It was an incredibly fun project to work on, and I think it really improved the experience of our students as well.
As someone who considers herself both a scientist and an engineer, there’s a lot! On the science side, I want to know how people how people think and reason about the world. On the engineering side, I’m interested in building tools that enable scientists to do better science.
As a graduate student, I don’t have a ton of free time. Most of the free time I do have, I spend contributing to open source projects like IPython. I also enjoy games (of both the board and video varieties) and biking around the Bay Area.
Find a project that you’re really excited about and try to tackle that. Programming tutorials are great, but they’ll only get you so far: to really move forward as a programmer, you need a problem that drives you and that you’re really motivated to solve. If you don’t know how to get started with the problem you chose, try focusing on just one aspect of it. Keep whittling down your goal in this way until you have stumbled on something that you know how to solve. Once you’ve solved that piece, you can start working your way back up in complexity. This process is actually the way that most programmers tend to tackle problems: find the simplest piece of the puzzle that you do know how to solve, and go from there. Most importantly, don’t give up!
Thanks Jess! :)