Interview Experience

Photo by Ru Yang, Summer 2022

I started my job hunting in 2022 Fall and experienced many interviews during the following three months. So I want to share a bit of my thought about interviews for new graduate positions. Most interviews I experienced can be divided into three kinds: HR/Recruiter interview, technical interview, and behavioral interview.

HR/Recruiter Interview

Usually, most companies put this interview as the first round. And it is also the less-pressure round for the candidates since it normally costs 15 – 30 mins and won’t involve too many technical questions and tricky behavioral questions. Before this kind of interview, I usually prepare a personal introduction, do research about the company (culture, business scope, recent news, …etc.), and rechecked the job description for which I applied. During the interview, most of my answers are around my research content.

Technical Interview

Personally, I feel it is the most difficult part of the whole interview procedure since different companies have different technical preferences. Even if they have the same technical requirements, they may have different expectations of the proficiency level and test you in different ways. For example, they may all require you proficient in Python and know data structure and algorithm but may test you using different level coding challenges. Moreover, some companies may not use coding challenges. They prefer to ask you technical questions directly such as can you explain what is lambda function and give an example?

For coding challenges, I used Leetcode and school lectures about data structures and algorithms to help me prepare. It is a kind of frustrating process. I still remember that, in the beginning, I even felt hard to understand the solutions to easy questions. The key is persistence. After fully understanding 300+ leetcode questions, I got some good feelings during the coding challenges. I usually check with the recruiter what the format will be for the continued technical interview. If it is technical questions, I will go over the contents around the requirements in the job description. Another key is don’t be afraid to ask questions or speak out your ideas. It is a communication process, and most of the time the interviewers won’t expect you can give the best solutions within a short time. From my experience, they are glad to give you hints to guide you in finding the solution.

Behavioral Interview

I didn’t perform well during the first several behavioral interviews cause I underestimated it and didn’t prepare before it. After, I did a lot of research about how to prepare for the behavioral interview. Personally, I feel the mock interview is the most effective way for me. When googling “behavioral questions”, there are many examples pop out. I usually select 10 – 15 questions according to my experience level and the positions applied. Then let one of my family members ask me those questions, and I will try to use STAR format to respond to each question. After my response, I will ask my family member’s suggestions and then respond to the question one more time according to their suggestions.

Refactoring and Design Pattern Learning Resources Sharing

Photo by Ru Yang, Spring 2022

The first time I hear about the concepts of Refactoring and Design Patterns is in the course CS492 Mobile Software Development. The course taught me some knowledge about how to write code without smells and how to use Singleton (a very popular design pattern) to write maintainable database code. The idea behind it is to centralize database code in a singleton database manager class to ensure that only one instance of an object may exist. Recently, I found an interesting website occasionally, Refactoring Guru, which introduces Refactoring and Design Patterns in a very interesting way.

My thought about Refactoring and Design Patterns

Before talking about Refactoring Guru I want to share a bit of my thought about Refactoring and Design Patterns. In the past, almost every project I worked on is a school individual project. Most time I spent on those projects was focused on functionalities. So I have to admit that I didn’t develop good coding habits. Recently, I went back to check the code of my previous projects. There are much obvious code smells such as one method doing many tasks, inconsistent code styles (some variables use camel case, and others use snake case), comment-out codes and etc. Along with time, I found that I even didn’t understand some parts of the code I wrote before. It reminds me of the topics about Refactoring and Design Patterns.

Intro Refactoring Guru

Refactoring Guru is an interesting website I found recently. I was attracted by this website when a first opened it. I felt that I was reading an electric comic book because it includes many comic illustrations. Containing many interesting illustrations doesn’t enough to make it stand out. It also explains every design pattern clearly and detailed. Each post content includes the problem this pattern intends to solve, how to implement, pseudocode, pros & cons, relations with other patterns and etc. Besides, there are lots of images and graphs included to help users better understand. In addition, for each design pattern, there are code and usage examples in popular development languages (Python, C++, Java, PHP…etc.).

Conclusion

Like many beginners in software development, I put my most effort into how implementing functionalities in a smart and effective way. However, writing clear and tidy code is also important, especially in real-world team projects. Learning refactoring and design patterns could help me to become a more professional developer.

Link to Refactoring Guru

https://refactoring.guru/

An Unexpected Problem

Photoed by Ru, Summer 2022

I enjoy coding. Learning new knowledge and completing a project successfully excite me the most. However, life is not always full of joy. Problems and bugs will never be absent in every development process. Especially when working in a team, you might have chances to meet some peculiar problems that are caused by an unexpected thing. If bugs and problems are inevitable, why not treat them as a learning process? I am going to share a new problem I met recently.

A New Problem Occurs During Environment Setup

This quarter, I started work on my Capstone team project. Our team decided to use a popular technical stack (MERN) to create a Job Tracker web app. Early this week, I took charge of the environment setup. I checked several online tutorials, built and test locally, push them into Github Repository and then send the setup instruction to our group chat. Later on, one of my teammates reached out to me and said the Frontend did not work properly on her end unless she made a change on a line in the client-side package.json.

The code I wrote.
The code worked on her side.

I tried to reproduce this problem on my side, however the code I wrote worked properly on my end. Then I changed this line to her code, and the weird thing happened. The code that worked on her side did not work on my end. Curiosity caused me to google this problem. Finally, I found the problems were caused by the different operating systems. The syntax I used only works on Linux and macOS. The syntax which worked on her side is for windows.

A Bit of Thought

It is a new and interesting problem for me since most of the projects I did before are individual projects. When I did research about the MERN stack setup, I only paid attention to the mac version info. I didn’t expect this problem to be caused by different syntaxes on the different operating systems.

I guess I should consider more when working in a team. Instead of starting working on a task immediately, I should take some time to think about what kind of factors might cause issues so that I could be careful when working on the task.

First Post: About Me

Photoed by Ru Yang, Fall 2022

Hi, There!

My name is Ru. I used to work in the logistics industry for around three years before starting the Post Bacc Computer Science program at OSU. I started this program in the Fall of 2020 and it took me around two and half years to arrive at the final course – Capstone. After graduation, I will start my first full-time Software Developer job. I feel it is time to talk a bit about my career switch.

About the Switch

Not like people who already have a specific career plan in school, I did not think too much about my career after getting my previous degree. I was referred by one of my friends to the logistics industry. I would say it is not a bad choice. Because it is stable, less-pressure, and has a work-life balance.

There are usually a lot of different factors that drive the decision. For me, the most important one is that I want more challenges. At the beginning of my previous job, I did learn a lot. However, as time passes, I started doing the same work every day following the operation procedure. It forced me to start thinking if that was what I want to do.

A career switch is a big decision for everyone. It did not occur smoothly and quickly for me as well. It took me half year to make the final decision. In the first stage, I did a lot of research on major selection and narrow it down to computer science, finance, and data science. After that, I took several online intro courses in those three areas separately to make sure which one I am interested in most. Finally, I consulted several friends who are software developers and want to have a basic concept of this industry.

About the Future

Last Fall, I started my job hunting. I got a lot of tips and inspiration about interview preparation from the discussion board in the course CS 361 Software Engineering. After several months of stressful but interesting interviews, I finally got a new grad offer in my target area. It is an end, but also a start.

Being new to my professional career, I believe that there will be so many things that I have to learn. It makes me feel excited! I set a three years goal for myself. In the first two years, I want to enrich myself and make up the gap between school and industry. In three years, I see myself having the capability to lead and own multiple projects from end to end. Till that time, I will have a more comprehensive understanding of my work area. Then, I want to go deep into this technical area to see how far I can reach.