Loading wiki pages...

Wiki Version:
<h4><a href="" rel="nofollow">&larr; Back to Home</a></h4> <h1>Motivation</h1> <h3>How We All Started</h3> <p>Everyone who has established a career in the field of computing today probably remembers their first few attempts at programming.</p> <p>Regardless of whether it all started with a few lines of a C program that printed out <code>Hello, World!</code> or a few blocks snapped together in <a href="" rel="nofollow">Scratch</a>, no one can deny the state of confusion they were in as they struggled with technical details. The difference between brackets (<code>[ ]</code>) and parentheses (<code>( )</code>) (in the case of the C program), or how <em>Control</em> blocks cannot be used with <em>Event</em> blocks (in the case of Scratch), or the like, might seem obvious now, but not many can say they had absolutely no trouble understanding them at first.</p> <p>For the overwhelming majority of professional programmers who went through the traditional route of learning the concepts of programming in a classroom setting, fighting with the syntax of the implementation language they were taught in must be a memory that is as vividly painful yet delightfully nostalgic as it was seemingly inevitable at the time.</p> <h3>Why Hasn't Teaching Programming Changed?</h3> <p>To put things into perspective, technology has advanced to the state that the logic programmed into cars and airplanes is even beginning to surpass the optimal situational awareness abilities of its human controllers. Yet this scene of fighting with understanding the syntax of a language still repeats in almost all classrooms. The only difference is that students are learning to program in the "next best language".</p> <p>How is it that the process of teaching programming has more-or-less stayed the same when computing as a field has grown so much in complexity over the years? More precisely, why has early computing education not yet escaped the pattern of, as Stephen Bloch has put it, "drowning the students with syntax?"</p> <h3>The Fundamental Definition of <em>Programming</em></h3> <p>Except in extreme circumstances, the abilities that most instructors aim to pass on to their pupils consist not of any particular syntax of a programming language, but rather the analytic skills that are required to solve challenging problems using a tool called <em>programming</em>.</p> <p>What, then, is <em>programming</em>? Is it not, in its most fundamental form, <em>a process of planning out stages of execution for the solution to a given problem</em>? If that were to be true, why should the concept of it be so foreign that most of those who would introduce themselves as "programmers" today have some recollection of struggling with their introductory programming courses?</p> <p>Here, I must acknowledge that not everyone may instantly agree wit the fundamental definition of programming stated above. Nevertheless, I still assert that the concept of programming shall not be as foreign as it is currently being presented in today's classrooms. I substantiate this assertion with the anecdotal argument in the subsequent section.</p> <h3>Counting Negative Integers in a List</h3> <p>The problem of getting a count of negative values in a list of integers is trivial enough to be asked of any student at any level of education. But, I have observed that when such a problem is asked in a programming course, the difficulty of the problem skyrockets as students somehow find a strong determination to understand the given problem strictly within the context of the implementation language.</p> <p>For instance, in the list of integers given as below:</p> <pre class="highlight"><code>[1 -2 3 0 -7 2 5 -11]</code></pre> <p>If we were to ask 5th-graders how they may go about getting the count of negative numbers, they will not find it troublesome to draw up a plan.</p> <p>However, if we ask the same exact question to introductory programming students who have recently learned about iterating through a list, we will easily find a handful of students who struggle to come up with an answer. In assisting my own students, I have encountered this in many occasions, <strong>even when the question does not require them to construct a program to do so</strong>.</p> <p>Certainly, it is not unnatural for students in a computer programming course to attempt to solve the given problem with the skills they are practicing. Nevertheless, what many students and instructors fail to recognize is that <strong>premature attempts to construct a snippet of code on a computer to solve the given problem actually hinders the <em>process of planning out stages of execution for the solution to the given problem</em>.</strong></p> <h3>There Must Be a Better Way</h3> <p>Given the aforementioned fundamental definition of programming and the motivation for the introductory programming courses, I claim that there must be a method which can help the instructors of said courses teach the core concepts of computer programming without having to drown students in syntax.</p> <p>Now, it is impractical to deny the usefulness and necessity of introducing a programming language in an introductory course. Still, I assert that as long as there exists a framework in which the members of a classroom can effectively utilize their existing non-computer programming skills to derive and refine the core computer programming concepts, teaching and learning computer programming shall be feasible with minimal floundering due to the syntax of any programming language.</p> <p><br></p> <h4><a href="" rel="nofollow">&rarr; Continue to Nomenclature</a></h4>
OSF does not support the use of Internet Explorer. For optimal performance, please switch to another browser.
This website relies on cookies to help provide a better user experience. By clicking Accept or continuing to use the site, you agree. For more information, see our Privacy Policy and information on cookie use.

Start managing your projects on the OSF today.

Free and easy to use, the Open Science Framework supports the entire research lifecycle: planning, execution, reporting, archiving, and discovery.