Intro to ML – Part 1 – Data Exploration

I was really drawn to the senior capstone project I chose on fire risk prediction largely due to my interest in ML. I’m excited to be joining a team after I finish my degree which works heavily in leveraging big data and ML algorithms for customer insights and it’s been really interesting getting to learn through my project a little more about what ML, well, actually is.

I thought it’d be fun in the next few entries if I walk through basic ML modeling in Python with Jupyter notebook. I’ve had a little exposure to this before but I’m basically re-learning as I go, and it’s been a fun and educational process.

The dataset that I am working with is from Kaggle. This is a great resource for learning ML and finding ML datasets. In my capstone project, we are working on proprietary data so as a substitute for this exercise, I am using the Kaggle dataset on US Wages. These are the dependent variables in my dataset, the first few rows, and the commands to display them in Jupyter.

We can begin to do same basic data visualization by running scatterplots. For example, there is a clear relationship between educational level and earnings based on what we see here.

You can see that the variables are the type that we may be able to use to estimate wages – height, gender, educational level, age, etc. Before we are able to run this as a model, notice that some of our variables need to be transformed — you can’t plug “white” or “female” into an equation! We do this by breaking down the variables into dummy variables using the following command.

Thanks for joining me as I explored and learned about basic data loading and visualization in Jupyter Notebook. Please continue to follow me in the upcoming weeks as I start implementing some basic ML tools!

My Favorite Things

In this post, I will be talking about my favorite technologies and where they may be more usefully applicable. In my time during OSU, I’ve been fortunate to be exposed to a variety of programming languages and frameworks. Although I am by no means an expert on any of these, I’ve learned where different ones have been the most helpful for me, personally and would love to share that.

Getting Started

Starting out in programming is a challenge in and of itself, so it’s definitely great if the technology being used doesn’t get in the way.

For those who are just starting out creating a web application, I would recommend the following:

Front-end: ReactJS

Backend : nodeJS

Prior to starting my program at OSU, I picked up these languages in order to help me create a basic web application. One of the most helpful things about them is the large amount of documentation available online introducing these to beginners and showing beginners how to link them up in a working web application. One good example is: https://www.freecodecamp.org/news/how-to-create-a-react-app-with-a-node-backend-the-complete-guide/

One of the best things about JavaScript-based frameworks is that they are very intuitive and the language is handling a lot of the different components that are more challenging to do manually (i.e. memory allocation, trash collection).

Data Structures and Algorithms

I have a strong preference when I have interviewed for DS&A problems to work in Python. Python is the introductory language that we learned in my introduction and intermediate CS classes here at OSU, as well as the one that I preferred to use during the intro to data structures and advanced algorithm classes.

The best thing about Python for me has been it’s easy to code in it — fast! The syntax is quite simple and almost similar to pseudocode. It is easy also very easy to learn. Similar to JS, a lot of the more complicated handling is done behind the scenes. However, it can also be used for object-oriented development so it is quite versatile.

Python is also very good because of it’s usefulness in data science. In my current project which I will cover in future posts, we are building a machine learning model and working with a data pipeline. We are doing this using Python.

I have to admit, Python is probably my favorite language 🙂 When I was interviewing for jobs, I was very attracted to teams that did a lot of build in Python even though I think it may not be the fastest for scalability.

Low-Level

One of the most challenging but interesting classes that I took at OSU was Assembly Language. I had no idea that when I was writing a simple if statement or declaring a variable, so much was going on behind the scenes in terms of stacks and re-direction — and I found out while implementing simple programs in MASM! This class made me realize that it’s actually pretty interesting to know what’s going on under the hood. This is what brought my interest in C. In my OS class, C was the main language that I had used. It shared some similarities to C++ which I used in prior classes but was even more low-level than what I was used to – I couldn’t declare a string!

The great thing about C is the many libraries with built-in functions and how efficiently the code can run for a multiple of applications. It also did offer dynamic memory allocation. Working close to the hardware for doing multi-threading and infra was a very useful skill to pick up for me even though it was challenging.

Out of all the languages I learned, I think C’s closeness to the hardware and great portability potentially make it the most useful that I’ve learned. I hope I can take what was taught in the OSU classes to my future career writing programs in lower-level languages.

Thanks for exploring some of my favorite technologies with me! See you next week 🙂

The End of the Tunnel

In this post, I will be concluding my career search and how it turned out, including the factors that went into my decision for choosing my future career.

The Waiting Game

For me, one of the biggest challenges of the whole job application process was waiting. I tend to be overly pessimistic regarding my interview performance and I become very anxious waiting for the company response, sometimes wishing they would just put me out of my misery and reject me! It was a tough time. Some things that very helpful was remembering to be mindful and still find enjoyment with other aspects of my life – spending time with family and friends and doing active activities to expend the nervous energy like tennis and bouldering.

Something that I made sure to do was to keep recruiters informed very early of other deadlines and interviews that I was doing so that they would be able to expedite decisions if needed and understand if I needed to reach out later. In general, the recruiters I worked with were all very respectful about trying to get me a timely decision.

The Results!

For the sake of confidentiality, instead of writing down the exact organizations I received offers from, I will just give the general category that they fall under. Overall, I received offers from 2 FAANG/tech giants, 1 unicorn start-up pre-IPO, 1 unicorn startup post-IPO, 1 Big 4 consulting firm, 1 large healthcare organization/non-profit, and 1 established fintech giant. Every time I got an offer, I was so grateful and ecstatic! When I started the program 2 years ago, I had no idea that my world would be opened up to so many opportunities. Throughout the program, I was very guarded regarding my optimism of what my job search was like and I felt I’d be extremely lucky to get even one software developer role — and understood it might take several months of searching even post-graduation in order to find a role. I never would have dreamed of being able to choose between multiple options that I was really excited about. I also believe the job market at this time for software developers is currently very hot, and feel blessed that I’m able to kick off my SWE career in these market conditions.

It took a lot for me preparing and undergoing the interviews and waiting to hear back — but I was about to find out the hardest part is deciding what offer to take! Being naturally very indecisive and my passion for all the roles I was lucky to receive left me (and my poor husband!) in a very difficult deliberation process.

Decision Factors

These are the main factors that I used to help me decide where I wanted to start off my career. I hope this can help others in the same place make a decision they can feel comfortable with. Ultimately, I do worry about FOMO and regret with committing to anything but I know that all we can do is our best and to look forward and not back.

  1. Growth opportunities – I think ultimately the main thing I was looking to get out of my first job is a place where I can explore, take ownership, and contribute largely to products in the organization. There is a balance between scope of impact in larger organizations where I may be working on a product that millions use but only doing bug fixes. On the opposing side, in smaller companies, opportunities for growth and ownership of new features is a lot more prevalent, while the scale may be smaller.
  2. Interesting work – I wanted to work on products that I find cool. This is part of what drove me to want to be a software developer – the possibility of contributing to my favorite apps!
  3. Culture – Company culture is a big deal for me as I feel like pressure can be a large detractor even from interesting work if there is a toxic or pressure-cooker setting. Some organizations offer amazing benefits in aspects such as remote work, 401k matching and PTO and these really spoke to me about how employee-focused they were.

Other factors that I weighed less heavily included:

  • Total compensation – most jobs had a standard new grad package that were all fairly competitive (particularly compared to my current salary!) Given the investment that my family made into this program, I just wanted to make sure there were sufficient returns to payoff for them.
  • Location – like I mentioned in my initial post, it has been important for me to stay close to my family and the flexibility to work remotely or be placed in a physical office in my current location weighed into my decision.
  • Prestige – I definitely didn’t want this to be a deciding factor for me, but I did love being able to tell my parents about my offers in organizations they knew and respected 🙂

The Decision

After much struggle and backtracking, I decided to go with the large fintech post-IPO unicorn over my other options. Ultimately, I loved the team that I was placed in and I also felt compared to the tech giants, it would allow me a better place to grow and take ownership of the work I’d be doing. I really connected with my interviewers and the problems that they were solving and the benefits and TC were better than I had ever expected. They were established enough that they did have name recognition with family and friends and job security regarding the future of the organization.

I admit it was a struggle to turn down other organizations that were better known among the non-tech population or seemed like they would offer better work-life balance. However, I couldn’t imagine a better place for me to be starting off my career.

Thank you for following me through this journey of my job application process! It’s been wonderful to share the experiences that I went through. In the next posts, I plan to dive deeper into the course that initiated this blog — my senior capstone project and what I’m learning along the way!

Starting my future career!

Hi! In today’s post, I am going to talk a little about my job search. When I started the program, my hope was that I could transition into the industry of Software Engineering so this has pretty much been the culmination of these past years at OSU.

Humble beginnings

My job search started during my first year of the program. I had learned from other devs that it is good to get an internship — at this point, I was very inexperienced with the whole interview process! I applied to only a couple places in my area (Seattle) that were looking for interns. The only interview I got was Flexport, and I was so grateful for the opportunity and also really interested in the work they do! I made it through the tech screen and OA with basically no background in leetcode (more on this later) — but didn’t get through the final onsite because they were looking for someone with a little more experience. They were very encouraging to me and overall I was glad to have a chance to go through the interview process.

The start of the new grad job search

It gave me a good intro as I was about to begin my second year, and as others know, the interview process for June 2022 jobs starts almost in June 2021! This time I was armed with information from my first experience, and I applied to every interesting-sounding new grad job in my desired areas that I could find. Probably did over 200 job applications.

The Process

Most of the jobs that I applied to followed a standardized process that was some form of the following. In my past roles, it was just one or two behavioral interviews before getting the offer. Software development roles were the first that I’ve experienced with so many loops to jump through!

  1. Resume screen. Applying through new grad portals I think means the application goes into a big pool that recruiters sort through to determine who they want to move forward with. Some of the companies that I was super passionate about, like Microsoft and Boeing, didn’t seem to move me past this stage and I was really sad I didn’t have a chance to prove myself. BUT — near the end of my application process, when I had given up all hopes and months after I applied, both reached out to me for interviews. So there is always hope!
  2. OA (Online Assessment). Some companies go straight to this step, which I actually think is a great choice for giving all candidates a chance to prove themselves. I recall that eBay, Adobe, and Pinterest were among these companies that sent applicants directly to this step, so these might be good companies to look at for anyone just wanting to get their foot in the door! The best prep for OAs (and tech screens!) for me has been leetcode. The other is reviewing what we learn in the Advanced Algorithms and DS&A class.
  3. Tech screen. Leetcode is the key to this one! I have a little bit of public speaking anxiety so I didn’t want my nerves to get in the way of demonstrating my problem-solving. Having practice solving similar problems was so helpful. Other than that, I tried to just concentrate on having fun pair-programming with the devs from the org and learning more about what they do! They were potential future coworkers 🙂
  4. On-site. I had to prepare to be tired from these! These would range from 3-5 hours of interviews with various members of the team – typically company engineers and at least one engineering manager. Two or three would be coding interviews which followed similar processes to the tech screen and at least one would have a behavioral component. I made sure before going into these to write out some scenarios I thought they’d ask about (projects, challenging situations, long-term goals) so that I’d be prepared.

Every time I proceeded through one of the steps for these interviews, I was exhilarated and exhausted! A huge source of support and encouragement for me was my husband, who is a SWE himself with several years of experience. He was awesome to talk to about my options, how best to prepare, calm me down when I was panicking about nothing, and most of all, do many, many hours of leetcode with me!

The light at the end of the tunnel

This post is getting quite long so I will continue through my journey in future posts. Overall, I was overwhelmingly grateful for the opportunities that I received throughout my job process. People have described it to me as a numbers game and that really sums up my experience. Out of the ~200 applications I sent out, I received OAs on roughly 30 of them, tech screens on about 15 and on-sites for around 10. Out of these, I received 7 offers which I was really thankful for!

Please continue following to see what these offers were, the excruciating process of deciding, and where I will be beginning my career!