It'll run you through building a twitter clone and introduce you to git, heroku, a bit of CSS/HTML, and even goes into AJAX a bit.
I can't recommend it enough to people looking to get into rails.
Any recommendations in this area?
You can use docker compose and swarm but at some point you need to interface with how the cloud offering does elastic scaling (for example google has instance groups and deploy templates).
I haven't seen a good resource on this last part other than PaaS/IaaS doc itself. So I am curious as well.
There sort of needs to be a packer of deployment + composition but I suppose that is what chef and puppet are sort of for (I despise those tools).
Can't recommend it enough.
Is this true? I know RSpec is the popular one in open source, but last I checked the two were still pretty even as far as big name recommendations. I used to believe RSpec was the default when I first started Rails development, but as a professional dev I had seen plenty of Minitest implementation.
If you don't mind drawing out your learning process, you could walk through Hartl's tutorial and do the equivalent in Python (probably with much help from google). So you couldn't use his code examples, but you could set up the same DB structure, the same types of tests, etc, and hit all the important parts of the web dev process.
Edit: found this in another comment below. Just thought I'd include it in case you gloss over it! https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial...
It goes through making an app in Django, but is heavier on TDD than Hartl's book.
Full Disclosure: I'm the author.
If you're looking to go nuts, I recommend reading the first twelve chapters of Django Unleashed, following it up with Harry Percival's Test Driven Development with Python book (also written as a step-by-step guide), and then finishing Unleashed.
http://chimera.labs.oreilly.com/books/1234000000754/index.ht...
Two Scoops of Django (not a guide) is great to have after that.
https://www.twoscoopspress.com/products/two-scoops-of-django...
Hope that helps!
Michael's book is fantastic and I really wanted something similar for people getting into go. My book doesn't cover git or testing but that is because rails is a framework with tons done for you, and in my book you basically build all of that from scratch. You learn a ton, but it is long and adding git or testing would have made the book like 600 pages (instead of ~400ish).
If you are interested in Go I'd love to get your feedback :)
What I am thinking about doing is writing a companion book that covers git, testing, etc. Eg after every chapter the companion book then walks you through writing tests, committing to git, merging it into master, etc. That way someone could optionally choose to do those things along the way. I might also experiment with other formats, but time will tell.
In this book you build a (virtualized) computer. It is one of the best books I ever read.
http://www.craftinginterpreters.com/
I really liked "Build Your Own Lisp" too. Fun book. :)
Edit: here is the (WIP) intepreter: https://github.com/HarveyHunt/loxr
I'm trying to learn Rust with this project. It's still far from idiomatic but I plan to keep implementing following the book and then refactor later.
[1] http://shop.oreilly.com/product/0636920031116.do
[2] https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial...
That may not be a problem for an experienced dev, but for a starter in web-dev I highly appreciate a library or framework that has built-in authentication because you do not want to fuck that up. Granted - you can also fuck it up with e.g. Django, but it is way harder.
But yes, definitely grab a third party extension for auth :)
If your goal is to understand web development then I would say that a micro-framework like Flask is better because you actually have to assemble all the pieces yourself. Moreover, if you're curious about how a given feature is implemented, extension source code is often very accessible. For example, all the business logic in Flask-Login is confined to one ~450 line Python file [1]. Not bad!
But one the other hand, if you're trying to create a production-ready service, then Django/Rails probably have fewer risks since they require fewer decisions.
Lastly, the book had a very thorough treatment of authentication. I agree that this is a huge pitfall, and I think Miguel introduced and explained the problem extremely well.
[1] https://github.com/maxcountryman/flask-login/blob/master/fla...
My flask also book does this http://a.co/gwGvY3o
Does the book have a lot of advantage over the tutorial?
The book is much more polished. You follow along with this repo [1]. Every chapter you simply `$ git checkout chapter-n` and you're ready to go. It's amazing.
Goes through building a Linux system from the ground up, and gives a pretty thorough overview of why everything is working the way that it is.
An extremely thorough guide to ray tracing.
https://www.amazon.com/Physically-Based-Rendering-Third-Impl...
I don't know if it's one of the best, but it teaches Docker concepts with a single project, and as you progress through chapters, you will find different ways you can deploy applications using Docker containers.
https://www.packtpub.com/virtualization-and-cloud/orchestrat...
Just a joke: the course is by Noam Nisan & Shimon Schocken
The accompanying book is "The Elements of Computing Systems" and Part 1 is available as a course on Coursera. I highly recommend it; just finishing the Coursera course myself and I'll definitely be doing Part 2.
Charles Petzolds "CODE The Hidden Language of Computer Hardware and Software"
I started with Elements of Computing: creating a half-adder and then a full-adder chip. But, I couldn't understand how I reached my solution—I was relying on my intuition. Then, I started reading "Code", which takes the reader on a journey from shining flash lights to communicate with your neighbor, all the way to bridging the gap between boolean algebra and building a relay.
You build 5 projects through the book - a programming language, paint program, a dom game and a skill sharing website using node js.
Inform 7 is very much a niche programming language, but it's really interesting and unusual, well worth investigating if you want to broaden your horizons. Vaguely Prolog-like, but written in natural language.
Does it walk through the basics will enough? Or will I have built something with no idea how it actually works?
I would say maybe, from a language/syntax point of view pair it with "Programming Elixir", which is a good introduction to the language, again going through the concepts of it and building them up well - the Phoenix book goes pretty quickly over the language constructs, just giving you them when needed to understand how Phoenix is doing stuff.
Examples:
1. given a large file, or set of files, write a program/routine to count the number of times an arbitrary sequence of characters appears. No regular expressions or other pattern matching helpers from a library/sdk, you have to do it all yourself. This one is pretty small, but there's lots of opportunity for optimization.
2. build a link shortener service with some analytics/tracking.
3. write a simple tokenizer for whatever syntax/language you feel like. JSON is a super easy one.
4. write a little website crawler. multithread it. implement rate limiting (something more advanced than random sleeps; e.g. token bucket, etc...).
5. make a couple easy data structures yourself. If the language/platform you are working in has the same structure in an SDK (or there's a good open source one), write yours to the same interface and then run it through their test suite. e.g. linked lists, queues, etc...
It goes through lessons that build up to a pretty good interactive disk editor (DSKPATCH) written entirely in x86 assembly.
Its the book that got 12 year old me out of the BASIC ghetto.
I've never actually written assembly professionally, but the understanding of what's going on at the CPU level has been invaluable. You could probably run FreeDOS(http://www.freedos.org/) in a VM, looks like it comes with a couple different assemblers.
https://www.amazon.com/Retargetable-Compiler-Design-Implemen...
A most excellent grimoire.
You can learn how to build a todo list manager in Go.
This book is about building a webapp from scratch without using a framework.
https://www.amazon.com/Build-Metal-Working-Scrap-Complete/dp...
I will say that the first book (metal casting) is very useful, because you can learn to make aluminum castings easily and then machine them on your cheap import/worn out old American Iron.
It's on my todo list. Never enough time, but I've got a little forge already, at least!
These days, not so much.
Edit: It may have been this: https://www.amazon.com/Build-Your-Own-Flight-Sim/dp/15716902...
https://www.amazon.com/Flights-Fantasy-Programming-Video-Gam...
https://www.amazon.com/Design-Patterns-Elements-Reusable-Obj...
I bet this is what you are looking for:
https://www.amazon.com/Compiler-Construction-Using-Java-Java...
This book taught me how to write a compiler.
Here is its description from its website:
* Comprehensive treatment of compiler construction.
* JavaCC and Yacc coverage optional.
* Entire book is Java oriented.
* Powerful software package available to students that tests and evaluates their compilers.
* Fully defines many projects so students can learn how to put the theory into practice.
* Includes supplements on theory so that the book can be used in a course that combines compiler construction with formal languages, automata theory, and computability theory.
If you already know C or C++ or Java then this book is for you. In my opinion, you can learn many computer science concepts and be able to apply to your field. The book will teach you how to write a grammar then write a parser from it then eventually be able to improve it as you go on reading and doing the exercises. It was a great moment when I feel comfortable writing recursive functions since grammars are composed of recursive functions. You'll also learn a nice way on how you can get your compiler to generate assembly code. Another feature of the book is the chapter on Finite Automata wherein you'll learn how to convert between regular expressions, regular grammars and finite automata and eventually write your own 'grep' which was for me is a mind-blowing experience. There are lots of other stuffs in this book that you could learn. Thank you Anthony J. Dos Reis for writing great books for people like me.
Kalid basically iterates the series around the concept of deriving the formula for the area/perimeter of a circle, and then builds up to deriving the surface area/volume of a sphere. The focus throughout is the building up of an intuition of calculus before leaping into formulas. Even with uni-level calculus, I did strengthen my intuition of what's going on by reading through his book.
It's pretty fun, and I actually spent some time visualizing the calculus of geometric solids afterward i.e http://www.trinco.io/blog/derivative-of-x3
It goes from adding the LED to the XBox to tapping the security mechanism. Plus, the original Xbox is cheap nowadays too, so you won't have to shell out a lot of money doing it. Local craigslist should have plenty of them.
First chapter of the book takes you through creating your own "Suave" functional web development library, which was a lot of fun and eye opening.
Ray Tracing: The Next Week
Ray Tracing: The Rest of Your Life
Strongly recommend it.
Build an old-school analog music synth. Very DIY friendly, and great for electronics n00bs. The book is build around a project call the Noise Toaster, but you learn all the analog synth basics along the way. Fun stuff. Old school, and it isn't a wall-sized rack of Moog modules, but hey, good humor.
I find this approach works well because you don't have to ask "why did he make that design decision" but instead I intentionally make common mistakes a beginner would make, wait until they become an issue, and then I demonstrate how we can fix that issue. As a result you really get to understand not only how to create a web app in Go but also why developers tend to follow different design patterns.
I said this in another comment, but it is based on Michael Hartl's Rails Tutorial. I think showing someone how to go from nothing to a full app is a great way to help them get into web development without the frustration that comes from piecing together blog posts/docs/trial&error.
If you are interested in Go I'd love to get your feedback :) and if it isn't obvious, I am the author of the book.
Filter spam, Parse binary files, catalog MP3s, stream MP3s over a network, and provide a Web interface for the MP3 catalog and server.
[0] There's an e-book version too. Scroll the page down just a little bit.
Do you have more recommendations on the front-end part?
I tried FreeCodeCamp (html & css) ~2 years ago. It was OK. I recommend you to finish the above one (Shay Howe) first, then try FreeCodeCamp. Actually, if you have got your own static web-page projects, you won't need the FreeCodeCamp for CSS & HTML. The kick-start would be enough and "Google is your friend" after that - learn more as you build your own projects.
Good luck.
https://www.amazon.com/Elixir-Action-scaron-Juri-cacute/dp/1...
There is an associated book. Great intro to the fundamentals of computer engineering.
It's basically a set of tutorials that lead you through the steps of building a software 3D graphics rasterizer. It covers rasterizing, lighting, shading, shadows, textures, etc, and the math behind each set of concepts. It's built on late-90s C and DirectX, but the capabilities used are covered by just about any game programming library. The author builds kind of an abstraction library on top of the DirectX code, and that's pretty easy to rewrite in whichever language and toolset you're comfortable with.
Swift 2 version: http://shop.oreilly.com/product/0636920045946.do
Swift 3 version: http://shop.oreilly.com/product/0636920053989.do
We build a note-taking app for iOS, macOS, and watchOS.
About how to build a subset of git's functionality in NodeJS
Radiosity: A Programmer's Perspective by Ian Ashdown is a full numerically accurate hemicube radiative transfer engine from start to finish. Now a free pdf.
[0] https://mitpress.mit.edu/books/reasoned-schemer [1] http://minikanren.org/
1 - https://manning.com/books/nim-in-action?a_aid=niminaction&a_...
He kinda takes a "Defense of Duffers Drift" approach towards designing iterative versions of the same project, slowly introducing concepts such as factories and singleton.
It's really good and the game is actually pretty fun.
I love the the style of learning they advocate: reading the book and typing in every single line of code yourself. It suits my learning style really well.
This book teaches you python through a series of example projects. You can get it online or order a physical copy and help support the author here:
The game teaches you to build a simple game for Win32 from scratch. The graphics would be pretty dated now, but the scripting system for enemy AI and quests is a Turing-complete programming language. I learned more from that book than from my compiler course in university.
Amazon link:
https://www.amazon.com/Unix-Programming-Environment-Prentice...
It also took a decade of research&development to develop CLOS + MOP. From Flavors and LOOPS to AMOP.
http://ml.cddddr.org/cl-object-oriented-programming/
The repository spans from 1984 to 1990.
The group also developed a portable CLOS implementation (PCL, Portable Common Loops) to experiment and verify their design with feedback from the community:
https://www.cs.cmu.edu/Groups/AI/lang/lisp/oop/clos/pcl/0.ht...
Flavors and LOOPS were developed around 1980 and were the direct inspirations. The AMOP book was then published 1991.
AMOP is a very good and extremely well written book about the CLOS Meta Object Protocol.
It also is fortunately / unfortunately one of the books with the best Lisp programming style. 'fortunately' because it is really great, 'unfortunately' the great programming style is tied to a slightly esoteric topic - object-oriented meta-object protocols. ;-)
Whatever motivation you have, a) reading a book with great Lisp style or b) learning about the CLOS MOP, the book is highly recommended.
Think Stats: Probability and Statistics for Programmers http://greenteapress.com/thinkstats/
Here, you learn statistics by implementing statistics functions in Python along the way and use them to solve the questions in the book.
https://www.amazon.de/MEAN-Web-Development-Amos-Haviv/dp/178...
Build your own legit Analog Synthesizer!!! Not software but it is an end to end project. Good little book.
I love reading technology books. It would be great to get early access and be able to talk to the writers directly.
https://www.amazon.com/Game-Engine-Architecture-Engineering-...
Not only is this a fantastic introduction to the math and the data structures involved in computer graphics, the book also walks you through the construction of an in-software renderer!
1. "Writing Compilers and Interpreters" by Ronald Mak 2. "Building an Optimizing Compiler" by Bob Morgan
Morgan's book is well sought after and out of print. It's one of the few books in the field for which the print edition prices keep climbing.
It was always on my bucket list to learn to write programming languages, but it's very daunting - this made it easy to learn in bite-sized chunks.
https://pragprog.com/book/brapps/serverless-single-page-apps
https://www.amazon.com/PHP-MySQL-Example-Ellie-Quigley/dp/01...
To this day it's probably the best CS book I have ever read.
I wouldn't read the book now though, since Flex, but the approach worked well.
It goes over building a link aggregating service using Django.
However, I also remember it being free. Doesn't seem to be an option with the most recent release.
Not only a good tutorial for Django, but the authors made it even better offering the free improved/corrected version.
The final project is a Django webapp that allows visitors to add sites and rank them. Many different aspects in Django are looked at, as well as beyond, such as CSS, Bootstrap, search, Jquery, AJAX, etc.
Bandit Algorithms book is sort of like this. starts out simple and touches different methods
Walks through building a JRPG-style game with Lua. Pretty impressive for the price, especially with all the royalty-free assets that are included.
https://books.google.com/books/about/Programming_an_RTS_Game...
A little dated now, (although DirectX 9 isn't quite dead yet), but this one has some pretty interesting topics. Good chapter on procedural terrain generation, some basic pathfinding, minimaps and fog-of-war.
I do truly believe the best way of learning to code is by working on a decent size project, but I also believe that said project should be something you're fascinated and invested in, or else it feels more like a chore and is nowhere as effective.