You are currently browsing the category archive for the ‘Javascript’ category.
Very few companies are able to successfully manage multiple languages in house, although frequently many are forced at least negotiate between using one back-end language (PHP/Ruby/JAVA) and one front-end one (Javascript of some flavor), this is rarely perceived as ideal from a management perspective — diversity may be great when you are a pumped up programmer wanting to work (or dabble) in a panoply of different languages, but unless you are able to fully manage the extent of all your projects, including needed future updates for eternity, the use of “proprietary” or specialized languages provides a substantial added cost to your company. This is simply to say that a principle which applies in other industries applies also within software: fungibility.
If, as I have suggested, to the maxim “real artists ship” should be added “real apps scale,” scalability is not merely a function of more users, but necessarily of a codebase larger than a single or pair of geniuses can create. This is why many of the great geniuses of history, among them Plato and Aristotle, worked within the context of schools, distributing the knowledge that they had achieved over a larger extent of time and space via human intermediaries (i.e. students), and these schools, of course, had teachers beyond the genius-founder.
Business is, if frequently following a different set of impulses than potentially “love of wisdom” and educational institutions which follow in their potentially altruistic path, is nonetheless subject to a similar set of limitations. One simply cannot know everything and, even if, in a fractal-mode, one can understand the basic principles of a subject at a high level of abstraction, this “higher-knowing” does not necessarily give one the skills to solve all problems that arise at the microscopic level of the day to day.
Programmer-mathmagicians have frequently attempted to solve this problem by simply residing in the highest possible level of abstraction, not withstanding that anything written, at least as attested in many philosophical schools, cannot represent reality at the most abstract way. In this sense, we soon reach the limitations even of an incredibly abstract language (i.e. Lisp), insofar as the implementation must contain a machine and it is no longer a truely and “purely” a lisp machine as soon as it contains assembler.
The fractal is a symbol, in a certain fashion, of the juncture not only of the sometimes invisible mathematical patterns which hide between and beyond virtually all of nature, but of the fascinating interjection of beauty which appears once we dive beyond that which is easily put into words.
In a sense, to recognize this trend in the 21st century we must have some historical awareness, at least in the sense in which historical awareness allows us to understand the categories in which we think as a product of our education at a particular moment in history. This allows us to realize that the modern emphasis on the defined self distances us from the “genius” of the supreme flow state which was exalted as “divine madness” in the early Greek philosophical tradition and similarly exclaimed in Indian and Chinese philosophical traditions.
However, supposing we have let the defined “self” go, even for a moment, how do we descend into the world of diverse and variegated languages? The challenge of Plato’s academy and every educational institution since was just that — we simply have to descend beyond our contemplation of beauty and into the dirt of the every day.
In an ancient Chinese conception, this was known as the fusion of heaven and earth, and heaven here was not simply a place but an active force which, once opened up to, could serve to illuminate divide the great expanses.
The polyglot challenge and accompanying fractal imagery, is then, potentially an opportunity to recognize the grand patterns that exist on a higher level of abstraction and, by recognizing the grand patterns (and beauty that accompanies them) to dive into the details with the “right tool for the right job,” a task that is otherwise quite difficult to realize.
The sad problem is that frequently the world remains divided between those who, in a particular place of abstraction, refuse to deal with the nitty-gritty details of the “blub” things of ordinary life, and those who, because of immersion in “the way things are done,” fail to see any better way.
This is particularly sad at a moment in time, like the present, where “the way things are done” simply is shown to be insufficient. If, to use a military metaphor, there is an enemy at the gates and yet the soldiers refuse to fight because because the plans are not well-defined, the stocks of food or weapons are insufficient, or because their commanders are idiots, we might understand this. We can even picture them retiring into the countryside because the countryside is a safe and comfortable place to be. However, no problems are solved this way.
However, this suggests that even if a military metaphor might be appropriate, the appropriate response is rarely “forward,” in the charge sounded by the exuberant officer, but rather up, in the sense that a contemplation of things in context of a higher level of abstraction (or in accordance with the Way or Dao of the great philosopher of war Sunzi), will produce more beneficial results than those who respond to instigation by either charges or retreat.
As for the polyglot future I have claimed in other posts to be excited by, I think it is gradually reaching increased definition. It demands, among other things, people who are willing to know things well at a level of an abstraction and be capable of knowing the details while admitting they do not know everything. This is to suggest that the developer-architect will be an increasingly important role as multiple platforms are engaged in increasing levels of abstraction.
However, it also demands that these same people are capable of engaging at the most detailed level and, with regards to this, I can only be excited for a a most “fractastical” future.
I try to work on things I am excited about as much as possible because I work “harder, better, faster, stronger.”
Here are a few things I’m excited about at the moment:
(1) Meteor. Recent explosive entry into the Javascript libraries/frameworks, which provides a “railsesque” framework for developing with a Node.js backend and presumably MongoDB datastore. Fills a huge need and appears to do just about everything just right, both in terms of design decisions and community engagement. I predict total domination.
(2) 12 Factor App. Not commented on heavily with the Salesforce community though a product not only of top-notch Heroku smarts but also with commentary from top Salesforce eggheads (e.g. Mountjoy), I think this is the sort of document we will be reviewing in five years as “prophetic.” In many ways, the future is already here, but it will take most of us a long time to realize it.
(3) jQuery. I know that there is nothing new here, but as a diehard jQuery enthusiast, I still think its time of triumph “in the enterprise” is coming soon as people finally get the message (and also realize that UI of their product is important).
(4) Berlin. Not quite Silicon Valley but people are picking up the torch and I expect to see more significant European-based challengers instead of just imitators over the next few years. Don’t doubt the Curry Wurst.
(5) Polyglot solutions. Even though it has often failed to invest substantially in its own open source ecosystem, Salesforce has taken something of a lead in acquiring in the fascinating although occasionally murky world of “polyglot” solutions, where various languages are used to provide what presumably is the “right tool for the job.” Despite the occasionally murkiness and gangs of cheerleaders without any real understanding of the strengths and weaknesses of various technology sets, I’m excited to see more definition about what constitutes the “right tool for the job” and robust composite solutions — of course, expect to see this more on the “bottom up” Heroku side than the typically top-down Salesforce side.
(6) Fractals. Okay, probably you know this already, but I think other people are finally starting to get the message about just how “fractal-eque” many parts of the world are.
I stayed up until around three in the morning one night last week finishing this super addictive and awesome tutorial by jQuery creator John Resig.
I’ve been through some little ditty tutorials on closures and had people attempt to explain what it is before, but Resig’s tutorial is to your average online tutorial what a tanto is to a wiener.
Even though in a certain sense I’ve never met a wiener I didn’t like, I’d prefer that if you were fighting on my side you had a proper weapon –
and no matter how many skillz you got, it always helps to sharpen them.
Part of the reason I like this approach so much is that there is very little unnecessary baggage. You figure out what you need to by reading the code, with a few quizzes where you write some code so that the lessons sink in. As things stand I think the quizzes are a little bit under-developed, and as a whole it could probably be a bit more content as far as examples and gradually developing a theme, but hey JResig has a whole book coming out soon. Another fantastic feature is that you can edit each example as you go along, so if something is not immediately obvious you can tweak it or can add in the necessary log statements.
As far as this goes, I believe this is the future of programming education (and education in general). Less paper, less explanation, more interaction, more cementing of the material. In other words, less talking, more doing.
Keep in mind this is a Ninja-level tutorial, so it assumes a fair bit of knowledge of Javascript that you probably won’t have if you’ve just been waving around a wiener. That said and despite some rough edges, I will repeat and say it is the best online tutorial I have ever seen.
Here are some highlights:
Context – One of the funkier bits of JS.
Closures – Show don’t tell. Love it!
Function Prototypes – A lot you can do here but tricky to get right
Inheritance – You have to understand this well if you are doing any Advanced Javascript
Truly awesome is when you get to see how all the building blocks fit together towards the end of the book as Resig appropriate builds up to (rather than dissects) the Prototype bind function.
I end with this beautiful example:
var ninja = {
yell: function(n){
return n > 0 ? ninja.yell(n-1) + "a" : "hiy";
}
};
In case you were wondering, we are hiring ninjas over at Tquila.
