Skip to content

Instantly share code, notes, and snippets.

@alastairparagas
Last active October 8, 2017 19:43
Show Gist options
  • Save alastairparagas/9c880598bb2d0da2d16d to your computer and use it in GitHub Desktop.
Save alastairparagas/9c880598bb2d0da2d16d to your computer and use it in GitHub Desktop.
High quality and highly recommended programming books and topics. This list will be updated frequently. Books for each programming language are arranged from beginner to expert-level difficulty.

Javascript

Javascript is a programming language that started out being the main language to "code" the web. It is used to build web apps and websites alongside HTML and CSS. However, it can now also be used to build server-side, desktop and hybrid mobile apps. Heck, it can even be used to program Arduino microcontroller boards!

  • Eloquent Javascript by Marijn Haverbeke
  • Javascript: The Good Parts by Douglas Crockford
  • The Principles of Object Oriented Javascript by Nicholas Zakas
  • Programming Javascript Applications by Eric Elliot
  • Speaking Javascript by Axel Rauschmayer
  • Javascript Enlightenment by Code Lindley
  • You Don't Know JS (series) by Kyle Simpson
  • DOM Enlightenment by Cody Lindley
  • Secrets of a Javascript Ninja by John Resig
  • Javascript Patterns by Stoyan Stefanov
  • Learning Javascript Design Patterns by Addy Osmani
  • Data Structures and Algorithms with Javascript by Michael Millan
  • Effective Javascript by David Herman
  • High Performance Javascript by Nicholas Zakas
  • Functional Javascript by Michael Fogus
  • Awesome-Javascript
  • JS-Books
  • Javascript the Right Way

Big Players in the Javascript Field: NodeJS, MVC/W Frameworks of BackboneJS, AngularJS and EmberJS, Flux Architecture and ReactJS

  • What is MVC? MVC stands for Model-View-Controller. It's a way to separate your data and business logic (Model) with how your app renders that data (View). Models and Views communicate through something called a Controller. There are multiple other organization structures like MVVM (Model-View-View Model), MVP (Model-View-Presenter) and so forth.
  • NodeJS allows you to write Javascript - a language originally meant to run in the browser - to server-side and other non-browser implementations - from desktop apps to Arduino boards!
  • BackboneJS, AngularJS and EmberJS - these are the most popular MVC/W frameworks in the Javascript world. BackboneJS is the least restrictive but severely lacking in the "Controller" part of MVC while relying on Underscore.JS template syntax for its "View". EmberJS is the most restrictive - convention over configuration - and imposes you to wrap your Javascript objects into classes that have getters and setters to access object properties. AngularJS hits the Goldilocks zone (at least for me) and allows you to write POJOs (plain old Javascript objects) for your model layer and uses the concept of "dirty-checking" to check when models change.
  • ReactJS is the "V" in MVC. It uses DOM-diffing - figuring out the changes that happened when data is re-rendered, to prevent re-painting the app when new data loads. Practically, a high speed rendering engine for any Javascript app. It is typically used alongside the Flux architecture, which unlike MVC, places high importance on immutability and functional programming concepts.

PHP

PHP is a server-side programming language. Facebook, Yahoo and Wikipedia uses PHP. Though Node.JS initially had the advantage of being able to do asynchronous and non-blocking code execution unlike PHP, through the development of open-source projects like ReactPHP, you can now code asynchronous code on PHP as well. PHP's OOP syntax is very Java-like.

  • Programming PHP by Peter McIntire
  • PHP Objects, Patterns and Practice by Matt Zandstra
  • Learning PHP Design Patterns by William Sanders
  • Modern PHP by Josh Lockhard
  • Scaling PHP Applications by Steve Corona
  • The Grumpy Programmer's PHPUnit Cookbook
  • Laravel Code Bright by Dayle Rees
  • Laravel Testing Decoded by Jeffrey Way
  • Laravel 4 - from Apprentice to Artisan by Taylor Otwell
  • Implementing Laravel by Chris Fidao
  • Awesome-PHP
  • Learning OOP in PHP
  • PHP The Right Way

Big players in PHP: Laravel, Symfony, HHVM (Hip Hop Virtual Compiler, developed by Facebook), Composer and Doctrine ORM

  • Laravel, CakePHP and Symfony are very popular PHP frameworks.
  • HHVM allows PHP to run exponentially faster by using an idea called JIT (Just-in-time compiling) that compiles PHP code to Assembly code.
  • Composer is used to manage and install PHP libraries that others have developed into your own PHP projects.
  • The Doctrine open-source project allows you to connect to a database in a very "best practices" way.

Haskell

Haskell is a functional programming language. It's not tied to any proprietary-ish system (like Microsoft's F#, with the .NET ecosystem). 'Nuff said.

Go

Go is a programming language developed by a team at Google. It tries to combine the performance of C with the conveniences of a language like Javascript.

Assembly

There are three levels of programming - Binary (those nasty 0s and 1s), Assembly (a much more readable but still machine-like language) and high-level programming (C, C++, PHP, Javascript, Java and where all the other programming languages you have heard about, fall into). Assembly programming is close to the machine and therefore, not portable. Each processor architecture has a different instruction set architecture (opcodes) and therefore, the assembly code you would write for computers with different processors would be different.

  • The Art of Assembly Language by Randall Hyde

R

R is a statistical programming language used for data science and machine learning. Out of the box, it already implements a lot of statistical functions that are commonly used in Machine Learning.

  • The Art of R Programming by Norman Matloff

Java

Used in a wide variety of applications including programming Android apps. Used by various institutions, mostly banks, for server-side programming. FIU uses Java mostly at my.fiu.edu.

  • Wicked Cool Java by Brian Eubanks
  • Java in a Nutshell, Benjamin J Evans and David Flanagan
  • Object Oriented Programming, School of Computer Science, University of KwaZulu-Natal

C

The ancestor of almost all imperative programming languages we know of today.

  • C 2nd Edition by Khernigan and Denis Ritchie
  • C in a Nutshell by Peter Prinz

General Programming Resources

Check out the differences of classical OOP (inheritance through classes) to prototypal oop (inheritance through a prototypal chain).

Also, realize the differences between functional and object-oriented programming. Functional programming is a methodology best applied to problems where you expect entities in your problem domain to stay the same, but the actions done upon those objects to be constantly changing. Object Oriented Programming tends to be best applied to problems where entites themselves are changing alot and/or you find the need to implement new objects, but the actions done on such objects to pretty much stay the same. Functional programming focuses in reducing state as much as possible, sometimes to the point that it can be referenced to one state tree/hashmap, whereas Object-Oriented Programming pushes to fragment state as much as possible into tiny pieces (storing state in objects).

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