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.

Hacking

Architecture

Enlighten yourself with koans, katas and the wisdom of ages

Certifications

Machine Learning

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

Programming Paradigms

Object-Oriented

Java

  • Read Java 8 in Action
  • Write a multi-threaded program
  • Write a Swing app
  • Write a networking app using socket programming
  • Write an networking app using RMI
  • Write a nontrivial app that uses messaging
  • Build a class loader
  • Complete this class loader tutorial
  • Read this series on JVM memory

Groovy

  • Read introductory book
  • Complete a non-trivial project

Functional

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
  • Write a Web app using React

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

Editors/IDEs

  • Eclipse
  • Use Eclipse exclusively for a month
  • Complete Eclipse navigation muscle memory practice sessions
  • Complete this report and apply any useful techinques
  • IntelliJ IDEA
  • Use IDEA exclusively for a month
  • Vim
  • Use Emacs exclusively for a month

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.
* ~~Use [zsh](http://zsh.sourceforge.net/) exclusively for a month.~~ * Read [A User’s Guide to the Z-Shell](http://zsh.sourceforge.net/Guide/zshguide.html) * ~~Read [Oh My Zsh!](http://zanshin.net/2011/08/12/oh-my-zsh/)~~ * ~~Use Windows exclusively for development for a month~~

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

See this and this.

  • [https://www.usenix.org/system/files/conference/osdi14/osdi14-paper-yuan.pdf](Simple Testing Can Prevent Most Critical Failures: An Analysis of Production Failures in Distributed Data-Intensive Systems)
  • [http://homepages.cs.ncl.ac.uk/brian.randell/NATO/nato1968.PDF](Software Engineering - 1968 NATO Conference)
  • Fundamental Concepts in Programming Languages - Christopher Strachey
  • Why Functional Programming Matters - John Hughes
  • An Axiomatic Basis for Computer Programming - C. A. R. HOARE
  • Time, Clocks, and the Ordering of Events in a Distributed System - Leslie Lamport
  • On Understanding Types, Data Abstraction, and Polymorphism - Luca Cardelli and Peter Wegner
  • Recursive Functions of Symbolic Expressions and Their Computation Machine, Part I - John McCarthy
  • Predicate Dispatch: A Unified Theory of Dispatch - Michael Ernst, Craig Kaplan, and Craig Chambers
  • Equal Rights for Functional Objects or, The More Things Change, The More They Are the Same - Henry G. Baker
  • Organizing Programs Without Classes - David Ungar, Craig Chambers, Bay-wei Chang, and Urs Hölzle
  • Dynamo: Amazon’s Highly Available Key-value Store
  • Out of the Tar Pit - Ben Moseley and Peter Marks
  • On the criteria to be used in decomposing systems into modules - David Parnas
  • A Note On Distributed Computing - Jim Waldo, Geoff Wyant, Ann Wollrath, Sam Kendall
  • The Next 700 Programming Languages - P. J. Landin
  • Can Programming Be Liberated from the von Neumann Style? - John Backus
  • Reflections on Trusting Trust - Ken Thompson
  • Lisp: Good News, Bad News, How to Win Big - Richard Gabriel
  • An experimental evaluation of the assumption of independence in multiversion programming - John Knight and Nancy Leveson
  • Arguments and Results - James Noble
  • A Laboratory For Teaching Object-Oriented Thinking - Kent Beck, Ward Cunningham
  • Programming as an Experience: the inspiration for Self - David Ungar, Randall B. Smith
  • Read The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine
  • Read A Theory of Type Polymorphism in Programming
  • Read What is Software Design?
  • Read No Silver Bullet
  • Read Simple Smalltalk Testing: With Patterns
  • Read An Axiomatic Basis for Computer Programming

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

Chrome Developer Tools

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
  • Explore GitHub
  • http://gitimmersion.com/index.html
  • Write a nontrivial game
  • Complete all of Dave Thomas's [CodeKatas] (http://codekata.com/)
  • http://programmingpraxis.com/contents/chron/
  • Read Great Hackers
  • 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
  1. Learn the basics of how to architect a small distributed system that is fault tolerant, resilient and reliable. You can't learn it all in 11 days, but man you can make a big dent and it is to me one of the most fun and challenging problems to solve. And there is still so much to learn. You can build and test little systems in AWS for nearly nothing using t2 instances. (see http://googlecloudplatform.blogspot.com/2015/11/containerizing-in-the-real-world-of-Minecraft.html)

Recurrent Neural Networks http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/

ottoproject.io

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