Skip to content

Instantly share code, notes, and snippets.

@rvong
Created March 16, 2018 01:02
Show Gist options
  • Save rvong/eda54abed5e547b8fb9ccac256fe4a33 to your computer and use it in GitHub Desktop.
Save rvong/eda54abed5e547b8fb9ccac256fe4a33 to your computer and use it in GitHub Desktop.
Leveling Up - Overview

Programming Achievements: How to Level Up as a Developer

This gist is a fork of the gist from this blog post.

http://matt.might.net/articles/what-cs-majors-should-know/

Hacking

Enlighten yourself with koans, katas and the wisdom of ages

Machine Learning

  • Complete a project using TensorFlow
  • Complete Udacity's Machine Learning Engineer nanodegree

Programming Paradigms

Reactive

  • Write an app using Vert.x
  • Write an app using RxJava

Object-Oriented

Java

Groovy

  • Read introductory book
  • Complete a non-trivial project

Functional

Elixir

Scheme

  • Read The Little SChemer
  • Read The Seasoned Schemer
  • Read The Scheme Programming Language
  • Complete a non-trivial project

Clojure

  • Read introductory book
  • Complete 10 of these problems
  • Complete non-trivial project

Scala

  • Take Coursera introductory class
  • Complete Coursera Scala specialization
  • Complete non-trivial project

Scripting

JavaScript

Ruby

Python

System

C

Go

Mobile Environments

iOS

  • Complete Udacity's iOS Developer nanodegree
  • Read The Swift Programming Language iBook
  • Complete a non-trivial program

Android

  • Complete Udacity's Android Developer nanodegree
  • Complete Coursera's Android App Development specialization
  • Complete a non-trivial program

Ionic framework

  • Complete a non-trivial project
  • Write an app sharing core but with different mobile/Web views

Regular Expressions

Math

Discrete Math

Calculus

Intuitive Math

Computer Science Math

Other Math

Physics and Science

Computer Science

Fundamentals

Artificial Intelligence

Information Thoery

Algorithms and Data Structures

Compilers and Interpreters

Cryptography

Misc Computer Science

Computer Engineering and Architecture

Artificial Intelligence

  • watch Stanford's Introduction to Robotics course
  • watch Stanford's Natural Language Processing course
  • watch Stanford's Machine Learning course

Frameworks

  • Write a Web app with Ruby on Rails
  • Complete The Odin Project tutorial
  • Write a Web app with Django
  • Write a Web app with Bootstrap
  • Write a Web app with AngularJS
  • Write a Web app that uses Polymer components

Functional Programming

Program for Various Environments

  • Write a nontrivial Web app
  • Write a nontrivial Mac desktop app
  • Write a nontrivial mobile Web app

Web Platform

  • Write a nontrivial HTML5 Web app
  • Write an app using WebGL
  • Write an app using Web Workers
  • Write an app using Three.js
  • Complete Udacity's Senior Web Developer nanodegree

Editors/IDEs

Manipulate Data Without SQL

Operating Systems

General

OSX

  • Use a Mac exclusively for development for a month

Linux and Unix

  1. Install CentOS/RHEL on each linux system.
  2. Bind both systems to AD and use it for NTP. Restrict ssh login access to a security group of administrators on each linux server
  3. Export home directories via gss-secured NFSv4 on one system, restricting access to only the "client" server in whatever way you choose (there are at least 4 ways I can think of off the top of my head)
  4. On "client" server set up autofs to automount the nfs home directories when the users log in via ssh.
  5. Grant password-required sudo access to the "administrators" security group on each linux system. See if you can restrict access to each admin's home directory from the other admins when they are in a sudo shell.
  6. Export another "/share" directory on the linux nfs server Set up samba on "client" server and re-share out the new nfs-shared directory restricting access to a security group on AD. All under SELinux Enforcing.

Networking

Development Building Blocks

History of Computing

Books and Readings

  • Read The Pragmatic Programmer: From Journeyman to Master — Andy Hunt and Dave Thomas
  • Read Refactoring: Improving the Design of Existing Code — Martin Fowler
  • Read Design Patterns — Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
  • Read Concurrent Programming in Java(TM): Design Principles and Pattern (2nd Edition) — Doug Lea
  • Read The Algorithm Design Manual — Steven Skiena
  • Read The C Programming Language, Second Edition — Brian Kernighan and Dennis Ritchie
  • Read The Little Schemer — Daniel P. Friedman and Matthias Felleisen
  • Read Compilers — Aho, Sethi and Ullman
  • Read [WikiWikiWeb] (http://c2.com/cgi/wiki) — Ward Cunningham and thousands of others

Steve Yegge's challenging books

  • Read Gödel, Escher, Bach: An Eternal Golden Braid — Douglas R. Hofstadter
  • Read and watch this course on GEB
  • Read Structure and Interpretation of Computer Programs — Harold Abelson, Gerald Sussman
  • Read Digital Typography — Donald Knuth
  • Read Programming Language Pragmatics — Michael Scott
  • Read The Essentials of Programming Languages — Friedman, Wand, Haynes.
  • Read Types and Programming Languages Benjamin C. Pierce
  • Read The Seasoned Schemer — Daniel P. Friedman, Matthias Felleisen
  • Read The Scheme Programming Language — R. Kent Dybvig
  • Read How to Design Programs — Felleisen, Findler, Flatt, Krishnamurthi
  • Read Purely Functional Data Structures — Chris Okasaki

Academic Papers and Essays

See this and this.

Program in the open

  • Contribute to an open source project
  • Have a patch accepted
  • Earn commit rights on a significant open source project
  • Publish an open source project
  • Perform a Refactotum of an open source project

Learn by teaching others

  • Present a lightning talk
  • Present at a local user group
  • Present at a conference
  • Deliver a training course
  • Publish a tutorial
  • Publish a constructive code review of an open source project
  • Write a book

Minimilist

  • Make a binary adder using falling dominoes
  • make a functional ddigital clock with neon bulbs, resistors, capacitors, diodes, wires and a wall plug
  • make a turing machine with LEGO blocks (use a crank to run it
  • make some logic using fluidics with a router and some plegiglas and the nether end of a vacuum cleaner

Read Through Source Code

Organizations

  • Join the ACM
  • Join the IEEE
  • 30-day Meetup challenge

Misc

  • Lookup Douglas Hofstadter influences you are unfamiliar with
    • Ernest Nagel
    • James R. Newman
    • Martin Gardner
    • Raymond Smullyan
    • John Pfeiffer
    • Wilder Penfield
    • Patrick Suppes
    • David Hamburg
    • Albert Hastorf
    • MC Escher
    • Howard DeLong
    • Richard C. Jeffrey
    • Ray Hyman
    • Karen Horney
    • Mikhail Bongard
    • Gregory Chaitin
    • Stanislaw Ulam
    • Leslie A. Hart
    • Roger Sperry
    • Jacques Monod
    • Raj Reddy
    • Victor Lesser
    • Marvin Minsky
    • Margaret Boden
    • Terry Winograd
    • Donald Norman
    • Eliot Hearst
    • Allen Wheelis
    • John Holland
    • Robert Axelrod
    • Gilles Faucononier
    • Paolo Bozzi
    • Giuseppe Longo
    • Valentino Braitenberg
    • Derek Parfit
    • Anne Treisman
    • Mark Turner
    • Jean Aitchison
  • Complete gitimmersion
  • Write a nontrivial game
  • Complete 10 exercises
  • Do something with a binary abacus
  • Do something here
  • Look at these
  • Make a simulation Enigma Machine
  • Read through Martin Fowler's refactoring tags
  • Read through Martin Fowler's object collaboration tags

Architecture

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment