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


One heuristic I use when deciding what to write is to ask:

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.

(This SMBC comic perfectly sums up what I don't want to write.)

Find an article within this site using search terms:


One Weird Year (April 2012–2013): How I Quit Academia for Industry then Returned 2020-05-02

Walkthroughs of my HCI research papers 2020-04-26

A Spectrum of Research Software Quality 2020-02-17


Asking for Recommendation Letters 2019-12-19

Ten years and nearly ten million users: my experience being a solo maintainer of open-source software in academia 2019-11-16

Computer Literacy Starts with Developing a Mental Model of Filesystems 2019-11-11

Ph.D. Student Internships 2019-11-06

PG's Super Paranoid Guide to Delivering Live Laptop Presentations 2019-10-08

Why take classes (when you can just learn everything from the internet or books)? 2019-09-22

50 example uses of assertions in my code 2019-08-31

10th anniversary of coming up with my first independent research project idea 2019-07-24

Work log from my 3rd year of Ph.D. (2008-2009) 2019-07-17

Personal data, from private to public 2019-07-15

Communicating, Fast and Slow 2019-07-07

Presentation and Live Demo Tips based on Mayer's Principles of Multimedia Learning 2019-06-17

Research Design Patterns 2019-05-14

Reading Entire Conference Proceedings 2019-05-07

Example NSF CAREER proposals (including my own annotated one) 2019-04-21


Managing the Logistics of Teaching Large Courses: A 10-Part Series 2018-12-22

What I would've wanted to know as a 3rd/4th-year assistant professor 2018-10-28

Unintentional Filters 2018-09-24

How Did People Write Machine Learning Code in the Past? 2018-09-05

Learning Programming at Scale 2018-05-28

JavaScript Language Fundamentals 2018-04-17

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/UX/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

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

Interested in joining my research lab? 2013-11-20

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

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

Programming On Demand: Wrangling, Iterating, and Opportunistic Learning 2013-02-20

Teaching Real-World Programming 2013-01-07

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


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

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


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

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

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: An Immigrant Child's Global Journey (Chinese) 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