Programming Resources

Shell Enhancements

Treat yourself!

Install fish shell.

Then Oh My Fish, and the Bob my Fish theme.

Finally, add powerline.

Your eyes will thank you!

Don’t forget to install the powerline or nerd fonts below, and use one of these as your terminal font.

Coding Fonts

Monospaced fonts usually make writing code easier on the eye- eg to clearly line up blocks of code and see how nested things are.

  • powerline-fonts - hacked to include special symbols, used by utilities like powerline.
  • nerd-fonts - powerline fonts++!
  • FiraCode: has programming ligatures… this means multi-character symbols, eg ! =, - > etc become single character math symbols, arrows, etc, eg !=, ->
  • Victor Mono: elegent, with italic style being a semi-connected cursive. Really highlights comments. Supports code ligatures.
  • Anonymous Pro: very tidy, and boxy
  • B612: developed for AirBus for use in cockpit instrumentation. Goal was to make it very clear and legible.

Practicing

  • CyberDojo - could set up a server and host sessions
  • repl.it: Program in the cloud! Many languages available (but scripting languages appear to be better supported/more featured.) Google Docs like collaboration. Learning tracks/tutorials available.

Learning to Program

Online Courses

Block Based Systems

  • Microsoft MakeCode - block based system, that also trails into text based coding (javascript) that supports Mindstorms EV3, Micro:Bit, Circuit Playground Express, BrainPad Arcade, … includes limited on-screen simulation, which allows for rapid experimentation, shortens code-debug cycles, and rapid achievement. Until you hit the limits of the simulator :slight_smile:
  • Scratch - very popular, lots of online resources. Very interesting; it allows/uses concurrent/event based programming trivial. Note, Scratch 2 is flash based; Scratch 1.4 is perhaps more commonly used. Read the scratch fan
  • [MicroBlocks](
  • Trinket
  • turtleblockjs at SugarLabs. Source code is on GitHub.

Integrated Environments

Programming systems that are self contained. Less parts to install to get going.

  • squeak - Smalltalk. Early object oriented language, very dynamic, fast, portable. Local expert: Tim Rowledge

Mechatronics

Learn to program by making things happen in the real-world.

Most of these are their own mini-worlds, so linking out to other reference wiki pages here.

Extensible Games

Learning works best if you’re having fun!

Minecraft

Look for the [programming] section of the [Minecraft page].

Others

  • Roblox. Apparently programmable.
    *Pico-8 and Voxatron
    • fantasy consoles (think NES, Playstation 1/2) with arbitrary limitations (e.g. small memory)
    • full systems, include program, music, and visual editors
    • Lua based, very quick and easy to try ideas
    • games (applications) saved embedded in a PNG image… called ‘cartridges’
    • javascript player/version- so can put games on your website
    • included with GetChip (~$9USD) small computers
    • Pico8 Zine

Languages

Lua

Small, embeddable (can be put inside other programs, eg written in C/C++), easy to learn scripting language.

Python

C/C++

JavaScript

Assembly Language

Building ASM with GNU Tools

ASM file -> nasm -> ld

More details.

WEBASM

In short: a virtual CPU in your browser that allows the execution of “web assembly” at near native speed, with secuity.

An introduction on Hack-A-Day.

The performance can be amazing: e.g. V86 an X86 (~Pentium III) virtual machine in your browser!

Emscripten

Emscripten is a compiler and library tool set that allows cross-compiling C/C++ to WEBASM. Includes support for WebGL, SDL1 & SDL2, audio, and more.

Wasmer

Wasmer is similar to emscripten but more focused on utilities that can be run anywhere- eg client side or server side. Includes libraries to host WEBASM in other languages, eg Python, C/C++, Go, Rust, and many more.

Libraries

  • Dear ImGUI - simple, straight forward, but expansive UI library that has minimal dependencies; bindings for many languages available
  • ImTUI - port of ImGUI for text based consoles.

Virtual Reality (VR) and Augmented Reality (AR) - “XR”

Systems specifically for creating VR/AR experiences.

Web Based

  • WebXR - landing page for AR & VR development using web technologies- no installation required for end users!
    • WebAR landing page
      • lists quite a few tools/apps/utilities
      • also some development frameworks - AR.js looks to be maintained and very easy to use.

Unity

Unity is a very powerful and easy to use (relative to it’s power) game development environment. It works across many devices, and includes support for VR and AR development.

  • Unity AR - AR Foundation is included with Unity for free. MARS (editor for simplifying the process of creating AR apps) is a paid subscription.
  • Vuforia tutorial - Vuforia is an existing framework from PTC that adds AR to Unity. Free to explore, but costs to deploy