This summer, I interned at an undisclosed software company. Without getting too specific, here’s a basic post mortem of my experience.

Things I Learned

  • Things are designed for the lowest common denominator, especially in software.
  • There isn’t enough documentation, and often the code is better documentation than the actual documentation.
  • Using source annotations to generate documentation for the end user (eg JavaDoc, JsDoc) is often easier than writing the documentation by hand (this only applies to large code bases, however).
  • Bugs in your code can be exposed by other people’s bugs.
  • The mathematics involved with mapping software is far more complex than it seems.
    • The jargon in mapping is complex and overwhelming to beginners
    • The same applies to rendering software too.
  • Virtual environments in Python are useful, and you should use them.
  • Complexity actually is a problem in software.
  • What matters is the solution, not necessarily the path to the solution.
  • Planning and communicating with teammates goes a long way.

Things I Did

  • I built libraries according to my superior’s specifications.
  • I read hundreds of pages of documentation for libraries and programs that I had never heard of before.
    • Good documentation is often long and verbose.
    • The same applies vice-versa.
  • I read specifications for protocols and formats to determine the best way to utilize said standard.
  • I found solutions to problems I never thought I’d have.
  • Sometimes I reinvented the wheel so I could have fewer dependencies.

Things that Sucked

  • The rage from dealing with JavaScript that just wouldn’t work was terrible. I need to walk away from these problems instead of going insane.
  • Compile times (for an interpreted language?!?!) for JavaScript were terrible. Some people say that bundling ≠ compiling; to them I say: look at the pre-computing definition of compiling.
  • Sometimes the room was too cold.
  • Windows 10
  • Transporting, serializing, and moving data from one format or library to another without forethought is a mess. Never again.
  • Asynchronous Python is great if you know what you’re doing; I didn’t know what I was doing for most of the time.
  • I had cognitive dissonance for writing JavaScript after bashing it for so long.

All in all, it was a pretty good experience - I learned quite a bit, and I earned some dough. Not too bad for a college student.