Skip to content

pablohdzvizcarra/my-software-developer-career

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

My Journey to Becoming a Software Engineer

Within this repository, I will document my evolution as a software engineer. Maintaining a record of our progress is invaluable. When I first embarked on my programming journey, I envisioned a way to reflect on my past decisions. This repository stands as a testament to that vision, a chronicle of my growth in the world of software engineering.

Programming Changes My Life

Day 1697-98 Continue with Recursion

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.

Day 1695-96 Recursion is Hard

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.

Day 1693-94 Thinking Recursively

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.

Day 1692 Stack and Queue

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.

Day 1689-90-91 Hash Table

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.

Day 1685-86-87-88 Continue with DSA

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.

Day 1683-84 Solving String, Array and Greedy Problems

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.

Day 1680-81-82 Reading and Solving LeetCode Problems

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).

Day 1679 Java Priority Queue

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.

Day 1678 Solving Medium Problems and Modulus Operator

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.

Day 1677 HashMap Problems

Today I started to study the HashMap/Map Data Structure and also I start to work on problems related this this DS on LeetCode.

Day 1676 Two-pointer and Array Problems

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.

Day 1675 Solving Easy Problems

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.

Day 1674 Two Pointer

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.

Day 1673 Greedy Algorithms

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.

Day 1672 Understanding Time Complexity in Algorithms

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.

Day 1669-70-71 Bubble Sort and Big O Notation

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.

Day 1667-68 Continue with DSA

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;

Day 1666 Focusing on DSA

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.

Day 1665 WebSockets

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.

Day 1659-60-61-62-63-64 Break Days and Continues with Backend Engineering Course

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.

Day 1658 TCP Server

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.

Day 1653-54-55-56-57 Vacation and Low Code Time

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.

Day 1652 OSI Model Basic Representation

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.

Day 1651 OSI Model

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.

Day 1650 How to Organize Study Topics as a Software Engineer

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.

Day 1646-47-48-49 Completed ReactJS Course

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.

Day 1645 Search Functionality

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.

Day 1644 Managing React State

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.

Day 1643 Render Components Conditionally

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.

Day 1641-42 useEffect Hook

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.

Day 1639-40 Continue Learning ReactJS and UI

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.

Day 1638 Managing Files with JavaScript and NodeJS

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.

Day 1637 Firestore

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.

Day 1635-36 Implementing Google OAuth

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.

Day 1633-34 HTMX and Frontend Technologies

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.

Day 1632 TypeScript and NodeJS

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.

Day 1630-31 Backend Communication Patterns

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.

Day 1628-29 Register Users and Authentication

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.

Day 1625-26-27 Finished the Linux Command Line Book

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.

Day 1624 Continue with Bash

Today I continue reading the Linux Command Line book. I learned about how to debug bash scripts and how bash manage syntax errors.

Day 1623 Bash Loops

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.

Day 1618-19-20-21-22 Finishing NextJS Application

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.

Day 1617 UI Styles

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.

Day 1615-16 NextJS and Unit Testing

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.

Day 1614 OpenID Connect and NodeJS HTTPS Server

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.

Day 1609-10-11-12-13 NextJS 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? 🚀.

Day 1607-08 More Frontend

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.

Day 1602-03-04-05-06 Back to the Frontend

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.

Day 1601 Continue Linux Scripting

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.

Day 1 - 50 HTML - CSS - Javascript here
Day 51 - 100 Javascript here
Day 101 - 150 Javascript here
Day 151 - 200 Javascript here
Day 201 - 250 Javascript and start React JS here
Day 251 - 300 Javascript - React JS here
Day 301 - 350 Javascript - React JS and start Node JS here
Day 351 - 400 Start learn MERN stack here
Day 401 - 450 MERN stack - Docker - Typescript - TDD here
Day 451 - 500 Object Oriented Programming here
Day 501 - 550 Data Structures and Algorithms here
Day 551 - 600 Java
Day 601 - 650 Java here
Day 651 - 700 Java and Spring Boot here
Day 701 - 750 Java | Spring Boot | MySQL here
Day 751 - 800 Java | Spring Boot | MySQL here
Day 801 - 850 Java | Spring Boot | OCI here
Day 851 - 900 Java | Design Patterns here
Day 901 - 950 Java | Design Patterns here
Day 951 - 1000 Java | Design Patterns here
Day 1001 - 1050 Java | New Job here
Day 1051 - 1100 Java | Python | Cloud Computing here
Day 1101 - 1150 Java | Containers | Cloud Native Development | OpenShift here
Day 1151 - 1200 Java | Containers | Python | Security here
Day 1201 - 1250 Java | Python | Security | English here
Day 1251 - 1300 Java | Python | Security | English | Soft-Skills here
Day 1301 - 1350 Java | Python | Spark | Microservices here
Day 1351 - 1400 Java | Python | Design Patterns | Microservices here
Day 1401 - 1450 Java | Design Patterns | CI/CD here
Day 1451 - 1500 Java | Design Patterns | CI/CD here
Day 1501 - 1550 Java | Python | Data Analytics | CI/CD here
Day 1551 - 1600 Java | Python | Data Analytics | CI/CD here

About

My road to become a software engineer

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published