Random Ideas About Programming Languages
Keeping up with current research
Being employed as an application developer limits my ability to get better at writing software. The job is a box that constrains my perspective to one codebase and the knowledge contained in one team. For 8 hours a day, I’m limited to doing the same day-to-day tasks slightly better, if I’m feeling adventurous.
For someone who once considered seeking a PhD in computer science, it’s not a great place to find myself in. Time to wander.
SPLASH is the main academic conference on programming languages. Its contributors seek to push the envelope on what programming languages can do and how well they do it. Many of the ideas presented in the conference won’t affect application developers for years.
I find it valuable to see how programming languages affect what implementation strategies are possible. It gives me a sense for how a language helps or hinders me in expressing my intent.
Concepts like foreign function interface or remote procedure call raise interesting questions about how different pieces of code could communicate. Are HTTP requests the end-all for client-server web applications? Does the intent that I express in implementation have to account for HTTP semantics? Maybe some of these new concepts can be used here.
If code editors knew more about the code being edited, they could do more to support the process. Whether its showing related code or automatically producing automated tests, more can be done.
Watching a developer crank out an application involving a database and multiple external APIs is pretty compelling. A lot of the time consuming and redundant aspects of implementing this in mainstream technologies is automated away. Dark’s editing environment also provides useful feedback about what your code does as you write it. Surely, we can take bits and pieces from Dark and use them to augment our own development experience.
This paper provides more examples of how tools can support developers in expressing their intent. From reverse engineering and making inferences about an existing piece of example code, to figuring out the general intent, to generating code that meets that general intent, this is eye-opening stuff.