Being a software developer

Vaguely, I have worked under three paradigms of software development:
  • Open Source
  • Exploratory / Academic / Data Analysis
  • Enterprise / Corporate / Industry

Open Source

Open Source Software (OSS) developers are like knight-errants.
Image from / The British Library (Source)
This metaphor is two-folded:
For the better half, they make a piece of software, often targeting at an existing problem they see in their own or others' workflows, and make it publicly available. Usually, they devote efforts into helping others who are less capable, without being asked to do so. Such are heroic deeds.
At the same time, the same knight-errants also exhibit less interest in assuming prolonged responsponsibilities to their projects: Often, repos are abandoned, ill-documented, and/or nonfunctional at all. Worse, they trust their peers with keeping their dependencies reliable to such a degree that it almost renders OSS developers ignorant: My repo didn't compile because an upstream package is broken? Not my problem!


Failed compiles might not trouble indie developers so much -- It works for me, we often hear them say. However, that would be a huge problem for a corporate setting. To tackle this problem, big companies usually organize packages in specific and strict ways. For example, at Google, all third-party packages are stored under one directory, and only one copy is allowed (source).
Besides stricter package management, enterprises also enforce higher standards of readability, documentation, testing, and project management.
It is worth mentioning that, in academia, things are organized more similar to open-source projects compared to enterprise settings.


...which brought us to the third "paradigm" I personally have experienced. In recent years, there are more and more conferences and scientific journals that nudge you towards open-sourcing your project's code along with your paper submission. In data-heavy areas, such as social media analysis, it is also recommended to publicate your datasets. I myself was part of a social science researchers' community.
Scientists, however, in no way are guaranteed to be trained coders (especially out of the scope of computer science and software engineering). To researchers' codes, reproducibility is key, and everything else seem to be safely ignorable. Those unfortunate factors include algorithm efficiency, readability, best practices, unit tests, and more. In a way, I feel that academic researchers are faithful practicers of the motto "f**k it, ship it".