https://wiki.lesswrong.com/api.php?action=feedcontributions&user=XiXiDu&feedformat=atomLesswrongwiki - User contributions [en]2022-12-05T21:08:08ZUser contributionsMediaWiki 1.31.12https://wiki.lesswrong.com/index.php?title=Interview_series_on_risks_from_AI&diff=13192Interview series on risks from AI2013-07-16T07:38:32Z<p>XiXiDu: Added an interview with Sir William Timothy Gowers.</p>
<hr />
<div>In 2011, [http://kruel.co Alexander Kruel] (XiXiDu) started a Q&A style interview series asking various people about their perception of artificial intelligence and possible risks associated with it.<br />
<br />
==Interviews==<br />
<br />
A list of all interviews:<br />
<br />
* [http://lesswrong.com/r/discussion/lw/999/qa_with_experts_on_risks_from_ai_1/ Dr. Brandon Rohrer, Professor Tim Finin and Dr. Pat Hayes]<br />
* [http://lesswrong.com/r/discussion/lw/9a1/qa_with_experts_on_risks_from_ai_2/ Professor Nils John Nilsson, Professor Peter J. Bentley, Professor David Alan Plaisted and Dr. Hector Levesque]<br />
* [http://lesswrong.com/r/discussion/lw/9cm/qa_with_experts_on_risks_from_ai_3/ Professor Paul Cohen, Professor Alan Bundy, Dr. Pei Wang, Dr. J. Storrs Hall and Dr. William Uther]<br />
* [http://lesswrong.com/r/discussion/lw/9hq/qa_with_experts_on_risks_from_ai_4/ Professor Michael G. Dyer, Dr. John Tromp, Dr. Kevin Korb, Dr. Leo Pape, Professor Peter Gacs, Professor Donald Loveland, Eray Ozkural, Dr. Laurent Orseau, Richard Loosemore and Monica Anderson]<br />
* [http://kruel.co/2012/08/15/qa-with-experts-on-risks-from-ai-5/ Professor John E. Laird and Dr. Kristinn R. Thorisson]<br />
* [http://kruel.co/2012/12/17/qa-with-experts-on-risks-from-ai-6/ Dr. Randal A. Koene and Alexey Potapov of AIDEUS]<br />
* [http://kruel.co/2012/11/04/qa-with-larry-wasserman-on-risks-from-ai/ Professor Larry Wasserman]<br />
* [http://kruel.co/2012/12/19/qa-with-mark-changizi-on-risks-from-ai/ Dr. Mark Changizi]<br />
* [http://lesswrong.com/r/discussion/lw/8wz/qa_with_michael_littman_on_risks_from_ai Professor Michael Littman]<br />
* [http://lesswrong.com/r/discussion/lw/691/shane_legg_on_risks_from_ai Dr. Shane Legg]<br />
* [http://lesswrong.com/r/discussion/lw/682/j%C3%BCrgen_schmidhuber_on_risks_from_ai Professor Jürgen Schmidhuber]<br />
* [http://lesswrong.com/r/discussion/lw/65v/stan_franklin_on_risks_from_ai Professor Stan Franklin]<br />
* [http://kruel.co/2013/07/08/qa-with-matt-mahoney-on-risks-from-ai/ Dr. Matt Mahoney]<br />
* [http://kruel.co/2013/07/16/qa-with-timothy-gowers-on-risks-from-ai/ Sir William Timothy Gowers]<br />
* [http://lesswrong.com/lw/9fz/qa_with_abram_demski_on_risks_from_ai/ Abram Demski]<br />
* [http://lesswrong.com/r/discussion/lw/8tt/qa_with_richard_carrier_on_risks_from_ai/ Dr. Richard Carrier]<br />
<br />
==Questions==<br />
<br />
The current set of questions:<br />
<br />
* Assuming beneficial political and economic development and that no global catastrophe halts progress, by what year would you assign a 10%/50%/90% chance of the development of artificial intelligence that is roughly as good as humans (or better, perhaps unevenly) at science, mathematics, engineering and programming?<br />
* Once we build AI that is roughly as good as humans (or better, perhaps unevenly) at science, mathematics, engineering and programming, how much more difficult will it be for humans and/or AIs to build an AI which is substantially better at those activities than humans?<br />
* Do you ever expect artificial intelligence to overwhelmingly outperform humans at typical academic research, in the way that they may soon overwhelmingly outperform humans at trivia contests, or do you expect that humans will always play an important role in scientific progress?<br />
* What probability do you assign to the possibility of an AI with initially roughly professional human-level competence (or better, perhaps unevenly) at general reasoning (including science, mathematics, engineering and programming) to self-modify its way up to vastly superhuman capabilities within a matter of hours/days/< 5 years?<br />
* How important is it to research risks associated with artificial intelligence that is good enough at general reasoning (including science, mathematics, engineering and programming) to be capable of radical self-modification, before attempting to build one?<br />
* What probability do you assign to the possibility of human extinction within 100 years as a result of AI capable of self-modification (that is not provably non-dangerous, if that is even possible)? P(human extinction by AI | AI capable of self-modification and not provably non-dangerous is created)<br />
<br />
==Mail Template==<br />
<br />
The exact wording of the email:<br />
<br />
: Subject: Questions regarding possible risks from artificial intelligence<br />
<br />
: Dear Professor/Dr NAME,<br />
<br />
: I am currently trying to learn more about the academic perception of artificial general intelligence and possible risks associated with it. Consequently I am curious about your opinion as a noted expert.<br />
<br />
: I would like to ask you a few questions and your permission to publish your possible answers in order to estimate the academic awareness and perception of risks from AI. I am not a journalist and do not represent any publication, nor do I maintain a formal academic relationship. I am conducting an informal interview for a community blog: lesswrong.com<br />
<br />
: Please let me know if you have any questions or if you are interested in third-party material that does expand on various aspects of my questions.<br />
<br />
: Here is a list of people that I had a chance to interview so far: NAMES<br />
<br />
: QUESTIONS<br />
<br />
: Yours sincerely,<br />
<br />
: NAME<br />
: ADDRESS<br />
<br />
==See also==<br />
<br />
* [[Muehlhauser interview series on AGI]]<br />
* [http://intelligence.org/2013/05/15/when-will-ai-be-created/ When Will AI Be Created?]<br />
* [http://lesswrong.com/lw/e36/ai_timeline_predictions_are_we_getting_better/ AI timeline predictions: are we getting better?]<br />
* [http://fora.tv/v/c16838 Stuart Armstrong: How We’re Predicting AI], The Singularity Summit 2012<br />
* [http://sethbaum.com/ac/2011_AI-Experts.html Experts on artificial general intelligence provide estimates for the future of AGI.], Baum, Seth D., Ben Goertzel, and Ted G. Goertzel, 2011.<br />
* [http://www.fhi.ox.ac.uk/news/2011/?a=21516 Machine Intelligence Survey], Sandberg, A. and Bostrom, N. (2011). Future of Humanity Institute, Oxford University.</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Interview_series_on_risks_from_AI&diff=13157Interview series on risks from AI2013-07-08T12:13:42Z<p>XiXiDu: Added an interview with Dr. Matt Mahoney.</p>
<hr />
<div>In 2011, [http://kruel.co Alexander Kruel] (XiXiDu) started a Q&A style interview series asking various people about their perception of artificial intelligence and possible risks associated with it.<br />
<br />
==Interviews==<br />
<br />
A list of all interviews:<br />
<br />
* [http://lesswrong.com/r/discussion/lw/999/qa_with_experts_on_risks_from_ai_1/ Dr. Brandon Rohrer, Professor Tim Finin and Dr. Pat Hayes]<br />
* [http://lesswrong.com/r/discussion/lw/9a1/qa_with_experts_on_risks_from_ai_2/ Professor Nils John Nilsson, Professor Peter J. Bentley, Professor David Alan Plaisted and Dr. Hector Levesque]<br />
* [http://lesswrong.com/r/discussion/lw/9cm/qa_with_experts_on_risks_from_ai_3/ Professor Paul Cohen, Professor Alan Bundy, Dr. Pei Wang, Dr. J. Storrs Hall and Dr. William Uther]<br />
* [http://lesswrong.com/r/discussion/lw/9hq/qa_with_experts_on_risks_from_ai_4/ Professor Michael G. Dyer, Dr. John Tromp, Dr. Kevin Korb, Dr. Leo Pape, Professor Peter Gacs, Professor Donald Loveland, Eray Ozkural, Dr. Laurent Orseau, Richard Loosemore and Monica Anderson]<br />
* [http://kruel.co/2012/08/15/qa-with-experts-on-risks-from-ai-5/ Professor John E. Laird and Dr. Kristinn R. Thorisson]<br />
* [http://kruel.co/2012/12/17/qa-with-experts-on-risks-from-ai-6/ Dr. Randal A. Koene and Alexey Potapov of AIDEUS]<br />
* [http://kruel.co/2012/11/04/qa-with-larry-wasserman-on-risks-from-ai/ Professor Larry Wasserman]<br />
* [http://kruel.co/2012/12/19/qa-with-mark-changizi-on-risks-from-ai/ Dr. Mark Changizi]<br />
* [http://lesswrong.com/r/discussion/lw/8wz/qa_with_michael_littman_on_risks_from_ai Professor Michael Littman]<br />
* [http://lesswrong.com/r/discussion/lw/691/shane_legg_on_risks_from_ai Dr. Shane Legg]<br />
* [http://lesswrong.com/r/discussion/lw/682/j%C3%BCrgen_schmidhuber_on_risks_from_ai Professor Jürgen Schmidhuber]<br />
* [http://lesswrong.com/r/discussion/lw/65v/stan_franklin_on_risks_from_ai Professor Stan Franklin]<br />
* [http://kruel.co/2013/07/08/qa-with-matt-mahoney-on-risks-from-ai/ Dr. Matt Mahoney]<br />
* [http://lesswrong.com/lw/9fz/qa_with_abram_demski_on_risks_from_ai/ Abram Demski]<br />
* [http://lesswrong.com/r/discussion/lw/8tt/qa_with_richard_carrier_on_risks_from_ai/ Dr. Richard Carrier]<br />
<br />
==Questions==<br />
<br />
The current set of questions:<br />
<br />
* Assuming beneficial political and economic development and that no global catastrophe halts progress, by what year would you assign a 10%/50%/90% chance of the development of artificial intelligence that is roughly as good as humans (or better, perhaps unevenly) at science, mathematics, engineering and programming?<br />
* Once we build AI that is roughly as good as humans (or better, perhaps unevenly) at science, mathematics, engineering and programming, how much more difficult will it be for humans and/or AIs to build an AI which is substantially better at those activities than humans?<br />
* Do you ever expect artificial intelligence to overwhelmingly outperform humans at typical academic research, in the way that they may soon overwhelmingly outperform humans at trivia contests, or do you expect that humans will always play an important role in scientific progress?<br />
* What probability do you assign to the possibility of an AI with initially roughly professional human-level competence (or better, perhaps unevenly) at general reasoning (including science, mathematics, engineering and programming) to self-modify its way up to vastly superhuman capabilities within a matter of hours/days/< 5 years?<br />
* How important is it to research risks associated with artificial intelligence that is good enough at general reasoning (including science, mathematics, engineering and programming) to be capable of radical self-modification, before attempting to build one?<br />
* What probability do you assign to the possibility of human extinction within 100 years as a result of AI capable of self-modification (that is not provably non-dangerous, if that is even possible)? P(human extinction by AI | AI capable of self-modification and not provably non-dangerous is created)<br />
<br />
==Mail Template==<br />
<br />
The exact wording of the email:<br />
<br />
: Subject: Questions regarding possible risks from artificial intelligence<br />
<br />
: Dear Professor/Dr NAME,<br />
<br />
: I am currently trying to learn more about the academic perception of artificial general intelligence and possible risks associated with it. Consequently I am curious about your opinion as a noted expert.<br />
<br />
: I would like to ask you a few questions and your permission to publish your possible answers in order to estimate the academic awareness and perception of risks from AI. I am not a journalist and do not represent any publication, nor do I maintain a formal academic relationship. I am conducting an informal interview for a community blog: lesswrong.com<br />
<br />
: Please let me know if you have any questions or if you are interested in third-party material that does expand on various aspects of my questions.<br />
<br />
: Here is a list of people that I had a chance to interview so far: NAMES<br />
<br />
: QUESTIONS<br />
<br />
: Yours sincerely,<br />
<br />
: NAME<br />
: ADDRESS<br />
<br />
==See also==<br />
<br />
* [[Muehlhauser interview series on AGI]]<br />
* [http://intelligence.org/2013/05/15/when-will-ai-be-created/ When Will AI Be Created?]<br />
* [http://lesswrong.com/lw/e36/ai_timeline_predictions_are_we_getting_better/ AI timeline predictions: are we getting better?]<br />
* [http://fora.tv/v/c16838 Stuart Armstrong: How We’re Predicting AI], The Singularity Summit 2012<br />
* [http://sethbaum.com/ac/2011_AI-Experts.html Experts on artificial general intelligence provide estimates for the future of AGI.], Baum, Seth D., Ben Goertzel, and Ted G. Goertzel, 2011.<br />
* [http://www.fhi.ox.ac.uk/news/2011/?a=21516 Machine Intelligence Survey], Sandberg, A. and Bostrom, N. (2011). Future of Humanity Institute, Oxford University.</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Interview_series_on_risks_from_AI&diff=12914Interview series on risks from AI2013-05-21T11:35:26Z<p>XiXiDu: Added a link to a MIRI blog post: 'When Will AI Be Created?'; Updated a broken link: 'Machine Intelligence Survey';</p>
<hr />
<div>In 2011, [http://kruel.co Alexander Kruel] (XiXiDu) started a Q&A style interview series asking various people about their perception of artificial intelligence and possible risks associated with it.<br />
<br />
==Interviews==<br />
<br />
A list of all interviews:<br />
<br />
* [http://lesswrong.com/r/discussion/lw/999/qa_with_experts_on_risks_from_ai_1/ Dr. Brandon Rohrer, Professor Tim Finin and Dr. Pat Hayes]<br />
* [http://lesswrong.com/r/discussion/lw/9a1/qa_with_experts_on_risks_from_ai_2/ Professor Nils John Nilsson, Professor Peter J. Bentley, Professor David Alan Plaisted and Dr. Hector Levesque]<br />
* [http://lesswrong.com/r/discussion/lw/9cm/qa_with_experts_on_risks_from_ai_3/ Professor Paul Cohen, Professor Alan Bundy, Dr. Pei Wang, Dr. J. Storrs Hall and Dr. William Uther]<br />
* [http://lesswrong.com/r/discussion/lw/9hq/qa_with_experts_on_risks_from_ai_4/ Professor Michael G. Dyer, Dr. John Tromp, Dr. Kevin Korb, Dr. Leo Pape, Professor Peter Gacs, Professor Donald Loveland, Eray Ozkural, Dr. Laurent Orseau, Richard Loosemore and Monica Anderson]<br />
* [http://kruel.co/2012/08/15/qa-with-experts-on-risks-from-ai-5/ Professor John E. Laird and Dr. Kristinn R. Thorisson]<br />
* [http://kruel.co/2012/12/17/qa-with-experts-on-risks-from-ai-6/ Dr. Randal A. Koene and Alexey Potapov of AIDEUS]<br />
* [http://kruel.co/2012/11/04/qa-with-larry-wasserman-on-risks-from-ai/ Professor Larry Wasserman]<br />
* [http://kruel.co/2012/12/19/qa-with-mark-changizi-on-risks-from-ai/ Dr. Mark Changizi]<br />
* [http://lesswrong.com/r/discussion/lw/8wz/qa_with_michael_littman_on_risks_from_ai Professor Michael Littman]<br />
* [http://lesswrong.com/r/discussion/lw/691/shane_legg_on_risks_from_ai Dr. Shane Legg]<br />
* [http://lesswrong.com/r/discussion/lw/682/j%C3%BCrgen_schmidhuber_on_risks_from_ai Professor Jürgen Schmidhuber]<br />
* [http://lesswrong.com/r/discussion/lw/65v/stan_franklin_on_risks_from_ai Professor Stan Franklin]<br />
* [http://lesswrong.com/lw/9fz/qa_with_abram_demski_on_risks_from_ai/ Abram Demski]<br />
* [http://lesswrong.com/r/discussion/lw/8tt/qa_with_richard_carrier_on_risks_from_ai/ Dr. Richard Carrier]<br />
<br />
==Questions==<br />
<br />
The current set of questions:<br />
<br />
* Assuming beneficial political and economic development and that no global catastrophe halts progress, by what year would you assign a 10%/50%/90% chance of the development of artificial intelligence that is roughly as good as humans (or better, perhaps unevenly) at science, mathematics, engineering and programming?<br />
* Once we build AI that is roughly as good as humans (or better, perhaps unevenly) at science, mathematics, engineering and programming, how much more difficult will it be for humans and/or AIs to build an AI which is substantially better at those activities than humans?<br />
* Do you ever expect artificial intelligence to overwhelmingly outperform humans at typical academic research, in the way that they may soon overwhelmingly outperform humans at trivia contests, or do you expect that humans will always play an important role in scientific progress?<br />
* What probability do you assign to the possibility of an AI with initially roughly professional human-level competence (or better, perhaps unevenly) at general reasoning (including science, mathematics, engineering and programming) to self-modify its way up to vastly superhuman capabilities within a matter of hours/days/< 5 years?<br />
* How important is it to research risks associated with artificial intelligence that is good enough at general reasoning (including science, mathematics, engineering and programming) to be capable of radical self-modification, before attempting to build one?<br />
* What probability do you assign to the possibility of human extinction within 100 years as a result of AI capable of self-modification (that is not provably non-dangerous, if that is even possible)? P(human extinction by AI | AI capable of self-modification and not provably non-dangerous is created)<br />
<br />
==Mail Template==<br />
<br />
The exact wording of the email:<br />
<br />
: Subject: Questions regarding possible risks from artificial intelligence<br />
<br />
: Dear Professor/Dr NAME,<br />
<br />
: I am currently trying to learn more about the academic perception of artificial general intelligence and possible risks associated with it. Consequently I am curious about your opinion as a noted expert.<br />
<br />
: I would like to ask you a few questions and your permission to publish your possible answers in order to estimate the academic awareness and perception of risks from AI. I am not a journalist and do not represent any publication, nor do I maintain a formal academic relationship. I am conducting an informal interview for a community blog: lesswrong.com<br />
<br />
: Please let me know if you have any questions or if you are interested in third-party material that does expand on various aspects of my questions.<br />
<br />
: Here is a list of people that I had a chance to interview so far: NAMES<br />
<br />
: QUESTIONS<br />
<br />
: Yours sincerely,<br />
<br />
: NAME<br />
: ADDRESS<br />
<br />
==See also==<br />
<br />
* [[Muehlhauser interview series on AGI]]<br />
* [http://intelligence.org/2013/05/15/when-will-ai-be-created/ When Will AI Be Created?]<br />
* [http://lesswrong.com/lw/e36/ai_timeline_predictions_are_we_getting_better/ AI timeline predictions: are we getting better?]<br />
* [http://fora.tv/v/c16838 Stuart Armstrong: How We’re Predicting AI], The Singularity Summit 2012<br />
* [http://sethbaum.com/ac/2011_AI-Experts.html Experts on artificial general intelligence provide estimates for the future of AGI.], Baum, Seth D., Ben Goertzel, and Ted G. Goertzel, 2011.<br />
* [http://www.fhi.ox.ac.uk/news/2011/?a=21516 Machine Intelligence Survey], Sandberg, A. and Bostrom, N. (2011). Future of Humanity Institute, Oxford University.</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=List_of_Blogs&diff=12876List of Blogs2013-05-10T19:37:52Z<p>XiXiDu: </p>
<hr />
<div><br />
==Generic Rationality and Philosophy==<br />
<br />
alexvermeer: [http://alexvermeer.com Understanding and Mastering Our Brains to Do Cool Stuff]<br />
<br />
Briénne: [http://enterthoughts.blogspot.com/ Entertaining Thoughts]<br />
<br />
ciphergoth: [http://mindsarentmagic.wordpress.com/ Minds Aren't Magic] ''(focus on cryonics)''<br />
<br />
David_Gerard: [http://rationalblogs.org/rationalwiki/ RationalWiki Blog] ''(general skeptical interest)''<br />
<br />
Eneasz: [http://www.deathisbadblog.com/ Death Is Bad]<br />
<br />
'''Gwern: [http://www.gwern.net/ gwern.net]''' ''(blog-ish website with lots of detailed statistical analyses of nootropics, anime)''<br />
<br />
jimmy: [http://cognitiveengineer.blogspot.ca/ The Art and Science of Cognitive Engineering] ''(focus on hypnosis)''<br />
<br />
JKaufman: [http://www.jefftk.com/news/index Jeff Kaufman]<br />
<br />
Julia: [http://thewholesky.wordpress.com/ The Whole Sky] ''(stories about being a social worker in a prison)''<br />
<br />
Katja Grace: [http://meteuphoric.wordpress.com/ Meteuphoric] ''(focus on anthropics and human behavior)''<br />
<br />
Michelle_Z: [http://amithereyet31.blogspot.com/ Am I There Yet?] ''(Self improvement, science, and other varied topics)''<br />
<br />
NancyLebovitz: [http://nancylebov.livejournal.com/ Input Junkie]<br />
<br />
OrphanWilde: [http://aretae.blogspot.com/ Aretae]<br />
<br />
PaulWright: [http://blog.noctua.org.uk/ GCU Dancer On The Midway] ''(mostly links)''<br />
<br />
sark: [http://sarkology.wordpress.com/ sarkology]<br />
<br />
tuxedage: [https://tuxedage.wordpress.com/ Essays and Other Musings]<br />
<br />
Will & Divia Eden: [http://becomingeden.com/ Becoming Eden] ''(focus on self-help)''<br />
<br />
XiXiDu: [http://kruel.co/ Alexander Kruel] ''(focus on critiques of the Less Wrong community)''<br />
<br />
'''Yvain: [http://slatestarcodex.com Slate Star Codex]''' ''(focus on psychiatry and structure of arguments)''<br />
<br />
'''Paul Christiano'': [http://rationalaltruist.com A Rational Altruist], [http://ordinaryideas.wordpress.com/ Ordinary Ideas]<br />
<br />
<br />
==Altruism and Utilitarianism==<br />
<br />
Julia: [http://www.givinggladly.com/ Giving Gladly]<br />
<br />
Paul Christiano: [http://rationalaltruist.com/ Rational Altruist]<br />
<br />
Peter_Hurford: [http://www.everydayutilitarian.com/ Everyday Utilitarian]<br />
<br />
<br />
==Economics and Social Science==<br />
<br />
TGGP: [http://entitledtoanopinion.wordpress.com/ Entitled To An Opinion] ''(social science, genetics, links)''<br />
<br />
'''Alyssa Vance: [http://rationalconspiracy.com/ The Rationalist Conspiracy]'''<br />
<br />
'''Robin Hanson: [http://www.overcomingbias.com/ Overcoming Bias]''' ''(legendary econblog, focuses on signaling)''<br />
<br />
Silas Barta: [http://blog.tyrannyofthemouse.com/ Setting Things Straight]<br />
<br />
<br />
==Gender and Politics==<br />
<br />
Aurini: [http://www.staresattheworld.com/ Stares At The World] ''(reactionary thought, collapse of modern society)''<br />
<br />
Clarisse Thorn: [http://clarissethorn.com/blog/ Clarisse Thorn] ''(kink, S&M)''<br />
<br />
HughRistik: [http://www.feministcritics.org/blog/ Feminist Critics] ''(discussion of feminism, often negative)''<br />
<br />
'''Konkvistador et al: [http://www.moreright.net/ More Right]''' ''(reactionary thought)''<br />
<br />
OrphanWilde: [http://orphanwilde.blogspot.com/ The Orphan Wilde] ''(libertarianism)''<br />
<br />
'''Ozymandias: [http://ozyfrantz.com/ Ozy's Blog]''' ''(feminism, social justice)''<br />
<br />
<br />
==Religion and Atheism==<br />
<br />
'''Chana Messinger: [http://themerelyreal.wordpress.com/ The Merely Real]''' ''(focus on skepticism and social justice)''<br />
<br />
'''Chris_Hallquist: [http://www.patheos.com/blogs/hallq/ The Uncredible Hallq]''' ''(atheist blog with occasional focus on singularity)''<br />
<br />
Gilbert: [http://last-conformer.net/ The Last Conformer] ''(Catholic blog, occasional well-informed criticisms of Less Wrong)''<br />
<br />
muflax: [http://daily.muflax.com/ Muflax Becomes A Saint] ''(focus on Buddhism, early Christianity, eclectic mysticism)''<br />
<br />
'''palladias: [http://www.patheos.com/blogs/unequallyyoked/ Unequally Yoked]''' ''(Catholic blog by recent convert from atheism)''<br />
<br />
<br />
==Math==<br />
<br />
Qiaochu_Yuan: [http://qchu.wordpress.com/ Annoying Precision]<br />
<br />
Zack M Davis: [http://zackmdavis.net/blog/ An Algorithmic Lucidity]<br />
<br />
<br />
==Extremely Miscellaneous==<br />
<br />
Bill McGrath: [http://billmcgrathmusic.wordpress.com/ Bill McGrath Music]<br />
<br />
Kaj Sotala: [http://kajsotala.fi/ kajsotala.fi] ''(educational video games, among other things)''<br />
<br />
kpreid: [http://kpreid.livejournal.com/ Kevin Reid's Blog] ''(computer games, puzzle design)''<br />
<br />
RolfAndreassen: [http://ynglingasaga.wordpress.com/ Yngling Saga] ''(logs from role-playing games)''<br />
<br />
Trevor Blake: [http://ovo127.com/ OVO]<br />
<br />
<br />
==Gone But Not Forgotten==<br />
<br />
CarlShulman: [http://reflectivedisequilibrium.blogspot.com/ Reflective Disequilibrium]<br />
<br />
JuliaGalef: [http://measureofdoubt.com/author/measureofdoubt/ Measure of Doubt]<br />
<br />
'''Lukeprog: [http://commonsenseatheism.com/ Common Sense Atheism]'''<br />
<br />
'''Sister Y: [http://theviewfromhell.blogspot.com/ The View From Hell]''' ''(suicide rights, negative utilitarianism)''<br />
<br />
'''steven0461: [http://www.acceleratingfuture.com/steven/ Black Belt Bayesian]'''</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Perspectives_on_intelligence_explosion&diff=12441Perspectives on intelligence explosion2013-02-16T11:51:31Z<p>XiXiDu: Changed the link to a category of my homepage to an index of posts from that category.</p>
<hr />
<div>This page is to collect links to criticism of what seems to be the prevailing view on Less Wrong regarding the possibility of [[hard takeoff]] and the importance of [[FAI]].<br />
<br />
This page is meant to be inclusive, not exclusive--marginal cases of criticism and criticism that doesn't seem well thought out should also be included. Direct responses to criticism should also be included when available.<br />
<br />
== Criticism ==<br />
<br />
* [http://lesswrong.com/lw/cbs/thoughts_on_the_singularity_institute_si/ Thoughts on the Singularity Institute (SI)] (now MIRI) from Holden Karnofsky. Responses: [http://lesswrong.com/lw/cck/holden_karnofskys_singularity_institute_objection/ 1], [http://lesswrong.com/lw/ccl/holden_karnofskys_singularity_institute_objection/ 2], [http://lesswrong.com/lw/ccm/holden_karnofskys_singularity_institute_objection/ 3], [http://lesswrong.com/lw/cco/holden_karnofskys_singularity_institute_critique/ 4]<br />
* [http://www.overcomingbias.com/2010/02/is-the-city-ularity-near.html Is The City-ularity Near?]<br />
* [http://www.overcomingbias.com/2011/06/the-betterness-explosion.html The Betterness Explosion].<br />
* [http://multiverseaccordingtoben.blogspot.com/2010/10/singularity-institutes-scary-idea-and.html The Singularity Institute's Scary Idea (and Why I Don't Buy It)]. The author describes Nick Bostrom as another skeptic regarding the "scary idea"; you can see a question-and-answer session Nick gives on these topics [http://www.youtube.com/watch?v=KQeijCRJSog&lr=1 here]. (Tip for watching video lectures: you may wish to download the video using an extension for your browser and watch it sped up using [http://www.videolan.org/vlc/ VLC].)<br />
* [http://meteuphoric.wordpress.com/2010/11/11/sia-says-ai-is-no-big%C2%A0threat/ SIA says AI is no big threat]. You can also read [http://meteuphoric.wordpress.com/tag/ai/ everything the author has written about AI].<br />
* [http://lesswrong.com/lw/g93/evaluating_the_feasibility_of_sis_plan/ Evaluating the feasibility of SI's plan].<br />
* [http://kruel.co/2012/07/17/miri-lesswrong-critiques-index/ Alexander Kruel's writing on MIRI and Less Wrong] is generally critical.<br />
* [http://www.antipope.org/charlie/blog-static/2011/06/reality-check-1.html Three arguments against the singularity]. [http://www.overcomingbias.com/2011/06/stross-on-singularity.html Reaction from Robin Hanson].<br />
* [http://lesswrong.com/lw/8fa/is_an_intelligence_explosion_a_disjunctive_or/ Is an Intelligence Explosion a Disjunctive or Conjunctive Event?]<br />
* [http://lesswrong.com/lw/8fb/why_an_intelligence_explosion_might_be_a/ Why an Intelligence Explosion might be a Low-Priority Global Risk].<br />
* [http://lesswrong.com/lw/asc/risks_from_ai_and_charitable_giving/ Risks from AI and Charitable Giving].<br />
* [http://lesswrong.com/lw/745/why_we_cant_take_expected_value_estimates/ Why We Can't Take Expected Value Estimates Literally (Even When They're Unbiased)]. Responses: [http://lesswrong.com/lw/76k/the_optimizers_curse_and_how_to_beat_it/ 1], [http://www.overcomingbias.com/2011/08/on-fudge-factors.html 2]. (You may also wish to view the author's [http://lesswrong.com/user/HoldenKarnofsky/ Less Wrong user page], as his criticisms of SI feature heavily there.)<br />
* [http://lesswrong.com/lw/92v/should_we_discount_extraordinary_implications/ Should we discount extraordinary implications?]<br />
<br />
== Debate ==<br />
<br />
* [[The Hanson-Yudkowsky AI-Foom Debate]], a text debate that occurred in late 2008.<br />
* [http://www.youtube.com/watch?v=m_R5Z4_khNw 2011 Hanson-Yudkowsky live AI Foom debate at Jane Street Capital]. [http://www.overcomingbias.com/2011/07/debating-yudkowsky.html Hanson's summary of the debate and his arguments].<br />
* [http://johncarlosbaez.wordpress.com/?s=Eliezer John Baez Interviews Eliezer Yudkowsky]. (Note: You'll have to scroll to the bottom to read the first part.) Although John finds Eliezer's claims of AI dangers plausible, he isn't persuaded to give up environmentalism in favor of working on [[FAI]].<br />
* [http://lesswrong.com/lw/a5z/impressions_from_a_panel_discussion_on_agi/ A panel discussion on AGI].<br />
* [http://lesswrong.com/lw/15t/bloggingheads_yudkowsky_and_aaronson_talk_about/ Bloggingheads: Yudkowsky and Aaronson talk about AI and Many-worlds]. [http://lesswrong.com/search/results?cx=015839050583929870010%3A-802ptn4igi&cof=FORID%3A11&ie=UTF-8&q=bloggingheads&sa=Search&siteurl=lesswrong.com%2Flw%2F15t%2Fbloggingheads_yudkowsky_and_aaronson_talk_about%2F&ref= Other Bloggingheads discussions that have appeared on Less Wrong].<br />
* [http://lesswrong.com/r/discussion/lw/5k5/givewellorg_interviews_siai/ GiveWell.org interviews SIAI]. ([http://lesswrong.com/r/discussion/lw/91e/singularity_institute_100000_endofyear_fundraiser/5j9o Some Singularity Institute folks say they were poorly represented in this interview].)<br />
* [http://lesswrong.com/lw/6qo/givewell_interview_with_major_siai_donor_jaan/ GiveWell interview with major SIAI donor Jaan Tallinn].<br />
* [http://lesswrong.com/lw/8j7/criticisms_of_intelligence_explosion/ Criticisms of intelligence explosion].<br />
* [http://commonsenseatheism.com/wp-content/uploads/2012/03/Ionut-Several-arguments-for-and-against-superintelligence-singularity.pdf Several Arguments For and Against Superintelligence/"Singularity"].</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Talk:Interview_series_on_risks_from_AI&diff=12345Talk:Interview series on risks from AI2013-01-31T10:37:06Z<p>XiXiDu: /* Care has been taken with respect to the questions asked. */</p>
<hr />
<div>Is there a more general compendium of [[issue/position/argument]] on this issue?<br />
<br />
Something that all users could contribute to?<br />
<br />
Seems very much has been said on this issue and who cares about a limited summary of the results of only one series of interviews / one survey.<br />
<br />
== Care has been taken with respect to the questions asked. ==<br />
<br />
At two occasions I asked the LessWrong community to refine the questions:<br />
<br />
1.) http://lesswrong.com/lw/65a/help_writing_marvin_minsky/<br />
<br />
2.) http://lesswrong.com/lw/9as/template_questions_regarding_possible_risks_from/<br />
<br />
I changed the questions on both occasions. Even though I did not agree with all of the suggestions, there is no indication that I did not take care with respect to what questions to ask.<br />
<br />
The questions were both neutral and to the point.</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Talk:Interview_series_on_risks_from_AI&diff=12344Talk:Interview series on risks from AI2013-01-31T10:36:35Z<p>XiXiDu: /* Care has been taken with respect to the questions asked. */ new section</p>
<hr />
<div>Is there a more general compendium of [[issue/position/argument]] on this issue?<br />
<br />
Something that all users could contribute to?<br />
<br />
Seems very much has been said on this issue and who cares about a limited summary of the results of only one series of interviews / one survey.<br />
<br />
== Care has been taken with respect to the questions asked. ==<br />
<br />
At two occasions I asked the LessWrong community to refine the questions:<br />
<br />
http://lesswrong.com/lw/65a/help_writing_marvin_minsky/<br />
http://lesswrong.com/lw/9as/template_questions_regarding_possible_risks_from/<br />
<br />
I changed the questions on both occasions. Even though I did not agree with all of the suggestions, there is no indication that I did not take care with respect to what questions to ask.<br />
<br />
The questions were both neutral and to the point.</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Interview_series_on_risks_from_AI&diff=12342Interview series on risks from AI2013-01-31T10:20:12Z<p>XiXiDu: The LessWrong community was asked to refine the questions before the interviews started (http://lesswrong.com/lw/65a/help_writing_marvin_minsky/) and was able to suggest improvements at any time.</p>
<hr />
<div>In 2011, [http://kruel.co Alexander Kruel] (XiXiDu) started a Q&A style interview series asking various people about their perception of artificial intelligence and possible risks associated with it.<br />
<br />
==Interviews==<br />
<br />
A list of all interviews:<br />
<br />
* [http://lesswrong.com/r/discussion/lw/999/qa_with_experts_on_risks_from_ai_1/ Dr. Brandon Rohrer, Professor Tim Finin and Dr. Pat Hayes]<br />
* [http://lesswrong.com/r/discussion/lw/9a1/qa_with_experts_on_risks_from_ai_2/ Professor Nils John Nilsson, Professor Peter J. Bentley, Professor David Alan Plaisted and Dr. Hector Levesque]<br />
* [http://lesswrong.com/r/discussion/lw/9cm/qa_with_experts_on_risks_from_ai_3/ Professor Paul Cohen, Professor Alan Bundy, Dr. Pei Wang, Dr. J. Storrs Hall and Dr. William Uther]<br />
* [http://lesswrong.com/r/discussion/lw/9hq/qa_with_experts_on_risks_from_ai_4/ Professor Michael G. Dyer, Dr. John Tromp, Dr. Kevin Korb, Dr. Leo Pape, Professor Peter Gacs, Professor Donald Loveland, Eray Ozkural, Dr. Laurent Orseau, Richard Loosemore and Monica Anderson]<br />
* [http://kruel.co/2012/08/15/qa-with-experts-on-risks-from-ai-5/ Professor John E. Laird and Dr. Kristinn R. Thorisson]<br />
* [http://kruel.co/2012/12/17/qa-with-experts-on-risks-from-ai-6/ Dr. Randal A. Koene and Alexey Potapov of AIDEUS]<br />
* [http://kruel.co/2012/11/04/qa-with-larry-wasserman-on-risks-from-ai/ Professor Larry Wasserman]<br />
* [http://kruel.co/2012/12/19/qa-with-mark-changizi-on-risks-from-ai/ Dr. Mark Changizi]<br />
* [http://lesswrong.com/r/discussion/lw/8wz/qa_with_michael_littman_on_risks_from_ai Professor Michael Littman]<br />
* [http://lesswrong.com/r/discussion/lw/691/shane_legg_on_risks_from_ai Dr. Shane Legg]<br />
* [http://lesswrong.com/r/discussion/lw/682/j%C3%BCrgen_schmidhuber_on_risks_from_ai Professor Jürgen Schmidhuber]<br />
* [http://lesswrong.com/r/discussion/lw/65v/stan_franklin_on_risks_from_ai Professor Stan Franklin]<br />
* [http://lesswrong.com/lw/9fz/qa_with_abram_demski_on_risks_from_ai/ Abram Demski]<br />
* [http://lesswrong.com/r/discussion/lw/8tt/qa_with_richard_carrier_on_risks_from_ai/ Dr. Richard Carrier]<br />
<br />
==Questions==<br />
<br />
The current set of questions:<br />
<br />
* Assuming beneficial political and economic development and that no global catastrophe halts progress, by what year would you assign a 10%/50%/90% chance of the development of artificial intelligence that is roughly as good as humans (or better, perhaps unevenly) at science, mathematics, engineering and programming?<br />
* Once we build AI that is roughly as good as humans (or better, perhaps unevenly) at science, mathematics, engineering and programming, how much more difficult will it be for humans and/or AIs to build an AI which is substantially better at those activities than humans?<br />
* Do you ever expect artificial intelligence to overwhelmingly outperform humans at typical academic research, in the way that they may soon overwhelmingly outperform humans at trivia contests, or do you expect that humans will always play an important role in scientific progress?<br />
* What probability do you assign to the possibility of an AI with initially roughly professional human-level competence (or better, perhaps unevenly) at general reasoning (including science, mathematics, engineering and programming) to self-modify its way up to vastly superhuman capabilities within a matter of hours/days/< 5 years?<br />
* How important is it to research risks associated with artificial intelligence that is good enough at general reasoning (including science, mathematics, engineering and programming) to be capable of radical self-modification, before attempting to build one?<br />
* What probability do you assign to the possibility of human extinction within 100 years as a result of AI capable of self-modification (that is not provably non-dangerous, if that is even possible)? P(human extinction by AI | AI capable of self-modification and not provably non-dangerous is created)<br />
<br />
==Mail Template==<br />
<br />
The exact wording of the email:<br />
<br />
: Subject: Questions regarding possible risks from artificial intelligence<br />
<br />
: Dear Professor/Dr NAME,<br />
<br />
: I am currently trying to learn more about the academic perception of artificial general intelligence and possible risks associated with it. Consequently I am curious about your opinion as a noted expert.<br />
<br />
: I would like to ask you a few questions and your permission to publish your possible answers in order to estimate the academic awareness and perception of risks from AI. I am not a journalist and do not represent any publication, nor do I maintain a formal academic relationship. I am conducting an informal interview for a community blog: lesswrong.com<br />
<br />
: Please let me know if you have any questions or if you are interested in third-party material that does expand on various aspects of my questions.<br />
<br />
: Here is a list of people that I had a chance to interview so far: NAMES<br />
<br />
: QUESTIONS<br />
<br />
: Yours sincerely,<br />
<br />
: NAME<br />
: ADDRESS<br />
<br />
==See also==<br />
<br />
* [http://wiki.lesswrong.com/wiki/Muehlhauser_interview_series_on_AGI Muehlhauser interview series on AGI]<br />
* [http://lesswrong.com/lw/e36/ai_timeline_predictions_are_we_getting_better/ AI timeline predictions: are we getting better?]<br />
* [http://fora.tv/v/c16838 Stuart Armstrong: How We’re Predicting AI], The Singularity Summit 2012<br />
* [http://sethbaum.com/ac/2011_AI-Experts.html Experts on artificial general intelligence provide estimates for the future of AGI.], Baum, Seth D., Ben Goertzel, and Ted G. Goertzel, 2011.<br />
* [http://www.fhi.ox.ac.uk/__data/assets/pdf_file/0015/21516/MI_survey.pdf Machine Intelligence Survey], Sandberg, A. and Bostrom, N. (2011). Future of Humanity Institute, Oxford University.</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=12054Programming resources2013-01-04T18:12:41Z<p>XiXiDu: Added 'Algorithms in C, Parts 1-5 (Bundle): Fundamentals, Data Structures, Sorting, Searching, and Graph Algorithms' by Robert Sedgewick</p>
<hr />
<div>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. <br />
<br />
Even if you are not interested to learn to program, you might want to be able to at least interpret the most basic pseudo code as you might come across various snippets of code in discussions and top-level posts outside of the main sequences.<br />
<br />
Below you will find a list of links to books and other resources. Most categories are sorted by their difficulty in ascending order. <br />
<br />
Resources that can be understood with little or no knowledge of computer science and programming are marked <span style="color: green; font-weight: bold;">EASY</span>.<br />
<br />
==Novice: Getting Started==<br />
<br />
<span style="color: green; font-weight: bold;">EASY</span><br />
<br />
This section is meant for people with little to no background in mathematics, programming and computer science. <br />
<br />
* [http://www.udacity.com/overview/Course/cs101/CourseRev/apr2012 Introduction to Computer Science (CS101) - Building a Search Engine] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.<br />
<br />
There is no prior programming knowledge needed for this course. Beginners welcome!<br />
<br />
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.</blockquote><br />
<br />
* [http://inventwithpython.com/ Invent Your Own Computer Games with Python] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>“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.<br />
<br />
“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.</blockquote><br />
<br />
* [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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."</blockquote><br />
<br />
==How Computers Work==<br />
<br />
* [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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."</blockquote><br />
<br />
* [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
* [http://www.amazon.com/Computer-Architecture-Fifth-Quantitative-Approach/dp/012383872X Computer Architecture: A Quantitative Approach]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.plantation-productions.com/Webster/www.writegreatcode.com/index.html The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
* Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
* Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
* [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
* [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
* [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
* [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
* [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
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.<br />
<br />
* [http://www.amazon.com/Algorithmic-Adventures-From-Knowledge-Magic/dp/3540859853/ref=sr_1_1?ie=UTF8&qid=1354984556&sr=8-1&keywords=Algorithmic+Adventures+Algorithmic+Adventures Algorithmic Adventures] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.udacity.com/ Udacity] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
* [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
* [http://www.udacity.com/overview/Course/cs271/CourseRev/1 Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
* [http://www.amazon.com/Introduction-Theory-Computation-Michael-Sipser/dp/053494728X Introduction to the Theory of Computation]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Computability-Logic-George-S-Boolos/dp/0521701465 Computability and Logic]<br />
<br />
<blockquote>Computability and Logic has become a classic because of its accessibility to students without a mathematical background and because it covers not simply the staple topics of an intermediate logic course, such as Godel's incompleteness theorems, but also a large number of optional topics, from Turing's theory of computability to Ramsey's theorem. Including a selection of exercises, adjusted for this edition, at the end of each chapter, it offers a new and simpler treatment of the representability of recursive functions, a traditional stumbling block for students on the way to the Godel incompleteness theorems.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
* [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
* [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
* [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
* [http://www.amazon.com/Algorithms-Parts-1-5-Bundle-Fundamentals/dp/0201756080/ref=la_B000AQ4JCO_1_5?ie=UTF8&qid=1357320356&sr=1-5 Algorithms in C, Parts 1-5 (Bundle): Fundamentals, Data Structures, Sorting, Searching, and Graph Algorithms (3rd Edition)]<br />
* [http://www.amazon.com/Bundle-Algorithms-Parts-1-5-Fundamentals/dp/020172684X/ref=la_B000AQ4JCO_1_3?ie=UTF8&qid=1357320356&sr=1-3 (C++ Edition)]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==Practice==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
* [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
* [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
* Write your own programs.<br />
<br />
==Programming Languages==<br />
<br />
Some important programming languages are the high-level scripting language Python that incorporates various programming paradigms such as iterative and functional programming. The purely functional programming language Haskell, based on lambda calculus. The highly efficient low-level programming language C. The very expressive LISP family of languages, including Scheme. And the specialized R language for statistical computing and graphics.<br />
<br />
===Python===<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
* [http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <span style="color: green; font-weight: bold;">EASY</span> <br />
<br />
* [http://inventwithpython.com/ Invent Your Own Computer Games with Python] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>“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.</blockquote><br />
<br />
* [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
* [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
* [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
* [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
* [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
* [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-642-30292-3 A Primer on Scientific Programming with Python]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-540-73915-9 Python Scripting for Computational Science]<br />
<br />
<blockquote>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.<br />
<br />
The focus is on examples and applications of relevance to computational scientists.</blockquote><br />
<br />
* [http://norvig.com/spell-correct.html How to Write a Spelling Corrector]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
===Haskell===<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
* [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
* [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] <br />
<br />
* [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] <br />
<br />
* [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
* [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
* [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
* [http://blog.codeslower.com/static/CheatSheet.pdf Haskell Cheat Sheet]<br />
<br />
===Common Lisp===<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
* [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
* [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
* [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
* [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
* [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
* [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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<br />
<br />
[...]<br />
<br />
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.</blockquote><br />
<br />
===Scheme===<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
* [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
* [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
===R===<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
* [http://decisionstats.com/2012/12/08/try-and-learn-r-for-free/ Try and learn R]:<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] <br />
<br />
* [http://www.twotorials.com/ R Tutorials] <br />
<br />
* [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
* [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
* [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
* [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
* [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
* [http://oli.cmu.edu/courses/free-open/statistics-course-details/ 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 [http://tryr.codeschool.com/ Code School's "Try R"].<br />
<br />
===C/C++===<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
* [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
C++ Books<br />
<br />
* [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
<blockquote>Written by Bjarne Stroustrup, the creator of C++, this is the world's most trusted and widely read book on C++.</blockquote><br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Interview_series_on_risks_from_AI&diff=11893Interview series on risks from AI2012-12-19T14:31:56Z<p>XiXiDu: Added an interview with Dr. Mark A. Changizi.</p>
<hr />
<div>In 2011, [http://kruel.co Alexander Kruel] (XiXiDu) started a Q&A style interview series asking various people about their perception of artificial intelligence and possible risks associated with it.<br />
<br />
==Interviews==<br />
<br />
A list of all interviews:<br />
<br />
* [http://lesswrong.com/r/discussion/lw/999/qa_with_experts_on_risks_from_ai_1/ Dr. Brandon Rohrer, Professor Tim Finin and Dr. Pat Hayes]<br />
* [http://lesswrong.com/r/discussion/lw/9a1/qa_with_experts_on_risks_from_ai_2/ Professor Nils John Nilsson, Professor Peter J. Bentley, Professor David Alan Plaisted and Dr. Hector Levesque]<br />
* [http://lesswrong.com/r/discussion/lw/9cm/qa_with_experts_on_risks_from_ai_3/ Professor Paul Cohen, Professor Alan Bundy, Dr. Pei Wang, Dr. J. Storrs Hall and Dr. William Uther]<br />
* [http://lesswrong.com/r/discussion/lw/9hq/qa_with_experts_on_risks_from_ai_4/ Professor Michael G. Dyer, Dr. John Tromp, Dr. Kevin Korb, Dr. Leo Pape, Professor Peter Gacs, Professor Donald Loveland, Eray Ozkural, Dr. Laurent Orseau, Richard Loosemore and Monica Anderson]<br />
* [http://kruel.co/2012/08/15/qa-with-experts-on-risks-from-ai-5/ Professor John E. Laird and Dr. Kristinn R. Thorisson]<br />
* [http://kruel.co/2012/12/17/qa-with-experts-on-risks-from-ai-6/ Dr. Randal A. Koene and Alexey Potapov of AIDEUS]<br />
* [http://kruel.co/2012/11/04/qa-with-larry-wasserman-on-risks-from-ai/ Professor Larry Wasserman]<br />
* [http://kruel.co/2012/12/19/qa-with-mark-changizi-on-risks-from-ai/ Dr. Mark Changizi]<br />
* [http://lesswrong.com/r/discussion/lw/8wz/qa_with_michael_littman_on_risks_from_ai Professor Michael Littman]<br />
* [http://lesswrong.com/r/discussion/lw/691/shane_legg_on_risks_from_ai Dr. Shane Legg]<br />
* [http://lesswrong.com/r/discussion/lw/682/j%C3%BCrgen_schmidhuber_on_risks_from_ai Professor Jürgen Schmidhuber]<br />
* [http://lesswrong.com/r/discussion/lw/65v/stan_franklin_on_risks_from_ai Professor Stan Franklin]<br />
* [http://lesswrong.com/lw/9fz/qa_with_abram_demski_on_risks_from_ai/ Abram Demski]<br />
* [http://lesswrong.com/r/discussion/lw/8tt/qa_with_richard_carrier_on_risks_from_ai/ Dr. Richard Carrier]<br />
<br />
==Questions==<br />
<br />
The current set of questions:<br />
<br />
* Assuming beneficial political and economic development and that no global catastrophe halts progress, by what year would you assign a 10%/50%/90% chance of the development of artificial intelligence that is roughly as good as humans (or better, perhaps unevenly) at science, mathematics, engineering and programming?<br />
* Once we build AI that is roughly as good as humans (or better, perhaps unevenly) at science, mathematics, engineering and programming, how much more difficult will it be for humans and/or AIs to build an AI which is substantially better at those activities than humans?<br />
* Do you ever expect artificial intelligence to overwhelmingly outperform humans at typical academic research, in the way that they may soon overwhelmingly outperform humans at trivia contests, or do you expect that humans will always play an important role in scientific progress?<br />
* What probability do you assign to the possibility of an AI with initially roughly professional human-level competence (or better, perhaps unevenly) at general reasoning (including science, mathematics, engineering and programming) to self-modify its way up to vastly superhuman capabilities within a matter of hours/days/< 5 years?<br />
* How important is it to research risks associated with artificial intelligence that is good enough at general reasoning (including science, mathematics, engineering and programming) to be capable of radical self-modification, before attempting to build one?<br />
* What probability do you assign to the possibility of human extinction within 100 years as a result of AI capable of self-modification (that is not provably non-dangerous, if that is even possible)? P(human extinction by AI | AI capable of self-modification and not provably non-dangerous is created)<br />
<br />
==Mail Template==<br />
<br />
The exact wording of the email:<br />
<br />
: Subject: Questions regarding possible risks from artificial intelligence<br />
<br />
: Dear Professor/Dr NAME,<br />
<br />
: I am currently trying to learn more about the academic perception of artificial general intelligence and possible risks associated with it. Consequently I am curious about your opinion as a noted expert.<br />
<br />
: I would like to ask you a few questions and your permission to publish your possible answers in order to estimate the academic awareness and perception of risks from AI. I am not a journalist and do not represent any publication, nor do I maintain a formal academic relationship. I am conducting an informal interview for a community blog: lesswrong.com<br />
<br />
: Please let me know if you have any questions or if you are interested in third-party material that does expand on various aspects of my questions.<br />
<br />
: Here is a list of people that I had a chance to interview so far: NAMES<br />
<br />
: QUESTIONS<br />
<br />
: Yours sincerely,<br />
<br />
: NAME<br />
: ADDRESS<br />
<br />
==See also==<br />
<br />
* [http://wiki.lesswrong.com/wiki/Muehlhauser_interview_series_on_AGI Muehlhauser interview series on AGI]<br />
* [http://lesswrong.com/lw/e36/ai_timeline_predictions_are_we_getting_better/ AI timeline predictions: are we getting better?]<br />
* [http://fora.tv/v/c16838 Stuart Armstrong: How We’re Predicting AI], The Singularity Summit 2012<br />
* [http://sethbaum.com/ac/2011_AI-Experts.html Experts on artificial general intelligence provide estimates for the future of AGI.], Baum, Seth D., Ben Goertzel, and Ted G. Goertzel, 2011.<br />
* [http://www.fhi.ox.ac.uk/__data/assets/pdf_file/0015/21516/MI_survey.pdf Machine Intelligence Survey], Sandberg, A. and Bostrom, N. (2011). Future of Humanity Institute, Oxford University.</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Interview_series_on_risks_from_AI&diff=11883Interview series on risks from AI2012-12-17T14:38:40Z<p>XiXiDu: Added an interview with Dr. Randal A. Koene and Alexey Potapov of AIDEUS</p>
<hr />
<div>In 2011, [http://kruel.co Alexander Kruel] (XiXiDu) started a Q&A style interview series asking various people about their perception of artificial intelligence and possible risks associated with it.<br />
<br />
==Interviews==<br />
<br />
A list of all interviews:<br />
<br />
* [http://lesswrong.com/r/discussion/lw/999/qa_with_experts_on_risks_from_ai_1/ Dr. Brandon Rohrer, Professor Tim Finin and Dr. Pat Hayes]<br />
* [http://lesswrong.com/r/discussion/lw/9a1/qa_with_experts_on_risks_from_ai_2/ Professor Nils John Nilsson, Professor Peter J. Bentley, Professor David Alan Plaisted and Dr. Hector Levesque]<br />
* [http://lesswrong.com/r/discussion/lw/9cm/qa_with_experts_on_risks_from_ai_3/ Professor Paul Cohen, Professor Alan Bundy, Dr. Pei Wang, Dr. J. Storrs Hall and Dr. William Uther]<br />
* [http://lesswrong.com/r/discussion/lw/9hq/qa_with_experts_on_risks_from_ai_4/ Professor Michael G. Dyer, Dr. John Tromp, Dr. Kevin Korb, Dr. Leo Pape, Professor Peter Gacs, Professor Donald Loveland, Eray Ozkural, Dr. Laurent Orseau, Richard Loosemore and Monica Anderson]<br />
* [http://kruel.co/2012/08/15/qa-with-experts-on-risks-from-ai-5/ Professor John E. Laird and Dr. Kristinn R. Thorisson]<br />
* [http://kruel.co/2012/12/17/qa-with-experts-on-risks-from-ai-6/ Dr. Randal A. Koene and Alexey Potapov of AIDEUS]<br />
* [http://kruel.co/2012/11/04/qa-with-larry-wasserman-on-risks-from-ai/ Professor Larry Wasserman]<br />
* [http://lesswrong.com/r/discussion/lw/8wz/qa_with_michael_littman_on_risks_from_ai Professor Michael Littman]<br />
* [http://lesswrong.com/r/discussion/lw/691/shane_legg_on_risks_from_ai Dr. Shane Legg]<br />
* [http://lesswrong.com/r/discussion/lw/682/j%C3%BCrgen_schmidhuber_on_risks_from_ai Professor Jürgen Schmidhuber]<br />
* [http://lesswrong.com/r/discussion/lw/65v/stan_franklin_on_risks_from_ai Professor Stan Franklin]<br />
* [http://lesswrong.com/lw/9fz/qa_with_abram_demski_on_risks_from_ai/ Abram Demski]<br />
* [http://lesswrong.com/r/discussion/lw/8tt/qa_with_richard_carrier_on_risks_from_ai/ Dr. Richard Carrier]<br />
<br />
==Questions==<br />
<br />
The current set of questions:<br />
<br />
* Assuming beneficial political and economic development and that no global catastrophe halts progress, by what year would you assign a 10%/50%/90% chance of the development of artificial intelligence that is roughly as good as humans (or better, perhaps unevenly) at science, mathematics, engineering and programming?<br />
* Once we build AI that is roughly as good as humans (or better, perhaps unevenly) at science, mathematics, engineering and programming, how much more difficult will it be for humans and/or AIs to build an AI which is substantially better at those activities than humans?<br />
* Do you ever expect artificial intelligence to overwhelmingly outperform humans at typical academic research, in the way that they may soon overwhelmingly outperform humans at trivia contests, or do you expect that humans will always play an important role in scientific progress?<br />
* What probability do you assign to the possibility of an AI with initially roughly professional human-level competence (or better, perhaps unevenly) at general reasoning (including science, mathematics, engineering and programming) to self-modify its way up to vastly superhuman capabilities within a matter of hours/days/< 5 years?<br />
* How important is it to research risks associated with artificial intelligence that is good enough at general reasoning (including science, mathematics, engineering and programming) to be capable of radical self-modification, before attempting to build one?<br />
* What probability do you assign to the possibility of human extinction within 100 years as a result of AI capable of self-modification (that is not provably non-dangerous, if that is even possible)? P(human extinction by AI | AI capable of self-modification and not provably non-dangerous is created)<br />
<br />
==Mail Template==<br />
<br />
The exact wording of the email:<br />
<br />
: Subject: Questions regarding possible risks from artificial intelligence<br />
<br />
: Dear Professor/Dr NAME,<br />
<br />
: I am currently trying to learn more about the academic perception of artificial general intelligence and possible risks associated with it. Consequently I am curious about your opinion as a noted expert.<br />
<br />
: I would like to ask you a few questions and your permission to publish your possible answers in order to estimate the academic awareness and perception of risks from AI. I am not a journalist and do not represent any publication, nor do I maintain a formal academic relationship. I am conducting an informal interview for a community blog: lesswrong.com<br />
<br />
: Please let me know if you have any questions or if you are interested in third-party material that does expand on various aspects of my questions.<br />
<br />
: Here is a list of people that I had a chance to interview so far: NAMES<br />
<br />
: QUESTIONS<br />
<br />
: Yours sincerely,<br />
<br />
: NAME<br />
: ADDRESS<br />
<br />
==See also==<br />
<br />
* [http://wiki.lesswrong.com/wiki/Muehlhauser_interview_series_on_AGI Muehlhauser interview series on AGI]<br />
* [http://lesswrong.com/lw/e36/ai_timeline_predictions_are_we_getting_better/ AI timeline predictions: are we getting better?]<br />
* [http://fora.tv/v/c16838 Stuart Armstrong: How We’re Predicting AI], The Singularity Summit 2012<br />
* [http://sethbaum.com/ac/2011_AI-Experts.html Experts on artificial general intelligence provide estimates for the future of AGI.], Baum, Seth D., Ben Goertzel, and Ted G. Goertzel, 2011.<br />
* [http://www.fhi.ox.ac.uk/__data/assets/pdf_file/0015/21516/MI_survey.pdf Machine Intelligence Survey], Sandberg, A. and Bostrom, N. (2011). Future of Humanity Institute, Oxford University.</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11823Programming resources2012-12-10T10:11:07Z<p>XiXiDu: Added a novice section for people with little to no math and programming background to get started.</p>
<hr />
<div>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. <br />
<br />
Even if you are not interested to learn to program, you might want to be able to at least interpret the most basic pseudo code as you might come across various snippets of code in discussions and top-level posts outside of the main sequences.<br />
<br />
Below you will find a list of links to books and other resources. Most categories are sorted by their difficulty in ascending order. <br />
<br />
Resources that can be understood with little or no knowledge of computer science and programming are marked <span style="color: green; font-weight: bold;">EASY</span>.<br />
<br />
==Novice: Getting Started==<br />
<br />
<span style="color: green; font-weight: bold;">EASY</span><br />
<br />
This section is meant for people with little to no background in mathematics, programming and computer science. <br />
<br />
* [http://www.udacity.com/overview/Course/cs101/CourseRev/apr2012 Introduction to Computer Science (CS101) - Building a Search Engine] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.<br />
<br />
There is no prior programming knowledge needed for this course. Beginners welcome!<br />
<br />
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.</blockquote><br />
<br />
* [http://inventwithpython.com/ Invent Your Own Computer Games with Python] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>“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.<br />
<br />
“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.</blockquote><br />
<br />
* [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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."</blockquote><br />
<br />
==How Computers Work==<br />
<br />
* [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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."</blockquote><br />
<br />
* [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
* [http://www.amazon.com/Computer-Architecture-Fifth-Quantitative-Approach/dp/012383872X Computer Architecture: A Quantitative Approach]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.plantation-productions.com/Webster/www.writegreatcode.com/index.html The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
* Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
* Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
* [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
* [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
* [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
* [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
* [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
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.<br />
<br />
* [http://www.amazon.com/Algorithmic-Adventures-From-Knowledge-Magic/dp/3540859853/ref=sr_1_1?ie=UTF8&qid=1354984556&sr=8-1&keywords=Algorithmic+Adventures+Algorithmic+Adventures Algorithmic Adventures] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.udacity.com/ Udacity] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
* [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
* [http://www.udacity.com/overview/Course/cs271/CourseRev/1 Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
* [http://www.amazon.com/Introduction-Theory-Computation-Michael-Sipser/dp/053494728X Introduction to the Theory of Computation]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Computability-Logic-George-S-Boolos/dp/0521701465 Computability and Logic]<br />
<br />
<blockquote>Computability and Logic has become a classic because of its accessibility to students without a mathematical background and because it covers not simply the staple topics of an intermediate logic course, such as Godel's incompleteness theorems, but also a large number of optional topics, from Turing's theory of computability to Ramsey's theorem. Including a selection of exercises, adjusted for this edition, at the end of each chapter, it offers a new and simpler treatment of the representability of recursive functions, a traditional stumbling block for students on the way to the Godel incompleteness theorems.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
* [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
* [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
* [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
* [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==Practice==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
* [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
* [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
* Write your own programs.<br />
<br />
==Programming Languages==<br />
<br />
Some important programming languages are the high-level scripting language Python that incorporates various programming paradigms such as iterative and functional programming. The purely functional programming language Haskell, based on lambda calculus. The highly efficient low-level programming language C. The very expressive LISP family of languages, including Scheme. And the specialized R language for statistical computing and graphics.<br />
<br />
===Python===<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
* [http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <span style="color: green; font-weight: bold;">EASY</span> <br />
<br />
* [http://inventwithpython.com/ Invent Your Own Computer Games with Python] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>“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.</blockquote><br />
<br />
* [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
* [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
* [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
* [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
* [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
* [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-642-30292-3 A Primer on Scientific Programming with Python]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-540-73915-9 Python Scripting for Computational Science]<br />
<br />
<blockquote>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.<br />
<br />
The focus is on examples and applications of relevance to computational scientists.</blockquote><br />
<br />
* [http://norvig.com/spell-correct.html How to Write a Spelling Corrector]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
===Haskell===<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
* [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
* [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] <br />
<br />
* [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] <br />
<br />
* [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
* [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
* [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
* [http://blog.codeslower.com/static/CheatSheet.pdf Haskell Cheat Sheet]<br />
<br />
===Common Lisp===<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
* [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
* [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
* [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
* [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
* [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
* [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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<br />
<br />
[...]<br />
<br />
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.</blockquote><br />
<br />
===Scheme===<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
* [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
* [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
===R===<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
* [http://decisionstats.com/2012/12/08/try-and-learn-r-for-free/ Try and learn R]:<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] <br />
<br />
* [http://www.twotorials.com/ R Tutorials] <br />
<br />
* [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
* [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
* [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
* [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
* [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
* [http://oli.cmu.edu/courses/free-open/statistics-course-details/ 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 [http://tryr.codeschool.com/ Code School's "Try R"].<br />
<br />
===C/C++===<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
* [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
C++ Books<br />
<br />
* [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
<blockquote>Written by Bjarne Stroustrup, the creator of C++, this is the world's most trusted and widely read book on C++.</blockquote><br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11822Programming resources2012-12-10T09:53:15Z<p>XiXiDu: Moved "The Art of Computer Programming" to the Algorithm section. Instead added "Computer Architecture: A Quantitative Approach" to the "How computers work" section. Further added "Introduction to the Theory of Computation" to Computer Science.</p>
<hr />
<div>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. <br />
<br />
Even if you are not interested to learn to program, you might want to be able to at least interpret the most basic pseudo code as you might come across various snippets of code in discussions and top-level posts outside of the main sequences.<br />
<br />
Below you will find a list of links to books and other resources. Most categories are sorted by their difficulty in ascending order. <br />
<br />
Resources that can be understood with little or no knowledge of computer science and programming are marked <span style="color: green; font-weight: bold;">EASY</span>.<br />
<br />
==How Computers Work==<br />
<br />
* [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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."</blockquote><br />
<br />
* [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
* [http://www.amazon.com/Computer-Architecture-Fifth-Quantitative-Approach/dp/012383872X Computer Architecture: A Quantitative Approach]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.plantation-productions.com/Webster/www.writegreatcode.com/index.html The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
* Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
* Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
* [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
* [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
* [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
* [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
* [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
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.<br />
<br />
* [http://www.amazon.com/Algorithmic-Adventures-From-Knowledge-Magic/dp/3540859853/ref=sr_1_1?ie=UTF8&qid=1354984556&sr=8-1&keywords=Algorithmic+Adventures+Algorithmic+Adventures Algorithmic Adventures] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.udacity.com/ Udacity] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
* [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
* [http://www.udacity.com/overview/Course/cs271/CourseRev/1 Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
* [http://www.amazon.com/Introduction-Theory-Computation-Michael-Sipser/dp/053494728X Introduction to the Theory of Computation]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Computability-Logic-George-S-Boolos/dp/0521701465 Computability and Logic]<br />
<br />
<blockquote>Computability and Logic has become a classic because of its accessibility to students without a mathematical background and because it covers not simply the staple topics of an intermediate logic course, such as Godel's incompleteness theorems, but also a large number of optional topics, from Turing's theory of computability to Ramsey's theorem. Including a selection of exercises, adjusted for this edition, at the end of each chapter, it offers a new and simpler treatment of the representability of recursive functions, a traditional stumbling block for students on the way to the Godel incompleteness theorems.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
* [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
* [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
* [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
* [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==Practice==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
* [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
* [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
* Write your own programs.<br />
<br />
==Programming Languages==<br />
<br />
Some important programming languages are the high-level scripting language Python that incorporates various programming paradigms such as iterative and functional programming. The purely functional programming language Haskell, based on lambda calculus. The highly efficient low-level programming language C. The very expressive LISP family of languages, including Scheme. And the specialized R language for statistical computing and graphics.<br />
<br />
===Python===<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
* [http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <span style="color: green; font-weight: bold;">EASY</span> <br />
<br />
* [http://inventwithpython.com/ Invent Your Own Computer Games with Python] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>“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.</blockquote><br />
<br />
* [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
* [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
* [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
* [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
* [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
* [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-642-30292-3 A Primer on Scientific Programming with Python]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-540-73915-9 Python Scripting for Computational Science]<br />
<br />
<blockquote>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.<br />
<br />
The focus is on examples and applications of relevance to computational scientists.</blockquote><br />
<br />
* [http://norvig.com/spell-correct.html How to Write a Spelling Corrector]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
===Haskell===<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
* [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
* [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] <br />
<br />
* [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] <br />
<br />
* [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
* [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
* [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
* [http://blog.codeslower.com/static/CheatSheet.pdf Haskell Cheat Sheet]<br />
<br />
===Common Lisp===<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
* [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
* [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
* [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
* [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
* [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
* [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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<br />
<br />
[...]<br />
<br />
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.</blockquote><br />
<br />
===Scheme===<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
* [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
* [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
===R===<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
* [http://decisionstats.com/2012/12/08/try-and-learn-r-for-free/ Try and learn R]:<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] <br />
<br />
* [http://www.twotorials.com/ R Tutorials] <br />
<br />
* [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
* [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
* [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
* [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
* [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
* [http://oli.cmu.edu/courses/free-open/statistics-course-details/ 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 [http://tryr.codeschool.com/ Code School's "Try R"].<br />
<br />
===C/C++===<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
* [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
C++ Books<br />
<br />
* [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
<blockquote>Written by Bjarne Stroustrup, the creator of C++, this is the world's most trusted and widely read book on C++.</blockquote><br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11815Programming resources2012-12-09T20:04:54Z<p>XiXiDu: Removed the numerical labels. In some cases it was misleading. Also makes it easier to add new items in-between. Further added a "Haskell Cheat Sheet".</p>
<hr />
<div>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. <br />
<br />
Even if you are not interested to learn to program, you might want to be able to at least interpret the most basic pseudo code as you might come across various snippets of code in discussions and top-level posts outside of the main sequences.<br />
<br />
Below you will find a list of links to books and other resources. Most categories are sorted by their difficulty in ascending order. <br />
<br />
Resources that can be understood with little or no knowledge of computer science and programming are marked <span style="color: green; font-weight: bold;">EASY</span>.<br />
<br />
==How Computers Work==<br />
<br />
* [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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."</blockquote><br />
<br />
* [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
* [http://www.plantation-productions.com/Webster/www.writegreatcode.com/index.html The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
* [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
* [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
* [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
* [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
* [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
* [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
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.<br />
<br />
* [http://www.amazon.com/Algorithmic-Adventures-From-Knowledge-Magic/dp/3540859853/ref=sr_1_1?ie=UTF8&qid=1354984556&sr=8-1&keywords=Algorithmic+Adventures+Algorithmic+Adventures Algorithmic Adventures] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.udacity.com/ Udacity] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
* [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
* [http://www.udacity.com/overview/Course/cs271/CourseRev/1 Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
* [http://www.amazon.com/Computability-Logic-George-S-Boolos/dp/0521701465 Computability and Logic]<br />
<br />
<blockquote>Computability and Logic has become a classic because of its accessibility to students without a mathematical background and because it covers not simply the staple topics of an intermediate logic course, such as Godel's incompleteness theorems, but also a large number of optional topics, from Turing's theory of computability to Ramsey's theorem. Including a selection of exercises, adjusted for this edition, at the end of each chapter, it offers a new and simpler treatment of the representability of recursive functions, a traditional stumbling block for students on the way to the Godel incompleteness theorems.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
* [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
* [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
* [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
==Practice==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
* [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
* [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
* Write your own programs.<br />
<br />
==Programming Languages==<br />
<br />
Some important programming languages are the high-level scripting language Python that incorporates various programming paradigms such as iterative and functional programming. The purely functional programming language Haskell, based on lambda calculus. The highly efficient low-level programming language C. The very expressive LISP family of languages, including Scheme. And the specialized R language for statistical computing and graphics.<br />
<br />
===Python===<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
* [http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <span style="color: green; font-weight: bold;">EASY</span> <br />
<br />
* [http://inventwithpython.com/ Invent Your Own Computer Games with Python] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>“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.</blockquote><br />
<br />
* [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
* [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
* [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
* [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
* [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
* [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-642-30292-3 A Primer on Scientific Programming with Python]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-540-73915-9 Python Scripting for Computational Science]<br />
<br />
<blockquote>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.<br />
<br />
The focus is on examples and applications of relevance to computational scientists.</blockquote><br />
<br />
* [http://norvig.com/spell-correct.html How to Write a Spelling Corrector]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
===Haskell===<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
* [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
* [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] <br />
<br />
* [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] <br />
<br />
* [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
* [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
* [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
* [http://blog.codeslower.com/static/CheatSheet.pdf Haskell Cheat Sheet]<br />
<br />
===Common Lisp===<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
* [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
* [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
* [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
* [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
* [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
* [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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<br />
<br />
[...]<br />
<br />
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.</blockquote><br />
<br />
===Scheme===<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
* [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
* [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
===R===<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
* [http://decisionstats.com/2012/12/08/try-and-learn-r-for-free/ Try and learn R]:<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] <br />
<br />
* [http://www.twotorials.com/ R Tutorials] <br />
<br />
* [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
* [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
* [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
* [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
* [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
* [http://oli.cmu.edu/courses/free-open/statistics-course-details/ 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 [http://tryr.codeschool.com/ Code School's "Try R"].<br />
<br />
===C/C++===<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
* [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
C++ Books<br />
<br />
* [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
* [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
<blockquote>Written by Bjarne Stroustrup, the creator of C++, this is the world's most trusted and widely read book on C++.</blockquote><br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11808Programming resources2012-12-08T16:41:16Z<p>XiXiDu: </p>
<hr />
<div>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. <br />
<br />
Even if you are not interested to learn to program, you might want to be able to at least interpret the most basic pseudo code as you might come across various snippets of code in discussions and top-level posts outside of the main sequences.<br />
<br />
Below you will find a list of links to books and other resources. Most categories are sorted by their difficulty in ascending order. <br />
<br />
Resources that can be understood with little or no knowledge of computer science and programming are marked <span style="color: green; font-weight: bold;">EASY</span>.<br />
<br />
==How Computers Work==<br />
<br />
1. [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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."</blockquote><br />
<br />
2. [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
3. [http://www.plantation-productions.com/Webster/www.writegreatcode.com/index.html The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
4. [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
5. [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
1. [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
4. [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
5. [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
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.<br />
<br />
1. [http://www.amazon.com/Algorithmic-Adventures-From-Knowledge-Magic/dp/3540859853/ref=sr_1_1?ie=UTF8&qid=1354984556&sr=8-1&keywords=Algorithmic+Adventures+Algorithmic+Adventures Algorithmic Adventures] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.udacity.com/ Udacity] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
4. [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
5. [http://www.udacity.com/overview/Course/cs271/CourseRev/1 Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
6. [http://www.amazon.com/Computability-Logic-George-S-Boolos/dp/0521701465 Computability and Logic]<br />
<br />
<blockquote>Computability and Logic has become a classic because of its accessibility to students without a mathematical background and because it covers not simply the staple topics of an intermediate logic course, such as Godel's incompleteness theorems, but also a large number of optional topics, from Turing's theory of computability to Ramsey's theorem. Including a selection of exercises, adjusted for this edition, at the end of each chapter, it offers a new and simpler treatment of the representability of recursive functions, a traditional stumbling block for students on the way to the Godel incompleteness theorems.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
1. [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
2. [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
==Practice==<br />
<br />
1. [http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
3. [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
4. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
5. Write your own programs.<br />
<br />
==Programming Languages==<br />
<br />
Some important programming languages are the high-level scripting language Python that incorporates various programming paradigms such as iterative and functional programming. The purely functional programming language Haskell, based on lambda calculus. The highly efficient low-level programming language C. The very expressive LISP family of languages, including Scheme. And the specialized R language for statistical computing and graphics.<br />
<br />
===Python===<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
[http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <span style="color: green; font-weight: bold;">EASY</span> <br />
<br />
1. [http://inventwithpython.com/ Invent Your Own Computer Games with Python] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>“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.</blockquote><br />
<br />
2. [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
3. [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
4. [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
5. [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
6. [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
7. [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-642-30292-3 A Primer on Scientific Programming with Python]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
8. [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-540-73915-9 Python Scripting for Computational Science]<br />
<br />
<blockquote>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.<br />
<br />
The focus is on examples and applications of relevance to computational scientists.</blockquote><br />
<br />
9. [http://norvig.com/spell-correct.html How to Write a Spelling Corrector]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
===Haskell===<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
<br />
1. [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
2. [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] <br />
<br />
3. [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] <br />
<br />
4. [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
5. [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
6. [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
7. [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
===Common Lisp===<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
1. [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
2. [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
3. [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
4. [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
5. [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
6. [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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<br />
<br />
[...]<br />
<br />
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.</blockquote><br />
<br />
===Scheme===<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
1. [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
2. [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
===R===<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
[http://decisionstats.com/2012/12/08/try-and-learn-r-for-free/ Try and learn R]:<br />
<br />
<blockquote>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.</blockquote><br />
<br />
1. [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] <br />
<br />
2. [http://www.twotorials.com/ R Tutorials] <br />
<br />
3. [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
4. [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
5. [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
6. [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
7. [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
===C/C++===<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
1. [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
C++ Books<br />
<br />
1. [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
<blockquote>Written by Bjarne Stroustrup, the creator of C++, this is the world's most trusted and widely read book on C++.</blockquote><br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11807Programming resources2012-12-08T16:39:50Z<p>XiXiDu: Added the book "Algorithmic Adventures" as suggested by Viliam Bur</p>
<hr />
<div>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. <br />
<br />
Even if you are not interested to learn to program, you might want to be able to at least interpret the most basic pseudo code as you might come across various snippets of code in discussions and top-level posts outside of the main sequences.<br />
<br />
Below you will find a list of links to books and other resources. Most categories are sorted by their difficulty in ascending order. <br />
<br />
Resources that can be understood with little or no knowledge of computer science and programming are marked <span style="color: green; font-weight: bold;">EASY</span>.<br />
<br />
==How Computers Work==<br />
<br />
1. [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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."</blockquote><br />
<br />
2. [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
3. [http://www.plantation-productions.com/Webster/www.writegreatcode.com/index.html The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
4. [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
5. [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
1. [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
4. [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
5. [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
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.<br />
<br />
1. [http://www.amazon.com/Algorithmic-Adventures-From-Knowledge-Magic/dp/3540859853/ref=sr_1_1?ie=UTF8&qid=1354984556&sr=8-1&keywords=Algorithmic+Adventures+Algorithmic+Adventures Algorithmic Adventures]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.udacity.com/ Udacity] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
4. [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
5. [http://www.udacity.com/overview/Course/cs271/CourseRev/1 Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
6. [http://www.amazon.com/Computability-Logic-George-S-Boolos/dp/0521701465 Computability and Logic]<br />
<br />
<blockquote>Computability and Logic has become a classic because of its accessibility to students without a mathematical background and because it covers not simply the staple topics of an intermediate logic course, such as Godel's incompleteness theorems, but also a large number of optional topics, from Turing's theory of computability to Ramsey's theorem. Including a selection of exercises, adjusted for this edition, at the end of each chapter, it offers a new and simpler treatment of the representability of recursive functions, a traditional stumbling block for students on the way to the Godel incompleteness theorems.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
1. [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
2. [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
==Practice==<br />
<br />
1. [http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
3. [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
4. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
5. Write your own programs.<br />
<br />
==Programming Languages==<br />
<br />
Some important programming languages are the high-level scripting language Python that incorporates various programming paradigms such as iterative and functional programming. The purely functional programming language Haskell, based on lambda calculus. The highly efficient low-level programming language C. The very expressive LISP family of languages, including Scheme. And the specialized R language for statistical computing and graphics.<br />
<br />
===Python===<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
[http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <span style="color: green; font-weight: bold;">EASY</span> <br />
<br />
1. [http://inventwithpython.com/ Invent Your Own Computer Games with Python] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>“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.</blockquote><br />
<br />
2. [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
3. [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
4. [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
5. [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
6. [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
7. [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-642-30292-3 A Primer on Scientific Programming with Python]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
8. [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-540-73915-9 Python Scripting for Computational Science]<br />
<br />
<blockquote>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.<br />
<br />
The focus is on examples and applications of relevance to computational scientists.</blockquote><br />
<br />
9. [http://norvig.com/spell-correct.html How to Write a Spelling Corrector]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
===Haskell===<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
<br />
1. [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
2. [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] <br />
<br />
3. [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] <br />
<br />
4. [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
5. [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
6. [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
7. [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
===Common Lisp===<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
1. [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
2. [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
3. [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
4. [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
5. [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
6. [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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<br />
<br />
[...]<br />
<br />
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.</blockquote><br />
<br />
===Scheme===<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
1. [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
2. [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
===R===<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
[http://decisionstats.com/2012/12/08/try-and-learn-r-for-free/ Try and learn R]:<br />
<br />
<blockquote>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.</blockquote><br />
<br />
1. [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] <br />
<br />
2. [http://www.twotorials.com/ R Tutorials] <br />
<br />
3. [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
4. [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
5. [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
6. [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
7. [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
===C/C++===<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
1. [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
C++ Books<br />
<br />
1. [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
<blockquote>Written by Bjarne Stroustrup, the creator of C++, this is the world's most trusted and widely read book on C++.</blockquote><br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11806Programming resources2012-12-08T14:19:57Z<p>XiXiDu: Added an "EASY" label.</p>
<hr />
<div>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. <br />
<br />
Even if you are not interested to learn to program, you might want to be able to at least interpret the most basic pseudo code as you might come across various snippets of code in discussions and top-level posts outside of the main sequences.<br />
<br />
Below you will find a list of links to books and other resources. Most categories are sorted by their difficulty in ascending order. <br />
<br />
Resources that can be understood with little or no knowledge of computer science and programming are marked <span style="color: green; font-weight: bold;">EASY</span>.<br />
<br />
==How Computers Work==<br />
<br />
1. [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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."</blockquote><br />
<br />
2. [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
3. [http://www.plantation-productions.com/Webster/www.writegreatcode.com/index.html The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
4. [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
5. [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
1. [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
4. [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
5. [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
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.<br />
<br />
1. [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
2. [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
3. [http://www.udacity.com/ Udacity] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [http://www.udacity.com/overview/Course/cs271/CourseRev/1 Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
5. [http://www.amazon.com/Computability-Logic-George-S-Boolos/dp/0521701465 Computability and Logic]<br />
<br />
<blockquote>Computability and Logic has become a classic because of its accessibility to students without a mathematical background and because it covers not simply the staple topics of an intermediate logic course, such as Godel's incompleteness theorems, but also a large number of optional topics, from Turing's theory of computability to Ramsey's theorem. Including a selection of exercises, adjusted for this edition, at the end of each chapter, it offers a new and simpler treatment of the representability of recursive functions, a traditional stumbling block for students on the way to the Godel incompleteness theorems.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
1. [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
2. [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
==Practice==<br />
<br />
1. [http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
3. [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
4. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
5. Write your own programs.<br />
<br />
==Programming Languages==<br />
<br />
Some important programming languages are the high-level scripting language Python that incorporates various programming paradigms such as iterative and functional programming. The purely functional programming language Haskell, based on lambda calculus. The highly efficient low-level programming language C. The very expressive LISP family of languages, including Scheme. And the specialized R language for statistical computing and graphics.<br />
<br />
===Python===<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
[http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <span style="color: green; font-weight: bold;">EASY</span> <br />
<br />
1. [http://inventwithpython.com/ Invent Your Own Computer Games with Python] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>“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.</blockquote><br />
<br />
2. [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
3. [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
4. [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
5. [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
6. [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
7. [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-642-30292-3 A Primer on Scientific Programming with Python]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
8. [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-540-73915-9 Python Scripting for Computational Science]<br />
<br />
<blockquote>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.<br />
<br />
The focus is on examples and applications of relevance to computational scientists.</blockquote><br />
<br />
9. [http://norvig.com/spell-correct.html How to Write a Spelling Corrector]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
===Haskell===<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
<br />
1. [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
2. [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] <br />
<br />
3. [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] <br />
<br />
4. [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
5. [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
6. [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
7. [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
===Common Lisp===<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
1. [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
2. [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
3. [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
4. [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
5. [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
6. [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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<br />
<br />
[...]<br />
<br />
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.</blockquote><br />
<br />
===Scheme===<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
1. [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
2. [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
===R===<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
[http://decisionstats.com/2012/12/08/try-and-learn-r-for-free/ Try and learn R]:<br />
<br />
<blockquote>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.</blockquote><br />
<br />
1. [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] <br />
<br />
2. [http://www.twotorials.com/ R Tutorials] <br />
<br />
3. [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
4. [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
5. [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
6. [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
7. [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
===C/C++===<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
1. [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
C++ Books<br />
<br />
1. [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps] <span style="color: green; font-weight: bold;">EASY</span><br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
<blockquote>Written by Bjarne Stroustrup, the creator of C++, this is the world's most trusted and widely read book on C++.</blockquote><br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11805Programming resources2012-12-08T13:57:03Z<p>XiXiDu: </p>
<hr />
<div>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. <br />
<br />
Even if you are not interested to learn to program, you might want to be able to at least interpret the most basic pseudo code as you might come across various snippets of code in discussions and top-level posts outside of the main sequences.<br />
<br />
Below you will find a list of links to books and other resources. Most categories are sorted by their difficulty in ascending order. <br />
<br />
==How Computers Work==<br />
<br />
1. [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software]<br />
<br />
<blockquote>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."</blockquote><br />
<br />
2. [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
3. [http://www.plantation-productions.com/Webster/www.writegreatcode.com/index.html The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
4. [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
5. [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
1. [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
4. [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
5. [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
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.<br />
<br />
1. [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
2. [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
3. [http://www.udacity.com/ Udacity]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [http://www.udacity.com/overview/Course/cs271/CourseRev/1 Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
5. [http://www.amazon.com/Computability-Logic-George-S-Boolos/dp/0521701465 Computability and Logic]<br />
<br />
<blockquote>Computability and Logic has become a classic because of its accessibility to students without a mathematical background and because it covers not simply the staple topics of an intermediate logic course, such as Godel's incompleteness theorems, but also a large number of optional topics, from Turing's theory of computability to Ramsey's theorem. Including a selection of exercises, adjusted for this edition, at the end of each chapter, it offers a new and simpler treatment of the representability of recursive functions, a traditional stumbling block for students on the way to the Godel incompleteness theorems.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
1. [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
2. [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
==Practice==<br />
<br />
1. [http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
3. [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
4. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
5. Write your own programs.<br />
<br />
==Programming Languages==<br />
<br />
Some important programming languages are the high-level scripting language Python that incorporates various programming paradigms such as iterative and functional programming. The purely functional programming language Haskell, based on lambda calculus. The highly efficient low-level programming language C. The very expressive LISP family of languages, including Scheme. And the specialized R language for statistical computing and graphics.<br />
<br />
===Python===<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
[http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <br />
<br />
1. [http://inventwithpython.com/ Invent Your Own Computer Games with Python]<br />
<br />
<blockquote>“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.</blockquote><br />
<br />
2. [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
3. [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
4. [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
5. [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
6. [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
7. [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-642-30292-3 A Primer on Scientific Programming with Python]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
8. [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-540-73915-9 Python Scripting for Computational Science]<br />
<br />
<blockquote>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.<br />
<br />
The focus is on examples and applications of relevance to computational scientists.</blockquote><br />
<br />
9. [http://norvig.com/spell-correct.html How to Write a Spelling Corrector]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
===Haskell===<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
<br />
1. [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
2. [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] 3. [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] 4. [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
5. [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
6. [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
7. [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
===Common Lisp===<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
1. [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
2. [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
3. [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
4. [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
5. [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
6. [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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<br />
<br />
[...]<br />
<br />
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.</blockquote><br />
<br />
===Scheme===<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
1. [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
2. [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
===R===<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
[http://decisionstats.com/2012/12/08/try-and-learn-r-for-free/ Try and learn R]:<br />
<br />
<blockquote>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.</blockquote><br />
<br />
1. [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] <br />
<br />
2. [http://www.twotorials.com/ R Tutorials] <br />
<br />
3. [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
4. [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
5. [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
6. [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
7. [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
===C/C++===<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
1. [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
C++ Books<br />
<br />
1. [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
<blockquote>Written by Bjarne Stroustrup, the creator of C++, this is the world's most trusted and widely read book on C++.</blockquote><br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11804Programming resources2012-12-08T13:56:29Z<p>XiXiDu: Fixed a broken link.</p>
<hr />
<div>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. <br />
<br />
Even if you are not interested to learn to program, you might want to be able to at least interpret the most basic pseudo code as you might come across various snippets of code in discussions and top-level posts outside of the main sequences.<br />
<br />
Below you will find a list of links to books and other resources. Most categories are sorted by their difficulty in ascending order. <br />
<br />
==How Computers Work==<br />
<br />
1. [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software]<br />
<br />
<blockquote>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."</blockquote><br />
<br />
2. [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
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)] <br />
<br />
Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
4. [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
5. [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
1. [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
4. [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
5. [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
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.<br />
<br />
1. [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
2. [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
3. [http://www.udacity.com/ Udacity]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [http://www.udacity.com/overview/Course/cs271/CourseRev/1 Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
5. [http://www.amazon.com/Computability-Logic-George-S-Boolos/dp/0521701465 Computability and Logic]<br />
<br />
<blockquote>Computability and Logic has become a classic because of its accessibility to students without a mathematical background and because it covers not simply the staple topics of an intermediate logic course, such as Godel's incompleteness theorems, but also a large number of optional topics, from Turing's theory of computability to Ramsey's theorem. Including a selection of exercises, adjusted for this edition, at the end of each chapter, it offers a new and simpler treatment of the representability of recursive functions, a traditional stumbling block for students on the way to the Godel incompleteness theorems.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
1. [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
2. [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
==Practice==<br />
<br />
1. [http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
3. [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
4. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
5. Write your own programs.<br />
<br />
==Programming Languages==<br />
<br />
Some important programming languages are the high-level scripting language Python that incorporates various programming paradigms such as iterative and functional programming. The purely functional programming language Haskell, based on lambda calculus. The highly efficient low-level programming language C. The very expressive LISP family of languages, including Scheme. And the specialized R language for statistical computing and graphics.<br />
<br />
===Python===<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
[http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <br />
<br />
1. [http://inventwithpython.com/ Invent Your Own Computer Games with Python]<br />
<br />
<blockquote>“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.</blockquote><br />
<br />
2. [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
3. [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
4. [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
5. [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
6. [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
7. [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-642-30292-3 A Primer on Scientific Programming with Python]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
8. [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-540-73915-9 Python Scripting for Computational Science]<br />
<br />
<blockquote>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.<br />
<br />
The focus is on examples and applications of relevance to computational scientists.</blockquote><br />
<br />
9. [http://norvig.com/spell-correct.html How to Write a Spelling Corrector]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
===Haskell===<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
<br />
1. [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
2. [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] 3. [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] 4. [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
5. [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
6. [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
7. [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
===Common Lisp===<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
1. [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
2. [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
3. [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
4. [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
5. [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
6. [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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<br />
<br />
[...]<br />
<br />
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.</blockquote><br />
<br />
===Scheme===<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
1. [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
2. [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
===R===<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
[http://decisionstats.com/2012/12/08/try-and-learn-r-for-free/ Try and learn R]:<br />
<br />
<blockquote>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.</blockquote><br />
<br />
1. [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] <br />
<br />
2. [http://www.twotorials.com/ R Tutorials] <br />
<br />
3. [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
4. [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
5. [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
6. [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
7. [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
===C/C++===<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
1. [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
C++ Books<br />
<br />
1. [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
<blockquote>Written by Bjarne Stroustrup, the creator of C++, this is the world's most trusted and widely read book on C++.</blockquote><br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11802Programming resources2012-12-08T12:57:11Z<p>XiXiDu: Added a free online course on learning R</p>
<hr />
<div>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. <br />
<br />
Even if you are not interested to learn to program, you might want to be able to at least interpret the most basic pseudo code as you might come across various snippets of code in discussions and top-level posts outside of the main sequences.<br />
<br />
Below you will find a list of links to books and other resources. Most categories are sorted by their difficulty in ascending order. <br />
<br />
==How Computers Work==<br />
<br />
1. [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software]<br />
<br />
<blockquote>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."</blockquote><br />
<br />
2. [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
3. [http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/www.writegreatcode.com/ The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
4. [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
5. [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
1. [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
4. [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
5. [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
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.<br />
<br />
1. [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
2. [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
3. [http://www.udacity.com/ Udacity]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [http://www.udacity.com/overview/Course/cs271/CourseRev/1 Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
5. [http://www.amazon.com/Computability-Logic-George-S-Boolos/dp/0521701465 Computability and Logic]<br />
<br />
<blockquote>Computability and Logic has become a classic because of its accessibility to students without a mathematical background and because it covers not simply the staple topics of an intermediate logic course, such as Godel's incompleteness theorems, but also a large number of optional topics, from Turing's theory of computability to Ramsey's theorem. Including a selection of exercises, adjusted for this edition, at the end of each chapter, it offers a new and simpler treatment of the representability of recursive functions, a traditional stumbling block for students on the way to the Godel incompleteness theorems.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
1. [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
2. [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
==Practice==<br />
<br />
1. [http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
3. [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
4. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
5. Write your own programs.<br />
<br />
==Programming Languages==<br />
<br />
Some important programming languages are the high-level scripting language Python that incorporates various programming paradigms such as iterative and functional programming. The purely functional programming language Haskell, based on lambda calculus. The highly efficient low-level programming language C. The very expressive LISP family of languages, including Scheme. And the specialized R language for statistical computing and graphics.<br />
<br />
===Python===<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
[http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <br />
<br />
1. [http://inventwithpython.com/ Invent Your Own Computer Games with Python]<br />
<br />
<blockquote>“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.</blockquote><br />
<br />
2. [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
3. [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
4. [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
5. [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
6. [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
7. [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-642-30292-3 A Primer on Scientific Programming with Python]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
8. [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-540-73915-9 Python Scripting for Computational Science]<br />
<br />
<blockquote>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.<br />
<br />
The focus is on examples and applications of relevance to computational scientists.</blockquote><br />
<br />
9. [http://norvig.com/spell-correct.html How to Write a Spelling Corrector]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
===Haskell===<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
<br />
1. [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
2. [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] 3. [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] 4. [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
5. [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
6. [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
7. [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
===Common Lisp===<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
1. [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
2. [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
3. [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
4. [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
5. [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
6. [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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<br />
<br />
[...]<br />
<br />
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.</blockquote><br />
<br />
===Scheme===<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
1. [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
2. [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
===R===<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
[http://decisionstats.com/2012/12/08/try-and-learn-r-for-free/ Try and learn R]:<br />
<br />
<blockquote>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.</blockquote><br />
<br />
1. [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] <br />
<br />
2. [http://www.twotorials.com/ R Tutorials] <br />
<br />
3. [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
4. [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
5. [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
6. [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
7. [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
===C/C++===<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
1. [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
C++ Books<br />
<br />
1. [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
<blockquote>Written by Bjarne Stroustrup, the creator of C++, this is the world's most trusted and widely read book on C++.</blockquote><br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11801Programming resources2012-12-08T12:31:31Z<p>XiXiDu: </p>
<hr />
<div>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. <br />
<br />
Even if you are not interested to learn to program, you might want to be able to at least interpret the most basic pseudo code as you might come across various snippets of code in discussions and top-level posts outside of the main sequences.<br />
<br />
Below you will find a list of links to books and other resources. Most categories are sorted by their difficulty in ascending order. <br />
<br />
==How Computers Work==<br />
<br />
1. [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software]<br />
<br />
<blockquote>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."</blockquote><br />
<br />
2. [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
3. [http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/www.writegreatcode.com/ The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
4. [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
5. [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
1. [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
4. [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
5. [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
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.<br />
<br />
1. [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
2. [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
3. [http://www.udacity.com/ Udacity]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [http://www.udacity.com/overview/Course/cs271/CourseRev/1 Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
5. [http://www.amazon.com/Computability-Logic-George-S-Boolos/dp/0521701465 Computability and Logic]<br />
<br />
<blockquote>Computability and Logic has become a classic because of its accessibility to students without a mathematical background and because it covers not simply the staple topics of an intermediate logic course, such as Godel's incompleteness theorems, but also a large number of optional topics, from Turing's theory of computability to Ramsey's theorem. Including a selection of exercises, adjusted for this edition, at the end of each chapter, it offers a new and simpler treatment of the representability of recursive functions, a traditional stumbling block for students on the way to the Godel incompleteness theorems.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
1. [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
2. [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
==Practice==<br />
<br />
1. [http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
3. [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
4. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
5. Write your own programs.<br />
<br />
==Programming Languages==<br />
<br />
Some important programming languages are the high-level scripting language Python that incorporates various programming paradigms such as iterative and functional programming. The purely functional programming language Haskell, based on lambda calculus. The highly efficient low-level programming language C. The very expressive LISP family of languages, including Scheme. And the specialized R language for statistical computing and graphics.<br />
<br />
===Python===<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
[http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <br />
<br />
1. [http://inventwithpython.com/ Invent Your Own Computer Games with Python]<br />
<br />
<blockquote>“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.</blockquote><br />
<br />
2. [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
3. [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
4. [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
5. [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
6. [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
7. [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-642-30292-3 A Primer on Scientific Programming with Python]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
8. [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-540-73915-9 Python Scripting for Computational Science]<br />
<br />
<blockquote>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.<br />
<br />
The focus is on examples and applications of relevance to computational scientists.</blockquote><br />
<br />
9. [http://norvig.com/spell-correct.html How to Write a Spelling Corrector]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
===Haskell===<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
<br />
1. [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
2. [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] 3. [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] 4. [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
5. [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
6. [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
7. [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
===Common Lisp===<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
1. [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
2. [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
3. [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
4. [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
5. [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
6. [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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<br />
<br />
[...]<br />
<br />
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.</blockquote><br />
<br />
===Scheme===<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
1. [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
2. [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
===R===<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
<br />
1. [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] <br />
<br />
2. [http://www.twotorials.com/ R Tutorials] <br />
<br />
3. [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
4. [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
5. [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
6. [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
7. [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
===C/C++===<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
1. [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
C++ Books<br />
<br />
1. [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
<blockquote>Written by Bjarne Stroustrup, the creator of C++, this is the world's most trusted and widely read book on C++.</blockquote><br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11800Programming resources2012-12-08T12:24:54Z<p>XiXiDu: Added 2 books and 1 tutorial.</p>
<hr />
<div>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. <br />
<br />
Even if you are not interested to learn to program, you might want to be able to at least interpret the most basic pseudo code as you might come across various snippets of code in discussions and top-level posts outside of the main sequences.<br />
<br />
Below you will find a list of links to books and other resources. Most categories are sorted by their difficulty in ascending order. <br />
<br />
==How Computers Work==<br />
<br />
1. [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software]<br />
<br />
<blockquote>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."</blockquote><br />
<br />
2. [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
3. [http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/www.writegreatcode.com/ The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
4. [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
5. [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
1. [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
4. [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
5. [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
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.<br />
<br />
1. [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
2. [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
3. [http://www.udacity.com/ Udacity]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [http://www.udacity.com/overview/Course/cs271/CourseRev/1 Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
5. [http://www.amazon.com/Computability-Logic-George-S-Boolos/dp/0521701465 Computability and Logic]<br />
<br />
<blockquote>Computability and Logic has become a classic because of its accessibility to students without a mathematical background and because it covers not simply the staple topics of an intermediate logic course, such as Godel's incompleteness theorems, but also a large number of optional topics, from Turing's theory of computability to Ramsey's theorem. Including a selection of exercises, adjusted for this edition, at the end of each chapter, it offers a new and simpler treatment of the representability of recursive functions, a traditional stumbling block for students on the way to the Godel incompleteness theorems.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
1. [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
2. [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
==Practice==<br />
<br />
1. [http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
3. [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
4. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
5. Write your own programs.<br />
<br />
==Programming Languages==<br />
<br />
Some important programming languages are the high-level scripting language Python that incorporates various programming paradigms such as iterative and functional programming. The purely functional programming language Haskell, based on lambda calculus. The highly efficient low-level programming language C. The very expressive LISP family of languages, including Scheme. And the specialized R language for statistical computing and graphics.<br />
<br />
===Python===<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
[http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <br />
<br />
1. [http://inventwithpython.com/ Invent Your Own Computer Games with Python]<br />
<br />
<blockquote>“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.</blockquote><br />
<br />
2. [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
3. [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
4. [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
5. [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
6. [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
7. [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-642-30292-3 A Primer on Scientific Programming with Python]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
8. [http://www.springer.com/mathematics/computational+science+%26+engineering/book/978-3-540-73915-9 Python Scripting for Computational Science]<br />
<br />
<blockquote>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.<br />
<br />
The focus is on examples and applications of relevance to computational scientists.</blockquote><br />
<br />
9. [http://norvig.com/spell-correct.html How to Write a Spelling Corrector]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
===Haskell===<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
<br />
1. [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
2. [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] 3. [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] 4. [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
5. [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
6. [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
7. [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
===Common Lisp===<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
1. [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
2. [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
3. [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
4. [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
5. [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
6. [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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<br />
<br />
[...]<br />
<br />
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.</blockquote><br />
<br />
===Scheme===<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
1. [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
2. [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
===R===<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
<br />
1. [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] 2. [http://www.twotorials.com/ R Tutorials] 3. [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
4. [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
5. [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
6. [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
7. [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
===C/C++===<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
1. [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
2. [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
3. [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
4. [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
C++ Books<br />
<br />
1. [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps]<br />
<br />
2. [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
3. [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11799Programming resources2012-12-08T12:12:49Z<p>XiXiDu: </p>
<hr />
<div>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. <br />
<br />
Even if you are not interested to learn to program, you might want to be able to at least interpret the most basic pseudo code as you might come across various snippets of code in discussions and top-level posts outside of the main sequences.<br />
<br />
Below you will find a list of links to books and other resources. Most categories are sorted by their difficulty in ascending order. <br />
<br />
==How Computers Work==<br />
<br />
1. [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software]<br />
<br />
<blockquote>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."</blockquote><br />
<br />
2. [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
3. [http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/www.writegreatcode.com/ The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
4. [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
5. [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
1. [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
4. [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
5. [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
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.<br />
<br />
1. [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
2. [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
3. [http://www.udacity.com/ Udacity]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [http://www.udacity.com/overview/Course/cs271/CourseRev/1 Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
5. [http://www.amazon.com/Computability-Logic-George-S-Boolos/dp/0521701465 Computability and Logic]<br />
<br />
<blockquote>Computability and Logic has become a classic because of its accessibility to students without a mathematical background and because it covers not simply the staple topics of an intermediate logic course, such as Godel's incompleteness theorems, but also a large number of optional topics, from Turing's theory of computability to Ramsey's theorem. Including a selection of exercises, adjusted for this edition, at the end of each chapter, it offers a new and simpler treatment of the representability of recursive functions, a traditional stumbling block for students on the way to the Godel incompleteness theorems.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
1. [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
2. [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
==Practice==<br />
<br />
1. [http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
3. [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
4. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
5. Write your own programs.<br />
<br />
==Programming Languages==<br />
<br />
Some important programming languages are the high-level scripting language Python that incorporates various programming paradigms such as iterative and functional programming. The purely functional programming language Haskell, based on lambda calculus. The highly efficient low-level programming language C. The very expressive LISP family of languages, including Scheme. And the specialized R language for statistical computing and graphics.<br />
<br />
===Python===<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
[http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <br />
<br />
1. [http://inventwithpython.com/ Invent Your Own Computer Games with Python]<br />
<br />
<blockquote>“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.</blockquote><br />
<br />
2. [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
3. [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
4. [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
5. [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
6. [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
===Haskell===<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
<br />
1. [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
2. [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] 3. [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] 4. [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
5. [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
6. [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
7. [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
===Common Lisp===<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
1. [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
2. [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
3. [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
4. [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
5. [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
6. [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
===Scheme===<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
1. [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
2. [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
===R===<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
<br />
1. [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] 2. [http://www.twotorials.com/ R Tutorials] 3. [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
4. [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
5. [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
6. [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
7. [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
===C/C++===<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
1. [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
2. [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
3. [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
4. [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
C++ Books<br />
<br />
1. [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps]<br />
<br />
2. [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
3. [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11798Programming resources2012-12-08T12:07:16Z<p>XiXiDu: </p>
<hr />
<div>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. <br />
<br />
Even if you are not interested to learn to program, you might want to be able to at least interpret the most basic pseudo code as you might come across various snippets of code in discussions and top-level posts outside of the main sequences.<br />
<br />
Below you will find a list of links to books and other resources. Most categories are sorted by their difficulty in ascending order. <br />
<br />
==How Computers Work==<br />
<br />
1. [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software]<br />
<br />
<blockquote>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."</blockquote><br />
<br />
2. [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
3. [http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/www.writegreatcode.com/ The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
4. [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
5. [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
1. [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
4. [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
5. [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
1. [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
2. [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
3. [http://www.udacity.com/ Udacity]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [http://www.udacity.com/overview/Course/cs271/CourseRev/1 Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
5. [http://www.amazon.com/Computability-Logic-George-S-Boolos/dp/0521701465 Computability and Logic]<br />
<br />
<blockquote>Computability and Logic has become a classic because of its accessibility to students without a mathematical background and because it covers not simply the staple topics of an intermediate logic course, such as Godel's incompleteness theorems, but also a large number of optional topics, from Turing's theory of computability to Ramsey's theorem. Including a selection of exercises, adjusted for this edition, at the end of each chapter, it offers a new and simpler treatment of the representability of recursive functions, a traditional stumbling block for students on the way to the Godel incompleteness theorems.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
1. [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
2. [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
==Practice==<br />
<br />
1. [http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
3. [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
4. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
5. Write your own programs.<br />
<br />
==Programming Languages==<br />
<br />
Some important programming languages are the high-level scripting language Python that incorporates various programming paradigms such as iterative and functional programming. The purely functional programming language Haskell, based on lambda calculus. The highly efficient low-level programming language C. The very expressive LISP family of languages, including Scheme. And the specialized R language for statistical computing and graphics.<br />
<br />
===Python===<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
[http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <br />
<br />
1. [http://inventwithpython.com/ Invent Your Own Computer Games with Python]<br />
<br />
<blockquote>“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.</blockquote><br />
<br />
2. [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
3. [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
4. [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
5. [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
6. [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
===Haskell===<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
<br />
1. [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
2. [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] 3. [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] 4. [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
5. [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
6. [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
7. [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
===Common Lisp===<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
1. [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
2. [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
3. [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
4. [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
5. [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
6. [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
===Scheme===<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
1. [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
2. [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
===R===<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
<br />
1. [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] 2. [http://www.twotorials.com/ R Tutorials] 3. [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
4. [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
5. [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
6. [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
7. [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
===C/C++===<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
1. [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
2. [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
3. [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
4. [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
C++ Books<br />
<br />
1. [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps]<br />
<br />
2. [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
3. [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11797Programming resources2012-12-08T12:06:01Z<p>XiXiDu: </p>
<hr />
<div>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. <br />
<br />
Even if you are not interested to learn to program, you might want to be able to at least interpret the most basic pseudo code as you might come across various snippets of code in discussions and top-level posts outside of the main sequences.<br />
<br />
Below you will find a list of links to books and other resources. Most categories are sorted by their difficulty in ascending order. <br />
<br />
==How Computers Work==<br />
<br />
1. [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software]<br />
<br />
<blockquote>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."</blockquote><br />
<br />
2. [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
3. [http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/www.writegreatcode.com/ The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
4. [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
5. [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
1. [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
4. [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
5. [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
1. [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
2. [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
3. [http://www.udacity.com/ Udacity]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [http://www.udacity.com/overview/Course/cs271/CourseRev/1 Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
5. [http://www.amazon.com/Computability-Logic-George-S-Boolos/dp/0521701465 Computability and Logic]<br />
<br />
<blockquote>Computability and Logic has become a classic because of its accessibility to students without a mathematical background and because it covers not simply the staple topics of an intermediate logic course, such as Godel's incompleteness theorems, but also a large number of optional topics, from Turing's theory of computability to Ramsey's theorem. Including a selection of exercises, adjusted for this edition, at the end of each chapter, it offers a new and simpler treatment of the representability of recursive functions, a traditional stumbling block for students on the way to the Godel incompleteness theorems.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
1. [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
2. [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
==Practice==<br />
<br />
1. [http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
3. [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
4. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
5. Write your own programs.<br />
<br />
==Programming Languages==<br />
<br />
Some important programming languages are the high-level scripting language Python that incorporates various programming paradigms such as iterative and functional programming. The purely function programming language Haskell, based on lambda calculus. The highly efficient low-level programming language C. The very expressive LISP family of languages, including Scheme. And the specialized R language for statistical computing and graphics.<br />
<br />
===Python===<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
[http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <br />
<br />
1. [http://inventwithpython.com/ Invent Your Own Computer Games with Python]<br />
<br />
<blockquote>“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.</blockquote><br />
<br />
2. [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
3. [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
4. [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
5. [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
6. [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
===Haskell===<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
<br />
1. [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
2. [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] 3. [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] 4. [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
5. [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
6. [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
7. [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
===Common Lisp===<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
1. [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
2. [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
3. [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
4. [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
5. [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
6. [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
===Scheme===<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
1. [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
2. [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
===R===<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
<br />
1. [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] 2. [http://www.twotorials.com/ R Tutorials] 3. [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
4. [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
5. [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
6. [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
7. [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
===C/C++===<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
1. [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
2. [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
3. [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
4. [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
C++ Books<br />
<br />
1. [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps]<br />
<br />
2. [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
3. [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11796Programming resources2012-12-08T11:43:50Z<p>XiXiDu: </p>
<hr />
<div>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. <br />
<br />
Even if you are not interested to learn to program, you might want to be able to at least interpret the most basic pseudo code as you might come across various snippets of code in discussions and top-level posts outside of the main sequences.<br />
<br />
Below you will find a list of links to books and other resources. Most categories are sorted by their difficulty in ascending order. <br />
<br />
==How Computers Work==<br />
<br />
1. [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software]<br />
<br />
<blockquote>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."</blockquote><br />
<br />
2. [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
3. [http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/www.writegreatcode.com/ The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
4. [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
5. [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
1. [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
4. [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
5. [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
1. [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
2. [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
3. [http://www.udacity.com/ Udacity]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [http://www.udacity.com/overview/Course/cs271/CourseRev/1 Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
5. [http://www.amazon.com/Computability-Logic-George-S-Boolos/dp/0521701465 Computability and Logic]<br />
<br />
<blockquote>Computability and Logic has become a classic because of its accessibility to students without a mathematical background and because it covers not simply the staple topics of an intermediate logic course, such as Godel's incompleteness theorems, but also a large number of optional topics, from Turing's theory of computability to Ramsey's theorem. Including a selection of exercises, adjusted for this edition, at the end of each chapter, it offers a new and simpler treatment of the representability of recursive functions, a traditional stumbling block for students on the way to the Godel incompleteness theorems.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
1. [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
2. [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
==Practice==<br />
<br />
1. [http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
3. [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
4. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
5. Write your own programs.<br />
<br />
==Python==<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
[http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <br />
<br />
1. [http://inventwithpython.com/ Invent Your Own Computer Games with Python]<br />
<br />
<blockquote>“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.</blockquote><br />
<br />
2. [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
3. [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
4. [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
5. [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
6. [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
==Haskell==<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
<br />
1. [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
2. [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] 3. [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] 4. [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
5. [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
6. [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
7. [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
==Common Lisp==<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
1. [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
2. [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
3. [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
4. [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
5. [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
6. [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==Scheme==<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
1. [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
2. [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
==R==<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
<br />
1. [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] 2. [http://www.twotorials.com/ R Tutorials] 3. [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
4. [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
5. [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
6. [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
7. [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
==C/C++==<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
1. [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
2. [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
3. [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
4. [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
C++ Books<br />
<br />
1. [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps]<br />
<br />
2. [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
3. [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11795Programming resources2012-12-08T11:40:22Z<p>XiXiDu: </p>
<hr />
<div>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. <br />
<br />
Even if you are not interested to learn to program, you might want to be able to at least interpret the most basic pseudo code as you might come across various snippets of code in discussions and top-level posts outside of the main sequences.<br />
<br />
Below you will find a list of links to books and other resources. Most categories are sorted by their difficulty in ascending order. <br />
<br />
==How Computers Work==<br />
<br />
1. [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software]<br />
<br />
<blockquote>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."</blockquote><br />
<br />
2. [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
3. [http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/www.writegreatcode.com/ The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
4. [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
5. [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
1. [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
4. [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
5. [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
1. [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
2. [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
3. [http://www.udacity.com/ Udacity]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [http://www.udacity.com/overview/Course/cs271/CourseRev/1 Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
1. [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
2. [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
==Practice==<br />
<br />
1. [http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
3. [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
4. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
5. Write your own programs.<br />
<br />
==Python==<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
[http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <br />
<br />
1. [http://inventwithpython.com/ Invent Your Own Computer Games with Python]<br />
<br />
<blockquote>“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.</blockquote><br />
<br />
2. [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
3. [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
4. [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
5. [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
6. [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
==Haskell==<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
<br />
1. [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
2. [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] 3. [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] 4. [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
5. [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
6. [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
7. [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
==Common Lisp==<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
1. [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
2. [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
3. [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
4. [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
5. [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
6. [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==Scheme==<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
1. [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
2. [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
==R==<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
<br />
1. [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] 2. [http://www.twotorials.com/ R Tutorials] 3. [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
4. [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
5. [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
6. [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
7. [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
==C/C++==<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
1. [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
2. [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
3. [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
4. [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
C++ Books<br />
<br />
1. [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps]<br />
<br />
2. [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
3. [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11794Programming resources2012-12-08T11:35:40Z<p>XiXiDu: Added a description.</p>
<hr />
<div>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. <br />
<br />
Even if you are not interested to learn to program, you might want to be able to at least interpret the most basic pseudo code as you might come across various snippets of code in discussions and top-level posts outside of the main sequences.<br />
<br />
Below you will find a list of links to books and other resources. Most categories are sorted by their difficulty in ascending order. <br />
<br />
==How Computers Work==<br />
<br />
1. [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software]<br />
<br />
<blockquote>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."</blockquote><br />
<br />
2. [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
3. [http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/www.writegreatcode.com/ The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
4. [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
5. [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
1. [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
4. [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
5. [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
1. [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
2. [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
3. [http://www.udacity.com/ Udacity]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [https://www.ai-class.com/ Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
1. [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
2. [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
==Practice==<br />
<br />
1. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
3. [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
4. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
5. Write your own programs.<br />
<br />
==Python==<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
[http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <br />
<br />
1. [http://inventwithpython.com/ Invent Your Own Computer Games with Python]<br />
<br />
<blockquote>“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.</blockquote><br />
<br />
2. [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
3. [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
4. [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
5. [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
6. [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
==Haskell==<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
<br />
1. [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
2. [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] 3. [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] 4. [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
5. [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
6. [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
7. [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
==Common Lisp==<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
1. [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
2. [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
3. [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
4. [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
5. [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
6. [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==Scheme==<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
1. [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
2. [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
==R==<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
<br />
1. [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] 2. [http://www.twotorials.com/ R Tutorials] 3. [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
4. [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
5. [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
6. [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
7. [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
==C/C++==<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
1. [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
2. [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
3. [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
4. [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
C++ Books<br />
<br />
1. [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps]<br />
<br />
2. [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
3. [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11793Programming resources2012-12-08T11:25:48Z<p>XiXiDu: </p>
<hr />
<div>==How Computers Work==<br />
<br />
1. [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software]<br />
<br />
<blockquote>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."</blockquote><br />
<br />
2. [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
3. [http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/www.writegreatcode.com/ The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
4. [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
5. [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
1. [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
4. [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
5. [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
1. [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
2. [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
3. [http://www.udacity.com/ Udacity]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [https://www.ai-class.com/ Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
1. [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
2. [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
==Practice==<br />
<br />
1. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
3. [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
4. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
5. Write your own programs.<br />
<br />
==Python==<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] is an open-source Python Integrated Development Environment (IDE)<br />
<br />
[http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <br />
<br />
1. [http://inventwithpython.com/ Invent Your Own Computer Games with Python]<br />
<br />
<blockquote>“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.</blockquote><br />
<br />
2. [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
3. [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
4. [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
5. [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
6. [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
==Haskell==<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
<br />
1. [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
2. [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] 3. [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] 4. [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
5. [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
6. [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
7. [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
==Common Lisp==<br />
<br />
[http://www.clisp.org/ GNU CLISP (compiler, runtime)] is an implementation of the programming language Common Lisp. CLISP is extremely portable, running on almost all Unix-based operating systems as well as on Microsoft Windows.<br />
<br />
1. [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
2. [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
3. [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
4. [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
5. [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
6. [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==Scheme==<br />
<br />
To get started coding Scheme install [http://racket-lang.org/ Racket] and select R5RS and R6RS (the standard dialects of Scheme).<br />
<br />
1. [http://www.amazon.com/Little-Schemer-Daniel-P-Friedman/dp/0262560992 The Little Schemer]<br />
<br />
<blockquote>The Little Schemer introduces computing as an extension of arithmetic and algebra ;things that everyone studies in grade school and high school. It introduces programs as recursive functions and briefly discusses the limits of what computers can do. The authors use the programming language Scheme, and interesting foods to illustrate these abstract ideas.</blockquote><br />
<br />
2. [http://www.amazon.com/Scheme-Programming-Language-Kent-Dybvig/dp/026251298X/ref=pd_sim_b_4 The Scheme Programming Language]<br />
<br />
<blockquote>Scheme is a general-purpose programming language, descended from Algol and Lisp, widely used in computing education and research and a broad range of industrial applications. This thoroughly updated edition of The Scheme Programming Language provides an introduction to Scheme and a definitive reference for standard Scheme, presented in a clear and concise manner. Written for professionals and students with some prior programming experience, it begins by leading the programmer gently through the basics of Scheme and continues with an introduction to some of the more advanced features of the language.</blockquote><br />
<br />
==R==<br />
<br />
[http://rstudio.org/ RStudio] is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
<br />
1. [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] 2. [http://www.twotorials.com/ R Tutorials] 3. [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
4. [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
5. [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
6. [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
7. [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
==C/C++==<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
1. [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
2. [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
3. [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
4. [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plus]<br />
<br />
C++ Books<br />
<br />
1. [http://www.amazon.com/Programming-Easy-Steps-Mike-McGrath/dp/1840784326/ref=sr_1_1?s=books&ie=UTF8&qid=1354962624&sr=1-1&keywords=c%2B%2B+programming C++ Programming in Easy Steps]<br />
<br />
2. [http://www.amazon.com/Accelerated-C-Practical-Programming-Example/dp/020170353X/ref=sr_1_1?s=books&ie=UTF8&qid=1354962654&sr=1-1&keywords=accelerated+c%2B%2B Accelerated C++: Practical Programming by Example]<br />
<br />
3. [http://www.amazon.com/C-Programming-Language-Special/dp/0201700735/ref=sr_1_3?s=books&ie=UTF8&qid=1354962691&sr=1-3&keywords=the+c%2B%2B+programming+language The C++ Programming Language]<br />
<br />
==Help sites==<br />
<br />
* [http://stackoverflow.com/ Stack Overflow]<br />
<br />
==Competitions==<br />
<br />
* [http://projecteuler.net/ Project Euler]<br />
<br />
==LessWrong Programming Related Posts==<br />
<br />
* [http://lesswrong.com/lw/2rb/why_learning_programming_is_a_great_idea_even_if/ Why learning programming is a great idea even if you'd never want to code for a living]<br />
* [http://lesswrong.com/lw/4yv/i_want_to_learn_programming/ I want to learn programming]<br />
* [http://lesswrong.com/lw/55y/are_functional_languages_the_future_of_programming/ Are Functional languages the future of programming?]<br />
* Colonization models: [http://lesswrong.com/lw/5q1/colonization_models_a_programming_tutorial_part_12/ a programming tutorial]; [http://lesswrong.com/lw/5q7/colonization_models_a_tutorial_on_computational/ a tutorial on computational Bayesian inference]<br />
* [http://lesswrong.com/r/discussion/lw/6gz/khan_academy_introduction_to_programming_and/ Khan Academy: Introduction to programming and computer science]<br />
* [http://lesswrong.com/lw/7vd/free_tutoring_in_mathprogramming/ Free Tutoring in Math/Programming]<br />
* [http://lesswrong.com/lw/bqu/more_intuitive_programming_languages/ More intuitive programming languages]<br />
* [http://lesswrong.com/lw/cnh/psa_learn_to_code/ Learn to code]<br />
* [http://lesswrong.com/lw/cnp/what_is_the_best_programming_language/ What is the best programming language?]<br />
* [http://lesswrong.com/lw/cpz/computer_science_and_programming_links_and/ Computer Science and Programming: Links and Resources]<br />
* [http://lesswrong.com/lw/di2/advice_on_getting_a_software_job/ Advice On Getting A Software Job]<br />
* [http://lesswrong.com/lw/efm/checking_for_the_programming_gear/ Checking for the Programming Gear]<br />
* [http://lesswrong.com/r/discussion/lw/fth/programming_thread/ Programming Thread]</div>XiXiDuhttps://wiki.lesswrong.com/index.php?title=Programming_resources&diff=11792Programming resources2012-12-08T11:05:29Z<p>XiXiDu: </p>
<hr />
<div>==How Computers Work==<br />
<br />
1. [http://www.charlespetzold.com/code/ CODE The Hidden Language of Computer Hardware and Software]<br />
<br />
<blockquote>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."</blockquote><br />
<br />
2. [http://www1.idc.ac.il/tecs/ The Elements of Computing Systems: Building a Modern Computer from First Principles]<br />
<br />
<blockquote>Indeed, the best way to understand how computers work is to build one from scratch, and this textbook leads students through twelve chapters and projects that gradually build a basic hardware platform and a modern software hierarchy from the ground up. In the process, the students gain hands-on knowledge of hardware architecture, operating systems, programming languages, compilers, data structures, algorithms, and software engineering. Using this constructive approach, the book exposes a significant body of computer science knowledge and demonstrates how theoretical and applied techniques taught in other courses fit into the overall picture.</blockquote><br />
<br />
3. [http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/www.writegreatcode.com/ The Write Great Code Series (A Solid Foundation in Software Engineering for Programmers)] <br />
<br />
Write Great Code Volume I: Understanding the Machine<br />
<br />
<blockquote>This, the first of four volumes, teaches important concepts of machine organization in a language-independent fashion, giving programmers what they need to know to write great code in any language, without the usual overhead of learning assembly language to master this topic. The Write Great Code series will help programmers make wiser choices with respect to programming statements and data types when writing software.</blockquote><br />
<br />
Write Great Code Volume II: Thinking Low-Level, Writing High-Level<br />
<br />
<blockquote>...a good question to ask might be "Is there some way to write high-level language code to help the compiler produce high-quality machine code?" The answer to this question is "yes" and Write Great Code, Volume II, will teach you how to write such high-level code. This volume in the Write Great Code series describes how compilers translate statements into machine code so that you can choose appropriate high-level programming language statements to produce executable code that is almost as good as hand-optimized assembly code.</blockquote><br />
<br />
4. [http://www.amazon.com/Art-Assembly-Language-Randall-Hyde/dp/1593272073/ref=sr_1_2?s=books&ie=UTF8&qid=1354963770&sr=1-2&keywords=assembler+language+programming The Art of Assembly Language Programming]<br />
<br />
<blockquote>Assembly is a low-level programming language that's one step above a computer's native machine language. Although assembly language is commonly used for writing device drivers, emulators, and video games, many programmers find its somewhat unfriendly syntax intimidating to learn and use. Since 1996, Randall Hyde's The Art of Assembly Language has provided a comprehensive, plain-English, and patient introduction to assembly for non-assembly programmers. Hyde's primary teaching tool, High Level Assembler (or HLA), incorporates many of the features found in high-level languages (like C, C++, and Java) to help you quickly grasp basic assembly concepts. HLA lets you write true low-level code while enjoying the benefits of high-level language programming.</blockquote><br />
<br />
5. [http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming The Art of Computer Programming]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==An Overview of Computer Programming==<br />
<br />
1. [http://www.amazon.com/Seven-Languages-Weeks-Programming-Programmers/dp/193435659X Seven Languages in Seven Weeks: A Pragmatic Guide to Learning Programming Languages]<br />
<br />
<blockquote>Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell. With Seven Languages in Seven Weeks, by Bruce A. Tate, you'll go beyond the syntax-and beyond the 20-minute tutorial you'll find someplace online. This book has an audacious goal: to present a meaningful exploration of seven languages within a single book. Rather than serve as a complete reference or installation guide, Seven Languages hits what's essential and unique about each language. Moreover, this approach will help teach you how to grok new languages. For each language, you'll solve a nontrivial problem, using techniques that show off the language's most important features. As the book proceeds, you'll discover the strengths and weaknesses of the languages, while dissecting the process of learning languages quickly--for example, finding the typing and programming models, decision structures, and how you interact with them.</blockquote><br />
<br />
2. [http://www.amazon.com/Programming-Language-Pragmatics-Third-Michael/dp/0123745144/ Programming Language Pragmatics]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Functional-Programming-Calculus-Mathematics/dp/0486478831/ An Introduction to Functional Programming Through Lambda Calculus]<br />
<br />
<blockquote>This well-respected text offers an accessible introduction to functional programming concepts and techniques for students of mathematics and computer science. The treatment is as nontechnical as possible, assuming no prior knowledge of mathematics or functional programming. Numerous exercises appear throughout the text, and all problems feature complete solutions.</blockquote><br />
<br />
4. [http://www.htdp.org/ How to Design Programs] (An Introduction to Computing and Programming)<br />
<br />
<blockquote>This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills--critical reading, analytical thinking, creative synthesis, and attention to detail--that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners.</blockquote><br />
<br />
5. [http://mitpress.mit.edu/sicp/ Structure and Interpretation of Computer Programs]<br />
<br />
<blockquote>Using a dialect of the Lisp programming language known as Scheme, the book explains core computer science concepts, including abstraction, recursion, interpreters and metalinguistic abstraction, and teaches modular programming. The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects.</blockquote><br />
<br />
==Computer Science and Computation==<br />
<br />
1. [http://www.theannotatedturing.com/ The Annotated Turing: A Guided Tour Through Alan Turing's Historic Paper on Computability and the Turing Machine]<br />
<br />
<blockquote>Mathematician Alan Turing invented an imaginary computer known as the Turing Machine; in an age before computers, he explored the concept of what it meant to be computable, creating the field of computability theory in the process, a foundation of present-day computer programming. The book expands Turing’s original 36-page paper with additional background chapters and extensive annotations; the author elaborates on and clarifies many of Turing’s statements, making the original difficult-to-read document accessible to present day programmers, computer science majors, math geeks, and others.</blockquote><br />
<br />
2. [http://www.amazon.com/New-Turing-Omnibus-Turning-Excursions/dp/0716782715/ref=la_B000APOGWI_1_2?ie=UTF8&qid=1338291432&sr=1-2 New Turing Omnibus] (New Turning Omnibus : 66 Excursions in Computer Science)<br />
<br />
<blockquote>This text provides a broad introduction to the realm of computers. Updated and expanded, "The New Turing Omnibus" offers 66 concise articles on the major points of interest in computer science theory, technology and applications. New for this edition are: updated information on algorithms, detecting primes, noncomputable functions, and self-replicating computers - plus completely new sections on the Mandelbrot set, genetic algorithms, the Newton-Raphson Method, neural networks that learn, DOS systems for personal computers, and computer viruses.</blockquote><br />
<br />
3. [http://www.udacity.com/ Udacity]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
4. [https://www.ai-class.com/ Introduction to Artificial Intelligence]<br />
<br />
<blockquote>A bold experiment in distributed education, "Introduction to Artificial Intelligence" will be offered free and online to students worldwide from October 10th to December 18th 2011. The course will include feedback on progress and a statement of accomplishment. Taught by Sebastian Thrun and Peter Norvig, the curriculum draws from that used in Stanford's introductory Artificial Intelligence course. The instructors will offer similar materials, assignments, and exams. Artificial Intelligence is the science of making computer software that reasons about the world around it. Humanoid robots, Google Goggles, self-driving cars, even software that suggests music you might like to hear are all examples of AI. In this class, you will learn how to create this software from two of the leaders in the field. Class begins October 10.</blockquote><br />
<br />
==Supplementary Resources: Mathematics and Algorithms==<br />
<br />
1. [http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025 Concrete Mathematics: A Foundation for Computer Science]<br />
<br />
<blockquote>This book introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills - the skills needed to solve complex problems, to evaluate horrendous sums, and to discover subtle patterns in data. It is an indispensable text and reference not only for computer scientists - the authors themselves rely heavily on it! - but for serious users of mathematics in virtually every discipline.</blockquote><br />
<br />
2. [http://algs4.cs.princeton.edu/home/ Algorithms]<br />
<br />
<blockquote>The textbook Algorithms, 4th Edition by Robert Sedgewick and Kevin Wayne surveys the most important algorithms and data structures in use today.</blockquote><br />
<br />
3. [http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/ Introduction to Algorithms]<br />
<br />
<blockquote>Some books on algorithms are rigorous but incomplete; others cover masses of material but lack rigor. Introduction to Algorithms uniquely combines rigor and comprehensiveness. The book covers a broad range of algorithms in depth, yet makes their design and analysis accessible to all levels of readers. Each chapter is relatively self-contained and can be used as a unit of study. The algorithms are described in English and in a pseudocode designed to be readable by anyone who has done a little programming. The explanations have been kept elementary without sacrificing depth of coverage or mathematical rigor.</blockquote><br />
<br />
==Practice==<br />
<br />
1. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X http://projecteuler.net/ Project Euler]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
2. [http://www.pythonchallenge.com/ The Python Challenge]<br />
<br />
<blockquote>Python Challenge is a game in which each level can be solved by a bit of (Python) programming.</blockquote><br />
<br />
3. [http://www.codechef.com CodeChef Programming Competition]<br />
<br />
<blockquote>CodeChef is a global programming community. We host contests, trainings and events for programmers around the world. Our goal is to provide a platform for programmers everywhere to meet, compete, and have fun.</blockquote><br />
<br />
4. [http://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/098478280X Cracking the Coding Interview: 150 Programming Questions and Solutions]<br />
<br />
<blockquote>Now in the 5th edition, Cracking the Coding Interview gives you the interview preparation you need to get the top software developer jobs. This is a deeply technical book and focuses on the software engineering skills to ace your interview. The book is over 500 pages and includes 150 programming interview questions and answers, as well as other advice. </blockquote><br />
<br />
5. Write your own programs.<br />
<br />
==Python==<br />
<br />
[http://code.google.com/p/pyscripter/ pyscripter] An open-source Python Integrated Development Environment (IDE) [http://www.khanacademy.org/#computer-science Khan Academy] Introduction to programming and computer science (using Python) <br />
<br />
1. [http://inventwithpython.com/ Invent Your Own Computer Games with Python]<br />
<br />
<blockquote>“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.</blockquote><br />
<br />
2. [http://learnpythonthehardway.org/ Learn Python The Hard Way]<br />
<br />
<blockquote>Have you always wanted to learn how to code but never thought you could? Are you looking to build a foundation for more complex coding? Do you want to challenge your brain in a new way? Then Learn Python the Hard Way is the book for you.</blockquote><br />
<br />
3. [http://www.greenteapress.com/thinkpython/ Python for Software Design: How to Think Like a Computer Scientist]<br />
<br />
<blockquote>Think Python is an introduction to Python programming for beginners. It starts with basic concepts of programming, and is carefully designed to define all terms when they are first used and to develop each new concept in a logical progression. Larger pieces, like recursion and object-oriented programming are divided into a sequence of smaller steps and introduced over the course of several chapters.</blockquote><br />
<br />
4. [http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ Python Programming: An Introduction to Computer Science]<br />
<br />
<blockquote>This book is suitable for use in a university-level first course in computing (CS1), as well as the increasingly popular course known as CS0. It is difficult for many students to master basic concepts in computer science and programming. A large portion of the confusion can be blamed on the complexity of the tools and materials that are traditionally used to teach CS1 and CS2. This textbook was written with a single overarching goal: to present the core concepts of computer science as simply as possible without being simplistic.</blockquote><br />
<br />
5. [http://www.amazon.com/Practical-Programming-Introduction-Pragmatic-Programmers/dp/1934356271/ Practical Programming: An Introduction to Computer Science Using Python]<br />
<br />
<blockquote>Computers are used in every part of science from ecology to particle physics. This introduction to computer science continually reinforces those ties by using real-world science problems as examples. Anyone who has taken a high school science class will be able to follow along as the book introduces the basics of programming, then goes on to show readers how to work with databases, download data from the web automatically, build graphical interfaces, and most importantly, how to think like a professional programmer.</blockquote><br />
<br />
6. [http://www.amazon.com/Quick-Python-Book-Second/dp/193518220X/ The Quick Python Book]<br />
<br />
<blockquote>The Quick Python Book, Second Edition, is a clear, concise introduction to Python 3, aimed at programmers new to Python. This updated edition includes all the changes in Python 3, itself a significant shift from earlier versions of Python. The book begins with basic but useful programs that teach the core features of syntax, control flow, and data structures. It then moves to larger applications involving code management, object-oriented programming, web development, and converting code from earlier versions of Python.</blockquote><br />
<br />
==Haskell==<br />
<br />
[http://hackage.haskell.org/platform/ The Haskell Platform] The Haskell Platform is the easiest way to get started with programming Haskell. It comes with all you need to get up and running. Think of it as "Haskell: batteries included".<br />
<br />
<br />
1. [http://www.haskell.org/haskellwiki/Haskell_in_5_steps Haskell in 5 steps]<br />
<br />
<blockquote>This page will help you get started as quickly as possible.</blockquote><br />
<br />
2. [http://www.haskell.org/haskellwiki/Learn_Haskell_in_10_minutes Learn Haskell in 10 minutes] 3. [http://www.haskell.org/haskellwiki/A_brief_introduction_to_Haskell A brief introduction to Haskell] 4. [http://www.amazon.com/Programming-Haskell-Graham-Hutton/dp/0521692695/ Programming in Haskell]<br />
<br />
<blockquote>Haskell is one of the leading languages for teaching functional programming, enabling students to write simpler and cleaner code, and to learn how to structure and reason about programs. This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.</blockquote><br />
<br />
5. [http://learnyouahaskell.com/ Learn You a Haskell for Great Good!]<br />
<br />
<blockquote>Learn You a Haskell, the funkiest way to learn Haskell, which is the best functional programming language around. You may have heard of it. This guide is meant for people who have programmed already, but have yet to try functional programming.</blockquote><br />
<br />
6. [http://book.realworldhaskell.org/ Real World Haskell]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
7. [http://homepages.cwi.nl/~jve/HR/ The Haskell Road to Logic, Maths and Programming]<br />
<br />
<blockquote>The textbook by Doets and van Eijck puts the Haskell programming language systematically to work for presenting a major piece of logic and mathematics. The reader is taken through chapters on basic logic, proof recipes, sets and lists, relations and functions, recursion and co-recursion, the number systems, polynomials and power series, ending with Cantor's infinities. The book uses Haskell for the executable and strongly typed manifestation of various mathematical notions at the level of declarative programming. The book adopts a systematic but relaxed mathematical style (definition, example, exercise, ...); the text is very pleasant to read due to a small amount of anecdotal information, and due to the fact that definitions are fluently integrated in the running text. An important goal of the book is to get the reader acquainted with reasoning about programs.</blockquote><br />
<br />
==Common Lisp==<br />
<br />
1. [http://www.amazon.com/Land-Lisp-Learn-Program-Game/dp/1593272812/ Land of Lisp: Learn to Program in Lisp, One Game at a Time!]<br />
<br />
<blockquote>Lisp has been hailed as the world's most powerful programming language, but its cryptic syntax and academic reputation can be enough to scare off even experienced programmers. Those dark days are finally over—''Land of Lisp'' brings the power of functional programming to the people! With his brilliantly quirky comics and out-of-this-world games, longtime Lisper Conrad Barski teaches you the mysteries of Common Lisp. You'll start with the basics, like list manipulation, I/O, and recursion, then move on to more complex topics like macros, higher order programming, and domain-specific languages. Then, when your brain overheats, you can kick back with an action-packed comic book interlude!</blockquote><br />
<br />
2. [http://www.gigamonkeys.com/book/ Practical Common Lisp]<br />
<br />
<blockquote>''Practical Common Lisp'' presents a thorough introduction to Common Lisp, providing you with an overall understanding of the language features and how they work. Over a third of the book is devoted to practical examples such as the core of a spam filter and a web application for browsing MP3s and streaming them via the Shoutcast protocol to any standard MP3 client software (e.g., iTunes, XMMS, or WinAmp). In other "practical" chapters, author Peter Seibel demonstrates how to build a simple but flexible in-memory database, how to parse binary files, and how to build a unit test framework in 26 lines of code.</blockquote><br />
<br />
3. [http://www.amazon.com/ANSI-Common-LISP-Paul-Graham/dp/0133708756/ ANSI Common LISP]<br />
<br />
<blockquote>Teaching users new and more powerful ways of thinking about programs, this two-in-one text contains a tutorial—full of examples—that explains all the essential concepts of Lisp programming, ''plus'' an up-to-date summary of ANSI Common Lisp, listing every operator in the language. Informative and fun, it gives users everything they need to start writing programs in Lisp both efficiently and effectively, and highlights such innovative Lisp features as automatic memory management, manifest typing, closures, and more. Dividing material into two parts, the tutorial half of the book covers subject-by-subject the essential core of Common Lisp, and sums up lessons of preceding chapters in two examples of real applications: a backward-chainer, and an embedded language for object-oriented programming. Consisting of three appendices, the summary half of the book gives source code for a selection of widely used Common Lisp operators, with definitions that offer a comprehensive explanation of the language and provide a rich source of real examples; summarizes some differences between ANSI Common Lisp and Common Lisp as it was originally defined in 1984; and contains a concise description of every function, macro, and special operator in ANSI Common Lisp. The book concludes with a section of notes containing clarifications, references, and additional code.</blockquote><br />
<br />
4. [http://www.amazon.com/Paradigms-Artificial-Intelligence-Programming-Studies/dp/1558601910/ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp]<br />
<br />
<blockquote>''Paradigms of AI Programming'' is the first text to teach advanced Common Lisp techniques in the context of building major AI systems. By reconstructing authentic, complex AI programs using state-of-the-art Common Lisp, the book teaches students and professionals how to build and debug robust practical programs, while demonstrating superior programming style and important AI concepts. The author strongly emphasizes the practical performance issues involved in writing real working programs of significant size. Chapters on troubleshooting and efficiency are included, along with a discussion of the fundamentals of object-oriented programming and a description of the main CLOS functions. This volume is an excellent text for a course on AI programming, a useful supplement for general AI courses and an indispensable reference for the professional programmer.</blockquote><br />
<br />
5. [http://letoverlambda.com/ Let Over Lambda]<br />
<br />
<blockquote>Let Over Lambda is one of the most hardcore computer programming books out there. Starting with the fundamentals, it describes the most advanced features of the most advanced language: COMMON LISP. The point of this book is to expose you to ideas that you might otherwise never be exposed to.</blockquote><br />
<br />
6. [http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/ Lisp as the Maxwell’s equations of software]<br />
<br />
<blockquote>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.</blockquote><br />
<br />
==R==<br />
<br />
[http://rstudio.org/ RStudio] RStudio™ is a free and open source integrated development environment (IDE) for R. You can run it on your desktop (Windows, Mac, or Linux) or even over the web using RStudio Server.<br />
<br />
<br />
1. [http://www.stat.berkeley.edu/share/rvideos/R_Videos/R_Videos.html R Videos] 2. [http://www.twotorials.com/ R Tutorials] 3. [http://pairach.com/2012/02/26/r-tutorials-from-universities-around-the-world/ R Tutorials from Universities Around the World]<br />
<br />
<blockquote>Here is a list of FREE R tutorials hosted in official website of universities around the world.</blockquote><br />
<br />
4. [http://www.r-bloggers.com/ R-bloggers]<br />
<br />
<blockquote>Here you will find daily news and tutorials about R, contributed by over 300 bloggers.</blockquote><br />
<br />
5. [http://nostarch.com/artofr.htm The Art of R Programming: A Tour of Statistical Software Design]<br />
<br />
<blockquote>R is the world's most popular language for developing statistical software: Archaeologists use it to track the spread of ancient civilizations, drug companies use it to discover which medications are safe and effective, and actuaries use it to assess financial risks and keep economies running smoothly. The Art of R Programming takes you on a guided tour of software development with R, from basic types and data structures to advanced topics like closures, recursion, and anonymous functions. No statistical knowledge is required, and your programming skills can range from hobbyist to pro. Along the way, you'll learn about functional and object-oriented programming, running mathematical simulations, and rearranging complex data into simpler, more useful formats.</blockquote><br />
<br />
6. [http://pluto.huji.ac.il/~msby/StatThink/index.html Introduction to Statistical Thinking (With R, Without Calculus)]<br />
<br />
<blockquote>The target audience for this book is college students who are required to learn statistics, students with little background in mathematics and often no motivation to learn more.</blockquote><br />
<br />
7. [http://www.indiana.edu/~kruschke/DoingBayesianDataAnalysis/ Doing Bayesian Data Analysis: A Tutorial with R and BUGS ]<br />
<br />
<blockquote>There is an explosion of interest in Bayesian statistics, primarily because recently created computational methods have finally made Bayesian analysis obtainable to a wide audience. Doing Bayesian Data Analysis, A Tutorial Introduction with R and BUGS provides an accessible approach to Bayesian data analysis, as material is explained clearly with concrete examples. The book begins with the basics, including essential concepts of probability and random sampling, and gradually progresses to advanced hierarchical modeling methods for realistic data. The text delivers comprehensive coverage of all scenarios addressed by non-Bayesian textbooks--t-tests, analysis of variance (ANOVA) and comparisons in ANOVA, multiple regression, and chi-square (contingency table analysis). This book is intended for first year graduate students or advanced undergraduates. It provides a bridge between undergraduate training and modern Bayesian methods for data analysis, which is becoming the accepted research standard. Prerequisite is knowledge of algebra and basic calculus. Free software now includes programs in JAGS, which runs on Macintosh, Linux, and Windows.</blockquote><br />
<br />
==C/C++==<br />
<br />
[http://www.codeblocks.org/ Code::Blocks], a free C/C++ IDE (Integrated development environment) bundled with a MinGW compiler to produce Windows programs.<br />
<br />
C Books<br />
<br />
1. [http://www.amazon.com/Head-First-C-David-Griffiths/dp/1449399916 Head First C]<br />
<br />
2. [http://www.amazon.com/Programming-3rd-Edition-Stephen-Kochan/dp/0672326663 Programming in C]<br />
<br />
3. [http://www.amazon.com/C-Programming-Modern-Approach-2nd/dp/0393979504/ref=sr_1_1?s=books&ie=UTF8&qid=1354962523&sr=1-1&keywords=C+Programming+A+Modern+Approach C Programming: A Modern Approach]<br />
<br />
4. [http://www.amazon.com/Primer-Plus-5th-Stephen-Prata/dp/0672326965/ref=sr_1_1?s=books&ie=UTF8&qid=1354962567&sr=1-1&keywords=C+Primer+Plus C Primer Plu