Learn to Use Programming Tools

There is software designed to help you develop software. If you are writing programs, then you do need them.

Topic: Integrated Development Environment (IDE)

Prerequisites:

  • You write scripts and code.

In scope:

  • Writing code is tedious:
    • Syntax: special characters, missing parentheses, long variable names.
    • Refactoring: change without breaking, run to test, wait! forgot a semicolon..
  • The 90's are over: you deserve state-of-the-art tooling.
  • IDEs are software to help you write code. They have become very sophisticated:
    • VSCode/VSCodium (used in this session).
    • Alternatives: Vim, RStudio (for R), Atom, IntelliJ, emacs..
  • The edition experience you deserve:
    • Automatic enclosers.
    • Automatic comment/uncomment lines/blocks.
    • Select valid expressions.
    • Move lines/blocks around up/down.
    • Vertical/multiple edition.
    • Record Macros.
    • Customise shortcuts: make it your own.
    • ...
  • The Language Server Protocol (LSP) and the features you deserve:
    • Syntactic coloring: make your code easy to parse.
    • Linting: highlight errors before you even run the code.
    • Autoformat: stop messing with whitespace/tabs by hand.
    • Code actions:
      • Rename identifiers.
      • Errors quickfix.
      • Extract variables.
      • Extract functions.
      • ...
  • The integration you deserve:
    • Invoke intepreter/compiler directly from your editor.
    • Pass lines/blocks to your interpreter.
    • The Debug Adapter Protocol (DAP): inspect your program execution live.

Git

Topic: 1 Git from Scratch

Prerequisites:

  • You write scripts and code.
  • You have already made deep copies of your files and folders before modifying any of your programs because you were worried about breaking anything.

In scope:

  • Introduction.
  • Configure the software.
  • Produce commits.
  • Publish your project on a shared repo (Github/Gitlab).
  • Branches and good practices.

Topic: 2 Collaborate with Git

Prerequisites (either):

  • You are not the only person writing code in your project.
  • You are, but you want to evolve parallel versions of your project.
  • You want to contribute to shared or open-source projects.

In scope:

  • Clone.
  • Fetch/Push to/from the same shared repo.
  • Git conflicts and what they really mean.
  • Merge/Rebase.
  • Good practices.

Topic: Good Practices: Code, Test, Documentation [support not ready yet]

Prerequisites:

  • You write scripts and code.
  • Someone (including yourself) has already broken something when modifying your programs.
  • Someone (including yourself) has a hard time understanding your own programs.

In scope:

  • Code is power:
    • Power is danger.
    • Examples of dangerous broken code.
  • Automated tests: guard against breakage.
    • Testing requires courage:
    • Code and tests are not only read by machines.
    • Example cryptic code.
  • Documentation is wisdom:
    • Bug definition: a bug is ill-defined without a specification.
    • You are human, speak to humans.
    • The various types of documentation:
      • For users:
        • Context: why using it, what to use it for.
        • Guide: how to use it.
        • Status: what's the project situation now.
      • For developers:
        • Implementation report: how does it work.
        • Technical details: why these choices, advantages/limitations.
      • For both: specifications: what does it do:
        • Informal.
        • Formal.
    • Documentation supports:
      • README.md
      • Docstrings.
      • Comments.
      • Tests.
      • Identifiers names.
      • Code style.
    • If you loose all but documentation remains, you can rebuild everything easily.

Topic: (Neo)Vim

Prerequisites:

  • You write scripts and code.
  • You are confident with your keyboard.
  • You like keyboard mappings / shortcuts / macros / automations, anything that speeds up your workflow.
  • You are willing to spend weeks (no kidding) learning / configuring a very sophisticated piece of software, just so it fits your exact needs and eventually bring you closer to coding at the ultimate speed of thought.

In scope:

  • Introduction to vim/neovim.
    • First steps with :vimtutor/:Tutor.
    • Disable <left>/<right>/<up>/<down>: focus on your home row.
    • Practice. Practice. Practice.
    • Config file:
      • Custom mappings.
      • "Metamaps" to easily add/modify mappings.
      • Start crafting your own home.
    • Navigate files.
  • Vimscript/lua.
  • Extensions.
  • Developing with vim/neovim: at least all IDE features should become a breeze.