Profile

Cover photo
Johannes Bauer
154 followers|9,115 views
AboutPostsPhotosVideos

Stream

Johannes Bauer

Shared publicly  - 
 
 
Recommended JavaScript books

I regularly receive emails from developers asking what books I recommend for learning JS. If you're looking to touch up on your language knowledge or learn from scratch, I'm happy to suggest the following:

Effective JavaScript - +David Herman's awesome new book provides an in-depth exploration of the language and provides a concise, modern take on developing maintainable JavaScript. Dave is a member of TC39 who has been involved in helping with many proposals for the next version of the language is really knows his shit. Recommended by +Alex Russell, +Paul Irish and others.

JavaScript The Definitive Guide, 6th Edition - one of my personal favorites. A comprehensive walkthrough of the language which benefits both beginner and intermediate developers alike. It's also a solid reference guide, should you need to go back and brush up on any areas you're feeling rusty on, regardless of whether you're using WPD or the MDN.

High-performance JavaScript - Nicholas Zakas (who also recently wrote Maintainable JavaScript and started Principles of Object-Oriented Programming in JavaScript, also excellent) covers a number of important lessons about JavaScript performance. If you want to learn how to avoid slowing down your interactions with the DOM, improve runtime performance of your code and generally better the speed of your code's execution this one is a must read.

JavaScript Patterns - Language and coding patterns are an incredibly useful way to benefit from reusable solutions to problems we face when developing with any language. In this book, +Stoyan Stefanov  introduces a number of effective patterns (and anti-patterns) for writing better JavaScript and remains another of my favorites.

The Past, Present and Future Of JavaScript - +Axel Rauschmayer's new free book provides a much needed summary of what's coming next in the world of JavaScript. With browser vendors beginning to gradually implement more new language features from ES.next, this will help you keep up to date even if you haven't been reading up on proposals.

JavaScript Web Applications - By Spine.js author Alex MacCaw, this book covers some of the modern, real-world problems you may encounter when developing with JS, including introducing you to client-side MVC and solutions such as Backbone, JMVC, Spine and other options. A great read for developers wishing to start creating JavaScript SPAs backed by jQuery or other DOM-manip libraries.

JavaScript: The Good Parts - A classic, even though you're bound to disagree with some of what Crockford says. Many great points about both the quirks and good parts of a of the JavaScript language. Whilst not the first book I'd recommend a beginner purchase, do consider reading this once you get the hang of the basics. As long as you remember Crock' isn't the last word in everything, you'll benefit greatly from his insights on the language.

Eloquent JavaScript - probably one of the best beginners books. If you haven't heavily invested time into learning the language just yet, check this book out. It's filled with a number of funny (at times, unexpected) introductions to examples and isn't as overwhelming as other alternatives.

There are other really good books such as: +Cody Lindley's JavaScript Enlightenment, John Resig's (someday complete?) Secrets of a JavaScript ninja - which I'd recommend if you're looking to learn how to write your own library and Test-driven JavaScript Development for those into TDD. 

PS: I've also written Learning JavaScript Design Patterns, which is available free/for purchase in case you're interested in learning about modern JavaScript patterns for development. I've also written Developing Backbone.js Applications. Basically, you've got a lot of choice for learning JavaScript these days and hopefully some of these suggestions will come in helpful.

Remember that whilst reading about programming languages is important, there's no replacement for getting stuck right into the deep end and actually writing code. You may appreciate that tip more in the long-term ; )

Cheers! - Addy
43 comments on original post
1
Add a comment...

Johannes Bauer

Shared publicly  - 
 
Interesting post on the differences between Ember.js and Backbone.js
1
Add a comment...

Johannes Bauer

Shared publicly  - 
 
With PHP 5.3 came the new phar extension, which allows you to package scripts and other files into an archive, and enables you to run scripts or serve documents from that archive. I've built several a...
1
Add a comment...

Johannes Bauer

Shared publicly  - 
 
An awesome explanation of what's happening when you are using Google :)
 
Dizzying but invisible depth

You just went to the Google home page.

Simple, isn't it?

What just actually happened?

Well, when you know a bit of about how browsers work, it's not quite that simple. You've just put into play HTTP, HTML, CSS, ECMAscript, and more. Those are actually such incredibly complex technologies that they'll make any engineer dizzy if they think about them too much, and such that no single company can deal with that entire complexity.

Let's simplify.

You just connected your computer to www.google.com.

Simple, isn't it?

What just actually happened?

Well, when you know a bit about how networks work, it's not quite that simple. You've just put into play DNS, TCP, UDP, IP, Wifi, Ethernet, DOCSIS, OC, SONET, and more. Those are actually such incredibly complex technologies that they'll make any engineer dizzy if they think about them too much, and such that no single company can deal with that entire complexity.

Let's simplify.

You just typed www.google.com in the location bar of your browser.

Simple, isn't it?

What just actually happened?

Well, when you know a bit about how operating systems work, it's not quite that simple. You've just put into play a kernel, a USB host stack, an input dispatcher, an event handler, a font hinter, a sub-pixel rasterizer, a windowing system, a graphics driver, and more, all of those written in high-level languages that get processed by compilers, linkers, optimizers, interpreters, and more. Those are actually such incredibly complex technologies that they'll make any engineer dizzy if they think about them too much, and such that no single company can deal with that entire complexity.

Let's simplify.

You just pressed a key on your keyboard.

Simple, isn't it?

What just actually happened?

Well, when you know about bit about how input peripherals work, it's not quite that simple. You've just put into play a power regulator, a debouncer, an input multiplexer, a USB device stack, a USB hub stack, all of that implemented in a single chip. That chip is built around thinly sliced wafers of highly purified single-crystal silicon ingot, doped with minute quantities of other atoms that are blasted into the crystal structure, interconnected with multiple layers of aluminum or copper, that are deposited according to patterns of high-energy ultraviolet light that are focused to a precision of a fraction of a micron, connected to the outside world via thin gold wires, all inside a packaging made of a dimensionally and thermally stable resin. The doping patterns and the interconnects implement transistors, which are grouped together to create logic gates. In some parts of the chip, logic gates are combined to create arithmetic and bitwise functions, which are combined to create an ALU. In another part of the chip, logic gates are combined into bistable loops, which are lined up into rows, which are combined with selectors to create a register bank. In another part of the chip, logic gates are combined into bus controllers and instruction decoders and microcode to create an execution scheduler. In another part of the chip, they're combined into address and data multiplexers and timing circuitry to create a memory controller. There's even more. Those are actually such incredibly complex technologies that they'll make any engineer dizzy if they think about them too much, and such that no single company can deal with that entire complexity.

Can we simplify further?

In fact, very scarily, no, we can't. We can barely comprehend the complexity of a single chip in a computer keyboard, and yet there's no simpler level. The next step takes us to the software that is used to design the chip's logic, and that software itself has a level of complexity that requires to go back to the top of the loop.

Today's computers are so complex that they can only be designed and manufactured with slightly less complex computers. In turn the computers used for the design and manufacture are so complex that they themselves can only be designed and manufactured with slightly less complex computers. You'd have to go through many such loops to get back to a level that could possibly be re-built from scratch.

Once you start to understand how our modern devices work and how they're created, it's impossible to not be dizzy about the depth of everything that's involved, and to not be in awe about the fact that they work at all, when Murphy's law says that they simply shouldn't possibly work.

For non-technologists, this is all a black box. That is a great success of technology: all those layers of complexity are entirely hidden and people can use them without even knowing that they exist at all. That is the reason why many people can find computers so frustrating to use: there are so many things that can possibly go wrong that some of them inevitably will, but the complexity goes so deep that it's impossible for most users to be able to do anything about any error.

That is also why it's so hard for technologists and non-technologists to communicate together: technologists know too much about too many layers and non-technologists know too little about too few layers to be able to establish effective direct communication. The gap is so large that it's not even possible any more to have a single person be an intermediate between those two groups, and that's why e.g. we end up with those convoluted technical support call centers and their multiple tiers. Without such deep support structures, you end up with the frustrating situation that we see when end users have access to a bug database that is directly used by engineers: neither the end users nor the engineers get the information that they need to accomplish their goals.

That is why the mainstream press and the general population has talked so much about Steve Jobs' death and comparatively so little about Dennis Ritchie's: Steve's influence was at a layer that most people could see, while Dennis' was much deeper. On the one hand, I can imagine where the computing world would be without the work that Jobs did and the people he inspired: probably a bit less shiny, a bit more beige, a bit more square. Deep inside, though, our devices would still work the same way and do the same things. On the other hand, I literally can't imagine where the computing world would be without the work that Ritchie did and the people he inspired. By the mid 80s, Ritchie's influence had taken over, and even back then very little remained of the pre-Ritchie world.

Finally, last but not least, that is why our patent system is broken: technology has done such an amazing job at hiding its complexity that the people regulating and running the patent system are barely even aware of the complexity of what they're regulating and running. That's the ultimate bikeshedding: just like the proverbial discussions in the town hall about a nuclear power plant end up being about the paint color for the plant's bike shed, the patent discussions about modern computing systems end up being about screen sizes and icon ordering, because in both cases those are the only aspect that the people involved in the discussion are capable of discussing, even though they are irrelevant to the actual function of the overall system being discussed.

CC:BY 3.0
110 comments on original post
1
Add a comment...

Johannes Bauer

Shared publicly  - 
1
Add a comment...

Johannes Bauer

Shared publicly  - 
 
:)
Best part: "And we’re seeing a lot of injuries caused by them trying to force a spare film cartridge into the pocket of already too-tight skinny jeans."
1
Add a comment...
In his circles
292 people
Have him in circles
154 people
Maribel Zamor's profile photo
Christian Kilb's profile photo
Rasmus Schultz's profile photo
‫محمود الشيمى‬‎'s profile photo
Michael Härtl's profile photo
Alexis Jeansalle's profile photo
Junior Scoob's profile photo
Matthew J Price's profile photo
Edgar F.'s profile photo

Johannes Bauer

Shared publicly  - 
 
Nice explanation in how SPDY works
 
Quick discussion on what problems SPDY (and HTTP 2.0), are trying to address, and how they're going about it...

For those who haven't been following the process, the HTTPBis working group adopted SPDY v2 as the starting point for HTTP 2.0, and the first workgroup draft of the HTTP 2.0 proposal is expected to be delivered ~this month! If you're curious, definitely check out the working group mailing list.

Last but not least, yep.. I've kicked off a project with O'Reilly for a book on "Browser Networking" - really excited about it! Lots of work ahead, but I'm having a lot of fun working on it.
3 comments on original post
1
Add a comment...

Johannes Bauer

Shared publicly  - 
 
I've just created a new blog and thought it would be interesting to compare #Yii with #Laravel as I am using both of them. Here's what I came up with. And by the way: I am not a native speaker, so bear with me :)
I have been using Yii for over two years now and I'm still in love with it. It definitely is one of the best PHP frameworks out there and you can be sure that there is nothing you can't do with it. Th...
1
3
Johannes Bauer's profile photoMartin Steiner's profile photoIonut Morariu's profile photoMaribel Zamor's profile photo
2 comments
 
Glad you like it :)
Add a comment...

Johannes Bauer

Shared publicly  - 
 
After all the noSQL buzz this actually seems to make sense. Imagine scalable, full ACID SQL without burning in sharding hell. How would you call that? Of course newSQL :)
1
Luciano Panepucci's profile photoJohannes Bauer's profile photo
3 comments
 
But it's a lot simpler to add SQL style transaction logic to your system than to ensure the same in e.g.: MongoDB (like described here http://cookbook.mongodb.org/patterns/perform-two-phase-commits/). Anyways, I think that there definitely is a market for that. You start with MySQL and as soon as you begin to outgrow it you could swap to NeoDB or VoltDB etc. without completely rewriting every line of code (in case of NeoDB that seems to be possible without insane efforts)
Add a comment...

Johannes Bauer

Shared publicly  - 
 
Thanks to +Michael Härtl for sharing his "flushable cache dependency" code. This is really useful if you want to invalidate your caches on updates via afterSave(). #yiiframework
Flush records from the cache with this dependency
1
1
Michael Härtl's profile photoMaurizio Domba Cerin's profile photo
 
Thanks, glad that you like it :)
Add a comment...
People
In his circles
292 people
Have him in circles
154 people
Maribel Zamor's profile photo
Christian Kilb's profile photo
Rasmus Schultz's profile photo
‫محمود الشيمى‬‎'s profile photo
Michael Härtl's profile photo
Alexis Jeansalle's profile photo
Junior Scoob's profile photo
Matthew J Price's profile photo
Edgar F.'s profile photo
Work
Occupation
I build things and stuff
Story
Tagline
I develop things and stuff
Basic Information
Gender
Male