background preloader

Theory and Practice

Facebook Twitter

Concurrent Programming for Scalable Web Architectures. State Machines – Basics of Computer Science. Computer science is what enables programming, but it is possible to do a lot of programming without understanding the computer science concepts underlying the process of computation. This isn’t always a bad thing. When we program we work at a much higher level of abstraction. When we drive a car, we only concern ourselves with two or three pedals, a gearshift and a steering wheel. You can safely operate a car without having any clear idea of how it works. However, if you want to operate a car at the very limits of its capabilities, you need to know a lot more about automobiles than just the three pedals, gearshift and steering wheel.

The same is true of programming. The purpose of this article is to provide some fundamental background for computation. Finite State Machine A finite state machine is a mathematical abstraction used to design algorithms. Imagine a device that reads a long piece of paper. As the state machine reads each letter it changes state.

Do you see the problem? What every programmer should know about memory, Part 1. September 21, 2007 This article was contributed by Ulrich Drepper [Editor's introduction: Ulrich Drepper recently approached us asking if we would be interested in publishing a lengthy document he had written on how memory and software interact. We did not have to look at the text for long to realize that it would be of interest to many LWN readers. Memory usage is often the determining factor in how software performs, but good information on how to avoid memory bottlenecks is hard to find. This series of articles should change that situation.

The original document prints out at over 100 pages. Reformatting the text from the original LaTeX has been a bit of a challenge, but the results, hopefully, will be good. Many thanks to Ulrich for allowing LWN to publish this material; we hope that it will lead to more memory-efficient software across our systems in the near future.] 1 Introduction In the early days computers were much simpler. RAM hardware design (speed and parallelism). 1.3 Thanks. A Brief Beginner's Guide To Clojure. By John Gabriele, last-modified: 2013-08 (using Clojure 1.5.1, Leiningen 2.2.0, and OpenJDK 7) The purpose of this brief guide is to provide an overview of the Clojure ecosystem while also helping new users quickly get up and running. This guide concerns the original, Java-based Clojure implementation. There are others. It’s not a Clojure language tutorial; there are already a number of good ones available (linked to later).

This guide is not comprehensive; it’s just a handful of nicely-organized notes that I thought would be most useful to new Clojure users. The author (hi!) It’s intended that the chapters of this guide be read in order. This guide may contain errors. let me know (jgabriele at fastmail dot fm)

Operators - Absolute Beginner's Guide to Bit Shifting. Design Patterns and Refactoring.