There are a lot of interconnected components. Too many it can be argued. This article is an argument for this.
It is very convenient to leverage others code. Additionally, it is convenient to let others host the code that our applications rely upon. This is fine, even great, in school. But in the real world™ there are consequences.
Xkcd is, of course, brilliant. This perfectly captures Haskell.
Many refer to Python as a scripting language. I heard it again last week. It came from an accomplished computer science professor and colleague. This comment was borne of ignorance: He has little experience with Python.
While there is no universal definition of a scripting language, calling Python a scripting language is ignorant. Python is the underlying language for a web framework (Django) that powers monster sites like Instagram and Pinterest. Python has major libraries like numpy and NLTK. The features of Python are too numerous to list but certainly they greatly exceed those of a language typically called a scripting language.
This paper presents an opportunity for a killer app.
I am leery of the Internet of Things because (a) security is hard and (b) too little time is given to it. The latter is an over-generalization. But most solutions are delivered incomplete because too few resources are available or allocated. The result is essentially all software is vulnerable to attack.
This is the primary reason I am nervous about the Internet of Things.
Erik Meijer, a prominent language designer, has a thought-provoking article in ACM Queue. His thesis is that a language cannot be partially functional: “The slightest implicit imperative effect erases all the benefits of purity.” He calls this the curse of the “excluded middle.” One must either (a) except that programming is about mutating state or (b) “abolish[…] all implicit imperative effects and mak[e] them fully explicit in the type system.” He makes a strong case but I need to noodle on it before I will claim it as mine.
The article is good for introducing the issues. Such as the inherent disconnect between the static program and the runtime environment that arises with lazy or deferred execution.