Taking The Deep Dive At A Hackathon

Ben Greenberg - Dec 4 '17 - - Dev Community

As a developer new to the field you might have spent time building out projects for your coding bootcamp or other program. You might have done some pair programming with fellow students. Maybe you took the initiative during Digital Ocean and Github’s Hacktoberfest to lightly get involved in some open source projects and submit a few pull requests. Then you decide to attend your first all day hackathon and dive into the deep end of an organization’s codebase. That is what happened to me this past Sunday and it was exhilarating.

I walked away from the day with the confidence that I could clone a codebase for a project I’ve never seen before, spend some time looking it over and proceed to make valuable contributions to the work. Prior to the hackathon I certainly knew that was possible, but now I know it definitively.

At the Progressive HackDay event I pair programmed with another developer on a production Ruby on Rails web application for the New Sanctuary Coalition of New York City. My partner was a seasoned and awesome developer, but new to to the Ruby ecosystem. I am a new developer, but well acquainted with Ruby. Together we complimented each other in the work and made great progress on the tasks at hand. I believe it also helped break down the false dichotomy between more senior and more junior developers. Both junior and senior developers are constantly learning and both have knowledge and skills to share with the other.

What are some of the key takeaways for me from the hackathon?

This is possible. Yes, you can!

As mentioned earlier, walking into the day I had never seen the project I would end up working on before. I knew about the critical work of the organization from my previous career, but had never peeked at this codebase. Within less than an hour, I went from downloading a local copy of the repository to working on an issue. That was very affirming. This is possible. This is achievable.

What was particularly awesome about this phase was encountering code I did not know before. The developers behind this project built a beautiful and elegant application. There were keywords in ActiveRecord that I was not familiar with, which would have saved me time in my own projects if I had known about them! For example, :dependent lets you specify associated records that should be deleted when the primary record is deleted. That is a great way to keep your code DRY and accomplish multiple things at once.

Pair Programming Is The Best

Prior to the hackathon I had not spend a lot of time pair programming. The entirety of the day I collaborated with another developer and it was fantastic. It reminded me of the years I spent in yeshiva, where the educational method is to learn in pairs (havruta [חברותא] in Hebrew) for most of the day. There is a dynamism to learning with another person. The opportunity to grapple with the ideas with another live person in front of you is incomparable. The same invigorating experience for me transpired yesterday during the pair programming.

Should we structure the method this way? What’s the best way to query the database for this item? Does this gem do what we need it to do? How might we build some custom error handling for this?

While solo programming you are in a conversation with yourself on these sorts of questions. You try it out, see what happens and move forward. Sometimes (or often) you might even venture to Stack Overflow and see what those in the community write about it. While pair programming you can ask those questions out loud and another person responds in real time. You bounce your ideas off of each other, iterate over them and achieve even better results because of it.

It doesn’t even matter that much if you are coming from different skill levels. Your partner may be a junior developer with lots of experience in Python and you may be a senior developer who knows Java like the back of your hand, but if the project is in Python that junior developer will be able to share a lot on how to move forward. It’s less about the different skill levels you bring and more about the willingness to be in constant conversation with each other to make beautiful code.

With Great Power…

… comes great responsibility.

People often talk about all the incredible things that can be accomplished with coding. The world runs on tech and that steady digital march forward is not turning back anytime soon. To be conversant in the language of technology is to be empowered to be a real agent for good in this fast evolving world. That is the rhetoric. At the event I got to experience it firsthand.

I didn’t contribute any groundbreaking code to the project. I mainly worked on a couple outstanding issues and provided solutions to them with my pair programming partner. Yet, it is impossible to ignore the larger context. We were working on a web application to make it easier to connect immigrants with volunteers to help them in their multitude of court proceedings and paperwork. As the grandson of refugees I couldn’t help but feel the weight of responsibility in this work.

That morning I woke up and performed my regular Sunday early morning routine. I made myself a cup of coffee and read the newspaper. I get a paper copy on the weekends because I still love the feel of the newspaper between my fingers. The crinkling of the pages and the act of folding it as I progress through the content. Unlike most weekends where I read the paper, digest the latest news and move on, this past weekend, I was able to make a small difference in an area of critical importance in this moment in our country and in the world. That is because I learned the language of technology at The Flatiron School and I have the privilege to be able to apply it.

Will I attend another hackathon? Absolutely! Who knows what good will be accomplished at the next one?

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .