<?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>brian will . net &#187; Learn Programming</title>
	<atom:link href="http://brianwill.net/blog/category/learnprogramming/feed/" rel="self" type="application/rss+xml" />
	<link>http://brianwill.net/blog</link>
	<description></description>
	<lastBuildDate>Mon, 25 Jan 2010 11:49:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Learn to program in 20+ easy steps</title>
		<link>http://brianwill.net/blog/2009/07/22/learn-to-program-in-20-easy-steps/</link>
		<comments>http://brianwill.net/blog/2009/07/22/learn-to-program-in-20-easy-steps/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 01:32:52 +0000</pubDate>
		<dc:creator>Brian Will</dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Learn Programming]]></category>

		<guid isPermaLink="false">http://brianwill.net/blog/?p=687</guid>
		<description><![CDATA[As it stands, my comprehensive Introduction to Programming series is organized into parts as follows:
1) A first language
To program, you must learn a programming language, so we start by introducing a language called Pigeon. Pigeon is a language created expressly for students in that it features as simple a grammar as I believe possible while [...]]]></description>
			<content:encoded><![CDATA[<p>As it stands, my comprehensive <em>Introduction to Programming</em> series is organized into parts as follows:</p>
<p><strong>1) A first language</strong></p>
<p>To program, you must learn a programming language, so we start by introducing a language called <em>Pigeon</em>. Pigeon is a language created expressly for students in that it features as simple a grammar as I believe possible while still reflecting the concepts found in &#8220;real&#8221; languages. Learning Pigeon first should make later tackling your first real language much easier.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/p/2F1485C69B311408&amp;hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/p/2F1485C69B311408&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><strong>2) Numbers</strong></p>
<p>Computers are deeply mysterious until you understand how information is represented as bits. We start with numbers because their bit representation is used as a basis for representing other kinds of data.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/p/F53769BC814C6327&amp;hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/p/F53769BC814C6327&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><strong>3) Text</strong></p>
<p>Text is represented using what are called <em>character sets</em>. The most commonly used character sets are ASCII and Unicode.</p>
<p><strong>4) Images</strong></p>
<p>In this part, we briefly discuss some elementary concepts of  computer graphics.</p>
<p><strong>5) Hardware and operating systems<br />
</strong></p>
<p>Here we cover essential concepts in computer hardware and operating systems.</p>
<p><strong>6) Languages and tools<br />
</strong></p>
<p>There is a wide array of programming languages in existence. We&#8217;ll survey the most popular ones and discuss their major differences. We&#8217;ll also discuss the associated tools, <em>e.g.</em> debuggers.</p>
<p><strong>7) The Javascript language</strong></p>
<p>The popular language <em>Javascript</em> (not to be confused with <em>Java</em>, another popular language) is very close semantically to Pigeon, so it&#8217;s a natural choice for our first real language.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/p/92D70E98B0336AB2&amp;hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/p/92D70E98B0336AB2&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><strong>8) The Internet</strong><strong> </strong><strong> and the web</strong></p>
<p>Here we&#8217;ll discuss the basic structure of the Internet and the protocols on which it runs.</p>
<p><strong>10) Structured data formats</strong></p>
<p>Structured data is data in which individual pieces of data (numbers, pieces of text, <em>etc.</em>) are related together in an organized way. A person, for instance, can be represented as structured data: a name (text), an age (number), an address (text), <em>etc.</em> We have standard formats for such data such as XML (E<strong>x</strong>tensible <strong>M</strong>arkup <strong>L</strong>anguage) and JSON (<strong>J</strong>ava<strong>s</strong>cript <strong>O</strong>bject <strong>N</strong>otation), among others.</p>
<p><strong>11) </strong><strong>HTML and CSS</strong></p>
<p>Webpages are documents comprised primarily of HTML (Hypertext Markup Language) and CSS (Cascading Style Sheets). We&#8217;ll also cover the role of Javascript in webpages.</p>
<p><strong>12) The Unix command line shell</strong></p>
<p>Before graphical user interfaces, computer users interacted with the computer using a <em>command line shell</em>&#8212;basically, an interactive programming language in which each command the user types is immediately executed. Today, shells are still powerful tools used by programmers and system administrators. In this unit, we&#8217;ll focus on the shell language used most commonly in Unix systems, BASH (the <strong>B</strong>ourne <strong>A</strong>gain <strong>Sh</strong>ell). We&#8217;ll also discuss the command-line programs commonly available on Unix systems and discuss how these programs can be tied together through the shell.</p>
<p><strong>13) Assembly language<br />
</strong></p>
<p>Assembly language represents the lowest level of programming. Here we&#8217;ll cover assembly language for x86 processors using the NASM assembler.</p>
<p><strong>14) The C language</strong></p>
<p>The C programming language is one of the oldest and most influential languages still in use today. Unlike most other languages (including Pigeon and Javascript), C gives programmers a fine degree of control over the hardware, making it suitable for writing systems software (such as operating systems, like the Linux kernel) and for programs requiring high performance, such as the latest computer games.</p>
<p><strong>15) Data structures and algorithms</strong></p>
<p>There are only so many fundamental ways of organizing data. We&#8217;ll discuss these data structures and the algorithms associated with them.</p>
<p><strong>16) Object-oriented programming</strong></p>
<p>Object-oriented programming is a style of programming in which the programmer, rather than focusing on action,  focuses on establishing types of data and the actions associated with those types. This style is strongly encouraged in a number of so-called &#8220;object-oriented languages&#8221;, including Java.</p>
<p><strong>17) The Java language<br />
</strong></p>
<p>Since the late 1990&#8217;s, <em>Java</em> has been the most commonly used programming language. Java&#8217;s success has spawned an imitator from Microsoft called <em>C#</em> (&#8220;C sharp&#8221;), which differs in many details but is fundamentally similar. We cover Java instead of C# mainly because Java is somewhat simpler and still more popular.</p>
<p><strong>18) Encryption, security, and compression</strong></p>
<p>We&#8217;ll discuss the basics of encryption, security, and compression, which aren&#8217;t nearly as arcane as you might imagine.</p>
<p><strong>19) Graphical interfaces</strong></p>
<p>To write a program with a GUI (graphical user interface), a programmer uses a library called a GUI toolkit. We&#8217;ll focus on one such toolkit for Java called <em>Swing</em>.</p>
<p><strong>20) Version control</strong></p>
<p>When we write code, it&#8217;s very nice to be able to keep track of all of our changes such that we can always go back to an earlier version when we mess something up. It&#8217;s also really important to coordinate our changes with others working on the same code. For these reasons, programmers use programs called <em>version control systems</em> to manage their code. We&#8217;ll focus on two popular such programs, <em>Subversion </em>(abbreviated as &#8220;svn&#8221;) and <em>Git</em>.</p>
<p><strong>21) Databases</strong></p>
<p>A database is a specialized program for storing large amounts of data in a way that can be searched and retrieved efficiently. Databases are used everywhere: for instance, a popular website like Amazon.com uses databases to store product and customer information. The most commonly used databases are <em>relational</em> databases, meaning they structure data in the style of the <a href="http://en.wikipedia.org/wiki/Relational_model"><em>relational model</em></a>. The programs we write typically communicate with a relational database using a query language called SQL (pronounced &#8220;sequel&#8221;, <strong>S</strong>tructured <strong>Q</strong>uery <strong>L</strong>anguage).</p>
<p><strong>22) Regular expressions</strong></p>
<p><a href="http://en.wikipedia.org/wiki/Regular_expression"><em>Regular expressions</em></a> (sometimes abbreviated as &#8220;regex&#8221;) are a sophisticated tool for finding patterns of characters in text. For instance, using a regular expression, I could easily remove from a text all instances of the word &#8220;curry&#8221; following the word &#8220;lemon&#8221;.</p>
<p><strong>23) The Clojure language<br />
</strong></p>
<p><em></em>Many regard <em>Lisp</em> as the most elegant of all languages, and <em>Clojure</em> is a particularly elegant recent variant of Lisp. Clojure gives us an opportunity to introduce <em>functional programming</em>, a style of programming in which we avoid &#8220;<a href="http://en.wikipedia.org/wiki/State_%28computer_science%29">state</a> change&#8221; as much as possible.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="480" height="385" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/p/AC43CFB134E85266&amp;hl=en&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="480" height="385" src="http://www.youtube.com/p/AC43CFB134E85266&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><strong>24) Automating the build process<br />
</strong></p>
<p>The whole process of translating source code and data files into a working program is called the <em>build process.</em> In most software projects, we end up building the project many times over as we develop the code, fix bugs, and change features, so it makes sense that we automate this whole process as much as possible. In this part, we&#8217;ll discuss popular build tools, such as the Unix <em>make</em> program.</p>
]]></content:encoded>
			<wfw:commentRss>http://brianwill.net/blog/2009/07/22/learn-to-program-in-20-easy-steps/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Clojure introduction video; Pigeon on hiatus</title>
		<link>http://brianwill.net/blog/2009/04/19/clojure-introduction-video-pigeon-on-hiatus/</link>
		<comments>http://brianwill.net/blog/2009/04/19/clojure-introduction-video-pigeon-on-hiatus/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 11:34:32 +0000</pubDate>
		<dc:creator>Brian Will</dc:creator>
				<category><![CDATA[Education]]></category>
		<category><![CDATA[Learn Programming]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://brianwill.net/blog/?p=190</guid>
		<description><![CDATA[I&#8217;ve created an hour long introduction video to Clojure, a new dialect of Lisp.
I&#8217;ve also decided to leave unfinished my implementation of Pigeon, my pedagogic programming language, even though it would take a trivial amount of work to complete. I now think that it&#8217;s not really important for students to actually run Pigeon code; in [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve created <a href="http://www.youtube.com/view_play_list?p=AC43CFB134E85266&amp;playnext=1&amp;playnext_from=PL&amp;v=Aoeav_T1ARU">an hour long introduction video</a> to <a href="http://clojure.org">Clojure</a>, a new dialect of Lisp.</p>
<p>I&#8217;ve also decided to leave unfinished my implementation of Pigeon, my pedagogic programming language, even though it would take a trivial amount of work to complete. I now think that it&#8217;s not really important for students to actually <em>run</em> Pigeon code; in fact, I think it best to discourage students from writing anything beyond a trivial amount of code in Pigeon lest they waste time rather than just moving on to later material.</p>
<p>Instead, my focus now is on creating a course of videos for total newbs to programming, totaling about 10 hours and running in this sequence:</p>
<ul>
<li>A first language (a run through of Pigeon)</li>
<li>Numbers (how numbers are represented as bits)</li>
<li>Text and images (how they are represented as bits)</li>
<li>The system (hardware and OS basics)</li>
<li>Language and tools survey</li>
<li>Javascript (<em>sans</em> browser)</li>
<li>The internet and the web</li>
<li>HTML / CSS / Javascript (in browser)</li>
<li>The command line and Unix environment</li>
<li>C</li>
<li>Data structures and algorithms</li>
<li>OOP</li>
<li>Java</li>
<li>Encryption, security, and compression</li>
<li>GUI Toolkits (Swing?)</li>
<li>Version control</li>
<li>Databases</li>
</ul>
<p>I&#8217;m processing the audio and video for the first two, but that leaves a lot of work as I only have sketches of the remaining parts.</p>
]]></content:encoded>
			<wfw:commentRss>http://brianwill.net/blog/2009/04/19/clojure-introduction-video-pigeon-on-hiatus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
