Categories
Uncategorized

# 7 – Interview Resources

Introduction

As I get nearer to the start date of my software engineering job, I am beginning to reflect on the trials and tribulations I faced during the OSU program and the interview process. In this post, I would like to shout out some learning resources that have personally helped me out a ton.

Abdul Bari (YouTube)

Algorithms was one of the hardest classes I took at OSU, if not the hardest. I often felt very lost during the course, and the course materials were not sufficient enough to make the material click in my head. I found Abdul Bari’s lectures to be a great supplement to learning algorithms. He is excellent at explaining theoretical concepts, and walks through examples and coding implementations to demonstrate more clearly how these algorithms work.

Grokking Algorithms – Aditya Bhargava

Grokking Algorithms is a great book for anyone who is looking to learn or review data structures and algorithms. It is a digestible, easy-to-read book that explains algorithmic concepts in layman’s terms. This book definitely helped me out when I found that the CS 325 textbook was too dense or full with jargon for me to understand.

NeetCode (YouTube)

For anyone who is still in the process of undergoing technical interviews (especially to those who use Python), I recommend taking a look at this channel. I have tried using various books, including the famed Cracking the Coding Interview, but I have found that I learn much better in a video/audio format. NeetCode does a good job of diagramming out a problem, and walks through many examples while checking for edge cases. This is a key technique to learn for an actual interview, as it is essential that you communicate your reasoning before actually writing out your code. This channel’s solutions have helped me greatly any time I have found myself stuck on a LeetCode question.

Corey Schafer (YouTube)

Corey Schafer is a great YouTube resource for anyone who is looking to learn Python or one of its frameworks. His Python tutorial for beginners is actually meant for beginners – meaning that he expects you to have no previous technical experience and walks you through from the basics (including installing Python, setting up IDEs, etc.). I am currently using his Django tutorial in order to implement some of the features for the capstone project I am currently working on!

Categories
Uncategorized

# 6 – VS Code Extensions

Introduction

The importance of having an IDE that I felt comfortable working in was something that took me a while to grasp in the program. VS Code has significantly made my work much easier, with features such as debugging tools, an integrated terminal, and various code navigation / management tools. In addition to the cool things VS Code has to offer out of the box, there are also countless 3rd party extensions that you can add to increase the productivity of your workflow. I find that this is one of the greatest ways to save time, as the benefits of an efficient workflow is something that you reap every time you jump into programming. Here are some extensions that I have found useful:

# 1- Prettier

Prettier Extension

Having neatly formatted code is essential – this will make the lives of anyone reading your code in the future much easier, whether its yourself or your fellow developers. Prettier supports formatting in a multitude of languages, and within the VS Code settings you can also choose to format your code each time you save your file.

# 2 – Bracket Pair Colorizer 2

Bracket Pair Colorizer 2 Extension

Bracket Pair Colorizer is an extension that color-codes matching brackets. I have found this to save my sanity on multiple occasions when working with functions nested in functions nested in functions (looking at you, Javascript callbacks).

# 3 – Indent-Rainbow

indent-rainbow Extension

When working with Python, we don’t have to deal with all those nested brackets. However, it might be even tougher to understand the organization of our code by just looking at whitespace indents. Indent-Rainbow colorizes indents based on indent-level, which saves a lot of headache trying to find out which level a statement is on.

# 4 – Remote – SSH

Remote – SSH Extension

In the beginning of the program, my workflow was to work on an IDE on my local computer, transfer my files using CyberDuck, and then run the files on the flip servers using SSH and terminal. As you can imagine, this was highly inefficient and I spent almost as much time doing file management and testing than actual coding.
With this SSH extension, you can write a configuration file and easily SSH into a remote server with a single command. Using this method, I was able to do all my development on the flip server with no file transfers, in the comfort of my own IDE.

# 5 – GitLens – Git supercharged

GitLens Extension

Last but not least is GitLens. This extension is particularly relevant because I am currently using git and GitHub as our version control system for the capstone project with my team. GitLens makes it super easy to see who is responsible for each line of code, using git blame annotations. There are also tools to peek at the previous commit versions within the IDE; I have found this to be extremely useful when trying to root out the main culprit of recent changes that are causing issues in the application.

Categories
Uncategorized

# 5 – Favorite Project

Introduction

One of the things I appreciated about OSU’s post-bacc program is the multitude of portfolio projects that we create for our classes. I’ve appreciated that we were given assignments where we are able to utilize different tech stacks that we’ve learned into projects that we are able to showcase. My favorite project so far is a hiking web-application that I created with my team for CS 361.

What is it?

My group’s project, named Pathfinder, is a web application designed to help hiking enthusiasts find hiking trail recommendations. One of the main features of the application is a fitness calculator that takes in the user’s basic information to calculate their general fitness level. The application then matches the user to a hiking trail based on their preference – for example, a user of “medium fitness” can decide they want a challenge and they can select trails on the more difficult end.

After selecting a hike, a user can then inspect the “Gear Recommendations”, which will retrieve attributes at the hike as well as current weather at its location in order to recommend what clothing/equipment to bring to the trail.

Tech Stack / Implementation

The tech stack was very simple for this website. Our team used HTML/CSS/JS with Semantic UI as a CSS framework. We had initially debated on going with a backend, but in the end we decided that using a 3rd party hiking trail API would be simpler and more effective. Our team of 4 developers used Agile methodology for the end-to-end development of this project. We worked in 2 week sprints, using an Asana Kanban board for task management, in order to implement the various User Stories we had established.

Conclusion

I really enjoyed this project because we were able to come out with a pretty polished product that I could imagine would be actually useful to anyone who hikes. In addition, I really loved getting my feet wet with Agile and working collaboratively with other developers. The website is found here in case you would like to give it a try! I am hoping that the capstone project will also become one of my favorites.

Categories
Uncategorized

# 4 – OSU Reflections

Intro

With this being my last term at OSU, I thought it would be a good idea to take a step back and and look at my experience with the program overall. It was a big decision to go back for a second Bachelor’s, and it will be interesting to see how the program compared to my expectations.

Time Management at OSU

The biggest difference between the post-bacc OSU program and my previous undergraduate degree is that my classes at OSU are fully remote. I would say that this was a double edged sword in many aspects. On the positive side, I was able to be extremely flexible with my schedule. If there was a special event, I was almost always able to plan around it – even during weekday afternoons! As a person who works in bursts, it was convenient to be able work when I was most focused and motivated, while taking it easier on days where I had less energy. However, this also meant that I had to be rigorous with my time management and scheduling. I didn’t always succeed with this, and I often procrastinated and ended up finishing my assignments during weekends.

Community at OSU

My experience with fellow students has been pleasant overall. As students going for a second degree, I found that most of my peers were extremely driven with a passion to pursue computer science. I loved the diversity of my classes; students came from a wide range of ages, locations, professions, etc. At the same time, this also made it hard to connect with others sometimes. A lot of my peers were juggling full-time jobs, family time, and school. As a student fresh out of Bachelor’s 1.0, it was a bit difficult to find people who had the interest (or time) to develop friendships outside of academics. Most of my interactions have been over text communications such as Slack. While the ease of access to these platforms was convenient, at times I found myself missing the traditional campus-life and face-to-face interactions. I did enjoy the network of people I could reach out to on Slack and Reddit, from the comfort of my home.

Coursework at OSU

With any academic program, the courses vary in level of quality. This is to be expected however, and I was able to learn everything I needed to from the course material, or through external resources. I would say that the biggest strength of OSU’s program is that any student will come out with knowledge and tools that are directly valuable to their future profession, along with multiple portfolio projects that will strengthen their resume while interviewing. Speaking from experience, I leaned heavily on my CS 361 and CS 340 projects in the interviews that led to my first full-time developer role.

Final Thoughts

I would definitely recommend this program to anyone who is looking for a structured pathway to a career change. The ability to have a flexible schedule and change course load on the fly would be invaluable to anyone who is looking wants to switch to CS but is unable to commit to full-time school on campus. From where I started, I have grown a tremendous amount. While there were occasional hurdles along the way, I would say that this program has given me the tools to get into the software industry, and hopefully succeed in the long-run!

Categories
Uncategorized

# 3 – Interview Prep

My Experience

They say that every rejection to a job position can be viewed as a “learning experience”. After 200+ rejections, I can definitely say that I’ve learned more than I’ve ever wanted to. After months of applying and grinding interview prep, I eventually landed a full-time Software Engineer position that I will start next year. I hope to share some of the things I’ve learned (as well as some resources I’ve used) to help any job-hunter reach their offer more easily than I did.

Ultimately, landing a job can be boiled to two simple (but often extremely difficult) steps.

1. Landing An Interview

This may seem obvious, but it cannot be understated how important having a solid resume is. Recruiters often only give your resume a 10 second skim through before they decide whether to toss it or move the candidate to the next round. While the content of your resume is key (education, work experience, etc.), people often neglect the importance of formatting and organization. I would look to keep the resume to a one-page length, use consistent formatting, and to avoid unnecessarily flashy graphics that can detract from the content. One advice that I often got was to highlight your individual contributions and use a lot of action verbs to demonstrate your ability to provide value to a company. If you are in a position where you don’t have much work experience, be sure to include some personal projects to show off your technical skills and passion for programming.

2. Passing the Interview

There are usually two major components to the interview – a behavioral portion, and the technical portion. For the behavioral section, I think it is important to remember that the interviewer is judging to see whether you’re a person that they would want to work with. Try to highlight experiences that demonstrate your ability to work in a team, and your eagerness to be continually learning new things.

The technical portion usually involves data structure / algorithm questions. I see a lot of people doing random questions on LeetCode and focusing a lot on doing an arbitrary X number of questions. However, I believe that it is much more effective to focus on making sure that you understand the problems you do, rather than grinding out as many as possible. While there exists more problems than you could ever do, most problems are focused around a core of problem solving patterns or strategies. For example, learning the “two-pointer” and “sliding window” strategies for arrays can be a strong basis to solve a large number of array problems, even if you have not seen a particular problem before.

Instead of choosing random problems to solve, I think it is more effective to study problems grouped by what data structure they use, or which problem-solving pattern they implement. Here are some resources that I have found to be helpful in my own studying:

https://leetcode.com/explore/learn/

https://seanprashad.com/leetcode-patterns/

Keep Going

Applying for jobs is never a fun process, and it is difficult to stay persistent after countless rejections. It really is a numbers game though. While everyone’s “number” might be different, try to remember that it only takes one to get your foot in the door. As long as you put in a steady effort to continually improve, then I know you will get there! Good luck hunting!

Categories
Uncategorized

# 2 – Productivity

The Evil Duo (Distractions and Procrastination)

I think one of the major things I struggle to deal with is staying focused and remaining productive. With so much media at our fingertips (YouTube, Netflix, Messenger apps, etc.), it feels increasingly difficult to stay attentive to school or work. Here are three methods that I’ve found to help me fight procrastination.

1. Get the Hard Stuff Done First

While I’m certainly not a morning person, I think that mentally draining or technically challenging tasks are easier to do shortly after breakfast. I think that this is the best time period to work, where I am not overly fatigued or too hungry. Towards the end of the day, I can use what little gas I have left to go on autopilot and finish some of the more trivial tasks I have remaining.

2. Stay Organized

I think one of the main causes of procrastination is being disorganized. When you have to spend a lot of time thinking about which task you have to do, it becomes another hurdle to actually start working. Often I find that the most difficult part of doing anything is just getting started and building momentum. The more I trim down on “set-up”, the less of a hurdle there is to starting my tasks. I can do this by scheduling timeboxes for when I want to work on specific things, and by making sure that my desk is clean and tidy the night before I work. If you are on the search for effective productivity apps, I highly recommend Notion; it is an extremely functional software that I use to take notes or manage tasks across multiple devices.

Example of a Task List page template from Notion

3. Pomodoro Technique

For the past few months, I have used a time management method called the Pomodoro Technique, which has greatly boosted my productivity. In essence, the method involves breaking work into 25 minute intervals, separated by 5 minute breaks. While it is fine to adjust how many minutes you want in work/break intervals, I think it is important to keep the interval times consistent by using a timer or app. I have found this method to keep me from working for too long at once, which prevents me from burning out during the day. I make sure to use the break time to stay hydrated and stretch. Short breaks will lead to a healthier mind and body, as well as greater productivity in the long run!

Categories
Uncategorized

# 1 – Allow me to introduce you to myself

Greetings

Hi there! My name is Richard and I am entering my last quarter as a post-baccalaureate Computer Science student at Oregon State University. This is the first of what is to be many blog posts created for my capstone CS 467 course. I plan to share my thoughts on coursework, tech, hobbies, or whatever musings that happen to pop into my head. For my first post, I will go over my brief history and explain why I am here!

My First Degree

My first degree was a Bachelor’s of Science in Biochemistry which I received in 2018 at UCSB. Originally I had planned to proceed to move on to pharmacy school and go on to be a pharmacist. This was a profession that I pursued more from a lack of direction in life than anything else. Many people urged me to pursue pharmacy as a comfortable, well-paying job. At school however, I found myself to be unhappy spending long hours in lab doing research and working with things on a microscopic level – often I felt like I was a zombie going through the motions.

As I was in my final year before graduation at UCSB, I increasingly dreaded the prospect of pharmacy school. Deciding to do a complete career change was an immense decision to make, however. I had great fear of being “put behind” in life, and that it would be a waste to throw away my Biochemistry degree and start from scratch.

Ikigai: A Spark for Change

BODETREE, ADAPTED FROM FRANCESC MIRALLES

A Japanese concept called ikigai helped with some of my introspection about what I wanted to do with my life. Ikigai is a Japanese concept referring to one’s sense of purpose, and is a union of four components (as seen in the diagram above). I reflected on this and ultimately decided that while pharmacy fulfilled most of the components, I would not find any love in doing it. Despite the feeling of sunk-cost with my first degree, I decided that I wanted to make the most out my one life and pursue something that actually made me happy. Thus, I took the plunge towards a career switch.

Why Computer Science / Software?

I wanted to switch to a career where I didn’t feel the inertia of a mundane day-to-day job. I think software engineering is a profession that appeals to me because the landscape of software is ever-changing and continuously presents new, challenging problems. Thus, it is necessary to be adaptable and always be learning new tools and technologies to solve things. While this is something that may be uncomfortable for some, I believe that this feeling of moving forward and continual growth is essential for my happiness.

Additionally, I enjoy working in a team with other people of diverse perspectives and skillsets. I think that working in a team environment is a great opportunity to propel both technical and personal growth.

OSU vs. Bootcamp vs. Self-Taught

I think most people attempting to switch into software development struggle to decide which path they want to take. While I think that bootcamps and self-teaching are perfectly valid paths towards becoming a Software Developer, I ultimately decided that going back to school was the correct choice for me. While it is true that most of the information needed to become a Software Developer is available online for free, I believe that it would be extremely difficult to learn the necessary material without any sort of organized course structure. Additionally, I feel that the Bachelor’s degree is still worth a significant amount to most employers. Pursuing a degree is necessary to apply to internships (which is often noted as the easiest way to get into a software role via return offers), and a Bachelor’s degree is listed as a requirement for most entry job listings.

Regarding 467 and Future Content

On the topic of jobs, my CS 467 group has decided that we will implement a Job Tracker as our capstone project! This will be a web application in which users will be able to track their applications to various intern/full-time positions, as well as add contacts.

This is a project that I am excited about because I can see it being extremely useful for anyone on the job hunt. I personally spent 6+ months sending 200+ applications this past year before landing my first full-time Software Engineer role. Perhaps the tribulations of my interview prep would be a good topic for a future post!

That’s it for now. If you have any thoughts or suggestions, please comment below!