IDE and Development Environment¶
The environment you code in is not neutral. A bad setup creates friction between thinking and typing. The right setup disappears. The goal is 60 seconds from “I want to solve a problem” to cursor blinking on a blank solution file. This document gives you the setup that the competitive programming community actually uses in 2025–2026 — not the ideal setup, the actual one.
Language Choice: C++ vs Java vs Python for This Learner¶
This is the most consequential setup decision and the one most people under-research. The community debate is real and worth resolving before you write a single line.
The 2026 Community Consensus¶
For Codeforces / Competitive Programming:
C++ is the dominant language. ~70–75% of Codeforces participants use C++. The reasons are mechanical, not aesthetic: C++ has faster I/O, STL gives you sets, maps, priority queues, sorting, lower_bound in standard library, and the language’s speed means you rarely TLE on correct algorithms.
Java works but has real disadvantages: Java is verbose (2–3x more lines than C++ for equivalent CP code), slower I/O unless you use BufferedReader (which is boilerplate), and can TLE on problems with tight time limits. Several Codemaster-rated users have used Java, so it’s possible — just harder.
Python is not viable for Codeforces. Python is 10–50x slower than C++ for CPU-bound problems. Even with PyPy, you’ll TLE on problems that your algorithm is correct for. Python is fine for LeetCode (where extra time is given for Python) but is not recommended for CF.
For LeetCode / Interview Prep:
Any language works. Python and Java are both common. Python is faster to write, Java is more explicit about types and data structures. Your Java background is an asset here.
Recommendation for this learner: Given your background (Java, C, C++):
Use C++ for Codeforces / CSES / competitive programming. You already know C, so C++ is not a new language — it’s C with better standard library. The transition is: learn
#include <bits/stdc++.h>, learn STL containers, learncin/coutwithios_base::sync_with_stdio(false); cin.tie(NULL). That’s the core of it.Use Java for LeetCode if you prefer. Your Java fluency means you’ll solve problems faster than learning Python. But if you want one language for both LeetCode and CF, use C++.
Do not use Python for this plan. Python’s value is in ML (relevant to your day job at Zoho), not in DSA/CP performance.
VS Code Setup (Recommended)¶
VS Code is used by 74% of developers (Stack Overflow 2025) and has the best extension ecosystem for CP. It is the correct choice unless you have a strong preference for another editor.
Required Extensions¶
1. C/C++ by Microsoft
Extension ID:
ms-vscode.cpptoolsWhat it does: IntelliSense, debugging, code navigation for C/C++
Install: Ctrl+P →
ext install ms-vscode.cpptools
2. Competitive Programming Helper (CPH) by DivyanshuAgrawal
Extension ID:
DivyanshuAgrawal.competitive-programming-helperWhat it does: Auto-fetches problem test cases from LeetCode/CF/AtCoder via the Competitive Companion browser extension. Creates solution files. Runs tests locally. Shows pass/fail per test case.
This is the most valuable CP extension. It eliminates manual copy-paste of test cases.
Install:
ext install DivyanshuAgrawal.competitive-programming-helper
3. Competitive Companion (Browser Extension)
Not a VS Code extension — this is a browser extension (Chrome/Firefox)
URL: chrome.google.com/webstore/detail/competitive-companion (search “Competitive Companion” in Chrome Web Store)
What it does: When you’re on a CF/AtCoder/LeetCode problem page, click the button → it parses the problem’s test cases and sends them to CPH in VS Code automatically.
This + CPH = you never manually copy test cases again.
4. Code Runner (optional)
Extension ID:
formulahendry.code-runnerWhat it does: Run code with a keyboard shortcut. Useful for quick testing outside the CPH workflow.
Optional but Useful Extensions¶
GitLens (
eamodio.gitlens) — better Git visualization, useful when you start committing your solution logBracket Pair Colorizer — built into VS Code since 2021, enable in settings:
editor.bracketPairColorization.enabled: true
VS Code Settings for CP¶
Add to your settings.json (Ctrl+Shift+P → “Open User Settings JSON”):
{
"editor.fontSize": 14,
"editor.tabSize": 4,
"editor.wordWrap": "off",
"editor.minimap.enabled": false,
"terminal.integrated.fontSize": 13,
"C_Cpp.autocompleteAddParentheses": true,
"code-runner.runInTerminal": true,
"code-runner.saveAllFilesBeforeRun": true
}
CP Editor (Alternative to VS Code)¶
CP Editor (cpeditor.github.io) is a lightweight editor built specifically for competitive programming. It has CPH-equivalent functionality built in, no extensions needed.
When to use CP Editor instead of VS Code:
If VS Code feels heavy on your machine
If you want a minimal single-window experience: editor + test runner + verdict in one window
If you prefer not dealing with extension configuration
Verdict: VS Code + CPH is the more future-proof setup (better IntelliSense, better debugging, more integrations). CP Editor is a solid fallback if VS Code causes friction.
Vim / Neovim¶
The CP community uses Vim/Neovim, but it is a tool with a steep entry cost. You’d spend 3–4 weeks learning the editor before it starts paying off. For a 9-month plan where the goal is DSA skill, not editor mastery, Vim is not the right choice. The community verdict (r/competitiveprogramming, 2025): “Vim is great if you already know it. Learning it while also learning CP is doing two hard things at once for no reason.”
Verdict: Skip Vim/Neovim for this plan unless you’re already proficient.
The Competitive Programming Template File¶
Every competitive programmer maintains a template file — a boilerplate they paste at the top of every solution file. This saves 2–3 minutes per problem. Build this over Phase 0–1; don’t try to have a perfect template on Day 1.
Minimum viable C++ template:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> pii;
typedef vector<pii> vpii;
#define pb push_back
#define mp make_pair
#define F first
#define S second
#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()
const int INF = 1e9;
const ll LLINF = 1e18;
const int MOD = 1e9 + 7;
void solve() {
// your solution here
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t = 1;
// cin >> t; // uncomment for multi-test
while (t--) solve();
return 0;
}
Why these lines matter:
#include <bits/stdc++.h>: Non-standard but universally available on judge machines. Includes everything.ios_base::sync_with_stdio(false); cin.tie(NULL);: Speeds up I/O by ~10x. Required on CF problems with large input.typedef long long ll: Almost every CF problem needs 64-bit integers. Make it short.const int MOD = 1e9 + 7: Used in ~30% of CF problems that require modular arithmetic.
Expand this template as you learn new patterns. Keep it in a file called template.cpp in your DSA repo root.
Local Folder Structure¶
Set up this folder structure on Day 1:
dsa-journey/
├── template.cpp ← your C++ template
├── template.java ← your Java template (for LeetCode)
├── README.md ← your problem log (or link to Notion)
├── leetcode/
│ ├── arrays/
│ ├── two_pointers/
│ ├── sliding_window/
│ ├── stacks/
│ ├── trees/
│ ├── graphs/
│ └── dp/
├── cses/
│ ├── sorting_searching/
│ ├── trees/
│ ├── graphs/
│ └── dp/
├── codeforces/
│ ├── div3/
│ ├── div2/
│ └── educational/
└── scratch/ ← throwaway experiments
Each solution file should be named: problem_number_problem_name.cpp (e.g., 0001_two_sum.java, 1_two_sum.cpp).
Compile Commands¶
Save these as VS Code tasks or shell aliases:
# C++ — compile and run
g++ -O2 -o sol sol.cpp && ./sol < input.txt
# C++ — compile with debug info
g++ -O2 -DLOCAL -Wall -Wextra -o sol sol.cpp
# Java — compile and run
javac Solution.java && java Solution < input.txt
Create input.txt in the problem folder for pasting test cases when not using CPH.
Navigation: ← 11_tools_setup/README.md | → 02_problem_tracking.md