Programming Resources

Applied to Implicitly Typed C by duck_master ago

Programming knowledge is not mandatory for LessWrong but computer science and programming is a popular topic among LessWrong members and it is also instrumentally useful to understand how computers work and how to program them. This post contains a collection of Programming Resources

The ubiquity of computers in everyday life in the 21st century justifies the centrality of programming languages to computer science education. Programming languages is the area that connects the theoretical foundations of computer science, the source of problem-solving algorithms, to modern computer architectures on which the corresponding programs produce solutions.  Given the speed with which computing technology advances in this post-Internet era, a computing textbook must present a structure for organizing information about a subject, not just the facts of the subject itself.  In this book, Michael Scott broadly and comprehensively presents the key concepts of programming languages and their implementation, in a manner appropriate for computer science majors.

Ruby30

Formatting could probably be made nicer, but there's a lot and I don't know this is super used currently.

Created by Viliam_Bur at

This easy-to-use, fast-moving tutorial introduces you to functional programming with Haskell. You'll learn how to use Haskell in a variety of practical ways, from short scripts to large and demanding applications. Real World Haskell takes you through the basics of functional programming at a brisk pace, and then helps you increase your understanding of Haskell in real-world issues like I/O, performance, dealing with data, concurrency, and more as you move through each chapter.

Software developers and computer scientists have eagerly awaited this comprehensive revision of Robert Sedgewick’s landmark texts on algorithms. Sedgewick has completely revamped all five sections, illuminating today’s best algorithms for an exceptionally wide range of tasks. This shrink-wrapped package brings together Algorithms in C, Third Edition, Parts 1-4 and his new Algorithms in C, Third Edition, Part 5. Together, these books are definitive: the most up-to-date and practical algorithms resource available. Sedgewick masterfully blends theory and practice, making Bundle of Algorithms in C, Third Edition an essential resource for computer science researchers, students, and working developers alike. The first book introduces fundamental concepts associated with algorithms; then covers data structures, sorting, and searching. The second book focuses entirely on graphing algorithms, which are critical for a wide range of applications, including network connectivity, circuit design, scheduling, transaction processing, and resource allocation. Together, these books present nearly 2,000 new exercises, hundreds of new figures, and dozens of new programs. In both books, Sedgewick focuses on practical applications, giving readers all the information, diagrams, and real (not pseudo-) code they need to confidently implement, debug, and use the algorithms he presents.

Novice: Getting Started

EASY

This section is meant for people with little to no background in mathematics, programming and computer science.

In this course you will learn key concepts in computer science and learn how to write your own computer programs in the context of building a web crawler.

There is no prior programming knowledge needed for this course. Beginners welcome!

At the end of this course you will have a rock solid foundation for programming in Python and built a working web crawler. This course will prepare you to take many of Udacity's more advanced courses.

“Invent Your Own Computer Games with Python” is a free book (as in, open source) and a free eBook (as in, no cost to download) that teaches you how to program in the Python programming language. Each chapter gives you the complete source code for a new game, and then teaches the programming concepts from the example.

“Invent with Python” was written to be understandable by kids as young as 10 to 12 years old, although it is great for anyone of any age who has never programmed before.

The book intends to show a layman the basic mechanical principles of how computers work, instead of merely summarizing how the different parts relate. He starts with basic principles of language and logic and then demonstrates how they can be embodied by electrical circuits, and these principles give him an opening to describe in principle how computers work mechanically without requiring very much technical knowledge. Although it is not possible in a medium sized book for layman to describe the entire technical summary of a computer, he describes how and why it is possible that elaborate electronics can act in the ways computers do. In the introduction, he contrasts his own work with those books which "include pictures of trains full of 1s and 0s."

The new standard for computer architects, designers, and industry management. This book offers a new approach to understanding computer architecture, emphasizing the quantitative aspects of design and practical trade-offs that must be made. Readers will learn the principles and engineering fundamentals that allow designers to make the right design choices.

This work is not about computer programming in the narrow sense, but about the algorithms and methods which lie at the heart of most computer systems. At the end of 1999, these books were named among the best twelve physical-science monographs of the century by American Scientist, along with: Dirac on quantum mechanics, Einstein on relativity, Mandelbrot on fractals, Pauling on the chemical bond, Russell and Whitehead on foundations of mathematics, von Neumann and Morgenstern on game theory, Wiener on cybernetics, Woodward and Hoffmann on orbital symmetry, Feynman on quantum electrodynamics, Smith on the search for structure, and Einstein's collected papers.

Michael Sipser's emphasis on unifying computer science theory - rather than offering a collection of low-level details - sets the book apart, as do his intuitive explanations. Throughout the book, Sipser builds students' knowledge of conceptual tools used in computer science, the aesthetic sense they need to create elegant systems, and the ability to think through problems on their own.

This work is not about computer programming in the narrow sense, but about the algorithms and methods which lie at the heart of most computer systems. At the end of 1999, these books were named among the best twelve physical-science monographs of the century by American Scientist, along with: Dirac on quantum mechanics, Einstein on relativity, Mandelbrot on fractals, Pauling on the chemical bond, Russell and Whitehead on foundations of mathematics, von Neumann and Morgenstern on game theory, Wiener on cybernetics, Woodward and Hoffmann on orbital symmetry, Feynman on quantum electrodynamics, Smith on the search for structure, and Einstein's collected papers.

1.

2.

3.

4.

5.

1.

2.

3.

4.

5.

1.

2.

3.

4.

5.

6.

1.

2.

3.

1.

2.

3.

4.

5.

  • Khan Academy Introduction to programming and computer science (using Python) EASY

    1.

2.

3.

4.

5.

6.

7.

8.

9.

1.

2.

5.

6.

7.

1.

2.

3.

4.

5.

6.

1.

2.

1.

4.

5.

6.

7.

8.

1.

2.

3.

4.

1.

2.

3.

8. CMU OLI: "Probability & Statistics"; introduction to statistics, heavy on problems & exercises; R is one of the supported languages but is not a focus of the course - one is probably best off first taking even a brief introduction to R syntax & functions like Code School's "Try R".

1. Algorithmic Adventures

There is a considerable, satisfying and underappreciated depth in the science of computing, it offers so much more than simply a driving licence for using a computer. The author of this book is a top researcher working on the fundamentals of informatics, and he has considerable experience teaching complex subjects in a simple manner. In this book he invites the reader to explore the science of computing, convinced that a good explanation of even the most basic techniques can demonstrate the power and magic of the underlying principles. The author starts with the development of computer science, algorithms and programming, and then explains and shows how to exploit the concepts of infinity, computability, computational complexity, nondeterminism and randomness. Finally, he offers some insight into emerging computing paradigms such as biological computing and quantum computing. This book is a fascinating read for students of all levels, and for those curious to learn about the science and magic of algorithmics and its role in other scientific disciplines.

2. UdacityEASY

Udacity is a private educational organization founded by Sebastian Thrun, David Stavens, and Mike Sokolsky, with the stated goal of democratizing education It is the outgrowth of free computer science classes offered in 2011 through Stanford University. As of May 2012 Udacity has six active courses. The first two courses ever launched on Udacity both started on 20th February, 2012, entitled "CS 101: Building a Search Engine", taught by Dave Evans, from the University of Virginia, and "CS 373: Programming a Robotic Car" taught by Thrun. Both courses use Python.

3. The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine

2.4. New Turing Omnibus (New Turning Omnibus : 66 Excursions in Computer Science)

3. UdacityEASY

Udacity is a private educational organization founded by Sebastian Thrun, David Stavens, and Mike Sokolsky, with the stated goal of democratizing education It is the outgrowth of free computer science classes offered in 2011 through Stanford University. As of May 2012 Udacity has six active courses. The first two courses ever launched on Udacity both started on 20th February, 2012, entitled "CS 101: Building a Search Engine", taught by Dave Evans, from the University of Virginia, and "CS 373: Programming a Robotic Car" taught by Thrun. Both courses use Python.

4.5. Introduction to Artificial Intelligence

5.6. Computability and Logic

Resources that can be understood with little or no knowledge of computer science and programming are marked EASY.

1. CODE The Hidden Language of Computer Hardware and SoftwareEASY

3. UdacityEASY

Khan Academy Introduction to programming and computer science (using Python)EASY

1. Invent Your Own Computer Games with PythonEASY

1. C++ Programming in Easy StepsEASY

3. [hhttp://www.plantation-productions.com/Webster/www.writegreatcode.com/index.html The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)]

Try and learn R:

R is a tool for statistics and data modeling. The R programming language is elegant, versatile, and has a highly expressive syntax designed around working with data. R is more than that, though — it also includes extremely powerful graphics capabilities. If you want to easily manipulate your data and present it in compelling ways, R is the tool for you.

Ever wished there was an easier way to learn C from a book? Head First C is a complete learning experience that will show you how to create programs in the C language. This book helps you learn the C language with a unique method that goes beyond syntax and how-to manuals and helps you understand how to be a great programmer. You'll learn key areas such as language basics, pointers and pointer arithmetic, and dynamic memory management, and with advanced topics such as multi-threading and network programming, Head First C can be used as an accessible text book for a college-level course.

Learn the C programming language from one of the best. Stephen Kochan's Programming in C is thorough with easy-to-follow instructions that are sure to benefit beginning programmers. This book provides readers with practical examples of how the C programming language can be used with small, fast programs, similar to the programming used by large game developers such as Nintendo. If you want a one-stop-source for C programming, this book is it.The book is appropriate for all introductory-to-intermediate courses on programming in the C language, including courses covering C programming for games and small-device platforms.

Professor King's spiral approach made it accessible to a broad range of readers, from beginners to more advanced students. With adoptions at over 225 colleges, the first edition was one of the leading C textbooks of the last ten years. The second edition maintains all the book's popular features and brings it up to date with coverage of the C99 standard. The new edition also adds a significant number of exercises and longer programming projects, and includes extensive revisions and updates.

The new classic! C Primer Plus, now in its 5th edition, has been revised to include over 20 new programming exercises, newly improved examples and the new ANSI/ISO standard, C99. Task-oriented examples will teach you the fundamentals of C programming. From extended integer types and compound literals to Boolean support and variable-length arrays, you will learn to create practical and real-world applications with C programming. Review questions and programming exercises at the end of each chapter will reinforce what you have learned. This friendly and easy-to-use self-study guide will help you understand the fundamentals of this core programming language.

C++ Programming in Easy Steps makes no assumption you have previous knowledge of any programming language so it's ideal for the newcomer to computer programming. It has an easy-to-follow style that will appeal to programmers moving from another programming language, and to the student who is studying C++ programming at school or college, and to those seeking a career in computing who need a fundamental understanding of object oriented programming.

Want to learn how to program in C++ immediately? Want to start writing better, more powerful C++ programs today? Accelerated C++'s uniquely modern approach will help you learn faster and more fluently than you ever believed possible. Based on the authors' intensive summer C++ courses at Stanford University, Accelerated C++ covers virtually every concept that most professional C++ programmers will ever use -- but it turns the "traditional" C++ curriculum upside down, starting with the high-level C++ data structures and algorithms that let you write robust programs immediately. Once you're getting results, Accelerated C++ takes you "under the hood," introducing complex language features such as memory management in context, and explaining exactly how and when to use them. From start to finish, the book concentrates on solving problems, rather than learning language and library features for their own sake. The result: You'll be writing real-world programs in no time -- and outstanding code faster than you ever imagined.

Written by Bjarne Stroustrup, the creator of C++, this is the world's most trusted and widely read book on C++.

7. A Primer on Scientific Programming with Python

The book serves as a first introduction to computer programming of scientific applications, using the high-level Python language. The exposition is example- and problem-oriented, where the applications are taken from mathematics, numerical calculus, statistics, physics, biology, and finance. The book teaches "Matlab-style" and procedural programming as well as object-oriented programming. High school mathematics is a required background, and it is advantageous to study classical and numerical one-variable calculus in parallel with reading this book. Besides learning how to program computers, the reader will also learn how to solve mathematical problems, arising in various branches of science and engineering, with the aid of numerical methods and programming. By blending programming, mathematics and scientific applications, the book lays a solid foundation for practicing computational science.

8. Python Scripting for Computational Science

The goal of this book is to teach computational scientists how to develop tailored, flexible, and human-efficient working environments built from small programs written in the easy-to-learn, high-level language Python.

The focus is on examples and applications of relevance to computational scientists.

9. How to Write a Spelling Corrector

The full details of an industrial-strength spell corrector are quite complex. What I wanted to do here is to develop, in less than a page of code, a toy spelling corrector that achieves 80 or 90% accuracy at a processing speed of at least 10 words per second.

These are Maxwell’s equations. Just four compact equations. With a little work it’s easy to understand the basic elements of the equations – what all the symbols mean, how we can compute all the relevant quantities, and so on. But while it’s easy to understand the elements of the equations, understanding all their consequences is another matter. Inside these equations is all of electromagnetism – everything from antennas to motors to circuits. If you think you understand the consequences of these four equations, then you may leave the room now, and you can come back and ace the exam at the end of semester.semester

[...]

I won’t stop with just showing you how to write some Lisp. Once we’ve done that we’re going to write an interpreter for Lisp code. In particular, we’ll create a interpreter based on a beautiful Lisp interpreter written by Peter Norvig, which contains just 90 lines of Python code. Our interpreter will be a little more complex, due mostly to the addition of a few conveniences absent from Norvig’s interpreter. The code is still simple and easy to understand, provided you’re comfortable reading Python code. As we’ll see, the benefit of writing the interpreter is not just that it gives us a running interpreter (although that’s no small thing). It’s that writing an interpreter also deepens our understanding of Lisp. It does that by taking what would otherwise be some rather abstract concepts in our description of Lisp, and giving them concrete, tangible representations in terms of Python code and data structures. By making concrete what was formerly abstract, the code for our Lisp interpreter gives us a new way of understanding how Lisp works.

One of the fundamental premises on LessWrong is that a universal computing device can simulate every physical process and that we therefore should be able to artificial general intelligence and reverse engineer the human brain as it is fundamentally computable. That is, intelligence and consciousness are substrate-neutral.