Learning to Learn: Software Teams

Outside of school very seldom in software development will you completely work alone on a project. Leading and being an effective member of a software team will be critical to your success in this field. However each team and project is different. Some projects have a high iteration cost because testing could cause people to die (e.g. bugs in rocket guidance systems in manned space flight), testing could be lengthy (e....

February 9, 2023 · 9 min · 1814 words · Robert Underwood

Learning to Learn: Software Development on Linux

What is software development? At a most basic level, it is the activity of using a programming language to achieve some set of goals over time. It includes everything from scripts that a graduate student might write to analyze some data to massive systems that control aircraft. As our world continues to progress technically, software development will likely become even more commonplace than it is now. In this post, I aim to provide a comprehensive overview of how one can develop software efficiently using free and open source tools on Linux....

January 22, 2023 · 71 min · 15087 words · Robert Underwood

Learning to Learn: Task Management, Time Tracking, and Journaling

A few of the key things that you will need as you need as a professional are the ability to manage tasks, understand how you spend your time, and improve your own processes. For me and many others, journaling, task managers, and time trackers help you answer these important questions. What is Journaling? Journaling is a reflective process which aims to capture tasks, observations, ideas, and lessons in order to be able to recall and learn from them....

January 22, 2023 · 9 min · 1769 words · Robert Underwood

Learning to Learn: CMake

CMake is the de-facto C++ build system used by an overwhelming number of C++ projects. Even if you personally favor more modern alternatives such as Meson, Bazel, or Pants, if you ever pull in a 3rd party dependency, there is a good chance that it uses CMake so knowing enough about CMake to understand it is worth knowing. How to get started I recommend new users to CMake start with the following resources:...

November 15, 2022 · 5 min · 999 words · Robert Underwood

Suggestions for the Design of Computational Experiments

So you want to do empirical computer science? Doing good science is difficult. It requires discipline and attention to detail. However there are strategies that can help you focus on answering the questions you can attempt to answer. First you should ask, “is this a scientific question?” Not all questions are scientific questions. Questions about aesthetics, values, ethics are not science questions. “Is A better than B?” is not a scientific question, it’s a question of values....

October 18, 2022 · 16 min · 3290 words · Robert Underwood

Learning to Learn: High Performance Computing

There’s at least for me an inherent coolness to be able to say that I can run code on a super computer. However, there is often a gap between the kind of programming that you learned in your introductory classes, and what kind of code runs well on a computing cluster. In this post, I try to provide an introduction to high performance computing, and some of the differences between it and personal computing....

August 25, 2019 · 10 min · 2001 words · Robert Underwood

Learning to Learn: Linux

So you want to or have to try this thing called “Linux.” Just like curry powder isn’t just one thing, but a distinct mix of spices that come together into a tasty mixture, Linux is much the same. Also like curry, Linux isn’t for everyone. In this post I describe the process of choosing the “flavor” of Linux that will work best for you, introduce a powerful tool that will help you to make the most of Linux, and describe some first steps to take when things go wrong....

August 25, 2019 · 24 min · 4987 words · Robert Underwood

Learning to Learn: Writing

Communication is essential to the enterprise of knowledge. Without communication, we would never be able to build upon the works of others or have them build upon our own. One of the most important – and challenging – arts within communication is writing. Writing is unique among commutative forms in its durability and portability. Once written, the words of the author can transcend even their death and travel places they never dreamed to tread....

July 1, 2019 · 14 min · 2905 words · Robert Underwood

Learning to Learn: Studying New Topics

Efficient study of a topic is a powerful skill for a wide variety of domains. However – despite having several classes on writing and research in High School and Undergraduate Studies – it wasn’t something that I truly appreciated and learned how to do well until Graduate School. I think this really boils down to lacking the kind of personal application that makes these efforts meaningful. However now that I have come to appreciate it, I want to highlight how I think how I study new topics, and how this applies to many topics outside of academic research....

April 12, 2019 · 11 min · 2193 words · Robert Underwood

Learning to Learn: Python

Python is a relatively simple language compared to others such as C++. Despite its simplicity, Python really shines because of its robust standard library, extensive 3rd party library ecosystem (especially for statistics and data analysis), and intuitiveness. This post tracks my process of learning how to program well in Python. Order of Topics The listing of topics here is arbitrary and represents the path that I took to learn Python roughly organized by topic....

January 23, 2019 · 11 min · 2157 words · Robert Underwood