During these days I have studying more about recursion, dynamic programming and memoization. Really this three topics are very hard, think in recursive code is complex, you will need to change your mind about how you think in problems. With Dynamic problem I am having problems to understand how to break a problem in smaller problems itself, sometimes I don't catch up how to break a problem, how the little problem manages their state, inputs and outputs. Memoization in other words is more easy, most of the time a Map is good to store the results of the subproblem, but also to save the subproblem results, first you will need to know the subproblem and how to solve it. Well, I will need to put more efforts and don't surrender to understand and learn these topics.
I have been studying recursion in programming and DSA. Today I was practicing with some book exercises about how to solve problems with recursion, I continue having problems to be able to read and write recursive code, I learned a new type of recursion functions called Accumulative Recursion, this functions are used for example to create a new List with the elements from a list that meet a condition.
Studying recursion and changing my mind to thing how to write, read, break problems into smaller problems, and solve them recursively is hard. I am having some problems to understand for example when in the return statement we return two times the same recursive function, I know that this is not an easy topic, well at least for me is not easy. also I solved some LeetCode problems with Java to continue practicing.
I started to study about recursion in programming, I remember when I encounter this concept in the past I only make a little study, but now I am studying deeply about this concept. I learned that recursion is a powerful tool to solve problems that can be divided into smaller problems. It's complicated for me at the moment understand good recursion but my hope is with the days and continue studying I can know how works with recursion in DSA.
Today I started to study about Stack and Queue data structures, I learned that this data structures are Abstract Data Types (ADT) that can be implemented most of the times with arrays. The Stack and Queue are only an array with a set of rules, for example, the Stack is a data structure that follows the LIFO (Last In First Out) rule, and the Queue is a data structure that follows the FIFO (First In First Out) rule.
During the weekend and today I was studying the Hash Table data structure, this time I did a deep dive about how the computer store a Hash Table in memory, now I know why the time complexity of the Hash Table is O(1) in the best case, and O(N) in the worst case. Also I learned that an important component of a Hash Table is the has function, because this function has the responsibility to parse the value into a key to be used bu the Hash Table to store the data. The load factor in a Hash Table is 0.75 this means that when the Hash Table is 75% full the Hash Table will be resized to double the size, this is a good practice to maintain the performance of the Hash Table. The formula to calculate the size of the hash table is Cn = 16 X 2^n
. Java by default create a Hash Table with a size of 16.
During these days I continue reading my current DSA book and solving some LeetCode problems. I have a project in mind related with use this personal GitHub repository to automate my skills punctuation/grade in Computer Science topics. My idea is create a GitHub action that with every new commit trigger another application that fetch the data from this repository and calculate my new knowledge acquired, for example Java == 80%, Python == 20%, good skills in DSA, normal skills on FrontEnd technologies, etc.
These days I have been solving some LeetCode problems related with strings, arrays and greedy algorithms. I learned that the greedy algorithm is a powerful tool to solve problems that require making the best decision at each step. I will need to continue practicing general algorithms and improve my math concepts, why when I attempt to solve a Medium problems I feel very bad, because some of them has a math concept that I don't understand.
During these days I have been reading the book "A Common-Sense Guide to Data Structures and Algorithms" and solving some LeetCode problems. In the book currently I am learning why the Big O notation does not accept constants to measure time complexity in algorithms like O(2N)
is equal to O(N)
. Interesting how the Big O notation works, I remember in the past why an algorithm that execute three for loops not nested only use three for loops operations in the same N element, the time complexity is O(3N)
but the Big O notation only accept O(N)
.
Today I was solving LeetCode problem related with order a list of elements by ascending order. I can solve this problem with store the data in a Java record and use the stream
API to perform the sort, and modifications operations for the data. Looking in the solutions implemented by other people I discovered a solution using a PriorityQueue, I never used this data structure in Java, I needed to study how to use this data structure and how to implement the solution with this data structure. I learned that the PriorityQueue is a data structure that allows you to store elements in a queue and order the elements by a priority, the priority is defined by a comparator.
Today I have been solving some medium problems on LeetCode, I solved a problem that required the use of the modulus operator. The modulus operator is a powerful tool that can be used in many different ways. Solving medium problems was hard for me, but I can solve around 8 problems today, 3 without help, my solution was not the better but works. Also I learned that using the modules operator with a one digit number and divided by 10 always return the number itself like 9 % 10 = 9
the formula that explain this is n % 10 = n
and 0 < n < 10
where n is a one digit number.
Today I started to study the HashMap/Map Data Structure and also I start to work on problems related this this DS on LeetCode.
Today, I have been continue doing two-pointer and array problems on LeetCode. I was feeling relax most of the day, spending the time in non-coding activities. You will need to take a rest before start with a intensive week.
Today, I have been working on easy LeetCode questions, specifically those related to arrays. At the moment, medium and hard problems pose a significant challenge for me. I attempted to solve an easy problem that involved developing my own logic for a tic-tac-toe game. However, this problem proved to be quite difficult for me, and I was unable to solve it. Tomorrow, I plan to begin studying a different data structure, such as a HashTable, Queue, or Stack.
Today I have been solving two leetcode problems with the two pointer technique, really when you return to leetcode for a long time, you will need to require some time to feel confident with the problems. Good luck and don't give up.
Today I have been studying greedy algorithms, I learned how to identify a greedy algorithm and how to implement it. I attempt to solve a greedy LeetCode problem without success results, so I need to study these type of algorithms, I solved the Activity Selection Problem with some GitHub copilot's help, copilot is an amazing tool to explain and understand problems, you will need to give an opportunity to this tool.
Today I continue studying the time complexity in algorithms. I did some code exercises to practice how to identify time complexity in algorithms. I learned the basics about how can refactor an algorithm with O(N2) to only O(N), understanding how two nested loops affect the algorithm performance.
I learned how to implement the bubble sort algorithm with Java, also I am studying about the Big O notation to learn about the tim complexity of the algorithms. Really I am enjoying the DSA study, today something in my head make click and I could understand that any code for example calculate the current date has a time complexity and can be represented with the Big O notation. Really I never thing on this in the past when I was coding.
Today I have been learning search algorithms for arrays and set arrays, I learned about the linear search and binary search algorithms, I have practicing with some examples and creating implementations for these algorithms, please check the next github gist with the implementations here;
Today I continue reading the A Common-Sense Guide to Data Structures and Algorithms book, the books starts with the basic operations in data structures like insert, delete, search, etc. For the moment the book has great visual examples to understand the concepts, I have the doubt about what programming language I will use to practice the examples in the book, I am thinking in use Java or Python.
Today I have been studying the basics about the WebSockets protocol and more abstract concepts, In the past I had the opportunity to work with WebSockets in a project, I remember that the WebSockets servers was wrote with NodeJS and Socket.io, working with websocket was a challenge for me because or websocket implementation works with some errors and the developer that build this implementation was a developers contracted only to build this websocket server, I needed to fix the errors and improve the performance of the server. I learned a lot about WebSockets in this project through reading the official socket.io.
During these days I took some free time to rest and relax, I needed to take a break from my daily routine. I have been working on my backend engineering course, I am learning about HTTP 1.0 and HTTP 1.1, today I learned how to create a simple HTTP 1.0 server with Python, also I learned some important concepts in HTTP like Pipeline and Keep-Alive, with this new knowledge I remember a past problem with an application in which when we create a HTTP client with Java and keep this connection live, we reduce the time of the request-response cycle. Really the application performance improved a lot.
Today I have been working on create a TCP server with NodeJS and a TCP client with Python. Rather than start to study a new framework or a new programming language, I want to study and learn the Computer Science basics, I believe that it is important to understand the deep concepts in the backend engineering.
During these days I am on vacations from my work. I have been making some low code time, although I am on vacations I need to code a little every day, I don't know why but code for me is a hobby rather than a work. I continue studying about Networking and the OSI model, wait a blog tutorial about this topic in a near future.
Today I continue learning the OSI Model, to understand better this I tried to abstract the OSI model with Golang code, you can found the gist in the next link. When I attempt to abstract the concepts with code I needed to think how can abstract this, from my perspective doing this you can understand better the concepts.
Today studying my backend engineering course, I started to study about the OSI Model focusing today in the layer 1 and layer 2. Now I know that the layer 1 is like the ethernet cable that send the request to the bare metal server, layer two is used to add some information to the previous data received in the layer 1 like the Mac address source, Mac address destination, etc. I started to work on a GitHub gist to create a representation of the OSI model with golang code.
Today, I was contemplating my next topic of study. For my current job, I need to enhance my skills in NextJS, communication between backend and frontend, TypeScript, FrontEnd development, and ETL processes with Python and Pandas. However, for my personal growth, I'm interested in exploring other areas such as Golang, Computer Science, and backend engineering topics. This morning, I attempted to learn Python Pandas, but the results were disappointing. I lost interest after just 30 minutes into the course. I also tried to initiate a NextJS project for practice, but again, I found myself feeling bored. I need to reflect on these feelings to effectively continue my learning journey.
During these days I completed the ReactJS course, I have been working on this course for around two-three weeks, working on the course I refresh my ReactJs knowledge and learned new things. I am excited about my new project, tomorrow I will need to think and start a new project to practice all the knowledge learned.
Today I have been working on a search functionality in the course application, the idea is to create a search bar that look for elements in the database through a query.
Today working in some ReactJS code finally something make click in my mind and I could start to think in ReactJS statement components in a more effectively way, state is like a properties in classes, you can create code variables in the component, but this code variables are scoped like a variables created in a method execution, and to persist this value to be reusable by other components you require the state, you can link components and classes with this analogy.
Today I have been studying different techniques to render ReactJS components conditionally. I need to apply some logic to render X component for an authenticated user and another component for non-authenticated users. ReactJS is beautiful, but it's just JavaScript/TypeScript code, and with a good software engineering background, any JavaScript frontend framework can be easy to work with. However the magic in frontend development comes from CSS.
I studied with more dive how works the useEffect ReactJS hook, also I studied a little how ReactJs manage the status update in the application.
These days I have been doing my MERN course, I have been learning basic style techniques to add styles to my ReactJS components. Creating ReactJS components can be a tricky activity, is the same like backend development you can create a mess of TS/JS code. It's funny for the moment.
Today I was working on a piece of code that needs to read a CSV file, validate the correct CSV file structure to finally parse the CSV into a database. I am having some problems to learn how to use the Javascript APIS for handling files, specially learn how to use async/await code with this.
Today I learned how to upload files to firestore with JavaScript code, I created a basic application functionality that uploads images files from the user. Also I learned some of the JavaScript/NodeJS APIs to manipulate files. JavaScript have a basic APIs to manage the disk storage in the application this is my personal opinion I felt limited working with this rather than Java or Python code.
During these days, I have been working on my MERN course. I am learning how to implement an OAuth login with google using firebase and authentication functionalities. I builded the Sign In and Sign Up pages in the frontend currently I am working on implement the sing in google functionality in the backend.
During the weekend, I continued studying more about Frontend technologies. I started an O'Reilly MERN (MongoDB, Express, React, NodeJS) course to further improve my frontend skills. You can find the course here. Additionally, I began exploring HTMX, a library designed to build interactive web applications similar to ReactJS. I found working with HTMX to be enjoyable and it has been a great resource for learning more about Golang, as I created a basic web application with a form and managed the backend with Golang.
Today, I am continuing to create Node.js and React.js applications to further improve my full-stack developer skills. My focus is on understanding how to create and maintain robust full-stack applications. Currently, I am prioritizing the development of logic and communication in the frontend using React.js and Next.js. While I am not currently focusing on website design, I am dedicated to honing my skills in building the functionality and interactivity of applications.
During these days, I continue studying communication patterns in client-server connections. The reason for studying this is that I am currently working on a full-stack application. This project is a challenge for me because, in the past, I focused on creating FrontEnd applications using ReactJS and Angular. However, my knowledge in these areas is still at a basic level. Working as a Full Stack developer is rewarding but also exhausting. I recognize that I need to continue learning more about full-stack development and client-server applications.
I am working on implement an user registration routes for my application, the idea is that any user can register in the server with their data, and with this data registered, now clients can create applications to fetch this user information.
Over the weekend, I completed reading the Linux Command Line book. I thoroughly enjoyed the book, especially the section on increasing productivity using the terminal for common and repetitive tasks. After finishing the book, I started a new project: building my own implementation of the OAuth standard using Node.js, Express, and TypeScript for learning purposes. My goal is to practice TypeScript and refresh my knowledge of client-server communication. As a first step, I will dive into understanding how the OAuth standard works while documenting my journey in a Medium blog post. Of course, I will follow the Test-Driven Development methodology in developing this application.
Today I continue reading the Linux Command Line book. I learned about how to debug bash scripts and how bash manage syntax errors.
Today I learned how to use loops in bash like while, for and until. Bash is a funny language if you want to interact with the OS system in my case MacOS, I created some scripts to learn and practice control flow in bash scripts. An interesting script created today was a script that reads the content of a file line by line and column by colum.
These days I have been working to complete the NextJS application tutorial. I could completed the tutorial and deploy the application in Vercel, the application looks good and work as expected. I discovery something studying about the IBM Carbon Design System, I don't like the Frontend technologies related with the style like SASS and other tyke of obscure technologies. The problem with styling the frontend is you need to understand all the technologies available and select the best for your project.
Today, I've been applying UI designs to a Next.js component. Reflecting on the past, I recall that one reason I used to dislike Frontend work was due to design and CSS. Frankly, it's not my favorite aspect. Nevertheless, I recognize the importance of this task and am committed to improving in this area. As a Full Stack developer, I find it fulfilling to work on complete projects independently.
Unit testing in front end applications is a funny task for me, I love to test my UI components, it's funny work with logic in the UI, some of my unit testing backend techniques can be applied to the frontend. React properties in components are like dependency injection in backend code.
Today I have been learning how works the OpenID Connect protocol, I needed to learn how to implement this protocol with NodeJS and Typescript, my weekend goal is learn how to implement this protocol with a Go application. Also, I needed to learn how to create a HTTPS server on my local machine with NodeJS and Express application.
Recently, I’ve been diving into a Next.js tutorial you can find it here. In this tutorial, I’m not only refreshing my ReactJS knowledge but also exploring the exciting world of Next.js.
In the past, I’ve developed several Full Stack applications using the MERN stack (MongoDB, Express, ReactJS, and NodeJS). Working on those projects was quite enjoyable. While the UI designs were intentionally kept simple and clean, I made sure to incorporate Unit Testing into the applications. I have a soft spot for creating FrontEnd applications using the TDD (Test-Driven Development) methodology.
Now, I find myself revisiting FrontEnd technologies because I’m currently working on a frontend application in my current job. It’s fascinating how technology keeps evolving, isn’t it? 🚀.
I continue studying more about Frontend technologies, I am doing a NextJS tutorial to learn the recent frontend technologies, In the past I learned and created interesting ReactJS applications, with MERN stack, I want to learn how to use ReactJs 18 and NextJS to build some basic applications, for the moment I am in the bom moment, when you start to remember a technology learned on the past.
These days I have been studying about Frontend technologies, like ReactJS, TypeScript, NPM and NextJS. On my first days learning programming I started with Javascript, ReactJS and NodeJS I have a lot of fun making some full stack applications, really I loved these times, I needed to start to study again frontend technologies because on my current job I started to work with ReactJS and NodeJS for a full stack application. I paused my Linux study for a moment to focus on this.
Today I have been learning more about Linux scripts, I was studying the test expressions in bash and how works flow conditional statements like if/else on bash. It is interesting how bash works.