Which coding language
to use and why?
NICAR 2025
bit.ly/nicar25-which-language
Introduction
Nael Shiab, senior data producer, CBC News
Tazbia Fatima, Hearst Newspapers DevHub
Kai Teoh, The Dallas Morning News
Carla Astudillo, Texas Tribune
The questions
Tazbia
First programming language I learnt
Tazbia Fatima, Hearst Newspapers DevHub
First programming language that made me love coding
// Definition of a class named 'Dog'
class Dog {
// Instance variables (attributes)
String name;
String breed;
int age;
// Constructor to initialize instance variables
public Dog(String name, String breed, int age) {
this.name = name;
this.breed = breed;
this.age = age;
}
// Method to display dog information
public void displayInfo() {
System.out.println("Name: " + name);
System.out.println("Breed: " + breed);
System.out.println("Age: " + age);
}
// Main method (entry point of the program)
public static void main(String[] args) {
Challenges
Tazbia Fatima, Hearst Newspapers DevHub
Programming languages my newsroom primarily uses
Tazbia Fatima, Hearst Newspapers DevHub
Backend / Server-side Programming
Frontend / Web Dev
<div class="alert">
<span class="closebtn" onclick="this.parentElement.style.display='none';">×</span>
This is an alert box.
</div>
/* The alert message box */
.alert {
padding: 20px;
background-color: #f44336; /* Red */
color: white;
margin-bottom: 15px;
}
Databases and datasets
Python has an extensive ecosystem of libraries tailored for data tasks:
Most often used programming language
Tazbia Fatima, Hearst Newspapers DevHub
Resources for learning how to code
Tazbia Fatima, Hearst Newspapers DevHub
Resources for learning how to code
Tazbia Fatima, Hearst Newspapers DevHub
Resources for learning how to code
Tazbia Fatima, Hearst Newspapers DevHub
Practise using Visualization platforms like
Resources for learning how to code
Tazbia Fatima, Hearst Newspapers DevHub
Sign up to Coding Challenges and Platforms
Kai
What was the first programming language you learned?
What challenges did you face?
Most importantly: Have a project/goal
What are some great resources for learning how to code?
Which programming languages does your newsroom primarily use?
Which programming language do you use most often in your projects, and why?
Carla
What's the first programming language you learned?
which coding language to use and why
ACTIONSCRIPT
What's the first programming language you learned?
which coding language to use and why
What's the first programming language you learned?
which coding language to use and why
What's the first programming language you learned?
which coding language to use and why
If you could start over, would you choose the same one?
which coding language to use and why
JAVASCRIPT
Challenges?
which coding language to use and why
WHICH LANGUAGE TO USE? IT DEPENDS!
Challenges?
which coding language to use and why
WHICH LANGUAGE TO USE? IT DEPENDS!
Challenges?
which coding language to use and why
THINK OF IT AS LEARNING A NEW LANGUAGE
Which programming language does your newsroom use?
which coding language to use and why
JAVASCRIPT FOR FRONT-END
Which programming language does your newsroom use?
which coding language to use and why
TEXAS TRIBUNE DATA GRAPHICS KIT
Which programming language does your newsroom use?
which coding language to use and why
PYTHON FOR BACKEND
Which programming language do you use most often in your projects and why?
which coding language to use and why
FOR VISUALS/FRONT-END
Which programming language do you use most often in your projects and why?
which coding language to use and why
BACKEND
Which programming language do you use most often in your projects and why?
which coding language to use and why
ANALYSIS
Python - Pandas library in Jupyter notebook
What’s a great resource for learning how to code?
which coding language to use and why
RESOURCES
What’s a great resource for learning how to code?
which coding language to use and why
TIPS
Nael
My first programming language
Challenges - The Loneliness of the Data Journalist
Challenges - Learning JavaScript by myself
Your newsroom programming languages?
Which programming languages do you use?
Which programming languages do you use?
Learning how to code? => code-like-a-journalist.com 🤓
Rapid-fire questions!
Only four possible answers:
👉 Python
👉 R
👉 JavaScript/TypeScript
👉 No-code tools!
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | | | | |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | | | |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | Excel or Google Sheets | | |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | Excel or Google Sheets | Google Sheets or Excel | |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | Excel or Google Sheets | Google Sheets or Excel | GSheets / TS and SDA library |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | Excel or Google Sheets | Google Sheets or Excel | GSheets / TS and SDA library |
Analyzing a huge dataset | | | | |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | Excel or Google Sheets | Google Sheets or Excel | GSheets / TS and SDA library |
Analyzing a huge dataset | Python using a Jupyter notebook with a database or Neo4J | | | |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | Excel or Google Sheets | Google Sheets or Excel | GSheets / TS and SDA library |
Analyzing a huge dataset | Python using a Jupyter notebook with a database or Neo4J | Python + Pandas library | | |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | Excel or Google Sheets | Google Sheets or Excel | GSheets / TS and SDA library |
Analyzing a huge dataset | Python using a Jupyter notebook with a database or Neo4J | Python + Pandas library | Jupyter notebook using pandas library | |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | Excel or Google Sheets | Google Sheets or Excel | GSheets / TS and SDA library |
Analyzing a huge dataset | Python using a Jupyter notebook with a database or Neo4J | Python + Pandas library | Jupyter notebook using pandas library | TS with SDA library |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | Excel or Google Sheets | Google Sheets or Excel | GSheets / TS and SDA library |
Analyzing a huge dataset | Python using a Jupyter notebook with a database or Neo4J | Python + Pandas library | Jupyter notebook using pandas library | TS with SDA library |
Creating simple charts | | | | |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | Excel or Google Sheets | Google Sheets or Excel | GSheets / TS and SDA library |
Analyzing a huge dataset | Python using a Jupyter notebook with a database or Neo4J | Python + Pandas library | Jupyter notebook using pandas library | TS with SDA library |
Creating simple charts | Datawrapper/ Tableau/Flourish | | | |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | Excel or Google Sheets | Google Sheets or Excel | GSheets / TS and SDA library |
Analyzing a huge dataset | Python using a Jupyter notebook with a database or Neo4J | Python + Pandas library | Jupyter notebook using pandas library | TS with SDA library |
Creating simple charts | Datawrapper/ Tableau/Flourish | Flourish, infogram, datawrapper etc | | |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | Excel or Google Sheets | Google Sheets or Excel | GSheets / TS and SDA library |
Analyzing a huge dataset | Python using a Jupyter notebook with a database or Neo4J | Python + Pandas library | Jupyter notebook using pandas library | TS with SDA library |
Creating simple charts | Datawrapper/ Tableau/Flourish | Flourish, infogram, datawrapper etc | Datawrapper or Illustrator | |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | Excel or Google Sheets | Google Sheets or Excel | GSheets / TS and SDA library |
Analyzing a huge dataset | Python using a Jupyter notebook with a database or Neo4J | Python + Pandas library | Jupyter notebook using pandas library | TS with SDA library |
Creating simple charts | Datawrapper/ Tableau/Flourish | Flourish, infogram, datawrapper etc | Datawrapper or Illustrator | Datawrapper / TS with SDA and Plot |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | Excel or Google Sheets | Google Sheets or Excel | GSheets / TS and SDA library |
Analyzing a huge dataset | Python using a Jupyter notebook with a database or Neo4J | Python + Pandas library | Jupyter notebook using pandas library | TS with SDA library |
Creating simple charts | Datawrapper/ Tableau/Flourish | Flourish, infogram, datawrapper etc | Datawrapper or Illustrator | Datawrapper / TS with SDA and Plot |
Creating interactive data visualizations | | | | |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | Excel or Google Sheets | Google Sheets or Excel | GSheets / TS and SDA library |
Analyzing a huge dataset | Python using a Jupyter notebook with a database or Neo4J | Python + Pandas library | Jupyter notebook using pandas library | TS with SDA library |
Creating simple charts | Datawrapper/ Tableau/Flourish | Flourish, infogram, datawrapper etc | Datawrapper or Illustrator | Datawrapper / TS with SDA and Plot |
Creating interactive data visualizations | d3.js on the observable platform | | | |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | Excel or Google Sheets | Google Sheets or Excel | GSheets / TS and SDA library |
Analyzing a huge dataset | Python using a Jupyter notebook with a database or Neo4J | Python + Pandas library | Jupyter notebook using pandas library | TS with SDA library |
Creating simple charts | Datawrapper/ Tableau/Flourish | Flourish, infogram, datawrapper etc | Datawrapper or Illustrator | Datawrapper / TS with SDA and Plot |
Creating interactive data visualizations | d3.js on the observable platform | Really depends* | | |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | Excel or Google Sheets | Google Sheets or Excel | GSheets / TS and SDA library |
Analyzing a huge dataset | Python using a Jupyter notebook with a database or Neo4J | Python + Pandas library | Jupyter notebook using pandas library | TS with SDA library |
Creating simple charts | Datawrapper/ Tableau/Flourish | Flourish, infogram, datawrapper etc | Datawrapper or Illustrator | Datawrapper / TS with SDA and Plot |
Creating interactive data visualizations | d3.js on the observable platform | Really depends* | Javascript with D3, set up in Node | |
What would you use if you were… (1/2)
| Tazbia | Kai | Carla | Nael |
Analyzing a small dataset | Python in a google colab notebook | Excel or Google Sheets | Google Sheets or Excel | GSheets / TS and SDA library |
Analyzing a huge dataset | Python using a Jupyter notebook with a database or Neo4J | Python + Pandas library | Jupyter notebook using pandas library | TS with SDA library |
Creating simple charts | Datawrapper/ Tableau/Flourish | Flourish, infogram, datawrapper etc | Datawrapper or Illustrator | Datawrapper / TS with SDA and Plot |
Creating interactive data visualizations | d3.js on the observable platform | Really depends* | Javascript with D3, set up in Node | TS with Svelte, D3 and ThreeJS |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | | | | |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | | | |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | Sheets/Github Actions + Flourish | | |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | Sheets/Github Actions + Flourish | Google sheets and Datawrapper | |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | Sheets/Github Actions + Flourish | Google sheets and Datawrapper | GSheets and Datawrapper |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | Sheets/Github Actions + Flourish | Google sheets and Datawrapper | GSheets and Datawrapper |
Scraping data | | | | |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | Sheets/Github Actions + Flourish | Google sheets and Datawrapper | GSheets and Datawrapper |
Scraping data | Python with Playwright/Selenium. But I also look for undocumented APIs | | | |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | Sheets/Github Actions + Flourish | Google sheets and Datawrapper | GSheets and Datawrapper |
Scraping data | Python with Playwright/Selenium. But I also look for undocumented APIs | Python + requests library. Browser automation (selenium/playwright) a last resort | | |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | Sheets/Github Actions + Flourish | Google sheets and Datawrapper | GSheets and Datawrapper |
Scraping data | Python with Playwright/Selenium. But I also look for undocumented APIs | Python + requests library. Browser automation (selenium/playwright) a last resort | Python, Playwright for complex | |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | Sheets/Github Actions + Flourish | Google sheets and Datawrapper | GSheets and Datawrapper |
Scraping data | Python with Playwright/Selenium. But I also look for undocumented APIs | Python + requests library. Browser automation (selenium/playwright) a last resort | Python, Playwright for complex | TS with Playwright, Cheerio |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | Sheets/Github Actions + Flourish | Google sheets and Datawrapper | GSheets and Datawrapper |
Scraping data | Python with Playwright/Selenium. But I also look for undocumented APIs | Python + requests library. Browser automation (selenium/playwright) a last resort | Python, Playwright for complex | TS with Playwright, Cheerio |
Building a database or app | | | | |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | Sheets/Github Actions + Flourish | Google sheets and Datawrapper | GSheets and Datawrapper |
Scraping data | Python with Playwright/Selenium. But I also look for undocumented APIs | Python + requests library. Browser automation (selenium/playwright) a last resort | Python, Playwright for complex | TS with Playwright, Cheerio |
Building a database or app | Python with SQL (postgres or sqlite) with Flask api | | | |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | Sheets/Github Actions + Flourish | Google sheets and Datawrapper | GSheets and Datawrapper |
Scraping data | Python with Playwright/Selenium. But I also look for undocumented APIs | Python + requests library. Browser automation (selenium/playwright) a last resort | Python, Playwright for complex | TS with Playwright, Cheerio |
Building a database or app | Python with SQL (postgres or sqlite) with Flask api | Datasette, Django | | |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | Sheets/Github Actions + Flourish | Google sheets and Datawrapper | GSheets and Datawrapper |
Scraping data | Python with Playwright/Selenium. But I also look for undocumented APIs | Python + requests library. Browser automation (selenium/playwright) a last resort | Python, Playwright for complex | TS with Playwright, Cheerio |
Building a database or app | Python with SQL (postgres or sqlite) with Flask api | Datasette, Django | Python with Django framework | |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | Sheets/Github Actions + Flourish | Google sheets and Datawrapper | GSheets and Datawrapper |
Scraping data | Python with Playwright/Selenium. But I also look for undocumented APIs | Python + requests library. Browser automation (selenium/playwright) a last resort | Python, Playwright for complex | TS with Playwright, Cheerio |
Building a database or app | Python with SQL (postgres or sqlite) with Flask api | Datasette, Django | Python with Django framework | TS with DuckDB or sqlite |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | Sheets/Github Actions + Flourish | Google sheets and Datawrapper | GSheets and Datawrapper |
Scraping data | Python with Playwright/Selenium. But I also look for undocumented APIs | Python + requests library. Browser automation (selenium/playwright) a last resort | Python, Playwright for complex | TS with Playwright, Cheerio |
Building a database or app | Python with SQL (postgres or sqlite) with Flask api | Datasette, Django | Python with Django framework | TS with DuckDB or sqlite |
Training an AI model | | | | |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | Sheets/Github Actions + Flourish | Google sheets and Datawrapper | GSheets and Datawrapper |
Scraping data | Python with Playwright/Selenium. But I also look for undocumented APIs | Python + requests library. Browser automation (selenium/playwright) a last resort | Python, Playwright for complex | TS with Playwright, Cheerio |
Building a database or app | Python with SQL (postgres or sqlite) with Flask api | Datasette, Django | Python with Django framework | TS with DuckDB or sqlite |
Training an AI model | Python all the way! | | | |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | Sheets/Github Actions + Flourish | Google sheets and Datawrapper | GSheets and Datawrapper |
Scraping data | Python with Playwright/Selenium. But I also look for undocumented APIs | Python + requests library. Browser automation (selenium/playwright) a last resort | Python, Playwright for complex | TS with Playwright, Cheerio |
Building a database or app | Python with SQL (postgres or sqlite) with Flask api | Datasette, Django | Python with Django framework | TS with DuckDB or sqlite |
Training an AI model | Python all the way! | Python | | |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | Sheets/Github Actions + Flourish | Google sheets and Datawrapper | GSheets and Datawrapper |
Scraping data | Python with Playwright/Selenium. But I also look for undocumented APIs | Python + requests library. Browser automation (selenium/playwright) a last resort | Python, Playwright for complex | TS with Playwright, Cheerio |
Building a database or app | Python with SQL (postgres or sqlite) with Flask api | Datasette, Django | Python with Django framework | TS with DuckDB or sqlite |
Training an AI model | Python all the way! | Python | Python | |
What would you use if you were… (2/2)
| Tazbia | Kai | Carla | Nael |
In a breaking news situation | Google Sheets with Datawrapper | Sheets/Github Actions + Flourish | Google sheets and Datawrapper | GSheets and Datawrapper |
Scraping data | Python with Playwright/Selenium. But I also look for undocumented APIs | Python + requests library. Browser automation (selenium/playwright) a last resort | Python, Playwright for complex | TS with Playwright, Cheerio |
Building a database or app | Python with SQL (postgres or sqlite) with Flask api | Datasette, Django | Python with Django framework | TS with DuckDB or sqlite |
Training an AI model | Python all the way! | Python | Python | Hugging Face / Python |
Questions? :)
NICAR 2025
bit.ly/nicar25-which-language