Hi, I'm
Paul

Paul Struble

Introduction

My name is Paul Struble, and I am a software engineer and data scientist in the San Francisco Bay Area. I am currently an undergrad at UC Berkeley double majoring in Computer Science & Data Science. I have over 4 years of programming experience and have been involved in other areas of tech, namely PC hardware, for far longer. Most recently, I have been building skills for full‑stack web development, but my interests and skills remain diverse.

Skills

Programming Languages

Python
Java
C
SQL
JavaScript
HTML
CSS

Development

Docker
Git
Node.js
PostgreSQL
Express
Selenium
JUnit

Data Science

pandas
NumPy
Matplotlib
scikit-learn

Design

Illustrator
Photoshop
Lightroom Classic

IDEs

PyCharm
WebStorm
Intellij
VSCode

Projects

Python Selenium Postgres

bWork

GitHub

An automated webscraping tool for UC Berkeley's maintenance database. bWork is a suite of utilities for scraping work orders and work order requests directly from the UC Berkeley maintenance website to a local database. The program can automatically deploy parallel processes for high efficiency scraping, and an optional headless mode means that bWork can run silently in the background as well. bWork is currently the only way to access the entire database of 460,000+ work order requests and 740,000+ work orders.

bWork
HTML CSS JavaScript

paulstruble.dev

GitHub

My personal portfolio website. Personal info, contact info, projects, and everything else you see here. Everything on the site from HTML to vector graphics is designed and developed by me. This is my first web development project and uses raw HTML, CSS and JavaScript for the whole site.

PS Logo

Course Projects

CS 61B

NGordNet

Java

A webapp to visualize, explore, and analyze English word usage data over time and the semantic relationships between English words. The project involved designing various backend algorithms for the app, primarily focusing on efficient time series and graph traversal.

Wordnet
CS 61B

Build Your Own World

Java

A basic 2D game with procedurally generated worlds consisting of pseudo-random rooms and hallways. The game features keyboard input for player movement, interactive menus, seed-based world generation, saving/loading, and a replay module.

Build Your Own World
CS 61B

Deques

Java

Implemented efficient custom linked list and arraylist data structures in Java from scratch as well as additional methods/features for each. Tested implementations for efficiency and to ensure accuracy. Used these custom data structures to create a basic guitar-string synthesizer.

Deques
CS 61A

Ants vs. Some Bees

Python

Designed and implemented the backend for a realtime browser-based tower defense game styled after Plants vs. Zombies. Design was focused on the effective use of OOP in Python to make a modular and easily-expandable game environment.

Ants vs. Some Bees
CS 61C

Snek

C

A pure-C implementation of the classic "snake" game. The game runs out of the terminal and renders the board using ASCII characters which are updated each frame. Features multiplayer and custom playing boards.

Snek
CS 61C

CS61CPU

Logisim

Designed a functional RISC-V CPU with a complete pipelined datapath in Logisim Evolution. Designed modular datapath components and control logic from basic logic/circuit components.

CS61CPU
CS 61A

C.A.T.S.

Python

CS61A Autocorrected Typing Software: Designed and implemented the backend for a web-based type-racing game. The game features multiplayer, a WPM tracker, accuracy tracker, timer, (optional) auto-correct, topic search, leaderboard, and other features.

C.A.T.S.
CS 61B

Awakening of Azathoth

Java

An extension of the traditional "hangman" game written in Java. The game features a regular "hangman" mode, automated algorithms to play the game optimally, and an alternate "evil" gamemode in which the selected word is secretely changed after each guess so that the player always loses.

Awakening of Azathoth
CS 61C

CS61Classify

RISC-V.svg

A basic machine learning algorithm to classify handwritten digits coded completely in RISC-V assembly. Dot product, matrix multiplication, and other elementary operations were all implemented from scratch using only RISC-V primitive operations.

CS61Classify
CS 61C

CS61kaChow

A project focused on low-level optimization of the convolution (e.g. matmul) operation in pure C. The goal was to highly optimize the runtime of the convolution operation using various techniques such as SIMD operations, multithreading, algorithmic optimization, etc.

CS61kaChow
DATA 100

Home Price Predictor

Python

Developed a linear regression machine learning model to predict home prices in Cook County Michigan based on data published by the county. Development involved various data analysis, data engineering, and optimization techniques.

Home Price Predictor
DATA 100

Spam Email Classifier

Python

Developed a simple binary logistic regression model to classify emails as either "spam" or "not spam". Features were extracted and engineered from a large labeled dataset of real emails.

Spam Email Classifier