• Differences in tools for writing English words (e.g., Google Docs) versus code (e.g., IntelliJ IDEA)
  • Importance of investing time in mastering a code editor

Learning a New Editor

  • Start with a tutorial
  • Use the editor for all text editing
  • Look up better ways to do tasks

Choosing an Editor

Editor Wars

  • Programmers have strong opinions on text editors
  • Popular editors today: Visual Studio Code, Vim, … Fleet?


  • Rich history, still actively developed
  • Vim emulation modes in many tools

Philosophy of Vim

Vim’s Design

  • Focused on reading/editing over writing
  • Modal editor: different modes for inserting text vs manipulating text
  • Programmable and avoids mouse usage

Modal Editing in Vim

Different Operating Modes

  • Normal: moving around and making edits
  • Insert: inserting text
  • Others: Replace, Visual, Command-line

Mode Switching

  • <ESC> to switch to Normal mode
  • Other keys (i, R, v, V, <C-v>, :) for different modes

Basics of Vim

Inserting Text

  • i to enter Insert mode
  • <ESC> to return to Normal mode

Buffers, Tabs, and Windows

  • Buffers for open files
  • Tabs contain windows
  • Windows show buffers

Command-line Mode

  • : in Normal mode to enter
  • Commands for file operations and quitting

Movement Commands

  • Basic: hjkl (left, down, up, right)
  • Words, lines, screen, file, line numbers, find, and search

Selection in Visual Modes

  • v for Visual
  • V for Visual Line
  • Ctrl-v for Visual Block

Editing Commands

  • d{motion}, c{motion}, x, s, u, <C-r>, y, p

Counts and Modifiers

  • Combine commands with counts (3w, 5j)
  • Modifiers like i (inner) and a (around)

Customizing Vim

  • ~/.vimrc for configuration
  • Starting point: well-documented basic config

Extending Vim with Plugins

  • Built-in package management in Vim
  • Favorite plugins: ctrlp.vim, ack.vim, nerdtree, vim-easymotion

Vim-mode in Other Programs

  • Shell integration (Bash, Zsh, Fish)
  • GNU Readline library
  • Other software with vim-like keybindings

Advanced Vim

  • Search and replace
  • Multiple windows
  • Macros

Resources for Learning Vim

Topic 4

Fragments of Development Operations

Introduction to Build Systems

  • The concept of a “build process” in projects
  • Sequence of operations from inputs to outputs
  • The role of build systems in automating these processes

What is a Build System?

  • A tool to define dependencies, targets, and rules
  • Manages and optimizes the build process
  • Examples include make, specialized tools for languages or larger projects

The Make Build System

  • One of the most common build systems
  • Uses a Makefile to define rules, targets, and dependencies
  • Example of a simple Makefile:
	echo "Hello, World"

How make Works

  • Determines the necessary steps to build a target
  • Avoids redundant builds by checking dependencies
  • Common operations like building a PDF from LaTeX sources

Dependency Management

  • Projects depend on external code or libraries
  • Repositories and tools manage these dependencies
  • Versioning ensures compatibility and stability

Semantic Versioning

  • Version format: major.minor.patch
  • Rules for updating each number based on changes
  • Helps maintain compatibility and predictability

Lock Files and Vendoring

  • Lock files specify exact versions used in a project
  • Vendoring involves copying dependencies into the project
  • Ensures control and consistency over external code

Continuous Integration Systems

Overview of CI Systems

  • Automate tasks that run on code changes
  • Common in larger projects for testing, deployment, etc.
  • Examples: Travis CI, Azure Pipelines, GitHub Actions

CI Configuration

  • Defined through files in the repository
  • Specifies actions on events like push or pull request
  • Automates testing, building, deploying, and more

Example: GitHub Pages

  • Automatic deployment of websites on push to master
  • Runs Jekyll to build the site, deploys to GitHub domain
  • Simplifies website updates and maintenance