Computing
to very much further sort and understand.
General
- A program is many things. It is a piece of text typed by a programmer, it is the directing force that makes the computer do what it does, it is data in the computer's memory, yet it controls the actions performed on this same memory. Analogies that try to compare programs to objects we are familiar with tend to fall short, but a superficially fitting one is that of a machine. The gears of a mechanical watch fit together ingeniously, and if the watchmaker was any good, it will accurately show the time for many years. The elements of a program fit together in a similar way, and if the programmer knows what he is doing, the program will run without crashing.
- A computer is a machine built to act as a host for these immaterial machines. Computers themselves can only do stupidly straightforward things. The reason they are so useful is that they do these things at an incredibly high speed. A program can, by ingeniously combining many of these simple actions, do very complicated things. ... When a program works, it is beautiful. The art of programming is the skill of controlling complexity. The great program is subdued, made simple in its complexity.
-- http://eloquentjavascript.net/chapter1.html
Basics
Eric Steven Raymond;
- Pipe Logic - "In this model, a UNIX pipe acts like a wire, that is, a conductor with parasitic capacitance."
- Programmer Competency Matrix
- Six languages to master.
- Learning C, reducing fear.
- Programming is Hard, Let's Go Scripting...
- A Scripter at Heart
- http://vislab-ccom.unh.edu/~schwehr/Classes/2011/esci895-researchtools/
- Simple Made Easy - Rich Hickey emphasizes simplicity’s virtues over easiness’, showing that while many choose easiness they may end up with complexity, and the better way is to choose easiness along the simplicity path. ]
- Self-Taught Developers: Are You Missing Your Foundation?
- Torvalds' quote about good programmer - "Bad programmers worry about the code. Good programmers worry about data structures and their relationships."
- Stack Exchange: I've inherited 200K lines of spaghetti code — what now?
- Become a Programmer, Motherfucker
- Teach Yourself Programming in Ten Years
- Learnable Programming - Bret Victor - Designing a programming system for understanding programs
- The 5 Hardest Parts of Programming - Optimization, Networking, Security, Reliability, Scalability
Reference
- http://stackoverflow.com/
- StackMonthly - A monthly digest of the best questions on StackOverflow
- Hyperpolyglot - a programming language side-by-side reference sheet
- http://rosettacode.org/wiki/Rosetta_Code
- A Very Quick Comparison of Popular Languages for Teaching Computer Programming
- syntax across languages
- http://helloworldquiz.com/
- How do we tell truths that might hurt? - E.W. Dijkstra
- YourLanguageSucks
- Project Euler is a series of challenging mathematical/computer programming problems that will require more than just mathematical insights to solve. Although mathematics will help you arrive at elegant and efficient methods, the use of a computer and programming skills will be required to solve most problems.
- Websites like projecteuler.net
- JavaScript solutions to the Project Euler problems.
- wikipedia:Backus%E2%80%93Naur_Form notation, for context-free syntax grammar
- The Packrat Parsing and Parsing Expression Grammars Page
- http://lee-phillips.org/lispmath/
- http://www.evanmiller.org/mathematical-hacker.html
- http://www.the-adam.com/adam/rantrave/st02.pdf
OS
- OSDev.org - wiki that provides information about the creation of operating systems and serves as a community for those people interested in OS creation
Books
- https://github.com/vhf/free-programming-books/blob/master/free-programming-books.md
- http://hackershelf.com/
- http://en.wikibooks.org/wiki/Computer_Programming
- WikiBooks: A-level Computing/AQA/Problem Solving, Programming, Operating Systems, Databases and Networking/Programming Concepts
- http://eric.themoritzfamily.com/books-every-self-taught-computer-scientist-should-read.html
- http://nlpwp.org/book/
- http://stackoverflow.com/questions/194812/list-of-freely-available-programming-books/392926#392926
- http://citizen428.net/blog/2010/08/12/30-free-programming-ebooks/
News and Blogs
People
- http://www.catb.org/esr/
- http://jwz.org/
- http://blogs.msdn.com/b/oldnewthing/
- http://paulirish.com/
- http://codinghorror.com/blog/ - Jeff Atwood
- http://braythwayt.com/ - Reginald Braithwaite
- http://bradfitz.com/
- http://evan.status.net/
- http://rachelbythebay.com/
Tools
Coding techniques
see also agile, xp, etc
Computation
- https://en.wikipedia.org/wiki/Computer
- https://en.wikipedia.org/wiki/Computing
- https://en.wikipedia.org/wiki/Digital_computer
See also Maths#Logic
- https://en.wikipedia.org/wiki/Theory_of_computation - deals with how efficiently problems can be solved on a model of computation, using an algorithm. The field is divided into three major branches: automata theory, computability theory, and computational complexity theory.
- https://en.wikipedia.org/wiki/File:Theoretical_computer_science.svg - Relationship between complexity theory, formal languages and computability theory.
- Theory of Computing - An Open Access Electronic Journal in Theoretical Computer Science
People
- https://en.wikipedia.org/wiki/Alan_Turing
- https://en.wikipedia.org/wiki/Alonzo_Church
- https://en.wikipedia.org/wiki/Alfred_Tarski
- https://en.wikipedia.org/wiki/Kurt_G%C3%B6del
- https://en.wikipedia.org/wiki/Emil_Leon_Post
- https://en.wikipedia.org/wiki/Stephen_Cole_Kleene
Theory
to sort
- https://en.wikipedia.org/wiki/Computability_theory - also called recursion theory, is a branch of mathematical logic, of computer science, and of the theory of computation that originated in the 1930s with the study of computable functions and Turing degrees.
The basic questions addressed by recursion theory are "What does it mean for a function on the natural numbers to be computable?" and "How can noncomputable functions be classified into a hierarchy based on their level of noncomputability?". The answers to these questions have led to a rich theory that is still being actively researched. The field has since grown to include the study of generalized computability and definability.
- https://en.wikipedia.org/wiki/Computable_function - the basic objects of study in computability theory. Computable functions are the formalized analogue of the intuitive notion of algorithm. They are used to discuss computability without referring to any concrete model of computation such as Turing machines or register machines. Any definition, however, must make reference to some specific model of computation but all valid definitions yield the same class of functions. Particular models of computability that give rise to the set of computable functions are the Turing-computable functions and the μ-recursive functions.
- https://en.wikipedia.org/wiki/Church%E2%80%93Turing_thesis - states that recursion, lambda calculus and the Turing machine are equivalent
- https://en.wikipedia.org/wiki/Turing_degree - or degree of unsolvability of a set of natural numbers measures the level of algorithmic unsolvability of the set. The concept of Turing degree is fundamental in computability theory, where sets of natural numbers are often regarded as decision problems; the Turing degree of a set tells how difficult it is to solve the decision problem associated with the set. That is, to determine whether an arbitrary number is in the given set.
- https://en.wikipedia.org/wiki/Recursive_set - a set of natural numbers is called recursive, computable or decidable if there is an algorithm which terminates after a finite amount of time and correctly decides whether or not a given number belongs to the set. A more general class of sets consists of the recursively enumerable sets, also called semidecidable sets. For these sets, it is only required that there is an algorithm that correctly decides when a number is in the set; the algorithm may give no answer (but not the wrong answer) for numbers not in the set. A set which is not computable is called noncomputable or undecidable.
- https://en.wikipedia.org/wiki/Recursively_enumerable_set - a set S of natural numbers is called recursively enumerable, computably enumerable, semidecidable, provable or Turing-recognizable if: There is an algorithm such that the set of input numbers for which the algorithm halts is exactly S, or equivalently; There is an algorithm that enumerates the members of S. That means that its output is simply a list of the members of S: s1, s2, s3, ... . If necessary, this algorithm may run forever. The first condition suggests why the term semidecidable is sometimes used; the second suggests why computably enumerable is used. The abbreviations r.e. and c.e. are often used, even in print, instead of the full phrase. In computational complexity theory, the complexity class containing all recursively enumerable sets is RE.
- https://en.wikipedia.org/wiki/μ-recursive_function - class of partial functions from natural numbers to natural numbers which are "computable" in an intuitive sense
- https://en.wikipedia.org/wiki/Primitive_recursive_function - class of functions defined using primitive recursion and composition as central operations, strict subset of the total µ-recursive functions
- https://en.wikipedia.org/wiki/Grzegorczyk_hierarchy - a hierarchy of functions used in computability theory (Wagner and Wechsung 1986:43). Every function in the Grzegorczyk hierarchy is a primitive recursive function, and every primitive recursive function appears in the hierarchy at some level. The hierarchy deals with the rate at which the values of the functions grow; intuitively, functions in lower level of the hierarchy grow slower than functions in the higher levels.
- https://en.wikipedia.org/wiki/Higher-order_function
- https://en.wikipedia.org/wiki/Fixed_point_combinator
- https://en.wikipedia.org/wiki/Curry–Howard_correspondence - the direct relationship between computer programs and mathematical proofs. It is a generalization of a syntactic analogy between systems of formal logic and computational calculi that was first discovered by the American mathematician Haskell Curry and logician William Alvin Howard.
- The Holy Trinity - "The doctrine of computational trinitarianism holds that computation manifests itself in three forms: proofs of propositions, programs of a type, and mappings between structures. These three aspects give rise to three sects of worship: Logic, which gives primacy to proofs and propositions; Languages, which gives primacy to programs and types; Categories, which gives primacy to mappings and structures. The central dogma of computational trinitarianism holds that Logic, Languages, and Categories are but three manifestations of one divine notion of computation. There is no preferred route to enlightenment: each aspect provides insights that comprise the experience of computation in our lives."
- Physics, Topology, Logic and Computation: A Rosetta Stone [1] - "In physics, Feynman diagrams are used to reason about quantum processes. In the 1980s, it became clear that underlying these diagrams is a powerful analogy between quantum physics and topology: namely, a linear operator behaves very much like a "cobordism". Similar diagrams can be used to reason about logic, where they represent proofs, and computation, where they represent programs. With the rise of interest in quantum cryptography and quantum computation, it became clear that there is extensive network of analogies between physics, topology, logic and computation. In this expository paper, we make some of these analogies precise using the concept of "closed symmetric monoidal category". We assume no prior knowledge of category theory, proof theory or computer science."
- https://en.wikipedia.org/wiki/Model_of_computation
- http://c2.com/cgi/wiki?ModelsOfComputation
- http://esolangs.org/wiki/Category:Computational_models
- Where LISP Fits - [2] - "These simplifications made LISP into a way of describing computable functions much neater than the Turing machines or the general recursive definitions used in recursive function theory. The fact that Turing machines constitute an awkward programming language doesn’t much bother recursive function theorists, because they almost never have any reason to write particular recursive definitions, since the theory concerns recursive functions in general. They often have reason to prove that recursive functions with specific properties exist, but this can be done by an informal argument without having to write them down explicitly. In the early days of computing, some people developed programming languages based on Turing machines; perhaps it seemed more scientific. Anyway, I decided to write a paper describing LISP both as a programming language and as a formalism for doing recursive function theory."
Automata theory
- https://en.wikipedia.org/wiki/Automata_theory - a mathematical object that takes a word as input and decides either to accept it or reject it. Since all computational problems are reducible into the accept/reject question on words (all problem instances can be represented in a finite length of symbols) automata theory plays a crucial role in computational theory.
- https://en.wikipedia.org/wiki/Deterministic_finite_automaton
- https://en.wikipedia.org/wiki/Semiautomaton
- https://en.wikipedia.org/wiki/Nondeterministic_finite_automaton
- https://en.wikipedia.org/wiki/Nondeterministic_finite_automaton_with_%CE%B5-moves
- https://en.wikipedia.org/wiki/Pushdown_automaton - type of automaton that employs a stack.
- https://en.wikipedia.org/wiki/%CE%A9-automaton
- https://en.wikipedia.org/wiki/Probabilistic_automaton
- https://en.wikipedia.org/wiki/Register_machine - a generic class of abstract machines used in a manner similar to a Turing machine. All the models are Turing equivalent.
- https://en.wikipedia.org/wiki/Mealy_machine
- https://en.wikipedia.org/wiki/Moore_machine - a finite-state machine whose output values are determined solely by its current state
Cellular automaton
- https://en.wikipedia.org/wiki/Cellular_automaton
- Cellular Automata - The mathematics of how life works
- https://code.google.com/p/ruletablerepository/
- https://en.wikipedia.org/wiki/Elementary_cellular_automaton - one-dimensional cellular automaton where there are two possible states (labeled 0 and 1) and the rule to determine the state of a cell in the next generation depends only on the current state of the cell and its two immediate neighbors
- https://en.wikipedia.org/wiki/Wolfram_code
- https://en.wikipedia.org/wiki/Reversible_cellular_automaton
- https://en.wikipedia.org/wiki/Block_cellular_automaton
- https://en.wikipedia.org/wiki/Second-order_cellular_automaton
- https://en.wikipedia.org/wiki/Billiard-ball_computer
- https://en.wikipedia.org/wiki/Stochastic_cellular_automaton
- https://en.wikipedia.org/wiki/Asynchronous_cellular_automaton
- https://en.wikipedia.org/wiki/Von_Neumann_cellular_automata
- https://en.wikipedia.org/wiki/Codd%27s_cellular_automaton
- https://en.wikipedia.org/wiki/Langton%27s_loops
- https://en.wikipedia.org/wiki/Nobili_cellular_automata
- https://en.wikipedia.org/wiki/Cyclic_cellular_automaton
- Game of Life
- https://en.wikipedia.org/wiki/Moore_neighborhood
- https://en.wikipedia.org/wiki/Speed_of_light_(cellular_automaton)
- https://en.wikipedia.org/wiki/Life-like_cellular_automaton
- https://en.wikipedia.org/wiki/Movable_cellular_automaton
- https://en.wikipedia.org/wiki/Continuous_automaton
- https://en.wikipedia.org/wiki/Continuous_spatial_automaton
- https://en.wikipedia.org/wiki/Lattice_gas_automaton
- https://en.wikipedia.org/wiki/Quantum_cellular_automata
- https://en.wikipedia.org/wiki/Quantum_dot_cellular_automata
Turing machine
- http://en.wikipedia.org/wiki/Turing_machine - FSM with two stacks (left and right on tape)
- http://en.wikipedia.org/wiki/Turing_completeness
- http://www.felienne.com/?p=2974
- http://beza1e1.tuxen.de/articles/accidentally_turing_complete.html
- https://news.ycombinator.com/item?id=6693653
Lambda calculus
- http://www.reddit.com/r/learnprogramming/comments/xzs76/lambda_calculus_explained_in_the_simplest_terms/c5r6otq
- http://www.reddit.com/r/compsci/comments/1t9yiv/does_anybody_know_of_a_good_text_book_for/
- https://en.wikipedia.org/wiki/Typed_lambda_calculus
- https://en.wikipedia.org/wiki/Simply_typed_lambda_calculus
- https://en.wikipedia.org/wiki/SKI_combinator_calculus
- https://en.wikipedia.org/wiki/Binary_lambda_calculus
- https://en.wikipedia.org/wiki/%CE%BC-recursive%20function
- https://en.wikipedia.org/wiki/Lambda-mu_calculus
- https://en.wikipedia.org/wiki/System_F
- http://stackoverflow.com/questions/93526/what-is-a-y-combinator
- http://www.confreaks.com/videos/1287-rubyconf2012-y-not-adventures-in-functional-programming
Complexity
- https://en.wikipedia.org/wiki/Blum_axioms
- https://en.wikipedia.org/wiki/Gap_theorem
- https://en.wikipedia.org/wiki/Blum%27s_speedup_theorem
- https://en.wikipedia.org/wiki/Decision_problem - a question in some formal system with a yes-or-no answer
- https://en.wikipedia.org/wiki/Complexity_class
- https://en.wikipedia.org/wiki/List_of_complexity_classes
- https://en.wikipedia.org/wiki/Big_O_notation
- SO: Plain English explanation of Big O
- https://en.wikipedia.org/wiki/Time_complexity
- https://en.wikipedia.org/wiki/Polynomial_expression
- https://en.wikipedia.org/wiki/NP_(complexity)
- https://en.wikipedia.org/wiki/Halting_Problem
- Scooping The Loop Snooper - A proof that the Halting Problem is undecidable
to sort
- https://en.wikipedia.org/wiki/Semantics_(computer_science) - rigorous mathematical study of the meaning of programming languages by evaluating the meaning of syntactically legal strings
- https://en.wikipedia.org/wiki/Denotational_semantics - approach of formalizing the meanings of programming languages by constructing mathematical objects (called denotations) that describe the meanings of expressions from the languages
- https://en.wikipedia.org/wiki/Operational_semantics - certain desired properties of a program, such as correctness, safety or security, are verified by constructing proofs from logical statements about its execution and procedures
- https://en.wikipedia.org/wiki/Axiomatic_semantics - define the meaning of a command in a program by describing its effect on assertions about the program state
- https://en.wikipedia.org/wiki/Algebraic_semantics_(computer_science) - a form of axiomatic semantics based on algebraic laws for describing and reasoning about program semantics in a formal manner.
- http://en.wikipedia.org/wiki/Programming_language_theory
- http://en.wikipedia.org/wiki/Automatic_programming
- https://www.youtube.com/watch?v=AD4b-52jtos&list=PL2FF649D0C4407B30
- https://www.youtube.com/watch?v=2Op3QLzMgSY&list=PL8FE88AA54363BC46
- https://www.youtube.com/watch?v=EKWGGDXe5MA&feature=youtu.be
Processing
- https://en.wikipedia.org/wiki/Computer_architecture
- https://en.wikipedia.org/wiki/Von_Neumann_architecture
- https://en.wikipedia.org/wiki/Harvard_architecture
- https://en.wikipedia.org/wiki/Modified_Harvard_architecture
- https://en.wikipedia.org/wiki/Processor_(computing)#Computing
- https://en.wikipedia.org/wiki/List_of_CPU_architectures
- https://en.wikipedia.org/wiki/Central_processing_unit
- https://en.wikipedia.org/wiki/CPU_design
- https://en.wikipedia.org/wiki/Microprocessor
- https://en.wikipedia.org/wiki/Processor_register
- https://en.wikipedia.org/wiki/Register_renaming
- http://www.mikeash.com/pyblog/friday-qa-2013-10-11-why-registers-are-fast-and-ram-is-slow.html
- https://en.wikipedia.org/wiki/Instruction_pipeline
- http://lolengine.net/blog/2011/9/17/playing-with-the-cpu-pipeline [7]
- https://en.wikipedia.org/wiki/Microcode
- https://en.wikipedia.org/wiki/Opcode
- https://en.wikipedia.org/wiki/Machine_code
- https://en.wikipedia.org/wiki/Assembly_language
- https://en.wikipedia.org/wiki/Memory_management
- https://en.wikipedia.org/wiki/Virtual_memory
- https://en.wikipedia.org/wiki/Memory_management_unit
- https://en.wikipedia.org/wiki/Field-programmable_gate_array
- http://forums.xilinx.com/t5/Embedded-Development-Tools/GPUs-vs-FPGAs/td-p/60112
- https://news.ycombinator.com/item?id=6305113
- http://en.wikipedia.org/wiki/Reduced_instruction_set_computing
- http://en.wikipedia.org/wiki/Complex_instruction_set_computing
- https://en.wikipedia.org/wiki/x86
- https://news.ycombinator.com/item?id=7422703
- http://mainisusuallyafunction.blogspot.co.uk/2014/02/x86-is-turing-complete-with-no-registers.html [9]
- https://code.google.com/p/corkami/wiki/x86oddities
- http://www.cl.cam.ac.uk/~sd601/papers/mov.pdf [10]
- https://news.ycombinator.com/item?id=7680706
- https://en.wikipedia.org/wiki/Advanced_Vector_Extensions
- http://en.wikipedia.org/wiki/General-purpose_computing_on_graphics_processing_units
- http://gpgpu.org/
- The Belt | Mill computing [12]
- The Mill - summary of first three talks
- http://ootbcomp.com/topic/introduction-to-the-mill-cpu-programming-model-2/ [13]
Engineering
See also Organisation
- http://en.wikipedia.org/wiki/Computer_engineering
- http://www.amazon.com/Bebop-Bytes-Back-Unconventional-Computers/dp/0965193403
- http://www.philipreames.com/Blog/things-every-practicing-software-engineer-should-aim-to-know/
- https://en.wikipedia.org/wiki/List_of_software_development_philosophies
- http://en.wikipedia.org/wiki/Software_development_methodology
- http://en.wikipedia.org/wiki/Software_development_process
- Do you use source control?
- Can you make a build in one step?
- Do you make daily builds?
- Do you have a bug database?
- Do you fix bugs before writing new code?
- Do you have an up-to-date schedule?
- Do you have a spec?
- Do programmers have quiet working conditions?
- Do you use the best tools money can buy?
- Do you have testers?
- Do new candidates write code during their interview?
- Do you do hallway usability testing?
Syntax
- http://en.wikipedia.org/wiki/Syntax_(programming_languages)
- http://en.wikipedia.org/wiki/Syntactic_sugar
- https://en.wikipedia.org/wiki/Dyck_language
- https://en.wikipedia.org/wiki/Catalan_number
- https://en.wikipedia.org/wiki/Declaration_(computer_programming)
- https://en.wikipedia.org/wiki/Identifier#In_computer_languages
- http://en.wikipedia.org/wiki/Literal_(computer_programming)
- http://en.wikipedia.org/wiki/String_literal
- http://en.wikipedia.org/wiki/Variable_(programming)
- http://en.wikipedia.org/wiki/Constant_(computer_science)
Data types
- https://en.wikipedia.org/wiki/Type_theory - any of a class of formal systems, some of which can serve as alternatives to set theory as a foundation for all mathematics. In type theory, every "term" has a "type" and operations are restricted to terms of a certain type.
- https://en.wikipedia.org/wiki/Data_type
- https://en.wikipedia.org/wiki/Type_system - a collection of rules that assign a property called a type to constructs such as variables, expressions, functions or modules—a computer program is composed of. reduces bugs by defining interfaces between different parts of a computer program, and then checking that the parts have been connected in a consistent way. This checking can happen statically (at compile time), dynamically (at run time), or as a combination thereof.
- https://en.wikipedia.org/wiki/Type_safety - the extent to which a programming language discourages or prevents type errors.
- https://en.wikipedia.org/wiki/Type_signature - type annotation defines the inputs and outputs for a function, subroutine or method.
- https://en.wikipedia.org/wiki/Type_conversion
- https://en.wikipedia.org/wiki/Type_inference - automatic deduction of the type of an expression in a programming language. If some, but not all, type annotations are already present it is referred to as type reconstruction. The opposite operation of type inference is called type erasure.
- https://en.wikipedia.org/wiki/Strong_and_weak_typing
- https://en.wikipedia.org/wiki/Strong_typing
- https://en.wikipedia.org/wiki/Weak_typing
- https://en.wikipedia.org/wiki/Type_inference
- https://en.wikipedia.org/wiki/Structural_type_system
- https://en.wikipedia.org/wiki/Nominative_type_system
- https://en.wikipedia.org/wiki/Primitive_data_type - a basic type, often built-in, used as a building block for composite types
- https://en.wikipedia.org/wiki/Composite_data_type - any data type constructed using primitive data types and other composite types
- https://en.wikipedia.org/wiki/Object_composition - a way to combine simple objects or data types into more complex ones
- https://en.wikipedia.org/wiki/Type_constructor - feature of a typed formal language that builds new types from old, such as product types, function types, power types and list types
- https://en.wikipedia.org/wiki/Algebraic_data_type
- https://en.wikipedia.org/wiki/Product_type - a product of types is another, compounded, type in a structure. associated with logical conjunction (AND) in logic.
- https://en.wikipedia.org/wiki/Tagged_union - sum type. data structure used to hold a value that could take on several different, but fixed types. Only one of the types can be in use at any one time, and a tag field explicitly indicates which one is in use.
- https://en.wikipedia.org/wiki/Record_(computer_science)
- https://en.wikipedia.org/wiki/Tuple
- https://en.wikipedia.org/wiki/Dependent_type - a type that depends on a value
- https://en.wikipedia.org/wiki/Recursive_data_type - inductive data type, a data type for values that may contain other values of the same type. Data of recursive types are usually viewed as directed graphs.
- https://en.wikipedia.org/wiki/Hindley%E2%80%93Milner_type_system
- http://c2.com/cgi/wiki?HindleyMilnerTypeInference
- http://www.lispcast.com/Hindley-Milner-in-Clojure [16]
- https://en.wikipedia.org/wiki/Duck_typing - style of typing in which an object's methods and properties determine the valid semantics, rather than its inheritance from a particular class or implementation of a specific interface
- https://en.wikipedia.org/wiki/Latent_typing - type system where types are associated with values and not variables, requires run-time type checking
- https://en.wikipedia.org/wiki/Substructural_type_system - family of type systems analogous to substructural logics where one or more of the structural rules are absent or allowed under controlled circumstances. Such systems are useful for constraining access to system resources such as files, locks and memory by keeping track of changes of state that occur and preventing invalid states
Numbers
- https://en.wikipedia.org/wiki/Floating_point
- Floating Point - Computerphile
- http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/Babbfeda.html
- http://randomascii.wordpress.com/2014/01/27/theres-only-four-billion-floatsso-test-them-all/ [17]
Data structures
- http://www.cs.usfca.edu/~galles/visualization/Algorithms.html [18]
- http://en.wikipedia.org/wiki/Hash_table
- http://en.wikipedia.org/wiki/Array_data_structure
- http://en.wikipedia.org/wiki/Array_data_type
- http://en.wikipedia.org/wiki/Associative_array
- http://en.wikipedia.org/wiki/Set_data_structure
- http://en.wikipedia.org/wiki/Abstract_semantic_graph
- http://en.wikipedia.org/wiki/Bit_string
- http://en.wikipedia.org/wiki/Tree_(data_structure)
- http://en.wikipedia.org/wiki/Binary_tree
- http://en.wikipedia.org/wiki/Binary_search_tree
- http://en.wikipedia.org/wiki/B-tree
- http://en.wikipedia.org/wiki/Rope_%28data_structure%29
The difference between arrays and linked lists are:
- Arrays are linear data structures. Linked lists are linear and non-linear data structures. - Linked lists are linear for accessing, and non-linear for storing in memory - Array has homogenous values. And each element is independent of each other positions. Each node in the linked list is connected with its previous node which is a pointer to the node. - Array elements can be modified easily by identifying the index value. It is a complex process for modifying the node in a linked list. - Array elements can not be added, deleted once it is declared. The nodes in the linked list can be added and deleted from the list.
- http://www.xanadu.com/zigzag/
- YouTube: Ted Nelson on Zigzag data structures - relationship vector, hyperthoginal
- http://en.wikipedia.org/wiki/Continuation
- http://en.wikipedia.org/wiki/Continuation-passing_style
- http://matt.might.net/articles/cps-conversion/
- http://en.wikipedia.org/wiki/Stack_(abstract_data_type)
- http://en.wikipedia.org/wiki/Call_stack
- http://en.wikipedia.org/wiki/Symbol_table
Mutability
Objects
- http://en.wikipedia.org/wiki/Object_(computer_science)
- http://en.wikipedia.org/wiki/Class_(computer_science)
- http://en.wikipedia.org/wiki/Instance_(computer_science)
- http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)
- http://en.wikipedia.org/wiki/Multiple_inheritance
- http://en.wikipedia.org/wiki/Prototype-based_programming
- http://en.wikipedia.org/wiki/Differential_inheritance
- http://en.wikipedia.org/wiki/Object_composition
- http://en.wikipedia.org/wiki/Composition_over_inheritance
- http://en.wikipedia.org/wiki/Late_binding
- http://en.wikipedia.org/wiki/Duck_typing
- http://en.wikipedia.org/wiki/Method_(computer_programming)
- http://en.wikipedia.org/wiki/Mutator_method
- https://en.wikipedia.org/wiki/Protocol_(object-oriented_programming)
- https://en.wikipedia.org/wiki/Delegation_(programming)
- https://en.wikipedia.org/wiki/Delegation_pattern
- http://en.wikipedia.org/wiki/Observer_pattern
- http://en.wikipedia.org/wiki/Template_method_pattern
- http://en.wikipedia.org/wiki/Factory_method_pattern
- http://en.wikipedia.org/wiki/Composite_pattern
- http://en.wikipedia.org/wiki/Decorator_pattern
- http://en.wikipedia.org/wiki/Mediator_pattern
- http://en.wikipedia.org/wiki/Adapter_pattern
- http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization
- http://en.wikipedia.org/wiki/SOLID_%28object-oriented_design%29
- https://plus.google.com/101960720994009339267/posts/hoJdanihKwb - rob pike on oo
- https://news.ycombinator.com/item?id=6909326
- http://harmful.cat-v.org/software/OO_programming/why_oo_sucks [19]
- http://prog21.dadgum.com/156.html
- http://wcook.blogspot.co.uk/2012/07/proposal-for-simplified-modern.html
- http://blog.codeclimate.com/blog/2012/11/28/your-objects-the-unix-way/
Evaluation
- http://en.wikipedia.org/wiki/Expression_(mathematics)
- http://en.wikipedia.org/wiki/Expression_(computer_science)
An expression evaluates to a value. A statement does something.
x = 1 y = x + 1 # an expression print y # a statement, prints 2
- http://en.wikipedia.org/wiki/Evaluation_strategy
- http://en.wikipedia.org/wiki/Expression-oriented_programming_language
- http://en.wikipedia.org/wiki/Referential_transparency_(computer_science)
- http://en.wikipedia.org/wiki/Side_effect_(computer_science)
- http://en.wikipedia.org/wiki/Information_hiding
- http://en.wikipedia.org/wiki/Conditional_(computer_programming)
- http://en.wikipedia.org/wiki/Call_stack
- http://en.wikipedia.org/wiki/First-class_citizen
- http://en.wikipedia.org/wiki/Non-strict_programming_language
- http://en.wikipedia.org/wiki/Scope_(computer_science)
- http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-scope/6445794#6445794
- http://en.wikipedia.org/wiki/Recursion_(computer_science)
- How recursion got into programming: a comedy of errors [22]
- http://en.wikipedia.org/wiki/Modulo_operation
- Vimeo: Impossible Programs - Scottish Ruby Conf
Operators
Control structures
- https://en.wikipedia.org/wiki/Conditional_(programming)
- https://en.wikipedia.org/wiki/Switch_statement
- https://en.wikipedia.org/wiki/For_loop
- https://en.wikipedia.org/wiki/While_loop
- https://en.wikipedia.org/wiki/Do_while_loop
- https://en.wikipedia.org/wiki/Foreach_loop
- https://en.wikipedia.org/wiki/Container_(abstract_data_type)
- https://en.wikipedia.org/wiki/Generator_(computer_science)
- https://en.wikipedia.org/wiki/Coroutines
Algorithms
See also Maths
- https://en.wikipedia.org/wiki/Algorithmic_information_theory - a subfield of information theory and computer science that concerns itself with the relationship between computation and information. According to Gregory Chaitin, it is "the result of putting Shannon's information theory and Turing's computability theory into a cocktail shaker and shaking vigorously."
- http://www.algosort.com/
- https://en.wikipedia.org/wiki/List_of_algorithms
- http://www.jjj.de/fxt/fxtpage.html#fxtbook [23]
- Dictionary of Algorithms and Data Structures
- http://news.ycombinator.com/item?id=4961357
- http://graphics.stanford.edu/~seander/bithacks.html
- http://rosettacode.org/wiki/Category:Programming_Tasks
- http://www.hackersdelight.org/
- http://blog.notdot.net/tag/damn-cool-algorithms
- http://aima.cs.berkeley.edu/
- http://www.cleveralgorithms.com/
- http://www.cs.sunysb.edu/~algorith/ [24]
- What different sorting algorithms sound like
- http://panthema.net/2013/sound-of-sorting/
- http://preshing.com/20121026/1mb-sorting-explained
- http://www.dangermouse.net/esoteric/bogobogosort.html
- http://ljs.io/projects/rainbow/ [25]
- http://sorting.at/ [26]
- https://news.ycombinator.com/item?id=6093777 - bloom filters
- http://billmill.org/bloomfilter-tutorial/
Functions
- subroutine is a sequence of program instructions that perform a specific task, packaged as a unit. This unit can then be used in programs wherever that particular task should be performed. Subprograms may be defined within programs, or separately in libraries that can be used by multiple programs. In different programming languages a subroutine may be called a procedure, a function, a routine, a method, or a subprogram. The generic term callable unit is sometimes used.
- http://en.wikipedia.org/wiki/Anonymous_function
- http://en.wikipedia.org/wiki/Function_type
- http://en.wikipedia.org/wiki/Function_objects
- http://en.wikipedia.org/wiki/Closure_(computer_science)
- http://en.wikipedia.org/wiki/Callback_(computer_science)
- http://en.wikipedia.org/wiki/Call_site
- http://en.wikipedia.org/wiki/Tail_call
- http://en.wikipedia.org/wiki/Curry%E2%80%93Howard_correspondence
- http://en.wikipedia.org/wiki/Currying
Paradigms
- http://en.wikipedia.org/wiki/Structured_programming
- http://en.wikipedia.org/wiki/Procedural_programming
- http://en.wikipedia.org/wiki/Imperative_programming
Patterns
- WikiWikiWeb, aka Portland Pattern Repository's Wiki, aka Ward's Wiki
- http://c2.com/cgi/wiki?ExtremeProgrammingRoadmap
- http://en.wikipedia.org/wiki/Singleton_pattern - restrict the instantiation of a class to one object.
- https://programmers.stackexchange.com/questions/40373/so-singletons-are-bad-then-what
- http://en.wikipedia.org/wiki/Architectural_pattern_%28computer_science%29
- http://en.wikipedia.org/wiki/Common_layers_in_an_information_system_logical_architecture
MV*
- http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller
- http://c2.com/cgi/wiki?ModelViewController
- http://puremvc.org/content/view/67/178/
- https://news.ycombinator.com/item?id=6370343
"create your views, express your models or develop a controller"
- http://martinfowler.com/eaaDev/PresentationModel.html
- http://en.wikipedia.org/wiki/Model_View_ViewModel
- http://russelleast.wordpress.com/2008/08/09/overview-of-the-modelview-viewmodel-mvvm-pattern-and-data-binding/
- http://programmers.stackexchange.com/questions/114409/did-concept-of-viewmodel-exist-before-mvvm
Libraries
Module pattern
Functional
- λ Lessons - Pattern matching, first-class functions, and abstracting over recursion in Haskell. This is a short, interactive lesson that teaches core functional programming concepts. It was designed to transform the way you think about performing operations on lists of things, by showing you how functions are executed. [29]
- http://en.wikipedia.org/wiki/Functional_reactive_programming
- The introduction to Reactive Programming you've been missing [31]
- http://stackoverflow.com/questions/327955/does-functional-programming-replace-gof-design-patterns
- http://www.dev.gd/20121224-understanding-map-filter-and-fold.html
- http://loup-vaillant.fr/tutorials/from-imperative-to-functional
- http://www.harukizaemon.com/blog/2010/03/01/functional-programming-in-object-oriented-languages/
- DrupalCon Munich 2012: Functional PHP
- http://en.wikipedia.org/wiki/Applicative_programming_language
- http://en.wikipedia.org/wiki/Typed_lambda_calculus
- http://en.wikipedia.org/wiki/First-class_function
- http://technicae.cogitat.io/2012/12/the-secret-history-of-lambda.html
- https://gist.github.com/e000/1023982
- http://stevelosh.com/blog/2013/03/list-out-of-lambda/
- Functional Languages 101: What’s All the Fuss About?
- Functional Programming for the Object-Oriented Programmer
- Functional and Object-Oriented Programming
- Functional programming: A step backward
- Functional Programming is Dead, Long Live Expression-Oriented Programming
- Monads in Pictures - Aug 20th, 2012
- Google Video: Type-driven testing in Haskell - Simon Peyton Jones
Memory
- http://en.wikipedia.org/wiki/Pointer_(computer_programming)
- http://www.reddit.com/r/learnprogramming/comments/kzbn6/
- http://www.reddit.com/r/learnprogramming/comments/1ehg69/
Garbage collection
- Old New Thing: Everybody thinks about garbage collection the wrong way
Threads
- http://en.wikipedia.org/wiki/Thread_(computing)
- http://en.wikipedia.org/wiki/Critical_section
- http://en.wikipedia.org/wiki/Deadlock
Polymorphism
- https://en.wikipedia.org/wiki/Polymorphism_(computer_science) - the provision of a single interface to entities of different types
- https://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming
- https://en.wikipedia.org/wiki/Subtyping
Macros
Compilation and interpretation
- http://en.wikipedia.org/wiki/Compiler
- http://en.wikipedia.org/wiki/History_of_compiler_construction
- http://matt.might.net/articles/cps-conversion/
- http://en.wikipedia.org/wiki/Interpreted_language
- http://en.wikipedia.org/wiki/Dynamic_programming_language
- http://en.wikipedia.org/wiki/Interpreter_(computing)
- GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Java, Ada, and Go, as well as libraries for these languages (libstdc++, libgcj,...). GCC was originally written as the compiler for the GNU operating system. The GNU system was developed to be 100% free software, free in the sense that it respects the user's freedom.
- LLVM is a collection of modular and reusable compiler and toolchain technologies. Despite its name, LLVM has little to do with traditional virtual machines, though it does provide helpful libraries that can be used to build them. The name "LLVM" itself is not an acronym; it is the full name of the project.
- Emscripten is an LLVM to JavaScript compiler. It takes LLVM bitcode (which can be generated from C/C++ using Clang, or any other language that can be converted into LLVM bitcode) and compiles that into JavaScript, which can be run on the web (or anywhere else JavaScript can run).
- Parrot is a virtual machine designed to efficiently compile and execute bytecode for dynamic languages. Parrot currently hosts a variety of language implementations in various stages of completion, including Tcl, Javascript, Ruby, Lua, Scheme, PHP, Python, Perl 6, APL, and a .NET bytecode translator. Parrot is not about parrots, though we are rather fond of them for obvious reasons.
- http://en.wikipedia.org/wiki/Lexical_analysis
- http://en.wikipedia.org/wiki/Syntax_analysis#Programming_languages
- http://en.wikipedia.org/wiki/Abstract_syntax_tree
- XMLVM is to offer a flexible and extensible cross-compiler toolchain. Instead of cross-compiling on a source code level, XMLVM cross-compiles byte code instructions from Sun Microsystem's virtual machine and Microsoft's Common Language Runtime. The benefit of this approach is that byte code instructions are easier to cross-compile and the difficult parsing of a high-level programming language is left to a regular compiler. In XMLVM, byte code-based programs are represented as XML documents. This allows manipulation and translation of XMLVM-based programs using advanced XML technologies such as XSLT, XQuery, and XPath.
Metaprogramming
Monads
Aspect of functional. See Haskell, etc. for related.
Concurrency
- http://en.wikipedia.org/wiki/Concurrent_computing
- http://en.wikipedia.org/wiki/Concurrency_(computer_science)
Events
Messaging
- http://en.wikipedia.org/wiki/Messaging_pattern
- http://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern
- message queues and mailboxes are software-engineering components used for interprocess communication, or for inter-thread communication within the same process.
- ØMQ \zeromq\
- The socket library that acts as a concurrency framework.
- Faster than TCP, for clustered products and supercomputing.
<tef> but glyph is the serialization format really :-)
- MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON but it's faster and smaller. For example, small integers (like flags or error code) are encoded into a single byte, and typical short strings only require an extra byte in addition to the strings themselves.
Futures and promises
Distributed
Command-line
GUI
NLP
Debugging
DTrace
Development
Versioning
Source control
- Gource is a software version control visualization tool.
VCS
See Git
Testing
- YouTube: GTAC 2013 Keynote: Evolution from Quality Assurance to Test Engineering - Ari Shamash, Google
- Google+GTAC
- Build it, test it, release it, monitor it
- Google: single tree, development on head, parallel build and tests, cached
- https://en.wikipedia.org/wiki/Test_engineer
- http://www.softwaretestinghelp.com/what-makes-a-good-test-engineer/
- https://en.wikipedia.org/wiki/Test_strategy - an outline that describes the testing approach of the software development cycle. It is created to inform project managers, testers, and developers about some key issues of the testing process. This includes the testing objective, methods of testing new functions, total time and resources required for the project, and the testing environment.
Test strategies describe how the product risks of the stakeholders are mitigated at the test-level, which types of test are to be performed, and which entry and exit criteria apply. They are created based on development design documents. System design documents are primarily used and occasionally, conceptual design documents may be referred to. Design documents describe the functionality of the software to be enabled in the upcoming release. For every stage of development design, a corresponding test strategy should be created to test the new feature sets.
- https://en.wikipedia.org/wiki/Performance_engineering
- https://en.wikipedia.org/wiki/Software_performance_testing - testing performed to determine how a system performs in terms of responsiveness and stability under a particular workload. It can also serve to investigate, measure, validate or verify other quality attributes of the system, such as scalability, reliability and resource usage. Performance testing is a subset of performance engineering, an emerging computer science practice which strives to build performance into the implementation, design and architecture of a system.
- https://www.gov.uk/service-manual/making-software/testing-in-agile.html
- http://www.agiledata.org/essays/tdd.html
Documentation
- http://rhodesmill.org/brandon/2012/one-sentence-per-line/
- http://mislav.uniqpath.com/2014/02/hidden-documentation/ [39]
UI markup
- https://en.wikipedia.org/wiki/User_interface_markup_language
- https://en.wikipedia.org/wiki/Comparison_of_user_interface_markup_languages
UML
XUL
- XUL (/ˈzuːl/ zool), which stands for XML User Interface Language, is a user interface markup language that is developed by the Mozilla Project. XUL is implemented as an XML dialect; it allows for graphical user interfaces to be written in a similar manner to Web pages.
Audio
Graphics
3D
Compression
Network
- Beej's Guide to Network Programming - Using Internet Sockets
Data science and stats
See also Open data, Visualisation
- School of Data works to empower civil society organizations, journalists and citizens with the skills they need to use data effectively in their efforts to create more equitable and effective societies.
- http://jeroenjanssens.com/2013/09/19/seven-command-line-tools-for-data-science.html
- http://cacm.acm.org/blogs/blog-cacm/155468-what-does-big-data-mean/fulltext
- http://www.evanmiller.org/statistical-formulas-for-programmers.html
- Kaggle - Service - From Big Data to Big Analytics.
Machine learning
Gaming
- https://github.com/DaRaFF/jsgamewiki
- https://github.com/hughsk/game-modules/wiki/Modules
- http://html5gameengine.com/
For kids
- http://scratch.mit.edu/
- http://ase.tufts.edu/DevTech/ScratchJr/ScratchJrHome.asp
- http://programmingisterrible.com/post/76953953784/programming-with-building-blocks
- http://www.robomind.net/en/index.html
- http://dancali.io/blog/a-74-step-account-of-my-7-year-old-daughters-first-programming-experience [46]
- http://squeak.org/ - smalltalk
Social
Quantum
History
- https://en.wikipedia.org/wiki/PARC_(company)
- https://en.wikipedia.org/wiki/Xerox_Alto - 1973
- https://en.wikipedia.org/wiki/Xerox_Star - 1981
- https://en.wikipedia.org/wiki/Pilot_(operating_system)
- YouTube: The Final Demonstration of the Xerox 'Star' computer [47]
- "with the longest perspective perhaps of most folks on object orientated guis, has your faith in object orientated guis been shaken at all?" "not badly enough to call them guis." - 2:01:50
- http://www.omarrizwan.com/cruncher/ [50] - bret victor inspired
Cool
- Quine Relay is a Ruby program that generates Scala program that generates Scheme program that generates ...(through 50 languages)... REXX program that generates the original Ruby code again.
- http://mamememo.blogspot.ca/2010/09/qlobe.html
- http://www.digitalcraft.org/?artikel_id=292 - elegant fork bomb
- http://c2.com/cgi/wiki?PerlPoetry
- https://en.wikipedia.org/wiki/Black_Perl [51]
- http://www.perlmonks.org/?node=Perl%20Poetry
- http://www.perlmonks.org/?node_id=45213
- https://en.wikipedia.org/wiki/Just_another_Perl_hacker
- https://en.wikipedia.org/wiki/Obfuscated_code#Recreational_obfuscation
- https://en.wikipedia.org/wiki/International_Obfuscated_C_Code_Contest
- https://en.wikipedia.org/wiki/Obfuscated_Perl_Contest
- http://ruben.verborgh.org/blog/2013/02/21/programming-is-an-art/
- https://blooki.st/BlookElement/ShowTextPhoto?blookElementId=1962
Humour
- A Brief, Incomplete, and Mostly Wrong History of Programming Languages
- http://tjathurman.tumblr.com/post/64695616290/molesworth-1
- The Evolution of a Programmer
- http://www.reddit.com/r/programmerhumor
- http://www.reddit.com/r/programminghorror
- http://www.reddit.com/r/ProgrammerCringe
- http://www.reddit.com/r/shittyprogramming/
- What is your best programmer joke?
- http://stackoverflow.com/questions/184618/what-is-the-best-comment-in-source-code-you-have-ever-encountered
to sort
- The language of languages - explains grammars and common notations for grammars, such as Backus-Naur Form (BNF), Extended Backus-Naur Form (EBNF) and regular extensions to BNF.
- https://en.wikipedia.org/wiki/Big_O_notation
- Lecture 2: Asymptotic Notation, Recurrences, Substitution, Master Method
- Stackoverflow: Absolute Beginner's Guide to Bit Shifting?
- RRDtool is the OpenSource industry standard, high performance data logging and graphing system for time series data. RRDtool can be easily integrated in shell scripts, perl, python, ruby, lua or tcl applications.
- Ask HN: What's the best technical talk you've heard?
- Bret Victor - Inventing on Principle
- YouTube: Extracting Energy from the Turing Tarpit - Alan C. Kay during the ACM A.M. Turing Centenary Celebration, June, 2012.
- https://code.google.com/p/semicomplete/wiki/Grok
- YouTube: Stanford Seminar - Google's Steve Yegge on GROK
modelling;
- QEforge is a web portal offering support to researchers active in the field of computer simulation and numerical modeling of matter and materials at the atomic scale. The most popular source code management (CVS, SVN or Git ) systems, mailing lists, public forums, download space, wiki pages, and much more are provided through the Gforge engine.
- UbiGraph is a tool for visualizing dynamic graphs. The basic version is free, and talks to Python, Ruby, PHP, Java, C, C++, C#, Haskell, and OCaml.
- Hunspell is the spell checker of LibreOffice, OpenOffice.org, Mozilla Firefox 3 & Thunderbird, Google Chrome, and it is also used by proprietary software packages, like Mac OS X, InDesign, memoQ, Opera and SDL Trados.
- NuPIC - the Numenta Platform for Intelligent Computing, comprises a set of learning algorithms that were first described in a white paper published by Numenta in 2009. The learning algorithms faithfully capture how layers of neurons in the neocortex learn.
- http://techland.time.com/2013/04/02/an-interview-with-computing-pioneer-alan-kay/
- Ask HN: Alan Kay says programing is pop culture. Where can I find the classics?
- Ask HN: What unknown technical blogs or sites do you read?
- Ask HN: What are your daily must-read sites?