18  Conclusion

We began this course with four goals:

  1. Expand your Python & general programming knowledge.
  2. Introduce data engineering and analysis techniques.
  3. Gain experience working on a team.
  4. Teach you to expand your programming skills in a self-guided way.

In ~20 weeks many of you have gone from writing your first lines of code to putting together a substantial & novel project. Even if you’d written code before hopefully you leave feeling that you’ve leveled up significantly in understanding most of the key components of a data-driven project and how to think about solving problems computationally.

You all are in this program for your own reasons, but I believe a thing that a lot of us have in common is that we see that computational skills can provide a unique amplifier on our ability to express and explore new ideas, and hopefully make positive change.

I also hope after a dozen or so constrained programming assignments that your project has helped you begin to recognize programming as the creative endeavor it is. Writing code gives you the ability to build things that haven’t been built before with minimal capital required.

To illustrate this point– think about what it would have taken just a couple of decades ago to build & present something like your projects:

There is something inherently radical about the idea that a single person can decide that a thing should exist and will it into being. This has very few parallels.

Doing More With Less

When you choose to work at a nonprofit, government agency, or start your own project as many of you will– success often depends on getting the most out of the tools and data that you have.

Some of the skills taught in this course are explicitly geared at this idea:

  • We often scrape data because other forms of collections are too expensive or cumbersome.
  • Recognizing abstractions & common patterns so that you can write less code and pick the most efficient tool for the job.
  • Finding & learning to use other people’s work in the forms of open source libraries allows you to start with the problem you have, as opposed to starting every project from square one.
  • And of course, working efficiently in small teams, and pivoting when things don’t go as planned.

To this end, a key piece of advice that will accelerate you to becoming better developers is to continue to learn your tools well.

Your tools: your editor, your debugger, git, the libraries you decide to invest in, Python and any other programming languages you acquire along the way, data structures, and algorithms.

Learn them well, stay curious about how they work so you can solve your own problems and soon those of your more junior colleagues.

For example: your editor. If you are going to use it most days, take the time to learn or configure keyboard shortcuts, install plugins that make common tasks easier, pick a color scheme and font that you don’t mind looking at for hours on end.

The most important tool is probably your language of choice. Python can take you far, and you will find there is more to learn.

Some potential next steps:

You’ll also want to get to know the libraries in your area(s) of interest well. For example:

  • Data Science: pandas, polars, scikit learn, etc.
  • Visualization: pick your favorite(s) and get comfortable enough with them so you can make a few basic plots without referring to the docs.
  • Web Dev: If you want to publish on the web, learn Django or Flask well enough that there’s little friction between having an idea and seeing it online.

Despite their importance to professional programmers, tools are typically not the focus of a CS curriculum. MIT has something called the “missing semester” that covers some of them that you might explore on your own if you’d ike to go deeper than we had time for.

A Final Reminder

Whatever you wind up doing next, remember that as important as all of these skills are– we are trying to help people. No amount of technology can do that if it is disconnected (or worse, misaligned) with the interests of the groups you are trying to serve. It doesn’t matter if you’re the most talented engineer in the world if you don’t take the time to understand the problem you’re working on. Your abstractions will miss key details and the project will fail, or do actual harm.

We live in a world where I hardly need to list examples of ways that irresponsible deployments of technology have caused real harm. We are all acutely aware of people being denied health insurance or other essential services because of “AI”, catastrophic data breaches, and social network algorithms that have divided societies and radicalized the vulnerable.

You all are uniquely situated to push for and build technology that works for people. Your understanding of technology and policy empowers you to stand up to people that think that the only reason something is dysfunctional in society is that nobody has written an app or trained an AI to solve the problem. Furthermore, by applying your technical skills, you can prove them wrong with more than words.

Forgotten wisdom from a 1979 IBM presentation.