Welcome

Ephram
Grant's
Homepage

My personal website, updated regularly. Contains my interests and resume.

Hobby

Music.

I've been listening to an album a day for the past ~8 months. I primarily listen to Alternative Rock and Metal, but I recently have been branching out into other genres.


Album of the Day

Loading…

Favorite Artists

Radiohead

Radiohead

Alt Rock · Active since 1993

My favorite songs are How to Disappear Completely, Let Down, and Man of War. Discography ranked:

  1. 1 OK Computer (Near Perfect Album)
  2. 2 In Rainbows (Amazing but a few songs are just ok)
  3. 3 Kid A (High highs but I dislike a few songs such as the title track)
  4. 4 A Moon Shaped Pool (Extremely heartfelt and very consistent album)
  5. 5 Hail to the Thief (Underrated with maybe their best open/closing tracks)
  6. 6 The Bends (A little overrated but still amazing)
  7. 7 Amnesiac (Some good songs and life in a glasshouse is awesome)
  8. 8 The King of Limbs (Very laidback album but codex is a top 10 radiohead song)
  9. 9 Pablo Honey (Creep is radioheads best song)
ExperimentalMelancholic
Willy Rodriguez

Willy Rodriguez

Noise Pop · Active since 2021

Critically underrated. Composed of anonymous duo Gabe and Alex. They have since disbanded, but Alex has continued making music under the moniker Drug Bug (The new album "Hell for a Basement" is great). Wetdream is a top 5 album and Revisited is a top 5 song.

Wall of SoundUndergroundEmotional
Have a Nice Life

Have a Nice Life

Dark Shoegaze · Active since 2000

Highly experimental and dark sound. Primarily known for their 2008 album Deathconsciousness which ranks in my top 5. They served as an entry point into shoegaze music for me.

Post-industrial doomgazePost-Punk

Album and EP Rankings

Album Artist Genre Rating Notes

Listening Stats

Loading…

Listening Map

Sourced from RateYourMusic from the "Currently", "Born", "Formed", or "Work Relevant To" sections with completely arbitrary methodology. It can take a few minutes to load.

Loading map…
Music · World Cup 2026

Music Passport.

One album per country in the 2026 FIFA Mens World Cup. Click a country to mark it as listened. Some countries were difficult to find an artist, artists at least have heritage if they are not born in the country. If you have reccomendations for a different/more notable artist from a less popular country, let me know.


Hobby

Gaming.

I have been playing videogames for the majority of my life and it is one of my most consistent pastimes. I primarily play on PC and Nintendo Consoles. I try to have a blend of singleplayer and multiplayer games.


All-Time Favorites

Portal 2

PC · 2011 · Valve

My favorite game in both of its primary genres. I beat this while in a call with friends and it is one of my favorite gaming experiences.

PuzzlePlatformerSingle-Player

Elden Ring

PC · 2022 · FromSoftware

Beating this game is so rewarding, the large number of amazing bossfights and interesting lore make this game unmatched. I've replayed it 4 times.

SoulsborneAction RPGChallenging

Terraria

PC · 2011 · Re-Logic

The ultimate survival sandbox game (Sorry MC). Amazing bosses, loads of items, unique classes, and fantastic mod support have given me thousands of hours of fun.

IndieSandbox2D Survival

Currently Playing

I'm working through the Dark Souls Trilogy and I just picked up Yoshi and the Mysterious Book.

Hobby

Cubing.

I've been solving twisty puzzles for over 10 years, although I've never entered a competition. I love developing algorithms and solving new puzzles.

17.89 sec3×3 PB
3:90 sec2x2 PB
MegaminxCurrent Favorite
Too ManyPuzzles owned

My Collection

3×3

Most Owned / Favorite to fidget

I own over 20 different 3x3 cubes. It's the classic! I primarily just mess around with it and I don't put too much emphasis on learning new algorithms

2x2

Competitive / Best

The 2x2 is my best event and the one I practice the most to improve competitively. I'm still somewhat inconsistent but this is by far my best

Pyraminx

First Solved / Self-Developed Algorithm

This was the first twisty puzzle I solved and I developed the algorithm myself in 2nd grade. It took me a few days to figure it out but I still have great memories associated with it.


Method & Goals

I use CFOP to solve. I'm currently working on memorizing more OLL algorithms. I also recently have tried blindfold solving. I haven't successfully completed a blindfold solve, but I've gotten very close!

Hobby

Sports.

I love to watch most sports, but I primarily focus on the two forms of Football. I played Soccer for most of my life growing up and was terrible at every other sport I tried.


Teams I Follow

Liverpool FC

Soccer · Premier League

I've been a Liverpool fan for a while but I began consistently watching games and interacting with team media around 2019. My favorite current players are Ekitike, VVD, and Szoboszlai.

You'll Never Walk Alone.
Loading latest data…

Philadelphia Eagles

American Football · NFL

I've been an Eagles fan my entire life and I don't regret it. I dyed my hair green when the won the Super Bowl in 2018.

Fly, Eagles Fly
Loading latest data…
Hobby

Books.

I love to read and I want to catalog some of my favorite books.


All-Time Favorites

Good Omens: The Nice and Accurate Prophecies of Agnes Nutter, Witch

Neil Gaiman and Terry Pratchett · 1990

Hilarious religious comedy surrounding an angel and demon working to prevent the apocalypse. Constant humour that lands every time for me.

If you stop tellin people it's all sorted out after they're dead, they might try sorting it all out while they're alive.

Skulduggery Pleasant

Derek Landy · 2007 - Present

My favorite book series. Contemporary fantasy set primarily in Ireland that follows the title character Skulduggery Pleasant, a wisecracking, skeleton detective and his partner Valkyrie Cain as they fight supernatural and world-threatening battles. There's currently 18 main series books spanning 3 phases and a number of spinoffs. The first phase (books 1-9) is the best.

He's dead. She's deadly. The bad guys don't stand a chance.

Ender's Shadow

Orson Scott Card · 1999

Science Fiction novel surrounding a temporarily unified Earth sending the smartest children to a space station school to teach them to become commanders to defend Earth following numerous attacks from "The Formics" a bug-like alien race. Ender's shadow is a parallel novel to Ender's Game, and follows Bean, a small, hyper-intelligent child as he goes from a homeless child to working with Ender, the main character of Ender's Game. Shadow is also the precursor to a series following Earth's political state after *spoilers* happens.

We are, when the cause is sufficient, insane.

The Hitchhikers Guide to the Galaxy

Douglas Adams · 1979

Comedy Science Fiction novel following the last man from Earth after its destruction to make way for an intergalactic highway. Saved by his alien friend, a writer for the guidebook and encyclopedia whence the name of the book is derived, they travel throughout the galaxy meeting many characters and going on many adventures.

So long, and thanks for all the fish.

To-Read List

Dungeon Crawler Carl - Matt Dinniman. Invincible Compendium Book 3. Children of Dune - Frank Herbert.

Projects

Games.

Browser games I've built. Click any to play.


Game


Resources

Coding.

I want to provide a resource detailing resources to learn how to code. If you are starting with no experience, start with basic programming concepts. If you are unsure on which language to start with, I recommend Python.


Coding · Basics

Basics.

There are many differences between programming languages, but all of them utilize most or all of these concepts to varying degrees.


Variables & Data Types

Storing information is key to creating programs. This allows you to save data, perform operations on it, and transfer it to other parts of your code. The types of variables available and how they are used vary throughout languages but generally there are a few consistent types.
Integers: Whole numbers (positive/negative). Often shortened as int.
Strings: A collection of symbols/characters. Stores words or phrases.
Floats: Decimal number. Often have different types based on the number of digits after the .
Character: A single character. Some languages just count it as a string. Often shortened to Char.
Boolean: A true or false value. Often shortened to bool.


Control Flow

Control flow determines what code runs and when. Without it your program would run top to bottom and always do the same thing. The core tool is the conditional statement.
If: Runs a block of code if a condition is true.
Else: Runs if the condition is false.
Else If: Checks another condition if the previous one was false. You can chain as many as needed.
Conditions use comparison operators: == (equal), != (not equal), >, <, >=, <=. Combine them with && (and), || (or), ! (not).

If-Else Statements Flowchart

Loops

Loops repeat a block of code multiple times without writing it out repeatedly. There are two main types found across most languages.
For Loop: Repeats a set number of times. Used when you know how many iterations you need, such as going through every item in a list.
While Loop: Runs as long as a condition is true. Used when you don't know how many iterations you need, such as waiting for user input. Be careful — if the condition never becomes false you'll create an infinite loop that freezes your program. For example, if I write a while loop that will continue looping until x > 10 and x never changes, the program will continue running until it crashes.


Functions

A function is a reusable block of code that performs a specific task. You can define it once and call it whenever you need it instead of writing the same logic repeatedly.
Parameters: Inputs passed into a function that change how it behaves.
Return: A value sent back to wherever the function was called from. Functions that don't explicitly return and anything just perform an action. often return a value with no information such as a void, null, or none.
Helper Functions: A function that is used inside of another function. Good functions do one thing, do it well, and have a clear name describing what that thing is. For example, I can have an "Add" function that takes into two numbers as parameters and returns their sum. It is considered bad practice to also have this function multiply. Instead, create multiple functions and use the specific function when its specific task is needed, including inside other functions.


Arrays & Collections

Arrays and collections store multiple values in a single variable. Items are accessed by position, called an index. Most languages index from 0, so the first item is at index 0.
Arrays: Fixed-size ordered lists. Size is set when created and cannot change. These are useful when you know the exact amount of items in advance.
Lists: Work like arrays but can grow and shrink as you add or remove items. These often have downsides compared to Arrays such as being slower and should generally only be used if necessary.
Dictionaries: Store key-value pairs instead of indexed items. These are unordered. You look up a key to get its associated value, similar to a real dictionary. For example, I can search the dictionary for "Hello" (key) and it would return whatever value is stored under "hello" such as the definition of the word (value).


Object-Oriented Programming

Object-Oriented Programming (OOP) structures code around objects — bundles of related data and behaviour. Most modern languages support it, and some explicitly require it.
Class: A blueprint defining what an object looks like and what it can do.
Object: A specific instance created from a class. A Dog class defines that all dogs have a name and can bark — each individual dog you create is an object.
Creating classes allows you to separate your code effectively. This is very important because it can cause issues if your code is linked in a single program


Variable Scope

Variables are generally defined to the place where they were created. Variables that were created inside of a function or loop can usually not be accessed outside of these locations. The place where a variable can be used is called its scope. A variable that is usable anywhere in the program has global scope. Many languages have ways to define global variables, but these are generally frowned upon and considered bad practice to use. This is because the entire program being able to change a value makes tracking bugs extremely difficult. This problem compounds as programs get bigger, so I recommend making sure you build habits of not using it as soon as possible.


Challenges

Each language section on this site includes challenges at the end of every topic. These are short practical exercises to reinforce what you just read with practice tasks. The best way to learn programming is to actually write code, not just read about it.

To complete them you have a few options.
IDE: An IDE (Integrated Development Environment) is a program that lets you write, run, and debug code. Good free options are VS Code (works for everything) or PyCharm for Python specifically. IDE's often come with many helpful extensions or features such as autocompleting text and clearly highlighting errors. Use Youtube to find videos on setting up an IDE.
Browser: No setup required. Sites like Replit let you write and run code directly in your browser for free.
Notepad: You can write code in any online text editor. This works fine for simple exercises, but is generally unintuitive.
Paper: Perfectly valid for tracing through logic and understanding what code does before you run it. Known as "tracing" or "desk checking". This is convenient and easy to do, but you can't run your code to check for small errors.

Coding · Python

Python.

Python resources and guides for beginners and intermediates.


Getting Started

Python is designed to be readable. It uses indentation to define blocks or sections of code, instead of curly braces like many languages. No semicolons are used at the end of lines, another common requirement (and source of frustration) in many languages. There are also no type declarations (Python figures out that 5 is an integer without you having to tell it). It's the most beginner-friendly language to start with.


Data Types & Variables

int: Whole numbers.
float: Decimal numbers.
str: Text in single or double quotes.
bool: True or False.
None: Represents the absence of a value.
Regular variable names are conventionally lowercase with an underscore between words. Constants, or named specific bits of information that do not change are often fully capitalized with underscores between words.

Python
name = "Ephram"
age = 21
height = 5.11
is_student = True
nothing = None
EYE_COLOR = "Brown"

print(type(age))
x, y, z = 1, 2, 3  # multiple assignment
Challenge

Create variables for your name, age, and favourite number. Print each one on its own line.

Python
name = "Ephram"
age = 21
favorite_number = 7

print(name)
print(age)
print(favorite_number)

Control Flow

Indentation defines the block. No curly braces are needed. Colon is required after every condition.
elif: Python's version of else if.
match (3.10+): Checks one variable against multiple values, similar to switch in other languages.

Python
score = 75

if score >= 90:
    print("A")
elif score >= 70:
    print("B")
else:
    print("C or below")

# Match (Python 3.10+)
day = "Monday"
match day:
    case "Monday": print("Start of the week")
    case "Friday": print("End of the week")
    case _: print("Midweek")
Challenge

Write a program that takes a temperature value and prints "Hot" if above 30, "Warm" if above 15, and "Cold" otherwise.

Python
temp = 22

if temp > 30:
    print("Hot")
elif temp > 15:
    print("Warm")
else:
    print("Cold")

Functions

Defined with def. Can have default parameter values and return multiple values.
Lambda: A one-line anonymous function for simple operations.

Python
def greet(name, greeting="Hello"):
    return f"{greeting}, {name}!"

print(greet("Ephram"))         # Hello, Ephram!
print(greet("Ephram", "Hey")) # Hey, Ephram!

# Multiple return values
def min_max(nums):
    return min(nums), max(nums)

lo, hi = min_max([3, 1, 9, 4])

# Lambda
square = lambda x: x ** 2
print(square(5))  # 25
Challenge

Write a function called is_even that takes a number and returns True if it's even and False if it's odd. Test it on a few numbers.

Python
def is_even(number):
    return number % 2 == 0

print(is_even(4))   # True
print(is_even(7))   # False
print(is_even(100)) # True

Lists, Tuples & Dictionaries

List: Ordered, mutable. Use square brackets.
Tuple: Ordered, immutable. Use parentheses — good for fixed data like coordinates.
Dictionary: Key-value pairs. Keys must be unique.
Set: Unordered, unique values only. Good for removing duplicates.

Python
fruits = ["apple", "banana", "cherry"]
fruits.append("mango")
print(fruits[0])  # apple

coords = (40.71, -74.00)
lat, lng = coords  # unpacking

person = {"name": "Ephram", "age": 21}
person["city"] = "Fort Mill"

unique = {1, 2, 2, 3}
print(unique)  # {1, 2, 3}
Challenge

Create a list of 5 of your favourite albums. Loop through the list and print each one with its position number (starting from 1).

Python
albums = [
    "In Rainbows",
    "Somewhere Along The Highway",
    "Deathconsciousness",
    "Loveless",
    "Discovery"
]

for i, album in enumerate(albums, 1):
    print(f"{i}. {album}")

Classes & OOP

__init__ is the constructor, runs when a new object is created. self refers to the instance and must be the first parameter of every method.
Inheritance: Pass the parent class in parentheses. Use super() to call the parent's methods.
Dunder methods: __str__, __len__ etc. define how objects behave with built-in operations.

Python
class Animal:
    def __init__(self, name, sound):
        self.name = name
        self.sound = sound

    def speak(self):
        return f"{self.name} says {self.sound}"

    def __str__(self):
        return self.name

class Dog(Animal):
    def __init__(self, name):
        super().__init__(name, "woof")

dog = Dog("Rex")
print(dog.speak())  # Rex says woof
Challenge

Create a Car class with make, model, and year attributes. Add a method called description that returns a string like "2020 Toyota Camry". Create two car objects and print their descriptions.

Python
class Car:
    def __init__(self, make, model, year):
        self.make = make
        self.model = model
        self.year = year

    def description(self):
        return f"{self.year} {self.make} {self.model}"

car1 = Car("Toyota", "Camry", 2020)
car2 = Car("Honda", "Civic", 2018)

print(car1.description())  # 2020 Toyota Camry
print(car2.description())  # 2018 Honda Civic

Libraries & Packages

Install third-party libraries with pip install package-name. Import at the top of your file.
import: Imports an entire module.
from … import: Imports only what you need.
as: Gives an import a shorter alias.

Python
import math
print(math.sqrt(16))  # 4.0

from random import randint
print(randint(1, 10))  # random 1–10

# Common third-party (pip install first)
import numpy as np   # numerical computing
import pandas as pd  # data analysis
import requests       # HTTP requests
Challenge

Use the random library to simulate rolling two dice. Print the result of each die and their total. Run it a few times to see different results.

Python
from random import randint

die1 = randint(1, 6)
die2 = randint(1, 6)

print(f"Die 1: {die1}")
print(f"Die 2: {die2}")
print(f"Total: {die1 + die2}")
Coding · Java

Java.

Java programming resources covering core concepts and OOP.


Getting Started

Java is strongly typed and verbose — every variable must have a declared type, every statement ends with a semicolon, and all code lives inside a class. It's more strict than Python but that strictness makes errors easier to catch early.

Variables: Type must be declared before the name.

Java
// Variables
String name = "Ephram";
int age = 21;
double height = 5.11;
boolean isStudent = true;

Functions: Called methods in Java. Must declare a return type — use void if nothing is returned.

Java
public String greet(String name) {
    return "Hello, " + name;
}

System.out.println(greet("Ephram"));  // Hello, Ephram

Control Flow: Condition must be in parentheses. Curly braces define the block.

Java
int score = 75;

if (score >= 90) {
    System.out.println("A");
} else if (score >= 70) {
    System.out.println("B");
} else {
    System.out.println("C or below");
}

Loops: for loops declare a counter variable, a condition, and an increment all in one line.

Java
// For loop
for (int i = 0; i < 5; i++) {
    System.out.println(i);  // 0 1 2 3 4
}

// While loop
int count = 0;
while (count < 3) {
    System.out.println(count);
    count++;
}

Data Types & Variables

Content coming soon.


Control Flow

Content coming soon.


Methods

Content coming soon.


Arrays & ArrayLists

Content coming soon.


Classes & Objects

Content coming soon.


Inheritance & Interfaces

Content coming soon.

Coding · JavaScript

JavaScript.

JavaScript for web development, scripting, and beyond.


Getting Started

JavaScript runs in the browser and is the primary language of the web. It's loosely typed — variables can hold any type and change type freely. Use let for variables that change and const for ones that don't. Avoid var; it has scoping quirks that cause bugs.

Variables:

JavaScript
// Variables
const name = "Ephram";
let age = 21;
let height = 5.11;
const isStudent = true;

Functions: Two common ways to define them — traditional and arrow functions. Arrow functions are shorter and more common in modern JavaScript.

JavaScript
// Traditional
function greet(name) {
    return "Hello, " + name;
}

// Arrow function
const greet = (name) => "Hello, " + name;

console.log(greet("Ephram"));  // Hello, Ephram

Control Flow: Same syntax as Java — parentheses around condition, curly braces for the block.

JavaScript
let score = 75;

if (score >= 90) {
    console.log("A");
} else if (score >= 70) {
    console.log("B");
} else {
    console.log("C or below");
}

Loops:

JavaScript
// For loop
for (let i = 0; i < 5; i++) {
    console.log(i);  // 0 1 2 3 4
}

// While loop
let count = 0;
while (count < 3) {
    console.log(count);
    count++;
}

Variables & Data Types

Content coming soon.


Control Flow

Content coming soon.


Functions & Arrow Functions

Content coming soon.


Arrays & Objects

Content coming soon.


DOM Manipulation

Content coming soon.


Async & Promises

Content coming soon.

Coding · C#

C#.

C# programming for applications, games, and more.


Getting Started

C# is strongly typed like Java but with cleaner syntax. It's the primary language for Unity so if you're here for game development this is where to focus. Every variable needs a declared type, every statement ends with a semicolon, and all code lives inside a class.

Variables:

C#
// Variables
string name = "Ephram";
int age = 21;
float height = 5.11f;  // f suffix marks it as a float
bool isStudent = true;

Functions: Called methods in C#. Must declare a return type — use void if nothing is returned. Access modifiers (public, private) control visibility.

C#
public string Greet(string name) {
    return "Hello, " + name;
}

Debug.Log(Greet("Ephram"));  // Hello, Ephram

Control Flow: Same syntax as Java — parentheses around condition, curly braces for the block.

C#
int score = 75;

if (score >= 90) {
    Debug.Log("A");
} else if (score >= 70) {
    Debug.Log("B");
} else {
    Debug.Log("C or below");
}

Loops:

C#
// For loop
for (int i = 0; i < 5; i++) {
    Debug.Log(i);  // 0 1 2 3 4
}

// While loop
int count = 0;
while (count < 3) {
    Debug.Log(count);
    count++;
}

Data Types & Variables

Content coming soon.


Control Flow

Content coming soon.


Methods

Content coming soon.


Arrays & Lists

Content coming soon.


Classes & OOP

Content coming soon.


Unity Integration

Content coming soon.

Resume

Ephram
Grant.

ephram.grant@icloud.com  ·  Fort Mill, South Carolina   

Experience

Intern

May 2026 – August 2026
Nexcom · Charlotte, NC
Developed key skills including strengthening mastery over C, C#, HTML, and Python. Worked on building an internal app and created numerous small projects.

Shift Leader

September 2022 – May 2025
Tropical Smoothie Cafe · Tega Cay, SC
Served as a primary source of contact with customer complaints. Delegated tasks to 2-5 other employees on shift. Directed closing of store 2-4 times a week. Prepared food and smoothies at customer request.

Kitchen Staff

May 2025 – August 2025
Pizza Hut · Fort Mill, SC
Transitional job prior to entering college

Education

Mathematics and Computer Science

2025 – 2029
Boston University · Boston, MA
Multiple leadership roles in various student orgs. Dean's Scholar. 3.8 GPA.

Skills
Python Java JavaScript C C# HTML CSS Unity Development Leadership Experience

Projects

Turnbased Game Demo

2026
A Unity-based demo of an in development game similar to the XCOM franchise.

100 Days of Code

2026
~100 days worth of projects developed over the summer. The small projects are primarily in Python and HTML and include Web scrapers, Games, utility apps, quizzes, and more. Github Repo: https://github.com/EphramGrant/100daysofcode