Ready to take on a challenge?


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 (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.


One response to “Ready to take on a challenge?

  1. I would recommend look at Get Started Learning SQL The articles on that page are in order and will take you from learning simple queries to complex joins. Along the way you’ll learn about database concepts such as normalization.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s