<?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>Tecno-Pedagogia &#187; beginning programming</title>
	<atom:link href="http://www.christopherslade.com/tag/beginning-programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.christopherslade.com</link>
	<description>Random Thoughts on Computer Science Education, and Other Topics</description>
	<lastBuildDate>Fri, 05 Feb 2010 03:31:21 +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>Enticing Computer Science Majors</title>
		<link>http://www.christopherslade.com/2009/08/enticing-computer-science-majors/</link>
		<comments>http://www.christopherslade.com/2009/08/enticing-computer-science-majors/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 10:12:11 +0000</pubDate>
		<dc:creator>cslade</dc:creator>
				<category><![CDATA[Teaching]]></category>
		<category><![CDATA[beginning programming]]></category>
		<category><![CDATA[Graphics]]></category>

		<guid isPermaLink="false">http://www.christopherslade.com/?p=100</guid>
		<description><![CDATA[What enticed you to become what you are today?  For me, Computer Science enticed me by giving me the following:

A way to solve problems.  I love trying to figure out new stuff and make things work.  In computer science, we are given a problem and a processor, and then we have to get the processor [...]]]></description>
			<content:encoded><![CDATA[<p>What enticed you to become what you are today?  For me, Computer Science enticed me by giving me the following:</p>
<ul>
<li>A way to solve problems.  I love trying to figure out new stuff and make things work.  In computer science, we are given a problem and a processor, and then we have to get the processor to solve the problem.</li>
<li>A way to build something useful.  One of my most satisfying projects was to build the <a href="http://intramurals.byu.edu" target="_blank">BYU Intramural Activities</a> scheduling and online registration system.  I had played<span style="color: #000000;"> Intramurals m</span>any times and it was exciting to build something that I knew I would use, along with 10,000 other BYU students per semester.  It was also fun to see people explain the new rules (that I helped create) to me, having no idea I created the site they were using.  (They have put a new look on it, but I believe they are still using my system today.)</li>
<li>A way to learn about how things work.  I have had a hard time understanding why people don&#8217;t want to know how something works, because I have to know how everything works.  From cars to the ocean tides, I want to know how it works.  It strikes me odd that most Computer Science graduates have a very limited understanding on how a computer actually works.  They might know a little bit about the CPU, but they really don&#8217;t know how all of the I/O devices, and the operating system all function together.  For the most part, they are completely content just knowing that it works and writing programs that run on top of it all.  (Of course, I am sure the reason why people don&#8217;t want to know how everything works is due to a limited amount of time.  No?  Okay, so maybe I am just a weirdo.)</li>
</ul>
<p>Anyway, as I have been developing lots of programming projects to torture my students, I have realized the best assignments have some sort of excitement factor.  In order to create the best labs, I really need to know what entices students.</p>
<p>One way is with graphics.  Many students like creating graphics, or so I have been told.  This is why they created <a title="Educational Software that teaches students how to program in a 3D environment." href="http://www.alice.org">Alice</a>.  Unfortunately,  Alice has very little appeal to me.  I can&#8217;t really solve any new problems with it.  I don&#8217;t know why, but making a girl skate around on the ice for hours isn&#8217;t all that motivating to me.  So when some of my colleagues suggested that I make everything in Computer Science graphical, it really bothered me.  Mostly because once they graduate, chances are they are going to be typing text into a text editor or an <a title="Integrated Development Environment" href="http://en.wikipedia.org/wiki/Integrated_development_environment">IDE</a> 8 hours a day.  So, (to me) their goal was to trick the students into liking Computer Science by making it fun &#8211; ie. graphical.  I used to think, &#8220;Computer Science should be fun by itself, it doesn&#8217;t need skating ballerinas.  If they don&#8217;t like it, they should probably choose another major.&#8221;</p>
<p>Don&#8217;t get me wrong, I was never against including more graphics in my assignments.  I just wasn&#8217;t motivated to spend hours trying to create labs that did have graphics in them.</p>
<p>When one of my colleagues introduced a graphics lab where students draw beach huts that can be posted on a web page, it made me think a lot about my previous opinions about graphics in Computer Science.  It was easy to tell that some of the students spent a lot of time making their hut.  I then thought about what motivates them to spend 3-4 extra hours on their lab when they probably have a lot of other assignments and, here in Hawaii, a lot of surfing to do. Okay, so I had to admit that this lab had some sort of excitement factor to it.  Then, does that mean that everyone who spent extra time to make their hut prettier has the wrong motivation, and will eventually be really upset that we tricked them to think that Computer Science is really just making fun pictures?</p>
<p>So here are some of the possible factors that motivated these students:</p>
<ul>
<li>Being an artist.  They liked painting their canvas by typing words like drawCircle.</li>
<li>A sense of accomplishment by actually creating something they can show people, just like I liked being the Intramural site creator.</li>
<li>Overcoming a challenge.</li>
</ul>
<p>Can you think of others?</p>
<p>So, if the students are motivated only by the first factor that I mentioned, my guess is that they have a major disappointment coming their way.  However, if they are motivated by the other factors, they could be hooked enough to trade their surf board for a new computer.</p>
<p>So, are graphics the only way to motivate people into Computer Science?  Maybe so, and this is why.  Most beginning CS having only interacted with the graphical aspects of a computer.  Surfing the web is highly graphical, especially with flash ads on every page.  Even writing a report has many graphical elements (how long do you spend formatting?).  So, when a student actually builds something graphical he can feel like he created something that fits into his paradigm of a computer program.</p>
<p>Not until they catch a vision of  all of the other things computers do behind the GUI will they start to appreciate what programming really is.  For a beginning programming class, graphics will probably do a lot of good, but we have to transition them to the real Computer Science by having them explore behind the GUI.  So, I guess I have to say, &#8220;Skate on ballerina.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.christopherslade.com/2009/08/enticing-computer-science-majors/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Teaching Object-Oriented Programming</title>
		<link>http://www.christopherslade.com/2008/10/teaching-object-oriented-programming/</link>
		<comments>http://www.christopherslade.com/2008/10/teaching-object-oriented-programming/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 12:00:01 +0000</pubDate>
		<dc:creator>cslade</dc:creator>
				<category><![CDATA[Teaching]]></category>
		<category><![CDATA[beginning programming]]></category>
		<category><![CDATA[oo programming]]></category>

		<guid isPermaLink="false">http://www.christopherslade.com/?p=17</guid>
		<description><![CDATA[Since a lot of our students come here with very little computer experience, we had our beginning programming course split into two courses.  The first half focused on variables and control structures, and the second half focused on object-oreinted programming with C++.  Some time last year we decided to teach a scripting language (Perl) in [...]]]></description>
			<content:encoded><![CDATA[<p>Since a lot of our students come here with very little computer experience, we had our beginning programming course split into two courses.  The first half focused on variables and control structures, and the second half focused on object-oreinted programming with C++.  Some time last year we decided to teach a scripting language (Perl) in the first course due to it&#8217;s simplicity &#8212; hello world is only one line.  We then created a two course series in object-oriented programming in Java.  This would allow us to make sure our students had a solid object-oriented background and three classes to develop their programming and problem solving skills, something that takes a lot of practice.</p>
<p>During the summer, I spent a lot of time creating labs and planning lectures for this new Java course.  After my Java class today, I had a discussion with a few struggling students.  After listening to their comments, I realized I had made a mistake on how I organized the class.  I decided to follow what most textbooks suggest and even brag about, focus on objects right at the beginning.  To me, this sounded like the best way to explain objects and classes.  An object is just like an object in the real world.  It has a nice interface and you just tell it what to do and it does it.</p>
<p>Today, I realized a major problem with this. They are still trying to grasp the concept of methods, and now they have to put the method in one file and the call in another.  They are still trying to grasp the concept of a variables, and now they put the declaration at the top of a class, and then use them inside the methods.  Plus, when they want to use a variable they are probably writing their main method and the variable is hidden in another file.  On top of all of this, they are trying to solve a problem.  Try working out a math problem on a bunch of different puzzle pieces and then put the pieces together in the right order to form a solution.  Thinking back to my beginning programming class, I remember struggling with the same thing when I first learned about objects and classes.</p>
<p>So here is my solution.  First, teach them about variables and how to use them.  Next focus on types, and then control structures, methods, and arrays.  Then present the idea of an object and class.  But first, as just a bunch of different variables that are related (like a struct).  What might work best is an example of keeping track of students -  their names, ids, and addresses.  Isn&#8217;t it a lot of work to declare a string for each student and a int for their id and another string for their address and somehow keep them related?  Wouldn&#8217;t it be nice to have all of those grouped together in an &#8220;array&#8221;?  Well we can, it&#8217;s called an object.  Make the member variables public and use them like any other variable.  Next explain how it would be nice if the address edit method was somehow grouped with the student as well.  Then explain the constructor, and work towards encapsulation.</p>
<p>This way, the student first learns the basics without the need to memorize where everything goes.  They also learn object-oriented programming the same way it was invented, which shows the value of object-oriented programming.  Show them the structured programming way, and then show them how object-oriented programming improves upon it and simplifies the code.  By thinking that the why of oo-programming is to complex to explain, I actually made oo-programming more confusing.</p>
<p>Now I have to reorganize my class for next semester.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.christopherslade.com/2008/10/teaching-object-oriented-programming/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
