This gist is a fork of the gist from this blog post.
http://matt.might.net/articles/what-cs-majors-should-know/
- Read Hacking: The Art of Exploitation, 2nd Edition
- Read Gray Hat Python: Python Programming for Hackers and Reverse Engineers
- Read The Hacker Playbook 2: Practical Guide To Penetration Testing
- Attend a code retreat
- Read SICP and complete all the exercises
- Complete five code katas
- Complete the programming koans for a language you want to learn
- Complete a project using TensorFlow
- Complete Udacity's Machine Learning Engineer nanodegree
Write an app using Vert.xWrite an app using RxJava
- 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
Earn Associate level programmer's certification- Earn Professional level programmer's certification
- Earn Master level programmer's certification
- Earn Web Services Developer Certified Expert certification
- Earn Web Component Developer Certified Expert certification
- Earn Java EE 6 Enterprise Architect certifications
- Read introductory book
- Complete a non-trivial project
- Read through "getting started"
- Complete a non-trivial web-project using Phoenix
Complete Elixir Koans- Complete Etudes for Elixir
- Complete 30 days of Elixir
- Complete How I Start Elixir
- Complete shopping cart exercises
- Read The Little SChemer
- Read The Seasoned Schemer
- Read The Scheme Programming Language
- Complete a non-trivial project
- Read introductory book
- Complete 10 of these problems
- Complete non-trivial project
Take Coursera introductory class- Complete Coursera Scala specialization
- Complete non-trivial project
- Read Eloquent JavaScript
- Read JavaScript: The Good Parts
- Read Effective JavaScript
- Read Secrets of the JavaScript Ninja
- Complete Udacity's Object-Oriented JavaScript
- do something with D3.js
- Read Ruby Under a Microscope: An Illustrated Guide to Ruby Internals
- Read Practical Object-Oriented Design in Ruby: An Agile Primer
- Complete [Learn Ruby the Hard Way] (http://media.thebirn.com/webteam/LearnRubyTheHardWay.pdf)
Complete a non-trivial project- Complete the Ruby [koans] (http://sett.ociweb.com/sett/settJan2011.html#ruby-koans)
- Read Python Programming: An Introduction to Computer Science
- Complete a non-trivial project
- Complete The C Programming Language
- Read Advanced Programming in the Unix Environment
Complete a non-trivial project
- Read The Go Programming Language
- Complete a non-trivial project
- Complete Udacity's iOS Developer nanodegree
- Read The Swift Programming Language iBook
- Complete a non-trivial program
- Complete Udacity's Android Developer nanodegree
- Complete Coursera's Android App Development specialization
- Complete a non-trivial program
Complete a non-trivial project- Write an app sharing core but with different mobile/Web views
- Complete [Learn Regex the Hard Way] (http://regex.learncodethehardway.org/book/)
- Read Mastering Regular Expressions, 2nd Edition — Jeffrey Friedl
- Complete RegexOne Tutorial
- Read http://matt.might.net/articles/discrete-math-and-code/
- Watch Arthur Benjamin's Discrete Mathematics lecture series.
- Watch Introduction to Number Theory lecture series.
- Read Essentials of Discrete Math
- Read Proof as a Tool for Learning Mathematics
Watch Logic - The Structure of Reason- Read http://matt.might.net/articles/logical-literacy/
- watch mathbff videos
- read http://betterexplained.com/articles/prehistoric-calculus-discovering-pi/
- complete Khan Academy Differential Calculus
- complete Khan Academy Integral Calculus
- complete Khan Academy Multivariable Calculus
- complete Khan Academy Differential equations
- complete Pre-Calculus
- complete Calculus One
- complete Calculus Two: Sequences and Series
- complete Better Explained: Calculus
http://betterexplained.com/articles/understanding-algebra-why-do-we-factor-equations/- http://betterexplained.com/articles/law-of-cosines/
- http://betterexplained.com/articles/law-of-sines/
- http://betterexplained.com/articles/think-with-exponents/
- http://betterexplained.com/articles/ratio-oomph/
- http://betterexplained.com/articles/intuitive-trigonometry/
- http://betterexplained.com/articles/a-quick-intuition-for-parametric-equations/
- http://betterexplained.com/articles/linear-algebra-guide/
http://betterexplained.com/articles/math-as-language-understanding-the-equals-sign/- http://betterexplained.com/articles/a-brief-introduction-to-probability-statistics/
- http://betterexplained.com/articles/understanding-why-complex-multiplication-works/
- http://betterexplained.com/articles/navigate-a-grid-using-combinations-and-permutations/
- http://betterexplained.com/articles/understanding-exponents-why-does-00-1/
- http://betterexplained.com/articles/developing-your-intuition-for-math/
- http://betterexplained.com/articles/intuitive-guide-to-angles-degrees-and-radians/
- http://betterexplained.com/articles/how-to-analyze-data-using-the-average/
- http://betterexplained.com/articles/rescaling-the-pythagorean-theorem/
http://betterexplained.com/articles/rethinking-arithmetic-a-visual-guide/- http://betterexplained.com/articles/a-quirky-introduction-to-number-systems/
- http://betterexplained.com/articles/measure-any-distance-with-the-pythagorean-theorem/
- http://betterexplained.com/articles/surprising-uses-of-the-pythagorean-theorem/
- http://betterexplained.com/articles/another-look-at-prime-numbers/
- http://betterexplained.com/articles/demystifying-the-natural-logarithm-ln/
- http://betterexplained.com/articles/how-to-understand-combinations-using-multiplication/
- http://betterexplained.com/articles/easy-permutations-and-combinations/
- complete MIT's Mathematics for Computer Science
- complete Coding the Matrix: Linear Algebra through Computer Science Applications
- complete Analytic Combinatorics
complete Khan Academy Fundamentals- complete Khan Academy High School Math
- complete Khan Academy Linear algebra
- complete Introduction to Mathematical Thinking
- Watch Stanford's Einstein's General Theory of Relativity lectures
- Read In Search of Schrödinger's Cat
- Read A Brief History of Time
- Complete chemistry set experiments
- Read Spooky Action at a Distance: The Phenomenon That Reimagines Space and Time--and What It Means for Black Holes, the Big Bang, and Theories of Everything
- Read The Theoretical Minimum: What You Need to Know to Start Doing Physics
- Complete Khan Academy's electrical engineering course
- Complete Khan Academy's physics course
- Read Wikipedia's classical mechanics page
- Read Classical Mechanics
- Watch Stanford's Classical Mechanics lectures
- Read Wikipedia's statistical mechanics page
- Read Wikipedia's electromagnetism page
- Read Wikipedia's special relativity page
- Read Wikipedia's quantum mechanics page
- Read Wikipedia's Concurrency page
- Read Wikipedia's Concurrent Computing
- Read through Areas of computer scinece
- Read through Unsolved problems in computer science
- Read Code: The Hidden Language of Computer Hardware and Software
- Read Transactional Information Systems: Theory, Algorithms, and the Practice of Concurrency Control and RecoveryTransaction stuff
- Read The Society of Mind
- Read Schrödinger's 'What Is Life'
- Read Epistemology
- Read through Systems science
- Read through Connectionism
- Get comfortable with table lookup, graph theory, big data, and machine learning in general
- Study Emergence and Emergent Robustness (an up and coming discipline) and Systems Biology
- Read through Philosophy of science
- Read through Complexity theory
- Read through Wikipedia's Information theory entry
- Read Elements of Information Theory 2nd Edition
- Read Information Theory: A Tutorial Introduction
- Read Why Information Grows: The Evolution of Order, from Atoms to Economies
- Complete Kahn Academy's Information Theory course
- Read The Information: A History, A Theory, A Flood
- Read An Introduction to Information Theory: Symbols, Signals and Noise
- Complete Khan Academy's Intro to Algorithms
- Learn about fundamental data types (stack, queues, and bags), sorting algorithms (quicksort, mergesort, heapsort), and data structures (binary search trees, red-black trees, hash tables), Big O.
- MIT's Intro to Algorithms
- Coursera Algorithms 1
- Coursera Algorithms 2
- Read The Algorithm Design Manual
- Complete Udacity's Programming Languages course
- Complete Coursera's Compiler's course
- Read Writing Compilers and Interpreters: A Software Engineering Approach
- Write compiler/interpretor for an existing language
- Complete Coursera's Cryptography course
- Complete Udacity's Applied Cryptography course
- Complete Khan Academy's Journey into Cryptography
- Read The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography
- Implement RSA
- automata and grammars and their relaionship to each other
- complete https://www.coursera.org/course/optimization
- https://www.coursera.org/course/linearprogramming
Watch Khan Academy's Journey into Information Theory- look through cs stuff here http://www.saylor.org/courses/
- look through https://intelligence.org/research-guide/
- read What every programmer should know about memory
- Build a simple computer
- Read and complete the Arduino projects in 30 Arduino Projects for the Evil Genius
- Go throught the Mojo FPGA tutorials
- Raspberry Pi
- Build desktop
- Look through these http://www.hackvandedam.nl/blog/?p=762
- read this http://www.amazon.com/dp/1449344046/ref=rdr_ext_tmb
- take this course
- take this course
- take this course
- take this course
- learn about basic gates
- 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 RailsComplete The Odin Project tutorial- Write a Web app with Django
Write a Web app with BootstrapWrite a Web app with AngularJS- Write a Web app that uses Polymer components
Functional Programming
- read http://www.amazon.com/dp/0521663504/ref=rdr_ext_tmb
- read this article
- take Introduction to Functional Programming
- read Functional JavaScript in Safari
- read Functional Thinking in Safari
- read JavaScript Allongé
- these exercises
- complete this workshop
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
Use Eclipse exclusively for a monthUse IntelliJ IDEA exclusively for a month- Vim
Use Vim exclusively for a month- Complete [Vim Adventures] (http://vim-adventures.com/)
Complete the Vim tutorial- Read Learning the vi and Vim Editors
- Complete these tutorials.
- Use Emacs exclusively for a month
- Write an app using NoSQL
- Write an app using Hadoop
- Complete Udacity's Intro to Hadoop and MapReduce course
- ~W`rite an app using Hibernate~~
- Write an app using JPA
- Complete the Computer Science - Operating Systems course
- Write an operating system
- Read https://littleosbook.github.io/
- Design a scheduler
- Modify page-handling process
- Create own filesystem
Use a Mac exclusively for development for a month
- Print 'hello world' during boot process
- Read The Design of the Unix Operating System
- earn LFCS certification (https://training.linuxfoundation.org/certification/lfcs)
Read The UNIX Time-Sharing SystemComplete The Command Line Crash CourseInstall Linux- Build Linux From Scratch
- After LFS, BLFS
- Then read Stealing the Network
- go throught the Linux Foundation web site
- go through the Linux Foundation collaborative projects
- go through the LFCS certification competencies
- go through the LFCE certification competencies
- read the Filesystem Hierarchy Standard
- read Linux Basics – LVM (Logical Volume Manager) Tutorial
- Complete learning KVM
- Set up a virtual server (or this: Download Ubuntu Server and install their "Ubuntu Enterprise Cloud" and play with Xen to learn about virtualization. See if you can start up an instance for Apache, Postfix and MySQL (or postresql) on separate virtual servers and then get them to connect to each other. Play with load balancing.)
- Read UNIX and Linux System Administration Handbook
- Use Linux exclusively for development for a month
- Create my own distro built on top of Ubuntu. Customize the installer with my own branding.
- Compile the Linux kernel
- Complete Learn Linux the Hard Way
- Read the GNU Readline docs
Use zsh exclusively for a month.- Read A User’s Guide to the Z-Shell
Read Oh My Zsh!Use Windows exclusively for development for a month- With two linux systems and one AD server accessed only via TLS/SSL for ldap:
- Install CentOS/RHEL on each linux system.
- Bind both systems to AD and use it for NTP. Restrict ssh login access to a security group of administrators on each linux server
- 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)
- On "client" server set up autofs to automount the nfs home directories when the users log in via ssh.
- 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.
- 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.
- http://mininet.org/
- https://www.udacity.com/course/ud436
Complete Wireshark tutorial- Complete these Wireshark exercises
- Complete these Wireshark exercises
- implement an HTTP client and daemon
- implement a DNS resolver and server
- implement a command-line SMTP mailer
Write an HTTP server (see http://tia.mat.br/posts/2014/10/06/life_of_a_http_request.html)- Write a TCP stack (see http://jvns.ca/blog/2014/08/12/what-happens-if-you-write-a-tcp-stack-in-python/)
- Complete Part 1: Standard I/O streams and the file system
- Complete Part 2: Encoding and decoding binary files
- Complete Part 3: Parsing text-based formats
- Complete Part 4: Socket programming and network I/O
- Write an application or framework that provides a plugin model
- Write a testing framework
- Write a programming language
Write an embedded appWrite a realtime systemWrite an MVC Web framework- Write a device driver
- Write a B-tree database
Read a biography of John von Neumann- Read Where Wizards Stay Up Late: The Origins Of The Internet
- Read a biography of Alan Turing
- Read Turing: Pioneer of the Information Age
Watch Breaking the CodeRead Turing's Cathedral: The Origins of the Digital UniverseRead The Universal Computer: The Road from Leibniz to Turing- Read The Universal History Computing
- Read Computer: A History of the Information Machine
Watch The Machine That Changed the WorldWatch Computer Pioneers and Pioneer ComputersWatch Revolution OSWatch Nerds 2.0.1: A Brief History of the InternetWatch Digital Nation: Life on the Virtual Frontier- Read 10 biographis of unfamiliar computer scientists
- Read History of computer science and follow any links that look interesting
Read Steve Jobs- Read The Innovators: How a Group of Hackers, Geniuses, and Geeks Created the Digital Revolution
- Read Computing: A Concise History
Steve Yegge's [10 great books] (https://sites.google.com/site/steveyegge2/ten-great-books)
Read The Pragmatic Programmer: From Journeyman to Master — Andy Hunt and Dave ThomasRead Refactoring: Improving the Design of Existing Code — Martin FowlerRead 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
- [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 StracheyWhy 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 ParnasA 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
Read Great Hackers
- 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
Present a lightning talkPresent 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
- 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
Join the ACM- Join the IEEE
- 30-day Meetup challenge
- 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 MinskyMargaret 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
- Read through Martin Fowler's application architecture tags
- Read through Martin Fowler's technical leadership tags
- Read through Martin Fowler's application integration tags
- Read Chapter 1: Service Oriented Architecture (SOA)
- Read (http://capgemini.github.io/architecture/is-rest-best-microservices/)
- Read (http://www.infoq.com/presentations/microservices-docker-cqrs)
- Read (https://techietweak.wordpress.com/2015/07/05/mdp/)
- Read Software Architecture in Practice
- Complete Coursera's Emerging Technologies specialization
- Complete Coursera's Cloud Computing specialization
- Earn the SEI Software Architecture Professional Certificate
- Earn TOGAF certification
- 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) ** Implement a leader election algorithm and play with the fault tolerance. ** Implement Raft and learn about it, good and bad. ** Implement a logging application that has to meet all the requirements for a good distributed system. e.g. log from anywhere, always available, etc.