From bb27e83701f49a60b1a79417719bdd8550c85734 Mon Sep 17 00:00:00 2001 From: gcroci2 Date: Fri, 22 Nov 2024 19:39:51 +0100 Subject: [PATCH] add code optimization note --- episodes/2-code-generation-optimization.md | 15 +++++++++++++++ instructors/episode2.pptx | Bin 10556520 -> 10561451 bytes 2 files changed, 15 insertions(+) diff --git a/episodes/2-code-generation-optimization.md b/episodes/2-code-generation-optimization.md index dad694e..2f26c07 100644 --- a/episodes/2-code-generation-optimization.md +++ b/episodes/2-code-generation-optimization.md @@ -28,6 +28,21 @@ Codeium accelerates software development through three key modes: Command, Chat, Please note that while using Python is not required since Codeium supports multiple programming languages, all exercises and solutions will be provided in Python. +::::::::::::::::::::::::::::::::::::: callout + +### Code Optimization + +Code optimization is the process of making your code faster (reducing runtime), more efficient (using fewer resources like memory and disk), and/or more readable (easier for developers to maintain). Some common strategies for code optimization include: + +- **Algorithmic optimization**: Improving the efficiency of algorithms to reduce the time or space complexity. *Example*: Reducing time complexity from O(n²) to O(n log n) by choosing the right sorting algorithm. +- **Code refactoring**: Eliminate redundancy, improve readability, and enhance maintainability without changing the code's functionality. *Example*: Replace nested loops with more concise operations like `map`, `filter`, or comprehensions. +- **Memory optimization**: Reducing memory usage by optimizing data structures, avoiding memory leaks, and minimizing unnecessary allocations. *Example*: Using generators instead of lists to avoid storing all elements in memory. +- **Parallelism and concurrency**: Utilize parallel processing or multithreading to split tasks. *Example*: Process chunks of data simultaneously using `multiprocessing` in Python. + +Much more can be said about code optimization, but these are some common strategies to keep in mind as you work with Codeium. + +::::::::::::::::::::::::::::::::::::::: + ## Context Awareness Context awareness is one of Codeium’s most powerful features, allowing it to offer personalized and highly relevant suggestions by pulling information from various sources. Traditionally, generating code required training large LLMs on specific codebases, which is resource-intensive and not scalable for individual users. However, Codeium uses a more efficient method known as **retrieval-augmented generation (RAG)**. This applies across the board to Autocompete, Chat, and Command. diff --git a/instructors/episode2.pptx b/instructors/episode2.pptx index 27f223708280378d4695a3c1ae7a48c22cb6f06a..662bd88e1e7ffe8832c2ae099b460bbad1bf0ef6 100644 GIT binary patch delta 21717 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