Background
I spent a few minutes thinking about what the major features of my face were, and would therefore be important to preserve in the self-portrait. I ended up deciding to have my nose, my ears, my earrings, and my excuse for facial hair. I wanted to have my hair as well, although that ended up being difficult for me to figure out.
Process
I started with the face, going for a narrow-ish ellipse, as my face is quite narrow. I added the eyes next, with two more ellipses and circles. I made a float for eyeSpacing = 50, and used this as my standard unit that every other distance was based on.

The nose went next, and as I have quite a prominent nose, I tried to capture that in the self-portrait. Once I had the eyes and nose in a place I was happy with, I moved onto the rest of the face. The mouth, ears, and earrings were all ellipses, and not too difficult to add in.

I had no idea how to do hair, so I took the easy route and made me wear a hat instead. Below is the code for the hat, along with the NYU logo (violet pride!). I used an arc for the U in the NYU logo, and once I figured out how to use the arc in Processing, I moved onto the beard and mustache, both of which were arcs as well.


Challenges
As mentioned above, the hair was difficult and so I stuck with using a hat. Other than that, I felt that the creation and placement of each of the shapes was relatively easy once I had the process down.
Final

ellipse(x - eyeSpacing * 2.5, y + eyeSize/4, eyeSize, eyeSize * 2);
ellipse(x + eyeSpacing * 2.5, y + eyeSize/4, eyeSize, eyeSize * 2);
circle(x - eyeSpacing *2.5, y + eyeSize, eyeSize/4);
circle(x + eyeSpacing *2.5, y + eyeSize, eyeSize/4);
ellipse(x, y, circleSize/1.3, circleSize);
ellipse(x - eyeSpacing, y - eyeSpacing/2, eyeSize, eyeSize/2);
ellipse(x + eyeSpacing, y - eyeSpacing/2, eyeSize, eyeSize/2);
ellipse(x - eyeSpacing, y - eyeSpacing/2, eyeSize/3, eyeSize/3);
ellipse(x + eyeSpacing, y - eyeSpacing/2, eyeSize/3, eyeSize/3);
triangle(x - eyeSpacing/10, y - 25, x - eyeSpacing/10, y + eyeSpacing, x + eyeSpacing/2, y + eyeSpacing);
arc(x, y + eyeSpacing * 1.6, 80, 15, 0, PI, CHORD);
arc(x, y + eyeSpacing * 1.6, 80, 15, PI, TWO_PI);
arc(x, y + eyeSpacing/1.2, eyeSpacing * 4.25, eyeSpacing * 4.25, 0, PI, OPEN);
arc(x, y + eyeSpacing * 2.25, eyeSpacing * 3, eyeSpacing * 2, PI, TWO_PI);
line(x, y + eyeSpacing * 1.9, x, y + eyeSpacing * 2.3);
arc(x, y - eyeSpacing, 225, 200, PI, TWO_PI);
line(x - eyeSpacing, y - eyeSpacing * 1.2, x - eyeSpacing, y - eyeSpacing * 2);
line(x - eyeSpacing, y - eyeSpacing * 2, x - eyeSpacing/2, y - eyeSpacing * 1.2);
line(x - eyeSpacing/2, y - eyeSpacing * 1.2, x - eyeSpacing/2, y - eyeSpacing * 2);
line(x, y - eyeSpacing * 1.2, x, y - eyeSpacing * 1.5);
line(x - eyeSpacing/3, y - eyeSpacing * 2, x, y - eyeSpacing * 1.5);
line(x + eyeSpacing/3, y - eyeSpacing * 2, x, y - eyeSpacing * 1.5);
arc(x + eyeSpacing * 0.9, y - eyeSpacing * 2, eyeSpacing * 0.8, eyeSpacing * 1.5, 0, PI, OPEN);
float circleSize = 300;
float eyeSize = 50;
int x, y;
x = width/2;
y = height/2;
float eyeSpacing = 50;
size(480, 480);
//ears
stroke(0);
fill(187, 109, 74);
ellipse(x - eyeSpacing * 2.5, y + eyeSize/4, eyeSize, eyeSize * 2);
ellipse(x + eyeSpacing * 2.5, y + eyeSize/4, eyeSize, eyeSize * 2);
//earrings
stroke(0);
fill(128, 128, 128);
circle(x - eyeSpacing *2.5, y + eyeSize, eyeSize/4);
circle(x + eyeSpacing *2.5, y + eyeSize, eyeSize/4);
//face
stroke(0);
fill(204, 132, 67);
ellipse(x, y, circleSize/1.3, circleSize);
//eyeballs
stroke(0);
fill(255);
ellipse(x - eyeSpacing, y - eyeSpacing/2, eyeSize, eyeSize/2);
ellipse(x + eyeSpacing, y - eyeSpacing/2, eyeSize, eyeSize/2);
//irises
stroke(0);
fill(50, 25, 10);
ellipse(x - eyeSpacing, y - eyeSpacing/2, eyeSize/3, eyeSize/3);
ellipse(x + eyeSpacing, y - eyeSpacing/2, eyeSize/3, eyeSize/3);
//nose
stroke(0);
fill(190, 114, 60);
triangle(x - eyeSpacing/10, y - 25, x - eyeSpacing/10, y + eyeSpacing, x + eyeSpacing/2, y + eyeSpacing);
//mouth
stroke(0);
fill(199, 122, 88);
arc(x, y + eyeSpacing * 1.6, 80, 15, 0, PI, CHORD);
arc(x, y + eyeSpacing * 1.6, 80, 15, PI, TWO_PI);
//beard
stroke(0, 0, 0, 185);
noFill();
strokeWeight(8);
arc(x, y + eyeSpacing/1.2, eyeSpacing * 4.25, eyeSpacing * 4.25, 0, PI, OPEN);
//moustache
stroke(0, 0, 0, 185);
noFill();
strokeWeight(6);
arc(x, y + eyeSpacing * 2.25, eyeSpacing * 3, eyeSpacing * 2, PI, TWO_PI);
//goatee
stroke(0, 0, 0, 185);
line(x, y + eyeSpacing * 1.9, x, y + eyeSpacing * 2.3);
//hat
stroke(0);
strokeWeight(1);
fill(87, 6, 140);
arc(x, y - eyeSpacing, 225, 200, PI, TWO_PI);
//hat logo
stroke(255);
strokeWeight(8);
//N
line(x - eyeSpacing, y - eyeSpacing * 1.2, x - eyeSpacing, y - eyeSpacing * 2);
line(x - eyeSpacing, y - eyeSpacing * 2, x - eyeSpacing/2, y - eyeSpacing * 1.2);
line(x - eyeSpacing/2, y - eyeSpacing * 1.2, x - eyeSpacing/2, y - eyeSpacing * 2);
//Y
line(x, y - eyeSpacing * 1.2, x, y - eyeSpacing * 1.5);
line(x - eyeSpacing/3, y - eyeSpacing * 2, x, y - eyeSpacing * 1.5);
line(x + eyeSpacing/3, y - eyeSpacing * 2, x, y - eyeSpacing * 1.5);
//U
noFill();
arc(x + eyeSpacing * 0.9, y - eyeSpacing * 2, eyeSpacing * 0.8, eyeSpacing * 1.5, 0, PI, OPEN);
float circleSize = 300;
float eyeSize = 50;
int x, y;
x = width/2;
y = height/2;
float eyeSpacing = 50;
size(480, 480);
//ears
stroke(0);
fill(187, 109, 74);
ellipse(x - eyeSpacing * 2.5, y + eyeSize/4, eyeSize, eyeSize * 2);
ellipse(x + eyeSpacing * 2.5, y + eyeSize/4, eyeSize, eyeSize * 2);
//earrings
stroke(0);
fill(128, 128, 128);
circle(x - eyeSpacing *2.5, y + eyeSize, eyeSize/4);
circle(x + eyeSpacing *2.5, y + eyeSize, eyeSize/4);
//face
stroke(0);
fill(204, 132, 67);
ellipse(x, y, circleSize/1.3, circleSize);
//eyeballs
stroke(0);
fill(255);
ellipse(x - eyeSpacing, y - eyeSpacing/2, eyeSize, eyeSize/2);
ellipse(x + eyeSpacing, y - eyeSpacing/2, eyeSize, eyeSize/2);
//irises
stroke(0);
fill(50, 25, 10);
ellipse(x - eyeSpacing, y - eyeSpacing/2, eyeSize/3, eyeSize/3);
ellipse(x + eyeSpacing, y - eyeSpacing/2, eyeSize/3, eyeSize/3);
//nose
stroke(0);
fill(190, 114, 60);
triangle(x - eyeSpacing/10, y - 25, x - eyeSpacing/10, y + eyeSpacing, x + eyeSpacing/2, y + eyeSpacing);
//mouth
stroke(0);
fill(199, 122, 88);
arc(x, y + eyeSpacing * 1.6, 80, 15, 0, PI, CHORD);
arc(x, y + eyeSpacing * 1.6, 80, 15, PI, TWO_PI);
//beard
stroke(0, 0, 0, 185);
noFill();
strokeWeight(8);
arc(x, y + eyeSpacing/1.2, eyeSpacing * 4.25, eyeSpacing * 4.25, 0, PI, OPEN);
//moustache
stroke(0, 0, 0, 185);
noFill();
strokeWeight(6);
arc(x, y + eyeSpacing * 2.25, eyeSpacing * 3, eyeSpacing * 2, PI, TWO_PI);
//goatee
stroke(0, 0, 0, 185);
line(x, y + eyeSpacing * 1.9, x, y + eyeSpacing * 2.3);
//hat
stroke(0);
strokeWeight(1);
fill(87, 6, 140);
arc(x, y - eyeSpacing, 225, 200, PI, TWO_PI);
//hat logo
stroke(255);
strokeWeight(8);
//N
line(x - eyeSpacing, y - eyeSpacing * 1.2, x - eyeSpacing, y - eyeSpacing * 2);
line(x - eyeSpacing, y - eyeSpacing * 2, x - eyeSpacing/2, y - eyeSpacing * 1.2);
line(x - eyeSpacing/2, y - eyeSpacing * 1.2, x - eyeSpacing/2, y - eyeSpacing * 2);
//Y
line(x, y - eyeSpacing * 1.2, x, y - eyeSpacing * 1.5);
line(x - eyeSpacing/3, y - eyeSpacing * 2, x, y - eyeSpacing * 1.5);
line(x + eyeSpacing/3, y - eyeSpacing * 2, x, y - eyeSpacing * 1.5);
//U
noFill();
arc(x + eyeSpacing * 0.9, y - eyeSpacing * 2, eyeSpacing * 0.8, eyeSpacing * 1.5, 0, PI, OPEN);