Technical Computing: Databases & Programming

The world of UNIX appears to attract those interested in the more technical aspects of computing. Since Linux is cut from the same lineage, it is apt to include lists of computing languages. Both scripting and programming appear here despite the title, itself shortened for the sake of brevity. Since much code cutting involves working with databases, especially since data working cannot be avoided these days, these appear here too along with the stub for a list of tools.
Programming and Scripting Languages
My first encounter with an implementation of this language was with that belonging to a statistical computing environment (SCE) and that remains an ongoing dalliance. It is easy to think of Groovy as a way of working with a Java-based API using a scripting language, and it certainly feels like that. Saying that, it all works better if you know Java, though you do have to watch for the development of domain-specific language capability. That last comment probably applies to the aforementioned SCE in that it has its own object and method hierarchy that means that not all standard Groovy functionality is available.
Clojure is a dynamic, functional programming language that runs on the Java Virtual Machine (JVM) and is designed for building robust and scalable software applications. It is characterised by its emphasis on immutability, persistent data structures, and seamless interoperability with Java. Clojure embraces the Lisp programming language's principles, providing a concise syntax and powerful abstractions for managing state, concurrency, and functional programming paradigms. With its focus on simplicity, expressiveness, and the ability to leverage the vast Java ecosystem, Clojure enables developers to create efficient and maintainable code for a wide range of applications.
This is a programming language designed for building highly concurrent, fault-tolerant, and scalable systems that was developed by Ericsson in the late 1980s for telecommunication systems, where reliability and performance are critical. Erlang incorporates features such as lightweight processes, message passing, and built-in support for fault tolerance, making it well-suited for developing distributed and real-time applications. Its unique concurrency model and emphasis on fault tolerance have led to its widespread use in industries such as telecommunications, banking, gaming, and web development, where systems need to handle high loads, be resilient to failures, and provide real-time responsiveness.
Inspired by Erlang, Elixir is a functional, concurrent programming language designed for building scalable and fault-tolerant applications. It leverages the powerful concurrency model of the Erlang Virtual Machine (BEAM) while providing a more accessible and expressive syntax. It offers features such as lightweight processes, message passing, pattern matching, and a robust ecosystem of libraries and frameworks. With its focus on reliability, performance, and ease of development, Elixir is well-suited for developing highly concurrent and distributed systems, making it a popular choice for building web applications, real-time systems, and software that requires high availability.
Computing languages often get strange names like single letters or small words like this one; that means that you need to look for "Golang" in any online search. In any case, Go was originated at Google and numbered among its inventors was one of the creators of the C programming language. The intent here is massively multithreaded system programming using stand-alone executable components, while retaining or enhancing code readability. Another facet is the ability to function efficiently in distributed computing environments like those at SoundCloud or Uber. Various tools have been written using the language, and these include the ever pervasive Docker and Kubernetes.
A programming language designed for creating flexible applications that users and other programmers can extend through plug-ins, modules or scripts, Guile implements the Scheme programming language and supports the Revised5 and most of the Revised6 language reports alongside many Scheme Requests for Implementation. The platform includes a library of modules offering additional features such as HTTP server and client functionality, XML parsing and object-oriented programming capabilities.
Guile contains an efficient compiler and virtual machine that allows it to be used stand-alone for the writing of Scheme programs or integrated with C and C++ projects, serving as the official extension language of the GNU project. The system supports multiple programming languages including Scheme, ECMAScript and Emacs Lisp, with Lua support under development, enabling developers to choose the most appropriate language for their user base.
Users can customise and extend applications whilst they are running and see changes take effect immediately, sharing features through scripts rather than complex patches requiring recompilation. Notable applications using Guile include GNU Guix, GnuCash, Lepton-EDA and GDB.
It remains an odd decision to give a computing language a girl's name, but the purpose is serious. Often, there is a trade-off between speed of code writing and speed of execution, with the result being that data programming involves prototyping in one language and porting to another for production usage. The first group includes R and Python while the second includes C, C++, FORTRAN and even Java, so there is an element of translation involved that often means that different people are involved, which adds an element of error caused by misunderstandings. This gets described as the two language problem and Julia's major raison d'ĂȘtre is the avoidance of that: its top-line description is that it is as quick to program as Python but runs as fast as C because of its just-in-time compilation, multiple dispatch and in-built multithreading. This also allows for extensive capabilities for scientific computing that go beyond machine learning, and an example comes in the number of differential equation solvers that are available. It also helps that meta-programming makes everything more generalisable.
Developed in 1993 by Roberto Ierusalimschy, Luis Henrique de Figueiredo and Waldemar Celes at PUC-Rio in Brazil, Lua is a lightweight, embeddable scripting language designed for simplicity, flexibility and efficiency. Its minimal core, written in ANSI C, supports embedding within applications, enabling integration with C or C++ programs for scripting purposes. Central to its design is the table, a versatile data structure serving as arrays, dictionaries and objects, alongside dynamic typing and metatables for custom behaviour. Lua's use of coroutines facilitates cooperative multitasking, while its performance, driven by a register-based virtual machine and efficient garbage collection, makes it suitable for games, infrastructure systems and embedded environments. Widely adopted in game engines such as World of Warcraft and Roblox, as well as tools like NGINX and Redis, Lua's stability, small footprint and clear syntax have made it a preferred choice for embedding without overshadowing host applications.
It has been around since the 1980's and still pervades, though it is not as dominant as it once was for creating dynamic websites or system administration. PHP has taken on much of the former, while Python is making inroads into the latter. Still, no list would be complete with complete without a mention of the once ubiquitous scripting language, and it once powered my online photo gallery. It may be an easier language, but there is plenty of documentation on the web with Perldoc, Perl Maven and Perlmeister being some good places to look, and Dan Massey has some interesting articles on his site too. Not only that, but it is extensible too, with plenty of extra modules to be found on CPAN.
This usurper has taken the place of Perl for powering many of the world's websites. That the language is less verbose probably helps its case, and many if not most CMS packages make use of its versatility.
It may be Google's preferred scripting language for system administration, but it is its usefulness for Data Science where it really has shone in the eyes of many. There are numerous packages for data wrangling, data visualisation and machine learning that make the language ever present in any Data Scientist's toolbox, and looking in the PyPi archive will allow you to find what you need. It also has its place in web scripting too, even if it is not as pervasive as PHP though CMS's like Plone run on Python and there is the Django framework together with the Gunicorn web server.
One of the acts of Jonathon Schwartz while he was head at Sun Microsystems was to make Java open source after more than a decade of its being largely proprietary, and this is the website for the project. Of course, his more notable act at Sun was to sell the company to Oracle, but that's another story altogether...
This is an open-source implementation of the S language that is much appreciated by statisticians and is much used in the teaching of the subject. The base language only has so much functionality but there are many packages available that do just that and there are many to find on repositories like the CRAN and others can be found on various GitHub repositories, though these tend to be more experimental in nature. There are commonly used and well-supported mainstays that everyone uses, but there always is a need to verify that a particular package does what it claims to do. Given that, there are possibilities for data wrangling, data tabulation, data visualisation and data science. While quick to code, R is slow to execute compared with others and I have found that Python is faster, but it still has a use for smaller data sets; both keep their temporary data sets in system memory so that will help.
It came as a surprise that this Mozilla-originated language is gaining traction in scientific data analysis, possibly because it is a fast multithreaded counterpart to C and C++ with some added safety features (though these can be turned off if needed and extra care gets taken). The downsizing of Mozilla led to a sharp reduction in its team of Rust developers, and the Rust Foundation has been set up to oversee the language instead. There are online books like The Rust Programming Language and the Rust Cookbook, with the first of these also having paper and e-book counterparts from No Starch Press. For those interested in a more interactive introduction, there also is the Tour of Rust.
Created by Martin Odersky and first released in 2004, Scala is a high-level programming language that runs on the Java Virtual Machine and combines object-oriented and functional programming into a single, coherent design. It interoperates fully with Java and can draw on the entire Java ecosystem, compiling down to the same JVM bytecode. The language is notably concise compared to Java, with a powerful static type system that includes type inference, generics, traits, case classes and expressive pattern matching. Functional programming is central to its design, with support for immutable data structures, higher-order functions and algebraic data types.
Scala gained significant traction in big data and distributed systems, largely through its association with Apache Spark and Apache Kafka, and has been used by organisations such as LinkedIn for high-performance backend services. It occupies a useful middle ground in data engineering, offering more structure than Python and more expressiveness than Java, though it carries a steep learning curve, can suffer from slow compile times and may become difficult to maintain in over-engineered codebases. Scala is released under a permissive BSD-style licence that allows commercial use, modification and redistribution with minimal obligations, making it broadly friendly for enterprise adoption, though individual libraries within a given project may carry their own separate licence terms that warrant independent review.
Databases
This essentially is a fork of MySQL (see below) now that Oracle owns it. The originators of MySQL are the creators of MariaDB, so their claims of it being a drop-in replacement for it may have some traction. So far, I have seen no exodus from MySQL, though.
After being in the hands of a number of owners until it incongruously came into the custodianship of Oracle (who of course already had and still have one of their own), the database system that powers many dynamic websites almost remains a de facto standard and looks set to remain thus for now.
This may a document-based and not a relationship database like many of us understand them, but it still is being touted as an alternative to the more mainstream competition. Database technology isn't just about SQL, and MongoDB champions a NoSQL approach; it sounds as if the emergence of XML might be what's facilitating the NoSQL database technologies.
This project may have more open-source credibility than MySQL, but it seems to remain in its shadow, though that may be explained by its being a more complex piece of software to use (at least, that has been my experience, anyway). It so happens that this is what Debian installs if you specify the web server option at operating system installation time.
Tools
Created in 2000 to address limitations in the Concurrent Versions System and later adopted by the Apache Software Foundation in 2010, Subversion, commonly abbreviated to SVN, is a centralised version control system that tracks changes to files and directories by maintaining a complete history on a single server-based repository. Users check out a working copy from this central repository, make their edits locally and then commit changes back to the server whilst pulling updates from other contributors, creating a straightforward workflow that differs from distributed systems where each user holds a complete repository clone. The system assigns global revision numbers to repository snapshots, supports branching and tagging and offers features like change tracking with author attribution and the ability to revert to earlier versions.
Subversion handles large binary files efficiently and provides centralised control with granular permissions, making it appealing to enterprises requiring strict access control, though it requires network access for commits and offers slower branching compared to more modern alternatives. It remains in use today primarily within legacy enterprise codebases, projects with substantial binary files and organisations valuing centralised oversight, despite many development teams migrating to distributed systems during the 2010's due to its constraints around offline work and reduced flexibility.
This is a distributed version control system that tracks changes in files and allows multiple people to work on the same project whilst maintaining a complete history of modifications. Created by Linus Torvalds in 2005 for Linux kernel development, it operates on a distributed model where every user possesses a full copy of the repository and its history, enabling fast local operations without requiring constant server access. The system supports lightweight branching and merging to encourage experimentation, uses cryptographic hashes to ensure content integrity and allows developers to commit changes and browse history whilst offline.
The typical workflow involves cloning a repository, making changes, staging files, creating commits and sharing updates through push and pull commands. Whilst the tool itself handles version control, many teams utilise hosting platforms like GitHub, GitLab and Bitbucket that add collaboration features including pull requests, issue tracking and continuous integration pipelines. Developers favour this system for its safe experimentation through branching, robust collaboration model, detailed history tracking and suitability for both open-source and private projects.