LeetCode, LeetCode & More LeetCode

Welcome to post #5 of my blog documenting my journey through the CS 467 Capstone course. This week I continued to work on my team’s project and made some cool additions to our app. It has been a great experience getting my feet wet with mobile development, going through the development process and seeing the project function properly. I look forward to another great week of learning and development. 

Similarly to last week, I want to deviate from writing about my team’s project and dedicate this blog post to my journey prepping for and interviewing for software engineering roles. Since I covered my introduction to online assessments last week, let me tell you about the process of learning and improving my technical interview skills.

As I mentioned last week, after my first online assessment I was able to get a good grasp on what to expect moving forward in the interview process. I bought and started reading Cracking the Coding Interview, created a LeetCode account and started watching YouTube videos on how to prepare and perform well in interviews.

Although I was able to obtain plenty of useful resources, I lacked a solid game plan. Initially, my approach of how to get better at LeetCode questions was simple: just complete a lot of LeetCode questions. Although I do believe that practice makes perfect, in this case I noticed that this approach did not work for me. To be specific, I noticed that I started to get into this cycle of opening a question, getting stuck, looking for “hints”, and then solving the problem. The issue with this approach was that I was not actually solving the problems by myself. I realized that it was time to go back to the drawing board and come up with a new game plan. 

What I noticed from searching online was that LeetCode-type interview questions can be divided into individual concepts, such as lists and arrays, linked lists, and hash tables. I also found that there were a few problem solving techniques that could be used to find a solution to a problem quicker. With this in mind, I created a game plan of going through each major concept, learning it well and practicing interview questions related to this concept until I felt comfortable solving questions on my own. 

After extensive practice, I was able to solve the majority of “easy” questions on LeetCode that I attempted and a few “mediums”. This increased my confidence and I started doing better at online assessments. This eventually led to me moving forward in the interview process with a few companies and reaching my first final round interview about halfway through the quarter. 

It took plenty of time, practice, late nights and early mornings, but I was finally getting better at solving LeetCode-type questions. The next step was to perform well in interviews, which I will discuss next week. I hope to see you then. 

Thank you for reading and I’ll see you next time.

Rod.

My First Exposure to Online Assessments

Welcome back to my blog and thank you for taking the time to read post #4. This week I was able to get my hands dirty and apply what I have been learning through reading documentation and watching tutorials. Working with React Native and Firebase has been a great learning experience and watching our project come to life has been incredibly rewarding. 

Although the purpose of this blog is to document my journey through the CS 467 Capstone course, I want to deviate from this topic and dedicate this blog post to my first experience with interviewing for technical roles. 

Since I started my computer science journey in March of 2020, my goal was always to land a software engineering position in a big tech company. The problem was that I had no idea how to accomplish this. At that point I had no idea about the format of technical interviews or what Leetcode was. However, I did know that the more I knew about computer science and its key concepts, the better position I would be to accomplish my goal.

Therefore, as I mentioned in a previous blog post, I audited Berkeley’s CS61B and learned about data structures and algorithms, almost accidentally learning perhaps the most important skills needed for tech interviews. Additionally, I was able to build a couple of personal projects that involved data structures and algorithms, which enhanced my understanding of the topics. 

Fast forward to early August, I was admitted to OSU and immediately started applying for software engineering internships. I knew that the best route to accomplish my goal of working as a software engineer at a big tech company would be through internships. This would give me an introduction to the industry, help me gain valuable skills and enhance my resume. 

To my surprise, about a month before my first quarter at OSU started I received my first online assessment from Coinbase. Having never taken an online assessment before, or even heard of them, I searched online to see how I could prepare. To my relief, most of the advice I read was related to reviewing data structures and algorithms. I already know about these concepts, I thought, this should be easy. With a naive sense of confidence, I opened the Hackerrank assessment and started reading the first question.

As soon as I finished reading the first question my confidence completely faded away. I had no idea how to answer the question. I moved on to the second question, read the instructions and realized that it was harder than the first one. Ultimately, I tried my best and submitted my answers that passed a minimal amount of tests. 

Of course, about a week later I was informed that I did not perform well enough to move on through their interview process. However, instead of being disappointed about the outcome, I took this experience as a learning opportunity and started learning more about online assessments and technical interviews. I bought and started reading Cracking the Coding Interview and created a Leetcode account. What followed were many late nights practicing problems and learning about problem solving techniques, which ultimately paid off.

In order to keep this post short, I’ll stop my story here. However, I do plan on writing about the next part of my journey, which was applying and interviewing for more software engineering internships. I hope you can join me then. 

Thank you for reading and I’ll see you next time.

Rod

React Native & Dealing With Challenges

Welcome to post #3 of my blog documenting my journey through the CS 467 Capstone Course. This week was a great week of learning, testing and implementation. I was able to learn a ton of React Native, Expo and Firebase, the key components my team will be using to develop our crowd-sourced fitness app. Let me tell you more about my experience learning React Native and my mentality when dealing with bugs and challenges. 

Learning React native definitely came with a steep learning curve, but my slight familiarity with React and good understanding of Javascript helped me learn key concepts quickly. I was able to follow a great tutorial that facilitated my learning experience and helped me build a solid foundation of knowledge to have a good start when building our project. 

Through the tutorial and additional documentation, I was able to learn how to create screens for the application, implement user interactivity through text fields, buttons and other components, and how to properly display content in the app. I was also able to learn how to run a React Native application in both iOS and Android simulators and on a physical device. 

This part, and the overall installation and configuration of React Native and Expo, was the one that gave me the most challenges to overcome. As you may be aware, the steps given in tutorials and documentation are often not as straightforward as they seem. Although challenging, I took these obstacles as a learning experience and practice of what is to come when I graduate and start working as a software engineer.

This is the approach and mentality that I am focusing on having during this term. Given that I will start working as a software engineer soon after graduation, my goal this term is to implement practices that I will use at work, and dealing with bugs and obstacles is a big one. I want to challenge myself by learning new things and overcoming any roadblocks efficiently by reading documentation and connecting with my project partners. I believe mastering these skills will help me be better prepared for my role. 

With clear goals in mind and technical foundations built, the real fun begins. Time to set up a good playlist and start developing. Thank you for reading and I’ll see you next time.

Rod

Fitness for All

Welcome back and thank you again for checking out my blog! This week marked the beginning of my journey into building a great project for the CS 467 Capstone Project course. I was assigned a project and teammates and we discussed our team standards and agreed on the essential tools we will use to develop our project. I’m incredibly excited about the project so let me tell you a little more about it. 

The project our team was assigned was a crowd-sourced fitness challenge app. The goal of the app is for users to be able to create and participate in fitness challenges for their appropriate fitness level and interests. Whether it is weightlifting, running, yoga or any combination of workout types, users will have the opportunity to be part of a community, tackle personal fitness goals and challenge themselves and their friends.  

Our team’s goal is to create an app that is functional, interactive, fun and easy to use. To achieve this, each fitness challenge will have a chat section where participants can interact with each other, they will be able to upload pictures of them completing the challenge, and each participant that completes the challenge will be inducted into the challenge’s Wall of Fame. The purpose of these features is to motivate users and help them achieve their fitness goals while having fun and being part of a community.

Our crowd-sourced fitness challenge project will be a mobile app for both iOS and Android, which led our team to decide on using React Native for development purposes. React Native is a Javascript-based mobile app framework used to build native apps that lets users create applications for multiple platforms, including iOS and Android, using the same codebase. This feature and its popularity made the framework a perfect fit for our project. 

Our team is really excited to build the app. However, we do have some major challenges that we will have to overcome to reach our goal. First, although React Native is incredibly popular, no member of our team has experience using it. Additionally, I personally have no experience in mobile development. Despite these challenges, our team is ready for this learning experience and eager to work together to create an amazing app. 

Now time to learn some React Native. Thank you for reading and I’ll see you next time. 

Rod

hello world.

Welcome and thank you for checking out my blog! The purpose of this blog is to document my journey through Oregon State’s CS 467 Capstone Project course. I’ll be sharing what goes well, what areas need improvement, neat things I learn along the way, and a (hopefully) amazing final project. But first let me introduce myself and tell you a bit about my computer science journey.

My name is Uriel Rodriguez, but some people call me Rod. I’m in the final quarter of my CS degree at Oregon State and will start working as a software engineer in July. The path life has taken me to get to this point in my career is far from conventional, and I believe it is worth sharing.

As a first-generation college student, my experience during my first degree was incredibly difficult. My limited knowledge of majors and careers led me to graduate with a degree that I wasn’t passionate about. I started working as a substitute teacher after graduation with the intent of becoming a teacher. However, although the experience was incredibly rewarding, I realized that teaching was not the right career for me.

Once the pandemic started and schools closed, I realized it was the right time to pivot and commit to a new career. After researching several areas of interest, I decided to start working on my new goal: become a software engineer.

After further research, I was able to identify three distinct paths to achieve my goal: self-teaching, enrolling in a coding bootcamp, and going back to school. Given that I already had a college degree, albeit one unrelated to computer science, I decided to first pursue the self-teaching route.

I took a couple of days to find resources, made a plan and got to work. Three months later, after countless hours of watching YouTube tutorials, auditing Berkeley’s CS61B course (shoutout to Professor Josh Hug), and building what I believed to be solid projects and a strong resume, I decided to start applying to jobs. Unfortunately, without any formal CS education and no industry experience I was rejected by every software role that I applied for. I realized that it was time to go back to the drawing board and redirect my efforts.

With the support of my amazing wife, I decided the best approach to reach my goal was to go back to school and enrolled at Oregon State. The program helped me land an internship last summer and secure a software engineering role after graduation. I am incredibly grateful to everyone that I have crossed paths with throughout my journey at OSU and I am super excited about the future.

With introductions out of the way, it is time to start building something great. I hope you can join me in this journey.

Thank you for reading and I’ll see you next time.

Rod