Read Latex

Friday, January 04, 2019

Computing and the Future HW 1 - Too Many Languages




An interesting course at the University of Arkansas, led by Dr. Jared Daniel Berleant is Information, Computing and the Future. Homeworks are submitted via blog, and lectures dating  back to 2012 are archived, which helps getting oriented to the material.

There is an assertion in these archived notes that programmer productivity is increasing for various reasons. The exact phrase that captured my interest is "Increased Programmer Productivity" or IPP for short. I want to to assert the existence of some mitigating factors to make the case that programmer productivity is decreased over what it might be due to the paradox of "too many choices", which manifests as:


  • too many languages
  • too many Interactive Development Environments
  • too many target architectures

The Tiobe language index lists 18 languages whose penetration exceeds 1%. Assuming there is an Interactive Development Environment for each language we have 18 IDE's. This is a conservative estimate. Enumerating target architectures we again can conservatively estimate 18 from this StackOverflow list. In the worst case this leads the programmer to a minimum of 183 "choices" or 5000+ things to be "good at". Obviously this is all somewhat contrived, since programmer's specialize and there isn't a separate IDE for each language, but how do programmers reassure themselves they have specialized in the best language+IDE skillset? At 182, there are over 300 combinations, and learning a language and IDE takes some time, say a year, to master. If you don't have 300 years lying around check out some favorable candidates below.

I am interested in the overhead that occurs when we create codes that are illustrative, informative, provable and self-explanatory. The Explainability Problem in AI is an example of this. Addressing this has become the law in the EU. Brexit anyone? A hot topic in machine learning research is hyperparameter optimization. Briefly, how does one choose the activation function (the neuron response), the learning rate, the optimal partition between training set and test set, etc. to create the fastest learning and best performing AI? Speaking of this:
To see hyperparameters and neural networks in action, visit the TensorFlow neural network playground. Academic excursion question: Bayesian Learning is known to be effective, but combinatorially expensive. Can it be shown that in the limit of sufficiently exploring the parameter space, that hyperparameter optimization is effectively just as intractable, because of the number of configurations that must be explored? 





Another thing I am interested in, and the main focus of this entry, is how we bring people into our train of thought, into our line of reasoning, as seamlessly as possible. We document our thoughts, communicate them, run simulations, and perform mathematical analyses to make statements about the future and the limitations that we have in predicting it1. Some tools (and their requisite URLS) that assist in this process are:


  • Blogger for creating running Blogs in the Cloud
  • Scrimba for Teaching/Demonstrating Algorithms in Vue.js
  • JSFiddle for Teaching/Demonstrating Algorithms in JavaScript
  • Jupyter Notebooks for running Machine Learning in Python
  • MyBinder for hosting deployed Jupyter Notebooks

The links above can be run for brevity, the discussion below enumerates some of the issues they raise or address.

Blogger

Blogger is an adequate blogging platform, enabling the inclusion of links, images, and videos such as the opening one above. The link provided above compares blogger.com to several competing platforms. It's not particularly futuristic per se, but it is better than paper or email. I would include an illustration, but this very page serves that purpose very well. It has been somewhat "future-proof" for the past few years anyway. It does the job, so no further commentary is necessary.

Scrimba

This system overcomes weaknesses in passive video tutorials. The architects of Scrimba wanted a system that would engage the student, that would let them make the rite of passage from student to contributor rapidly, and that would reduce the overhead of learning by enabling instant interaction with the code for the example at hand. The strong suite of Scrimba is currently its tutorial on Vue.js, that enable dynamic programming of graphical user interfaces via JavaScript, in html pages. The Scrima: Vue: "Hello World" example narrated by Per Harald Borgen is the perfect example of making the sale before the customer even realizes they've been sold. Per's intro leads to a more detailed exploration of Vue that actually does useful work, facilitated by Zaydek Michels-Gualtieri. Between these two tutorials one can learn the basics of Vue.js in a little over an hour. This makes the case FOR increased programmer productivity (IPP). However, the advent of yet another language and IDE adds yet another choice to the implementation mix, a mitigating factor AGAINST IPP.




Note 1: If programming were a crime, we could speak in terms of aggravating and mitigating (extenuating) circumstances that would enhance or reduce the programmer's guilt and corresponding sentence.

Note 2: According to my offspring, a powerful development trifecta is created when  Vue.js development is combined with Google Firebase user authentication and  Netlifly, a platform for deploying applications.


JSFiddle

Byte-sized proof of concepts for functions, hacks, tips and tricks. JSFiddle simultaneously shows the html, css, and javascript in three separate INTERACTIVE windows, along with a main window where the html markup, css stylesheets and JavaScript code are executed in the browser to show the outcome. JSFiddle lives on the web, in the public cloud so that anyone can contribute. Scrimba improves upon this concept by enabling the user to grab control of the session and the code at anytime during the presentation, pausing the narrator, saving past states and audio recording by the same user, who can eventually narrate their own content.




Jupyter Notebooks

"Writing code that tells a story." I include this because Python 3 programming in Jupyter has become the lingua franca of information exchange in the current machine learning (ML) revolution. The Tiobe index, cited above, has declared Python to be the language of the year for 2018! One can obtain both Jupyter, Python 3, and a host of useful libraries like numpy, scipy, and pandas from the Anaconda consortium, a useful one-stop shop. It is worth noting that these codes are evolving very rapidly, I have to check my pandas version as we speak. An important feature of Jupyter Notebooks is platform independence, they run on Windows, MacOS Unix, Ubuntu Linux, etc. Further this platform is not "owned" by a company, like the disastrous ownership of Java by Oracle, or that of C# by Microsoft.
The video link claims that Java is supported, but I find such support tenuous at best. Kotlin is supported at an alpha level, and since the terser Kotlin compiles into Java, indirect support is implied.

It is worth noting that Jupyter can run 100+ different kernels, or language environments. So the general idea of a working lab notebook that runs on a local server has really taken off and thus is the wave of the future. I like the relative permissiveness of the local sandbox, compared to Java development, and the fact that results can be reproduced by any other investigator with a Jupyter Notebook setup. I also like the "bite-sized" morsel of a Jupyter notebook that can focus on a single problem, in the context of a greater objective.







1 Who doesn't love a good footnote? I hope to amplify notions of the thermodynamics of trust, showstoppers and such in future entries to this chain.

No comments: