Coding
to further sort.
General
Basics
- How To Become A Hacker - ESR
- 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
- 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
- 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
- How do we tell truths that might hurt? - E.W. Dijkstra
- YourLanguageSucks
- StackMonthly - A monthly digest of the best questions on StackOverflow
- A Brief, Incomplete, and Mostly Wrong History of Programming Languages
- The Evolution of a Programmer
- 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.
- OSDev.org - wiki that provides information about the creation of operating systems and serves as a community for those people interested in OS creation
- Wikipedia:Backus–Naur Form notation, for context-free syntax grammar
- The Packrat Parsing and Parsing Expression Grammars Page
- 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.
- A List of Data Science and Machine Learning Resources
- Great Ideas in Theoretical Computer Science - OCW
Books
- http://en.wikibooks.org/wiki/Computer_Programming
- WikiBooks: A-level Computing/AQA/Problem Solving, Programming, Operating Systems, Databases and Networking/Programming Concepts
- http://hackershelf.com/
- http://eric.themoritzfamily.com/books-every-self-taught-computer-scientist-should-read.html
- http://nlpwp.org/book/
Blogs
Developers
- 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/
Tools
Coding techniques
see also agile, xp, etc
Development methods
Concepts
- http://en.wikipedia.org/wiki/Structured_programming
- http://en.wikipedia.org/wiki/Procedural_programming
- http://en.wikipedia.org/wiki/Imperative_programming
- http://en.wikipedia.org/wiki/Expression_(computer_science)
- http://en.wikipedia.org/wiki/Expression-oriented_programming_language
- http://en.wikipedia.org/wiki/Scope_(computer_science)
- http://en.wikipedia.org/wiki/Side_effect_(computer_science)
- http://en.wikipedia.org/wiki/Event-driven_programming
- http://en.wikipedia.org/wiki/Event_(computing)
- WikiWikiWeb, aka Portland Pattern Repository's Wiki, aka Ward's Wiki
- http://c2.com/cgi/wiki?ExtremeProgrammingRoadmap
Patterns
- http://en.wikipedia.org/wiki/Architectural_pattern_%28computer_science%29
- http://en.wikipedia.org/wiki/Common_layers_in_an_information_system_logical_architecture
Data types and structures
- http://en.wikipedia.org/wiki/Strong_and_weak_typing
- http://en.wikipedia.org/wiki/Strong_typing
- http://en.wikipedia.org/wiki/Weak_typing
- http://en.wikipedia.org/wiki/Primitive_data_type
- http://en.wikipedia.org/wiki/Composite_data_type
- http://en.wikipedia.org/wiki/Abstract_data_type
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.
Mutability
Algorithms
- http://www.algosort.com/
- https://en.wikipedia.org/wiki/List_of_algorithms
- http://www.jjj.de/fxt/fxtpage.html#fxtbook [1]
- 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/
OOP
- http://en.wikipedia.org/wiki/Object_(computer_science)
- http://en.wikipedia.org/wiki/Object-oriented_programming
- http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)
- 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/Member_variable
- http://en.wikipedia.org/wiki/Factory_method_pattern
- http://en.wikipedia.org/wiki/Object_lifetime
- https://plus.google.com/101960720994009339267/posts/hoJdanihKwb - rob pike on oo
- 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/
Functional
- http://en.wikipedia.org/wiki/Functional_programming
- http://en.wikipedia.org/wiki/Functional_reactive_programming
- 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/
- DrupalCon Munich 2012: Functional PHP
- Functional Languages 101: What’s All the Fuss About?
- Functional Programming for the Object-Oriented Programmer
- Functional and Object-Oriented Programming
- Monads in Pictures - Aug 20th, 2012
- Google Video: Type-driven testing in Haskell - Simon Peyton Jones
Macros
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/
"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
Event driven
Garbage collection
Cleaning up saved things that are created and only needed at the time of a particular process, i think. Managed in some languages, seen as possibly bad by some.
Metaprogramming
Monads
see haskell for other stuff
Messaging
- 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.
VMs
- 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.
Command-line
GUI
Languages
Fortran
Lisp
1959
- http://lisperator.net/blog/why-lisp/
- http://ghostopera.org/blog/2012/06/24/the-newbie-guide-to-common-lisp/
- http://www.quicklisp.org/
- http://ergoemacs.org/emacs/elisp.html
- http://nic.ferrier.me.uk/blog/2012_07/tips-and-tricks-for-emacslisp
- http://picolisp.com/5000/!wiki?Home
- http://blog.thezerobit.com/2012/09/01/beautiful-quicksort-in-common-lisp.html
http://xuanji.appspot.com/isicp/1-1-elements.html
- http://programmers.stackexchange.com/questions/55284/is-lisp-still-useful-in-todays-world-which-version-is-most-used/188048#188048
- http://funcall.blogspot.sg/2009/03/not-lisp-again.html
APL
1964
wut
- Conway's Game Of Life in APL
- http://www.computerhistory.org/atchm/the-apl-progamming-language-source-code/
Pascal
1970
Smalltalk
1972
http://en.wikipedia.org/wiki/Smalltalk
C / C++
1972 / 1979
- http://c.learncodethehardway.org/
- The Development of the C Language*
- http://scienceblogs.com/goodmath/2006/11/the_c_is_efficient_language_fa.php
- http://damienkatz.net/2013/01/the_unreasonable_effectiveness_of_c.html
- http://oncoding.posterous.com/the-c-programming-language-part-0
- http://denniskubes.com/2013/04/23/how-to-think-about-variables-in-c/
- http://blog.codygriffin.com/2012/09/a-case-for-tuples.html
- http://www.linuxforu.com/2012/06/gnu-make-in-detail-for-beginners/
- http://www.advancedlinuxprogramming.com/
- http://lwn.net/Articles/518329/
- http://www.lemis.com/grog/diary-oct2012.php?topics=c#D-20121012-233520
- https://gist.github.com/1091803
- http://www.a1k0n.net/2011/07/20/donut-math.html
- http://preshing.com/20121019/this-is-why-they-call-it-a-weakly-ordered-cpu
- http://zserge.com/blog/cucu-part1.html
- http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html
- https://blogs.oracle.com/ksplice/entry/hello_from_a_libc_free
ML / Standard ML
1973 / 1990 / 1997
Scheme
1975
Ada
1980
Objective-C
1983
- Objective-C is a general-purpose, high-level, object-oriented programming language that adds Smalltalk-style messaging to the C programming language. It is the main programming language used by Apple for the OS X and iOS operating systems and their respective APIs, Cocoa and Cocoa Touch. Originally developed in the early 1980s, it was selected as the main language used by NeXT for its NeXTSTEP operating system, from which OS X and iOS are derived.[1] Generic Objective-C programs that do not use the Cocoa or Cocoa Touch libraries can also be compiled for any system supported by GCC or Clang.
Caml / OCaml
1985 / 1996
Perl
1987
TCL
1988
Haskell
1990
- Haskell is an advanced purely-functional programming language. An open-source product of more than twenty years of cutting-edge research, it allows rapid development of robust, concise, correct software. With strong support for integration with other languages, built-in concurrency and parallelism, debuggers, profilers, rich libraries and an active community, Haskell makes it easier to produce flexible, maintainable, high-quality software.
- GHC is a state-of-the-art, open source, compiler and interactive environment for the functional language Haskell. Highlights:
- Thinking Functionally with Haskell - 3rd Aug, 2012
Packages
A package is a library of Haskell modules known to the compiler. GHC comes with several packages: see the accompanying library documentation. More packages to install can be obtained from HackageDB.
Using a package couldn't be simpler: if you're using ––make or GHCi, then most of the installed packages will be automatically available to your program without any further options. The exceptions to this rule are covered below in Section 4.9.1, “Using Packages ”.
Building your own packages is also quite straightforward: we provide the Cabal infrastructure which automates the process of configuring, building, installing and distributing a package. All you need to do is write a simple configuration file, put a few files in the right places, and you have a package. See the Cabal documentation for details, and also the Cabal libraries (Distribution.Simple, for example).
- Cabal (Common Architecture for Building Applications and Libraries) is a system for building and packaging Haskell libraries and programs. It defines a common interface for package authors and distributors to easily build their applications in a portable way. Cabal is part of a larger infrastructure for distributing, organizing, and cataloging Haskell libraries and programs. Specifically, the Cabal describes what a Haskell package is, how these packages interact with the language, and what Haskell implementations must to do to support packages. The Cabal also specifies some infrastructure (code) that makes it easy for tool authors to build and distribute conforming packages.
- HackageDB (or just Hackage) is a collection of releases of Haskell packages. Each package is in the Cabal format, a standard way of packaging Haskell source code that makes it easy to build and install. These pages are a basic web interface to the Hackage package database.
- cabal-install package provides the cabal command-line tool which simplifies the process of managing Haskell software by automating the fetching, configuration, compilation and installation of Haskell libraries and programs. Those packages must be prepared using Cabal and should be present at Hackage.
- Gtk2Hs - A GUI Library for Haskell based on Gtk
Arch
- Arch Wiki: Haskell Package Guidelines
- News about Haskell on Arch Linux
- https://github.com/archhaskell/habs - AUR is out of date for haskell packages
pacman -Rncs ghc remove all haskell..
Web
- Yesod is a Haskell web framework for productive development of type-safe, RESTful, high performance web applications.
- Snap is a simple web development framework for unix systems, written in the Haskell programming language. Snap has a high level of test coverage and is well-documented. Features include: a fast HTTP server library, a sensible and clean monad for web programming, an HTML-based templating system for generating pages
JS
- Fay - A proper subset of Haskell that compiles to JavaScript. Fay is a small programming language which has the following properties: A proper syntactic and semantic subset of Haskell, Statically typed, Lazy, Pure by default, Compiles to JavaScript, Has fundamental data types (Double, String, etc.) based upon what JS can support, Outputs minifier-aware code for small compressed size, Has a trivial foreign function interface to JavaScript
Erlang
1990
Lua
1993
- Lua is a powerful, fast, lightweight, embeddable scripting language. Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. Lua is dynamically typed, runs by interpreting bytecode for a register-based virtual machine, and has automatic memory management with incremental garbage collection, making it ideal for configuration, scripting, and rapid prototyping.
- Awesome: The briefest introduction to Lua
- Lua Tutorial - lua-users wiki
- Programming in Lua This book is a detailed and authoritative introduction to all aspects of Lua programming, by Lua's chief architect. Programming in Lua gives a solid base for any programmer who wants to use Lua. It covers all aspects of Lua—from the basics to its API with C—explaining how to make good use of its features and giving numerous code examples. The book is targeted at people with some programming background, but it does not assume any prior knowledge about Lua or other scripting languages.
- Lua Unofficial FAQ (uFAQ)
- http://stackoverflow.com/questions/10891957/difference-between-tables-and-metatables-in-lua
- http://notebook.kulchenko.com/programming/lua-good-different-bad-and-ugly-parts
- Learning Lua/From JS - Know JavaScript, and want to learn Lua? Here's are some quick facts about the similarities and differences.
- http://stackoverflow.com/questions/1022560/subtle-differences-between-javascript-and-lua
- http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=lua&lang2=v8
- http://www.mediawiki.org/wiki/User:Sumanah/Lua_vs_Javascript
- http://code.google.com/p/lua-checker/
- LuaJIT — a Just-In-Time Compiler for Lua.
- Metalua is a language and a compiler which provide a complete macro system, similar in power to what's offfered by Lisp dialects or Template Haskell; manipulated programs can be seen as source code, as abstract syntax trees, or as an arbitrary mix thereof, whichever suits your task better.
os.time(); os.getenv() i.e. os.getenv( "HOME" ); ?? to confirm, hardcoded as no time atm.
- http://olivinelabs.com/busted/ - testing
- http://luvit.io/ - non-blocking node.js
R
1993
Good for stats.
Brainfuck
1993
Racket
1994
Java
1995
- https://github.com/OmerShapira/Syntactic
- http://badassjs.com/post/32812527381/doppio-a-java-virtual-machine-compiler-and
Java syntax seems unwieldy.
Apache Tomcat
Jetty
Processing
2001
- http://natureofcode.com/ - processing book
Scala
2003
F#
2005
- http://msdn.microsoft.com/en-us/vstudio/hh388569.aspx
- http://www.tryfsharp.org/
- A Gray Beard Explores F#
- http://colinbul.wordpress.com/2013/02/23/f-end-to-end/
Clojure
2007
Arc
2008
Lisp dialect by PG etc.
Go
2009
Rust
2010
- http://www.rust-lang.org/ - from mozilla
- http://winningraceconditions.blogspot.co.uk/2012/09/rust-0-index-and-conclusion.html
- http://lucumr.pocoo.org/2012/10/18/such-a-little-thing/
Dart
2011
Elm
2011
Julia
2012
Typescript
2012
From Microsoft, compiles to JS.
GNU
Serialisation / Markup
- http://en.wikipedia.org/wiki/Comparison_of_data_serialization_formats
- http://www.drdobbs.com/web-development/after-xml-json-then-what/240151851
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.
Network
- Beej's Guide to Network Programming - Using Internet Sockets
DTrace
Stats and big data
- Kaggle - Service - From Big Data to Big Analytics.
Documentation
to sort
modelling;
- 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.
For kids
- http://squeak.org/ - smalltalk
Social
Aesthetics
perl