Programming Languages

Go (Golang) vs Python Performance Comparisonprogramming languagesGo delivers consistently higher raw performance, better concurrency, lower memory usage, and more predictable…

This page is a hub for the languages and tools used across this site's data and platform engineering notes. The link tables below point to the detailed pages; the sections around them explain where each language fits in a modern data platform and how to choose between them.

1. Overview

Where Each Language Appears in a Data Platform Bashprovision, glue, cronPythoningest, APIs, MLSQLtransform, modelScala / JavaSpark, Kafka, JVMYAML / HCLpipelines, infraMost data work is Python plus SQL; Bash and configuration languages hold the system together around them.

A typical data platform is polyglot. Python is the general-purpose language: ingestion scripts, REST APIs with Flask or FastAPI, orchestration code in Airflow, PySpark jobs and machine learning. SQL is where most business logic for analytics lives, from warehouse transformations to dimensional models, because a query optimizer can execute set-based logic far more efficiently than procedural code. Bash glues systems together: provisioning, deployment hooks, cron jobs and quick file processing. JVM languages (Scala and Java) power Spark, Kafka, Flink and NiFi internals, and Go dominates infrastructure tooling such as Docker, Kubernetes and Terraform. Declarative configuration (YAML for CI/CD and Kubernetes, HCL for Terraform) is the final layer that describes how everything is deployed.

2. Python


3. SQL Overview


4. Data Transformation


5. Workflow Management


6. Mac OS Platform


7. Software Delivery and Containerization

  • Docker Platform to automate the deployment of applications inside portable containers, ensuring consistency across different environments.
  • Kubernetes Platform to automates the deployment, scaling, and management of containerized applications across clusters of machines.

8. Choosing a Language

Language Trade-offs at a Glance Pythoninterpreted, dynamic- huge library ecosystem- fast to write- slow loops: use NumPy/SparkSQLdeclarative- optimizer picks the plan- set-based, portable core- vendor dialects differGocompiled, static- single static binary- goroutines for concurrency- infra tools, servicesScala / JavaJVM, static- Spark and Kafka internals- strong typing at scale- more verbose buildsPick by where the code runs and who maintains it, not by raw speed: an optimized SQL engine beats hand-written loops.

The diagram summarises the trade-offs. Python's strength is its ecosystem and speed of development, but pure Python loops are slow, so heavy numeric or data work should be pushed into vectorised libraries (NumPy, pandas, Polars) or distributed engines (Spark). SQL is the best choice whenever data already sits in a database or warehouse: move the computation to the data instead of pulling data into an application. Go is a good fit for small, fast, easily deployed services and command-line tools. Scala and Java are mostly needed when extending JVM-based frameworks or writing performance-critical stream processing.

9. Worked Example: The Same Task Three Ways

Count orders per region from a CSV file with columns order_id,region,amount:

# Bash: quick one-off check on a small file
tail -n +2 orders.csv | cut -d, -f2 | sort | uniq -c | sort -rn
# Python (pandas): when the result feeds further processing
import pandas as pd
df = pd.read_csv("orders.csv")
print(df.groupby("region")["amount"].agg(["count", "sum"]).sort_values("count", ascending=False))
-- SQL: when the data is already in a table, and for production pipelines
SELECT region, COUNT(*) AS orders, SUM(amount) AS revenue
FROM orders
GROUP BY region
ORDER BY orders DESC;

The Bash version breaks on quoted fields containing commas, the pandas version is limited by one machine's memory, and the SQL version scales with the engine. Each is the right answer in a different context, which is the main point of being comfortable in all three.

10. Pitfalls

11. Language Comparison

LanguageTyping / executionMain uses on this siteMain weakness
PythonDynamic, interpretedAPIs, ETL, PySpark, ML, automationCPU-bound loops; packaging
SQLDeclarative, engine-optimisedWarehouse transforms, analytics, dimensional modelsProcedural logic, testing
BashShell, interpretedDeployment, cron jobs, file utilitiesError handling, quoting, portability
GoStatic, compiledCLI tools, small services, infrastructureSmaller data and ML ecosystem
Scala / JavaStatic, JVMSpark, Kafka, Flink, NiFi extensionsVerbosity, build complexity

A practical learning path for data engineering is SQL first (it is used everywhere and its concepts, joins, grouping and window functions, carry over to Spark and pandas), then Python for everything around the database, then enough Bash to automate servers and pipelines. Learn a JVM language or Go when a specific system requires it rather than in advance. Across all of them, the habits that matter most are the same: version control, automated tests, readable code reviewed by others, and reproducible environments built by a CI/CD pipeline rather than by hand on a server. Type hints in Python and linters for SQL and shell scripts (for example ShellCheck) catch many errors before the code runs.

SQL Overviewsql CI/CDSection ContainersSection Python algorithmsSection