Office Warming: JH Media Group has moved in!

We did it! Along with the rest of you, we have made it through the hardest part of the recession and are looking forward to brighter days. Along with that, we are moving up in the world… literally. Well, at least to the second story of our brand new office.  
With all the great new momentum with the company, we absolutely had to have new employees, more space, and a more fluid environment. In fact, Jeremy just recently added some of his renowned artistry to the office by installing, by hand, our logo on the conference room glass walls.  It is pretty snazzy.

We are thrilled to kick off the new year in a new office with some new neighbors and great new people.  Located right off of Research Drive, we are closer to our clients than ever before. We look forward to seeing you all stop by at the new office!

Complex vs. Complicated Software

When Tim Peters was working on designing Python, he wrote his beliefs down in 20 brief sentences, known as The Zen of Python. These can even be found built into Python itself by typing “import this”. Lines 3 and 4 from this passage always stuck with me:
    Simple is better than complex.
    Complex is better than complicated.
The first is pretty self-evident. The second line threw me for a loop. I didn’t understand the difference. What did it mean, and how did this relate to Python, and programming as a whole?

Complex or Complicated?

It comes from a more discrete meaning of the words.  Complex means a bunch of interlocking, working parts that come together to form a system.  It refers to one concept that can be seen as a composite of smaller, independent pieces. Complicated, on the other hand, refers to the one concept that is large, and often confusing.  To put it another way, a building is complicated, where a city is complex.

PHP and Python

By looking at Python and PHP, you can see the differences in how the languages are put together.  Both have a large number of tools for a variety of purposes. in PHP, all of these functions and objects are in the global namespace, and can be called from anywhere. in Python, the language includes hundreds of modules that perform a lot of the same things, but require them to be imported. Python is complex where PHP is complicated. The benefit of thinking about building complex systems instead of complicated ones, is the ease of understanding and changing these systems.  In a complicated system, you run into issues where you have to keep a mental model of the entire system in your head to effectively work on it.  This also means that making changes to the program is difficult, as the effects of the changes can be much harder to predict. By breaking down large problems into several smaller problems, it becomes much easier to solve. Let’s say we have a complicated web application, with various code doing various things are mushed together. If we take one part of the system, lets say database access for example, and we re-work it so that this is all handled by its own independent module. We’ve made the system more complex and less complicated, and there are several benefits to this:

  • Now, when we have to do any work that pertains to the database, we don’t have to worry about how that data is going to be used, we only have to worry about a smaller problem.
  • When we are using this database module, we only have to worry about how we interact with it, and not about it’s inner workings.
  • If we were to ever change databases, now we can just replace this one module instead of changing code in several different places.
  • We now have a database module that we can use in other systems.
  • read more

    The Year in Javascript

     2011 was a year that saw the use and usefulness of JavaScript skyrocket.  With the improvement of browsers, and the increasing diversity of platforms the web is used on, such as smart phones and tablets, JavaScript has become increasingly important in user interface development, and has moved from being a tool used for decoration and the occasional ajax call to a language used as the main tool is building dynamic web applications. This has been made possible by a number of tools that have come into use this past year:

    Underscore.js is in my opinion the most important JavaScript tool released since jQuery.  Underscore js does not have a singular focus, calling itself a ‘utility-belt library’. It includes several common functional programming functions, such as map, reduce, and filter, to make processing sets of data easier and allows for using functional paradigms in JavaScript, which works well with JavaScript’s prototype inheritance and first-class functions.  It also include a great micro-templating library that makes working with dynamic HTML incredibly easy.  Many of the other tools on this list would not be possible without the help that underscore provides.

    Require.js is a file and module loader for JavaScript.  With the increasing amount of tools and complexity of projects in JavaScript, it becomes necessary to have a way to manage all of these modules and their dependencies.  require.js provides a way to do this, both on the client side with asynchronous loading for providing a better user expierience, or on the server side to help manage web servers in node.

    Node.js is a tool for writing web servers in JavaScript. It has moved JavaScript from being just a client side tool into something that can be used for every part of a web application. This has the benefit of being able to use a single language on every part of the development stack, which can make things easier for the developer. Node also takes advantage of JavaScript asynchronous nature, and as such allows for a lot of parallel, non-blocking way of processing requests that leads to incredibly fast, scalable web applications.

    Backbone.js Backbone is a JavaScript MVC Framework for the client side.  It allows for building structured, modular web applications completely in the browser.  Several large scale applications, such as Grooveshark, Trello, and GMail have made use of Backbone to build amazingly fast interfaces in the browser.  Backbone also provides a better way of organizing and using code, which has become necessary as web apps have grown more complex. Backbone has personally exciting for me, as it led to me re-thinking how web applications are built, and to stop thinking in series of pages, and start thinking in a more responsive, desktop-live paradigm.

    CoffeeScript CoffeeScript is a  language that transforms into JavaScript. It is used to give JavaScript a simpler, more ruby-like syntax in order to increase developer productivity.  a simple closure may look something like this in JavaScript: var square = function(x) {     return x * x } While in CoffeeScript,  the same function would be written like this: square = (x) -> x * x CoffeeScript made waves when the people at 37Signals decided to include CoffeeScript and SASS as default modules in Ruby on Rails 3.1.  While the modules can be easily turned off, this led to developers both becoming aware of CoffeeScript, and becoming divided by it.  Some see it as a great tool to clean up code and make writing code faster, others see it as a waste of time, and unneeded step of complexity, and some just plain don’t like the new syntax. The needs and capabilities of the web have grown, and JavaScript has stepped to the challenge.