<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Seeping Matter &#187; Learn To Program</title>
	<atom:link href="http://www.mvryan.org/tag/learn-to-program/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mvryan.org</link>
	<description>Tidbits about cars, auto racing, music, motocross, football, video games, investing, corporate America, politics...</description>
	<lastBuildDate>Sat, 04 Feb 2012 06:26:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Computer Science Books</title>
		<link>http://www.mvryan.org/2009/05/computer-science-books/</link>
		<comments>http://www.mvryan.org/2009/05/computer-science-books/#comments</comments>
		<pubDate>Wed, 13 May 2009 00:41:41 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Career]]></category>
		<category><![CDATA[Learn To Program]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.mvryan.org/?p=480</guid>
		<description><![CDATA[My inbox is overflowing with emails from people asking, &#8220;Matt, how can I be more like you?&#8221; Honestly, that is only sort of true.  Some of the emails say, &#8220;Lose 30 pounds in 12 minutes!&#8221;  And some say, &#8220;I am the prince of Nigeria!&#8221;  And some say, &#8220;I am lonely and looking for a purely [...]]]></description>
			<content:encoded><![CDATA[<p>My inbox is overflowing with emails from people asking, &#8220;Matt, how can I be more like you?&#8221;</p>
<p>Honestly, that is only sort of true.  Some of the emails say, &#8220;Lose 30 pounds in 12 minutes!&#8221;  And some say, &#8220;I am the prince of Nigeria!&#8221;  And some say, &#8220;I am lonely and looking for a purely physical relationship!&#8221;</p>
<p>More honestly, that pretty much comprises the bulk of the email I receive.  Nobody has actually asked how to be more like me, strangely enough.  But that day is surely coming, and since I am a computer scientist, or at least since USU says so, I could start with a list of books that you can read if you want to become a true nerd and rule the world the way I do, which is to say, not.</p>
<p>(So, in fairness, I haven&#8217;t actually read all of these or owned them.  There are some that I haven&#8217;t read, but I read one like it; those are marked in blue.  There are some that I haven&#8217;t read but think I should; those are marked in gray.  There are some that where I read one like it, but I want to read that particular one &#8211; they are bluish-gray.  And I didn&#8217;t list the probably 40-50 CS books I own or have owned and read that are not shown here.  So cut me a break.)</p>
<h2>Math and English</h2>
<p>First off, in order to be a good software engineer and computer scientist, you have to be a good mathematician and a good writer.  Sorry.  You simply can&#8217;t be a competent software engineer without a solid mathematical background, and you can&#8217;t be an effective one if you can&#8217;t figure out how to express your ideas clearly in writing.</p>
<div align="center">
<table border="0" cellpadding="0" cellspacing="0">
<tr valign="top">
<td align="center" style="background:#add8fd;">
<a href="http://www.amazon.com/Elementary-Algebra-Harold-R-Jacobs/dp/0716710471/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242093466&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Elementary-Algebra-Harold-R-Jacobs/dp/0716710471/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242093466_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/elemalgebra.jpg" width="100"></a>
</td>
<td align="center" style="background:#add8fd;">
<a href="http://www.amazon.com/Calculus-Made-Easy-Silvanus-Thompson/dp/0312185480/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242093698&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Calculus-Made-Easy-Silvanus-Thompson/dp/0312185480/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242093698_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/calculusmadeeasy.jpg" width="100"></a>
</td>
<td align="center" style="background:#81a1bc;">
<a href="http://www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242093750&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Concrete-Mathematics-Foundation-Computer-Science/dp/0201558025/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242093750_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/concretemathematics.jpg" width="100"></a>
</td>
<td align="center" style="background:#add8fd;">
<a href="http://www.amazon.com/Writing-Computer-Science-Justin-Zobel/dp/1852338024/ref=sr_1_2?ie=UTF8&#038;s=books&#038;qid=1242093953&#038;sr=1-2" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Writing-Computer-Science-Justin-Zobel/dp/1852338024/ref=sr_1_2?ie=UTF8_038_s=books_038_qid=1242093953_038_sr=1-2&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/writingforcompsci.jpg" width="100"></a>
</td>
</tr>
</table>
</div>
<h2>Learning to Program</h2>
<p>Your next step is to learn basic programming concepts.  In my opinion, you should learn two languages at this point:  Python and C.  Python is a good beginning language, very easy to create real applications, easy to learn, and very versatile and useful in the real world.  C is the fundamental systems programming language.  Knowing Python and C will allow you to program just about anything and gives you a good fundamental background.</p>
<div align="center">
<table border="0" cellpadding="0" cellspacing="0">
<tr valign="top">
<td align="center" style="background:#81a1bc;"><a href="http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1887902996/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242094819&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1887902996/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242094819_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/pythonprogramming.jpg" width="100"></a></td>
<td align="center"><a href="http://www.amazon.com/Python-Nutshell-Second-OReilly/dp/0596100469/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242094832&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Python-Nutshell-Second-OReilly/dp/0596100469/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242094832_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/pythoninanutshell.jpg" width="100"></a></td>
<td align="center" style="background:#add8fd;"><a href="http://www.amazon.com/Programming-C-3rd-Developers-Library/dp/0672326663/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242094851&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Programming-C-3rd-Developers-Library/dp/0672326663/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242094851_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/programminginc.jpg" width="100"></a></td>
<td align="center"><a href="http://www.amazon.com/Programming-Language-Prentice-Hall-Software/dp/0131103628/ref=sr_1_3?ie=UTF8&#038;s=books&#038;qid=1242094851&#038;sr=1-3" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Programming-Language-Prentice-Hall-Software/dp/0131103628/ref=sr_1_3?ie=UTF8_038_s=books_038_qid=1242094851_038_sr=1-3&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/cprogramminglanguage.jpg" width="100"></a></td>
</tr>
</table>
</div>
<h2>Computer Science Fundamentals</h2>
<p>Having learned how to write basic computer programs, now is time to get into the science of computer science.</p>
<div align="center">
<table border="0" cellpadding="0" cellspacing="0">
<tr valign="top">
<td align="center" style="background:#dddddd;"><a href="http://www.amazon.com/Art-Computer-Programming-Volumes-Boxed/dp/0201485419/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242095681&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Art-Computer-Programming-Volumes-Boxed/dp/0201485419/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242095681_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/knuth.jpg" width="100"></a></td>
<td align="center" style="background:#81a1bc;"><a href="http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262032937/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242095885&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262032937/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242095885_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/introtoalgorithms.jpg" width="100"></a></td>
<td align="center"><a href="http://www.amazon.com/Introduction-Computer-Theory-Daniel-Cohen/dp/0471137723/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242095921&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Introduction-Computer-Theory-Daniel-Cohen/dp/0471137723/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242095921_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/introtocomputertheory.jpg" width="100"></a></td>
<td align="center" style="background:#dddddd;"><a href="http://www.amazon.com/Algorithms-Parts-1-5-Bundle-Fundamentals/dp/0201756080/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242095936&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Algorithms-Parts-1-5-Bundle-Fundamentals/dp/0201756080/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242095936_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/algorithmsinc.jpg" width="100"></a></td>
</tr>
<tr valign="top">
<td align="center" style="background:#dddddd;"><a href="http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242096093&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242096093_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/compilers.jpg" width="100"></a></td>
<td align="center" style="background:#81a1bc;"><a href="http://www.amazon.com/Computer-Networks-4th-Andrew-Tanenbaum/dp/0130661023/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242096114&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Computer-Networks-4th-Andrew-Tanenbaum/dp/0130661023/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242096114_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/computernetworks.jpg" width="100"></a></td>
<td align="center" style="background:#81a1bc;"><a href="http://www.amazon.com/Beginning-Database-Design-Novice-Professional/dp/1590597699/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242096131&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Beginning-Database-Design-Novice-Professional/dp/1590597699/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242096131_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/begdbdesign.jpg" width="100"></a></td>
<td align="center" style="background:#81a1bc;"><a href="http://www.amazon.com/Schneiers-Cryptography-Classics-Library-Practical/dp/0470226269/ref=sr_1_2?ie=UTF8&#038;s=books&#038;qid=1242096150&#038;sr=1-2" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Schneiers-Cryptography-Classics-Library-Practical/dp/0470226269/ref=sr_1_2?ie=UTF8_038_s=books_038_qid=1242096150_038_sr=1-2&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/cryptographyclassics.jpg" width="100"></a></td>
</tr>
<tr valign="top">
<td align="center" style="background:#dddddd;"><a href="http://www.amazon.com/Synchronization-Algorithms-Concurrent-Programming-Taubenfeld/dp/0131972596/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242096282&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Synchronization-Algorithms-Concurrent-Programming-Taubenfeld/dp/0131972596/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242096282_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/syncalgandconcurrentprg.jpg" width="100"></a></td>
<td align="center" style="background:#81a1bc;"><a href="http://www.amazon.com/Art-Multiprocessor-Programming-Maurice-Herlihy/dp/0123705916/ref=sr_1_2?ie=UTF8&#038;s=books&#038;qid=1242096282&#038;sr=1-2" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Art-Multiprocessor-Programming-Maurice-Herlihy/dp/0123705916/ref=sr_1_2?ie=UTF8_038_s=books_038_qid=1242096282_038_sr=1-2&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/artofmultiprocprogramming.jpg" width="100"></a></td>
<td align="center" style="background:#add8fd;"><a href="http://www.amazon.com/Handbook-Mathematics-Computational-Science-Harris/dp/0387947469/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242096305&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Handbook-Mathematics-Computational-Science-Harris/dp/0387947469/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242096305_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/handbookofmathandcompsci.jpg" width="100"></a></td>
<td align="center"></td>
</tr>
</table>
</div>
<h2>Programming Technique and Methodology</h2>
<p>How to write software well.</p>
<div align="center">
<table border="0" cellpadding="0" cellspacing="0">
<tr valign="top">
<td align="center"><a href="http://www.amazon.com/Writing-Solid-Code-Microsofts-Programming/dp/1556155514/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242096617&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Writing-Solid-Code-Microsofts-Programming/dp/1556155514/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242096617_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/writingsolidcode.jpg" width="100"></a></td>
<td align="center"><a href="http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242096768&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242096768_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/codecomplete.jpg" width="100"></a></td>
<td align="center" style="background:#dddddd;"><a href="http://www.amazon.com/Software-Security-Building-Addison-Wesley/dp/0321356705/ref=pd_sim_b_3" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Software-Security-Building-Addison-Wesley/dp/0321356705/ref=pd_sim_b_3?referer=');"><img src="http://www.mvryan.org/images/bookcovers/swsec.jpg" width="100"></a></td>
</tr>
<tr valign="top">
<td align="center"><a href="http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242096905&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242096905_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/mythicalmanmonth.jpg" width="100"></a></td>
<td align="center"><a href="http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242096974&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242096974_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/designpatterns.jpg" width="100"></a></td>
<td align="center" style="background:#dddddd;"><a href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242096988&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242096988_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/pragmaticprogrammer.jpg" width="100"></a></td>
</tr>
<tr valign="top">
<td align="center" style="background:#add8fd;"><a href="http://www.amazon.com/Fundamentals-Software-Engineering-Carlo-Ghezzi/dp/0133056996/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242097068&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Fundamentals-Software-Engineering-Carlo-Ghezzi/dp/0133056996/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242097068_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/fundamentalsofsweng.jpg" width="100"></a></td>
<td align="center" style="background:#add8fd;"><a href="http://www.amazon.com/Extreme-Software-Engineering-Hands-Approach/dp/0130473812/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242097089&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Extreme-Software-Engineering-Hands-Approach/dp/0130473812/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242097089_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/extremesweng.jpg" width="100"></a></td>
<td align="center" style="background:#add8fd;"><a href="http://www.amazon.com/Practices-Agile-Developer-Pragmatic-Programmers/dp/097451408X/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242097107&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Practices-Agile-Developer-Pragmatic-Programmers/dp/097451408X/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242097107_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/practicesofagiledev.jpg" width="100"></a></td>
</tr>
</table>
</div>
<h2>General Programming</h2>
<p>Two other languages you might want to know are C++ and Java.  C++ is much maligned, but widely used, especially for systems applications, games, and other high-performing software applications.  Java is an abomination in every sense of the word.  But it is also very popular and good to know.  If you are going to learn Java, you should also learn JNI, so you can get from Java back to C and get some real work done.</p>
<div align="center">
<table border="0" cellpadding="0" cellspacing="0">
<tr valign="top">
<td align="center"><a href="http://www.amazon.com/C-Programming-Language-Special-3rd/dp/0201700735/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242152926&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/C-Programming-Language-Special-3rd/dp/0201700735/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242152926_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/c++programminglanguage.jpg" width="100"></a></td>
<td align="center"><a href="http://www.amazon.com/Effective-Specific-Addison-Wesley-Professional-Computing/dp/0321334876/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242152957&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Effective-Specific-Addison-Wesley-Professional-Computing/dp/0321334876/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242152957_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/effectivec++.jpg" width="100"></a></td>
<td align="center" style="background:#add8fd;"><a href="http://www.amazon.com/Introduction-Java-Programming-Comprehensive-Version/dp/0136012671/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242153004&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Introduction-Java-Programming-Comprehensive-Version/dp/0136012671/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242153004_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/introtojava.jpg" width="100"></a></td>
<td align="center"><a href="http://www.amazon.com/Java-Nutshell-5th-David-Flanagan/dp/0596007736/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242153036&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Java-Nutshell-5th-David-Flanagan/dp/0596007736/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242153036_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/javainanutshell.jpg" width="90"></a></td>
<td align="center"><a href="http://www.amazon.com/Essential-Jni-Java-Native-Interface/dp/0136798950/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242153058&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Essential-Jni-Java-Native-Interface/dp/0136798950/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242153058_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/essentialjni.jpg" width="90"></a></td>
</tr>
</table>
</div>
<h2>Systems Programming</h2>
<p>If you are going to do systems programming, you&#8217;ve got to know the specifics of how to program to the environment in question.  It&#8217;s worth noting here that the UNIX books basically cover POSIX, which applies not only to UNIX but BSD, Linux, and Mac as well to varying reasonable degrees.  I&#8217;ve also included an internals book for the big three platforms (Windows, Linux, and Mac).  And if you are going to program for Mac, you will probably want to learn another language: Objective-C.</p>
<div align="center">
<table border="0" cellpadding="0" cellspacing="0">
<tr valign="middle">
<th colspan="3">
<h3>UNIX/Linux</h3>
</th>
</tr>
<tr valign="top">
<td align="center"><a href="http://www.amazon.com/Programming-Environment-Addison-Wesley-Professional-Computing/dp/0321525949/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242153632&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Programming-Environment-Addison-Wesley-Professional-Computing/dp/0321525949/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242153632_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/apue.jpg" width="100"></a></td>
<td align="center"><a href="http://www.amazon.com/Unix-Network-Programming-Addison-Wesley-Professional/dp/0131411551/ref=sr_1_6?ie=UTF8&#038;s=books&#038;qid=1242153632&#038;sr=1-6" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Unix-Network-Programming-Addison-Wesley-Professional/dp/0131411551/ref=sr_1_6?ie=UTF8_038_s=books_038_qid=1242153632_038_sr=1-6&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/unp1.jpg" width="100"></a></td>
<td align="center"><a href="http://www.amazon.com/UNIX-Network-Programming-Interprocess-Communications/dp/0130810819/ref=sr_1_10?ie=UTF8&#038;s=books&#038;qid=1242153632&#038;sr=1-10" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/UNIX-Network-Programming-Interprocess-Communications/dp/0130810819/ref=sr_1_10?ie=UTF8_038_s=books_038_qid=1242153632_038_sr=1-10&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/unp2.jpg" width="100"></a></td>
</tr>
<tr valign="top">
<td align="center" style="background:#81a1bc;"><a href="http://www.amazon.com/UNIX-Systems-Programming-Communication-Concurrency/dp/0130424110/ref=sr_1_4?ie=UTF8&#038;s=books&#038;qid=1242153632&#038;sr=1-4" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/UNIX-Systems-Programming-Communication-Concurrency/dp/0130424110/ref=sr_1_4?ie=UTF8_038_s=books_038_qid=1242153632_038_sr=1-4&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/unixsysprog.jpg" width="100"></a></td>
<td align="center" style="background:#81a1bc;"><a href="http://www.amazon.com/Linux-Programming-Example-Fundamentals-Development/dp/0131429647/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242153850&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Linux-Programming-Example-Fundamentals-Development/dp/0131429647/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242153850_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/linuxprogrammingbyexample.jpg" width="100"></a></td>
<td align="center" style="background:#dddddd;"><a href="http://www.amazon.com/Linux-Kernel-Development-Novell-Press/dp/0672327201/ref=sr_1_2?ie=UTF8&#038;s=books&#038;qid=1242153862&#038;sr=1-2" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Linux-Kernel-Development-Novell-Press/dp/0672327201/ref=sr_1_2?ie=UTF8_038_s=books_038_qid=1242153862_038_sr=1-2&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/linuxkerneldev.jpg" width="100"></a></td>
</tr>
<tr valign="middle">
<th colspan="3">
<h3>Windows</h3>
</th>
</tr>
<td align="center"><a href="http://www.amazon.com/Windows-via-C-Pro-Developer/dp/0735624240/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242154365&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Windows-via-C-Pro-Developer/dp/0735624240/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242154365_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/windowsviac.jpg" width="100"></a></td>
<td align="center"><a href="http://www.amazon.com/Advanced-Debugging-Addison-Wesley-Microsoft-Technology/dp/0321374460/ref=sr_1_2?ie=UTF8&#038;s=books&#038;qid=1242154365&#038;sr=1-2" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Advanced-Debugging-Addison-Wesley-Microsoft-Technology/dp/0321374460/ref=sr_1_2?ie=UTF8_038_s=books_038_qid=1242154365_038_sr=1-2&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/advancedwindowsdebugging.jpg" width="100"></a></td>
<td align="center" style="background:#dddddd;"><a href="http://www.amazon.com/Microsoft-Windows-Internals-4th-Server/dp/0735619174/ref=sr_1_3?ie=UTF8&#038;s=books&#038;qid=1242154365&#038;sr=1-3" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Microsoft-Windows-Internals-4th-Server/dp/0735619174/ref=sr_1_3?ie=UTF8_038_s=books_038_qid=1242154365_038_sr=1-3&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/windowsinternals.jpg" width="100"></a></td>
<tr valign="top">
</tr>
<tr valign="middle">
<th colspan="3">
<h3>Mac OS X</h3>
</th>
</tr>
<tr valign="top">
<td align="center"><a href="http://www.amazon.com/Programming-Objective-C-2-0-Developers-Library/dp/0321566157/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242154381&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Programming-Objective-C-2-0-Developers-Library/dp/0321566157/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242154381_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/proginobjc.jpg" width="100"></a></td>
<td align="center"><a href="http://www.amazon.com/Cocoa-Programming-Mac-OS-3rd/dp/0321503619/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242154388&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Cocoa-Programming-Mac-OS-3rd/dp/0321503619/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242154388_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/cocoaprogramming.jpg" width="100"></a></td>
<td align="center" style="background:#dddddd;"><a href="http://www.amazon.com/Mac-OS-Internals-Systems-Approach/dp/0321278542/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242154399&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Mac-OS-Internals-Systems-Approach/dp/0321278542/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242154399_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/macosxinternals.jpg" width="100"></a></td>
</tr>
</table>
</div>
<h2>Other</h2>
<p>Every good software engineer should clearly understand open source; hence The Cathedral and the Bazaar.  You will find you are missing out on a number of inside jokes if you don&#8217;t read The Hitchhiker&#8217;s Guide to the Galaxy.  And everyone should read The Code Book, simply because it is so interesting.</p>
<div align="center">
<table border="0" cellpadding="0" cellspacing="0">
<tr valign="top">
<td align="center"><a href="http://www.amazon.com/Cathedral-Bazaar-Musings-Accidental-Revolutionary/dp/0596001088/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242154799&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Cathedral-Bazaar-Musings-Accidental-Revolutionary/dp/0596001088/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242154799_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/catb.jpg" width="100"></a></td>
<td align="center"><a href="http://www.amazon.com/Ultimate-Hitchhikers-Guide-Galaxy/dp/0345453743/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242154808&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Ultimate-Hitchhikers-Guide-Galaxy/dp/0345453743/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242154808_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/hitchhikersguide.jpg" width="100"></a></td>
<td align="center"><a href="http://www.amazon.com/Code-Book-Science-Secrecy-Cryptography/dp/0385495323/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1242154815&#038;sr=1-1" onclick="pageTracker._trackPageview('/outgoing/www.amazon.com/Code-Book-Science-Secrecy-Cryptography/dp/0385495323/ref=sr_1_1?ie=UTF8_038_s=books_038_qid=1242154815_038_sr=1-1&amp;referer=');"><img src="http://www.mvryan.org/images/bookcovers/thecodebook.jpg" width="100"></a></td>
</tr>
</table>
</div>
<h6>Image Credits: amazon.com and barnesandnoble.com</h6>
]]></content:encoded>
			<wfw:commentRss>http://www.mvryan.org/2009/05/computer-science-books/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Types of Programming Languages</title>
		<link>http://www.mvryan.org/2008/11/types-of-programming-languages/</link>
		<comments>http://www.mvryan.org/2008/11/types-of-programming-languages/#comments</comments>
		<pubDate>Sun, 16 Nov 2008 22:35:00 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Learn To Program]]></category>

		<guid isPermaLink="false">http://blog.mvryan.org/?p=126</guid>
		<description><![CDATA[What we know so far: We use computer programs to tell computers what to do Computer programs are written in languages that are translated by the computer Every computer program deals with data and instructions performed on the data In this post we&#8217;re going to talk about a few different types of programming languages. The [...]]]></description>
			<content:encoded><![CDATA[<p>What we know so far:</p>
<div>
<ul>
<li>We use computer programs to tell computers what to do</li>
<li>Computer programs are written in languages that are translated by the computer</li>
<li>Every computer program deals with data and instructions performed on the data</li>
</ul>
<div>In this post we&#8217;re going to talk about a few different types of programming languages.</div>
<div>The first computer programs were &#8220;written&#8221; directly in computer language.  I put &#8220;written&#8221; in quotes because a lot of these programs weren&#8217;t actually written the way I&#8217;m writing this blog post &#8211; they were created using much more complex methods, like punch cards.  Nevertheless, this wasn&#8217;t even the hardest part.  In order to create the program, the programmer had to know computer language directly.</div>
<div>This was presumably way too hard even for very simple programs.  So the next step was to create a higher-level language.  There are many variants of this language, called &#8220;assembler.&#8221;  I actually had to learn assembler in college, and believe me, it is hard to imagine that it is actually easier than machine language.</div>
<div>As programs became more and more complex, even assembler was eventually much too complex to be able to use effectively.  Higher-level languages were created to help out.</div>
<div>One characteristic of these newer languages is that the code is translated into machine language before it is executed.  Special programs are used to do the translation.  These special programs are called <span class="Apple-style-span" style="font-style: italic;">compilers</span> &#8211; they <span class="Apple-style-span" style="font-style: italic;">compile</span> the written program into something the computer can execute and run.  Computer languages that have to be compiled before they can be executed are called <span class="Apple-style-span" style="font-style: italic;">compiled languages.</span></div>
<div>Many common early programming languages are compiled languages, such as COBOL and FORTRAN.  Over the past thirty years or so, one of the most commonly used compiled languages is simply called &#8220;C.&#8221;  C, and popular variants of C like C++ and Objective-C, have been used for years and are still very popular today for applications you use every day.  Most computer games, most popular operating systems in use today, and most of the internet runs on C or a C variant.</p>
<p>Programs written in compiled languages tend to be very powerful and to execute quickly.  The compiler effectively converts the code into machine language so the machine can execute it directly when it runs.  Compiled languages are often chosen for applications where high performance is a factor.</p>
<p>One drawback of compiled languages is that they will only work on the computer platform they were built for.  An application written in C, once compiled on Windows, will only run on Windows.  To run it on a Mac, you would have to compile the program again on a Mac.</p>
<p>Another drawback of compiled languages is the need to compile.  Every time you make a change to the program, you have to rebuild the program in order to test it.  For large programs this can become somewhat tedious and time-consuming.</p>
<p>As an alternative, we have interpreted languages.  Interpreted languages are, in many ways, the opposite of compiled languages.  Interpreted languages don&#8217;t ever need to be compiled at all.  Instead, a program called an <span style="font-style: italic;">interpreter </span>will translate the program to machine language as it is running.  Essentially, with an interpreted language, you tell the interpreter to run a program, and it translates that program and runs it for you.  Perl, PHP, Ruby, and Python are all examples of interpreted languages used today.</p>
<p>Since interpreted languages don&#8217;t have to be compiled, the turnaround between editing and testing is much quicker.  However, since they are translated into machine language every time they are executed, programs written in interpreted languages do not generally perform as well as a comparable program written in a compiled language.  Still, they are very popular, especially for things like web applications &#8211; many web applications are written in an interpreted language.</p>
<p>Another advantage of interpreted languages is that they are a bit more portable that compiled languages.  As long as a Python program doesn&#8217;t perform any platform-specific tasks, that program can be executed on any platform with a Python interpreter.</p>
<p>So, there you have it.  On the one hand, you have compiled languages, and on the other, interpreted languages, opposites of each other in many ways.  As I continue this tutorial, I&#8217;m planning on teaching you to program in both C and Python, so you will get a little taste of each.</p></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.mvryan.org/2008/11/types-of-programming-languages/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Data and Instructions</title>
		<link>http://www.mvryan.org/2008/08/data-and-instructions/</link>
		<comments>http://www.mvryan.org/2008/08/data-and-instructions/#comments</comments>
		<pubDate>Thu, 07 Aug 2008 21:35:00 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Learn To Program]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.mvryan.org/?p=124</guid>
		<description><![CDATA[What we know so far: A computer is a unique invention in that, through programming, it can be customized to solve many different kinds of problems. Programming a computer simply means to provide a computer with information. In order to program a computer we have to translate our ideas into a language it can understand. [...]]]></description>
			<content:encoded><![CDATA[<p>What we know so far:</p>
<ul>
<li>A computer is a unique invention in that, through programming, it can be customized to solve many different kinds of problems.</li>
<li>Programming a computer simply means to provide a computer with information.</li>
<li>In order to program a computer we have to translate our ideas into a language it can understand.</li>
<li>Computer language is just a code comprised of sets of electrical switches turned on and off.</li>
</ul>
<p>In this post we&#8217;ll talk a little bit more about the information given to a computer.  Basically, information given to a computer falls into one of two categories:</p>
<ul>
<li>Data</li>
<li>Instructions</li>
</ul>
<p>Data means a quantifiable description of something.  Here are some examples of data:</p>
<ul>
<li>G &#8211; a single character</li>
<li>True &#8211; a truth value (often called a boolean)</li>
<li>5 &#8211; a number</li>
<li>Hello &#8211; a word</li>
<li>AAPL, IBM, MSFT &#8211; a list of stocks</li>
<li>6&#8217;2&#8243;, 215 lbs, peppered hair, blue eyes, skinny ankles &#8211; a description of myself</li>
</ul>
<p>We can see that data can be really simple or really complex.  No matter how trivial or complex, data is really just a quantifiable representation or description of a thing.</p>
<p>Instructions are simply operations that we perform on data.  Here are some examples of operations:</p>
<ul>
<li>Add two numbers together.</li>
<li>Invert a boolean value, i.e. make something that was True into False.</li>
<li>Reverse a string, i.e. make &#8220;Hello&#8221; say &#8220;olleH&#8221;.</li>
<li>Add another stock to the end of a list of stocks.</li>
</ul>
<p>No matter how simple or complex an instruction is, remember, it is just an operation being performed on data.</p>
<p>Amazingly, that is all that a computer program really is &#8211; performing instructions on sets of data.  When we start out, we will use very simple kinds of data and very simple instructions, like adding two numbers together.  These simple examples will primarily be using data and instructions that are defined by the programming language itself.  Later, we will learn about defining our own instructions and our own data.  For now, remember:  every piece of information in a computer, and in a computer program, is either a piece of data or an instruction.  Don&#8217;t complicate it!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mvryan.org/2008/08/data-and-instructions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Speaking To Computers</title>
		<link>http://www.mvryan.org/2008/07/speaking-to-computers/</link>
		<comments>http://www.mvryan.org/2008/07/speaking-to-computers/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 05:07:00 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Learn To Program]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.mvryan.org/?p=122</guid>
		<description><![CDATA[As we discussed in the last post, programming a computer is the process of manipulating the computer to do what you want it to do &#8211; to make this generic invention into a specific invention for your task. Programming a computer is nothing more than telling it what to do. So the tricks of programming [...]]]></description>
			<content:encoded><![CDATA[<p>As we discussed in the last post, programming a computer is the process of manipulating the computer to do what you want it to do &#8211; to make this generic invention into a specific invention for your task.  Programming a computer is nothing more than telling it what to do.  So the tricks of programming are:</p>
<ul>
<li>Giving the computer clear instructions so it will do what you want</li>
<li>Translating those instructions into a language the computer can understand</li>
</ul>
<p>A computer is very much like a well-trained dog:  A computer will always do exactly what it is told, if possible.  You may be thinking that this is not correct.  Actually it is completely correct.  Unless what you want the computer to do is impossible (like divide a number by zero), a computer always does what it is told.  Where the confusion comes in is that often a computer is not told to do what we thought we told it to do.</p>
<p>What is sometimes frustrating by a computer is that it does a poor job of understanding intent.  It takes every instruction literally; it cannot interpret what you really meant to say.  So one of the challenges in computer programming is in learning how to express ourselves clearly so a computer will do exactly what we tell it to do.</p>
<p>That&#8217;s only half the battle, give or take.  Translating those instructions into computer language is the other half.  So what, exactly is the language of a computer?</p>
<p>To understand this, let&#8217;s digress a bit and talk about <a href="http://en.wikipedia.org/wiki/Paul_Revere#The_Midnight_Ride_of_Paul_Revere" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Paul_Revere_The_Midnight_Ride_of_Paul_Revere?referer=');">Paul Revere&#8217;s midnight ride</a>.  Prior to April 18, 1775, Paul Revere and Robert Newman had come upon a code whereby Newman could communicate to Revere the movements of the British troops.  They agreed to communicate via lanterns:  one lantern if the troops were moving in by land, and two lanterns if the troops were moving in by sea.</p>
<p>Let&#8217;s use a zero (0) to indicate a lantern that is turned off and a one (1) to indicate a lantern that is turned on.  Here is the complete code that Paul Revere and Robert Newman agreed to:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<th>Lantern 1</th>
<th>Lantern 2</th>
<th>Meaning</th>
</tr>
<tr>
<td align="center">0</td>
<td align="center">0</td>
<td align="center">British Are Not Coming</td>
</tr>
<tr>
<td align="center">1</td>
<td align="center">0</td>
<td align="center">British Coming By Land</td>
</tr>
<tr>
<td align="center">0</td>
<td align="center">1</td>
<td align="center">British Coming By Land</td>
</tr>
<tr>
<td align="center">1</td>
<td align="center">1</td>
<td align="center">British Coming By Sea</td>
</tr>
</tbody>
</table>
<p>The first code is the obvious choice &#8211; no lanterns means nobody is coming.  The second and third codes are just reverses of each other.  Since Mr. Revere could not determine positionally one lantern from the other, holding up either lantern by itself in either of Mr. Newman&#8217;s hands had to signal the same code &#8211; coming by land.  And, of course, two lanterns meant they were coming by sea.</p>
<p>If you understand Paul Revere&#8217;s code, you can comprehend how computer language can be based on switches.  In Paul Revere&#8217;s code different combinations of switches, or lanterns, being turned on or off meant different things.  Other than having different codes, computer language is essentially the same.</p>
<p>The smallest piece of computer information is called a bit, and it represents the state of one switch &#8211; off or on.  We use the same notation as we just described &#8211; a zero (0) means off and a one (1) means on.  The smallest logical grouping of bits is called a byte.  On most computers today a byte is eight bits.  For example, the byte 01000001 could be used to represent the letter A, 01000010 could represent B, etc.</p>
<p>Most of the computers we used in the late 90&#8242;s were called 32-bit machines.  This refers to the size of an instruction &#8211; 32 bits.  Most newer computers today have instructions that are twice as big &#8211; 64 bits.  For example, on the computer I&#8217;m typing on right now, it uses 64 bits &#8211; 64 switches &#8211; to encode every instruction and every piece of data.</p>
<p>Fortunately for us, we don&#8217;t have to actually learn the computer&#8217;s language, the zeroes and ones a computer uses to understand data and instructions.  We instead learn computer programming languages &#8211; like C or Python &#8211; and let tools translate our instructions, written in a programming language, into ones and zeroes the computer can understand.</p>
<p>And that pretty much leads us into the last point of this topic.  In this series of posts we&#8217;re going to learn to program using two different programming languages, C and Python.  Each language has a different approach to giving instructions to the computer.</p>
<p>The second language, Python, is what is called an interpreted language.  We write code in Python, and then we tell the Python interpreter to interpret our code for the computer to tell the computer what to do.  This is kind of like going to the market in a foreign country, with a friend that speaks our language as well as the foreign language.  As we walk through the market, we tell our friend to communicate a message to the shop owner, and after having done that, the friend relays back to us the results of our communication.</p>
<p>The first language, C, is called a compiled language.  Programs written in C are given to a compiler, which translates the program directly into machine language and makes a runnable application out of it &#8211; something the computer itself can run on its own.  This is like telling our friend exactly what we want from the market and having the friend compile together all our instructions at home first.  Then the friend goes directly to the market and does what we wanted.</p>
<p>Both types of languages, compiled and interpreted, offer two different approaches to the problem of converting our instructions into computer language.  Later we&#8217;ll cover advantages of each approach.  For now, the key is to understand what it means when we say that a program is compiled or interpreted.</p>
<p>So we&#8217;ve learned basically four things:</p>
<ul>
<li>In order to get a computer to do what we want we have to give clear instructions.</li>
<li>In order to get a computer to do what we want we have to speak to it in its own language.</li>
<li>Computer language &#8211; instructions and data &#8211; is basically comprised of codes represented by groups of switches that are all in certain states of being on or off.</li>
<li>Computer programming languages are translated into computer language, either via compilers or interpreters.</li>
</ul>
<p>We&#8217;ll start learning to program soon.  Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mvryan.org/2008/07/speaking-to-computers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Computer &#8211; A Unique Invention</title>
		<link>http://www.mvryan.org/2008/07/the-computer-a-unique-invention/</link>
		<comments>http://www.mvryan.org/2008/07/the-computer-a-unique-invention/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 23:08:00 +0000</pubDate>
		<dc:creator>matt</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Learn To Program]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.mvryan.org/?p=120</guid>
		<description><![CDATA[We&#8217;re trying to make computers easy to understand for non-technical &#8211; i.e. normal &#8211; people. If you are one of the normal people, my hope is to make this as easy to understand as possible. Wish us luck! One thing that makes computers hard to understand is that the modern computer is unlike nearly every [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;re trying to make computers easy to understand for non-technical &#8211; i.e. <span style="font-weight: bold;">normal</span> &#8211; people.  If you are one of the normal people, my hope is to make this as easy to understand as possible.  Wish us luck!</p>
<p>One thing that makes computers hard to understand is that the modern computer is unlike nearly every invention that preceded it in one very key way &#8211; rather than having a specific use and purpose, the computer is a highly adaptable invention with a seemingly unlimited number of applications.</p>
<p>Consider, as an alternative, the light bulb.  The primary purpose for the light bulb is to convert electricity into light in order to brighten darkened rooms and areas.  There have been a number of modifications to the light bulb over time, a number of improvements and variations.  Nevertheless, the primary purpose of each has remained the same &#8211; converting electricity into light.</p>
<p>Some might say, &#8220;Yes, but a light bulb can be used for other things.&#8221;  That&#8217;s true.  I can cook with a light bulb to some degree.  I can use it as a signaling device or even to make signs or decorations.  You can even get more creative:  Light bulbs could theoretically be used as a weapon, for example.  But we&#8217;re really straining now to make my statement wrong.  I think we can all agree that, for the most part, the purpose of a light bulb is to convert electricity into light.</p>
<p>Since a light bulb&#8217;s purpose is fairly easily defined, light bulbs are easy to understand.  Even a small child knows what a light bulb is for.</p>
<p>Now compare that to a computer.  What, exactly, is a computer for?</p>
<p>This is a more difficult question to answer.  Is a computer a tool for accessing the Internet?  Reading e-mail?  Managing finances?  Writing letters?  Playing games?  Editing movies?  Making telephone calls?  Watching television?  Listening to music?  Driving a car?  Cooking microwave popcorn?  The fact is, most of us would use a computer to do nearly all of these things and many more, including a myriad of tasks that use computers even though we aren&#8217;t aware of it.</p>
<p>This very fact is what is so fascinating about computers, and yet so daunting and intimidating.  Computers are a unique invention because they don&#8217;t have a single purpose &#8211; rather, they can be applied in many ways to do many types of tasks.</p>
<p>The process of manipulating a computer to do a specific task is the art of computer programming, and it&#8217;s larger discipline, software engineering.  Lots of people think that computer programming is too complex, too advanced, and requiring way too much intellect for normal people.  Trust me, I&#8217;ve known a lot of software developers in my career.  You don&#8217;t necessarily have to be that smart to learn to program a computer.</p>
<p>That&#8217;s one of the goals I have for this blog &#8211; to teach you how to program a computer.  Yes, you, a normal person.  You don&#8217;t have to turn into a nerd to do it.  Stay tuned.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mvryan.org/2008/07/the-computer-a-unique-invention/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

