Work On A Team

Since most of my CS learning experience are online courses, there were only a few group projects throughout the process. This capstone project was definitely a great experience for me to work on a team of 3.

People have different work schedules and styles. I’m always interested to see how other team members are good in different ways. For example, some enjoy project management and take the initiative to manage the sprint board while others may be CSS experts. I’m amazed by the fact that I always learn something new from those I’ve worked with.

People have different coding styles and ideas for projects as well. Throughout the project, we’ve discussed coding conventions several times, as well as design questions like how we want to structure the request bodies, how we should implement the user authentication, and how we should design the user flows. I’m happy that we were able to express our thoughts freely and we always came to a consensus in the end.

At the end of the day, most jobs require you to work on a team and collaborate with others. I really enjoyed working on the capstone project with a team and I’m grateful for my team members who were dedicated to the projects and easy to work with.

Two Questions I was asked in an interview

Taking a break from our capstone project, I thought it would be fun to share two questions I was asked when I interviewed for my previous Software Engineer position.

Technical or not technical?

I don’t remember what phrase my manager used to describe those questions during my interview. They’re not questions regarding your knowledge of any programming language, and they don’t really require you to code. When it’s my turn to interview new entry-level software engineers, I still asked these two questions (it somehow became a tradition in the dev team recruitment), and I called them “problem-solving” questions. So what are the questions?

Two Integers

You have two integer variables, a and b, both were assigned a value, how do you swap their values without using any extra space, i.e. without declaring a third variable?

Random Integer Generator

You have a function that generates a perfectly random integer between 1 to 5 (inclusively). How can you use this function to generate a perfectly random integer between 1 to 25 (also inclusively)?

Why I love these two questions? They are both a little bit tricky since they block out the most obvious solutions. No, you cannot create an integer c to temporarily store the value of either a or b. No, there isn’t a function that returns the answer for you. Both questions require you to take a detour and find a different solution. If you come up with a solution right away, good for you! Then you might be amazed how many candidates got stuck with them. A candidate once asked why I was asking these questions. What’s the point not using the most obvious way? Well, I love these questions since it gives me a hint about how a candidate solves a new problem. Can you utilize whatever you have to crack the problem? What approaches could you try to solve it? Can you think outside of the box? I believe how a candidate deals with these problems reveals how they would perform when they’re facing real-world problems. 

Answers

If a candidate got stuck on the first question, The first hint I always gave was “think of it as a math question”. Still stuck? “Why don’t you start by adding b’s value to a? What you be your next step to solve it?” You probably have figured it out now (or at the beginning) – we can’t use extra space, but we can manipulate the values. Here’s one way to solve it:

a = a + b

b = a – b (we get b equals a’s original value)

a = a – b (we get a equals b’s original value)

The second question is a little trickier. Many first guess I got was random5() * 5. But can you get 17 out of it? No. So it’s not perfectly random. What about random5() + random5() + random5() + random5() + random5()? You won’t be able to get 1. We can think of 1 to 25 as 5 groups of 5 integers, group 1 is 1 to 5, group 2 is 6 to 10, and so on. How about we get a random 1 to 5 to decide the group first, and we get another to decide the integers within the group? This sounds perfectly random for me! The answer can be written as:

(random5() – 1) * 5 + random5()

 

These questions are not hard at all once you know the answers, right?

MOOCs for CS Newbies

Since we haven’t really started to dive into our project, I want to share with you a few MOOCs (Massive Open Online Courses) that I found extremely helpful for my CS journey.

Are MOOCs good for me?

When I decided to make a career transition into software engineering, I had a hard time deciding what would be the best way for me to achieve my goal, so I tried out different approaches. I enrolled in OSU’s Post-Baccalaureate Computer Science program, I joined a web development bootcamp, and I took several MOOCs from renowned universities. It’s hard to tell which is the best way for everyone – I believe it really depends on personal experience. For me, I had an internship opportunity through OSU’s CS program and I built my portfolio through the bootcamp and landed my very first full-time software engineer position, but when it comes to with which I had the most fun, it’s the MOOCs. And here’s the best part – it’s completely FREE.

If you’re determined and self-disciplined, I definitely recommend MOOCs. There’s nothing you can’t learn freely on the internet.

My Recommendations

Here are some of the courses I took and really enjoyed. The courses were taught by amazing instructors with interesting projects, and yes they can be quite intense, but they’re fulfilling and rewarding at the same time.

CS106A: Programming Methodology (Stanford University)

This was the very first course I took when my CS journey started. I had no experience in programming at that time. I couldn’t think of a better choice! The course was taught in Java. The course was very interesting and it covered a lot of basic programming topics. What I like the most was that the instructor showed us the importance of problem-solving. It’s not only about the syntax. It’s about how you can creatively and elegantly solve a problem.

CS 61B: Data Structures (UC Berkeley)

This course was also taught in Java. It intensively covered main data structures and some algorithms and provided really clean code examples. It also included interesting projects that I even included one of them in my portfolio.

Coursera: Algorithms (Princeton University, Part 1 & 2)

A deeper and more comprehensive learning in algorithms. Also taught in Java with clean and precise code, and it provided clear explanation and demonstration to help you understand the algorithms.

Some other MOOCs I Heard Were Amazing Too

Udacity: Introduction to Computer Science

A CS introductory course in Python.

CS 61A: Structure and Interpretation of Computer Programs (UC Berkeley)

Another CS introductory course in Python that will improve your Python skills significantly.

CSE351: The Hardware/Software Interface (University of Washington)

A classic CS course in C programming language with really interesting projects. The next thing on my list after the capstone project!

Hope you find these courses helpful cause I surely did!

Becoming A Software Engineer

Welcome to my blog for the CS467 capstone project. To get started, I want to take a moment to share my journey so far.

Where It All Started

I majored in Business back in college, but soon after entering the industry I realized it’s not where my passion lies in. I then had the opportunity to work as a system analyst for a couple years, designing in-house softwares for our employees and sales representatives. I’ve sharpened my skills in various fields including communication, product management, database design, SQL language, data analysis and visualization.

The Transition

Having been working closely with software engineers, I became more and more interested in software engineering and I decided to make a career transition when I moved from East Asia to the US in 2019. I started this post-bacc computer science program at OSU, during which I also took a little detour and completed a web development bootcamp. I also found some really great MOOCs (Massive Open Online Courses) that were extremely helpful in deepening my knowledge and working on interesting projects. All the experience and hard work combined, I landed my first software engineer job at a small e-commerce start-up in 2020 after being a full-time student for about a year. The funny part of it is I’d used and was rather good at Java, Python, C++ and the MERN stack, but I was hired for a C# developer position. One more item to my skill set!

In the summer of 2021, I interned as an SDE at Amazon for 12 weeks. The experience once again broadened my horizons. I’ve learned so much in the design process for my intern project: coming up with solutions, evaluating them from different aspects, and conducting design review meetings with the whole team. More importantly, I learned to write better and cleaner code each day through my internship. The experience was invaluable to me cause it showed me how a good software engineer works and led me to keep working to become a better one.

What’s Next?

This is my last term at OSU. I don’t know which capstone project I’ll be working on just yet, but I’m super excited to learn new skills and work with new teammates. Will keep you posted!