Main image of article Little-Known Programming Languages That Pay
There is no shortage of programming languages, from the well-known ones (Java and C++) to the domain-specific (which focus on a particular industry or type of problem) to the outright esoteric (intended just for research or even humor). For more programming jobs, click here. If you're interested in studying some of the lesser-known programming languages, you'll probably want to learn some that could potentially land you a freelancing gig or even a full-time job. (If you want to take a crack at joke languages that will earn you exactly squat, those are also around.) First, let's look at some languages meant for cloud and Web programming. Then we'll look at one for app building, a couple for math and science, and then finally some data-modeling languages used in the telecom and networking industries.

Client-Server Programming With Opa

The idea behind Opa isn't particularly new. For quite some time, developers have worked towards a solution whereby a programmer can write one set of source code, and the compiler (or perhaps the runtime engine) will divide up the code and run some on the server, and some in the browser. That way, the programmer won't have to worry about writing two separate sets of code for the client/browser and server. (Google has come up with something similar with their GWT toolkit.) With Opa, you're working in a primary language similar to JavaScript. The system then creates separate code bases, one for the browser and one for the server (both in JavaScript). For the server, the code runs under node.js, which is server-side JavaScript. Using Opa, you no longer have to worry about making Ajax calls. In theory, everything just works, or so the developers of Opa claim: “You can write a complete Opa program without thinking about the client-server distinction and the Opa compiler will distribute the code as needed for you and take care of all the communication.” Here's an example of Opa from one of the tutorials:
function user_update(message msg) { line = <div class="row line">

<div class="span1 userpic" />

<div class="span2 user">{msg.author}:</>

<div class="span9 message">{msg.text}</>

</div>;

#conversation =+ line; Dom.scroll_to_bottom(#conversation); }
Although this code doesn't demonstrate the client-server aspects, it does show the interesting way in which Opa allows you to embed HTML right in your code, and then easily manipulate the HTML using CSS notation (such as #conversation, which refers to the DOM element with ID conversation). Salesforce.com's APEX Language In addition to being the creator of a widely used Customer Relationship Management (CRM) program, Salesforce.com has grown into a cloud-computing company that allows independent programmers to develop scalable applications that run on Salesforce.com's cloud servers. In order to accommodate such programming for on its servers, Salesforce.com has created a proprietary language called Apex that goes along with its Force.com platform. Apex looks a lot like Java, and there's a complete Web-based interface; the language includes features for working with databases running on the Force.com servers, with a heavy emphasis on business-oriented software. Here's an interesting piece of code from the Apex reference guide that shows how you can do data access within the language itself:
// Query existing account. Account a = [SELECT Name,Industry

FROM Account

WHERE Name='Account Example' LIMIT 1];

// Modify the two fields on the sObject. a.Name = 'Account of the Day'; a.Industry = 'Technology'; // Persist the changes. update a;

App Building With MIT App Inventor 2

MIT has crafted a complete IDE for creating applications that run on Android devices, called App Inventor 2. It's open-source and free, but in order to write your programs, you don't actually write lines of code. Instead, you drag elements around on a Web-based GUI, which snap together in ways that mimic code. For example, to perform a for-loop, you drag an element onto the screen, and then drag additional elements that represent processes to perform inside the loop. You can also create elements that respond to various events, such as the click of a button. Want to declare a variable? Drag a variable element onto the screen, and type in a name and an initial value. You can set the value of a variable, or you can retrieve the value, and then “push” that value into another element, such as the bounds on a for-loop. Using App Inventor, you can create some sophisticated applications (I built a billiards game with it). But is it really programming? Well, you can use it to write programs; your elements are converted to the Scheme programming language, which is then compiled to target the JVM. However, it takes a long time to write code this way. Whereas in other languages you can quickly type int n=10;, here you have to click on a category containing the variable elements, then drag a variable element onto the screen, then click in the spot where you type the name, and type it; then you click on the spot where you type the initial value, and type it. It just takes longer. And some tasks are extremely difficult to do, given the limited data types—but you can still accomplish a great deal with it, and you can create some nice Android apps. Here's a sample screenshot of an App Inventor session: appinventor Also, I should mention that the drag-and-drop designer in App Inventor is based on an open-source system called Blockly, which you can extend to create your own drag-and-drop programming system.

Math and Science Languages

Among mathematicians and scientists, there are some popular tools for solving complex numerical and symbolic problems, such as Mathematica, Maple, and MATLAB. Each of these products includes its own language for programming and solving mathematical problems. The problem with these products is they're extremely expensive, priced at a couple thousand dollars or more. That's where open-source saves the day: There's a language called GNU Octave that is largely compatible with MATLAB's programming language. Right now Octave is only a programming language and a command line interface; however, a GUI is available, and will soon be a part of Octave itself. Here's a quick example in GNU Octave that solves a system of linear equations, entered in the command line interface. (The actual code follows the > symbol, as the first part of each line is the command prompt.) This example comes from an examples page:
octave:1> A = [ 2, 0; 0, 2 ]; octave:2> b = [ 2; 1 ]; octave:3> x = A \ b
Another interesting language for math and science is called IDL, or Interactive Data Language (not to be confused with another IDL, Interface Description Language, used in CORBA and other remote-procedure languages). IDL is not free, but there's a GNU alternative based on it that is free, called GNU Data Language. The GNU Data Language tool can compile code written in IDL and produce imagery; you can use it to solve problems and visualize data. This page has some cool screenshots of what can be done with it. The IDL language looks a bit like Fortran. Here's some sample code used in a program that performs a wavenumber plot; the entire code is found here under the heading ‘Wavenumber Plot’:
FUNCTION WaveNumberFormat, axis, index, value

; A function used to calculate the wavenumber, given the wavelength.

wavenum = 1.0d / value     ; frequency

RETURN, String(wavenum, Format = '(f0.4)')

END
This code does a simple calculation, dividing 1 by a value passed in.

Telecommunications and Network Management

This might seem a bit random mentioning telecommunications, but as I mentioned, this whole list is somewhat random. I spent about a decade in the telecom industry as a programmer and learned a good bit about these concepts, which are still used today. So I thought I'd share some of that here. In the telecom world, a common problem is network management. In order to better handle it, two different standards have been developed. (Entire books have been written about these two standards, and if you master them, you could likely land a good job in the telecom industry.) The first is an umbrella standard called OSI, which is a layered model (known as a stack) that uses different protocols and languages to build systems in the telecom industry. There are many different languages and protocols used, but if you want to get an introduction to the technology, check out Wikipedia's handy overview here and then start looking at a protocol called CMIP (Common Management Information Protocol), followed by a data-modeling language called ASN.1, which isn't a programming language, but rather a language for modeling and describing data. Using ASN.1, an engineer can describe the structure of data that is transmitted over a network. The other standard is called SNMP (Simple Network Management Protocol). Really, SNMP isn't an entire stack like OSI; rather, it’s a protocol. But with it you have ways of modeling data using a modeling language called SMI (Structure of Management Information). If you want to learn more about SNMP protocol and SMI modeling language, Oracle has a nice (albeit older) tutorial here. Here's some sample ASN.1 that models an order number:
Order-header ::= SEQUENCE {

number   Order-number,

date     Date,

client   Client,

payment  Payment-method

}

Conclusion

Computer languages abound. Some let you describe the steps of a program; some are more for modeling data. Whether you want to learn any of the more esoteric ones depends on whether you want to get your foot into a particular industry that might need them. For example, if you master a couple math and science programming languages, you might find opportunities as a programmer working at a scientific research center. Although there might not be a lot of such opportunities, you could still land a good job.

Upload Your ResumeEmployers want candidates like you. Upload your resume. Show them you're awesome.

Related Articles