
Programming
Self-assessment of competence,
expressed in percentage.
Programming Concepts
-
Variables and Data Types
How to store and manipulate data using numbers, strings, booleans, etc.Operators
Arithmetic, logical, comparison, assignment, and other operators to perform computations and make decisions.Control Structures
Conditional statements (if, else, switch)
Loops (for, while, do-while) to repeat tasks.Functions/Procedures
Defining reusable blocks of code, understanding parameters, return values, and scope.Basic Data Structures
Arrays, lists, tuples, dictionaries/maps for organizing collections of data.Input/Output (I/O)
Reading from and writing to the console, files, or other data streams.Error Handling and Exceptions
Using try/catch (or equivalent) blocks to handle errors gracefully.Basic Algorithms
Simple sorting (e.g., bubble sort), searching (linear, binary search) techniques.Debugging and Testing
Techniques to find and fix bugs, write simple tests to verify code behavior.Syntax and Semantics of a Programming Language
Understanding how code is structured and executed based on the language’s rules.Object-Oriented Programming (OOP)
Classes, objects, inheritance, polymorphism, encapsulation, and abstraction.Memory Management
Pointers and references, stack vs. heap, garbage collection, manual memory management.Design Patterns and Principles
Common patterns (Singleton, Factory, Observer, Strategy, etc.), SOLID principles, DRY (Don’t Repeat Yourself), KISS (Keep It Simple, Stupid). -
Advanced Data Structures
Linked lists, stacks, queues, trees, graphs, hash tables, heaps, and tries.Algorithm Design and Analysis
Complexity analysis (Big O notation), recursion, dynamic programming, greedy algorithms, divide-and-conquer strategies.Concurrency and Parallelism
Threads, processes, synchronization, locks, asynchronous programming, parallel algorithms.Functional Programming Concepts
Pure functions, immutability, higher-order functions, recursion, closures, lambda expressions, monads (in languages like Haskell).Software Architecture
Layered architecture, microservices, client-server models, MVC (Model-View-Controller), event-driven architectures.Advanced I/O and Networking
Socket programming, network protocols, asynchronous I/O, file system management, API design.Security Practices
Encryption, authentication, secure coding practices, understanding vulnerabilities (SQL injection, XSS, buffer overflows).Optimization and Performance Tuning
Profiling code, optimizing algorithms, memory profiling, caching strategies.Distributed Systems
Concepts like consistency, scalability, fault tolerance, consensus algorithms, message queues, distributed databases.Concurrency Models and Parallel Computing
MapReduce, GPU programming, multithreading libraries, reactive programming.Advanced Testing and DevOps
Unit testing frameworks, integration testing, continuous integration/delivery (CI/CD), containerization (Docker), orchestration (Kubernetes).
JavaScript / TypeScript
-
Flexible, widely used language for creating dynamic web pages and applications. It runs in browsers (client-side) and on servers (via Node.js).
-
A superset - builds on JavaScript by adding static typing and advanced features, helping catch errors early and making code more maintainable. It compiles to standard JavaScript, so it runs anywhere JavaScript does.
MERN Stack
-
MongoDB
A NoSQL database that provides a flexible and scalable way to store and retrieve data. It uses a document-based data model, which makes it ideal for storing unstructured data.Express.js
Handles routing, middleware, and HTTP request/response patterns. It’s widely used to build APIs.React
A JavaScript library to build user interfaces, React provides a component-based architecture to create reusable UI components.Node.js
A JavaScript runtime built on Chrome’s V8 JavaScript engine, Node.js provides an event-driven, non-blocking I/O model ideal for building scalable, high-performance web applications.
Other languages
-
A high-level, interpreted language with simple syntax.
Great for scripting, data analysis, machine learning, and rapid prototyping.
Strongest for its readability and large ecosystem of libraries.
-
A systems language focused on memory safety and concurrency.
Ideal for high-performance, low-level tasks without risking memory errors.
Strongest for its safety guarantees and minimal runtime overhead.escription
-
A powerful, compiled language that provides direct memory control.
Suited for performance-critical applications like game engines and real-time systems.
Strongest for combining efficiency with object-oriented and generic programming features.
CSS Frameworks
-
Component-rich: Includes a comprehensive collection of ready-to-use components (like navbars, modals, and carousels) with consistent styling out of the box.
Opinionated design: Comes with default styles and a specific look and feel that can be customized using Sass variables and overrides.
Quick to prototype: Ideal for quickly spinning up layouts and interfaces with minimal custom CSS, making it a popular choice for fast development.
Bootstrap has a gentle learning curve for basic use, allowing rapid prototyping, though mastering customization and deeper components may require extra effort.
-
Utility-first approach: Tailwind provides low-level utility classes (like mt-4, p-2, text-center) that you can combine to build completely custom designs.
Highly customizable: Tailwind is configured via a central configuration file, letting you control colors, spacing scales, fonts, and more without writing custom CSS.
Minimal default styles: It doesn’t come with many pre-built components; instead, you compose classes to create your own. This offers great flexibility but can also mean more initial setup.
Its learning curve can be initially steep as you adapt to thinking in utility classes, but quickly becomes efficient with practice and customization.
Markup languages / CSS
-
HyperText Markup Language
Defines the structure and semantics of web page content using predefined tags.Directly rendered by browsers to display text, images, links, and interactive elements.
Provides a fixed set of elements with specific meanings and behaviors, geared toward building web documents.
-
eXtensible Markup Language
Encodes data in a human-readable and machine-readable format with customizable tags.Used for data interchange, configuration files, and storing structured information, not for direct presentation.
Strict syntax, hierarchical structure, and flexibility in defining custom tags tailored to specific data needs.
-
Cascading Style Sheets
Separates presentation from content by defining styles (e.g., layout, colors, fonts) for HTML documents.Enhances the visual appearance and layout of web pages by applying stylistic rules to markup elements.
Works alongside HTML without altering their structure, enabling consistent design.
Preprocessors
-
Embedded JavaScript
A templating language that embeds JavaScript code within HTML.Uses <% %> tags to insert dynamic content and logic into HTML files, staying close to standard HTML syntax.
Ideal for server-side rendering where you need to mix HTML with JavaScript for dynamic page generation.
Straightforward learning curve for those familiar with HTML and JavaScript; retains HTML-like readability.
-
A concise templating language that compiles to HTML, reducing boilerplate and offering a cleaner syntax.
Uses indentation to denote nesting and omits closing tags, attributes within parentheses—streamlined and minimalistic compared to HTML.
Great for rapid prototyping and writing cleaner, more maintainable templates without repetitive HTML tags.
Steeper learning curve due to unique syntax rules, but results in less verbose templates.
-
Syntactically Awesome Style Sheets
A CSS preprocessor that extends CSS with features like variables, nesting, mixins, inheritance, and functions.Offers two syntaxes: SCSS (CSS-like) and indented syntax (similar to Haml), both compiling down to standard CSS.
Ideal for large-scale styling projects requiring reusable styles, modularity, and dynamic styling logic.
Requires learning additional features beyond CSS basics; simplifies complex CSS management and enhances maintainability.