The Library vs Frameworks Debate is Over

by coatta 4/27/2014 11:38:00 AM
And nobody won. Its just that there isn't much of a difference any longer. One of the significant factors that differentiated a library from a framework was control flow. You called a library, it did something for you, and then gave you back a result. A framework, on the other hand, would call into your code when the framework decided it was necessary. And all the mechanism that was making that decision about when to call your code was 'hidden', making it harder to reason about your application as a whole. So there were a lot of arguments about whether frameworks were evil, etc. Fast forward to today. Javascript has become incredibly popular. One of the most interesting architectural aspects of Javascript is that it is single-threaded with the result that a great many interactions occur in the form of callbacks. So, now we have, for example, JQuery which calls itself a 'library', but many of its functions take callbacks as parameters. This means that your code is called at some point in the future over which you have no control. And that sounds oddly like what happens in a 'framework'. My conclusion: frameworks are dead, long live libraries (with callbacks).

Thinking and Software Development

by coatta 2/19/2014 7:28:00 PM

Those of us who have been developing software for more years than we might care to admit, are sometimes inclined to fret about the skills that junion programmers lack -- particularly those fresh out of university or college. And as is typical with software developers, if you have N of them in the room, you'll have at least N+1 opinions about just what skills are most important and the least well prepared for by our educational institutions. Naturally I have my own opinions and I'd like to argue about why they're important not just for a computer science education, but any type of education. This dovetails with the current trend to assert that computation thinking should become part of our core cuuriculums in both K-12 and post-secondary education.

In terms of skills that I find lacking in most developer straight out of school, the ones that strike me as the most important are abstraction, and its friends encapsulation, cohesion, and coupling. I often find that junio developers have very good skills in the tactical aspects of software development, such as 'what CSS style should I use to achieve a modal type dialogue?' or 'how do I set the isolation level for a transaction?" What they often lack is the skill to consider these types of questions in the overall context of the software that they are working on. Questions such as 'Is it appropriate to set the isolation level for the transaction at this point in the code?' or 'How do I make modal style dialogues easily usable by other members of my team?'

It occurred to me today that these issues aren't really confined to software development at all. The notion of abstraction, that is the ability to construct a mental model of something, and the capability to explore the ramifications of that model, is really what thinking is all about. Or perhaps to be slightly less grandiose, its what strategic thinking is all about. As in software development, people are often quite good at tactical thinking, that is reasoning about some specific instance of a problem, but often cannot draw out of set of problems the common elements that would allow them to forge a general solution to a class of problems, or perhaps worse form false generalizations from anecdotal evidence.

I think that there is an argument to be made that the tools, techniques, and terminology that we software developers have created to help us reason about abstraction and encapsulation, could in fact be the basis for a way to teach people how to think strategically, not just about software, but about anything. As I noted above, there is some effort underway to convince the education establishment that the world has changed, and computational thinking is something that eveyone needs. But perhaps the situation is really that we need to convince the educational establishment that we have way to teach people how to think, not just about information systems, but about anything.


<<  May 2024  >>

View posts in large calendar


My opinions are my own, but you can borrow them if you like.

© Copyright 2024

Sign in