Philip Guo (Phil Guo, Philip J. Guo, Philip Jia Guo, pgbovine)


One of my main hobbies is writing articles on this website (and more recently, recording podcasts and vlogs). One heuristic I use when deciding what to write is to ask myself:

Will at least 100 people care about this topic three years from now?

The following don't qualify, so I rarely write about them:

  • commentary on news events or fads
  • reactions to someone else's article
  • personal notes that only my friends would care about

Finally, if I see many people writing about a topic, then I avoid it unless I have a drastically different perspective.

Find an article within this site using search terms:

In addition to the articles listed below, check out the PG Podcast and PG Vlog sections for my audio/video content.


RStudio First Impressions: Graphapalooza 2018-04-08

PG's Super Paranoid Guide to Running User Studies (and Giving Live Demos) 2018-03-24


How I Learned Programming 2017-12-25

Introduction to HCI/Design 2017-12-05

HCI/Design Jobs for New College Grads 2017-11-27

Inception: the moment when a new research project is born 2017-11-19

Statement of Purpose Examples from Ph.D. Program Applications 2017-11-14

When do you graduate with a Ph.D.? 2017-10-05

Professoring Logistics: Mundane but useful ways to organize faculty work life 2017-08-29

Learning Programming at Scale (CACM) 2017-08-08

My Video Recording Setup 2017-08-02

Ask Me Anything (AMA) on YouTube Live 2017-07-30

How did I find my second batch of students for my lab? 2017-07-23

Working Effectively With Me as Your Research Advisor 2017-07-11

Making Programming Accessible for All (MIT alumni profile) 2017-07-08

Human-Centered Programming Tools: Spring 2017 Class Readings 2017-06-12

Older Adults Learning Computer Programming (CACM summary) 2017-05-15

Attending Professional Conferences as a Newcomer 2017-05-13

Five Years After My Ph.D. Thesis Defense 2017-04-23

Older Adults Learning Computer Programming (press release) 2017-04-18

Python Asynchronous I/O Walkthrough 2017-01-09


A Five-Minute Guide to Ph.D. Program Applications 2016-12-09

Migrating a 10,000-line legacy JavaScript codebase to TypeScript 2016-06-16

Moving to UC San Diego Cognitive Science 2016-06-05

Python Tutor: The First Three Years 2016-06-02

What I would've wanted to know as a first-year assistant professor 2016-05-29

How to Get Hired 2016-05-27

My faculty job application materials 2016-05-18

Comparing academic departments when deciding between faculty job offers 2016-04-16

What is a programming language? A six-layer model 2016-03-28

Fellowships Considered Harmful (not really, but I wanted a clickbait title) 2016-03-11

How to write a good HCI research paper (tips from senior colleagues) 2016-03-06

What is HCI research? And what is its relationship to computer science? 2016-02-29

Econ 101 for Assistant Professors: A Simple Guide to the Economics of Grants 2016-02-24

Interactive Systems for Learning Programming at Scale 2016-02-19

Forcing Functions 2016-02-06

Python Compiler Workbench: Using a live coding environment to quickly develop intuitions 2016-01-03

Childhood Dreams 2016-01-02


How to set up a web development environment with React, Babel, Webpack, and JavaScript ES6 2015-12-27

Minimal fuss setup for getting started with React and JavaScript ES6 2015-12-25

Research Group Dynamics 2015-12-18

Unicode errors in Python 2 2015-12-02

Unicode strings in Python: A basic tutorial 2015-11-30

Automatically create Docker images by running the program you want to package 2015-11-23

Shadow Writing 2015-11-19

Twelve Tips for Data-Driven Research 2015-11-05

Advice for first-year Ph.D. students (video) 2015-11-05

Web Programming Video Lectures 2015-11-01

What is a programming language? (45-minute lecture) 2015-10-28

Why universities should offer a programming interview prep elective course 2015-10-15

REST Web APIs: A Super-Simple Tutorial 2015-10-12

My simple policy for class project groups 2015-09-01

My policy for using laptops in the classroom 2015-09-01

The N=2 Interview about Ph.D.s in Computer Science 2015-08-26

Learning programming at scale 2015-08-13

How did I find my first batch of students for my lab? 2015-07-28

An example of command-line bullshittery in computer science research 2015-06-17

What to expect over the next decade and beyond (CS graduation speech) 2015-05-16

On Writing 2015-05-08

Failure to Launch 2015-04-24

Stumbling in the right direction 2015-04-18

Deconstructing Research Advising 2015-04-17

Deconstructing Luck 2015-03-09

The Tenacity Test 2015-02-28

Filtering 2015-02-19

Opportunistic Paper Reading 2015-02-12

Parsing Raw Data 2015-01-27

Maintaining Student Morale 2015-01-16

Academic High Achievers At Age Thirty 2015-01-11

Why Trying To Impress People Is Pointless 2015-01-09


Doing less risky research is more risky for your career 2014-12-17

Industry versus academia: A junior employee's perspective 2014-12-14

Why Acting Arrogant Is Pointless 2014-12-07

Writing for One 2014-12-04

My CS Education Zoo interview 2014-11-26

Basic tutorial on Flask, a Python-based Web application framework 2014-11-25

My Basic Technology Stack for Teaching Web Programming 2014-11-24

Programmers: Please don't ever say this to beginners ... 2014-11-22

Hello World in HTML/JavaScript/CSS 2014-11-20

Basic Git and GitHub tutorial 2014-11-20

How to use assertions to make your code more reliable 2014-11-18

Hello World in C and Python 2014-11-05

Why academics feel overworked 2014-11-01

Basic Unix-like command line tutorial 2014-10-25

Python data analysis screencast 2014-10-20

Helping my students overcome command-line bullshittery 2014-10-08

CPython internals: A ten-hour codewalk through the Python interpreter source code 2014-10-08

How I've been spending my time as a first-semester assistant professor 2014-10-01

A Simple Guide to Professor Job Titles in the United States 2014-09-26

Superpowers of Highly Successful People 2014-09-20

Motivation, Momentum, and Marketability: New Faculty Edition 2014-09-12

Pep talk for new Ph.D. students 2014-09-06

The single most practical reason for pursuing a Ph.D. that I can think of (and I've thought a lot about this topic!) 2014-09-05

Organizational Orders of Growth 2014-09-04

Maximizing Personal Potential 2014-08-29

Whose Critical Path Are You On? 2014-08-26

Working on Weekends 2014-08-10

Tiger Parenting Explained (guest article) 2014-08-09

Exit Interviews for Ph.D. Students 2014-07-27

Ten Stories From My Childhood 2014-07-25

Python is now the most popular introductory teaching language at top U.S. universities 2014-07-07

Motivation, Momentum, and Marketability 2014-06-26

Small-Group Code Reviews for Education 2014-06-19

Python Tutor Live 2014-06-16

Postdoc Year-In-Review 2014-05-31

Mandatory course load limits for undergraduate students? 2014-04-21

The benefits of working on research as an undergraduate student 2014-04-08

Interested in being an undergraduate research assistant in my lab? 2014-04-07

Advice Saturation Point 2014-03-02

Live Paper Editing 2014-02-24

Academia and industry aren't that different 2014-02-16

Three Dimensions of Work 2014-02-08

Passive Pair Programming 2014-02-02

Writing an NSF Grant Proposal: A First-Timer's Perspective 2014-02-01

Early-Stage Grad Student Depression 2014-02-01

Why do you want to be a CS professor? 2014-01-30

Writing for Work 2014-01-29

NPR Interview on Silent Technical Privilege 2014-01-22

Learning Time Management 2014-01-22

Adulthood: Ten Years In 2014-01-20

My book notes on Unlocking the Clubhouse 2014-01-15

My Childhood Home Environment 2014-01-15

Silent Technical Privilege 2014-01-05

Intense Single-Tasking 2014-01-04


Work Time Scales 2013-12-30

The Two Cultures of Computing 2013-12-24

Preparing for Junior Faculty Life 2013-12-22

Three quick tips for faculty job applications 2013-12-20

Student Fizz Buzz 2013-12-19

Code Carabiners 2013-12-14

Unicorn Jobs 2013-12-11

Hour of Code: Observations from a Middle School Classroom 2013-12-10

My Unexpectedly Awesome AP Computer Science Class 2013-12-09

Getting Past Superficial 2013-11-26

How to effectively ask for help as a student or junior employee 2013-11-25

Advice for early-stage Ph.D. students 2013-11-24

Hacker School Residency 2013-11-14

Hacking the Ph.D.: Three Serendipitous Projects 2013-11-11

Faculty job search timeline 2013-11-09

Data Science Workflow: Overview and Challenges 2013-10-30

edX blog: Optimal Video Length for Student Engagement 2013-10-29

What makes a good engineering culture? (guest article) 2013-09-24

Philip's Ph.D. Portal 2013-08-27

Teaching Librarians Programming 2013-08-25

Why pursue a Ph.D.? 2013-08-21

Dropbox: Sweating the details 2013-08-03

First impressions of the IPython Notebook 2013-07-25

How effective is your research programming workflow? 2013-07-22

Why scientists and engineers must learn programming 2013-07-18

Research Hackathons 2013-07-15

Open-plan vs. cubicles vs. closed offices 2013-07-11

Education Removes Fear: Some Examples From CS Courses 2013-06-30

Why Wrangle Data? 2013-06-29

The Ph.D. Grind: tl;dr Edition 2013-06-29

Data Wrangling with MongoDB 2013-06-28

Mac OS X 10.8 Lightweight Developer Setup 2013-06-25

Research Directory Structure 2013-06-24

A Bit Better 2013-06-21

Ph.D. Dissertation Summary 2013-06-18

Lightweight Static Website Generator 2013-06-15

How my mother made tenure 2013-06-08

Coping With Linux Distro Fragmentation (Visualized in One Giant Diagram) 2013-05-30

My thoughts on "The N=1 guide to grad school" by Adam Marcus 2013-05-08

The Business of Academia 2013-04-17

How to deliver a great academic job talk 2013-04-17

General advice for faculty job interviews 2013-04-17

Reflections on my tenure-track assistant professor job search 2013-04-16

Two Examples of HCI Research 2013-04-10

Teaching Real-World Programming 2013-01-07

Lessons from the Grind (MIT Technology Review) 2013-01-02


The Journey of a Tiger Child and Beyond (guest article) 2012-10-20

The Ph.D. Grind: Lead From Below 2012-09-28

My Undergraduate Research Experience and Decision to Pursue a Ph.D. (guest article) 2012-09-08

The Ph.D. Grind - Answers to Reader Questions 2012-09-03

Raising Producer Kids 2012-09-01

The Ph.D. Grind: Main Grinds and Side Grinds 2012-08-25

The Ph.D. Grind - Afterword 2012-08-01

How to Do What You Love: Get Good, Get Known, Get Lucky 2012-07-22

The Ph.D. Grind 2012-06-29

Overview of U.S. Science and Engineering Ph.D. Program Requirements 2012-06-20

One Teenager's Backlash Against Overbearing Asian Parents (guest article) 2012-04-18

My Back Pain Story (guest article) 2012-04-04

Why Scientists And Engineers Must Master Strategizing and Selling 2012-04-02

Teaching Programming To A Highly Motivated Beginner 2012-03-15

An Open Letter to Khan Academy et al. 2012-03-13

Implicit Privilege 2012-03-12

How To Be Effective 2012-02-26

Dining with a Tiger Cub (guest article) 2012-02-11


My Computer Setup 2011-12-10

Human Performance Bounds 2011-12-08

What is research? 2011-11-07

Desktop Photo Montage 2011-10-18

Enforcing diversity in online media consumption 2011-09-25

Programming Interview Tips 2011-09-12

Oral Presentation Tips 2011-07-15

Tips for giving a live software demo 2011-06-30

Google Tech Talk - CDE: Using System Call Interposition to Automatically Create Portable Software Packages 2011-02-11


The main purpose of education 2010-10-04

How to choose an English name 2010-08-10

What kids can learn from doing homework 2010-08-09

My "modest proposal" for reforming K-12 math education 2010-07-11

JSON Photo Gallery 2010-06-30

My predictions for the state of the art in programming technology in the year 2030 2010-06-01

How a lack of communication skills hurts Asian immigrants (guest article) 2010-04-24

The similarities between being a junior researcher and a high-tech entrepreneur 2010-03-06

What is Computer Science? Efficiently Implementing Automated Abstractions 2010-02-04

Overcoming the effects of being raised by overbearing parents: There are other kinds of lives just waiting to be discovered! (guest article) 2010-01-03

Is there life after high school? (guest article) 2010-01-02


Understanding and dealing with overbearing Asian parents 2009-12-21

My plea for a more compassionate work environment 2009-12-19

Happiness and Academic High-Achievers 2009-10-17

How Immigrant Job Woes Shape Parental Expectations 2009-09-23

The advantages of attending a prestigious name-brand university 2009-09-21

MathViz: Math expression code visualizer 2009-09-20

Social tips for geeks 2009-09-07

My advice for kids: The 1,000-hour rule 2009-02-09

On remembering and dealing with people's names 2009-01-19


Responses to 'Attention: Overbearing Asian Parents' 2008-12-28

Common English mistakes made by native Chinese speakers 2008-12-24

Geek behaviors present during conversations 2008-12-21

Knowing a lot about a little versus knowing a little about a lot 2008-12-16

Same interface, works better 2008-11-28

Hey, your Python code is unreadable! 2008-10-31

Which college major should I choose? 2008-10-14

Tips for performing computationally-based experimental research 2008-09-22

What I learned from my friends during my Summer 2008 Boston/NYC vacation 2008-09-21

Reflections and advice on life as a mid-stage Ph.D. student 2008-09-20

The practical implications of computer program running times 2008-07-30

The benefits of programming with assertions (a.k.a. assert statements) 2008-06-20

The benefits of object-oriented programming using class invariants (a.k.a. representation invariants) 2008-06-20

Hobby projects as platforms for active learning 2008-06-20

On Expertise 2008-05-24

Material Possessions 2008-05-24

Advice for Social Interactions and Relationships 2008-05-24

Summary of Statistical Tests 2008-03-28


Summer of Gluttony 2007-12-01

The Delivery Man 2007-12-01

Chinese School in Church 2007-12-01

Chinese vs. American Flags 2007-12-01

Subtle Racism 2007-12-01

Wishing I Were White 2007-12-01

Learning English at an Inner-City School 2007-12-01

Learning French in Switzerland 2007-12-01

A Chinese Restaurant in Switzerland 2007-12-01

My Early Education 2007-12-01

On the Move 2007-12-01

Python programming idioms 2007-11-10

Lightweight File Versioning and Synchronization with Git and Unison 2007-09-14

Types of Friends 2007-06-05

Introductory Computer Programming Education 2007-05-24

Why Python is a great language for teaching beginners in introductory programming classes 2007-05-18

The power (but enormous setup cost) of scripting 2007-05-13

Cars and Computers 2007-04-07

Random Browser: An innovative hierarchical photo browsing application 2007-03-03

Gallery Lite: Yet Another Lightweight Web Photo Gallery Generator 2007-01-07

Recommended Reading (from childhood and student years) 2007-01-01


Computer Science in Modern Everyday Life 2006-12-12

Tips for First-Time Teaching Assistants 2006-11-21

Advice for Ph.D. Program Applications 2006-09-30

Email analysis scripts for mbox mailbox files 2006-09-16

On Popularity 2006-09-01

Setting up Unison for your mom, dad, or other loved ones 2006-08-29

MIT: A Life in Emails 2006-08-28

How to painlessly migrate your email after you graduate from MIT 2006-08-20

Attention: Overbearing Asian Parents 2006-08-15

Programming in a Vacuum 2006-08-02

Advice for Science Fellowship Applications: NSF, NDSEG, Hertz 2006-07-02

Email Writing Tips 2006-06-23

On Grades 2006-06-17

MIT classes that I have taken 2006-06-01

Java and Software Engineering Notes 2006-03-07

Advice for MIT Undergraduates 2006-01-12

CVS Lite: A Lightweight Alternative to CVS 2006-01-10


C Programming Tips 2005-11-26

Tips for Casual Digital Photography 2005-08-26

XML Photo Gallery 2005-08-03

Unison File Synchronizer: Liberation through Data Replication 2005-08-03

Image Harvester 2005-04-29

Animated GIF Maker 2005-04-01


Integrity in Digital Photography 2004-01-12


Why CTY Rules 1998-08-15