Blog Layout

Week 16 Bootcamp Learnings and Documentation - Hack Reactor

Alexander Clemens • Jun 05, 2023

Share

Welcome to Week 16 of my learning documentation in the Hack Reactor coding boot camp. I am eager to move on and begin searching for opportunities to work as a software engineer. However, two more weeks remain in the program before dedicating my work schedule to job searching and connecting with potential employers in Week 19.


Despite this, I remain level-headed and patient, no matter what experiences come my way. Of course, it’s easy to say this while sitting in the comfort of our home in Santa Rosa de Cabal, sipping my Colombian coffee (known as “tinto” or “americano” here, which means black coffee without any added ingredients) and enjoying good physical health. I remind myself that no matter what happens in my life, it could always be worse. I imagine what it would be like to not have mobility in one’s limbs (paralyzed or blind), be homeless, or live in an internment camp. Whatever challenges come my way, I have faith that I can succeed.


Okay, let’s focus on this week’s learnings:


Group Project on Gitlab:

  • Building unit tests
  • React for frontend build-out
  • Defining our models in MongoDB
  • Refining and working with FastAPI
  • CSS
  • Debugging
  • Docker
  • Gitlab and using Git in numerous collaboration situations

Most of our time was spent building the frontend React components, including the closet and bin views, navigation bar, login form, clothing form, and wardrobe form. We also created the planner page and unit tests for our endpoints and accounts.

Throughout the week, we faced various challenges, such as debugging issues with displaying data on the front end, adjusting the CSS for multiple pages, and working with the JWTdown authenticator library. However, we overcame these challenges by working collaboratively and seeking feedback from other engineers.

Overall, we learned much about building a web application from scratch, including React and FastAPI, working with MongoDB, and implementing authentication and authorization. We also learned the importance of effective communication and collaboration during group projects.


What is Continuous Integration?

Continuous Integration (CI) is a software development practice where we frequently and automatically test and build code changes. CI aims to identify and address issues early in development before they become more complex and expensive. By integrating our code changes frequently, we can ensure that our differences are compatible with the rest of the codebase and that the build remains stable.


What is Continuous Development?

Continuous Development (CD) is a practice that I use to deploy new features and updates to a live environment. The purpose of CD is to reduce the time between writing code and deploying it to production, allowing me to respond quickly to changing user needs and market conditions. By continuously delivering new features and updates, I can improve the user experience, increase customer satisfaction, and stay ahead of the competition.


What is a waterfall in Software Development?

The waterfall is a software development methodology in which each phase of the development process (requirements, design, implementation, testing, and deployment) is completed before moving on to the next. This methodology is linear, meaning each phase must be met before the next one begins. Unlike agile methods, the waterfall does not allow for changes to be made mid-process, which can lead to issues being discovered later in development when they are more complex and expensive to fix.


Big O Notation

A fundamental concept in computer science used to measure the performance of algorithms. It provides an upper bound on the time or space an algorithm requires regarding the input size. I first discovered that the choice of time series for Big O notation during Module 1 of the Hack Reactor course depends on the specific algorithm and the problem it is trying to solve. The most common time series include O(1), O(log n), O(n), O(n log n), O(n²), and O(2^n). The O(1) time series indicates that the algorithm takes constant time, regardless of the input size, making it the most efficient time series.

One advantage of using Big O notation is that it provides a standardized way to compare the efficiency of different algorithms, which can help developers choose the most appropriate algorithm for a given task. Developers can also optimize algorithms for specific jobs by selecting the most efficient time series. However, I have found that Big O notation has limitations. It does not consider other factors that can affect the performance of an algorithm, such as hardware limitations or network latency. Additionally, Big O notation only provides an upper bound on an algorithm’s time or space complexity, so it does not give a precise performance measurement.


Despite these limitations, Big O notation remains a valuable tool for analyzing and comparing the efficiency of different algorithms. It is used extensively in computer science and software engineering to design and optimize algorithms for various tasks. After all, since being in the Hack Reactor course, there have been numerous times time complexity is mentioned during coding challenges that we do almost every morning. Understanding Big O notation can help write more efficient and effective algorithms to handle more extensive and complex datasets. Thus, having a solid understanding of Big O notation and how it can be used to optimize the performance of algorithms is essential for software developers.


How Big O notation relates to algorithms

Big O notation is a way to measure the performance of algorithms in terms of input size. When it comes to sorting algorithms, I use Big O notation to compare the efficiency of different algorithms in terms of the number of comparisons or operations required to sort a list of a specific size. I know that sorting algorithms with a lower time complexity, such as O(n log n), require fewer operations and are generally more efficient than those with a higher time complexity, such as O(n²). By using Big O notation, I can choose the most appropriate sorting algorithm for a given task and optimize the performance of my code.


Recursive Algorithms

Recursive algorithms simplify my code and make it more readable and maintainable. Recursive algorithms involve breaking down a problem into smaller subproblems and solving each subproblem recursively. I use recursive algorithms in various applications, including searching, sorting, and data analysis. However, I am aware that recursive algorithms can be memory-intensive and may lead to stack overflow errors if the recursion depth is too large.


What is recursively Sort?

Recursively sorting means sorting a list by breaking it down into smaller and smaller pieces until they are sorted, then merging the sorted pieces back together.


Here is an example of how I can use recursive sorting:

  1. I start with a list of numbers.
  2. If the list has only one number, it is already sorted, so I return it.
  3. Otherwise, I choose a pivot value, any number in the list.
  4. I divide the list into two parts: the numbers smaller than the pivot value and those greater than or equal to the pivot value.
  5. I recursively sort each of the two parts.
  6. I merge the two sorted parts, putting the smaller numbers before the larger ones.
  7. I returned the sorted list.

This process continues until the list is sorted.

Here is another way to think about recursive sorting:

Imagine that I have a list of numbers and want to sort them. I can do this by picking a number from the list and putting all the numbers smaller than that number before it and all of the numbers more significant than or equal to that number after it. Then, I can repeat this process on the two halves of the list, and so on, until the list is sorted.


What is Hash Map?

Using hash maps helps to map keys to values using a hash function. They are also known as hash tables or dictionaries. The hash function takes an input (the key) and returns a unique output (the hash code) representing the key. The hash code is then used to store and retrieve the corresponding value in the hash map. This allows for high-speed access to discounts based on their corresponding keys. Hash maps are commonly used in software engineering for caching, indexing, and searching tasks.


Sorting Algorithms

I use sorting algorithms to organize and arrange data in a specific order. Sorting algorithms are crucial in optimizing the performance of programs that deal with large amounts of data. Some standard sorting algorithms that I use include bubble sort, selection sort, insertion sort, and quicksort. Each algorithm has its strengths and weaknesses, and the choice of algorithm depends on the program’s specific requirements and goals. For example, I used quicksort when dealing with large datasets, while insertion sort seems more efficient for smaller datasets.

The below link provides a visual to help with interpreting and walking through the code structure of an algorithm.

Algorithm Visualizer
Algorithm Visualizer is an interactive online platform that visualizes algorithms from code.algorithm-visualizer.org


Bubble Sort

As a sorting algorithm, it arranges data in a specific order. I repeatedly compare adjacent elements in a list and swap them if they are in the wrong order. This process is repeated until the list is sorted. While bubble sort is not the most efficient sorting algorithm, with a time complexity of O(n²), it is easy to understand and implement. Bubble sorting is used mainly to introduce and teach the concept of a sorting algorithm.


Selection Sort

Selection sort is used to arrange data in a specific order. I repeatedly find and select the smallest element in a list and swap it with the first unsorted element. I repeat this process until the list is sorted. Selection sort has a time complexity of O(n²), making it less efficient than other sorting algorithms such as quicksort or merge sort. However, it is easy to understand and implement and can be helpful in certain situations where simplicity is more important than efficiency, which is the case mainly when I review code to be simple to understand.


Insertion Sort

Using the insertion sort to arrange data in a specific order. I do this by iterating through a list of items and inserting each item into its correct position in a new list. The new list is initially empty, and each item is inserted into its proper place by comparing it to the items already in the list. Insertion sort has a time complexity of O(n²).


Merge Sort

I use it by dividing a list of elements into two halves, sorting each half recursively, and then merging the two sorted halves back together. The merge sort algorithm has an O(n log n) time complexity, making it more efficient than other sorting algorithms such as bubble sort or selection sort. I see merge sort best when dealing with large datasets, as it can efficiently handle large amounts of data.


Quick Sort

It works by dividing a list of elements into two parts based on a pivot value, where the elements on one side of the pivot are less than the pivot, and the elements on the other side are more significant than the pivot. Then, I recursively sorted the two parts using quick rort until the entire list was sorted. Quick sort has an O(n log n) time complexity, making it more efficient than other sorting algorithms such as bubble sort or selection sort.


What are nodes?

Nodes are the basic building blocks of data structures. I use them to represent individual elements in a data structure, such as a linked list, tree, or graph, and contain data and a reference to the next node. In a linked list, for example, each node has a value and a reference to the next node. In a tree or graph, each node represents a specific element and includes references to its child nodes or adjacent nodes. Nodes are a fundamental concept in data structures used extensively in the industry of software engineers.


What are link trees?

Refer to a type of tree data structure where each node has a reference to its parent and child nodes. This contrasts with other tree structures, such as binary trees, where each node has at most two child nodes. Linked trees help model hierarchical data, such as file systems or organizational structures, and they are used in various applications, including database indexing and XML processing.


What are graphs?

Are a data structure consisting of nodes (also called vertices) and edges. Nodes represent individual elements, and edges represent their connections or relationships. Graphs can be directed or undirected, meaning the edges can have a specific direction or be bidirectional. I see myself using and interacting with graphs for various applications, including network analysis, data modeling, and pathfinding algorithms.


SQL

SQL stands for (Structured Query Language) to manage and manipulate data stored in relational databases. SQL is a critical tool for tasks such as data analysis, data mining, and data warehousing. I can write queries with SQL that retrieve, insert, update, and delete data from databases. This standardized way of managing and organizing data makes SQL an essential tool for me when working with large amounts of data.


What is dynamic programming?

It enables a programmer to use logic to break down a complex problem into smaller subproblems and solve each subproblem only once. This approach can significantly improve the efficiency of my algorithms by avoiding redundant computations. Dynamic programming is beneficial for optimization problems, where I must find the best solution among many possibilities.


Link to site that helps with coding interviews

Programming Interview Questions + Help Getting Job Offers | Interview Cake
Writing programming interview questions hasn't made me rich yet ... so I might give up and start trading Apple stocks…www.interviewcake.com


LinkedIn Learning Courses that I took this week to address the following: Using AI as a paired programmer, Data Structures, Algorithms, and SQL

Paired Programming with AI

Pair programming with AI - Pair Programming with AI Video Tutorial | LinkedIn Learning, formerly…
From the course: Pair Programming with AI - Generative AI tools can now write code but what does that mean for your…www.linkedin.com

The following text was from my LinkedIn post about this course.

Greetings, fellow programmers and tech enthusiasts,

I recently completed the Pair Programming with AI course and am excited to share my experience. The course was designed to enhance my perspective on software development, and it did not disappoint. Morten Rand-Hendriksen’s practical strategies and hands-on practice taught me how to leverage AI tools like ChatGPT and GitHub Copilot to increase productivity and write better code.

One of the standout features of this course is how it is integrated with GitHub Codespaces. This feature allows you to practice from any machine at any time using a tool commonly used in the workplace. I recommend this excellent course for those looking to take their skills to the next level and stay ahead of the curve.

One of the most significant advantages of incorporating AI into the coding process is its pattern recognition capabilities. With AI’s assistance, you can supercharge your software development, write better code quickly, and fully understand the code you are writing. AI can be seen as an ambitious junior developer with vast knowledge of past coding techniques and patterns. However, it may lack experience in applying them to current projects, leading to moments of uncertainty and caution.

My biggest takeaway from this course was learning how to use the Codespaces visual code studio in the browser of Microsoft Bing. This feature lets you get responsive AI assistance directly within the Bing Chat interface without leaving your webpage. You can quickly receive helpful AI suggestions by copying portions of your code, making coding tasks more efficient and less cumbersome.

In conclusion, I recommend this course to anyone looking to improve their coding skills, stay ahead of the curve, and leverage AI tools like ChatGPT and GitHub Copilot. Incorporating AI into the development process can help you write better code, increase productivity, and fully understand the code you are writing.

In today’s rapidly evolving technological landscape, failing to keep up with new developments means risking being left behind or replaced in the workforce. It’s crucial to stay current and continue learning to remain competitive and relevant.


Programming Foundations: Algorithms

Algorithms power the world - Programming Foundations: Algorithms Video Tutorial | LinkedIn…
From the course: Programming Foundations: Algorithms - [Joe] The world that we live in is increasingly powered by…www.linkedin.com

The LinkedIn Learning course “Programming Foundations: Algorithms” provides a comprehensive introduction to algorithms and data structures for programming, helping developers to improve their programming skills and stay ahead of the curve. The course covers various topics, including popular algorithms for searching and sorting information, recursion, and shared data structures such as stacks, queues, and hash tables. The lessons are presented using Python, a popular programming language used in many industries, but the principles can be applied to any programming language.

One of the key highlights of the course is its emphasis on understanding the performance implications of different algorithms and how to evaluate the performance of a given algorithm. This skill is crucial for any software developer, as it allows them to optimize their code and improve efficiency.

The course also covers recursion, an important topic that teaches learners how to use it to solve complex problems. Recursion is a powerful technique that can simplify code and make it more efficient, making it an essential tool for any software developer.

The course is suitable for software developers of all levels, from beginners to experienced professionals, and it provides a solid foundation in algorithms and data structures for programming. By the end of the course, learners will have a strong understanding of how to implement and use algorithms in their software development projects, making their code more efficient and effective. This will help them stay ahead of the curve in today’s competitive job market.

In summary, the LinkedIn Learning course “Programming Foundations: Algorithms” is an excellent resource for software developers looking to improve their understanding of algorithms and data structures. The course covers all the essential topics clearly and concisely, making it suitable for learners of all levels.



Programming Foundations: Data Structure

Understand data structures - Python Video Tutorial | LinkedIn Learning, formerly Lynda.com
From the course: Programming Foundations: Data Structures - Are you new to programming? Are you starting to work with…www.linkedin.com


The “Programming Foundations: Data Structures” course on LinkedIn Learning is a valuable resource for improving my programming skills. Throughout the course, I gained a deeper understanding of essential data structures used in modern programming and how they can optimize the performance and efficiency of applications.

As I progressed through the course, I learned the basics of data types, including numerical data types, Booleans, characters, and strings. This information was particularly insightful as it helped me understand how these data types are represented in code and how they can be used to store and manipulate data effectively.

I also learned about the differences between primitive and reference types in memory and how data structures can be used to organize and store multiple pieces of data. The course provided practical examples of each data structure, helping me understand how to use them in popular programming languages such as C#, Swift, JavaScript, Java, and Python. However, I am only familiar with JavaScript and Python now in my career.

One of the key takeaways from the course was the importance of data types in programming. Understanding the different data types and how they are represented in code is crucial for effective programming. I also gained a deeper understanding of how data structures work, which has helped me optimize the performance and efficiency of applications I work with and analyze.


Quick Start Guide to SQL

Introduction to RDBMS and SQL - Quick Start Guide to SQL Video Tutorial | LinkedIn Learning…
From the course: Quick Start Guide to SQL - [Instructor] Did you ever wonder how to work with databases or how to…www.linkedin.com


The “Quick Start Guide to SQL” course on LinkedIn Learning is a comprehensive resource that provides a fundamental understanding of SQL. It is an excellent starting point for anyone learning to fetch and filter data using select statements. The instructor, Deepa Maddala, does a fantastic job of breaking down core concepts and demonstrating how to apply them in practical scenarios.


One of the key takeaways from this excerpt is that SQL is a powerful tool for managing large datasets. The select statement is a crucial component of SQL because it allows users to extract specific data from tables. Choose statements can fetch data from one or multiple tables, and users can specify the columns to be retrieved and apply conditions to filter the data being fetched.


I also gained insight into the various comparison and logical conditions that can be used to filter data, including “AND,” “OR,” “LIKE,” and “IN,” among others. Understanding these conditions is essential for creating effective queries that retrieve the data a user needs. Additionally, I learned about the order of precedence for these conditions, which can impact the results returned by a select statement. By understanding the order of importance, users can create more sophisticated queries that filter data more effectively.


Going into Week 17

This coming Monday, we have a practice test consisting mainly of essay questions related to the following topics: Data Structures, Big O Notation, Algorithms, SQL, and solving a few sorting algorithms. Our minimal viable project is due on Friday, and my group and I are confident in meeting this deadline. In week 18, we plan to work on stretch goals for the project and improve its aesthetics.

In the first part of this week, I plan on developing unit tests to gain a better understanding of constructing them for our project. I will also explore why Unit Tests are essential for software applications going forward.


Happenings Outside Of Software Engineering Career

On Sunday, I was baptized into the Catholic Church, and my name was officially recorded in the church’s database for individuals who have been baptized. Religion isn’t a significant part of my life, but attending our church here in Santa Rosa de Cabal weekly has broadened my perspective on how important religion is in this town and Colombia.

During a conversation with my girlfriend, I realized that a large percentage of the population’s regular involvement in the Catholic religion at the many churches in Santa Rosa de Cabal has contributed to the town’s safety. I became baptized to support my girlfriend and her Colombian family and to be taken more seriously in their culture. Although I can’t entirely agree with all cultural norms and beliefs, I prioritize fitting into society rather than disagreeing with aspects of culture or society.

Traveling to 55 countries has taught me to be flexible and adaptable and to accept that we often have to do things that we don’t enjoy or agree with. My girlfriend and I have purchased tickets to leave Colombia in late July and will be living in La Coruna, Spain, for August and September before moving on to other parts of Europe. We’re excited about experiencing the warm weather in the north of Spain during summertime, and a must for Colombians. I’ll provide more updates soon, and I’m always excited to continue moving in life, questioning everything, and failing often. For example, I fail every day when speaking Spanish, but I’m gradually improving my understanding of the language and my speaking skills.

Ready to work with Xander Clemens?

I'd be happy to discuss your project and how we can work together to create unique, fun and engaging content.

Go ahead and click here to be taken to my business service page and see what I can do for you. Book a call with me now. Looking forward to chatting soon!

Book A Call
Share by: