# Programming Achievements: How to Level Up as a Developer This gist is a fork of the gist from this blog post. ## Hacking * Read [Hacking: The Art of Exploitation, 2nd Edition](http://www.amazon.com/dp/1593271441/ref=rdr_ext_tmb) * Read [Gray Hat Python: Python Programming for Hackers and Reverse Engineers](http://www.amazon.com/Gray-Hat-Python-Programming-Engineers/dp/1593271921/ref=dp_rm_title_1) * Read [The Hacker Playbook 2: Practical Guide To Penetration Testing](http://www.amazon.com/dp/1512214566/ref=rdr_ext_tmb) ## Enlighten yourself with koans, katas and the wisdom of ages * Attend a [code retreat](http://coderetreat.org/) * Read [SICP](http://mitpress.mit.edu/sicp/) and complete all the exercises * Complete [five code katas](http://codekata.com/) * Complete the [programming koans](http://sett.ociweb.com/sett/settJan2011.html) for a language you want to learn ## 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](http://www.javaworld.com/article/2077260/learn-java/the-basics-of-java-class-loaders.html) * Complete this class loader [tutorial](http://zeroturnaround.com/rebellabs/rebel-labs-tutorial-do-you-really-get-classloaders/) * Read this series on JVM [memory](https://blog.codecentric.de/en/2010/01/java-outofmemoryerror-a-tragedy-in-seven-acts/) * ~~Earn [Associate](http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=458&get_params=p_track_id:JSE7Prog) level programmer's certification~~ * Earn [Professional](http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=5001&get_params=p_exam_id:1Z0-804&p_org_id=&lang=) level programmer's certification * Earn [Master](https://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=653&get_params=p_id:153#tabs-3) level programmer's certification * Earn [Web Services Developer Certified Expert](https://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=654&get_params=p_id:161) certification * Earn [Web Component Developer Certified Expert](https://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=653&get_params=p_id:188#tabs-1-3) certification * Earn [Java EE 6 Enterprise Architect](https://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=653&get_params=p_id:212#tabs-2-2) certifications #### 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](http://www.4clojure.com/problems) problems * Complete non-trivial project #### Scala * ~~Take Coursera [introductory class](https://class.coursera.org/progfun-005)~~ * Complete Coursera Scala specialization * Complete non-trivial project ### Scripting #### JavaScript * Read [Eloquent JavaScript](http://eloquentjavascript.net/contents.html) * Read [JavaScript: The Good Parts](http://shop.oreilly.com/product/9780596517748.do) * Read [Effective JavaScript](http://effectivejs.com/) * Read [Secrets of the JavaScript Ninja](http://www.manning.com/resig/) * Complete Udacity's [Object-Oriented JavaScript](https://www.udacity.com/course/ud015) * do something with D3.js #### Ruby * Read [Ruby Under a Microscope: An Illustrated Guide to Ruby Internals](http://www.amazon.com/Ruby-Under-Microscope-Illustrated-Shaughnessy/dp/B00NPOI5WS/) * Read [Practical Object-Oriented Design in Ruby: An Agile Primer](http://www.amazon.com/Practical-Object-Oriented-Design-Ruby-Addison-Wesley/dp/0321721330/) * 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) #### Python * Read [Python Programming: An Introduction to Computer Science](http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/) * Complete a non-trivial project ### System #### C * Complete [The C Programming Language](http://www.amazon.com/Programming-Language-Brian-W-Kernighan/dp/0131103628/ref=sr_1_1?ie=UTF8&qid=1450801415&sr=8-1&keywords=c+programming) * Read Advanced Programming in the Unix Environment * ~~Complete a non-trivial project~~ #### Go * Read [The Go Programming Language](http://www.amazon.com/Programming-Language-Addison-Wesley-Professional-Computing/dp/0134190440/) * Complete a non-trivial project ## 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 * Complete [Learn Regex the Hard Way] (http://regex.learncodethehardway.org/book/) * Complete [Regex Golf] (http://regex.alf.nu/) * Read Mastering Regular Expressions, 2nd Edition — Jeffrey Friedl * Complete [RegexOne Tutorial](http://regexone.com/) ## Math ### Discrete Math * Read http://matt.might.net/articles/discrete-math-and-code/ * Watch Arthur Benjamin's [Discrete Mathematics](http://www.infocobuild.com/education/learn-through-videos/mathematics/discrete-mathematics.html) lecture series. * Watch [Introduction to Number Theory](http://www.infocobuild.com/education/learn-through-videos/mathematics/introduction-to-number-theory.html) lecture series. * Read [Essentials of Discrete Math](http://www.amazon.com/gp/product/1449604420/ref=oh_details_o01_s00_i00?ie=UTF8&psc=1) * Read [Proof as a Tool for Learning Mathematics](http://web.mit.edu/bskow/www/215-S12/knuth_proof-as-a-tool-for-learning.pdf) * ~~Watch [Logic - The Structure of Reason](http://documentaries-plus.blogspot.com/2012/10/logic-structure-of-reason.html)~~ * Read http://matt.might.net/articles/logical-literacy/ ### Calculus * watch [mathbff](https://www.youtube.com/user/mathbff) videos * read http://betterexplained.com/articles/prehistoric-calculus-discovering-pi/ * complete [Khan Academy](https://www.khanacademy.org/) Differential Calculus * complete [Khan Academy](https://www.khanacademy.org/) Integral Calculus * complete [Khan Academy](https://www.khanacademy.org/) Multivariable Calculus * complete [Khan Academy](https://www.khanacademy.org/) Differential equations * complete [Pre-Calculus](https://www.coursera.org/course/precalculus) * complete [Calculus One](https://www.coursera.org/learn/calculus1) * complete [Calculus Two: Sequences and Series](https://www.coursera.org/learn/advanced-calculus) * complete [Better Explained: Calculus](http://betterexplained.com/calculus/) ### Intuitive Math * ~~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/ ### Computer Science Math * 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](http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-fall-2010/index.htm) * complete [Coding the Matrix: Linear Algebra through Computer Science Applications](https://www.coursera.org/course/matrix) * complete [Analytic Combinatorics](https://www.coursera.org/course/ac) ### Other Math * ~~complete [Khan Academy](https://www.khanacademy.org/) Fundamentals~~ * complete [Khan Academy](https://www.khanacademy.org/) High School Math * complete [Khan Academy](https://www.khanacademy.org/) Linear algebra * complete [Introduction to Mathematical Thinking](https://www.coursera.org/course/maththink) ## Physics and Science * Watch Stanford's [Einstein's General Theory of Relativity](https://www.youtube.com/watch?v=hbmf0bB38h0) lectures * Read [In Search of Schrödinger's Cat](http://www.amazon.com/In-Search-Schr%C3%B6dingers-Cat-Quantum/dp/0553342533/ref=pd_sim_14_69?ie=UTF8&dpID=51jP5WC9brL&dpSrc=sims&preST=_AC_UL160_SR102%2C160_&refRID=18SYDS2QPE982660TSHT) * Read [A Brief History of Time](http://www.amazon.com/Brief-History-Time-Stephen-Hawking/dp/0553380168/ref=pd_sim_14_7?ie=UTF8&dpID=61RD%2BMeYtsL&dpSrc=sims&preST=_AC_UL160_SR107%2C160_&refRID=0QVDS9MEVY0EKXCVC8WX) * 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 ](http://www.amazon.com/Spooky-Action-Distance-Phenomenon-Time/dp/0374298513/ref=pd_sim_14_91?ie=UTF8&dpID=61os8ij52iL&dpSrc=sims&preST=_AC_UL160_SR108%2C160_&refRID=1XZ5XQP8S59NXTQD36C7) * Read [The Theoretical Minimum: What You Need to Know to Start Doing Physics](http://www.amazon.com/dp/0465075681/ref=rdr_ext_tmb) * Complete Khan Academy's [electrical engineering](https://www.khanacademy.org/science/electrical-engineering) course * Complete Khan Academy's [physics](https://www.khanacademy.org/science/physics) course * Read Wikipedia's [classical mechanics](https://en.wikipedia.org/wiki/Classical_mechanics) page * Read [Classical Mechanics](http://www.amazon.com/dp/189138922X/ref=rdr_ext_tmb) * Watch Stanford's [Classical Mechanics](https://www.youtube.com/watch?v=ApUFtLCrU90) lectures * Read Wikipedia's [statistical mechanics](https://en.wikipedia.org/wiki/Statistical_mechanics) page * Read Wikipedia's [electromagnetism](https://en.wikipedia.org/wiki/Electromagnetism) page * Read Wikipedia's [special relativity](https://en.wikipedia.org/wiki/Special_relativity) page * Read Wikipedia's [quantum mechanics](https://en.wikipedia.org/wiki/Quantum_mechanics) page ## Computer Science ### Fundamentals * Read Wikipedia's [Concurrency page](https://en.wikipedia.org/wiki/Concurrency_(computer_science)) * Read Wikipedia's [Concurrent Computing](https://en.wikipedia.org/wiki/Concurrent_computing) * Read through [Areas of computer scinece](https://en.wikipedia.org/wiki/Category:Areas_of_computer_science) * Read through [Unsolved problems in computer science](https://en.wikipedia.org/wiki/Category:Unsolved_problems_in_computer_science) * Read [Code: The Hidden Language of Computer Hardware and Software](http://www.amazon.com/Code-Language-Computer-Hardware-Software/dp/0735611319/ref=pd_sim_14_14?ie=UTF8&dpID=310WZuKyEUL&dpSrc=sims&preST=_AC_UL160_SR108%2C160_&refRID=18SYDS2QPE982660TSHT) * Read [Transactional Information Systems: Theory, Algorithms, and the Practice of Concurrency Control and Recovery](http://www.amazon.com/dp/1558605088/ref=rdr_ext_tmb)Transaction stuff ### Artificial Intelligence * Read [The Society of Mind](http://www.amazon.com/The-Society-Mind-Marvin-Minsky/dp/0671657135/ref=pd_sim_14_39?ie=UTF8&dpID=51N77XFh-wL&dpSrc=sims&preST=_AC_UL160_SR121%2C160_&refRID=1XZ5XQP8S59NXTQD36C7) * Read Schrödinger's 'What Is Life' * Read [Epistemology](https://en.wikipedia.org/wiki/Epistemology) * Read through [Systems science](https://en.wikipedia.org/wiki/Systems_science) * Read through [Connectionism](https://en.wikipedia.org/wiki/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](https://en.wikipedia.org/wiki/Philosophy_of_science) * Read through [Complexity theory](https://en.wikipedia.org/wiki/Complexity_theory) ### Information Thoery * Read through Wikipedia's [Information theory](https://en.wikipedia.org/wiki/Information_theory) entry * Read [Elements of Information Theory 2nd Edition](http://www.amazon.com/dp/0471241954/ref=rdr_ext_tmb) * Read [Information Theory: A Tutorial Introduction](http://www.amazon.com/dp/0956372856/ref=rdr_ext_tmb) * Read [Why Information Grows: The Evolution of Order, from Atoms to Economies](http://www.amazon.com/dp/0465048994/ref=rdr_ext_tmb) * Complete Kahn Academy's [Information Theory](https://www.khanacademy.org/computing/computer-science/informationtheory) course * Read [The Information: A History, A Theory, A Flood](http://www.amazon.com/Information-History-Theory-Flood/dp/1400096235/ref=asap_bc?ie=UTF8) * Read [An Introduction to Information Theory: Symbols, Signals and Noise](http://www.amazon.com/dp/0486240614/ref=rdr_ext_tmb) ### Algorithms and Data Structures * Complete Khan Academy's [Intro to Algorithms](https://www.khanacademy.org/computing/computer-science/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](http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-spring-2008/index.htm) * Coursera [Algorithms 1](https://www.coursera.org/course/algs4partI) * Coursera [Algorithms 2](https://www.coursera.org/course/algs4partII) * Read [The Algorithm Design Manual](http://www.amazon.com/dp/1849967202/ref=rdr_ext_tmb) ### Compilers and Interpreters * Complete Udacity's [Programming Languages](https://www.udacity.com/course/cs262) course * Complete Coursera's [Compiler's](https://www.coursera.org/course/compilers) course * Read [Writing Compilers and Interpreters: A Software Engineering Approach](http://www.amazon.com/gp/product/0470177071/ref=pd_lpo_sbs_dp_ss_2?pf_rd_p=1944687602&pf_rd_s=lpo-top-stripe-1&pf_rd_t=201&pf_rd_i=1848900643&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=1QCRTCYTCGPXQJ82AG89) * Write compiler/interpretor for an existing language ### Cryptography * Complete Coursera's [Cryptography](https://www.coursera.org/course/crypto) course * Complete Udacity's [Applied Cryptography](https://www.udacity.com/course/cs387) course * Complete Khan Academy's [Journey into Cryptography](https://www.khanacademy.org/computing/computer-science/cryptography) * Read [The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography](http://www.amazon.com/The-Code-Book-Science-Cryptography/dp/0385495323/ref=pd_sim_14_3?ie=UTF8&dpID=51b-6JlzsDL&dpSrc=sims&preST=_AC_UL160_SR104%2C160_&refRID=11MPXA1WH47C87H08B2A) ### Misc Computer Science * 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](https://www.khanacademy.org/computing/computer-science/informationtheory) * look through cs stuff here http://www.saylor.org/courses/ * look through https://intelligence.org/research-guide/ ### Computer Engineering and Architecture * read [What every programmer should know about memory](http://lwn.net/Articles/250967/) * Build a [simple computer](http://www.instructables.com/id/How-to-Build-an-8-Bit-Computer/?ALLSTEPS) * Read and complete the Arduino projects in [30 Arduino Projects for the Evil Genius](http://www.amazon.com/Arduino-Projects-Evil-Genius-Second/dp/0071817727/ref=asap_bc?ie=UTF8) * Go throught the Mojo FPGA [tutorials](https://embeddedmicro.com/tutorials/mojo-fpga-beginners-guide) * 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](https://www.coursera.org/course/comparch) * take this [course](https://www.coursera.org/course/hwswinterface) * take this [course](https://www.coursera.org/course/mosfet) * take this [course](https://www.coursera.org/course/eefun) * learn about basic gates ### Artificial Intelligence * watch Stanford's Introduction to Robotics [course](http://see.stanford.edu/see/courseinfo.aspx?coll=86cc8662-f6e4-43c3-a1be-b30d1d179743) * watch Stanford's Natural Language Processing [course](http://see.stanford.edu/see/courseinfo.aspx?coll=63480b48-8819-4efd-8412-263f1a472f5a) * watch Stanford's Machine Learning [course](http://see.stanford.edu/see/courseinfo.aspx?coll=348ca38a-3a6d-4052-937d-cb017338d7b1) **Frameworks** * ~~Write a Web app with Ruby on Rails~~ * ~~Complete [The Odin Project](http://www.theodinproject.com/ruby-on-rails) 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](http://www.polymer-project.org/) components * Write a Web app using React **Functional Programming** * read http://www.amazon.com/dp/0521663504/ref=rdr_ext_tmb * read [this article](http://www.smashingmagazine.com/2014/07/02/dont-be-scared-of-functional-programming/) * take [Introduction to Functional Programming](https://www.edx.org/course/introduction-functional-programming-delftx-fp101x#.VIvQE9LF_s4) * read Functional JavaScript in Safari * read Functional Thinking in Safari * read [JavaScript Allongé](https://leanpub.com/javascript-allonge/read) * these [exercises](http://reactive-extensions.github.io/learnrx/) * complete this [workshop](https://www.npmjs.com/package/functional-javascript-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](http://www.html5rocks.com/en/tutorials/workers/basics/) * Write an app using Three.js * Complete Udacity's Senior Web Developer nanodegree ## Editors/IDEs * Eclipse * ~~Use Eclipse exclusively for a month~~ * Complete Eclipse navigation muscle memory practice sessions * Complete [this](http://zeroturnaround.com/rebellabs/using-eclipse-for-java-development/) report and apply any useful techinques * IntelliJ IDEA * Use 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](http://www.amazon.com/dp/059652983X/ref=rdr_ext_tmb) * Complete [these](http://derekwyatt.org/vim/tutorials/) tutorials. * Use Emacs exclusively for a month ## Manipulate Data Without SQL * Write an app using NoSQL * Write an app using Hadoop * Complete Udacity's [Intro to Hadoop and MapReduce course](https://www.udacity.com/course/ud617) * Write an app using Hibernate * Write an app using JPA ## Operating Systems ### General * Complete the [Computer Science - Operating Systems](https://www.youtube.com/watch?v=XgQo4JkN4Bw&list=PL3289DD0D0F0CD4A3) course * Write an operating system * Read https://littleosbook.github.io/ * Design a scheduler * Modify page-handling process * Create own filesystem ### OSX * ~~Use a Mac exclusively for development for a month~~ ### Linux and Unix * 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 System](http://www.cs.berkeley.edu/~brewer/cs262/unix.pdf)~~ * ~~Complete [The Command Line Crash Course](http://cli.learncodethehardway.org/book/)~~ * ~~Install Linux~~ * Build [Linux From Scratch](http://www.linuxfromscratch.org/lfs/view/stable/) * After LFS, [BLFS](http://www.linuxfromscratch.org/blfs/) * Then read [Stealing the Network](http://www.amazon.com/gp/product/B006NV2EGI/ref=dp-kindle-redirect?ie=UTF8&btkr=1) * go throught the Linux Foundation [web site](http://www.linuxfoundation.org/) * go through the Linux Foundation collaborative [projects](http://collabprojects.linuxfoundation.org/#collaborative-projects) * go through the LFCS [certification](http://training.linuxfoundation.org/certification/lfcs) competencies * go through the LFCE [certification](http://training.linuxfoundation.org/certification/lfce) competencies * read [the Filesystem Hierarchy Standard](http://www.linuxfoundation.org/collaborate/workgroups/lsb/fhs) * read [Linux Basics – LVM (Logical Volume Manager) Tutorial](https://ostechnix.wordpress.com/2013/02/03/linux-basics-lvm-logical-volume-manager-tutorial/) * Complete [learning KVM](http://www.dedoimedo.com/computers/kvm-intro.html) * Set up a [virtual server](http://www.linuxvirtualserver.org/) (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](http://www.amazon.com/UNIX-Linux-System-Administration-Handbook/dp/0131480057/ref=sr_1_1?ie=UTF8&qid=1422412577&sr=8-1&keywords=Linux+System+Administration) * 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](http://www.linux.org/threads/linux-kernel-reading-guide.5384/) the Linux kernel * Complete Learn Linux the Hard Way * Read the [GNU Readline](http://tiswww.case.edu/php/chet/readline/readline.html#SEC1) docs * ~~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~~ * With two linux systems and one AD server accessed only via TLS/SSL for ldap:
  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 * http://mininet.org/ * https://www.udacity.com/course/ud436 * Complete this Wireshark [tutorial](http://www-scf.usc.edu/~csci571/Special/Tutorials/wireshark_html/wireshark.html) * Complete these Wireshark [exercises](http://www.eecs.yorku.ca/course_archive/2011-12/F/3213/Project/exercises.pdf) * Complete these Wireshark [exercises](http://it-logbook.blogspot.com/2012/09/wiresharks-exercises.html) ## Development Building Blocks * ~~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](https://github.com/elm-city-craftworks/course-001/blob/master/PART_1.md) * Complete [Part 2: Encoding and decoding binary files](https://github.com/elm-city-craftworks/course-001/blob/master/PART_2.md) * Complete [Part 3: Parsing text-based formats](https://github.com/elm-city-craftworks/course-001/blob/master/PART_3.md) * Complete [Part 4: Socket programming and network I/O](https://github.com/elm-city-craftworks/course-001/blob/master/PART_4.md) * Write an application or framework that provides a plugin model * Write a testing framework * Write a programming language * ~~Write an embedded app~~ * ~~Write a realtime system~~ * ~~Write an MVC Web framework~~ * Write a device driver * Write a B-tree database ## History of Computing * ~~Read a [biography of John von Neumann](http://www.amazon.com/John-Von-Neumann-Scientific-Deterrence/dp/082182676X/)~~ * Read [Where Wizards Stay Up Late: The Origins Of The Internet](http://www.amazon.com/Where-Wizards-Stay-Up-Late/dp/0684832674/ref=pd_sim_14_35?ie=UTF8&dpID=51Qk3dIqeNL&dpSrc=sims&preST=_AC_UL160_SR103%2C160_&refRID=1XZ5XQP8S59NXTQD36C7) * Read a [biography of Alan Turing](http://www.amazon.com/Alan-Turing-Enigma-Centenary-Edition/dp/069115564X) * Read [Turing: Pioneer of the Information Age](http://www.amazon.com/Turing-Information-B-Jack-Copeland/dp/0198719183/ref=pd_sim_14_28?ie=UTF8&dpID=51LFdNwRyaL&dpSrc=sims&preST=_AC_UL160_SR105%2C160_&refRID=1XZ5XQP8S59NXTQD36C7) * ~~Watch [Breaking the Code](https://www.youtube.com/watch?v=S23yie-779k)~~ * ~~Read [Turing's Cathedral: The Origins of the Digital Universe](http://www.amazon.com/Turings-Cathedral-Origins-Digital-Universe/dp/1400075998/)~~ * ~~Read [The Universal Computer: The Road from Leibniz to Turing](http://www.amazon.com/The-Universal-Computer-Leibniz-Turing/dp/0393047857)~~ * Read [The Universal History Computing](http://www.amazon.com/The-Universal-History-Computing-Computer/dp/0471441473/ref=sr_1_2?ie=UTF8&qid=1393727782&sr=8-2&keywords=history+of+computer) * Read [Computer: A History of the Information Machine](http://www.amazon.com/dp/0813345901/ref=rdr_ext_tmb) * ~~Watch [The Machine That Changed the World](http://www.infocobuild.com/books-and-films/science/the-machine-that-changed-the-world.html)~~ * ~~Watch [Computer Pioneers and Pioneer Computers](http://www.infocobuild.com/books-and-films/science/computer-pioneers-and-pioneer-computers.html)~~ * ~~Watch [Revolution OS](https://www.youtube.com/watch?v=kR6P0GueyVA)~~ * ~~Watch [Nerds 2.0.1: A Brief History of the Internet](http://www.infocobuild.com/books-and-films/science/nerds-2-0-1.html)~~ * ~~Watch [Digital Nation: Life on the Virtual Frontier](http://documentaries-plus.blogspot.com/2012/03/digital-nation-life-on-virtual-frontier.html)~~ * Read 10 biographis of unfamiliar [computer scientists](https://en.wikipedia.org/wiki/List_of_computer_scientists) * Read [History of computer science](https://en.wikipedia.org/wiki/History_of_computer_science) and follow any links that look interesting * ~~Read [Steve Jobs](http://www.amazon.com/Steve-Jobs-Walter-Isaacson/dp/1501127624/ref=sr_1_1?ie=UTF8&qid=1450451539&sr=8-1&keywords=steve+jobs)~~ * Read [The Innovators: How a Group of Hackers, Geniuses, and Geeks Created the Digital Revolution](http://www.amazon.com/The-Innovators-Hackers-Geniuses-Revolution/dp/147670869X/ref=pd_sim_14_22?ie=UTF8&dpID=519KsxAU05L&dpSrc=sims&preST=_AC_UL160_SR107%2C160_&refRID=18SYDS2QPE982660TSHT) * Read [Computing: A Concise History](http://www.amazon.com/Computing-Concise-History-Essential-Knowledge/dp/0262517671/ref=pd_sim_14_23?ie=UTF8&dpID=312L%2BBtBf1L&dpSrc=sims&preST=_AC_UL160_SR116%2C160_&refRID=18SYDS2QPE982660TSHT) ## Books and Readings ### 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 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](http://ocw.mit.edu/high-school/humanities-and-social-sciences/godel-escher-bach/lecture-notes/) * 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](http://blog.fogus.me/2011/09/08/10-technical-papers-every-programmer-should-read-at-least-twice/) and [this](http://web.archive.org/web/20121024173845/http://blog.objectmentor.com/articles/2009/02/26/10-papers-every-programmer-should-read-at-least-twice). * [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](http://www.amazon.com/Annotated-Turing-Through-Historic-Computability/dp/0470229055/ref=asap_bc?ie=UTF8) * Read [A Theory of Type Polymorphism in Programming](http://web.cs.wpi.edu/~cs4536/c12/milner-type-poly.pdf) * Read [What is Software Design?](http://web.archive.org/web/20130225105922/http://www.developerdotstar.com/mag/articles/reeves_design.html) * ~~Read [No Silver Bullet](http://worrydream.com/refs/Brooks-NoSilverBullet.pdf)~~ * Read [Simple Smalltalk Testing: With Patterns](http://web.archive.org/web/20130113205707/http://www.xprogramming.com/testfram.htm) * Read [An Axiomatic Basis for Computer Programming](https://www.cs.cmu.edu/~crary/819-f09/Hoare69.pdf) * ~~Read [Great Hackers](http://www.paulgraham.com/gh.html)~~ ## 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](http://thinkrelevance.com/blog/2007/04/03/twir.html "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](https://gitorious.org/learn-x-the-hard-way/learn-x-the-hard-way/source/663fd4f6afd17f9d16fe10bafe3e64fdfb29e629:) ## 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 * Go through the Chrome DevTools [documentation](https://developers.google.com/chrome-developer-tools/) * Complete a current tutorial * ~~Watch these [videos](https://developer.chrome.com/devtools/docs/videos)~~ ## Read Through Source Code * [Google Guava](https://code.google.com/p/guava-libraries/source/checkout) * [Google GSON](https://code.google.com/p/google-gson/) * [Joda Time](https://github.com/JodaOrg/joda-time) * [Joda Money](https://github.com/JodaOrg/joda-money) ## 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](http://gitimmersion.com/index.html) * Write a nontrivial game * Complete [10 exercises](http://programmingpraxis.com/contents/chron/) * Do something with a [binary abacus](http://www.binaryabacus.com/binary_abacus_instructions.pdf) * Do something [here](http://www.dreamincode.net/forums/topic/78802-martyr2s-mega-project-ideas-list/) * Look at [these](http://technologyconversations.com/2014/03/10/scala-tutorial-through-katas/) * Make a simulation [Enigma Machine](http://enigmaco.de/enigma/enigma.swf) * Read through Martin Fowler's [refactoring](http://martinfowler.com/tags/refactoring.html) tags * Read through Martin Fowler's [object collaboration](http://martinfowler.com/tags/object%20collaboration%20design.html) tags ## Architecture * Read through Martin Fowler's [application architecture](http://martinfowler.com/tags/application%20architecture.html) tags * Read through Martin Fowler's [technical leadership](http://martinfowler.com/tags/technical%20leadership.html) tags * Read through Martin Fowler's [application integration](http://martinfowler.com/tags/application%20integration.html) tags * Read [Chapter 1: Service Oriented Architecture (SOA)](https://msdn.microsoft.com/en-us/library/bb833022.aspx) * 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](https://www.amazon.com/Software-Architecture-Practice-3rd-Engineering/dp/0321815734/) * Complete Coursera's [Emerging Technologies](https://www.coursera.org/specializations/emerging-technologies) specialization * Complete Coursera's [Cloud Computing](https://www.coursera.org/specializations/cloud-computing) specialization * Earn the [SEI Software Architecture Professional Certificate](http://www.sei.cmu.edu/training/certificates/architecture/professional.cfm) * Earn [TOGAF](https://www.opengroup.org/togaf9/cert/docs/indiv.html) 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.