Compare commits

...

76 Commits

Author SHA1 Message Date
Arik Chakma
7e83371e97 fix: remove varify 2025-09-05 03:54:28 +06:00
Arik Chakma
cc2e75c812 chore: remove varify 2025-09-05 00:06:41 +06:00
V Sridhar Subramaniam
24eace0f73 Add pandas library content (#9113)
* Added a description and couple of links

* Update src/data/roadmaps/machine-learning/content/pandas@PnOoShqB3z4LuUvp0Gh2e.md

---------

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2025-09-04 10:31:54 +01:00
Favor
3c06b122e6 fix: course banner overlays the table of contents (#9097)
* fix: prevent sticky elements from overlapping with course announcement

- Changed sticky positioning from top-0 to top-[36px] in GuideContent.tsx
- Changed sticky positioning from top-0 to top-[36px] in TableOfContent.tsx
- This accounts for the maximum height of the CourseAnnouncement component
- Fixes visual overlap for both 'Other Guides' and 'In this article' sections

* fix: stop "In this article" title from overlapping with CourseAnnouncement component

* Add comment for announcement hide duration

Added a clarifying comment indicating that the announcement is hidden for 14 days when dismissed.

* revert unrelated files
2025-09-04 10:29:20 +01:00
Arik Chakma
2fdb647413 fix: duplicate guides (#9110) 2025-09-03 13:06:42 +01:00
Obscure octopus
3ca9f81298 Update learning resource (#9091)
Included a updated version of git & github crash course as earlier version was 8 years old
2025-09-03 12:52:14 +01:00
shreyazh
56c4630e0d Fix typo (#9100)
Corrected spelling from WHow to How
2025-09-03 12:50:07 +01:00
Daniel Wolff
36af3ddcf1 Fix typo (#9101)
Fixed the name of the tool (Perfect->Prefect)

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2025-09-03 12:49:48 +01:00
github-actions[bot]
0e7afe3c99 chore: sync content to repository - nextjs (#9098)
* chore: sync content to repo

* Update src/data/roadmaps/nextjs/content/adapters@fXXlJ6oN_YPWVr-fqEar3.md

---------

Co-authored-by: kamranahmedse <4921183+kamranahmedse@users.noreply.github.com>
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2025-09-03 12:44:49 +01:00
kamranahmedse
b605fd6337 chore: sync content to repo 2025-09-03 12:43:21 +01:00
kamranahmedse
ba1e5a58b5 chore: sync content to repo 2025-09-03 12:43:01 +01:00
Arik Chakma
dd12cf1c99 fix: remove log 2025-09-03 11:02:46 +01:00
Arik Chakma
44854cc5fb fix: official roadmap json 2025-09-03 11:02:46 +01:00
Arik Chakma
b1e60f1614 fix: beginner roadmaps 2025-09-02 17:54:54 +01:00
Arik Chakma
168ad05afe fix: project card 2025-09-02 17:54:54 +01:00
Arik Chakma
bb0419bf8a feat: official project 2025-09-02 17:54:54 +01:00
Kamran Ahmed
2d18cefd55 Revert "Revert "feat: official roadmap meta"" (#9096)
* Revert "Revert "chore: update roadmap json endpoint""

This reverts commit 8dbe1468ed.

* Revert "Revert "feat: roadmap main page""

This reverts commit bb13bf38a8.

* Revert "Revert "chore: replace roadmap listing""

This reverts commit 80dfd5b206.

* Revert "Revert "feat: roadmap courses""

This reverts commit a89c2d454f.

* Revert "Revert "fix: course length""

This reverts commit d1cf7cca99.

* Revert "Revert "feat: roadmap with courses""

This reverts commit 9c32f9d469.

* Revert "Revert "chore: disable pre-render for roadmaps""

This reverts commit cef4c29f10.
2025-09-01 20:22:54 +01:00
Arik Chakma
931e1b4a31 fix: rename key 2025-09-01 20:12:50 +01:00
Arik Chakma
e2075529ac feat: add roadmap key 2025-09-01 20:12:50 +01:00
Kamran Ahmed
8dbe1468ed Revert "chore: update roadmap json endpoint"
This reverts commit 580e764097.
2025-09-01 18:56:02 +01:00
Kamran Ahmed
bb13bf38a8 Revert "feat: roadmap main page"
This reverts commit ffb1cb5059.
2025-09-01 18:56:02 +01:00
Kamran Ahmed
80dfd5b206 Revert "chore: replace roadmap listing"
This reverts commit c4c28944ee.
2025-09-01 18:56:02 +01:00
Kamran Ahmed
a89c2d454f Revert "feat: roadmap courses"
This reverts commit f9f38101f9.
2025-09-01 18:56:02 +01:00
Kamran Ahmed
d1cf7cca99 Revert "fix: course length"
This reverts commit 40c7ea1b43.
2025-09-01 18:56:02 +01:00
Kamran Ahmed
9c32f9d469 Revert "feat: roadmap with courses"
This reverts commit 4e569df2a3.
2025-09-01 18:56:02 +01:00
Kamran Ahmed
cef4c29f10 Revert "chore: disable pre-render for roadmaps"
This reverts commit 679e29d12d.
2025-09-01 18:56:02 +01:00
Arik Chakma
679e29d12d chore: disable pre-render for roadmaps 2025-09-01 18:11:04 +01:00
Arik Chakma
4e569df2a3 feat: roadmap with courses 2025-09-01 18:11:04 +01:00
Arik Chakma
40c7ea1b43 fix: course length 2025-09-01 18:11:04 +01:00
Arik Chakma
f9f38101f9 feat: roadmap courses 2025-09-01 18:11:04 +01:00
Arik Chakma
c4c28944ee chore: replace roadmap listing 2025-09-01 18:11:04 +01:00
Arik Chakma
ffb1cb5059 feat: roadmap main page 2025-09-01 18:11:04 +01:00
Arik Chakma
580e764097 chore: update roadmap json endpoint 2025-09-01 18:11:04 +01:00
github-actions[bot]
111a97bb55 chore: sync content to repo (#9076)
Co-authored-by: kamranahmedse <4921183+kamranahmedse@users.noreply.github.com>
2025-09-01 17:15:22 +06:00
kamranahmedse
5d85495d72 chore: sync content to repo 2025-08-28 15:01:48 +01:00
Kamran Ahmed
ed2a251de4 Add content to Data Engineer Roadmap (#9016)
* Add basic content

* add content to data engineer roadmap

* add content to DE roadmap and fix some typos in content appearing in several roadmaps

* batch of new content for data engineer roadmap

* new batch of content from DE roadmap

* new batch in DE roadmap with 25 contents

* add 30 new content for DE roadmap

* new 30 contents for DE roadmap

* add last batch of content for DE roadmap. Ready to PR

* add 4 missing contents

* clean typo in de roadmap

---------

Co-authored-by: Javi Canales <javicanales@Dans-Laptop.local>
2025-08-28 14:59:59 +01:00
Kamran Ahmed
449e8f12e4 Add nextjs roadmap 2025-08-27 03:10:03 +01:00
Kamran Ahmed
a15b13cedd Add nextjs assets 2025-08-27 03:07:21 +01:00
Kamran Ahmed
609683db2f Add nextjs roadmap 2025-08-27 03:05:47 +01:00
Arik Chakma
3e21d05767 chore: event on limit exceed (#9069) 2025-08-25 20:52:47 +01:00
Sara Montemaggi
82edfba6e9 Add exception handling resource (#9073)
Added link to well made introductory tutorial on the topic of exception handling in Java
2025-08-25 17:59:01 +01:00
Dr. Lloyd
65d7a737ac Add ansible resource (#9078)
* Update ansible@h9vVPOmdUSeEGVQQaSTH5.md

This a full Ansible Course I took and it really helped me to upskill. I believe the community will benefit a lot from this course.

* Update src/data/roadmaps/devops/content/ansible@h9vVPOmdUSeEGVQQaSTH5.md

---------

Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2025-08-25 17:58:03 +01:00
Kamran Ahmed
2e0a69ad72 Fix changelog issue 2025-08-22 17:11:37 +01:00
Arik Chakma
485ffcf755 feat: not found topics 2025-08-22 15:53:55 +01:00
kamranahmedse
12ae7de3c5 chore: sync content to repo 2025-08-21 18:14:25 +01:00
Kamran Ahmed
9316d4027f Add BI analyst roadmap 2025-08-21 17:47:33 +01:00
Kamran Ahmed
5a63432412 Add BI analyst 2025-08-21 17:45:26 +01:00
kamranahmedse
ffecb5ae1a chore: sync content to repo 2025-08-21 16:21:29 +01:00
Kamran Ahmed
7a51c1af6c fix: broken syntax of workflow 2025-08-21 16:19:03 +01:00
Arik Chakma
6970cccc85 chore: add kamran 2025-08-21 16:04:23 +01:00
Arik Chakma
78940d44a9 fix: replace sync endpoint 2025-08-21 16:04:23 +01:00
Arik Chakma
6f11403a41 feat: migrate content to database 2025-08-21 16:04:23 +01:00
Arik Chakma
214799b0c2 chore: replace topic content 2025-08-21 16:04:23 +01:00
Arik Chakma
b5f564cba4 chore: add javi as reviewers 2025-08-21 16:04:23 +01:00
Kamran Ahmed
df53280ee9 Fix broken build 2025-08-20 23:29:32 +01:00
Kamran Ahmed
487a6a222b Pull changelog from backoffice 2025-08-20 23:20:37 +01:00
Kamran Ahmed
7933e222ee Remove guides and outdated functionality (#9055) 2025-08-20 17:54:08 +01:00
github-actions[bot]
e7b8c033fb chore: sync content to repo (#9062)
Co-authored-by: kamranahmedse <4921183+kamranahmedse@users.noreply.github.com>
2025-08-20 17:32:43 +01:00
AhfricanAce
d893d0fe5d Update stdout--stdin--stderr@t3fxSgCgtxuMtHjclPHA6.md (#9052)
It's best advised to refer to the three main basic objects of the STDIO as "Data streams".
2025-08-20 16:07:08 +01:00
github-actions[bot]
1c8571e484 chore: sync content to repo (#9061)
Co-authored-by: kamranahmedse <4921183+kamranahmedse@users.noreply.github.com>
2025-08-20 16:06:54 +01:00
Arik Chakma
3b43ed33c1 chore: linear algebra content (#9060) 2025-08-20 20:43:26 +06:00
github-actions[bot]
8a276d8e04 chore: sync content to repo (#9059)
Co-authored-by: kamranahmedse <4921183+kamranahmedse@users.noreply.github.com>
2025-08-20 20:39:57 +06:00
Arik Chakma
36a9e987b5 fix: sync content to database (#9058) 2025-08-20 20:36:47 +06:00
github-actions[bot]
402104665e chore: sync content to repo (#9057)
Co-authored-by: kamranahmedse <4921183+kamranahmedse@users.noreply.github.com>
2025-08-20 15:17:39 +01:00
Arik Chakma
9ec3c1fb9d fix: topic path 2025-08-20 15:09:14 +01:00
Arik Chakma
179cefe4da fix: remove title 2025-08-20 15:09:14 +01:00
Arik Chakma
93c1ea0496 fix: sync content description 2025-08-20 15:09:14 +01:00
Kamran Ahmed
cb7c13fd1b Make sync to not run for github actions 2025-08-20 14:24:21 +01:00
github-actions[bot]
704657cb36 Add content to Machine Learning (#9054)
* chore: sync content to repo

* Update src/data/roadmaps/machine-learning/introduction@MEL6y3vwiqwAV6FQihF34.md

* Update src/data/roadmaps/machine-learning/what-is-an-ml-engineer@FgzPlLUfGdlZPvPku0-Xl.md

---------

Co-authored-by: kamranahmedse <4921183+kamranahmedse@users.noreply.github.com>
Co-authored-by: Kamran Ahmed <kamranahmed.se@gmail.com>
2025-08-20 14:21:03 +01:00
Kamran Ahmed
eba3a78c70 Update .github/workflows/sync-content-to-repo.yml 2025-08-20 13:49:19 +01:00
Kamran Ahmed
d6cf9eb66d Update .github/workflows/sync-content-to-repo.yml 2025-08-20 13:49:19 +01:00
Arik Chakma
885e95399e fix: sync repo to db 2025-08-20 13:49:19 +01:00
Arik Chakma
d70582411e chore: sync repo to database 2025-08-20 13:49:19 +01:00
Arik Chakma
07277708eb fix: replace the api endpoint 2025-08-20 13:49:19 +01:00
Arik Chakma
87280b4c9e chore: sync content to repo 2025-08-20 13:49:19 +01:00
Kamran Ahmed
91b0a232ab Fix typos 2025-08-20 13:02:32 +01:00
943 changed files with 14184 additions and 24639 deletions

View File

@@ -3,6 +3,6 @@
"enabled": false
},
"_variables": {
"lastUpdateCheck": 1755042938009
"lastUpdateCheck": 1756224238932
}
}

1
.astro/types.d.ts vendored
View File

@@ -1 +1,2 @@
/// <reference types="astro/client" />
/// <reference path="content.d.ts" />

View File

@@ -7,4 +7,6 @@ PUBLIC_STRIPE_INDIVIDUAL_MONTHLY_PRICE_ID=
PUBLIC_STRIPE_INDIVIDUAL_YEARLY_PRICE_ID=
PUBLIC_STRIPE_INDIVIDUAL_MONTHLY_PRICE_AMOUNT=10
PUBLIC_STRIPE_INDIVIDUAL_YEARLY_PRICE_AMOUNT=100
PUBLIC_STRIPE_INDIVIDUAL_YEARLY_PRICE_AMOUNT=100
ROADMAP_API_KEY=

View File

@@ -0,0 +1,66 @@
name: Sync Content to Repo
on:
workflow_dispatch:
inputs:
roadmap_slug:
description: "The ID of the roadmap to sync"
required: true
default: "__default__"
jobs:
sync-content:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup pnpm@v9
uses: pnpm/action-setup@v4
with:
version: 9
run_install: false
- name: Setup Node.js Version 20 (LTS)
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- name: Install Dependencies and Sync Content
run: |
echo "Installing Dependencies"
pnpm install
echo "Syncing Content to Repo"
npm run sync:content-to-repo -- --roadmap-slug=${{ inputs.roadmap_slug }} --secret=${{ secrets.GH_SYNC_SECRET }}
- name: Check for changes
id: verify-changed-files
run: |
if [ -n "$(git status --porcelain)" ]; then
echo "changed=true" >> $GITHUB_OUTPUT
else
echo "changed=false" >> $GITHUB_OUTPUT
fi
- name: Create PR
if: steps.verify-changed-files.outputs.changed == 'true'
uses: peter-evans/create-pull-request@v7
with:
delete-branch: false
branch: "chore/sync-content-to-repo-${{ inputs.roadmap_slug }}"
base: "master"
labels: |
automated pr
reviewers: jcanalesluna,kamranahmedse
commit-message: "chore: sync content to repo"
title: "chore: sync content to repository - ${{ inputs.roadmap_slug }}"
body: |
## Sync Content to Repo
> [!IMPORTANT]
> This PR Syncs the Content to the Repo for the Roadmap: ${{ inputs.roadmap_slug }}
>
> Commit: ${{ github.sha }}
> Workflow Path: ${{ github.workflow_ref }}
**Please Review the Changes and Merge the PR if everything is fine.**

View File

@@ -0,0 +1,67 @@
name: Sync on Roadmap Changes
on:
push:
branches:
- master
paths:
- 'src/data/roadmaps/**'
jobs:
sync-on-changes:
runs-on: ubuntu-latest
if: github.actor != 'github-actions[bot]' && github.actor != 'dependabot[bot]'
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 2 # Fetch previous commit to compare changes
- name: Setup pnpm@v9
uses: pnpm/action-setup@v4
with:
version: 9
run_install: false
- name: Setup Node.js Version 20 (LTS)
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'
- name: Get changed files
id: changed-files
run: |
echo "Getting changed files in /src/data/roadmaps/"
# Get changed files between HEAD and previous commit
CHANGED_FILES=$(git diff --name-only HEAD~1 HEAD -- src/data/roadmaps/)
if [ -z "$CHANGED_FILES" ]; then
echo "No changes found in roadmaps directory"
echo "has_changes=false" >> $GITHUB_OUTPUT
exit 0
fi
echo "Changed files:"
echo "$CHANGED_FILES"
# Convert to space-separated list for the script
CHANGED_FILES_LIST=$(echo "$CHANGED_FILES" | tr '\n' ',')
echo "has_changes=true" >> $GITHUB_OUTPUT
echo "changed_files=$CHANGED_FILES_LIST" >> $GITHUB_OUTPUT
- name: Install Dependencies
if: steps.changed-files.outputs.has_changes == 'true'
run: |
echo "Installing Dependencies"
pnpm install
- name: Run sync script with changed files
if: steps.changed-files.outputs.has_changes == 'true'
run: |
echo "Running sync script for changed roadmap files"
echo "Changed files: ${{ steps.changed-files.outputs.changed_files }}"
# Run your script with the changed file paths
npm run sync:repo-to-database -- --files="${{ steps.changed-files.outputs.changed_files }}" --secret=${{ secrets.GH_SYNC_SECRET }}

View File

@@ -29,6 +29,9 @@
"compress:images": "tsx ./scripts/compress-images.ts",
"generate:roadmap-content-json": "tsx ./scripts/editor-roadmap-content-json.ts",
"migrate:editor-roadmaps": "tsx ./scripts/migrate-editor-roadmap.ts",
"sync:content-to-repo": "tsx ./scripts/sync-content-to-repo.ts",
"sync:repo-to-database": "tsx ./scripts/sync-repo-to-database.ts",
"migrate:content-repo-to-database": "tsx ./scripts/migrate-content-repo-to-database.ts",
"test:e2e": "playwright test"
},
"dependencies": {

2
pnpm-lock.yaml generated
View File

@@ -9897,4 +9897,4 @@ snapshots:
react: 19.1.0
use-sync-external-store: 1.5.0(react@19.1.0)
zwitch@2.0.4: {}
zwitch@2.0.4: {}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 351 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 420 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 431 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 242 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 572 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 283 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 437 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 799 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 233 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 756 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 685 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 835 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 602 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 345 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 516 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 633 KiB

BIN
public/roadmaps/nextjs.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 KiB

View File

@@ -47,6 +47,7 @@ Here is the list of available roadmaps with more being actively worked upon.
- [Linux Roadmap](https://roadmap.sh/linux)
- [Terraform Roadmap](https://roadmap.sh/terraform)
- [Data Analyst Roadmap](https://roadmap.sh/data-analyst)
- [BI Analyst Roadmap](https://roadmap.sh/bi-analyst)
- [Data Engineer Roadmap](https://roadmap.sh/data-engineer)
- [Machine Learning Roadmap](https://roadmap.sh/machine-learning)
- [MLOps Roadmap](https://roadmap.sh/mlops)
@@ -61,6 +62,7 @@ Here is the list of available roadmaps with more being actively worked upon.
- [TypeScript Roadmap](https://roadmap.sh/typescript)
- [C++ Roadmap](https://roadmap.sh/cpp)
- [React Roadmap](https://roadmap.sh/react)
- [Next.js Roadmap](https://roadmap.sh/nextjs)
- [React Native Roadmap](https://roadmap.sh/react-native)
- [Vue Roadmap](https://roadmap.sh/vue)
- [Angular Roadmap](https://roadmap.sh/angular)

View File

@@ -0,0 +1,255 @@
import fs from 'node:fs/promises';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import type { OfficialRoadmapDocument } from '../src/queries/official-roadmap';
import { parse } from 'node-html-parser';
import { markdownToHtml } from '../src/lib/markdown';
import { htmlToMarkdown } from '../src/lib/html';
import matter from 'gray-matter';
import type { RoadmapFrontmatter } from '../src/lib/roadmap';
import {
allowedOfficialRoadmapTopicResourceType,
type AllowedOfficialRoadmapTopicResourceType,
type SyncToDatabaseTopicContent,
} from '../src/queries/official-roadmap-topic';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const args = process.argv.slice(2);
const secret = args
.find((arg) => arg.startsWith('--secret='))
?.replace('--secret=', '');
if (!secret) {
throw new Error('Secret is required');
}
let roadmapJsonCache: Map<string, OfficialRoadmapDocument> = new Map();
export async function fetchRoadmapJson(
roadmapId: string,
): Promise<OfficialRoadmapDocument> {
if (roadmapJsonCache.has(roadmapId)) {
return roadmapJsonCache.get(roadmapId)!;
}
const response = await fetch(
`https://roadmap.sh/api/v1-official-roadmap/${roadmapId}`,
);
if (!response.ok) {
throw new Error(
`Failed to fetch roadmap json: ${response.statusText} for ${roadmapId}`,
);
}
const data = await response.json();
if (data.error) {
throw new Error(
`Failed to fetch roadmap json: ${data.error} for ${roadmapId}`,
);
}
roadmapJsonCache.set(roadmapId, data);
return data;
}
export async function syncContentToDatabase(
topics: SyncToDatabaseTopicContent[],
) {
const response = await fetch(
`https://roadmap.sh/api/v1-sync-official-roadmap-topics`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
topics,
secret,
}),
},
);
if (!response.ok) {
const error = await response.json();
throw new Error(
`Failed to sync content to database: ${response.statusText} ${JSON.stringify(error, null, 2)}`,
);
}
return response.json();
}
// Directory containing the roadmaps
const ROADMAP_CONTENT_DIR = path.join(__dirname, '../src/data/roadmaps');
const allRoadmaps = await fs.readdir(ROADMAP_CONTENT_DIR);
const editorRoadmapIds = new Set<string>();
for (const roadmapId of allRoadmaps) {
const roadmapFrontmatterDir = path.join(
ROADMAP_CONTENT_DIR,
roadmapId,
`${roadmapId}.md`,
);
const roadmapFrontmatterRaw = await fs.readFile(
roadmapFrontmatterDir,
'utf-8',
);
const { data } = matter(roadmapFrontmatterRaw);
const roadmapFrontmatter = data as RoadmapFrontmatter;
if (roadmapFrontmatter.renderer === 'editor') {
editorRoadmapIds.add(roadmapId);
}
}
for (const roadmapId of editorRoadmapIds) {
try {
const roadmap = await fetchRoadmapJson(roadmapId);
const files = await fs.readdir(
path.join(ROADMAP_CONTENT_DIR, roadmapId, 'content'),
);
console.log(`🚀 Starting ${files.length} files for ${roadmapId}`);
const topics: SyncToDatabaseTopicContent[] = [];
for (const file of files) {
const isContentFile = file.endsWith('.md');
if (!isContentFile) {
console.log(`🚨 Skipping ${file} because it is not a content file`);
continue;
}
const nodeSlug = file.replace('.md', '');
if (!nodeSlug) {
console.error(`🚨 Node id is required: ${file}`);
continue;
}
const nodeId = nodeSlug.split('@')?.[1];
if (!nodeId) {
console.error(`🚨 Node id is required: ${file}`);
continue;
}
const node = roadmap.nodes.find((node) => node.id === nodeId);
if (!node) {
console.error(`🚨 Node not found: ${file}`);
continue;
}
const filePath = path.join(
ROADMAP_CONTENT_DIR,
roadmapId,
'content',
`${nodeSlug}.md`,
);
const fileExists = await fs
.stat(filePath)
.then(() => true)
.catch(() => false);
if (!fileExists) {
console.log(`🚨 File not found: ${filePath}`);
continue;
}
const content = await fs.readFile(filePath, 'utf8');
const html = markdownToHtml(content, false);
const rootHtml = parse(html);
let ulWithLinks: HTMLElement | undefined;
rootHtml.querySelectorAll('ul').forEach((ul) => {
const listWithJustLinks = Array.from(ul.querySelectorAll('li')).filter(
(li) => {
const link = li.querySelector('a');
return link && link.textContent?.trim() === li.textContent?.trim();
},
);
if (listWithJustLinks.length > 0) {
// @ts-expect-error - TODO: fix this
ulWithLinks = ul;
}
});
const listLinks: SyncToDatabaseTopicContent['resources'] =
ulWithLinks !== undefined
? Array.from(ulWithLinks.querySelectorAll('li > a'))
.map((link) => {
const typePattern = /@([a-z.]+)@/;
let linkText = link.textContent || '';
const linkHref = link.getAttribute('href') || '';
let linkType = linkText.match(typePattern)?.[1] || 'article';
linkType = allowedOfficialRoadmapTopicResourceType.includes(
linkType as any,
)
? linkType
: 'article';
linkText = linkText.replace(typePattern, '');
if (!linkText || !linkHref) {
return null;
}
return {
title: linkText,
url: linkHref,
type: linkType as AllowedOfficialRoadmapTopicResourceType,
};
})
.filter((link) => link !== null)
.sort((a, b) => {
const order = [
'official',
'opensource',
'article',
'video',
'feed',
];
return order.indexOf(a!.type) - order.indexOf(b!.type);
})
: [];
const title = rootHtml.querySelector('h1');
ulWithLinks?.remove();
title?.remove();
const allParagraphs = rootHtml.querySelectorAll('p');
if (listLinks.length > 0 && allParagraphs.length > 0) {
// to remove the view more see more from the description
const lastParagraph = allParagraphs[allParagraphs.length - 1];
lastParagraph?.remove();
}
const htmlStringWithoutLinks = rootHtml.toString();
const description = htmlToMarkdown(htmlStringWithoutLinks);
const updatedDescription =
`# ${title?.textContent}\n\n${description}`.trim();
const label = node?.data?.label as string;
if (!label) {
console.error(`🚨 Label is required: ${file}`);
continue;
}
topics.push({
roadmapSlug: roadmapId,
nodeId,
description: updatedDescription,
resources: listLinks,
});
}
await syncContentToDatabase(topics);
console.log(
`✅ Synced ${topics.length} topics to database for ${roadmapId}`,
);
} catch (error) {
console.error(error);
process.exit(1);
}
}

View File

@@ -0,0 +1,113 @@
import fs from 'node:fs/promises';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import { slugify } from '../src/lib/slugger';
import type { OfficialRoadmapDocument } from '../src/queries/official-roadmap';
import type { OfficialRoadmapTopicContentDocument } from '../src/queries/official-roadmap-topic';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const args = process.argv.slice(2);
const roadmapSlug = args?.[0]?.replace('--roadmap-slug=', '');
const secret = args?.[1]?.replace('--secret=', '');
if (!secret) {
throw new Error('Secret is required');
}
if (!roadmapSlug || roadmapSlug === '__default__') {
throw new Error('Roadmap slug is required');
}
console.log(`🚀 Starting ${roadmapSlug}`);
export async function roadmapTopics(
roadmapId: string,
secret: string,
): Promise<OfficialRoadmapTopicContentDocument[]> {
const path = `https://roadmap.sh/api/v1-list-official-roadmap-topics/${roadmapId}?secret=${secret}`;
const response = await fetch(path);
if (!response.ok) {
throw new Error(`Failed to fetch roadmap topics: ${response.statusText}`);
}
const data = await response.json();
if (data.error) {
throw new Error(`Failed to fetch roadmap topics: ${data.error}`);
}
return data;
}
export async function fetchRoadmapJson(
roadmapId: string,
): Promise<OfficialRoadmapDocument> {
const response = await fetch(
`https://roadmap.sh/api/v1-official-roadmap/${roadmapId}`,
);
if (!response.ok) {
throw new Error(`Failed to fetch roadmap json: ${response.statusText}`);
}
const data = await response.json();
if (data.error) {
throw new Error(`Failed to fetch roadmap json: ${data.error}`);
}
return data;
}
// Directory containing the roadmaps
const ROADMAP_CONTENT_DIR = path.join(
__dirname,
'../src/data/roadmaps',
roadmapSlug,
);
const allTopics = await roadmapTopics(roadmapSlug, secret);
const roadmap = await fetchRoadmapJson(roadmapSlug);
const { nodes } = roadmap;
for (const topic of allTopics) {
const { nodeId } = topic;
const node = nodes.find((node) => node.id === nodeId);
if (!node) {
console.error(`Node not found: ${nodeId}`);
continue;
}
const label = node?.data?.label as string;
if (!label) {
console.error(`Label not found: ${nodeId}`);
continue;
}
const topicSlug = `${slugify(label)}@${nodeId}.md`;
const topicPath = path.join(ROADMAP_CONTENT_DIR, 'content', topicSlug);
const topicDir = path.dirname(topicPath);
const topicDirExists = await fs
.stat(topicDir)
.then(() => true)
.catch(() => false);
if (!topicDirExists) {
await fs.mkdir(topicDir, { recursive: true });
}
const topicContent = prepareTopicContent(topic);
await fs.writeFile(topicPath, topicContent);
console.log(`✅ Synced ${topicSlug}`);
}
function prepareTopicContent(topic: OfficialRoadmapTopicContentDocument) {
const { description, resources = [] } = topic;
let content = description;
if (resources.length > 0) {
content += `\n\nVisit the following resources to learn more:\n\n${resources.map((resource) => `- [@${resource.type}@${resource.title}](${resource.url})`).join('\n')}`;
}
return content;
}

View File

@@ -0,0 +1,238 @@
import fs from 'node:fs/promises';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import type { OfficialRoadmapDocument } from '../src/queries/official-roadmap';
import { parse } from 'node-html-parser';
import { markdownToHtml } from '../src/lib/markdown';
import { htmlToMarkdown } from '../src/lib/html';
import {
allowedOfficialRoadmapTopicResourceType,
type AllowedOfficialRoadmapTopicResourceType,
type SyncToDatabaseTopicContent,
} from '../src/queries/official-roadmap-topic';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const args = process.argv.slice(2);
const allFiles = args
.find((arg) => arg.startsWith('--files='))
?.replace('--files=', '');
const secret = args
.find((arg) => arg.startsWith('--secret='))
?.replace('--secret=', '');
if (!secret) {
throw new Error('Secret is required');
}
let roadmapJsonCache: Map<string, OfficialRoadmapDocument> = new Map();
export async function fetchRoadmapJson(
roadmapId: string,
): Promise<OfficialRoadmapDocument> {
if (roadmapJsonCache.has(roadmapId)) {
return roadmapJsonCache.get(roadmapId)!;
}
const response = await fetch(
`https://roadmap.sh/api/v1-official-roadmap/${roadmapId}`,
);
if (!response.ok) {
throw new Error(
`Failed to fetch roadmap json: ${response.statusText} for ${roadmapId}`,
);
}
const data = await response.json();
if (data.error) {
throw new Error(
`Failed to fetch roadmap json: ${data.error} for ${roadmapId}`,
);
}
roadmapJsonCache.set(roadmapId, data);
return data;
}
export async function syncContentToDatabase(
topics: SyncToDatabaseTopicContent[],
) {
const response = await fetch(
`https://roadmap.sh/api/v1-sync-official-roadmap-topics`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
topics,
secret,
}),
},
);
if (!response.ok) {
const error = await response.json();
throw new Error(
`Failed to sync content to database: ${response.statusText} ${JSON.stringify(error, null, 2)}`,
);
}
return response.json();
}
const files =
allFiles
?.split(',')
.map((file) => file.trim())
.filter(Boolean) || [];
if (files.length === 0) {
console.log('No files to sync');
process.exit(0);
}
console.log(`🚀 Starting ${files.length} files`);
const ROADMAP_CONTENT_DIR = path.join(__dirname, '../src/data/roadmaps');
try {
const topics: SyncToDatabaseTopicContent[] = [];
for (const file of files) {
const isContentFile = file.endsWith('.md') && file.includes('content/');
if (!isContentFile) {
console.log(`🚨 Skipping ${file} because it is not a content file`);
continue;
}
const pathParts = file.replace('src/data/roadmaps/', '').split('/');
const roadmapSlug = pathParts?.[0];
if (!roadmapSlug) {
console.error(`🚨 Roadmap slug is required: ${file}`);
continue;
}
const nodeSlug = pathParts?.[2]?.replace('.md', '');
if (!nodeSlug) {
console.error(`🚨 Node id is required: ${file}`);
continue;
}
const nodeId = nodeSlug.split('@')?.[1];
if (!nodeId) {
console.error(`🚨 Node id is required: ${file}`);
continue;
}
const roadmap = await fetchRoadmapJson(roadmapSlug);
const node = roadmap.nodes.find((node) => node.id === nodeId);
if (!node) {
console.error(`🚨 Node not found: ${file}`);
continue;
}
const filePath = path.join(
ROADMAP_CONTENT_DIR,
roadmapSlug,
'content',
`${nodeSlug}.md`,
);
const fileExists = await fs
.stat(filePath)
.then(() => true)
.catch(() => false);
if (!fileExists) {
console.log(`🚨 File not found: ${filePath}`);
continue;
}
const content = await fs.readFile(filePath, 'utf8');
const html = markdownToHtml(content, false);
const rootHtml = parse(html);
let ulWithLinks: HTMLElement | undefined;
rootHtml.querySelectorAll('ul').forEach((ul) => {
const listWithJustLinks = Array.from(ul.querySelectorAll('li')).filter(
(li) => {
const link = li.querySelector('a');
return link && link.textContent?.trim() === li.textContent?.trim();
},
);
if (listWithJustLinks.length > 0) {
// @ts-expect-error - TODO: fix this
ulWithLinks = ul;
}
});
const listLinks: SyncToDatabaseTopicContent['resources'] =
ulWithLinks !== undefined
? Array.from(ulWithLinks.querySelectorAll('li > a'))
.map((link) => {
const typePattern = /@([a-z.]+)@/;
let linkText = link.textContent || '';
const linkHref = link.getAttribute('href') || '';
let linkType = linkText.match(typePattern)?.[1] || 'article';
linkType = allowedOfficialRoadmapTopicResourceType.includes(
linkType as any,
)
? linkType
: 'article';
linkText = linkText.replace(typePattern, '');
return {
title: linkText,
url: linkHref,
type: linkType as AllowedOfficialRoadmapTopicResourceType,
};
})
.sort((a, b) => {
const order = [
'official',
'opensource',
'article',
'video',
'feed',
];
return order.indexOf(a.type) - order.indexOf(b.type);
})
: [];
const title = rootHtml.querySelector('h1');
ulWithLinks?.remove();
title?.remove();
const allParagraphs = rootHtml.querySelectorAll('p');
if (listLinks.length > 0 && allParagraphs.length > 0) {
// to remove the view more see more from the description
const lastParagraph = allParagraphs[allParagraphs.length - 1];
lastParagraph?.remove();
}
const htmlStringWithoutLinks = rootHtml.toString();
const description = htmlToMarkdown(htmlStringWithoutLinks);
const updatedDescription =
`# ${title?.textContent}\n\n${description}`.trim();
const label = node?.data?.label as string;
if (!label) {
console.error(`🚨 Label is required: ${file}`);
continue;
}
topics.push({
roadmapSlug,
nodeId,
description: updatedDescription,
resources: listLinks,
});
}
await syncContentToDatabase(topics);
} catch (error) {
console.error(error);
process.exit(1);
}

View File

@@ -4,7 +4,6 @@ import { getPageTrackingData } from '../../lib/browser';
declare global {
interface Window {
gtag: any;
varify: any;
fireEvent: (props: {
action: string;
category: string;
@@ -68,7 +67,7 @@ window.fireEvent = (props) => {
}
const trackingData = getPageTrackingData();
window.gtag('event', action, {
event_category: category,
event_label: label,

View File

@@ -1,45 +1,46 @@
---
import { DateTime } from 'luxon';
import type { ChangelogFileType } from '../../lib/changelog';
import ChangelogImages from '../ChangelogImages';
import type { ChangelogDocument } from '../../queries/changelog';
interface Props {
changelog: ChangelogFileType;
changelog: ChangelogDocument;
}
const { changelog } = Astro.props;
const { frontmatter } = changelog;
const formattedDate = DateTime.fromISO(frontmatter.date).toFormat(
const formattedDate = DateTime.fromISO(changelog.createdAt).toFormat(
'dd LLL, yyyy',
);
---
<div class='relative mb-6' id={changelog.id}>
<span
class='absolute -left-6 top-2 h-2 w-2 shrink-0 rounded-full bg-gray-300'
<div class='relative mb-6' id={changelog._id}>
<span class='absolute top-2 -left-6 h-2 w-2 shrink-0 rounded-full bg-gray-300'
></span>
<div class='mb-3 flex flex-col sm:flex-row items-start sm:items-center gap-0.5 sm:gap-2'>
<div
class='mb-3 flex flex-col items-start gap-0.5 sm:flex-row sm:items-center sm:gap-2'
>
<span class='shrink-0 text-xs tracking-wide text-gray-400'>
{formattedDate}
</span>
<span class='truncate text-base font-medium text-balance'>
{changelog.frontmatter.title}
{changelog.title}
</span>
</div>
<div class='rounded-xl border bg-white p-6'>
{frontmatter.images && (
<div class='mb-5 hidden sm:block -mx-6'>
<ChangelogImages images={frontmatter.images} client:load />
</div>
)}
{
changelog.images && (
<div class='-mx-6 mb-5 hidden sm:block'>
<ChangelogImages images={changelog.images} client:load />
</div>
)
}
<div
class='prose prose-sm prose-h2:mt-3 prose-h2:text-lg prose-h2:font-medium prose-p:mb-0 prose-blockquote:font-normal prose-blockquote:text-gray-500 prose-ul:my-0 prose-ul:rounded-lg prose-ul:bg-gray-100 prose-ul:px-4 prose-ul:py-4 prose-ul:pl-7 prose-img:mt-0 prose-img:rounded-lg [&>blockquote>p]:mt-0 [&>ul>li]:my-0 [&>ul>li]:mb-1 [&>ul]:mt-3'
>
<changelog.Content />
</div>
class='prose prose-sm [&_li_p]:my-0 prose-h2:mt-3 prose-h2:text-lg prose-h2:font-medium prose-p:mb-0 prose-blockquote:font-normal prose-blockquote:text-gray-500 prose-ul:my-0 prose-ul:rounded-lg prose-ul:bg-gray-100 prose-ul:px-4 prose-ul:py-4 prose-ul:pl-7 prose-img:mt-0 prose-img:rounded-lg [&>blockquote>p]:mt-0 [&>ul]:mt-3 [&>ul>li]:my-0 [&>ul>li]:mb-1'
set:html={changelog.description}
/>
</div>
</div>

View File

@@ -1,9 +1,9 @@
---
import { getAllChangelogs } from '../lib/changelog';
import { listChangelog } from '../queries/changelog';
import { DateTime } from 'luxon';
import AstroIcon from './AstroIcon.astro';
const allChangelogs = await getAllChangelogs();
const top10Changelogs = allChangelogs.slice(0, 10);
const changelogs = await listChangelog({ limit: 10 });
---
<div class='border-t bg-white py-6 text-left sm:py-16 sm:text-center'>
@@ -17,7 +17,7 @@ const top10Changelogs = allChangelogs.slice(0, 10);
Actively Maintained
</p>
<p
class='mb-2 mt-1 text-sm leading-relaxed text-gray-600 sm:my-2 sm:my-5 sm:text-lg'
class='mt-1 mb-2 text-sm leading-relaxed text-gray-600 sm:my-5 sm:text-lg'
>
We are always improving our content, adding new resources and adding
features to enhance your learning experience.
@@ -25,27 +25,27 @@ const top10Changelogs = allChangelogs.slice(0, 10);
<div class='relative mt-2 text-left sm:mt-8'>
<div
class='absolute inset-y-0 left-[120px] hidden w-px -translate-x-[0.5px] translate-x-[5.75px] bg-gray-300 sm:block'
class='absolute inset-y-0 left-[120px] hidden w-px translate-x-[5.75px] bg-gray-300 sm:block'
>
</div>
<ul class='relative flex flex-col gap-4 py-4'>
{
top10Changelogs.map((changelog) => {
changelogs.map((changelog) => {
const formattedDate = DateTime.fromISO(
changelog.frontmatter.date,
changelog.createdAt,
).toFormat('dd LLL, yyyy');
return (
<li class='relative'>
<a
href={`/changelog#${changelog.id}`}
href={`/changelog#${changelog._id}`}
class='flex flex-col items-start sm:flex-row sm:items-center'
>
<span class='shrink-0 pr-0 text-right text-sm tracking-wide text-gray-400 sm:w-[120px] sm:pr-4'>
{formattedDate}
</span>
<span class='hidden h-3 w-3 shrink-0 rounded-full bg-gray-300 sm:block' />
<span class='text-balance text-base font-medium text-gray-900 sm:pl-8'>
{changelog.frontmatter.title}
<span class='text-base font-medium text-balance text-gray-900 sm:pl-8'>
{changelog.title}
</span>
</a>
</li>
@@ -55,7 +55,7 @@ const top10Changelogs = allChangelogs.slice(0, 10);
</ul>
</div>
<div
class='mt-2 flex flex-col gap-2 sm:flex-row sm:mt-8 sm:items-center sm:justify-center'
class='mt-2 flex flex-col gap-2 sm:mt-8 sm:flex-row sm:items-center sm:justify-center'
>
<a
href='/changelog'
@@ -66,7 +66,7 @@ const top10Changelogs = allChangelogs.slice(0, 10);
<button
data-guest-required
data-popup='login-popup'
class='flex flex-row items-center gap-2 rounded-lg border border-black bg-white px-4 py-2 text-sm text-black transition-all hover:bg-black hover:text-white sm:rounded-full sm:pl-4 sm:pr-5 sm:text-base'
class='flex flex-row items-center gap-2 rounded-lg border border-black bg-white px-4 py-2 text-sm text-black transition-all hover:bg-black hover:text-white sm:rounded-full sm:pr-5 sm:pl-4 sm:text-base'
>
<AstroIcon icon='bell' class='h-5 w-5' />
Subscribe for Notifications

View File

@@ -1,13 +1,14 @@
import { ChevronLeft, ChevronRight } from 'lucide-react';
import React, { useState, useEffect, useCallback } from 'react';
import type { ChangelogImage } from '../queries/changelog';
interface ChangelogImagesProps {
images: { [key: string]: string };
images: ChangelogImage[];
}
const ChangelogImages: React.FC<ChangelogImagesProps> = ({ images }) => {
const [enlargedImage, setEnlargedImage] = useState<string | null>(null);
const imageArray = Object.entries(images);
const imageArray = images.map((image) => [image.title, image.url]);
const handleImageClick = (src: string) => {
setEnlargedImage(src);
@@ -63,10 +64,10 @@ const ChangelogImages: React.FC<ChangelogImagesProps> = ({ images }) => {
alt={title}
className="h-[120px] w-full object-cover object-left-top"
/>
<span className="absolute group-hover:opacity-0 inset-0 bg-linear-to-b from-transparent to-black/40" />
<span className="absolute inset-0 bg-linear-to-b from-transparent to-black/40 group-hover:opacity-0" />
<div className="absolute font-medium inset-x-0 top-full group-hover:inset-y-0 flex items-center justify-center px-2 text-center text-xs bg-black/50 text-white py-0.5 opacity-0 group-hover:opacity-100 cursor-pointer">
<span className='bg-black py-0.5 rounded-sm px-1'>{title}</span>
<div className="absolute inset-x-0 top-full flex cursor-pointer items-center justify-center bg-black/50 px-2 py-0.5 text-center text-xs font-medium text-white opacity-0 group-hover:inset-y-0 group-hover:opacity-100">
<span className="rounded-sm bg-black px-1 py-0.5">{title}</span>
</div>
</div>
))}
@@ -82,7 +83,7 @@ const ChangelogImages: React.FC<ChangelogImagesProps> = ({ images }) => {
className="max-h-[90%] max-w-[90%] rounded-xl object-contain"
/>
<button
className="absolute left-4 top-1/2 -translate-y-1/2 transform rounded-full bg-white/50 hover:bg-white/100 p-2"
className="absolute top-1/2 left-4 -translate-y-1/2 transform rounded-full bg-white/50 p-2 hover:bg-white/100"
onClick={(e) => {
e.stopPropagation();
handleNavigation('prev');
@@ -91,7 +92,7 @@ const ChangelogImages: React.FC<ChangelogImagesProps> = ({ images }) => {
<ChevronLeft size={24} />
</button>
<button
className="absolute right-4 top-1/2 -translate-y-1/2 transform rounded-full bg-white/50 hover:bg-white/100 p-2"
className="absolute top-1/2 right-4 -translate-y-1/2 transform rounded-full bg-white/50 p-2 hover:bg-white/100"
onClick={(e) => {
e.stopPropagation();
handleNavigation('next');

View File

@@ -23,7 +23,12 @@ type EditorRoadmapProps = {
};
export function EditorRoadmap(props: EditorRoadmapProps) {
const { resourceId, resourceType = 'roadmap', dimensions, hasChat = true } = props;
const {
resourceId,
resourceType = 'roadmap',
dimensions,
hasChat = true,
} = props;
const [hasSwitchedRoadmap, setHasSwitchedRoadmap] = useState(false);
const [isLoading, setIsLoading] = useState(true);

View File

@@ -1,3 +0,0 @@
<div class='text-sm sm:text-base leading-relaxed text-left p-2 sm:p-4 text-md text-gray-800 border-t border-t-gray-300 bg-gray-100 rounded-bl-md rounded-br-md [&>p:not(:last-child)]:mb-3 [&>p>a]:underline [&>p>a]:text-blue-700'>
<slot />
</div>

View File

@@ -1,42 +0,0 @@
---
import { markdownToHtml } from '../../lib/markdown';
import Answer from './Answer.astro';
import Question from './Question.astro';
export type FAQType = {
question: string;
answer: string[];
};
export interface Props {
faqs: FAQType[];
}
const { faqs } = Astro.props;
if (faqs.length === 0) {
return '';
}
---
<div class='border-t bg-gray-100 mt-8'>
<div class='container'>
<div class='flex justify-between relative -top-5'>
<h2 class='text-sm sm:text-base font-medium py-1 px-3 border bg-white rounded-md'>Frequently Asked Questions</h2>
</div>
<div class='flex flex-col gap-1 pb-14'>
{
faqs.map((faq, questionIndex) => (
<Question isActive={questionIndex === 0} question={faq.question}>
<Answer>
{faq.answer.map((answer) => (
<p set:html={markdownToHtml(answer)} />
))}
</Answer>
</Question>
))
}
</div>
</div>
</div>

View File

@@ -0,0 +1,61 @@
import { useState } from 'react';
import type { OfficialRoadmapQuestion } from '../../queries/official-roadmap';
import { Question } from './Question';
import { guideRenderer } from '../../lib/guide-renderer';
type FAQsProps = {
faqs: OfficialRoadmapQuestion[];
};
export function FAQs(props: FAQsProps) {
const { faqs } = props;
if (faqs.length === 0) {
return null;
}
const [activeQuestionIndex, setActiveQuestionIndex] = useState(0);
return (
<div className="mt-8 border-t bg-gray-100">
<div className="container">
<div className="relative -top-5 flex justify-between">
<h2 className="rounded-md border bg-white px-3 py-1 text-sm font-medium sm:text-base">
Frequently Asked Questions
</h2>
</div>
<div className="flex flex-col gap-1 pb-14">
{faqs.map((faq, questionIndex) => {
const isTextDescription =
typeof faq?.description === 'string' &&
faq?.description?.length > 0;
return (
<Question
key={faq._id}
isActive={questionIndex === activeQuestionIndex}
question={faq.title}
onClick={() => setActiveQuestionIndex(questionIndex)}
>
<div
className="text-md rounded-br-md rounded-bl-md border-t border-t-gray-300 bg-gray-100 p-2 text-left text-sm leading-relaxed text-gray-800 sm:p-4 sm:text-base [&>p:not(:last-child)]:mb-3 [&>p>a]:text-blue-700 [&>p>a]:underline"
{...(isTextDescription
? {
dangerouslySetInnerHTML: {
__html: faq.description,
},
}
: {})}
>
{!isTextDescription
? guideRenderer.render(faq.description)
: null}
</div>
</Question>
);
})}
</div>
</div>
</div>
);
}

View File

@@ -1,42 +0,0 @@
---
import Icon from '../AstroIcon.astro';
export interface Props {
question: string;
isActive?: boolean;
}
const { question, isActive = false } = Astro.props;
---
<div
class='faq-item bg-white border rounded-md hover:bg-gray-50 border-gray-300'
>
<button
faq-question
class='flex flex-row justify-between items-center p-2 sm:p-3 w-full'
>
<span class='text-sm sm:text-base text-left font-medium'>{question}</span>
<Icon icon='down' class='h-6 hidden sm:block text-gray-400' />
</button>
<div class:list={['answer', { hidden: !isActive }]} faq-answer>
<slot />
</div>
</div>
<script>
document.querySelectorAll('[faq-question]').forEach((el) => {
el.addEventListener('click', () => {
// Hide any other visible answers
document.querySelectorAll('[faq-answer]').forEach((element) => {
element.classList.add('hidden');
});
// Show the current answer
const answer = el.nextElementSibling;
if (answer) {
answer.classList.remove('hidden');
}
});
});
</script>

View File

@@ -0,0 +1,29 @@
import { cn } from '../../lib/classname';
import { ChevronDownIcon } from '../ReactIcons/ChevronDownIcon';
type QuestionProps = {
question: string;
isActive?: boolean;
children: React.ReactNode;
onClick?: () => void;
};
export function Question(props: QuestionProps) {
const { question, isActive = false, children, onClick } = props;
return (
<div className="faq-item rounded-md border border-gray-300 bg-white hover:bg-gray-50">
<button
className="flex w-full flex-row items-center justify-between p-2 sm:p-3"
onClick={onClick}
>
<span className="text-left text-sm font-medium sm:text-base">
{question}
</span>
<ChevronDownIcon className="hidden h-3.5 stroke-[3] text-gray-400 sm:block" />
</button>
{isActive && <div className={cn('answer')}>{children}</div>}
</div>
);
}

View File

@@ -25,7 +25,7 @@ export function ForkCourseAlert(props: ForkCourseAlertProps) {
)}
>
<p className="text-sm text-balance">
Fork the course to track progress and make changes to the course.
Fork the course to track you progress and make changes to the course.
</p>
<button

View File

@@ -1,6 +1,4 @@
---
import type { RoadmapFileType } from '../lib/roadmap';
export interface Props {
url: string;
title: string;
@@ -27,7 +25,7 @@ const { url, title, description, isNew } = Astro.props;
{
isNew && (
<span class='flex items-center gap-1.5 absolute bottom-1.5 right-1 rounded-xs text-xs font-semibold uppercase text-purple-500 sm:px-1.5'>
<span class='absolute right-1 bottom-1.5 flex items-center gap-1.5 rounded-xs text-xs font-semibold text-purple-500 uppercase sm:px-1.5'>
<span class='relative flex h-2 w-2'>
<span class='absolute inline-flex h-full w-full animate-ping rounded-full bg-purple-400 opacity-75' />
<span class='relative inline-flex h-2 w-2 rounded-full bg-purple-500' />

View File

@@ -19,7 +19,7 @@ export function GuideContent(props: GuideContentProps) {
return (
<article className="lg:grid lg:max-w-full lg:grid-cols-[1fr_minmax(0,700px)_1fr]">
{(showTableOfContent || hasRelatedGuides) && (
<div className="sticky top-0 bg-linear-to-r from-gray-50 py-0 lg:relative lg:col-start-3 lg:col-end-4 lg:row-start-1">
<div className="sticky top-[36px] bg-linear-to-r from-gray-50 py-0 lg:relative lg:col-start-3 lg:col-end-4 lg:row-start-1">
{hasRelatedGuides && (
<RelatedGuides relatedGuides={guide?.relatedGuides || []} />
)}

View File

@@ -3,21 +3,16 @@ import { useToast } from '../../hooks/use-toast';
import { httpGet, httpPost } from '../../lib/http';
import { LoadingSolutions } from './LoadingSolutions';
import { EmptySolutions } from './EmptySolutions';
import { ThumbsDown, ThumbsUp } from 'lucide-react';
import { getRelativeTimeString } from '../../lib/date';
import { Pagination } from '../Pagination/Pagination';
import { deleteUrlParam, getUrlParams, setUrlParams } from '../../lib/browser';
import { pageProgressMessage } from '../../stores/page';
import { LeavingRoadmapWarningModal } from './LeavingRoadmapWarningModal';
import { isLoggedIn } from '../../lib/jwt';
import { showLoginPopup } from '../../lib/popup';
import { VoteButton } from './VoteButton.tsx';
import { GitHubIcon } from '../ReactIcons/GitHubIcon.tsx';
import { SelectLanguages } from './SelectLanguages.tsx';
import type { ProjectFrontmatter } from '../../lib/project.ts';
import { ProjectSolutionModal } from './ProjectSolutionModal.tsx';
import { SortProjects } from './SortProjects.tsx';
import { ProjectSolutionRow } from './ProjectSolutionRow';
import type { OfficialProjectDocument } from '../../queries/official-project.ts';
export interface ProjectStatusDocument {
_id?: string;
@@ -69,12 +64,12 @@ type PageState = {
};
type ListProjectSolutionsProps = {
project: ProjectFrontmatter;
project: OfficialProjectDocument;
projectId: string;
};
export function ListProjectSolutions(props: ListProjectSolutionsProps) {
const { projectId, project: projectData } = props;
const { projectId, project } = props;
const toast = useToast();
const [pageState, setPageState] = useState<PageState>({
@@ -226,7 +221,7 @@ export function ListProjectSolutions(props: ListProjectSolutionsProps) {
<div className="relative mb-5 hidden items-center justify-between sm:flex">
<div>
<h1 className="mb-1 text-xl font-semibold">
{projectData.title} Solutions
{project.title} Solutions
</h1>
<p className="text-sm text-gray-500">
Solutions submitted by the community

View File

@@ -1,47 +1,43 @@
import { Badge } from '../Badge.tsx';
import type {
ProjectDifficultyType,
ProjectFileType,
} from '../../lib/project.ts';
import { Users } from 'lucide-react';
import { formatCommaNumber } from '../../lib/number.ts';
import { cn } from '../../lib/classname.ts';
import { isLoggedIn } from '../../lib/jwt.ts';
import type { OfficialProjectDocument } from '../../queries/official-project.ts';
type ProjectCardProps = {
project: ProjectFileType;
project: OfficialProjectDocument;
userCount?: number;
status?: 'completed' | 'started' | 'none';
};
const badgeVariants: Record<ProjectDifficultyType, string> = {
const badgeVariants = {
beginner: 'yellow',
intermediate: 'green',
advanced: 'blue',
};
} as const;
export function ProjectCard(props: ProjectCardProps) {
const { project, userCount = 0, status } = props;
const { frontmatter, id } = project;
const { difficulty, title, description, slug, topics = [] } = project;
const isLoadingStatus = status === undefined;
const userStartedCount = status !== 'none' && userCount === 0 ? userCount + 1 : userCount;
const userStartedCount =
status !== 'none' && userCount === 0 ? userCount + 1 : userCount;
return (
<a
href={`/projects/${id}`}
href={`/projects/${slug}`}
className="flex flex-col rounded-md border bg-white p-3 transition-colors hover:border-gray-300 hover:bg-gray-50"
>
<span className="flex justify-between gap-1.5">
<Badge
variant={badgeVariants[frontmatter.difficulty] as any}
text={frontmatter.difficulty}
/>
<Badge variant={'grey'} text={frontmatter.nature} />
<Badge variant={badgeVariants[difficulty]} text={difficulty} />
{topics?.map((topic, index) => (
<Badge key={`${topic}-${index}`} variant={'grey'} text={topic} />
))}
</span>
<span className="my-3 flex min-h-[100px] flex-col">
<span className="mb-1 font-medium">{frontmatter.title}</span>
<span className="text-sm text-gray-500">{frontmatter.description}</span>
<span className="mb-1 font-medium">{title}</span>
<span className="text-sm text-gray-500">{description}</span>
</span>
<span className="flex min-h-[22px] items-center justify-between gap-2 text-xs text-gray-400">
{isLoadingStatus ? (

View File

@@ -0,0 +1,25 @@
import { guideRenderer } from '../../lib/guide-renderer';
import type { OfficialProjectDocument } from '../../queries/official-project';
type ProjectContentProps = {
project: OfficialProjectDocument;
};
export function ProjectContent(props: ProjectContentProps) {
const { project } = props;
const isContentString = typeof project?.content === 'string';
return (
<div
className="prose prose-h2:mb-3 prose-h2:mt-5 prose-h3:mb-1 prose-h3:mt-5 prose-p:mb-2 prose-blockquote:font-normal prose-blockquote:text-gray-500 prose-pre:my-3 prose-ul:my-3.5 prose-hr:my-5 prose-li:[&>p]:m-0 max-w-full [&>ul>li]:my-1"
{...(isContentString
? {
dangerouslySetInnerHTML: { __html: project?.content },
}
: {
children: guideRenderer.render(project?.content),
})}
/>
);
}

View File

@@ -2,11 +2,7 @@ import { ProjectCard } from './ProjectCard.tsx';
import { HeartHandshake, Trash2 } from 'lucide-react';
import { cn } from '../../lib/classname.ts';
import { useEffect, useMemo, useState } from 'react';
import {
projectDifficulties,
type ProjectDifficultyType,
type ProjectFileType,
} from '../../lib/project.ts';
import {
deleteUrlParam,
getUrlParams,
@@ -14,9 +10,14 @@ import {
} from '../../lib/browser.ts';
import { httpPost } from '../../lib/http.ts';
import { isLoggedIn } from '../../lib/jwt.ts';
import {
allowedOfficialProjectDifficulty,
type AllowedOfficialProjectDifficulty,
type OfficialProjectDocument,
} from '../../queries/official-project.ts';
type DifficultyButtonProps = {
difficulty: ProjectDifficultyType;
difficulty: AllowedOfficialProjectDifficulty;
isActive?: boolean;
onClick?: () => void;
};
@@ -46,7 +47,7 @@ export type ListProjectStatusesResponse = Record<
>;
type ProjectsListProps = {
projects: ProjectFileType[];
projects: OfficialProjectDocument[];
userCounts: Record<string, number>;
};
@@ -55,7 +56,7 @@ export function ProjectsList(props: ProjectsListProps) {
const { difficulty: urlDifficulty } = getUrlParams();
const [difficulty, setDifficulty] = useState<
ProjectDifficultyType | undefined
AllowedOfficialProjectDifficulty | undefined
>(urlDifficulty);
const [projectStatuses, setProjectStatuses] =
useState<ListProjectStatusesResponse>();
@@ -66,7 +67,7 @@ export function ProjectsList(props: ProjectsListProps) {
return;
}
const projectIds = projects.map((project) => project.id);
const projectIds = projects.map((project) => project.slug);
const { response, error } = await httpPost(
`${import.meta.env.PUBLIC_API_URL}/v1-list-project-statuses`,
{
@@ -82,22 +83,27 @@ export function ProjectsList(props: ProjectsListProps) {
setProjectStatuses(response);
};
const projectsByDifficulty: Map<ProjectDifficultyType, ProjectFileType[]> =
useMemo(() => {
const result = new Map<ProjectDifficultyType, ProjectFileType[]>();
const projectsByDifficulty: Map<
AllowedOfficialProjectDifficulty,
OfficialProjectDocument[]
> = useMemo(() => {
const result = new Map<
AllowedOfficialProjectDifficulty,
OfficialProjectDocument[]
>();
for (const project of projects) {
const difficulty = project.frontmatter.difficulty;
for (const project of projects) {
const difficulty = project.difficulty;
if (!result.has(difficulty)) {
result.set(difficulty, []);
}
result.get(difficulty)?.push(project);
if (!result.has(difficulty)) {
result.set(difficulty, []);
}
return result;
}, [projects]);
result.get(difficulty)?.push(project);
}
return result;
}, [projects]);
const matchingProjects = difficulty
? projectsByDifficulty.get(difficulty) || []
@@ -111,7 +117,7 @@ export function ProjectsList(props: ProjectsListProps) {
<div className="flex flex-col">
<div className="my-2.5 flex items-center justify-between">
<div className="flex flex-wrap gap-1">
{projectDifficulties.map((projectDifficulty) => (
{allowedOfficialProjectDifficulty.map((projectDifficulty) => (
<DifficultyButton
key={projectDifficulty}
onClick={() => {
@@ -122,6 +128,7 @@ export function ProjectsList(props: ProjectsListProps) {
isActive={projectDifficulty === difficulty}
/>
))}
{difficulty && (
<button
onClick={() => {
@@ -155,25 +162,25 @@ export function ProjectsList(props: ProjectsListProps) {
{matchingProjects
.sort((project) => {
return project.frontmatter.difficulty === 'beginner'
return project.difficulty === 'beginner'
? -1
: project.frontmatter.difficulty === 'intermediate'
: project.difficulty === 'intermediate'
? 0
: 1;
})
.sort((a, b) => {
return a.frontmatter.sort - b.frontmatter.sort;
return a.order - b.order;
})
.map((matchingProject) => {
const count = userCounts[matchingProject?.id] || 0;
const count = userCounts[matchingProject?.slug] || 0;
return (
<ProjectCard
key={matchingProject.id}
key={matchingProject.slug}
project={matchingProject}
userCount={count}
status={
projectStatuses
? (projectStatuses?.[matchingProject.id] || 'none')
? projectStatuses?.[matchingProject.slug] || 'none'
: undefined
}
/>

View File

@@ -7,16 +7,16 @@ import {
setUrlParams,
} from '../../lib/browser.ts';
import { CategoryFilterButton } from '../Roadmaps/CategoryFilterButton.tsx';
import {
projectDifficulties,
type ProjectFileType,
} from '../../lib/project.ts';
import { ProjectCard } from './ProjectCard.tsx';
import {
allowedOfficialProjectDifficulty,
type OfficialProjectDocument,
} from '../../queries/official-project.ts';
type ProjectGroup = {
id: string;
title: string;
projects: ProjectFileType[];
projects: OfficialProjectDocument[];
};
type ProjectsPageProps = {
@@ -28,7 +28,7 @@ export function ProjectsPage(props: ProjectsPageProps) {
const { roadmapsProjects, userCounts } = props;
const allUniqueProjectIds = new Set<string>(
roadmapsProjects.flatMap((group) =>
group.projects.map((project) => project.id),
group.projects.map((project) => project.slug),
),
);
const allUniqueProjects = useMemo(
@@ -37,15 +37,15 @@ export function ProjectsPage(props: ProjectsPageProps) {
.map((id) =>
roadmapsProjects
.flatMap((group) => group.projects)
.find((project) => project.id === id),
.find((project) => project.slug === id),
)
.filter(Boolean) as ProjectFileType[],
.filter(Boolean) as OfficialProjectDocument[],
[allUniqueProjectIds],
);
const [activeGroup, setActiveGroup] = useState<string>('');
const [visibleProjects, setVisibleProjects] =
useState<ProjectFileType[]>(allUniqueProjects);
useState<OfficialProjectDocument[]>(allUniqueProjects);
const [isFilterOpen, setIsFilterOpen] = useState(false);
@@ -67,11 +67,11 @@ export function ProjectsPage(props: ProjectsPageProps) {
const sortedVisibleProjects = useMemo(
() =>
visibleProjects.sort((a, b) => {
const projectADifficulty = a?.frontmatter.difficulty || 'beginner';
const projectBDifficulty = b?.frontmatter.difficulty || 'beginner';
const projectADifficulty = a?.difficulty || 'beginner';
const projectBDifficulty = b?.difficulty || 'beginner';
return (
projectDifficulties.indexOf(projectADifficulty) -
projectDifficulties.indexOf(projectBDifficulty)
allowedOfficialProjectDifficulty.indexOf(projectADifficulty) -
allowedOfficialProjectDifficulty.indexOf(projectBDifficulty)
);
}),
[visibleProjects],
@@ -111,7 +111,7 @@ export function ProjectsPage(props: ProjectsPageProps) {
{isFilterOpen && <X size={13} className="mr-1" />}
Categories
</button>
<div className="container relative flex flex-col gap-4 sm:flex-row">
<div className="relative container flex flex-col gap-4 sm:flex-row">
<div
className={cn(
'hidden w-full flex-col from-gray-100 sm:w-[160px] sm:shrink-0 sm:border-r sm:bg-linear-to-l sm:pt-6',
@@ -171,7 +171,7 @@ export function ProjectsPage(props: ProjectsPageProps) {
</div>
</div>
</div>
<div className="flex grow flex-col pb-20 pt-2 sm:pt-6">
<div className="flex grow flex-col pt-2 pb-20 sm:pt-6">
<div className="mb-4 flex items-center justify-between text-sm text-gray-500">
<h3 className={'flex items-center'}>
<Box size={15} className="mr-1" strokeWidth={2} />
@@ -187,9 +187,9 @@ export function ProjectsPage(props: ProjectsPageProps) {
<div className="grid grid-cols-1 gap-1.5 sm:grid-cols-2">
{sortedVisibleProjects.map((project) => (
<ProjectCard
key={project.id}
key={project.slug}
project={project}
userCount={userCounts[project.id] || 0}
userCount={userCounts[project.slug] || 0}
status={'none'}
/>
))}

View File

@@ -1,69 +1,22 @@
---
import { getQuestionGroupsByIds } from '../lib/question-group';
import { getRoadmapsByIds, type RoadmapFrontmatter } from '../lib/roadmap';
import { Map, Clipboard } from 'lucide-react';
import { Map } from 'lucide-react';
import { listOfficialRoadmaps } from '../queries/official-roadmap';
export interface Props {
roadmap: RoadmapFrontmatter;
relatedRoadmaps: string[];
}
const { roadmap } = Astro.props;
const { relatedRoadmaps } = Astro.props;
const relatedRoadmaps = roadmap.relatedRoadmaps || [];
const relatedRoadmapDetails = await getRoadmapsByIds(relatedRoadmaps);
const relatedQuestions = roadmap.relatedQuestions || [];
const relatedQuestionDetails = await getQuestionGroupsByIds(relatedQuestions);
const allRoadmaps = await listOfficialRoadmaps();
const relatedRoadmapsDetails = allRoadmaps.filter((roadmap) =>
relatedRoadmaps.includes(roadmap.slug),
);
---
{
relatedQuestionDetails.length > 0 && (
<div class='border-t bg-gray-100 pb-3'>
<div class='container'>
<div class='relative -top-5 flex justify-between'>
<span class='text-md flex items-center rounded-md border bg-white px-3 py-1 font-medium'>
<Clipboard className='mr-1.5 text-black' size='17px' />
Test your Knowledge
</span>
<a
href='/questions'
class='text-md rounded-md border bg-white px-3 py-1 font-medium hover:bg-gray-50'
>
<span class='hidden sm:inline'>All Quizzes &rarr;</span>
<span class='inline sm:hidden'>More &rarr;</span>
</a>
</div>
<div class='flex flex-col gap-1 pb-8'>
{relatedQuestionDetails.map((relatedQuestionGroup) => (
<a
href={`/questions/${relatedQuestionGroup.id}`}
class='flex flex-col gap-0.5 rounded-md border bg-white px-3.5 py-2 hover:bg-gray-50 sm:flex-row sm:gap-0'
>
<span class='inline-block min-w-[150px] font-medium'>
{relatedQuestionGroup.title}
</span>
<span class='text-gray-500'>
{relatedQuestionGroup.description}
</span>
</a>
))}
</div>
</div>
</div>
)
}
{
relatedRoadmaps.length && (
<div
class:list={[
'border-t bg-gray-100',
{
'mt-0': !relatedQuestionDetails.length,
},
]}
>
<div class:list={['border-t bg-gray-100']}>
<div class='container'>
<div class='relative -top-5 flex justify-between'>
<span class='text-md flex items-center rounded-md border bg-white px-3 py-1 font-medium'>
@@ -80,17 +33,15 @@ const relatedQuestionDetails = await getQuestionGroupsByIds(relatedQuestions);
</div>
<div class='flex flex-col gap-1 pb-8'>
{relatedRoadmapDetails.map((relatedRoadmap) => (
{relatedRoadmapsDetails.map((relatedRoadmap) => (
<a
href={`/${relatedRoadmap.id}`}
href={`/${relatedRoadmap.slug}`}
class='flex flex-col gap-0.5 rounded-md border bg-white px-3.5 py-2 hover:bg-gray-50 sm:flex-row sm:gap-0'
>
<span class='inline-block min-w-[195px] font-medium'>
{relatedRoadmap.frontmatter.briefTitle}
</span>
<span class='text-gray-500'>
{relatedRoadmap.frontmatter.briefDescription}
{relatedRoadmap.title.card}
</span>
<span class='text-gray-500'>{relatedRoadmap.description}</span>
</a>
))}
</div>

View File

@@ -5,9 +5,7 @@ import {
Bot,
FolderKanbanIcon,
MapIcon,
MessageCircle,
} from 'lucide-react';
import { type RoadmapFrontmatter } from '../lib/roadmap';
import LoginPopup from './AuthenticationFlow/LoginPopup.astro';
import { DownloadRoadmapButton } from './DownloadRoadmapButton';
import { MarkFavorite } from './FeaturedItems/MarkFavorite';
@@ -20,20 +18,16 @@ import { PersonalizedRoadmap } from './PersonalizedRoadmap/PersonalizedRoadmap';
export interface Props {
title: string;
description: string;
note?: string;
partner?: {
description: string;
link: string;
linkText: string;
};
roadmapId: string;
isUpcoming?: boolean;
hasSearch?: boolean;
projectCount?: number;
coursesCount?: number;
hasAIChat?: boolean;
question?: RoadmapFrontmatter['question'];
hasTopics?: boolean;
isForkable?: boolean;
activeTab?: 'roadmap' | 'projects' | 'courses';
}
@@ -43,12 +37,8 @@ const {
description,
roadmapId,
partner,
isUpcoming = false,
note,
hasTopics = false,
hasAIChat = false,
projectCount = 0,
question,
activeTab = 'roadmap',
coursesCount = 0,
} = Astro.props;

View File

@@ -10,10 +10,12 @@ import { useOutsideClick } from '../hooks/use-outside-click';
import { markdownToHtml } from '../lib/markdown';
import { cn } from '../lib/classname';
import { useScrollPosition } from '../hooks/use-scroll-position';
import type { JSONContent } from '@tiptap/core';
import { guideRenderer } from '../lib/guide-renderer';
type RoadmapTitleQuestionProps = {
question: string;
answer: string;
answer: JSONContent;
roadmapId?: string;
};
@@ -38,24 +40,24 @@ export function RoadmapTitleQuestion(props: RoadmapTitleQuestionProps) {
'rounded-0 -mx-4 sm:mx-0': isAnswerVisible,
// @FIXME:
// The line below is to keep the question hidden on mobile devices except for
// the frontend roadmap. This is because we did not use to have the question
// the frontend roadmap. This is because we did not use to have the question
// on mobile devices before and we don't want to cause any SEO issues. It will
// be enabled on other roadmaps in the future.
},
)}
>
{isAnswerVisible && (
<div className="fixed left-0 right-0 top-0 z-100 h-full items-center justify-center overflow-y-auto overflow-x-hidden overscroll-contain bg-black/50"></div>
<div className="fixed top-0 right-0 left-0 z-100 h-full items-center justify-center overflow-x-hidden overflow-y-auto overscroll-contain bg-black/50"></div>
)}
<h2
className="z-50 flex cursor-pointer select-none items-center px-2 py-2 text-sm font-medium"
className="z-50 flex cursor-pointer items-center px-2 py-2 text-sm font-medium select-none"
aria-expanded={isAnswerVisible ? 'true' : 'false'}
onClick={(e) => {
e.preventDefault();
setIsAnswerVisible(!isAnswerVisible);
}}
>
<span className="flex grow select-none items-center">
<span className="flex grow items-center select-none">
<Info className="mr-1.5 inline-block h-4 w-4" strokeWidth={2.5} />
{question}
</span>
@@ -65,7 +67,7 @@ export function RoadmapTitleQuestion(props: RoadmapTitleQuestionProps) {
</h2>
<div
className={`absolute left-0 right-0 top-0 z-100 mt-0 border bg-white ${
className={`absolute top-0 right-0 left-0 z-100 mt-0 border bg-white ${
isAnswerVisible ? 'rounded-0 block sm:rounded-md' : 'hidden'
}`}
ref={ref}
@@ -73,7 +75,7 @@ export function RoadmapTitleQuestion(props: RoadmapTitleQuestionProps) {
{isAnswerVisible && (
<h2
className={cn(
'sticky top-0 flex cursor-pointer select-none items-center rounded-t-md border-b bg-white px-[7px] py-[9px] text-base font-medium',
'sticky top-0 flex cursor-pointer items-center rounded-t-md border-b bg-white px-[7px] py-[9px] text-base font-medium select-none',
)}
onClick={() => {
setIsAnswerVisible(false);
@@ -95,9 +97,11 @@ export function RoadmapTitleQuestion(props: RoadmapTitleQuestionProps) {
</h2>
)}
<div
className="bg-gray-100 p-3 text-base [&>h2]:mb-2 [&>h2]:mt-5 [&>h2]:text-[17px] [&>h2]:font-medium [&>p:last-child]:mb-0 [&>p>a]:font-semibold [&>p>a]:underline [&>p>a]:underline-offset-2 [&>p]:mb-3 [&>p]:font-normal [&>p]:leading-relaxed [&>p]:text-gray-800 [&>ul>li]:mb-2 [&>ul>li]:font-normal"
dangerouslySetInnerHTML={{ __html: markdownToHtml(answer, false) }}
></div>
className="bg-gray-100 p-3 text-base [&>h2]:mt-5 [&>h2]:mb-2 [&>h2]:text-[17px] [&>h2]:font-medium [&>p]:mb-3 [&>p]:leading-relaxed [&>p]:font-normal [&>p]:text-gray-800 [&>p:last-child]:mb-0 [&>p>a]:font-semibold [&>p>a]:underline [&>p>a]:underline-offset-2 [&>ul>li]:mb-2 [&>ul>li]:font-normal"
// dangerouslySetInnerHTML={{ __html: markdownToHtml(answer, false) }}
>
{guideRenderer.render(answer)}
</div>
</div>
</div>
);

View File

@@ -151,6 +151,12 @@ const groups: GroupType[] = [
type: 'skill',
otherGroups: ['Web Development'],
},
{
title: 'Next.js',
link: '/nextjs',
type: 'skill',
otherGroups: ['Web Development'],
},
{
title: 'Spring Boot',
link: '/spring-boot',
@@ -408,6 +414,11 @@ const groups: GroupType[] = [
link: '/data-analyst',
type: 'role',
},
{
title: 'BI Analyst',
link: '/bi-analyst',
type: 'role',
},
{
title: 'Data Engineer',
link: '/data-engineer',

View File

@@ -25,7 +25,7 @@ export function TableOfContent(props: TableOfContentProps) {
className={cn(
'relative min-w-[250px] px-5 pt-0 max-lg:max-w-full max-lg:min-w-full max-lg:border-none max-lg:px-0 lg:pt-5',
{
'top-0 lg:sticky!': totalRows <= 20,
'top-[36px] lg:sticky!': totalRows <= 20,
},
)}
>

View File

@@ -1,18 +0,0 @@
---
title: 'AI Agents, Red Teaming Roadmaps and Community Courses'
description: 'New roadmaps for AI Agents and Red Teaming plus access to community-generated AI courses'
images:
'AI Agents': 'https://assets.roadmap.sh/guest/ai-agents-roadmap-min-poii3.png'
'Red Teaming': 'https://assets.roadmap.sh/guest/ai-red-teaming-omyvx.png'
'AI Community Courses': 'https://assets.roadmap.sh/guest/ai-community-courses.png'
seo:
title: 'AI Agents, Red Teaming Roadmaps and Community Courses'
description: ''
date: 2025-05-12
---
We added new AI roadmaps for AI Agents and Red Teaming and made our AI Tutor better with courses created by the community.
- We just released a new [AI Agents Roadmap](https://roadmap.sh/ai-agents) that covers how to build, design, and run smart autonomous systems.
- There's also a new [Red Teaming Roadmap](https://roadmap.sh/ai-red-teaming) for people who want to learn about testing AI systems for weaknesses and security flaws.
- Our [AI Tutor](https://roadmap.sh/ai) now lets you use courses made by other users. You can learn from their content or share your own learning plans.

View File

@@ -1,25 +0,0 @@
---
title: 'AI Engineer Roadmap, Leaderboards, Editor AI, and more'
description: 'New AI Engineer Roadmap, New Leaderboards, AI Integration in Editor, and more'
images:
"AI Engineer Roadmap": "https://assets.roadmap.sh/guest/ai-engineer-roadmap.png"
"Refer Others": "https://assets.roadmap.sh/guest/invite-users.png"
"Editor AI Integration": "https://assets.roadmap.sh/guest/editor-ai-integration.png"
"Project Status": "https://assets.roadmap.sh/guest/project-status.png"
"Leaderboards": "https://assets.roadmap.sh/guest/new-leaderboards.png"
seo:
title: 'AI Engineer Roadmap, Leaderboards, Editor AI, and more'
description: ''
date: 2024-10-04
---
We have a new AI Engineer roadmap, Contributor leaderboards, AI integration in the editor, and more.
- [AI Engineer Roadmap](https://roadmap.sh/ai-engineer) is now live
- You can now refer others to join roadmap.sh
- AI integration [in the editor](https://draw.roadmap.sh) to help you create and edit roadmaps faster
- New [Leaderboards](/leaderboard) for contributors and people who refer others
- [Projects pages](/frontend/projects) now show the status of each project
- Bug fixes and performance improvements
ML Engineer roadmap and team dashboards are coming up next. Stay tuned!

View File

@@ -1,20 +0,0 @@
---
title: 'AI Quiz Summaries, New Go Roadmap, and YouTube Videos'
description: 'Personalized AI summaries for quizzes, completely redrawn Go roadmap, and new YouTube videos for AI features'
images:
'AI Quiz Summary': 'https://assets.roadmap.sh/guest/quiz-summary-gnwel.png'
'New Go Roadmap': 'https://assets.roadmap.sh/guest/roadmapsh_golang-rqzoc.png'
'YouTube Videos': 'https://assets.roadmap.sh/guest/youtube-videos-4kygb.jpeg'
'Roadmap Editor': 'https://assets.roadmap.sh/guest/ai-inside-editor.png'
seo:
title: 'AI Quiz Summaries, New Go Roadmap, and YouTube Videos'
description: ''
date: 2025-07-23
---
We've added new AI-powered features and improved our content to help you learn more effectively.
- [AI quizzes](/ai/quiz) now provide personalized AI-generated summaries at the end, along with tailored course and guide suggestions to help you continue learning.
- The [Go roadmap](/golang) has been completely redrawn with better quality and a more language-focused approach, replacing the previous version that was too web development oriented.
- We now have [8 new YouTube videos](https://www.youtube.com/playlist?list=PLkZYeFmDuaN38LRfCSdAkzWVtTXMJt11A) covering all our AI features to help you make the most of them.
- [Roadmap editor](/account/roadmaps) now allows you to generate a base roadmap from a prompt.

View File

@@ -1,22 +0,0 @@
---
title: 'AI Roadmaps Improved, Schedule Learning Time'
description: 'AI Roadmaps are now deeper and we have added a new feature to schedule learning time'
images:
"AI Roadmaps Depth": "https://assets.roadmap.sh/guest/3-level-roadmaps-lotx1.png"
"Schedule Learning Time": "https://assets.roadmap.sh/guest/schedule-learning-time.png"
"Schedule Learning Time Modal": "https://assets.roadmap.sh/guest/schedule-learning-time-2.png"
seo:
title: 'AI Roadmaps Improved, Schedule Learning Time'
description: ''
date: 2024-11-18
---
We have improved our AI roadmaps, added a way to schedule learning time, and made some site wide bug fixes and improvements. Here are the details:
- [AI generated roadmaps](https://roadmap.sh/ai) are now 3 levels deep giving you more detailed information. We have also improved the quality of the generated roadmaps.
- Schedule learning time on your calendar for any roadmap. Just click on the "Schedule Learning Time" button and select the time slot you want to block.
- You can now dismiss the sticky roadmap progress indicator at the bottom of any roadmap.
- We have added some new Project Ideas to our [Frontend Roadmap](/frontend/projects).
- Bug fixes and performance improvements
We have a new Engineering Manager Roadmap coming this week. Stay tuned!

View File

@@ -1,18 +0,0 @@
---
title: 'AI Tutor, C++ and Java Roadmaps'
description: 'We just launched our first paid SQL course'
images:
'AI Tutor': 'https://assets.roadmap.sh/guest/ai-tutor-xwth3.png'
'Java Roadmap': 'https://assets.roadmap.sh/guest/new-java-roadmap-t7pkk.png'
'C++ Roadmap': 'https://assets.roadmap.sh/guest/new-cpp-roadmap.png'
seo:
title: 'AI Tutor, C++ and Java Roadmaps'
description: ''
date: 2025-04-03
---
We have revised the C++ and Java roadmaps and introduced an AI tutor to help you learn anything.
- We just launched an [AI Tutor](https://roadmap.sh/ai), just give it a topic, pick a difficulty level and it will generate a personalized study plan for you. There is a map view, quizzes an embedded chat to help you along the way.
- [C++ roadmap](https://roadmap.sh/cpp) has been revised with improved content
- We have also redrawn the [Java roadmap](https://roadmap.sh/java) from scratch, replacing the deprecated items, adding new content and improving the overall structure.

View File

@@ -1,23 +0,0 @@
---
title: 'Revamped roadmaps, AI Tutor, Guides, Roadmaps and more'
description: 'Revamped roadmaps, AI Tutor, AI Guides and AI Roadmaps'
images:
'Roadmap AI Tutor': 'https://assets.roadmap.sh/guest/floating-ai-tutor-n1o4n.png'
'AI Tutor on Roadmap': 'https://assets.roadmap.sh/guest/dedicated-roadmap-chat-page-qlbfw.png'
'AI Tutor': 'https://assets.roadmap.sh/guest/global-chat-evm4v.png'
'Topics AI Tutor': 'https://assets.roadmap.sh/guest/roadmap-ai-tutor-89if2.png'
'AI Guides and Roadmaps': 'https://assets.roadmap.sh/guest/ai-guides-roadmaps-lxmm3.jpeg'
seo:
title: 'Revamped roadmaps, AI Tutor, AI Guides and AI Roadmaps'
description: ''
date: 2025-06-27
---
We've revamped some of our older roadmaps and added new AI features to help you learn better.
- Roadmap pages now have a [floating AI Tutor](/frontend) that can help you learn anything while following the roadmap.
- There is a new [dedicated AI Tutor page](/frontend/ai) for each roadmap, where you can learn any topic of the roadmap, save history and more.
- With [global chat](/ai/chat), you can ask any question about your career, upload your resume, get guidance, tips, roadmap suggestions and more.
- Topic pages of roadmaps now have a new [AI Tutor](/frontend) that can help you learn the topic, get quizzed on the topic and more.
- Apart from courses, you can now [generate AI Guides and AI Roadmaps](/ai) for any topic.
- [MongoDB](/mongodb), [Kubernetes](/kubernetes), [Spring Boot](/spring-boot), [Linux](/linux), [React Native](/react-native) and [GraphQL](/graphql) roadmaps have been updated.

View File

@@ -1,21 +0,0 @@
---
title: 'Cloudflare and ASP.NET Roadmaps, New Dashboard'
description: 'We just launched our first paid SQL course'
images:
'New Dashboard': 'https://assets.roadmap.sh/guest/new-dashboard.png'
'Cloudflare Roadmap': 'https://assets.roadmap.sh/guest/cloudflare-roadmap.png'
'ASP.NET Roadmap Revised': 'https://assets.roadmap.sh/guest/aspnet-core-revision.png'
seo:
title: 'Cloudflare and ASP.NET Roadmaps, New Dashboard'
description: ''
date: 2025-02-21
---
We have launched a new Cloudflare roadmap, revised ASP.NET Core roadmap and introduced a new dashboard design.
- Brand new [Cloudflare roadmap](https://roadmap.sh/cloudflare) to help you learn Cloudflare
- [ASP.NET Core roadmap](https://roadmap.sh/aspnet-core) has been revised with new content
- Fresh new dashboard design with improved navigation and performance
- Bug fixes and performance improvements

View File

@@ -1,22 +0,0 @@
---
title: 'DevOps Project Ideas, Team Dashboard, Redis Content'
description: 'New Project Ideas for DevOps, Team Dashboard, Redis Content'
images:
"DevOps Project Ideas": "https://assets.roadmap.sh/guest/devops-project-ideas.png"
"Redis Resources": "https://assets.roadmap.sh/guest/redis-resources.png"
"Team Dashboard": "https://assets.roadmap.sh/guest/team-dashboard.png"
seo:
title: 'DevOps Project Ideas, Team Dashboard, Redis Content'
description: ''
date: 2024-10-16
---
We have added 21 new project ideas to our DevOps roadmap, added content to Redis roadmap and introduced a new team dashboard for teams
- Practice your skills with [21 newly added DevOps Project Ideas](https://roadmap.sh/devops)
- We have a new [Dashboard for teams](https://roadmap.sh/teams) to track their team activity.
- [Redis roadmap](https://roadmap.sh/redis) now comes with learning resources.
- Watch us [interview Bruno Simon](https://www.youtube.com/watch?v=IQK9T05BsOw) about his journey as a creative developer.
- Bug fixes and performance improvements
ML Engineer roadmap and team dashboards are coming up next. Stay tuned!

View File

@@ -1,27 +0,0 @@
---
title: 'New Dashboard, Leaderboards and Projects'
description: 'New leaderboard page showing the most active users'
images:
"Personal Dashboard": "https://assets.roadmap.sh/guest/personal-dashboard.png"
"Projects Page": "https://assets.roadmap.sh/guest/projects-page.png"
"Leaderboard": "https://assets.roadmap.sh/guest/leaderboard.png"
seo:
title: 'Leaderboard Page - roadmap.sh'
description: ''
date: 2024-09-17
---
Focus for this week was improving the user experience and adding new features to the platform. Here are the highlights:
- New dashboard for logged-in users
- New leaderboard page
- Projects page listing all projects
- Ability to stop a started project
- Frontend and backend content improvements
- Bug fixes
[Dashboard](/) would allow logged-in users to keep track of their bookmarks, learning progress, project and more. You can still visit the [old homepage](https://roadmap.sh/home) once you login.
We also launched a new [leaderboard page](/leaderboard) showing the most active users, users who completed most projects and more.
There is also a [new projects page](/projects) where you can see all the projects you have been working on. You can also now stop a started project.

View File

@@ -1,21 +0,0 @@
---
title: 'PHP and System Design Roadmaps, Get Featured'
description: 'New PHP Roadmap, System Design Roadmap Revamped, and more'
images:
"PHP Roadmap": "https://assets.roadmap.sh/guest/php-roadmap.png"
"Engineering Manager Roadmap": "https://assets.roadmap.sh/guest/engineering-manager-roadmap.png"
"System Design Roadmap": "https://assets.roadmap.sh/guest/system-design.png"
"Feature Custom Roadmaps": "https://assets.roadmap.sh/guest/apply-for-feature.png"
seo:
title: 'PHP and System Design Roadmaps, Get Featured'
description: ''
date: 2024-12-21
---
We have a new PHP roadmap, System Design roadmap has been revamped. You can also get your custom roadmaps featured.
- One of the most requested [PHP Roadmap](https://roadmap.sh/php) is now live
- We have a new [Engineering Manager](https://roadmap.sh/engineering-manager) roadmap
- We have revamped [System Design Roadmap](https://roadmap.sh/system-design)
- Get your custom roadmaps featured on the [community roadmaps](/community)
- Bug fixes and performance improvements

View File

@@ -1,25 +0,0 @@
---
title: 'Redis Roadmap, Dashboard Changes, Bookmarks'
description: 'New leaderboard page showing the most active users'
images:
"Redis Roadmap": "https://assets.roadmap.sh/guest/redis-roadmap.png"
"Bookmarks": "https://assets.roadmap.sh/guest/bookmark-roadmaps.png"
"Dashboard": "https://assets.roadmap.sh/guest/dashboard-profile.png"
"Cyber Security Content": "https://assets.roadmap.sh/guest/cyber-security-content.png"
seo:
title: 'Redis Roadmap, Dashboard, Bookmarks - roadmap.sh'
description: ''
date: 2024-09-23
---
We have a new roadmap, some improvements to dashboard, bookmarks and more.
- [Redis roadmap](https://roadmap.sh/redis) is now live
- Progress and Bookmarks on dashboard are merged into a single section which makes it easy if you have a lot of bookmarks.
- Profile section on [dashboard](/) makes it easy to create profile
- Roadmaps can now be [bookmarked from any page](/roadmaps) that shows roadmaps.
- User profile now shows the projects you are working on.
- [Cyber Security roadmap](/cyber-security) is now filled with new content and resources.
- Buf fixes and improvements to some team features.
Next up, we are working on a new AI Engineer roadmap and teams dashboards.

View File

@@ -1,19 +0,0 @@
---
title: "Our first paid course about SQL is live"
description: 'We just launched our first paid SQL course'
images:
"SQL Course": "https://assets.roadmap.sh/guest/course-environment-87jg8.png"
"Course Creator Platform": "https://assets.roadmap.sh/guest/course-creator-platform.png"
seo:
title: 'SQL Course is Live'
description: ''
date: 2025-02-04
---
After months of work, I am excited to announce our [brand-new SQL course](/courses/sql) designed to help you master SQL with a hands-on, practical approach!
For the past few months, we have been working on building a course platform that would not only help us deliver high-quality educational content but also sustain the development of roadmap.sh. This SQL course is our first step in that direction.
The course has been designed with a focus on practical learning. Each topic is accompanied by hands-on exercises, real-world examples, and an integrated coding environment where you can practice what you learn. The AI integration provides personalized learning assistance, helping you grasp concepts better and faster.
Check out the course at [roadmap.sh/courses/sql](https://roadmap.sh/courses/sql)

View File

@@ -1,198 +0,0 @@
---
title: 'Is Data Science a Good Career? Advice From a Pro'
description: 'Is data science a good career choice? Learn from a professional about the benefits, growth potential, and how to thrive in this exciting field.'
authorId: fernando
excludedBySlug: '/ai-data-scientist/career-path'
seo:
title: 'Is Data Science a Good Career? Advice From a Pro'
description: 'Is data science a good career choice? Learn from a professional about the benefits, growth potential, and how to thrive in this exciting field.'
ogImageUrl: 'https://assets.roadmap.sh/guest/is-data-science-a-good-career-10j3j.jpg'
isNew: false
type: 'textual'
date: 2025-01-28
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
![Is data science a good career choice?](https://assets.roadmap.sh/guest/is-data-science-a-good-career-10j3j.jpg)
Data science is one of the most talked-about career paths today, but is it the right fit for you?
With [data science](https://roadmap.sh/ai-data-scientist) at the intersection of technology, creativity, and impact, it can be a very appealing role. It definitely promises high and competitive salaries, and the chance to solve real-world problems. Who would say “no” to that?\!
But is it the right fit for your skills and aspirations?
In this guide, Ill help you uncover the answer to that question by understanding the pros and cons of working as a data scientist. Ill also look at what the data scientists salaries are like and the type of skills youd need to have to succeed at the job.
Now sit down, relax, and read carefully, because Im about to help you answer the question of “Is data science a good career for me?”.
## Pros of a Career in Data Science
![Pros of a Career in Data Science](https://assets.roadmap.sh/guest/data-science-pros-4ub43.png)
There are plenty of “pros” when it comes to picking data science as your career, but lets take a closer look at the main ones.
### High Demand and Job Security
The demand for data scientists has grown exponentially over the past few years and shows no signs of slowing down. According to the [U.S. Bureau of Labor Statistics](https://www.bls.gov/ooh/math/data-scientists.htm), the data science job market is projected to grow by 36% from 2023 to 2033, far outpacing the average for other fields.
This surge is partly due to the “explosion” of artificial intelligence, particularly tools like ChatGPT, in recent years, which have amplified the need for skilled data scientists to handle complex machine learning models and big data analysis.
### Competitive Salaries
One of the most appealing aspects of data science positions is the average data scientists salary. Reports from Glassdoor and Indeed highlight that data scientists are among the highest-paid professionals in the technology sector. For example, the national average salary for a data scientist in the United States is approximately $120,000 annually, with experienced professionals earning significantly more.
These salaries are a reflection of the reality: the high demand for [data science skills](https://roadmap.sh/ai-data-scientist/skills) and the technical expertise required for these roles are not easy to come by. Whats even more, companies in high-cost regions, such as Silicon Valley, New York City, and Seattle, tend to offer premium salaries to attract top talent.
The financial rewards in this field are usually complemented by additional benefits such as opportunities for professional development like research, publishing, patent registration, etc.
### Intellectual Challenge and Learning Opportunities
Data scientists work in a field that demands continuous learning and adaptation to emerging technologies. Their field is rooted in solving complex problems through a combination of technical knowledge, creativity, and critical thinking. In other words, they rarely have any time to get bored.
What makes data science important and intellectually rewarding, is its ability to address real-world problems. Whether it's optimizing healthcare systems, enhancing customer experiences in retail, or predicting financial risks, data science applications have a tangible impact on people.
This makes data science a good career for individuals who are passionate about lifelong learning and intellectual stimulation.
### Versatility
Data science is a good career choice for those who enjoy variety and flexibility. One of the unique aspects of a career in data science is its ability to reach across various industries and domains (Im talking technology, healthcare, finance, e-commerce, and even entertainment to name a few). This means data scientists can apply their data science skills in almost any sector that generates or relies on data—which is virtually all industries today.
## Cons of a Career in Data Science
![Cons of a Career in Data Science](https://assets.roadmap.sh/guest/data-science-right-fit-x50z5.png)
The data science job is not without its “cons”, after all, there is no “perfect” role out there. Lets now review some of the potential challenges that come with the role.
### Steep Learning Curve
The steep learning curve in data science is one of the fields defining characteristics. New data scientists have to develop a deep understanding of technical skills, including proficiency in programming languages like Python, R, and SQL, as well as tools for machine learning and data visualization.
On top of the already complex subjects to master, data scientists need to find ways of staying current with the constant advancements in the field. This is not optional; its a necessity for anyone trying to achieve long-term success in data science. This constant evolution can feel overwhelming, especially for newcomers who are also learning foundational skills.
Despite these challenges, the steep learning curve can be incredibly rewarding for those who are passionate about solving problems, making data-driven decisions, and contributing to impactful projects.
While it might sound harsh, its important to note that the dedication required to overcome these challenges often results in a fulfilling and (extremely) lucrative career in the world of data science.
### High Expectations
Data science positions come with high expectations from organizations. Data scientists usually have the huge responsibility of delivering actionable insights and ensuring these insights are both accurate and timely.
One of the key challenges data science professionals face is managing the pressure to deliver results under tight deadlines (theyre always tight). Stakeholders often expect instant answers to complex problems, which can lead to unrealistic demands.
To succeed in such environments, skilled data scientists need strong communication skills to explain their findings and set realistic expectations with stakeholders.
### Potential Burnout
The high demand for data science skills usually translates into heavy workloads and tight deadlines, particularly for data scientists working on high-stakes projects (working extra hours is also not an uncommon scenario).
Data scientists frequently juggle multiple complex responsibilities, such as modeling data, developing machine learning algorithms, and conducting statistical analysis—often within limited timeframes.
The intense focus required for these tasks, combined with overlapping priorities (and a small dose of poor project management), can lead to mental fatigue and stress.
Work-life balance can also be a challenge for data scientists giving them another reason for burnout. Combine that with highly active industries, like finance and you have a very hard-to-balance combination.
To mitigate the risk of burnout, data scientists can try to prioritize setting boundaries, managing workloads effectively (when thats an option), and advocating for clearer role definitions (better separation of concerns).
## Skills Required for a Data Science Career
![Skills Required for a Data Science Career](https://assets.roadmap.sh/guest/data-science-skills-6i284.png)
To develop a successful career in data science, not all of your [skills](https://roadmap.sh/ai-data-scientist/skills) need to be technical, you also have to look at soft skills, and domain knowledge and to have a mentality of lifelong learning.
Lets take a closer look.
### Technical Skills
The field of data requires strong foundational technical skills. At the core of these skills is proficiency in programming languages such as Python, R, and SQL. Python is particularly useful and liked for its versatility and extensive libraries, while SQL is essential for querying and managing database systems. R remains a popular choice for statistical analysis and data visualization.
In terms of frameworks, look into TensorFlow, PyTorch, or Scikit-learn. Theyre all crucial for building predictive models and implementing artificial intelligence solutions. Tools like Tableau, Power BI, and Matplotlib are fantastic for creating clear and effective data visualizations, which play a significant role in presenting actionable insights.
### Soft Skills
As I said before, its not all about technical skills. Data scientists must develop their soft skills, this is key in the field.
From problem-solving and analytical thinking to developing your communication skills and your ability to collaborate with others. They all work together to help you communicate complex insights and results to other, non-technical stakeholders, which is going to be a key activity in your day-to-day life.
### Domain Knowledge
While technical and soft skills are essential, domain knowledge often distinguishes exceptional data scientists from the rest. Understanding industry-specific contexts—such as healthcare regulations, financial market trends, or retail customer behavior—enables data scientists to deliver tailored insights that directly address business needs. If you understand your problem space, you understand the needs of your client and the data youre dealing with.
Getting that domain knowledge often involves on-the-job experience, targeted research, or additional certifications.
### Lifelong Learning
Finally, if youre going to be a data scientist, youll need to embrace a mindset of continuous learning. The field evolves rapidly, with emerging technologies, tools, and methodologies reshaping best practices. Staying competitive requires consistent professional development through online courses, certifications, conferences, and engagement with the broader data science community.
Lifelong learning is not just a necessity but also an opportunity to remain excited and engaged in a dynamic and rewarding career.
## How to determine if data science is right for you?
![Is data science right for you?](https://assets.roadmap.sh/guest/data-science-right-fit-x50z5.png)
How can you tell if youll actually enjoy working as a data scientist? Even after reading this far, you might still have some doubts. So in this section, Im going to look at some ways in which you can validate that youll enjoy the job of a data scientist before you go through the process of becoming one.
### Self-Assessment Questions
Figuring out whether data science is the right career path starts with introspection. Ask yourself the following:
* Do you enjoy working with numbers and solving complex problems?
* Are you comfortable learning and applying programming skills like Python and SQL?
* Are you excited by the idea of using algorithms to create data-driven insights and actionable recommendations?
* Are you willing to commit to continuous learning in a fast-evolving field?
Take your time while you think about these questions. You dont even need a full answer, just try to understand how you feel about the idea of each one. If you dont feel like saying “yes”, then chances are, this might not be the right path for you (and thats completely fine\!).
### Start with Small Projects
If self-assessment is not your thing, another great way to explore your interest in data science is to dive into small, manageable projects. Platforms like Kaggle offer competitions and publicly available data sets, allowing you to practice exploratory data analysis, data visualization, and predictive modeling. Working on these projects can help you build a portfolio, develop confidence in your skills, and validate that you effectively like working this way.
Online courses and certifications in data analytics, machine learning, and programming languages provide a structured way to build foundational knowledge. Resources like Coursera, edX, and DataCamp offer beginner-friendly paths to learning data science fundamentals.
### Network and Seek Mentorship
Another great way to understand if you would like to be a data scientist, is to ask other data scientists. It might sound basic, but its a very powerful way because youll get insights about the field from the source.
Networking, while not easy for everyone, is a key component of entering the data science field. Go to data science meetups, webinars, or conferences to expand your network and stay updated on emerging trends and technologies.
If youre not into big groups, try seeking mentorship from data scientists already working in the field. This can accelerate your learning curve. Mentors can offer guidance on career planning, project selection, and skill development.
## Alternative career paths to consider
![Alternative career paths to consider](https://assets.roadmap.sh/guest/data-science-alternatives-l7rtz.png)
Not everyone who is interested in data science wants to pursue the full spectrum of technical skills or the specific responsibilities of a data scientist. Lucky for you, there are several related career paths that can still scratch your itch for fun and interesting challenges while working within the data ecosystem.
### Data-Adjacent Roles
* **Data Analyst**: If you enjoy working with data but prefer focusing on interpreting and visualizing it to inform business decisions, a data analyst role might be for you. Data analysts primarily work on identifying trends and providing actionable recommendations without diving deeply into machine learning or predictive modeling.
* **Data Engineer**: If youre more inclined toward building the infrastructure that makes data science possible, consider becoming a data engineer. These data professionals design, build, and maintain data pipelines, ensuring the accessibility and reliability of large data sets for analysis. The role requires expertise in database systems, data structures, and programming.
### Related Fields
* **Software Engineering**: For those who enjoy coding and software development but want to remain close to data-related projects, software engineering offers opportunities to build tools, applications, and systems that support data analysis and visualization.
* **Cybersecurity**: With the increasing emphasis on data privacy and security, cybersecurity professionals play a critical role in protecting sensitive information. This field combines technical knowledge with policy enforcement, making it appealing to those interested in data protection and regulatory compliance.
### Non-Technical Roles in the Data Ecosystem
* **Data Governance**: If instead of transforming data and getting insights, youd like to focus more on how the data is governed (accessed, controlled, cataloged, etc), then this might be the role for you. This role is essential for ensuring that an organizations data assets are used effectively and responsibly.
* **Data Privacy Office**: In a similar vein to a data governance officer, the data privacy officer cares for the actual privacy of the data. With the rise of AI, data is more relevant than ever, and controlling that you comply with regulations like GDPR and CCPA, is critical for organizations. This role focuses on data privacy strategies, audits, and risk management, making it an excellent fit for those interested in the legal and ethical aspects of data.
## Next steps
![Next steps](https://assets.roadmap.sh/guest/data-science-next-steps-o539b.png)
Data science is a promising career path offering high demand, competitive salaries, and multiple opportunities across various industries. Its ability to address real-world problems, combined with the intellectual challenge it presents, makes it an attractive choice for many. However, it also makes it a very difficult and taxing profession for those who dont enjoy this type of challenge.
There are many potential next steps for you to take and answer the question of “Is data science a good career?”.
For example, you can reflect on your interests and strengths. Ask yourself whether or not you enjoy problem-solving, working with data sets, and learning new technologies. Use this reflection to determine if data science aligns with your career goals.
You can also consume resources like the [AI/Data Scientist roadmap](https://roadmap.sh/ai-data-scientist) and the [Data Analyst roadmap](https://roadmap.sh/data-analyst), as they offer a clear progression for developing essential skills, so check them out. These tools can help you identify which areas to focus on based on your current expertise and interests.
In the end, just remember: data science is rapidly evolving so make sure to stay engaged by reading research papers, following industry blogs, or attending conferences. Anything you can do will help, just figure out what works for you and keep doing it.

View File

@@ -1,200 +0,0 @@
---
title: "Data Science Lifecycle 101: A Beginners' Ultimate Guide"
description: 'Discover the Data Science Lifecycle step-by-step: Learn key phases, tools, and techniques in this beginner-friendly guide.'
authorId: fernando
excludedBySlug: '/ai-data-scientist/career-path'
seo:
title: "Data Science Lifecycle 101: A Beginners' Ultimate Guide"
description: 'Discover the Data Science Lifecycle step-by-step: Learn key phases, tools, and techniques in this beginner-friendly guide.'
ogImageUrl: 'https://assets.roadmap.sh/guest/data-science-lifecycle-eib3s.jpg'
isNew: false
type: 'textual'
date: 2025-01-29
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
![Data science lifecycle 101](https://assets.roadmap.sh/guest/data-science-lifecycle-eib3s.jpg)
Developing a data science project, from beginning to production is not a trivial task. It involves so many steps and so many complex tasks, that without some guardrails, releasing to production becomes ten times harder.
Heres where the data science lifecycle comes into play. It brings a structured approach so that [data scientists](https://roadmap.sh/ai-data-scientist), data analysts, and others can move forward together from raw data to actionable insights.
In this guide, well cover everything you need to know about the data science lifecycle, its many variants, and how to pick the right one for your project.
So lets get going\!
## Core Concepts of a Lifecycle
![Core concepts of a data science lifecycle](https://assets.roadmap.sh/guest/core-concepts-bn8g0.png)
To fully understand the concept of the lifecycle, we have to look at the core concepts inside this framework, and how they contribute to the delivery of a successful data science project.
### Problem Definition
Every data science project begins with a clear definition of the problem to be solved. This involves collaborating with key stakeholders to identify objectives and desired outcomes. Data scientists must understand the context and scope of the project to ensure that the goals align with business or research needs.
### Data Collection
In the data collection phase, data scientists and data engineers work together and gather relevant data from diverse data sources. This includes both structured and unstructured data, such as historical records, new data, or data streams.
The process ensures the integration of all pertinent data, creating a robust dataset for the following stages. Data acquisition tools and strategies play a critical role in this phase.
### Data Preparation
This stage addresses the quality of raw data by cleaning and organizing it for analysis. Tasks such as treating inaccurate data, handling missing values, and converting raw data into usable formats are central to this stage. This stage prepares the data for further and more detailed analysis.
### Exploratory Data Analysis (EDA)
The exploratory data analysis stage is where the “data processing” happens. This stage focuses on uncovering patterns, trends, and relationships within the data. Through data visualization techniques such as bar graphs and statistical models, data scientists perform a thorough data analysis and gain insights into the datas structure and characteristics.
Like every stage so far, this one lays the foundation for the upcoming stages. In this particular case, after performing a detailed EDA, data scientists have a much better understanding of the data they have to work with, and a pretty good idea of what they can do with it now.
### Model Building and Evaluation
The model building phase involves developing predictive or machine learning models tailored to the defined problem. Data scientists experiment with various machine learning algorithms and statistical models to determine the best approach. Heres where data modeling happens, bridging the insights gained during the exploratory data analysis (EDA) phase with actionable predictions and outcomes used in the deployment phase.
Model evaluation follows, where the performance and accuracy of these models are tested to ensure reliability.
### Deployment and Monitoring
The final stage of this generic data science lifecycle involves deploying the model into a production environment. Here, data scientists, machine learning engineers, and quality assurance teams ensure that the model operates effectively within existing software systems.
After this stage, continuous monitoring and maintenance are essential to address new data or changing conditions, which can impact the performance and accuracy of the model.
## Exploring 6 Popular Lifecycle Variants
![6 popular data science lifecycles](https://assets.roadmap.sh/guest/alternative-lifecycles-wdvp1.png)
The data science lifecycle offers various frameworks tailored to specific needs and contexts. Below, we explore six prominent variants:
### CRISP-DM (Cross Industry Standard Process for Data Mining)
CRISP-DM is one of the most widely used frameworks in data science projects, especially within business contexts.
It organizes the lifecycle into six stages: Business Understanding, Data Understanding, Data Preparation, Modeling, Evaluation, and Deployment.
This iterative approach allows teams to revisit and refine previous steps as new insights emerge. CRISP-DM is ideal for projects where aligning technical efforts with business goals is very important.
**Example use case**: A retail company wants to improve customer segmentation for targeted marketing campaigns. Using CRISP-DM, the team starts with business understanding to define segmentation goals, gathers transaction and demographic data, prepares and cleans it, builds clustering models, evaluates their performance, and deploys the best model to group customers for personalized offers.
### KDD (Knowledge Discovery in Databases)
The KDD process focuses on extracting useful knowledge from large datasets. Its stages include Selection, Preprocessing, Transformation, Data Mining, and Interpretation/Evaluation.
KDD emphasizes the academic and research-oriented aspects of data science, making it an ideal choice for experimental or exploratory projects in scientific domains. It offers a systematic approach to discovering patterns and insights in complex datasets.
**Example use case:** A research institute analyzes satellite data to study climate patterns. They follow KDD by selecting relevant datasets, preprocessing to remove noise, transforming data to highlight seasonal trends, applying data mining techniques to identify long-term climate changes, and interpreting results to publish findings.
### Data Analytics Lifecycle
This specific data science lifecycle is tailored for enterprise-level projects that prioritize actionable insights. Its composed of six stages: Discovery, Data Preparation, Model Planning, Model Building, Communicating Results, and Operationalizing.
The frameworks strengths lie in its alignment with business objectives and readiness for model deployment, making it ideal for organizations seeking to integrate data-driven solutions into their operations.
**Example use case:** A financial institution uses the Data Analytics Lifecycle to detect fraudulent transactions. They discover patterns in historical transaction data, prepare it by cleaning and normalizing, plan predictive models, build and test them, communicate results to fraud prevention teams, and operationalize the model to monitor real-time transactions.
### SEMMA (Sample, Explore, Modify, Model, Assess)
SEMMA is a straightforward and tool-centric framework developed by SAS. It focuses on sampling data, exploring it for patterns, modifying it for analysis, modeling it for predictions, and assessing the outcomes.
This lifecycle is particularly useful for workflows involving specific analytics tools. Its simplicity and strong emphasis on data exploration make it an excellent choice for teams prioritizing rapid insights.
**Example use case:** A healthcare organization predicts patient readmission rates using SEMMA. They sample data from hospital records, explore patient histories for trends, modify features like patient age and diagnoses, build machine learning models, and assess their accuracy to choose the most effective predictor.
### Team Data Science Process (TDSP)
TDSP offers a collaborative and agile framework that organizes the lifecycle into four key stages: Business Understanding, Data Acquisition, Modeling, and Deployment.
Designed with team-based workflows in mind, TDSP emphasizes iterative progress and adaptability, ensuring that projects align with business needs while remaining flexible to changes. Its well-suited for scenarios requiring close collaboration among data scientists, engineers, and stakeholders.
**Example use case:** A logistics company improves delivery route optimization. Using TDSP, the team collaborates to understand business goals, acquires data from GPS and traffic systems, develops routing models, and deploys them to dynamically suggest the fastest delivery routes.
### MLOps Lifecycle
MLOps focuses specifically on machine learning operations and production environments. Its stages include Data Engineering, Model Development, Model Deployment, and Monitoring.
This lifecycle is essential for projects involving large-scale machine learning systems that demand high scalability and automation.
MLOps integrates seamlessly with continuous integration and delivery pipelines, ensuring that deployed models remain effective and relevant as new data is introduced.
Each of these frameworks has its own strengths and is suited to different types of data science operations.
**Example use case:** An e-commerce platform deploys a recommendation engine using MLOps. They engineer data pipelines from user activity logs, develop collaborative filtering models, deploy them on the website, and monitor their performance to retrain models when new user data is added.
## How to Choose the Right Data Science Lifecycle
![How to pick a data science lifecycle](https://assets.roadmap.sh/guest/how-to-pick-a-lifecycle-q9t3m.png)
Determining the most suitable data science lifecycle for your data science project requires a systematic approach. After all, not all lifecycles are best suited for all situations.
You can follow these steps to identify the framework that aligns best with your goals and resources:
1. **Define your objectives:** Clearly identify the goals of your project. Are you solving a business problem, conducting academic research, or deploying a machine learning model? Understanding the end objective will narrow down your choices.
2. **Assess project complexity:** Evaluate the scope and intricacy of your project. Simple projects may benefit from streamlined frameworks like SEMMA, while complex projects with iterative requirements might need CRISP-DM or TDSP.
3. **Evaluate your team composition:** Consider the expertise within your team. A team with strong machine learning skills may benefit from MLOps, whereas a diverse team with varying levels of experience might prefer a more general framework like CRISP-DM.
4. **Analyze industry and domain requirements:** Different industries may have unique needs. For example, business-driven projects often align with the Data Analytics Lifecycle, while academic projects might find KDD more suitable.
5. **Examine available tools and resources:** Ensure that the tools, software, and infrastructure you have access to are compatible with your chosen lifecycle. Frameworks like SEMMA may require specific tools such as SAS.
6. **Match to key stakeholder needs:** Align the lifecycle with the expectations and requirements of stakeholders. A collaborative framework like TDSP can be ideal for projects needing frequent input and iteration with business partners.
7. **Run a trial phase:** If possible, test a smaller project or a subset of your current project with the selected framework. This will help you assess its effectiveness and make adjustments as needed.
Follow these steps and you can identify the lifecycle that not only suits your project but also ensures that your data science process is efficient and productive. Each project is unique, so tailoring the lifecycle to its specific demands is critical to success.
## Generic Framework for Beginners
![Generic framework for beginners](https://assets.roadmap.sh/guest/basic-lifecycle-nlw8q.png)
While there are many different data science lifecycles and ways to tackle data science projects, if youre just getting started and youre trying to push your first project into production, relying on a beginner-friendly lifecycle might be a better idea.
A generic framework for beginners in data science simplifies the lifecycle into manageable steps, making it easier to understand and implement. You can follow these steps to define your new framework:
### 1\. Define the problem
![Define the problem](https://assets.roadmap.sh/guest/lifecycle-define-problem-6snat.png)
Start by clearly identifying the problem you aim to solve. Consider the objectives and outcomes you want to achieve, and ensure these are aligned with the needs of any stakeholder. This will help focus your efforts during development and set the right expectations with your stakeholders.
### 2\. Collect and clean data
![Collect and clean data](https://assets.roadmap.sh/guest/lifecycle-collect-data-8k25a.png)
Gather data from reliable and relevant sources. During this stage, focus on ensuring data quality by treating inaccurate data, filling in missing values, validating and removing potential data biases and finally, converting raw data into usable formats.
### 3\. Analyze and visualize
![Analyze and visualize](https://assets.roadmap.sh/guest/lifecycle-analize-visualize-v07ml.png)
Explore the data to uncover patterns, trends, and insights. Use simple data visualization techniques such as bar graphs and scatter plots, along with basic statistical methods, to gain a deeper understanding of the datasets structure and variables.
### 4\. Build and evaluate a model
![Build and evaluate a model](https://assets.roadmap.sh/guest/lifecycle-build-models-0rn42.png)
Develop a basic predictive model using accessible machine learning or statistical tools. Test the models performance to ensure it meets the objectives defined earlier during step 1\. For beginners, tools with user-friendly interfaces like Python libraries or Excel can be highly effective.
### 5\. Share results and deploy
![Share results and deploy](https://assets.roadmap.sh/guest/lifecycle-share-results-016nc.png)
Present your findings to stakeholders in a clear and actionable format. If applicable, deploy the model into a small-scale production environment to observe its impact and gather feedback for further improvement.
**Tips for small projects:** Start with a problem youre familiar with, such as analyzing personal expenses or predicting simple outcomes. Focus on learning the process rather than achieving perfect results. Use open-source tools and resources to experiment and build your confidence.
Use this framework if this is your first data science project, evaluate your results, and most importantly, reflect on your experience.
Take those insights into your next project and decide if for that one you would actually benefit from using one of the predefined standard lifecycles mentioned above.
## Conclusion
The data science lifecycle is a cornerstone of modern data science. By understanding its stages and principles, professionals can navigate the complexities of data science projects with confidence.
Regardless of what youre doing, dealing with unstructured data, creating models, or deploying machine learning algorithms, the lifecycle provides a roadmap for success.
As data science experts and teams continue to explore and refine their approaches, the lifecycle framework remains a key tool for achieving excellence in any and all operations.
Finally, remember that if youre interested in developing your data science career, you have our [data scientist](https://roadmap.sh/ai-data-scientist) and [data analyst](https://roadmap.sh/data-analyst) roadmaps at your disposal. These roadmaps will help you focus your learning time on the really important and relevant topics.

View File

@@ -1,197 +0,0 @@
---
title: 'Top 11 Data Science Skills to Master in @currentYear@'
description: 'Looking to excel in data science? Learn the must-have skills for @currentYear@ with our expert guide and advance your data science career.'
authorId: fernando
excludedBySlug: '/ai-data-scientist/skills'
seo:
title: 'Top 11 Data Science Skills to Master in @currentYear@'
description: 'Looking to excel in data science? Learn the must-have skills for @currentYear@ with our expert guide and advance your data science career.'
ogImageUrl: 'https://assets.roadmap.sh/guest/data-science-skills-to-master-q36qn.jpg'
isNew: false
type: 'textual'
date: 2025-01-28
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
![Top data science skills](https://assets.roadmap.sh/guest/data-science-skills-to-master-q36qn.jpg)
Data science is becoming more relevant as a field and profession by the day. Part of this constant change is the mind-blowing speed at which AI is evolving these days. Every day a new model is released, every week a new product is built around it, and every month OpenAI releases an earth-shattering change that pushes the field even further than before.
Data scientists sit at the core of that progress, but what does it take to master the profession?
Mastering the essential data scientist skills goes beyond just solving complex problems. It includes the ability to handle data workflows, build machine learning models, and interpret data trends effectively.
In this guide, we'll explore the top 10 skills that future data scientists must work on to shine brighter than the rest in 2025, setting a foundation for long-term success.
These are the data scientist skills covered in the article:
* Programming proficiency with **Python, R, and SQL**
* Data manipulation and analysis, including **data wrangling** and **exploratory data analysis**
* Mastery of **machine learning** and **AI techniques**
* Strong statistical and **mathematical** **foundations**
* Familiarity with **big data technologies**
* Data engineering for infrastructure and **ETL pipelines**
* Expertise in **data visualization** with tools like **Plotly** and **D3.js**
* **Domain knowledge** for aligning data science projects with business goals
* **Soft skills** for communication, collaboration, and creativity
* **Feature engineering** and selection for **model optimization**.
* Staying current with trends like **MLOps** and **Generative AI.**
## **Understanding Data Science**
[Data science](https://roadmap.sh/ai-data-scientist) is an interdisciplinary field that combines multiple disciplines to make sense of data and drive actionable insights. It integrates programming, statistical analysis, and domain knowledge to uncover patterns and trends in both structured and unstructured data. This powerful combination enables data professionals to solve a variety of challenges, such as:
* Building predictive models to forecast sales or identify customer churn.
* Developing optimization techniques to streamline supply chains or allocate resources more effectively.
* Leveraging automation and artificial intelligence to create personalized recommendations or detect fraudulent activity in massive datasets.
At its core, data science empowers organizations to turn raw data into actionable insights. By interpreting data effectively and applying statistical models, data scientists support data-driven decision-making, ensuring businesses maintain a competitive edge.
The data science field requires a unique mix of technical skills, analytical prowess, and creativity to handle the vast array of complex data sets encountered in real-world scenarios. In other words, being a data scientist is not for everyone.
**1\. Programming Proficiency**
![Programming proficiency with Python, R and SQL](https://assets.roadmap.sh/guest/r-sql-python-qqm69.png)
Programming remains a cornerstone of the data science field, forming the foundation for nearly every task in data science projects. Mastery of programming languages like Python, R, and SQL is crucial for aspiring data scientists to handle data workflows effectively.
Python is the undisputed leader in data science, thanks to its extensive libraries and frameworks. Pandas, NumPy, and Scikit-learn are essential for tasks ranging from data wrangling and numerical analysis to building machine learning models. Deep learning tools such as TensorFlow and PyTorch make Python indispensable for tackling advanced challenges like developing artificial neural networks for image recognition and natural language processing (NLP).
R excels in statistical analysis and visualization. Its specialized libraries, like ggplot2 for data visualization and caret for machine learning models, make it a preferred choice for academics and data analysis tasks that require interpreting data trends and creating statistical models.
SQL is the backbone of database management, which is essential for extracting, querying, and preparing data from structured databases. A strong command of SQL allows data professionals to manage massive datasets efficiently and ensure smooth integration with analytical tools.
## **2\. Data Manipulation and Analysis**
![Data manipulation and wrangling](https://assets.roadmap.sh/guest/data-wrangling-zwd5i.png)
The ability to manipulate and analyze data lies at the heart of data science skills. These tasks involve transforming raw data into a format suitable for analysis and extracting insights through statistical concepts and exploratory data analysis (EDA).
Data wrangling is a critical skill for cleaning and preparing raw data, addressing missing values, and reshaping complex data sets. For example, consider a dataset containing customer transaction records with incomplete information. Using tools like Pandas in Python, a data scientist can identify missing values, impute or drop them as appropriate, and restructure the data to focus on specific variables like transaction frequency or total purchase amounts. This process ensures the dataset is ready for meaningful analysis.
Tools like Pandas, PySpark, and Dask are invaluable for handling unstructured data or working with massive datasets efficiently. These tools allow data scientists to transform complex data sets into manageable and analyzable forms, which is foundational for building machine learning models or conducting advanced statistical analysis.
Performing exploratory data analysis allows data scientists to identify patterns, correlations, and anomalies within structured data. Visualization libraries like Matplotlib and Seaborn, combined with Python scripts, play a significant role in understanding data insights before building predictive models or statistical models.
**3\. Machine Learning and AI**
![Machine learning and AI techniques](https://assets.roadmap.sh/guest/machine-learning-odmf1.png)
Machine learning is a driving force in the data science industry, enabling data-driven decisions across sectors and revolutionizing how organizations interpret data and make predictions. Mastering machine learning algorithms and frameworks are among the top data science skills for aspiring data scientists who wish to excel in analyzing data and creating impactful solutions.
Data scientists commonly tackle supervised learning tasks, such as predicting housing prices through regression models or identifying fraudulent transactions with classification algorithms. For example, using Scikit-learn, a data scientist can train a decision tree to categorize customer complaints into predefined categories for better issue resolution. Additionally, unsupervised techniques like clustering are applied in market segmentation to group customers based on purchasing patterns, helping businesses make data-driven decisions.
Deep learning represents the cutting edge of artificial intelligence, utilizing artificial neural networks to manage unstructured data and solve highly complex problems. Frameworks like TensorFlow and PyTorch are essential tools for developing advanced solutions, such as NLP models for chatbot interactions or generative AI for creating realistic images. These tools empower data scientists to push the boundaries of innovation and unlock actionable insights from vast and complex datasets.
## **4\. Statistical and Mathematical Foundations**
![Statistical and mathematical foundations](https://assets.roadmap.sh/guest/statistical-analysis-bnkn3.png)
Statistical concepts and mathematical skills form the backbone of building robust data models and interpreting data insights. These foundational skills are indispensable for anyone aiming to succeed in the data science field.
Probability theory and hypothesis testing play a vital role in understanding uncertainty in data workflows. For instance, a data scientist might use hypothesis testing to evaluate whether a new marketing strategy leads to higher sales compared to the current approach, ensuring data-driven decision-making.
Linear algebra and calculus are crucial for developing and optimizing machine learning algorithms. Techniques like matrix decomposition and gradient descent are used to train neural networks and enhance their predictive accuracy. These mathematical tools are the engine behind many advanced algorithms, making them essential data scientist skills.
Advanced statistical analysis, including A/B testing and Bayesian inference, helps validate predictions and understand relationships within complex datasets. For example, A/B testing can determine which website design yields better user engagement, providing actionable insights to businesses.
## **5\. Big Data Technologies**
![Big data technologies](https://assets.roadmap.sh/guest/big-data-x0rmx.png)
While big data skills are secondary for most data scientists, understanding big data technologies enhances their ability to handle massive datasets efficiently. Familiarity with tools like Apache Spark and Hadoop allows data scientists to process and analyze distributed data, which is especially important for projects involving millions of records. For example, Apache Spark can be used to calculate real-time metrics on user behavior across e-commerce platforms, enabling businesses to personalize experiences dynamically.
Cloud computing skills, including proficiency with platforms like AWS or GCP, are also valuable for deploying machine learning projects at scale. A data scientist working with GCP's BigQuery can query massive datasets in seconds, facilitating faster insights for time-sensitive decisions. These technologies, while not the core of a data scientist's responsibilities, are crucial for ensuring scalability and efficiency in data workflows.
## **6\. Data Engineering**
![Data engineering](https://assets.roadmap.sh/guest/data-engineering-lqm7i.png)
Data engineering complements data science by creating the infrastructure required to analyze data effectively. This skill set ensures that data flows seamlessly through pipelines, enabling analysis and decision-making.
Designing ETL (Extract, Transform, Load) pipelines is a critical part of data engineering. For instance, a data engineer might create a pipeline to collect raw sales data from multiple sources, transform it by standardizing formats and handling missing values, and load it into a database for further analysis. These workflows are the backbone of data preparation.
Using tools like Apache Airflow, those workflows can be streamlined, while managing real-time data streaming using Kafka ensures that real-time data—such as social media feeds or IoT sensor data—is processed without delay. For example, a Kafka pipeline could ingest weather data to update forecasts in real-time.
Finally, storing and querying complex data sets in cloud computing with tools like Snowflake or BigQuery allows data scientists to interact with massive datasets effortlessly.
These platforms support scalable storage and high-performance queries, enabling faster analysis and actionable insights.
## **7\. Data Visualization**
![Data visualization techniques and tools](https://assets.roadmap.sh/guest/data-visualization-bkkel.png)
Data visualization is a cornerstone of the data science field, as it enables data professionals to present data and communicate findings effectively. While traditional tools like Tableau and Power BI are widely used, aspiring data scientists should prioritize programming-based tools like Plotly and D3.js for greater flexibility and customization.
For example, using Plotly, a data scientist can create an interactive dashboard to visualize customer purchase trends over time, allowing stakeholders to explore the data dynamically. Similarly, D3.js offers unparalleled control for designing custom visualizations, such as heatmaps or network graphs, that convey complex relationships in a visually compelling manner.
Applying storytelling techniques further enhances the impact of visualizations. By weaving data insights into a narrative, data scientists can ensure their findings resonate with stakeholders and drive actionable decisions. For instance, a well-crafted story supported by visuals can explain how seasonal demand patterns affect inventory management, bridging the gap between technical analysis and strategic planning.
## **8\. Business and Domain Knowledge**
![Business and domain knowledge](https://assets.roadmap.sh/guest/business-and-domain-knowledge-5mnne.PNG)
Domain knowledge enhances the relevance of data science projects by aligning them with organizational goals and addressing unique industry-specific challenges. Understanding the context in which data is applied allows data professionals to make their analysis more impactful and actionable.
For example, in the finance industry, a data scientist with domain expertise can design predictive models that assess credit risk by analyzing complex data sets of customer transactions, income, and past credit behavior. These models enable financial institutions to make data-driven decisions about lending policies.
In healthcare, domain knowledge allows data scientists to interpret medical data effectively, such as identifying trends in patient outcomes based on treatment history. By leveraging data models tailored to clinical needs, data professionals can help improve patient care and operational efficiency in hospitals.
This alignment ensures that insights are not only technically robust but also directly applicable to solving real-world problems, making domain knowledge an indispensable skill for data professionals seeking to maximize their impact.
## **9\. Soft Skills**
![Soft skills for data scientists](https://assets.roadmap.sh/guest/soft-skills-3y4zs.png)
Soft skills are as essential as technical skills in the data science field, bridging the gap between complex data analysis and practical implementation. These skills enhance a data scientist's ability to communicate findings, collaborate with diverse teams, and approach challenges with innovative solutions.
**Communication** is critical for translating data insights into actionable strategies. For example, a data scientist might present the results of an exploratory data analysis to marketing executives, breaking down statistical models into simple, actionable insights that drive campaign strategies. The ability to clearly interpret data ensures that stakeholders understand and trust the findings.
**Collaboration** is equally vital, as data science projects often involve cross-functional teams. For instance, a data scientist might work closely with software engineers to integrate machine learning models into a production environment or partner with domain experts to ensure that data-driven decisions align with business objectives. Effective teamwork ensures seamless data workflows and successful project outcomes.
**Creativity** allows data scientists to find innovative ways to address complex problems. A creative data scientist might devise a novel approach to handling unstructured data, such as using natural language processing (NLP) techniques to extract insights from customer reviews, providing actionable insights that improve product development.
These critical soft skills complement technical expertise, making data professionals indispensable contributors to their organizations.
## 10\. Feature engineering and selection for model optimization
![Feature engineering and selection](https://assets.roadmap.sh/guest/feature-engineering-1pit4.png)
For machine learning models to interpret and use any type of data, that data needs to be turned into features. And that is where feature engineering and selection comes into play. These are two critical steps in the data science workflow because they directly influence the performance and accuracy of the models. If you think about it, the better the model understands what data to focus on, the better it'll perform.
These processes involve creating, selecting, and transforming raw data into useful features loaded with meaning that help represent the underlying problem for the model.
For example, imagine building a model to predict house prices. Raw data might include information like the size of the house in square meters, the number of rooms, and the year it was built. Through feature engineering, a data scientist could create new features, such as "price per square meter" or "age of the house," which make the data more informative for the model. These features can highlight trends that a model might otherwise miss.
Feature selection, on the other hand, focuses on optimizing the use and dependency on features by identifying the most relevant ones and removing the redundant or irrelevant features. For example, let's consider a retail scenario where a model is predicting customer churn, here it might benefit from focusing on features like "purchase frequency" and "customer feedback sentiment", while ignoring less impactful ones like "the time of day purchases are made". This helps to avoid the model getting overwhelmed by noise, improving both its efficiency and accuracy.
If you're looking to improve your data science game, then focusing on feature engineering and selection can definitely have that effect.
## 11\. Staying Current
![Staying current with data science trends](https://assets.roadmap.sh/guest/stay-current-vnqqq.png)
The data science field evolves at an unprecedented pace, driven by advancements in artificial intelligence, machine learning, and data technologies. Staying current with emerging trends is essential for maintaining a competitive edge and excelling in the industry.
Joining **data science communities**, such as forums or online groups, provides a platform for exchanging ideas, discussing challenges, and learning from peers. For instance, platforms like Kaggle or GitHub allow aspiring data scientists to collaborate on data science projects and gain exposure to real-world applications.
Attending **data science conferences** is another effective way to stay informed. Events like NeurIPS, Strata Data Conference, or PyData showcase cutting-edge research and practical case studies, offering insights into the latest advancements in machine learning models, big data technologies, and cloud computing tools.
Engaging in **open-source projects** not only sharpens technical skills but also helps data professionals contribute to the broader data science community. For example, contributing to an open-source MLOps framework might provide invaluable experience in deploying and monitoring machine learning pipelines.
Embracing trends like **MLOps** for operationalizing machine learning, **AutoML** for automating model selection, and **Generative AI** for creating synthetic data ensures that data scientists remain at the forefront of innovation. These emerging technologies are reshaping the data science field, making continuous learning a non-negotiable aspect of career growth.
**Summary**
Mastering these essential data scientist skills—from programming languages and machine learning skills to interpreting data insights and statistical models—will future-proof your [career path in data science](https://roadmap.sh/ai-data-scientist/career-path). These include the core skills of data manipulation, statistical analysis, and data visualization, all of which are central to the data science field.
In addition, while big data technologies and data engineering skills are not the central focus of a data scientist's role, they serve as valuable, data science-adjacent competencies. Familiarity with big data tools like Apache Spark and cloud computing platforms can enhance scalability and efficiency in handling massive datasets, while data engineering knowledge helps create robust pipelines to support analysis. By building expertise in these areas and maintaining adaptability, you can excel in this dynamic, data-driven industry.
Check out our [data science roadmap](https://roadmap.sh/ai-data-scientist) next to discover what your potential learning path could look like in this role.

View File

@@ -1,313 +0,0 @@
---
title: 'Data Science Tools: Our Top 11 Recommendations for @currentYear@'
description: 'Master your data science projects with our top 11 tools for 2025! Discover the best platforms for data analysis, visualization, and machine learning.'
authorId: fernando
excludedBySlug: '/ai-data-scientist/tools'
seo:
title: 'Data Science Tools: Our Top 11 Recommendations for @currentYear@'
description: 'Master your data science projects with our top 11 tools for 2025! Discover the best platforms for data analysis, visualization, and machine learning.'
ogImageUrl: 'https://assets.roadmap.sh/guest/data-science-tools-1a9w1.jpg'
isNew: false
type: 'textual'
date: 2025-01-28
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
![Top data science tools](https://assets.roadmap.sh/guest/data-science-tools-1a9w1.jpg)
In case you haven't noticed, the data science industry is constantly evolving, potentially even faster than the web industry (which says a lot\!).
And 2025 is shaping up to be another transformative year for tools and technologies. Whether you're exploring machine learning tools, predictive modeling, data management, or data visualization tools, there's an incredible array of software to enable [data scientists](https://roadmap.sh/ai-data-scientist) to analyze data efficiently, manage data effectively, and communicate insights.
In this article, we dive into the essential data science tools you need to know for 2025, complete with ratings and expert picks to help you navigate the options.
## What is Data Science?
Data science is an interdisciplinary field that combines mathematics, statistics, computer science, and domain expertise to extract meaningful insights from data. It involves collecting, cleaning, and analyzing large datasets to uncover patterns, trends, and actionable information. At its core, data science aims to solve complex problems through data-driven decision-making, using techniques such as machine learning, predictive modeling, and data visualization.
The data science process typically involves:
* **Data Collection**: Gathering data from various sources, such as databases, APIs, or real-time sensors.
* **Data Preparation**: Cleaning and transforming raw data into a usable format for analysis.
* **Exploratory Data Analysis (EDA):** Identifying trends, correlations, and outliers within the dataset.
* **Modeling**: Using algorithms and statistical methods to make predictions or classify data.
* **Interpretation and Communication**: Visualizing results and presenting insights to stakeholders in an understandable manner.
Data science plays a key role in various industries, including healthcare, finance, marketing, and technology, driving innovation and efficiency by leveraging the power of data.
## Criteria for Ratings
We rated each of the best data science tools on a 5-star scale based on:
* **Performance:** How efficiently the tool handles large and complex datasets. This includes speed, resource optimization, and reliability during computation.
* **Scalability:** The ability to scale across big data and multiple datasets. Tools were evaluated on their capability to maintain performance as data sizes grow.
* **Community and Ecosystem:** Availability of resources, support, and integrations. Tools with strong community support and extensive libraries received higher ratings.
* **Learning Curve:** Ease of adoption for new and experienced users. Tools with clear documentation and intuitive interfaces were rated more favorably.
## Expert Recommendations![Expert Recommendations](https://assets.roadmap.sh/guest/data-science-expert-advice-4lanb.png)
Picking the best tools for your project is never easy, and it's hard to make an objective decision if you don't have experience with any of them.
So to make your life a bit easier, here's my personal recommendation, you can take it or leave it, it's up to you, but at least you'll know where to start:
While each tool has its strengths, my favorite pick among them is **TensorFlow**. Its perfect scores in performance, scalability, and community support (you'll see them in a second in the table below), combined with its relatively moderate learning curve, make it an amazing choice for building advanced neural networks and developing predictive analytics systems. You can do so much with it, like image recognition, natural language processing, and recommendation systems cementing its position as the leading choice (and my personal choice) in 2025\.
Now, to help you understand and compare the rest of the tools from this guide, the table below summarizes their grades across key criteria: performance, scalability, community support, and learning curve. It also highlights the primary use cases for these tools.
| Tool | Performance | Scalability | Community | Learning Curve | Best For |
| ----- | ----- | ----- | ----- | ----- | ----- |
| TensorFlow | 5 | 5 | 5 | 4 | Advanced neural networks, predictive analytics |
| Apache Spark | 5 | 5 | 5 | 3 | Distributed analytics, real-time streaming |
| Jupyter Notebooks | 4 | 4 | 5 | 5 | Exploratory analysis, education |
| Julia | 4 | 4 | 4 | 3 | Simulations, statistical modeling |
| NumPy | 4 | 3 | 5 | 5 | Numerical arrays, preprocessing workflows |
| Polars | 5 | 4 | 4 | 4 | Data preprocessing, ETL acceleration |
| Apache Arrow | 5 | 5 | 4 | 3 | Interoperability, streaming analytics |
| Streamlit | 4 | 4 | 5 | 5 | Interactive dashboards, rapid deployment |
| DuckDB | 4 | 4 | 4 | 5 | SQL queries, lightweight warehousing |
| dbt | 4 | 4 | 5 | 4 | SQL transformations, pipeline automation |
| Matplotlib | 4 | 3 | 5 | 4 | Advanced visualizations, publication graphics |
Let's now deep dive into each of these tools to understand in more detail, why they're in this guide.
## Data science tools for ML & Deep learning tools
### TensorFlow
![TensorFlow](https://assets.roadmap.sh/guest/data-science-tools-tensorflow-exdxy.png)
TensorFlow remains one of the top data science tools for deep learning models and machine learning applications. Developed by Google, this open-source platform excels in building neural networks, predictive analytics, and natural language processing models.
* **Performance (★★★★★):** TensorFlow achieves top marks here due to its use of GPU and TPU acceleration, which allows seamless handling of extremely large models. Its ability to train complex networks without compromising on speed solidifies its high-performance ranking.
* **Scalability (★★★★★):** TensorFlow scales from single devices to distributed systems effortlessly, enabling use in both prototyping and full-scale production.
* **Community and Ecosystem (★★★★★):** With an active developer community and comprehensive support, TensorFlow offers unmatched resources and third-party integrations.
* **Learning Curve (★★★★):** While it offers immense power, mastering TensorFlow's advanced features requires time, making it slightly less accessible for beginners compared to simpler frameworks.
**Strengths:** TensorFlow is a powerhouse for performance and scalability in the world of machine learning. Its GPU and TPU acceleration allow users to train and deploy complex models faster than many competitors. The massive community ensures constant innovation, with frequent updates, robust third-party integrations, and an ever-growing library of resources. The inclusion of TensorFlow Lite and TensorFlow.js makes it versatile for both edge computing and web applications.
**Best For:** Developing advanced neural networks for image recognition, natural language processing pipelines, building recommendation systems, and creating robust predictive analytics tools for a wide array of industries.
**Used by:** Google itself uses TensorFlow extensively for tasks like search algorithms, image recognition, and natural language processing. Similarly, Amazon employs TensorFlow to power recommendation systems and optimize demand forecasting.
## Data science tools for big data processing
### Apache Spark
![Apache Spark](https://assets.roadmap.sh/guest/data-science-tools-spark-tjoqm.png)
An Apache Software Foundation project, Apache Spark is a powerhouse for big data processing, enabling data scientists to perform batch processing and streaming data analysis. It supports a wide range of programming languages, including Python, Scala, and Java, and integrates well with other big data tools like Hadoop and Kafka.
* **Performance (★★★★★):** Spark excels in processing speed thanks to its in-memory computing capabilities, making it a leader in real-time and batch data processing.
* **Scalability (★★★★★):** Designed for distributed systems, Spark handles petabytes of data with ease, maintaining efficiency across clusters.
* **Community and Ecosystem (★★★★★):** Spark's widespread adoption and integration with tools like Kafka and Hadoop make it a staple for big data workflows.
* **Learning Curve (★★★):** Beginners may find distributed computing concepts challenging, though excellent documentation helps mitigate this.
**Strengths:** Spark stands out for its lightning-fast processing speed and flexibility. Its in-memory computation ensures minimal delays during large-scale batch or streaming tasks. The compatibility with multiple programming languages and big data tools enhances its integration into diverse tech stacks.
**Best For:** Executing large-scale data analytics in distributed systems, real-time stream processing for IoT applications, running ETL pipelines, and data mining for insights in industries like finance and healthcare.
**Used by:** Apache Spark has been adopted by companies like Uber and Shopify. Uber uses Spark for real-time analytics and stream processing, enabling efficient ride-sharing logistics. Shopify relies on Spark to process large volumes of e-commerce data, supporting advanced analytics and business intelligence workflows.
## Exploratory & Collaborative tools
### Jupyter Notebooks
![Jupyter Notebooks](https://assets.roadmap.sh/guest/data-science-tools-jupyter-cgfv4.png)
Jupyter Notebooks are an essential data science tool for creating interactive and shareable documents that combine code, visualizations, and narrative text. With support for over 40 programming languages, including Python, R, and Julia, Jupyter facilitates collaboration and exploratory data analysis.
* **Performance (★★★★):** Jupyter is designed for interactivity rather than computational intensity, which makes it highly effective for small to medium-scale projects but less suitable for high-performance tasks.
* **Scalability (★★★★):** While Jupyter itself isn't designed for massive datasets, its compatibility with scalable backends like Apache Spark ensures it remains relevant for larger projects.
* **Community and Ecosystem (★★★★★):** Jupyter's open-source nature and extensive community-driven extensions make it a powerhouse for versatility and support.
* **Learning Curve (★★★★★):** Its simple and intuitive interface makes it one of the most accessible tools for beginners and professionals alike
**Strengths:** Jupyter's flexibility and ease of use make it indispensable for exploratory analysis and education. Its ability to integrate code, output, and explanatory text in a single interface fosters collaboration and transparency.
**Best For:** Creating educational tutorials, performing exploratory data analysis, prototyping machine learning models, and sharing reports that integrate code with rich visualizations.
**Used by:** Jupyter Notebooks have become a staple for exploratory analysis and collaboration. Delivery Hero uses Jupyter to enhance delivery logistics through data analysis and visualization, while Intuit leverages the tool to facilitate financial data analysis in collaborative projects.
## Data science tools for statistical computing
### Julia
![Julia](https://assets.roadmap.sh/guest/data-science-tools-julia-ctqlw.png)
Julia is an emerging open-source programming language tailored for statistical computing and data manipulation. It combines the performance of low-level languages like C with the simplicity of high-level languages like Python. Julia's strengths lie in its speed for numerical computation and its dynamic type system, making it highly suitable for big data applications and machine learning models. The Julia ecosystem is rapidly growing, offering libraries for data visualization, optimization, and deep learning.
* **Performance (★★★★):** Julia's design prioritizes speed for numerical and statistical computing, placing it ahead of many high-level languages in terms of raw performance.
* **Scalability (★★★★):** With built-in support for parallel computing, Julia scales well for tasks requiring significant computational power, although its ecosystem is still catching up to Python's.
* **Community and Ecosystem (★★★★):** Julia's growing community and the increasing availability of libraries make it a solid choice, though it's not yet as robust as more established ecosystems.
* **Learning Curve (★★★):** Julia's unique syntax, while designed for simplicity, presents a learning barrier for those transitioning from other languages like Python or R.
**Strengths:** Julia's ability to execute complex numerical tasks at high speed positions it as a top contender in scientific computing. Its built-in support for parallelism allows it to scale efficiently, while its clear syntax lowers barriers for domain experts transitioning from MATLAB or R.
**Best For:** Performing advanced statistical analysis, numerical optimization, developing simulations in physics and finance, and implementing machine learning models for high-performance environments.
**Used by:** The high-performance capabilities of Julia make it a favorite for statistical computing in industries like finance. For example, Capital One uses Julia for risk analytics and modeling, and Aviva employs it to improve actuarial computations and financial modeling processes.
### NumPy
![NumPy](https://assets.roadmap.sh/guest/data-science-tools-numpy-nrbc7.png)
A foundational library in the Python ecosystem, NumPy provides powerful tools for managing data structures, numerical computations, and statistical analysis. It is widely used for data preparation, enabling operations on large multi-dimensional arrays and matrices.
* **Performance (★★★★):** NumPy's optimized C-based implementation allows it to handle numerical operations with high efficiency, but it relies on integration with other tools for larger or distributed workloads.
* **Scalability (★★★):** As a single-machine library, NumPy is best suited for datasets that fit in memory, though it integrates well with scalable tools like Dask for extended use.
* **Community and Ecosystem (★★★★★):** NumPy's foundational role in Python's data science ecosystem means extensive resources and near-universal compatibility.
* **Learning Curve (★★★★★):** Its straightforward API and clear documentation make NumPy an essential and approachable tool for data preparation and numerical computing.
**Strengths:** NumPy's versatility and efficiency underpin its widespread adoption in the Python ecosystem. Its array manipulation capabilities—from slicing and reshaping to broadcasting—make it a cornerstone for numerical operations.
**Best For:** Handling numerical arrays for preprocessing, matrix algebra in physics and engineering, foundational operations for machine learning pipelines, and performing basic statistical analysis efficiently.
**Used by:** NumPy serves as the foundation for many Python-based workflows. Spotify uses NumPy for numerical computations within its recommendation algorithms, and Airbnb employs it to optimize pricing strategies and improve customer experience through data analysis.
## **Data science tools for data manipulation & preprocessing tools**
### Polars
![Polars](https://assets.roadmap.sh/guest/data-science-tools-polaris-5u7yt.png)
Polars is a lightning-fast data processing & manipulation library that enables data scientists to handle complex datasets. Unlike traditional libraries, Polars is written in Rust, offering exceptional performance and low memory usage. Its DataFrame API is intuitive and supports multi-threaded operations, making it a strong choice for large-scale data preprocessing and manipulation tasks.
* **Performance** (★★★★★): Polars' Rust-based architecture ensures exceptional speed and memory efficiency, positioning it as a leading tool for high-performance data manipulation.
* **Scalability** (★★★★): While optimized for larger datasets, its scalability is limited to environments supported by multi-threading rather than distributed systems.
* **Community and Ecosystem** (★★★★): Though its ecosystem is still growing, Polars' strong integration with Python and intuitive API provide a solid foundation.
* **Learning Curve** (★★★★): With a user-friendly interface inspired by Pandas, Polars is easy to adopt for those familiar with similar tools, though Rust concepts may pose challenges for some.
**Strengths:** Polars stands out due to its unparalleled speed, derived from its Rust-based architecture. Its ability to process data in parallel ensures efficiency even with large datasets, reducing bottlenecks in ETL pipelines. The intuitive API and support for lazy evaluation make it both user-friendly and powerful.
**Best For:** Processing complex datasets for data cleaning, reshaping large-scale tables, and accelerating ETL pipelines in environments requiring high-speed operations.
**Used by:** Polars is gaining traction for its exceptional speed in data preprocessing and ETL workflows. Zillow uses Polars for efficient data preprocessing in real estate market analysis, while Stripe adopts it to accelerate ETL processes for handling financial transaction data.
### Apache Arrow
![Apache Arrow](https://assets.roadmap.sh/guest/data-science-tools-apache-arrow-6d6mg.png)
Apache Arrow is revolutionizing how data is stored and transferred for big data applications. Its in-memory columnar format accelerates data processing and integration between multiple datasets and tools. Apache Arrow also acts as a bridge between various programming languages and frameworks, improving the interoperability of data science workflows.
* **Performance (★★★★★):** Apache Arrow's in-memory columnar format delivers unmatched speed for data processing and transfer between tools.
* **Scalability (★★★★★):** Its design supports seamless scalability across distributed systems, making it ideal for large-scale workflows.
* **Community and Ecosystem (★★★★):** Arrow's adoption by major data tools ensures growing support, though its standalone ecosystem remains limited compared to broader frameworks.
* **Learning Curve (★★★):** Understanding columnar data formats and workflows may require extra effort for beginners but pays off in advanced scenarios.
**Strengths:** Apache Arrow's columnar format provides a significant boost in performance and compatibility. Its seamless interoperability between tools such as Pandas, Spark, and TensorFlow eliminates data transfer inefficiencies. The library also supports multi-language workflows, making it indispensable for teams leveraging diverse tech stacks.
**Best For:** Ensuring efficient interoperability between data tools, accelerating data lake operations, and supporting real-time data analytics in distributed systems.
**Used by:** Google BigQuery integrates Arrow to enhance data interchange and query performance, and AWS Athena relies on Arrow's in-memory format to facilitate faster query responses and real-time analytics.
## Data science tools for application development
### Streamlit
![Streamlit](https://assets.roadmap.sh/guest/data-science-tools-streamlit-iq0sl.png)
Streamlit is an open-source framework for creating custom data science applications and dashboards. It simplifies the process of building interactive apps by using Python scripts, making it accessible even for those with minimal web development experience. Streamlit's API enables rapid prototyping of machine learning tools and visualizations.
* **Performance (★★★★):** Optimized for real-time application development, Streamlit is fast for small to medium-scale projects.
* **Scalability (★★★★):** Streamlit scales reasonably well but isn't designed for massive applications.
* **Community and Ecosystem (★★★★★):** Its active community and constant updates ensure excellent support for users.
* **Learning Curve (★★★★★):** With a simple API and Python-centric design, Streamlit is easy for both developers and non-developers.
**Strengths:** Streamlit's simplicity and speed make it ideal for crafting interactive dashboards with minimal effort. Its integration with popular Python libraries like Pandas and Matplotlib allows users to transform raw data into meaningful insights quickly.
**Best For:** Creating interactive dashboards for sharing machine learning predictions, visualizing complex datasets with minimal development effort, and rapidly deploying prototypes for stakeholder feedback.
**Used by:** Streamlit simplifies the creation of interactive dashboards and data applications. Companies like Snowflake use Streamlit to build client-facing data apps, while Octopus Energy employs it to create dashboards that visualize energy consumption data for their customers.
### DuckDB
![DuckDB](https://assets.roadmap.sh/guest/data-science-tools-duckdb-iv557.png)
DuckDB is an open-source analytics database that simplifies structured queries on raw data. Designed to operate within analytical workflows, it supports SQL-based queries without the need for a dedicated database server. Its efficient storage model makes it ideal for querying structured and unstructured data in ad hoc analysis scenarios, making it highly favored for lightweight data warehousing tasks.
* **Performance (★★★★):** DuckDB delivers impressive speeds for ad hoc analytics, optimized for single-machine workflows.
* **Scalability (★★★★):** Suitable for lightweight to medium-scale tasks, DuckDB integrates well into Python and R environments.
* **Community and Ecosystem (★★★★):** Growing adoption and strong SQL compatibility make it increasingly popular.
* **Learning Curve (★★★★★):** Its SQL-based interface ensures a smooth learning experience for most users.
**Strengths:** DuckDB's efficiency and ease of use make it a go-to tool for analysts. Its ability to operate without infrastructure overhead allows rapid deployment, and its SQL compatibility ensures accessibility for non-programmers.
**Best For:** Running interactive SQL queries in development workflows, performing data warehousing tasks without infrastructure overhead, and integrating ad hoc analyses directly into Python-based projects.
**Used by:** DuckDB's lightweight and efficient SQL analytics have found applications in various industries. MotherDuck integrates DuckDB to enable fast, in-process analytical queries, and SeMI Technologies leverages DuckDB within its Weaviate platform for high-speed vector search analytics.
### dbt (Data Build Tool)
![dbt](https://assets.roadmap.sh/guest/data-science-tools-dbt-cozps.png)
dbt is a development framework for transforming data in warehouses. It allows analysts and engineers to write modular SQL-based transformations and manage data workflows efficiently. With its focus on collaboration and version control, dbt has become an essential tool for teams working on data pipelines.
* **Performance (★★★★):** dbt's modular approach allows for efficient and scalable SQL transformations.
* **Scalability (★★★★):** Designed for modern data warehouses, dbt handles increasing workloads effectively.
* **Community and Ecosystem (★★★★★):** Its thriving community and vendor support make it indispensable for data pipeline management.
* **Learning Curve (★★★★):** Familiarity with SQL simplifies adoption, though pipeline concepts may require additional learning.
**Strengths:** dbt's modularity and focus on collaboration streamline complex SQL transformations. Its integration with version control systems ensures reproducibility, while the ability to test and document transformations within the tool fosters better collaboration among data teams.
**Best For:** Automating SQL transformations for analytics, managing data warehouse workflows with version control, and creating reusable and modular pipelines for team collaboration.
**Used by:** dbt has become essential for transforming and managing data workflows. JetBlue uses dbt to optimize their data warehouse for improved analytics, and GitLab adopts it to transform raw data into actionable insights, streamlining their analytics operations.
## Data science tools for data visualization
### Matplotlib
![Matplotlib](https://assets.roadmap.sh/guest/data-science-tools-matplotlib-b8lpy.png)
Matplotlib is a widely used data visualization library in Python that allows users to create static, animated, and interactive visualizations. Known for its flexibility, Matplotlib supports detailed customization, making it suitable for complex visualizations required in data science projects.
* **Performance (★★★★):** Matplotlib handles visualization tasks efficiently for small to medium datasets but may lag with complex or large-scale rendering.
* **Scalability (★★★):** Designed for single-threaded use, it integrates with scalable tools for extended capabilities.
* **Community and Ecosystem (★★★★★):** A veteran library with vast resources and tutorials ensures comprehensive support.
* **Learning Curve (★★★★):** Accessible for beginners, though mastering advanced features takes effort.
**Strengths:** Matplotlib's extensive customization options allow it to cater to diverse visualization needs, from simple plots to publication-grade graphics. Its compatibility with libraries like NumPy ensures seamless data integration, while the active community provides extensive tutorials and third-party tools. Despite being a veteran library, Matplotlib remains relevant by adapting to modern visualization demands.
**Best For:** Creating publication-quality figures, animating time-series data, developing exploratory charts, and embedding visualizations into data-driven applications.
**Used by:** NASA uses Matplotlib to plot and visualize space mission data, while CERN relies on it for visualizing complex results from particle physics experiments.
## How to Pick the Right Data Science Tool?
Choosing the right data science tool can be a daunting task given the vast array of options available. The best tool for your project will depend on several factors, which can be broadly categorized into the evaluation criteria and the context of your specific project.
### Importance of Evaluation Criteria
1. **Performance**: This determines how well the tool handles large and complex datasets. Tools that offer fast computation, reliable processing, and efficient use of resources are ideal for high-performance environments.
2. **Scalability**: As data grows, the ability to maintain consistent performance is critical. Tools that scale across big data frameworks or distributed systems ensure longevity and adaptability.
3. **Community and Ecosystem**: A strong community provides valuable resources such as tutorials, documentation, and support. An extensive ecosystem ensures compatibility with other tools and libraries, making integration seamless.
4. **Learning Curve**: A tool's usability can make or break its adoption. Tools with intuitive interfaces and comprehensive documentation enable faster onboarding for teams with diverse expertise.
### Considering Project Context
While evaluation criteria provide a standardized way to compare tools, the context of your project ultimately determines the best fit. Key considerations include:
Tech Stack: The tools should integrate smoothly with your existing technologies and workflows.
Team Expertise: The skill levels and experience of your team play a significant role in adoption. A tool with a steep learning curve may not be ideal for a team of beginners.
Project Deadlines: Time constraints can affect the choice of tools. A tool with extensive setup requirements may not suit a project with tight deadlines.
Data Complexity and Size: The nature and volume of your data should align with the tool's capabilities.
By balancing these evaluation criteria with the unique needs of your project, you can ensure that the chosen tool maximizes efficiency and effectiveness while minimizing challenges.
## Final Thoughts
Data science is an exciting and ever-evolving field, and the tools we've explored here represent the state-of-the-art of innovation for 2025\. Each tool has its own strengths, from high performance and scalability to user-friendly interfaces and robust community support. Whether you're just starting out in data science or managing complex, large-scale projects, there's a tool out there that's just right for you.
However, choosing that tool isn't just about star ratings or feature lists—it's about finding what works best for your specific context.
And remember, data science is as much about the journey as it is about the results. Exploring new tools, learning from community resources, and iterating on your processes will make you a better data scientist and help your projects thrive.
Check out our [data scientist roadmap](https://roadmap.sh/ai-data-scientist) to get a full view of your potential journey ahead\!

View File

@@ -1,174 +0,0 @@
---
title: "Data Science vs. AI: How I Would Choose My Path"
description: "If you love working with data, should you become a data scientist or an AI engineer? Here's how I made my choice."
authorId: william
excludedBySlug: '/ai-data-scientist/vs-ai'
seo:
title: "Data Science vs. AI: How I Would Choose My Path"
description: "If you love working with data, should you become a data scientist or an AI engineer? Here's how I made my choice."
ogImageUrl: 'https://assets.roadmap.sh/guest/data-science-vs-artificial-intelligence-w7gl5.jpg'
isNew: true
type: 'textual'
date: 2025-03-24
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
![Data Science vs AI: What are the differences?](https://assets.roadmap.sh/guest/data-science-vs-artificial-intelligence-w7gl5.jpg)
Choosing between specializing in data science and AI comes down to what you like and the problems you want to solve. If you enjoy analyzing data, uncovering insights, and making data-driven decisions, data science might be for you. But artificial intelligence is the way to go if you're into creating systems that can learn, adapt, and make decisions on their own.
When I first got into tech, I wasn't sure which path to take. I spent late nights researching, feeling both excited and overwhelmed. Data science and AI seemed so similar that telling them apart felt impossible, especially since many jobs required skills in both. But as I dug deeper, I realized they have distinct focuses despite their overlap.
Data science focuses on extracting meaningful insights from data. As a data scientist, you'll be responsible for designing datasets, building models to analyze data, identifying patterns, and solving complex problems to help businesses make better decisions. You'll do this using statistical analysis and several machine learning techniques like supervised and unsupervised learning.
In contrast, artificial intelligence is about developing intelligent systems that can perform tasks that typically require human intelligence. These tasks include pattern recognition, predictive analysis, and language translation. You'll design algorithms to learn and solve problems without constant human intervention.
If you don't know much about data science and AI, don't worry about it. Check out our beginner's guide on [data science](https://roadmap.sh/ai-data-scientist) and [AI](https://roadmap.sh/ai-engineer) to get a good overview of both fields. In this guide, I'll show you what each field is about, the skills you need, and the opportunities they offer. By the end, you'll know which career path suits you best based on your interests, skills, and goals.
## Data science vs. AI: What are the key differences?
When discussing data science and AI, many people often mix them up. While they share similarities, their purposes, tools, and techniques differ. The table below summarizes the key differences between data science and AI:
| Characteristics | Data science | Artificial intelligence |
| ---------------- | ---------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| Primary focus | Extracting insights from data | Building intelligent systems that mimic human intelligence to perform tasks |
| Responsibilities | Data collection, data cleaning, data analysis, data modeling, data visualization, and building predictive models | Building and training machine learning models, machine learning algorithms, and artificial intelligence applications |
| Tools | Python, R, SQL, Pandas, Hadoop, TensorFlow, Tableau | Java, Python, PyTorch, OpenCV, spaCy, GPUs, AWS and Keras |
| Educational path | Bachelor's in computer science, statistics, or mathematics; master's in data science | Bachelor's in computer science, mathematics, or engineering; master's in AI or related field |
| Career paths | Data analyst, data scientist, business analyst, machine learning engineer | AI engineer, machine learning engineer, AI product manager, NLP enginner, AI research scientist |
| Applications | Predictive analytics, fraud detection, customer segmentation, healthcare analytics and more | Self-driving cars, chatbots, robotics, predictive maintenance, medical imaging analysis and more |
## Primary focus
One big difference between data science and AI is what they focus on the most. Data science focuses on uncovering insights and solving problems through data analytics. It uses structured data like customer databases to identify patterns and solve complex problems. You'll use advanced tools and machine learning techniques like computer vision to work with unstructured data like videos and images.
If you choose data science, you'll work on extracting valuable insights from data. For example, a data scientist working in finance will use anomaly detection to analyze transactional data. This helps with fraud detection and risk assessment, e.g., unusual login attempts.
![Data science vs. artificial intelligence: Primary focus](https://assets.roadmap.sh/guest/primary-focus-between-data-science-and-ai-l4fv0.png)
In contrast, if you choose artificial intelligence, you'll focus on building systems that mimic human intelligence, like learning, reasoning, and solving problems. It uses structured and unstructured data to enable machines to perform tasks like pattern recognition in images and speech and natural language processing. For example, AI virtual assistants like Siri can listen and reply to what you're saying. They use natural language processing models to recognize and understand your voice (human language). It makes it easy for you to ask and get answers to questions just by talking.
## Daily responsibilities
Data scientists and AI engineers have different responsibilities that show their focus areas. As a data scientist, your daily duties will include:
- **Data collection**: This is often the first thing you do when extracting insights from data. Your job will be to collect large volumes of data from several sources, such as databases. For example, a healthcare data scientist will collect and analyze patient data to create models to help in diagnosing diseases. It'll make it easier to predict patient outcomes and make treatment plans better.
- **Data cleaning**: After you collect all the data, the next step is to clean the data. Doing this means removing errors from the raw data to prepare it for data analysis.
- **Data analysis**: After cleaning, you'll analyze data to identify patterns and trends. You'll do this using statistical analysis and machine learning techniques like clustering.
- **Building models**: You'll create predictive models to make future predictions based on historical data. A company like Netflix, for example, uses predictive models to suggest TV shows and movies to you. The data scientist will analyze your past data to see what shows you've watched, how you rated them, and more. Then, they will use this data to build a model that suggests similar shows you'll like.
- **Data visualization**: Visualizing data is about presenting complex data in a visual format. As a data scientist, you'll use data visualization tools like Tableau and Power BI to present data in a way that every team member will understand.
![Data science vs. artificial intelligence: Job responsibilities](https://assets.roadmap.sh/guest/responsibilities-of-a-data-scientist-and-ai-engineer-wzlzh.png)
On the flip side, AI involves various responsibilities like designing, training, and testing AI models. As an AI engineer, your daily responsibilities will include:
- **Data preparation**: You'll collect, clean, analyze, and work with large amounts of data to train and test AI models (i.e., machine learning models). Yes, as an AI engineer, you'll also analyze data, although it is the primary duty of the data scientists. Doing this lets you check if the data is good for the AI model and spot any problems that could mess up the training.
- **Model training**: You'll be responsible for developing algorithms that enable machines to learn from data using machine learning techniques like computer vision and neural networks. For example, automotive industries use artificial intelligence to create self-driving cars. They use AI algorithms to analyze sensor data from cameras, radar, and lasers to see what's around them.
- **Review models**: You'll test and make sure that the models provide reliable results. Imagine you've developed a model to identify diseases from analyzing medical images. You'll use images the model hasn't seen before to test its accuracy at spotting diseases. If it misses something, that's your cue to tweak it until it gets better.
- **Implementation**: Once you create a model, you need to make sure it works well with other systems. It's like having a chatbot on a website to handle customer inquiries, using a fraud detection system in a bank to analyze transactions, or incorporating GPS functionality in self-driving cars for navigation. Additionally, you'll monitor and maintain its performance and update it when needed.
## The tools you'll use
One important thing to consider when choosing between data science and AI is the tools you'll use. In data science, you'll work with programming languages like [Python](https://roadmap.sh/python), R, and [SQL](https://roadmap.sh/sql) to extract insights and analyze data. You'll use Python libraries like Pandas to manipulate data and NumPy to make math calculations.
As a data scientist, you'll also use big data technologies like Hadoop to work with large volumes of data. Machine learning libraries like TensorFlow will help you develop advanced machine learning models. Also, you'll use data visualization tools like Tableau and Power BI when sharing your results.
![Data science vs. artificial intelligence: tools](https://assets.roadmap.sh/guest/tools-for-data-science-and-artificial-intelligence-q6i4v.png)
On the flip side, artificial intelligence needs more advanced tools to work its magic. You'll use programming languages like [Java](https://roadmap.sh/java) and [Python](https://roadmap.sh/python), like in data science, but you'll focus on AI frameworks like PyTorch to train deep learning models, especially neural networks. These frameworks can do various machine learning tasks, such as supervised learning (e.g., image classification), unsupervised learning (e.g., anomaly detection), and reinforcement learning (e.g., game playing) when needed.
Tools like OpenCV will help with computer vision tasks, and libraries like NLTK and spaCy will help with natural language processing. As an AI engineer, you'll also work with specialized hardware like graphics processing units (GPUs) and tensor processing units (TPUs). These tools provide the computational power to train large neural networks well. Finally, you'll work with cloud platforms like [AWS](https://roadmap.sh/aws) and Google Cloud AI Platform to deploy and manage your AI models.
## How do the skills you need differ?
Now that you know the differences between data science and artificial intelligence, let's look at the skills you need. As a data scientist, it's important to build a solid understanding in the following areas:
- Proficient in programming skills like [Python](https://roadmap.sh/python) and [SQL](https://roadmap.sh/sql) for data analysis and manipulation.
- Strong understanding of statistics and mathematics to analyze and interpret data.
- Good in data wrangling for cleaning and organizing datasets before analysis.
- Proficient in data mining to extract useful patterns and insights from large datasets.
- Strong data visualization techniques to present valuable insights through tools such as Matplotlib or Tableau.
- Basic understanding of machine learning principles and algorithms to apply predictive analytics and solve business problems.
- Good critical thinking skills to analyze data and provide solutions to business problems using data.
![Skills for data science and artificial intelligence](https://assets.roadmap.sh/guest/important-skills-for-data-science-and-ai-sj2nh.png)
In contrast, as an AI engineer, you'll create complex AI systems using the following skills:
- In-depth knowledge of advanced machine learning concepts, including neural networks, to create models for tasks like image recognition or natural language processing.
- Proficiency in programming skills ([Python](https://roadmap.sh/python), [C++](https://roadmap.sh/c-plus-plus), [Java](https://roadmap.sh/java)) for creating complex algorithms.
- Understanding mathematics, e.g., linear algebra and calculus for algorithm development.
- Experience with frameworks like TensorFlow and PyTorch for building and deploying AI models.
- Knowledge of computer vision and natural language processing to create intelligent systems that understand and interact with data.
## The educational pathway to data science and artificial intelligence career
A very good educational foundation is necessary to start a career as a data scientist. The first step is getting your bachelor's degree in computer science, data science, or artificial intelligence. These fields cover topics like algorithms, machine learning, and software development.
![Data science vs. artificial intelligence: Educational path](https://assets.roadmap.sh/guest/educational-pathway-to-data-science-and-ai-careers-clcgu.png)
On the other hand, artificial intelligence often requires higher educational qualifications, such as a bachelor's, master's, or Ph.D., due to its technically complex and research-oriented nature. You'll first need a bachelor's degree in computer science, data science, or artificial intelligence to start a career in this field. This will give you a good understanding of machine learning, mathematics, and statistics. You'll go into detail on topics like algebra and calculus and learn languages like [Python](https://roadmap.sh/python) and [Java](https://roadmap.sh/java). Some AI engineers may pursue a master's degree if they aim for senior or research positions, but it's not always necessary.
Also, you don't always have to attend a university to learn. Some people who want to become data scientists and AI engineers go to boot camps, take online courses, or get certifications instead. Platforms like [roadmap.sh](https://roadmap.sh) offer detailed [data science](https://roadmap.sh/ai-data-scientist) and [AI courses](https://roadmap.sh/ai-engineer) to help you learn. The platforms are more flexible and focus on practical projects, so you can create a portfolio to showcase your skills.
## Which field offers better career prospects?
Data science and artificial intelligence both look promising in terms of job opportunities. Both fields are in high demand, so there are plenty of job opportunities out there for you. However, artificial intelligence jobs usually pay better because they need more advanced skills and technical knowledge in machine learning and algorithm development.
![Data science vs. artificial intelligence: career path](https://assets.roadmap.sh/guest/career-paths-and-industries-for-data-science-and-ai-i333u.png)
Data science is a recognized field with many uses in industries like finance, healthcare, and marketing. If you're interested in data science, you could work as a [data analyst](https://roadmap.sh/data-analyst), business analyst, or data scientist. According to [Indeed](https://www.indeed.com/career/data-scientist/salaries?from=top_sb), the average salary for a data scientist in the United States (USA) across all industries is $125,495.
![Average salary of a data scientist in USA](https://assets.roadmap.sh/guest/average-salary-of-a-data-scientist-in-usa-vevcq.png)
On the other hand, artificial intelligence is in high demand in industries like robotics, automotive, and tech startups. If you're interested in artificial intelligence, you can work as a machine learning or AI engineer. [According to Indeed](https://www.indeed.com/career/machine-learning-engineer/salaries?from=top_sb), engineers working in machine learning in the USA make an average of $162,735 annually.
![Average salary of an engineer in machine learning](https://assets.roadmap.sh/guest/average-salary-of-an-engineer-in-machine-learning-ncqpb.png)
While salary is important when choosing between data science and artificial intelligence, it shouldn't be your only factor. For me, it's less about which field pays more and more about what excites you daily. You'll enjoy success and work satisfaction when you choose a job that matches your interests.
## Do data science and artificial intelligence overlap?
Yes, data science and artificial intelligence overlap. Data science is like the backbone of AI. It supplies the data and insights needed to train and improve artificial intelligence models.
Many skills overlap between data science and artificial intelligence. For instance, being good at coding in [Python](https://roadmap.sh/python), R, and [SQL](https://roadmap.sh/sql) is important in both fields. Both fields also need machine learning, statistics, and data visualization knowledge. Switching from data science to AI or vice versa is straightforward because they share many similarities in skills and tools.
## Will AI replace data science?
Will AI replace data science? This is a common concern among many data scientists since there's been a lot of buzz about AI. The simple answer is no: AI is not replacing data science.
Artificial intelligence tools can make it easier for data scientists to analyze data and predict trends faster. But we humans make sense of all that data, put it into context, and use it to make decisions for the company. Instead of seeing AI as a rival, think of it as a helpful tool that can help you get better at data science.
## Next steps to find your fit
If you're still trying to figure out which path to take, here are a few steps to help you find what feels right for you:
### Know your strengths
To find out which path is right for you, consider what you're good at and what excites you. Data science might be a good fit if you love analyzing data and finding out hidden stories behind numbers.
On the other hand, artificial intelligence might be better if you're into technology, algorithms, and creating systems that imitate human intelligence.
### Connect with others
Talk to some data science and artificial intelligence professionals and get their advice. Start by attending conferences or joining [online communities](https://roadmap.sh/discord) to connect with others.
You can ask questions, share your thoughts, and learn from others as a community member. When you chat with other professionals, ask them what they enjoy about their work, what their challenges are, and if they have any tips for newcomers. Listening to their stories can give you a better idea of what each job is really like.
### Don't be afraid to try
Don't be afraid to try new things and step out of your comfort zone. You might think you're into data science, but after taking some classes or working on projects, you could realize that artificial intelligence is where your true passion lies. It is completely normal and is part of the learning journey.
## What next?
Artificial intelligence and data science have changed how businesses work and make decisions. Both fields have great job opportunities, but the skills needed for each are different. Understanding the basics of these fields will help you pick the right path for you.
It's not about figuring out which field is better than the other—it's about choosing the one that fits your goals, interests, and skills. So relax and take some time to figure out what you're really into before making any big decisions.
For continuous learning, visit the roadmap.sh [data science](https://roadmap.sh/ai-data-scientist) and [artificial intelligence](https://roadmap.sh/ai-engineer) guides. Both guides have all the resources you need to start your journey as a data scientist or AI engineer.

View File

@@ -1,189 +0,0 @@
---
title: "Data Science vs Business Analytics: How I'd Choose My Path"
description: "I once struggled to choose between data science and business analytics. If you're in the same boat, I'll guide you to find the right fit."
authorId: ekene
excludedBySlug: '/ai-data-scientist/vs-business-analytics'
seo:
title: "Data Science vs Business Analytics: How I'd Choose My Path"
description: "I once struggled to choose between data science and business analytics. If you're in the same boat, I'll guide you to find the right fit."
ogImageUrl: 'https://assets.roadmap.sh/guest/data-science-and-business-analytics-zxubk.jpg'
isNew: true
type: 'textual'
date: 2025-03-24
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
![Data science vs business analytics comparison](https://assets.roadmap.sh/guest/data-science-and-business-analytics-zxubk.jpg)
If you enjoy coding, working with algorithms, and solving mathematical problems, you'll likely thrive in [data science](https://roadmap.sh/ai-data-scientist). However, if you prefer analyzing trends, making strategic decisions, and communicating insights, business analytics is a better fit.
When I was deciding between the two, I kept getting lost in job descriptions and salary comparisons. But what really mattered was how I wanted to work with data. Did I want to build models and predict future trends? Or did I want to interpret existing data to solve business problems?
If you're facing the same dilemma, the best way to decide is by understanding what each role actually does and how it fits your strengths. In this guide, I'll walk you through the key differences, career paths, and real-world examples, so by the end, you'll have clarity on the right choice for you.
Before diving in, here's a quick comparison:
| | Data Science | Business Analytics |
| ------------ | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Key role | Building data models and using math and programming to analyze complex data and extract insights. | Analyzing data and digging for insights to solve specific business problems and presenting them to inform strategy. |
| Skills | Machine learning, advanced mathematics, programming, business intelligence, data analytics, and data visualization. | Data analysis using Excel or Sheets, SQL, visualization, basic statistical modeling, business intelligence, communication, presentation, and problem-solving. |
| Tools | Python, R, SQL, Tableau, PyTorch, Power BI, Tensorflow. | SQL, Excel, business acumen, data visualization tools, and communication. |
| Career paths | Data scientist, AI researcher, data engineer, machine learning engineer. | Business analyst, data scientist, operation analyst, data analyst, product analyst, marketing analyst. |
Now, lets get into the meat. If I were in your shoes, the first step I'd take is to understand the differences and similarities between business analytics and data science.
## Data science vs. business analytics: What sets them apart?
The difference between data science and business analytics comes down to how you want to work with data.
When I was making this decision, I had to ask myself: Do I enjoy coding, working with algorithms, and solving mathematical problems? If so, data science was the better fit. Or do I prefer analyzing trends, making strategic decisions, and communicating insights? In that case, business analytics made more sense.
If you go the data science route, you'll take a highly technical approach that blends [computer science](https://roadmap.sh/computer-science), mathematics, and business knowledge. You'll work with business analysts to understand key challenges, then clean, explore, and mine unstructured and structured data to improve its quality.
Once the data is ready, you'll build and test predictive models using machine learning algorithms to uncover hidden patterns. These models help businesses make data-driven predictions, optimize processes, and automate decision-making.
When I looked at these responsibilities, I realized data science was all about solving complex problems, discovering trends, and forecasting what's next. If that excites you, it might be the right path.
![Data science vs business analytics: what sets them apart?](https://assets.roadmap.sh/guest/data-science-vs-business-analytics-what-sets-them-apart-ineqp.png)
Business analytics might be a better fit if you don't fancy data science. You'll sit at the intersection of business, data, and operations. You are responsible for evaluating the business's overall health, identifying gaps, and recommending solutions to improve business operations.
You'll also perform basic data cleaning and transformation using tools like [SQL](https://roadmap.sh/sql) and Excel. However, your primary focus is analyzing data to uncover insights, create reports, and present findings to stakeholders.
Beyond analysis, I realized that business analysts also take action. You'll recommend strategic next steps based on data insights and collaborate with decision-makers to execute them. This means being involved in change strategy and ensuring that insights lead to tangible business improvements.
For example, imagine you work for an energy company and notice a drop in residential electricity usage due to increased solar panel adoption. A data scientist will build predictive models to forecast energy demand, optimize distribution, and detect anomalies. A business analyst, meanwhile, will interpret these insights, develop strategies like solar buyback programs, and lead their implementation to drive impact.
## What Are Their Similarities?
Although data science and business analytics have differences, after working in both fields, I realized that they share the same goal. Both disciplines focus on transforming raw data into valuable insights that drive business decisions.
![Data science vs business analytics: what connects them?](https://assets.roadmap.sh/guest/data-science-vs-business-analytics-what-connects-them-z10j8.png)
Think of them as two sides of the same coin. Both fields involve data mining, statistical analysis, data visualization, [SQL](https://roadmap.sh/sql) usage, problem-solving, and stakeholder collaboration. They work together to help businesses make sense of their data, but their approach and execution set them apart.
The next step to take is to understand what daily tasks may look like and which one youd prefer.
## What Would Your Day-to-Day Look Like?
Your day-to-day life as a data scientist or business analyst depends on the size of your company and team, industry, and project focus. Ill break down the primary responsibilities of both fields to give you a clearer picture.
What are the key responsibilities of a data scientist?
A data scientist analyzes complex data to extract insights, build predictive models, and support data-driven decision-making.
**Primary tasks:**
- **Business understanding**: Understand the why behind what you're building. You'll often work with stakeholders to define project and business requirements that guide data usage and model development.
- **Data ingestion**: Gather raw data from systems. This data is obtained from databases, APIs, IoT sensors, Excel sheets, etc. A data scientist collects all the relevant data needed to solve the current business problem.
- **Data processing, migration, and storage**: You'll spend most of your time cleaning, transforming, and migrating structured and unstructured raw data. The goal is to convert data into suitable formats and structures for analysis and accessibility.
- **Data analysis**: Data scientists identify patterns in data behavior using visualization tools and statistical techniques such as Bayesian Inference, A/B testing, and K-means clustering.
- **Building machine learning models**: You'll define the appropriate modeling approach based on business objectives, data characteristics, and analytical requirements. Then, you'll build, train, validate, and fine-tune the model using historical data to predict future trends or automate workflows. Depending on the use case, you may also leverage pre-trained models or transfer learning for faster deployment.
- **Deploying and testing predictive models**: You'll test your model against business requirements and deploy it to production.
- **Reporting**: You also need to present model results to stakeholders using visualizations and clear, concise explanations.
Data scientists collaborate closely with data engineers to build data extraction and transformation pipelines. You'll also work with business analysts and other stakeholders to set business requirements and align the model with them.
You'd perform these responsibilities using tools like TensorFlow, Pandas, Jupyter Notebooks, Scikit-learn, Apache Spark, Hadoop, [Docker](https://roadmap.sh/docker), [GitHub/Git](https://roadmap.sh/git-github), SQL, Tableau, and cloud platforms ([AWS],(https://roadmap.sh/aws) Google Cloud, Azure)
### What Are the Key Responsibilities of a Business Analyst?
As a business analyst, you'll bridge the gap between business needs and technical solutions by analyzing data and processes and using these insights to drive strategic decisions. Your primary tasks involve:
- **Data manipulation and analysis**: While business analysts don't need to be expert programmers, you need SQL and Excel for querying databases and lightly analyzing unstructured and structured data. Some business analysts also pick up Python for deeper analysis.
- **Business acumen**: You'd need to know how to perform holistic business analysis. This involves asking the right questions: How can I solve business problems with data? What processes benefit from data-driven insights? Do I have the right data? How can I start collecting this data? Understanding how different departments (marketing, sales, finance) operate is necessary to align data insights with business goals.
- **Data visualization and reporting**: You'll create interactive dashboards and reports using visualization tools like Tableau, Power BI, and Google Data Studio.
- **Communication and stakeholder management**: You'll be involved in clearly communicating complex data insights and providing simple and actionable business recommendations. You'll often present findings to executives who may have little or no technical skills.
As a business analyst, you'll perform these responsibilities using Tableau, Power BI, Salesforce, Excel, Google Analytics, [SQL](https://roadmap.sh/sql), Microsoft Power BI, Google Sheets, and Looker.
![Tools for data science and business analytics](https://assets.roadmap.sh/guest/tools-for-data-science-and-business-anaytics-s7iwy.png)
## Career Prospects: What Paths Are Available to You?
When choosing a path, I found it helpful to learn about the diverse and promising career options in each field.
![Career paths for data science and business analytics](https://assets.roadmap.sh/guest/career-paths-for-data-science-and-business-analytics-n0auj.png)
### Data Science Career Paths
If data science is your focus, you have several options, but I'll focus on the three leading fields: data science, machine learning engineering, and artificial intelligence.
#### Data Scientist
This role involves developing machine learning algorithms, analyzing large datasets, and extracting actionable insights to support business decision-making. You'll work with structured and unstructured data, applying statistical methods and algorithms to uncover patterns, predict trends, and solve complex problems.
According to [Indeed](https://www.indeed.com/career/data-scientist/salaries), the average annual salary for a data scientist in the U.S. is $125,639, with a range between $79,587 and $198,339.
![Data scientist salary in United States](https://assets.roadmap.sh/guest/data-scientist-salary-in-united-states-1ks00.png)
#### Machine Learning Engineer
Machine learning engineers design, optimize, and deploy machine learning algorithms in production environments. Unlike data scientists, you'll specialize in software engineering, ensuring models are scalable, efficient, and seamlessly integrated into real-world applications.
According to [Indeed](https://www.indeed.com/career/machine-learning-engineer/salaries?), Machine Learning Engineers earn an average salary of $163,390 per year in the U.S.
![Machine learning engineer salary in United States](https://assets.roadmap.sh/guest/machine-learning-engineer-salary-in-united-state-8s0tv.png)
#### AI Specialist
AI specialists develop AI-driven solutions, lead artificial intelligence research, and manage business initiatives.
According to [Glassdoor](https://www.glassdoor.co.uk/Salaries/ai-specialist-salary-SRCH_KO0%2C13.htm?countryRedirect=true), the average salary for an AI Specialist in the U.S. is $134,500 per year.
![AI specialist salary](https://assets.roadmap.sh/guest/ai-specialist-salary-7y3wh.png)
A computer science or mathematics or data science/AI master's degree or PhD is often desired for data science career paths.
### Business Analytics Career Paths
If you choose business analytics instead, several career paths are available, but I'll discuss three leading ones: business analyst, business intelligence analyst, and operations analyst.
#### Business Analysts
In this role, you'll get to interpret data, identify business trends, and recommend strategies to optimize performance. You'll also work closely with stakeholders to assess business challenges and use data to drive process improvements and cost-saving measures.
According to [Indeed](https://www.indeed.com/career/business-analyst/salaries?), the average salary for a business analyst in the U.S. is $85,000 per year, with potential earnings exceeding $100,000 for senior-level professionals.
![Business analyst salary in United States](https://assets.roadmap.sh/guest/business-analyst-salary-in-united-state-qxei8.png)
#### Business Intelligence Analysts
This role focuses on data visualization, reporting, and trend analysis. Working in this role involves developing dashboards, creating reports, and helping organizations monitor performance metrics in real-time.
According to [Indeed](https://www.indeed.com/career/business-intelligence-analyst/salaries?), Business intelligence analysts in the U.S. earn an average salary of $97,872 per year, with top earners making over $130,000.
![Business intelligence analyst salary in United States](https://assets.roadmap.sh/guest/business-inntelligence-analyst-salary-in-united-states-nwx5v.png)
#### Operations Analysts
Operations analysts focus on optimizing business workflows, improving efficiency, and reducing operational costs through data-driven analysis. This role is common in industries like logistics, finance, and retail, ensuring processes run smoothly and profitably.
According to [Indeed](https://www.indeed.com/career/operations-analyst/salaries?), the average salary for an operations analyst in the U.S. is $74,648 per year, with potential earnings exceeding $100,000 in industries like finance and technology.
![Operations analyst salary in United States](https://assets.roadmap.sh/guest/operations-analyst-salary-in-united-states-neddf.png)
Business analytics admission requirements for those interested in this field often include a bachelor's degree in business, economics, mathematics, or a related field, along with proficiency in statistics, data interpretation, and business intelligence tools.
## Why Choose One Over the Other?
I chose data science because I have loved mathematics since my early school years, and anything AI gives me life.
As I mentioned earlier, if you enjoy coding, solving technical and mathematical problems, and developing data-driven solutions, data science might be the right path for you—especially if AI, machine learning, and big data interest you. This field focuses on building models, algorithms, and predictive systems to extract meaningful insights from data.
On the other hand, if you prefer interpreting data, identifying trends, and using insights to drive strategic business decisions, business analytics is a better fit. This path is ideal for those who enjoy working closely with stakeholders to solve real-world business problems through data-driven strategies.
If you're still unsure, experimenting with small projects in both fields can help you determine which excites you more. Sometimes, hands-on experience is the best way to find the right path. Also, some business analytics programs focus on ML, allowing you to explore both fields simultaneously.
## Next Steps?
Once you've chosen between data science and business analytics, the best thing you can do is stop second-guessing and start learning. Follow our [Data Scientist Roadmap](https://roadmap.sh/ai-data-scientist) as your step-by-step guide from beginner to expert, tracking your progress along the way.
You can also start with [Python](https://roadmap.sh/python), explore data analysis, and learn machine learning basics. But, if your preference is business analytics, master Excel, learn visualization tools like Tableau or Looker, and practice creating dashboards.
The roadmap also helps you schedule learning time and block study time on your calendar to stay consistent. For a detailed overview of any specific role, join the [Discord community](https://roadmap.sh/discord) and stay informed!

View File

@@ -1,166 +0,0 @@
---
title: 'Data Science vs. Computer Science: Which Path to Choose'
description: 'Data science or computer science? Learn the tools, roles, and paths in each field to decide which fits your strengths and career goals.'
authorId: ekene
excludedBySlug: '/ai-data-scientist/vs-computer-science'
seo:
title: 'Data Science vs. Computer Science: Which Path to Choose'
description: 'Data science or computer science? Learn the tools, roles, and paths in each field to decide which fits your strengths and career goals.'
ogImageUrl: 'https://assets.roadmap.sh/guest/data-science-vs-computer-science-rudoc.jpg'
isNew: false
type: 'textual'
date: 2025-02-06
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
![Data science vs computer science comparison?](https://assets.roadmap.sh/guest/data-science-vs-computer-science-rudoc.jpg)
If you love uncovering patterns in data and using those insights to solve real-world problems, [data science](https://roadmap.sh/ai-data-scientist) might be the right fit for you. On the other hand, if you're drawn to creating systems, writing code, and building the tools that power today's technology, [computer science](https://roadmap.sh/computer-science) could be your path.
From my experience working on projects in both fields, I've seen how they overlap and where they differ. As a data scientist, you'll focus on analyzing complex data using math, programming, and problem-solving skills. Your work might include building models to extract meaningful insights from data, enabling you to identify patterns, predict trends, detect fraud, or improve recommendations.
Computer science, in contrast, focuses on understanding how computing systems work. You'll write code, design algorithms, and develop programs to solve problems. You might create web applications and software tools or even dive into artificial intelligence and cybersecurity.
Although these fields overlap in areas like programming, they cater to different interests and career goals. In this guide, I'll walk you through what each field involves, the skills you need, and the opportunities they offer. By the end, you'll have the clarity to make an informed choice about your future based on which path suits you best.
## Data science vs. computer science: What are the key differences?
First, let's look at this table that summarizes the differences. Then, we'll discuss each one in more detail.
| Characteristics | Data science | Computer science |
| ----------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
| Primary focus | Extracting insights from data | Building computer systems to perform tasks |
| Industries | Finance, healthcare, marketing, e-commerce | cybersecurity, gaming, education |
| Career paths | Data analysts, data scientists, machine learning engineers, data engineers | Software engineers, computer scientists, cybersecurity analyst |
| Key areas and specializations | Machine learning, data mining, data visualization, statistical analysis | Data structures, software development, artificial intelligence |
| Tools and technologies | Python (Pandas, NumPy), R, SQL, TensorFlow | Python, Java, C++, JavaScript, Git, Vs code, databases (MySQL and MongoDB) |
| Educational background | Mathematics, economics, computer science, data science, physics | computer science, mathematics, electrical engineering |
**Your primary focus**
The big difference between data science and computer science is their primary focus. If you choose data science, your role will involve extracting insights and helpful information from datasets. You'll use different tools and techniques to interpret and analyze data. The aim is to help businesses make data-driven decisions. Netflix, for example, uses machine learning and data science to learn your viewing history. Data scientists then analyze data to predict what shows you'll like and suggest movies.
In contrast, if you choose computer science, you'll focus on building computer systems to perform tasks. You'll create tools that make computers, web apps, data analysis, etc, work better. For example, a company like Google uses computer science to create algorithms that make search engines work. Computer scientists then create software systems and algorithms that will give you accurate results when you search online.
**Your career path**
Computer science and data science have very different career paths. As a data science professional, you'll use data to help make decisions and solve business problems. You'll work in various industries, like finance and healthcare, and take on roles such as:
- **Data analyst**: Collect and analyze data to help businesses make intelligent decisions. For example, as a data analyst in healthcare, you would use data analysis to know which treatments work best for a specific illness.
- **Data scientists**: Build predictive models to predict outcomes. As a data scientist in finance, you'll use data analysis to forecast how the stock market might go.
- **Data engineers**: Build and maintain data systems that enable data analysis.
- **Machine learning engineer**: Design and build machine learning models to solve everyday problems. As a machine learning engineer at a robotic car company, you'll create models to spot people, roads, traffic lights, and other cars. You'll be responsible for designing machine learning algorithms to help the car make fast decisions.
![Data science vs. computer science: Career paths](https://assets.roadmap.sh/guest/career-paths-and-industries-for-data-science-and-computer-science-0tzlq.png)
In contrast, as a computer science professional, you'll build the tools data engineers use to get work done. You'll also work in different industries, such as cybersecurity and gaming, and take on roles like:
- **Software engineers**: Build and maintain software systems, including gaming platforms like Steam.
- **Computer scientists:** Study computer systems' theoretical and practical aspects to create applications.
- **Cybersecurity analyst**: Monitor and address possible security threats like data breaches.
**Your key areas** **of** **specialization**
Data science focuses on machine learning, data mining, statistical analysis, and more**.** As a data scientist, you'll use these specializations to understand trends and make better decisions.
In contrast, computer science focuses on artificial intelligence, [data structures](https://roadmap.sh/datastructures-and-algorithms), and software development. As a computer scientist, you'll study these fields to create the tools that data scientists use.
**The** **tools and technologies** **you'll** **use**
Choosing data science requires using different tools and technologies to manipulate data. These tools include machine learning libraries **(TensorFlow)** and languages like [**Python**](https://roadmap.sh/python) **and R**. Python libraries like Pandas will help you with data manipulation and NumPy for math calculations. As a data scientist, you'll also use big data technologies like Hadoop to work with huge amounts of data.
On the other hand, computer science focuses on software development. As a computer scientist, you'll use programming languages like [Python](https://roadmap.sh/python), [C++](https://roadmap.sh/cpp), and [JavaScript](https://roadmap.sh/javascript) to create different web applications. You'll also use tools like [React](https://roadmap.sh/react), [Git](https://roadmap.sh/git-github), databases **(MySQL and** [**MongoDB**](https://roadmap.sh/mongodb)**)**, and IDEs **(VS code)** to write and test codes.
## What education do you need for computer and data science careers?
Getting a computer science degree gives you a solid foundation for software development. It will help you understand computer science principles and how to code and solve issues. Examples of these principles include programming languages, data structures, and operating systems. As a computer science graduate, you'll have a strong foundation that will help you land various tech jobs.
![Data science vs. computer science: Educational background](https://assets.roadmap.sh/guest/what-education-do-you-need-for-a-computer-and-data-science-career-xbujx.png)
Many universities offer specializations in data science within their computer science programs. Others treat data science as a separate program, recognizing it as a field in its own right. They teach you all about machine learning, data visualization, statistics, and more. These data science programs combine ideas from computer science, mathematics, and other fields. At the end of the program, you'll get a data science degree and the necessary skills to get a tech job.
Studying at a university is not the only way to get a data and computer science education. Many computer science students and aspiring data scientists attend boot camps and learn via certifications or online tutorials. For instance, you can find many [data science courses](https://roadmap.sh/ai-data-scientist) on [roadmap.sh](http://roadmap.sh) and learn at your own pace.
Learning this way is more flexible and can work with all kinds of schedules and ways of learning. For instance, you can juggle work and study at the same time, which is much harder to do when you study at a university. If you go for a traditional degree like a data science degree, you'll need to invest more time, but you'll get a broad education.
With these educational paths in mind, a common question arises: **D\*\***o you need a computer science degree to pursue a career in data science?\*\* The answer is a simple no.
A computer science degree is not always required for computer and data science positions. It can help you start your career in data science, for example, by giving you a solid programming foundation. However, you can study other fields like mathematics, physics, and economics and still be a successful data scientist. You can also go through boot camps and online tutorials on data analysis, machine learning, and data visualization to gain the necessary skills.
Also, having some practical skills and constant practicing will give you more experience. When practicing, work on personal and open-source projects and build your portfolio to increase your chances of getting a job. Create time to attend meetups and [join online communities](https://discord.com/invite/cJpEt5Qbwa) to chat with other professionals.
## What are the essential skills you'll need?
Computer science and data science have a broad range of specialized skill sets. Some of these skills are relevant in both fields, and others are unique.
![Computer science and data science skills](https://assets.roadmap.sh/guest/essential-skills-for-computer-science-and-data-science-k8p58.png)
Even though computer science and data science are not the same, they do have some skills in common. These shared skills make it easy to switch between the two fields. Yes, it's true; you can transition from computer to data science and vice versa. The following are some examples of these shared skills:
- **Programming skills**: Programming skills are a crucial common ground for both fields. Knowing how to code to solve problems as a computer or data scientist is important. The process involves learning programming languages like [Python](https://roadmap.sh/python), having a deep understanding of data structures, and more. It lets you do software development **(computer science)** or data manipulation **(data science)**. However, it is worth noting that some tasks, like data visualization, do not require coding.
- **Solving problems:** As a computer or data scientist, it is important to be able to solve problems. This helps you to create software, fix errors, and understand data.
- **Mathematics and statistics**: Knowledge of mathematics and statistics will help you to solve problems in both fields. Computer science uses math principles in areas like algorithms and data structures. They will help you as a computer scientist make fast and better software and solve coding issues. As a data scientist, you use statistics to analyze data and machine learning.
### What skills do you need for computer science?
- **Programming languages:** Computer scientists use programming languages to give instructions to computers**.** Knowing one or more of these programming languages **(JavaScript, Java, etc.)** will help you to be successful in this field.
- **System architecture:** Knowledge of system architecture will help you build reliable computer systems**.**
- **Software development methodologies:** Software methodologies help you to plan and manage software projects. These methodologies **(agile, scrum, etc.)** will help you collaborate better with others when creating software.
### What skills do you need for data science?
- **Machine learning techniques**: Machine learning techniques are important skills in data science. A deep understanding of machine learning techniques will help you build prediction models. Among the many examples of these techniques are clustering and decision trees. They allow computers to make predictions and recognize patterns without instructions from anyone.
- **Data analytics:** To get into the data science field, you must know data analytics. It is the starting point for many data science tasks, e.g., building machine learning models. Data analytics allows you to understand data, find patterns, and draw conclusions.
- **Data visualization techniques**: These help present data results in clear visual stories. As a data scientist, they allow you to show patterns that might be hard to see in raw numbers in pictures or graphs. You do this using tools like Tableau, Matplotlib, or Power BI. Some examples of these techniques include bar charts, histograms, and scatter plots.
## How to choose between data science and computer science
Let's get into the details to help you decide which field fits you best. Choosing between both fields involves understanding your strengths, interests, and the job market.
![How to choose between computer and data science](https://assets.roadmap.sh/guest/how-to-choose-between-data-science-and-computer-science-zo7p5.png)
**Your strengths and educational background**
The path you choose boils down to what you're into, what you're good at, and your educational background. Computer science might be a good fit if you're into how computers work and creating software systems. An academic background in computer science or engineering also makes you a good fit.
If you like finding hidden patterns in data and solving problems, then data science could be for you. You'll also be a good fit if you've studied mathematics, economics, or computer science.
**Earning potential and industry demand**
Many people ask: **Which pays more, data science or computer science?** Well, both fields pay high salaries and are in high demand in the industry.
Data scientists are in high demand across various sectors, like healthcare and finance. [According to Indeed](https://www.indeed.com/career/data-scientist/salaries?from=top_sb), the average salary for a data scientist in the United States (USA) across all industries is **$123,141.**
![Average salary for a data scientist](https://assets.roadmap.sh/guest/average-salary-for-a-data-scientist-vnv54.png)
Computer science professionals like software engineers and software developers are also in demand. [According to Indeed](https://www.indeed.com/career/computer-scientist/salaries?from=top_sb), computer scientists in the USA make around $121,452 a year on average.
![Average salary for a computer scientist](https://assets.roadmap.sh/guest/average-salary-for-a-computer-scientist-88wog.png)
How much money you earn can depend on where you live, your field, and your skills. roadmap.sh provides [computer](https://roadmap.sh/computer-science) and [data science](https://roadmap.sh/ai-data-scientist) resources to help you improve in both fields.
## FAQ: Data science or computer science?
The following are answers to common questions to help you start your career as a computer and data scientist.
![Frequently asked questions about computer and data science](https://assets.roadmap.sh/guest/faq-data-science-or-computer-science-he3pu.png)
**Is data science harder than computer science?**
Data science and computer science are challenging fields in their different ways. So, it is difficult to say one field is harder than another. The difficulty level varies based on personal viewpoints, interests, and capabilities.
**Is data science still in demand in 2025?**
Yes, data science is still in demand in 2025. [The US Bureau of Labor Statistics](https://www.bls.gov/ooh/math/data-scientists.htm#:~:text=in%20May%202023.-,Job%20Outlook,on%20average%2C%20over%20the%20decade.) predicts a 36% increase in data science jobs from 2023 to 2033.
**How long does it take to complete most computer science programs?**
Computer science programs like a bachelor's degree often take four years to complete. Master's programs take one to three years, depending on your pace or the school. Bootcamps and online certifications, however, may take less time.
**Is data science more focused on mathematics or computer science?**
Both fields are important parts of data science—you can't have one without the other! It uses statistics and mathematical concepts to analyze data and computer science for handling data and building models. The balance may vary depending on the specific role, project, or focus within data science.
## What Next?
Deciding between data science and computer science does not need to be a difficult task. Figure out what works best for you by thinking about what you like, what you're good at, and what you want to achieve.
Also, you don't have to limit yourself to just one field. Many people use data and computer science skills to solve problems daily. So, it is very normal to be good in both fields.
However, if you're a beginner, focus on improving at one before learning another. [roadmap.sh](http://roadmap.sh) provides roadmap guides for you to learn [computer](https://roadmap.sh/computer-science) and [data science](https://roadmap.sh/ai-data-scientist). Both roadmaps contain resources and everything you need to get started.

View File

@@ -1,181 +0,0 @@
---
title: "Data Science vs. Cyber Security: Which Is Best for You?"
description: "Cyber security fights threats. Data science uncovers insights. If you're deciding between them, here's a practical guide based on skills, job roles, and career growth."
authorId: ekene
excludedBySlug: '/ai-data-scientist/vs-cyber-security'
seo:
title: "Data Science vs. Cyber Security: Which Is Best for You?"
description: "Cyber security fights threats. Data science uncovers insights. If you're deciding between them, here's a practical guide based on skills, job roles, and career growth."
ogImageUrl: 'https://assets.roadmap.sh/guest/data-science-vs-cybersecurity-xjcfh.jpg'
isNew: true
type: 'textual'
date: 2025-04-14
sitemap:
priority: 0.7
changefreq: 'weekly'
tags:
- 'guide'
- 'textual-guide'
- 'guide-sitemap'
---
![Data Science and Cyber Security compared](https://assets.roadmap.sh/guest/data-science-vs-cybersecurity-xjcfh.jpg)
Data science and cyber security are two of the most in-demand career options in IT. Both career paths deal with analyzing complex data and come with various challenges. For beginners, a structured learning path in [data science](https://roadmap.sh/ai-data-scientist) or [cybersecurity](https://roadmap.sh/cyber-security) can be a great starting point. However, if you already have good knowledge of both fields but find it difficult to choose the right one for your career, this guide will definitely help.
If you want to analyze large volumes of data and uncover deep insights, data science is a great fit for you. On the other hand, if you are passionate about protecting digital assets, preventing cyber threats, and ensuring information security, cyber security might be the better path for you.
Data science vs. cyber security is a common debate among tech professionals when choosing a career path, as both fields offer high salaries, strong career growth, and essential roles in modern businesses. This results in confusion among career switchers and younger graduates struggling with the choice of cyber security or data science. So, let's compare the two based on these factors to make it easier for you to choose a career path.
In this guide, you'll learn the job responsibilities of cyber security and data science, the required skills, and career prospects.
## Differences between data science and cyber security
The following table provides a quick comparison between cyber security and data science.
| | **Data Science** | **Cyber Security** |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Key role** | Data Scientists use computer science and statistical analysis and organizational data to analyze and solve complex business problems. | Cyber security professionals use security tools, networking fundamentals, and incorporate risk management strategies to prevent security breaches and threats. |
| **Industries** | Healthcare, technology, finance. | Software and SaaS companies, healthcare, government, etc. |
| **Tools** | TensorFlow, Pandas, Jupyter Notebooks. | Firewalls, SIEM systems, intrusion detection tools, and encryption software. |
| **Skills** | Expertise in programming, machine learning skills, statistics, data visualization, big data, natural language processing, data manipulation and data wrangling. | Knowledge of security protocols, networking fundamentals, risk management skills, incident response, penetration testing and ethical hacking. |
| **Career paths** | Data scientists, machine learning engineer, AI analysts, data engineer, data analyst. | Security analyst, cyber security engineer, information security manager, network engineer, security auditor. |
| **Salary range** | For the data science field, the salary ranges from $53,925 to $161,715 per year. | For cyber security professionals, the salary ranges from $91,123 to $136,104 per year. |
## What are data science and cyber security?
Data science is a multidisciplinary field focused on extracting knowledge and insights from data to solve business problems. It involves statistical methods, programming, machine learning, data analytics. and domain expertise to build models and analyze structured and unstructured data while ensuring data integrity. This field is widely applied across industries such as healthcare, tech, and finance.
Cyber security, on the other hand, focuses on protecting data and systems from cyber threats and unauthorized access. As a cybersecurity professional, you will use firewalls, intrusion detection systems, and encryption to secure systems and data while maintaining data integrity. Cyber security is crucial in software companies, SaaS platforms, healthcare, and government sectors.
Despite their differences, both data science and cyber security rely on data. For example, if you work as a data scientist in an eCommerce company, you may analyze consumer related data to recommend products and drive sales. If you are a cyber security expert in the same company, your job will be to detect and prevent fraud by analyzing transaction patterns for suspicious activity. While data science focuses on using secure data to generate insights, cybersecurity relies on large datasets to identify threats and vulnerabilities.
As data grows in volume and importance, the demand for data scientists and cyber security professionals will continue to rise. If you're considering a career in either field, you'll find plenty of opportunities.
Now, let's look at the skills you need to get started in each field.
## Data science vs. cyber security: Skills and tools required for each field
The data science role generally involves building predictive models based on the analyzed datasets, data cleaning, and visualizations. Cyber security, on the other hand, involves tasks like monitoring systems and performing risk assessments to protect digital assets.
![Data science vs. cyber security: Skills](https://assets.roadmap.sh/guest/data-science-vs-cybersecurity-skills-e6x9b.png)
Let's go into detail and explain the different skill sets and tools that aspiring data scientists and cyber security experts must have.
### Skills and tools for data science
The process of extracting data, which encompasses both structured and unstructured information, requires fundamental skills and tools that can handle the initial analysis and management challenges effectively. If you're preparing for a data science job, you must have the technical skills to perform analyses and the interpersonal skills to communicate your findings effectively to stakeholders and team members.
Some of the key skills an interviewer looks for in a data scientist profile include:
- **Expertise in programming languages:** A certified data scientist must be good at different programming languages, including [Python](https://roadmap.sh/python), R, SAS, and [SQL](https://roadmap.sh/sql). You must know the basics of these languages to sort, analyze, and manage large datasets easily.
- **Machine learning skills:** You should be able to sort and synthesize data while making better predictions based on your collected data. Additionally, you should be able to implement appropriate algorithms to solve complex problems.
- **Statistics:** The data scientist's role involves to build models based on analysis and draw actionable insights. You must know how to use statistical analysis concepts like probability distribution and linear regression to write high-quality models and algorithms for your project.
- **Data visualization:** Apart from analyzing data, you must also learn skills on how to represent your work to stakeholders. So, to create charts and graphs, you must know how to use data visualization tools like Tableau and Power BI.
- **Data wrangling:** Expertise in techniques like cleaning and organizing complex data and pattern recognition to ease the analysis process.
If you're applying for a data science role, you should have expertise in tools such as TensorFlow, Pandas, Jupyter Notebooks, and Tableau.
### Skills and tools for cybersecurity
As a cyber security expert, you must have the technical expertise and skills to identify and respond to threats in real time.
You must excel in the following cyber security skills and tools to qualify for different career opportunities within the cyber security field:
- **Networking:** You must deeply understand network protocols, operating systems, security concepts, and architectures to assess vulnerabilities before attackers exploit systems.
- **Risk management:** Expertise in managing and mitigating cyber security risks is essential. These skills allow you to better assess the likelihood and impact of incoming known threats.
- **Ethical hacking:** As an ethical hacker, you'll use the same tools and techniques as malicious hackers but with permission from the system owner. By knowing how they act and their strategies, you can improve your network security and overall security posture.
- **Knowledge of security protocols:** A strong understanding of the various security protocols, like encryption protocols, network security protocols, authentication protocols, etc., is a must.
In addition, you must know how to use firewalls, security information and event management (SIEM) systems, intrusion detection tools, and encryption software to qualify for different career options in cybersecurity. Managing data security is not a simple task; it requires a sharp mind and analytical thinking to beat cyber threats and respond to security breaches.
Let's move forward to learn about the salary range for each job position to make it easier for you to compare and select based on your requirements.
## Career opportunities and salary insights
As more businesses use data to make decisions, the demand for data science professionals is high among different industries. Cyber security experts are also in constant demand with the introduction of new and advanced technologies like artificial intelligence (AI) and cloud computing.
![Data science vs cyber security: Career opportunities](https://assets.roadmap.sh/guest/data-science-vs-cybersecurity-career-opportunities-adyg5.png)
Let's investigate the salary insights and career options available in both fields to identify your area of interest.
### Data science career paths and salary insights
Planning to proceed with the data science field? If yes, the following career options are available for consideration:
- Data scientist
- Machine learning engineer
- AI specialist
**Data scientist:** In this role, you'll find patterns in complex datasets, create algorithms and data models, deploy data tools, perform data analysis, and predict solutions to stakeholders based on the analysis. You can incorporate machine learning and deep learning practices to improve data quality and predict outcomes. As a data scientist, you must have a good command of your communication skills apart from technical skills and statistical modeling expertise.
The average salary of an employee pursuing a career as a senior data scientist in the United States is $123,069 per year.
**Machine learning engineer:** If you apply for this position, your task will be to research and build machine learning algorithms and artificial intelligence systems. Machine learning professionals are also responsible for optimizing frameworks and performing statistical analysis.
The average salary for this job role in the United States ranges around $161,715 annually.
**AI specialist:** Your role as an AI specialist is to develop and optimize AI systems. Hence, ensure you know the basics of AI concepts and programming. In addition, you might be responsible for AI system integration, designing AI strategies, and reinforcement learning.
According to ZipRecruiter, the average salary for an AI Specialist in the United States is $53,925 a year.
Data engineer, data analyst, and data architect are a few more job roles within data science that you can apply for.
### Cyber security career paths and salary insights
If you have an interest in cybersecurity, you can choose from the following career path options:
- Security analyst
- Cyber security engineer
- Information security manager
**Security analyst:** As a Cyber security analyst, your main role is to identify and troubleshoot problems within security systems and protect sensitive data. Security analyst professionals monitor systems and perform compliance control testing to minimize security risks. Based on their analysis, you can also recommend reducing risk and securing systems.
According to Indeed, the average salary of a cyber security analyst in the United States is $91,123 per year.
**Cyber security engineers:** Cyber security engineers are the front warriors who design and configure solutions against cyber criminals. You will have to act as an ethical hacker to strategize and identify vulnerabilities before attackers exploit them.
ZipRecruiter states that the average salary of an employee pursuing a career in this position in the United States is $122,890 per year.
**Information security manager:** In this role, your main focus will be on developing and implementing security policies. You will also handle incident response plans, threat monitoring, and the implementation of security best practices for protecting computer systems.
According to ZipRecruiter, the average salary of a Certified Information Security Manager in the United States is $136,104 per year.
Let's dive in and take a closer look at the work environment in both fields to help you decide which one is best for you.
## Work environment differences
The work environments in data science and cyber security differ significantly, appealing to distinct personalities and work styles.
Data science typically offers a more collaborative and research-oriented atmosphere. Imagine teams of data analysts, data science professionals, and researchers brainstorming, analyzing historical data, sharing insights, and working together to find solutions for complex datasets.
Flexibility is often a key feature, both in terms of working hours and location. While deadlines exist in data science, the project-based nature often allows for a more measured pace, with timelines that can stretch over weeks or months. This allows for deep dives into data, thorough data analysis, and the development of sophisticated models.
You will be more attracted to the data science field if you enjoy intellectual exploration and the satisfaction of uncovering hidden patterns. Data science is great if you like intellectual exploration, problem solving and finding hidden patterns. It's creative and encourages deep analysis of complex problems, so if you like structured but exploratory work, it's a good fit.
Cyber security, on the other hand, is a high-stakes, fast-paced world. The focus is on real-time threat prevention, monitoring security infrastructure, and rapid response to security incidents.
Security professionals need to be on high alert, anticipating and countering attacks on systems. It's intense work, with split second decisions and big consequences.
The nature of cyber security often demands irregular hours, especially during security crises. A major breach can require teams to work around the clock to contain the damage and restore systems. While this can be incredibly demanding, it can also be immensely rewarding for those who thrive in high-pressure situations and enjoy the thrill of the chase.
Whether you are planning for cyber security or data science, consider all aspects, including the work environment.
## Cyber security and data science: Which path is best for you?
It's best to keep your interests, skills, and personality in mind when selecting between cyber security and data science.
![Data science vs. cybersecurity: Which is better?](https://assets.roadmap.sh/guest/data-science-vs-cybersecurity-9bhbk.png)
If you find yourself drawn to the world of data, enjoy the challenge of extracting meaning from raw data, and prefer coding and statistical analysis over other practices, data science might be the right path for you. Do you get excited about building predictive models, uncovering trends, and using data to solve real-world problems? If so, you'll likely find the intellectual challenges of data science stimulating.
On the other hand, if your passion lies in protecting systems, staying one step ahead of hackers, and responding to high-stakes challenges, cybersecurity could be a more fulfilling career choice. If you love understanding cybercriminals' psychology and preventing them from achieving their goals, this one could be your career goal.
If you still have questions about cyber security and data science, try taking online courses or doing small projects in each field to find your real interest. You can also work with datasets, experiment with different algorithms, connect with a data engineer, or explore basic cyber security concepts. This hands-on experience will give you valuable insights into your preferences.
## What's Next?
Cyber security or data science, whichever path you choose, make sure it fulfills your needs and interests. If working on numbers and models is your thing, data science is the right path for you. However, cyber security could be a better option if you are more inclined toward protecting systems and taking on challenges.
Choosing between cyber security and data science can be a difficult decision, but this guide has provided key insights to help you evaluate your interests. To further explore your options, check out [cyber security](https://roadmap.sh/cyber-security) and [data science](https://roadmap.sh/ai-data-scientist) roadmaps to gain deeper insights into each field. You can also join online courses and get relevant certifications or connect with our experts on the [Discord community](https://roadmap.sh/discord) to stay up-to-date!

Some files were not shown because too many files have changed in this diff Show More