I joined Jana a couple of months ago as a new software engineer; new both to Jana and to software engineering as a profession. Prior to coming to Jana I had only worked as a high school math and computer science teacher (not counting several years as a commercial fisherman in Alaska), so I was excited to move into the business world and contemplate whether I should use composition or inheritance not merely as an academic exercise but in the course of writing code to help create a product that benefits millions of people.
I knew going in that Jana used Python for most of their backend and Java for the android mobile app. Since I was familiar with Java, had a good grasp of object oriented programming, and had dabbled in Python, I was confident that I would be able to pick up what I needed to know in order to work within the Jana dev environment fairly easily. Boy was I naive. Understanding how to use list comprehensions in Python or learning more about anonymous inner classes in Java were the least of my problems. Any code I write is written in the context of an ecosystem that is assembled from more components than I can list here and that rivals the Amazonian rain forest in complexity, but let me try to give you a sense of learning curve I faced.
One of my first tasks was to create a new dashboard to monitor usage of our app in Brazil, and for this I had to extract data from tables in Snowflake, a database system using SQL-like queries but with more flexibility for handling semi-structured data than a relational database. This required me to learn SQL and enough about relational databases to appreciate the additional features of snowflake.
The next task was to create a new table to record our HLR lookups. What’s an HLR (Home Location Register) lookup? I didn’t know either, so I took a detour to play around with the api at hlr-lookups.com (Hey, I can find out whether my friends’ cell phones are on, and what country they’re in!). To use the api required me to extend my command line skills by learning the basics of Curl (a tool for making http requests from the command line). Back to the real task: I had used Snowflake tables in my first project, but now I had to create those tables and get the data into Snowflake. For that I had to learn to write Avro schemas for Kafka and Camus, two intermediary steps for data on the way to map reduce jobs on Hadoop before reaching Snowflake.
To debug the Python code I was writing, I had to learn how to use PDB (say goodbye to sticking print statements throughout your code). But that tool doesn’t work well with code that involves emulating our database and api servers, so I also had to learn to use a system of adding various classes of log statements to my code and retrieving the output of those logs (say hello to learning a much more complicated version of sticking print statements throughout your code).
Somewhere along the way, I had to find time to learn enough about the version control system Git so I can stash work on the code branch for one project, work on a new branch to fix a bug, and resume work on the previous branch without creating unnecessary commits. As it is, between my inevitable false starts and fixing my code to comply with inscrutable formatting requirements, I also needed to learn how to use Git to rewrite the history of my pull request so no one sees the 35 commits it took to write 3 lines of code.
Once my code is merged in to production, I anxiously monitor its progress through Jenkins, our continuous deployment system. At first this felt like trying to keep an eye on one sardine in a school of sardines, as the Jenkins user interface shows my code along with the dozen other code additions at various stages in the deployment process all being handled simultaneously. It also involved silent prayers and incantations: “Please, little 3 line bug fix, please pass all the automated integration tests so I don’t have to frantically trace through the hundreds of lines of output Jenkins will spew in an almost mocking gesture to help me as I try to fix my code and avoid holding up the nine really important additions to our code written by others in the last hour that are now waiting to be deployed.”
Even communicating with my team involved a learning curve since most of our communication takes place on Slack: How do I create a link to a particular block of code I want to draw attention to? What do LGTM and IIRC mean? and most importantly, how do I insert a Giphy of people celebrating when our company receives yet another award for being a rising star in the startup world?
Are we having fun yet? After all, one our four core values as a company is “Have fun!” Well, I have to report that I am, and more than I imagined. If all this makes your head spin but also sounds exhilarating, maybe Jana is the right place for you to start your career as a software engineer as well.