I have always been fascinated by computer languages and programming. I have also enjoyed learning and programming in a wide spectrum of languages. One of my first jobs fresh out of graduate school in Computer Science was developing system level utilities on the IBM 308x series of mainframe computers using BAL /360 (Basic Assembler Language). Assembler is of course machine language that is directly executed by the CPU of the computer. You cannot go any lower in terms of programming languages. In fact Assembler is not as much a computer language, as it is a set of machine codes or instructions that give you direct access to the innards of a computer. Ultimately all high level languages and tools used on any computer are compiled or interpreted and then executed in machine code or assembler. Programming in assembler was of course tedious but gave you incredible power in terms of performance and speed. And it also gave you bragging rights with other programmers using higher level languages who held you somewhat in awe.
About ten years later, I was using a rather esoteric database application software called Magic to develop large database applications. Magic was at the other end of the spectrum of “programming”. It was as far removed from Assembler as you could possibly get and unlike anything else I had programmed in before. In fact Magic, was not really a programming language in the conventional sense – it did not generate any code or instructions at all. Instead, you built your application by building a high level model of your application’s logic. Magic was a non-procedural, event-driven “language” and database engine that could could read and execute your model – as you built it.
I would say that – Assembler and Magic represent two ends of a spectrum of how we can “program” computers or get them to do what we want them to do. As a student I also had fun debugging the highly cryptic and terse APL (A Programming Language), and programming expert systems and A.I. programs in LISP. Later I dabbled in Basic, Visual Basic, Pascal, C, C++, Java, Perl, and PHP. Turns out that this list just scratches the surface of computer languages – here is a list of 1400 computer languages. All these languages are Turing complete and equivalent -which means anything you can do in one you can do any of the others. There are of course differences in syntax, rules and capabilities. Languages can also be procedural or nonprocedural, object oriented or not, and so forth. But in general, higher level languages give you a higher level of abstraction and you can generally do a lot more with less code. They shield you from the tedium and complexity of dealing with low level functions. But what you achieve in abstraction and simplicity you often sacrifice in performance and low level system access.
Programming is inherently hard, complex and error-prone. Are there ways to reduce the difficulty, complexity and errors ? Are there tools or products that can give us a significant boost in productivity and allow us to convert our vision into reality in the fastest, easiest, least error-prone way. We can never eliminate the inherent difficulties of developing applications, but it is worthwhile to examine our options.
In a question on Quora, I asked a simpler, more restricted version of this question “What are the best tools to rapidly prototype a web application?”
Responses varied quite interestingly and included paper and pencil “prototyping ” methods. screen mockup and wieframing tools, Model /View /Controller (MVC) frameworks, and a few Visual / GUI development tools. This question was asked to get a sense for what the broad community of developers preferred for Rapid Applicaton Development (RAD). Here is part of my answer to this question :
I have been on a long quest to find the best Rapid Application Development (RAD) tool. This is a tool that one could use to go beyond screen mockups or wireframes allowing the creation of a working prototype – with little or no programming. The ideal product would allow a web application architect (who understands applications and database design – but is not necessarily an expert programmer) to create a rough working model and even a minimum viable product pretty quickly. There are at least two situations where this may be useful :
a) When you need to quickly build a proof-of-concept for an idea and give it to a few users for alpha testing and feedback. Maybe you do not mind throwing away your prototype and developing the final product with a “real” language or MVC framework.
b) You want to build a quick and dirty application for your own/internal company use and do not care too much about fine tuning the UI or performance.
We should keep in mind that all application development tools require you to make various trade-offs between complexity vs ease of use, rapid development vs control on UI/performance etc. After all, you can get ultimate performance if you use assembler – but we are all willing to live with the slighty lower performance of higher level languages. Generally, the higher the level of abstraction, the easier and faster it is to develop applications – and the lower the performance and control. The question is how much performance/control etc. are you willing to trade off for the higher level of abstraction and speed of development.
I also realize that most programmers dislike code generators since they make it hard to get to the actual code to make changes or maintain it. They also generally do not like Visual Prototyping tools – as they do little to advance their skill sets or experience in their language of choice. However, they are not our target audience for these tools.
With this perspective, here is a selection of tools that I have discovered for this purpose: (some of these I have used).
CodeCharge : This is a visual code generator that provides a fast way to build database web applications with support for almost all flavors of databases and scripting languages (PHP / Perl /ASP/Java). Have used this tool for developing complete database apps in hours – not days.
UniPaaS : From Magic Software (product was originally called Magic). A unique tool that does not generate any code but allows creation of Rich Internet Applications as well as client server software. They have a free single version developer version called UniPaas Jet. Magic gives a 10x or higher advantage in development speed in many cases.
Tersus : A very unique and powerful Drag & Drop GUI for Rapid appllication development that I recently discovered. Free open source license,
Wavemaker : Similar to Tersus – Drag & Drop GUI. Generates java code. Free open source license (with some limitations).
RadPHP XE : from Embarcadero – Visual PHP RAD.
All of the above products can be used to develop and deploy production quality applications and many of them are highly scalable as well (Magic / Tersus).
However. they all of course have limitations and may not be suitable for all types of web applications. But they could be useful in the scenarios mentioned earlier. If any one has actual experience with these tools it would be great to hear from them.