Answers.Body: <p>Insufficient programming experience is the thing that impedes progress at A-Level, in my experience. </p>
  
  <p>The current UK A-Levels from OCR exam board (less so AQA) emphasises "Computational Thinking" (CT), such as abstraction, as a theme of the course. CT, as delivered in the course material, has some overlap with stages in system development stages such as analysis. Also there is another strand "problem solving" and another "computational methods". There are more "traditional" topics such as data structures and algorithms. There are questions in the exam where a student has to analyze, correct, modify or create from scratch a pseudocode "snippet" to address a particular small-scale algorithmic problem such as navigating a tree data structure. </p>
  
  <p>With that context, the most basic exercises in the course are usually beyond those A-Level students with little prior exposure to programming. The rigours of getting code to run or compile without syntax errors or fix basic logical errors is an alien task to these students and they often give up, submitting source code that does not compile or run (if Python). These students often have no "framework" of what an algorithm is; to take input data and transform it in some way. Lack of this "mental framework" means CT is just "pile of words" to neo-programmers; they have no concrete experience against which to relate abstraction, decomposition, recursion, concurrency etc. Often assignments are submitted, which if in a programming language don't run, let alone produce correct outputs under any inputs. Pseudocode assignments are very difficult to mark because of a host of basic syntax errors. For some, submitting "something" is "job done" by the student because the time to develop the necessary skills, understanding, approach, identifying and diagnosing errors is just not "there". Pseudocode is used because the exam uses it rather than a specific language such as Java or C# or C++ or .... to "level the field" among all candidates who may have been taught by someone with knowledge or preferences for a specific language.</p>
  
  <p>There is also a requirement to produce and document a non-trivial program / system - weighted at 20% of the final course mark. Those students with no programming background make slow progress in all stages of the development and the resulting code is usually rather limited in technical complexity - although there is ongoing debate on teacher's forums as to the necessity for "complexity" in the project.</p>
  
  <p>One possible explanation for this (and it's just my opinion) is the inexperienced students haven't had exposure to 1) short term failure of their efforts, i.e. their programs don't work, but 2) the reassurance that eventually, with effort, they can fix their "local" errors and solve the overall problem. So, some prior programming experience develops the right perseverence mindset which I feel is more important than "good" programming style or wide/deep knowledge. Continued engagement will refine the skill.</p>
  
  <p>It is entirely possible for a student with no programming background to develop those technical and problem-solving skills over 18 months - but it is rare - and often the student will drop out feeling the course is completely inaccessible. However, if the above sounds entirely negative our highest achieving student last year had no programming background prior to starting the course.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-06-18T20:17:46.800Z
Answers.LastActivityDate: 2019-06-19T16:09:24.230Z
Answers.LastEditDate: 2019-06-19T16:09:24.230Z
Answers.UserDisplayName: Clive Long
Answers.Body: <p>Keep going as normal, just adapt the lessons to give what they may not have studied yet.  In other words give a quick and usable pattern and explain only the bits of it that they need to know (give a formula and what it does but not how to derive it, give code and what it does without explaining how it does it).</p>
  
  <p>Context: I teach something in between programming and mathematics (intro to machine learning) to undergrads plus a couple of non-computer science grads (e.g. biology), at a London university.  I do it within a similar time-scale as you: 2 hours a week over 1/3 of the year. My course has as pre-requisites python programming (another course) and GCSE.  But since those requisites are not formally tracked a lot of students just enroll due to the fanciness of ML these days.</p>
  
  <hr>
  
  <p>No GCSE <em>often</em> means (in the worst cases) <strong>very poor mathematical understanding</strong>: e.g. people who managed to get through school without getting right triangle rules.</p>
  
  <p>Surprisingly most people are pretty good at using formulas whilst not very good at thinking why the formulas work the way they do.  What I do in order to get the majority of students to understand is:</p>
  
  <ol>
  <li>I write down the formulas I need and tell them that they just work.</li>
  <li>Take one part of the formula and draw a graph, then another part and draw another graph.</li>
  <li>Walk over the room in the same fashion as both graphs go in order to demonstrate formula behaviour.</li>
  </ol>
  
  <p>I find that someone can understand what parts of a formula do, despite not being able to understand how we get to the formula or how the complete graph looks.  e.g. we have a part of a formula which searches a bigger and bigger part of space, whilst another part of the formula reduces the first behaviour when we get more points found.</p>
  
  <p>Most students are alright in being fed mathematics as something that <em>"works for these specific problems"</em>, without the theoretical bit on how it links with the rest of mathematics.  And, to be fair, whether math is something that describes the entire universe or just something we came up with to make specific problems work is an ongoing philosophical discussion.</p>
  
  <hr>
  
  <p>For the programming bit, i.e. students who come without programming knowledge, I have just shallow experience.  This is probably an opinionated belief so take it with a spoonful of salt.</p>
  
  <p>I find that no-one ever managed to teach a student how to program.  One can only do two things: give the students resources in the right order (from simple to more complicated), and give the students interesting problems to solve given their level.
  For example, teaching a few lines of code that fetch an HTML page for data scraping is just boilerplate that will get forgotten; but teaching the scraping as boilerplate but then teaching some interesting analysis that can be done by walking the DOM and hyperlinks often encourages imaginative thinking.</p>
  
  <p>Full example: I always give students a data scraping exercise in which they need to evaluate the percentage of male and female actors/actresses in Die Hard movies, by scraping the Wikipedia pages for the movies.</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-06-19T07:18:50.400Z
Answers.Text: Thanks for your input. There is some useful information. However I am not thinking of students with to GCSEs, just no GCSE in computer-science. Also your actions are aimed at the A-level/university teacher, not the KS3 teacher.
Answers.UserDisplayName: ctrl-alt-delor
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-06-19T11:26:42.933Z
Answers.Text: @ctrl-alt-delor - You are absolutely correct.  My main objectives are that the *undergrads* come out with either (a) a basic understanding which can later give them capacity to decide what is an ML problem and what is not or (b) an interest to pursue the topic further (and perhaps enroll in the advanced course later.  My experience with any student below undergrad level is far and in between (no more than a handful of hour with students preparing for A-levels, on a voluntary basis).
Answers.UserDisplayName: grochmal
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-06-19T14:47:29.910Z
Answers.Text: @BrianTompsett-汤莱恩 Fixed!  And thank you.  Somehow, only the last one confused me, so I didn't even notice the others.
Answers.UserDisplayName: Ben I.
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2019-06-18T22:56:49.063Z
Answers.LastActivityDate: 2019-06-19T14:47:02.173Z
Answers.LastEditDate: 2019-06-19T14:47:02.173Z
Answers.UserDisplayName: grochmal
Body: <p>I will be teaching key-stage-3 pupils, in a school with no key-stage 4 or 5 in the computing subjects. Some of these pupils may wish to do computing at key-stage-5 at another school. </p>
  
  <p>Does anyone have experience of teaching A-level students, that have not done GCSE computer-science? Or even University teachers teaching students with no prior experience (<strong>Please give context in your answer</strong>).</p>
  
  <p>What can I do to better prepare them? While still giving age appropriate lessons.</p>
  
  <hr>
  
  <p>Other factors: Because of the size of the computing department, I will have less time with them than I have had in other schools (one hour a week for 1/3 of a year).</p>
  
  <p>Translation: <a href="https://en.wikipedia.org/wiki/Key_Stage" rel="nofollow noreferrer">key-stage</a></p>
  
  <ul>
  <li>key-stage 3: age 11→14</li>
  <li>key-stage 4: age 15→16, first external exams, GSCE, level 1 and 2.</li>
  <li>key-stage 5: age 16→18, (A-level, level 3)</li>
  </ul>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2019-06-09T14:20:12.703Z
Comments.Text: For an explanation of terms, if you aren't from UK, see: https://cseducators.meta.stackexchange.com/a/218/1293
Comments.UserDisplayName: Buffy
Tags: <curriculum-design>
Title: What do A-level students, that have not done GCSE, struggle with?
ThreadText: # What do A-level students, that have not done GCSE, struggle with?
  
  (Asked by: username_0 on 2019-06-09)
  
  I will be teaching key-stage-3 pupils, in a school with no key-stage 4 or 5 in the computing subjects. Some of these pupils may wish to do computing at key-stage-5 at another school.
  
  Does anyone have experience of teaching A-level students, that have not done GCSE computer-science? Or even University teachers teaching students with no prior experience (**Please give context in your answer**).
  
  What can I do to better prepare them? While still giving age appropriate lessons.
  
  ---
  
  Other factors: Because of the size of the computing department, I will have less time with them than I have had in other schools (one hour a week for 1/3 of a year).
  
  Translation: [key-stage](https://en.wikipedia.org/wiki/Key_Stage)
  
  * key-stage 3: age 11→14
  * key-stage 4: age 15→16, first external exams, GSCE, level 1 and 2.
  * key-stage 5: age 16→18, (A-level, level 3)
  
  **Tags:** curriculum-design
  
  > **Comments:**
  > **username_1**: For an explanation of terms, if you aren't from UK, see: https://cseducators.meta.stackexchange.com/a/218/1293  
  
  ---
  
  ## 2 answers
  
  ### Answer by username_2 on 2019-06-18. Score: 3
  
  Insufficient programming experience is the thing that impedes progress at A-Level, in my experience.
  
  The current UK A-Levels from OCR exam board (less so AQA) emphasises "Computational Thinking" (CT), such as abstraction, as a theme of the course. CT, as delivered in the course material, has some overlap with stages in system development stages such as analysis. Also there is another strand "problem solving" and another "computational methods". There are more "traditional" topics such as data structures and algorithms. There are questions in the exam where a student has to analyze, correct, modify or create from scratch a pseudocode "snippet" to address a particular small-scale algorithmic problem such as navigating a tree data structure.
  
  With that context, the most basic exercises in the course are usually beyond those A-Level students with little prior exposure to programming. The rigours of getting code to run or compile without syntax errors or fix basic logical errors is an alien task to these students and they often give up, submitting source code that does not compile or run (if Python). These students often have no "framework" of what an algorithm is; to take input data and transform it in some way. Lack of this "mental framework" means CT is just "pile of words" to neo-programmers; they have no concrete experience against which to relate abstraction, decomposition, recursion, concurrency etc. Often assignments are submitted, which if in a programming language don't run, let alone produce correct outputs under any inputs. Pseudocode assignments are very difficult to mark because of a host of basic syntax errors. For some, submitting "something" is "job done" by the student because the time to develop the necessary skills, understanding, approach, identifying and diagnosing errors is just not "there". Pseudocode is used because the exam uses it rather than a specific language such as Java or C# or C++ or .... to "level the field" among all candidates who may have been taught by someone with knowledge or preferences for a specific language.
  
  There is also a requirement to produce and document a non-trivial program / system - weighted at 20% of the final course mark. Those students with no programming background make slow progress in all stages of the development and the resulting code is usually rather limited in technical complexity - although there is ongoing debate on teacher's forums as to the necessity for "complexity" in the project.
  
  One possible explanation for this (and it's just my opinion) is the inexperienced students haven't had exposure to 1) short term failure of their efforts, i.e. their programs don't work, but 2) the reassurance that eventually, with effort, they can fix their "local" errors and solve the overall problem. So, some prior programming experience develops the right perseverence mindset which I feel is more important than "good" programming style or wide/deep knowledge. Continued engagement will refine the skill.
  
  It is entirely possible for a student with no programming background to develop those technical and problem-solving skills over 18 months - but it is rare - and often the student will drop out feeling the course is completely inaccessible. However, if the above sounds entirely negative our highest achieving student last year had no programming background prior to starting the course.
  
  
  ---
  
  ### Answer by username_3 on 2019-06-18. Score: 2
  
  Keep going as normal, just adapt the lessons to give what they may not have studied yet. In other words give a quick and usable pattern and explain only the bits of it that they need to know (give a formula and what it does but not how to derive it, give code and what it does without explaining how it does it).
  
  Context: I teach something in between programming and mathematics (intro to machine learning) to undergrads plus a couple of non-computer science grads (e.g. biology), at a London university. I do it within a similar time-scale as you: 2 hours a week over 1/3 of the year. My course has as pre-requisites python programming (another course) and GCSE. But since those requisites are not formally tracked a lot of students just enroll due to the fanciness of ML these days.
  
  ---
  
  No GCSE *often* means (in the worst cases) **very poor mathematical understanding**: e.g. people who managed to get through school without getting right triangle rules.
  
  Surprisingly most people are pretty good at using formulas whilst not very good at thinking why the formulas work the way they do. What I do in order to get the majority of students to understand is:
  
  1. I write down the formulas I need and tell them that they just work.
  2. Take one part of the formula and draw a graph, then another part and draw another graph.
  3. Walk over the room in the same fashion as both graphs go in order to demonstrate formula behaviour.
  
  I find that someone can understand what parts of a formula do, despite not being able to understand how we get to the formula or how the complete graph looks. e.g. we have a part of a formula which searches a bigger and bigger part of space, whilst another part of the formula reduces the first behaviour when we get more points found.
  
  Most students are alright in being fed mathematics as something that *"works for these specific problems"*, without the theoretical bit on how it links with the rest of mathematics. And, to be fair, whether math is something that describes the entire universe or just something we came up with to make specific problems work is an ongoing philosophical discussion.
  
  ---
  
  For the programming bit, i.e. students who come without programming knowledge, I have just shallow experience. This is probably an opinionated belief so take it with a spoonful of salt.
  
  I find that no-one ever managed to teach a student how to program. One can only do two things: give the students resources in the right order (from simple to more complicated), and give the students interesting problems to solve given their level.
  For example, teaching a few lines of code that fetch an HTML page for data scraping is just boilerplate that will get forgotten; but teaching the scraping as boilerplate but then teaching some interesting analysis that can be done by walking the DOM and hyperlinks often encourages imaginative thinking.
  
  Full example: I always give students a data scraping exercise in which they need to evaluate the percentage of male and female actors/actresses in Die Hard movies, by scraping the Wikipedia pages for the movies.
  
  > **Comments:**
  > **username_0**: Thanks for your input. There is some useful information. However I am not thinking of students with to GCSEs, just no GCSE in computer-science. Also your actions are aimed at the A-level/university teacher, not the KS3 teacher.  
  > **username_3**: @username_0 - You are absolutely correct.  My main objectives are that the *undergrads* come out with either (a) a basic understanding which can later give them capacity to decide what is an ML problem and what is not or (b) an interest to pursue the topic further (and perhaps enroll in the advanced course later.  My experience with any student below undergrad level is far and in between (no more than a handful of hour with students preparing for A-levels, on a voluntary basis).  
  > **username_4**: @BrianTompsett-汤莱恩 Fixed!  And thank you.  Somehow, only the last one confused me, so I didn't even notice the others.  
  
  ---
  
  